diff --git a/docs/platforms/javascript/common/configuration/integrations/supabase.mdx b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx new file mode 100644 index 0000000000000..50d90a2a30a65 --- /dev/null +++ b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx @@ -0,0 +1,111 @@ +--- +title: Supabase +description: "Adds instrumentation for Supabase client operations." +supported: + - javascript.browser + - javascript.node + - javascript.aws-lambda + - javascript.azure-functions + - javascript.connect + - javascript.express + - javascript.fastify + - javascript.gcp-functions + - javascript.hapi + - javascript.hono + - javascript.koa + - javascript.nestjs + - javascript.electron + - javascript.nextjs + - javascript.nuxt + - javascript.solidstart + - javascript.sveltekit + - javascript.remix + - javascript.react-router + - javascript.astro + - javascript.bun + - javascript.tanstackstart-react +--- + +_Import name: `Sentry.supabaseIntegration`_ + +The `supabaseIntegration` adds instrumentation for the Supabase client to capture spans for both authentication and database operations. + +## Installation + +You need to have both the Sentry SDK and the Supabase library installed. For Supabase installation instructions, refer to the [Supabase JavaScript documentation](https://supabase.com/docs/reference/javascript/introduction). + + +## Configuration + +This is the preferred method for most use cases. and follows Sentry's standard integration pattern. + +```javascript +import * as Sentry from '@sentry/browser'; +import { createClient } from '@supabase/supabase-js'; + +const supabaseClient = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_KEY'); + +Sentry.init({ + dsn: 'YOUR_DSN', + integrations: [ + Sentry.browserTracingIntegration(), + Sentry.supabaseIntegration({ supabaseClient }) + ], + tracesSampleRate: 1.0, +}); +``` + +## Generated Spans + +The integration provides comprehensive monitoring for both authentication and database operations: + +### Authentication Spans + +The integration automatically instruments the following auth operations: +- `signInWithPassword` +- `signOut` +- `signInAnonymously` +- `signInWithOAuth` +- `signInWithIdToken` +- `signInWithOtp` +- `signInWithSSO` +- `signUp` +- `verifyOtp` +- `reauthenticate` + +Admin operations are also instrumented: +- `createUser` +- `deleteUser` +- `listUsers` +- `getUserById` +- `updateUserById` +- `inviteUserByEmail` + +### Database Operation Spans + +These spans are used to populate Sentry's [Query Insights](/product/insights/backend/queries/) feature, which provides performance metrics and analysis for your database operations. With Query Insights, you can identify slow queries, track query frequency, and optimize your database interactions. + +- `db.table`: The table being queried +- `db.schema`: The database schema +- `db.url`: The Supabase instance URL +- `db.sdk`: Client information +- `db.system`: Set to 'postgresql' +- `db.query`: The query parameters +- `db.body`: The request body (for mutations) + +### Queue Operation Spans (in progress) + +Coming soon, the Sentry SDK will also support generating spans for interactions with Supabase queues. For more information, please follow [this GitHub issue](https://github.com/getsentry/sentry-javascript/issues/14611). + + +## Error Tracking + +The integration automatically: +- Captures errors from failed operations +- Adds breadcrumbs for database operations +- Includes detailed context about the operation that failed + + +## Supported Versions + +- `@supabase/supabase-js`: `>=2.0.0` \ No newline at end of file diff --git a/platform-includes/configuration/integrations/javascript.astro.mdx b/platform-includes/configuration/integrations/javascript.astro.mdx index 4da10499a6368..6c0571de729c9 100644 --- a/platform-includes/configuration/integrations/javascript.astro.mdx +++ b/platform-includes/configuration/integrations/javascript.astro.mdx @@ -40,6 +40,7 @@ Depending on whether an integration enhances the functionality of a particular r | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | ### Node.js Integrations diff --git a/platform-includes/configuration/integrations/javascript.bun.mdx b/platform-includes/configuration/integrations/javascript.bun.mdx index 8a2e29fd332e2..efb5c1249e453 100644 --- a/platform-includes/configuration/integrations/javascript.bun.mdx +++ b/platform-includes/configuration/integrations/javascript.bun.mdx @@ -34,4 +34,5 @@ | [`knexIntegration`](./knex) | | | ✓ | | | [`prismaIntegration`](./prisma) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | diff --git a/platform-includes/configuration/integrations/javascript.deno.mdx b/platform-includes/configuration/integrations/javascript.deno.mdx index e24387ac73207..bd9fb65d4d7e2 100644 --- a/platform-includes/configuration/integrations/javascript.deno.mdx +++ b/platform-includes/configuration/integrations/javascript.deno.mdx @@ -14,4 +14,5 @@ | [`denoCronIntegration`](./denocron) | | | | ✓ | | | [`extraErrorDataIntegration`](./extraerrordata) | | | | | ✓ | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | | ✓ | diff --git a/platform-includes/configuration/integrations/javascript.fastify.mdx b/platform-includes/configuration/integrations/javascript.fastify.mdx index ddf16015b6af7..32c127738c2d4 100644 --- a/platform-includes/configuration/integrations/javascript.fastify.mdx +++ b/platform-includes/configuration/integrations/javascript.fastify.mdx @@ -39,4 +39,5 @@ | [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | | [`prismaIntegration`](./prisma) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | -| [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | +| [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | \ No newline at end of file diff --git a/platform-includes/configuration/integrations/javascript.gatsby.mdx b/platform-includes/configuration/integrations/javascript.gatsby.mdx index d82edd29f5f8b..0a90bc81010ec 100644 --- a/platform-includes/configuration/integrations/javascript.gatsby.mdx +++ b/platform-includes/configuration/integrations/javascript.gatsby.mdx @@ -22,3 +22,4 @@ | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`replayCanvasIntegration`](./replaycanvas) | | | | ✓ | | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | diff --git a/platform-includes/configuration/integrations/javascript.gcp-functions.mdx b/platform-includes/configuration/integrations/javascript.gcp-functions.mdx index daa1ca1695878..fa1001bee4fe5 100644 --- a/platform-includes/configuration/integrations/javascript.gcp-functions.mdx +++ b/platform-includes/configuration/integrations/javascript.gcp-functions.mdx @@ -40,4 +40,4 @@ | [`requestDataIntegration`](./requestdata) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | | [`tediousIntegration`](./tedious) | | | ✓ | | -| [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | +| [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | \ No newline at end of file diff --git a/platform-includes/configuration/integrations/javascript.hapi.mdx b/platform-includes/configuration/integrations/javascript.hapi.mdx index fa1551e775236..8f1a6e1ceff60 100644 --- a/platform-includes/configuration/integrations/javascript.hapi.mdx +++ b/platform-includes/configuration/integrations/javascript.hapi.mdx @@ -39,4 +39,5 @@ | [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | | [`prismaIntegration`](./prisma) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | diff --git a/platform-includes/configuration/integrations/javascript.mdx b/platform-includes/configuration/integrations/javascript.mdx index e1e7adbc25f9c..d9d89c82c20e1 100644 --- a/platform-includes/configuration/integrations/javascript.mdx +++ b/platform-includes/configuration/integrations/javascript.mdx @@ -26,4 +26,5 @@ | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | diff --git a/platform-includes/configuration/integrations/javascript.nestjs.mdx b/platform-includes/configuration/integrations/javascript.nestjs.mdx index e644c3c8795e8..9d2e65ad6b402 100644 --- a/platform-includes/configuration/integrations/javascript.nestjs.mdx +++ b/platform-includes/configuration/integrations/javascript.nestjs.mdx @@ -39,4 +39,6 @@ | [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | | [`prismaIntegration`](./prisma) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | +| [`unleashIntegration`](./unleash) | | | | | ✓ | \ No newline at end of file diff --git a/platform-includes/configuration/integrations/javascript.nextjs.mdx b/platform-includes/configuration/integrations/javascript.nextjs.mdx index 635bf80dbe00c..ef2389b7976d0 100644 --- a/platform-includes/configuration/integrations/javascript.nextjs.mdx +++ b/platform-includes/configuration/integrations/javascript.nextjs.mdx @@ -40,6 +40,7 @@ Depending on whether an integration enhances the functionality of a particular r | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | ### Server (Node.js, Edge) Integrations diff --git a/platform-includes/configuration/integrations/javascript.node.mdx b/platform-includes/configuration/integrations/javascript.node.mdx index de72bf4a77c0e..eedb95571e948 100644 --- a/platform-includes/configuration/integrations/javascript.node.mdx +++ b/platform-includes/configuration/integrations/javascript.node.mdx @@ -3,39 +3,40 @@ | | **Auto Enabled** | **Errors** | **Tracing** | **Additional Context** | | --------------------------------------------------------- | :--------------: | :--------: | :---------: | :--------------------: | | [`amqplibIntegration`](./amqplib) | ✓ | | ✓ | | +| [`anrIntegration`](./anr) | | ✓ | | | +| [`captureConsoleIntegration`](./captureconsole) | | | | ✓ | +| [`childProcessIntegration`](./childProcess) | ✓ | | | ✓ | | [`consoleIntegration`](./console) | ✓ | | | ✓ | | [`contextLinesIntegration`](./contextlines) | ✓ | ✓ | | | +| [`dataloaderIntegration`](./dataloader) | | | ✓ | | | [`dedupeIntegration`](./dedupe) | ✓ | ✓ | | | +| [`extraErrorDataIntegration`](./extraerrordata) | | | | ✓ | +| [`fsIntegration`](./fs) | | | ✓ | | | [`functionToStringIntegration`](./functiontostring) | ✓ | | | | | [`genericPoolIntegration`](./genericpool) | ✓ | | ✓ | | | [`graphqlIntegration`](./graphql) | ✓ | | ✓ | | | [`httpIntegration`](./http) | ✓ | ✓ | ✓ | ✓ | | [`inboundFiltersIntegration`](./inboundfilters) | ✓ | ✓ | | | | [`kafkaIntegration`](./kafka) | ✓ | | ✓ | | +| [`knexIntegration`](./knex) | | | ✓ | | | [`linkedErrorsIntegration`](./linkederrors) | ✓ | ✓ | | | +| [`localVariablesIntegration`](./localvariables) | | ✓ | | | | [`lruMemoizerIntegration`](./lrumemoizer) | ✓ | | ✓ | | | [`modulesIntegration`](./modules) | ✓ | | | ✓ | | [`mongoIntegration`](./mongo) | ✓ | | ✓ | | | [`mongooseIntegration`](./mongoose) | ✓ | | ✓ | | | [`mysqlIntegration`](./mysql) | ✓ | | ✓ | | | [`mysql2Integration`](./mysql2) | ✓ | | ✓ | | -| [`nodeContextIntegration`](./nodecontext) | ✓ | | | ✓ | | [`nativeNodeFetchIntegration`](./nodefetch) | ✓ | | ✓ | ✓ | +| [`nodeContextIntegration`](./nodecontext) | ✓ | | | ✓ | +| [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | | [`onUncaughtExceptionIntegration`](./onuncaughtexception) | ✓ | ✓ | | | | [`onUnhandledRejectionIntegration`](./unhandledrejection) | ✓ | ✓ | | | | [`postgresIntegration`](./postgres) | ✓ | | ✓ | | +| [`prismaIntegration`](./prisma) | | | ✓ | | | [`redisIntegration`](./redis) | ✓ | | ✓ | | | [`requestDataIntegration`](./requestdata) | ✓ | | ✓ | | -| [`tediousIntegration`](./tedious) | ✓ | | ✓ | | -| [`childProcessIntegration`](./childProcess) | ✓ | | | ✓ | -| [`anrIntegration`](./anr) | | ✓ | | | -| [`captureConsoleIntegration`](./captureconsole) | | | | ✓ | -| [`dataloaderIntegration`](./dataloader) | | | ✓ | | -| [`extraErrorDataIntegration`](./extraerrordata) | | | | ✓ | -| [`fsIntegration`](./fs) | | | ✓ | | -| [`knexIntegration`](./knex) | | | ✓ | | -| [`localVariablesIntegration`](./localvariables) | | ✓ | | | -| [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | -| [`prismaIntegration`](./prisma) | | | ✓ | | | [`rewriteFramesIntegration`](./rewriteframes) | | ✓ | | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | +| [`tediousIntegration`](./tedious) | ✓ | | ✓ | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ | diff --git a/platform-includes/configuration/integrations/javascript.nuxt.mdx b/platform-includes/configuration/integrations/javascript.nuxt.mdx index 64062fc284adf..cf6c561eb0739 100644 --- a/platform-includes/configuration/integrations/javascript.nuxt.mdx +++ b/platform-includes/configuration/integrations/javascript.nuxt.mdx @@ -39,6 +39,7 @@ Depending on whether an integration enhances the functionality of a particular r | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | ### Node.js Integrations diff --git a/platform-includes/configuration/integrations/javascript.remix.mdx b/platform-includes/configuration/integrations/javascript.remix.mdx index cc47d93ae2f05..3983129e3df34 100644 --- a/platform-includes/configuration/integrations/javascript.remix.mdx +++ b/platform-includes/configuration/integrations/javascript.remix.mdx @@ -39,6 +39,7 @@ Depending on whether an integration enhances the functionality of a particular r | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | ### Node.js Integrations diff --git a/platform-includes/configuration/integrations/javascript.solidstart.mdx b/platform-includes/configuration/integrations/javascript.solidstart.mdx index 9fb73e20f2115..e37696a04c53d 100644 --- a/platform-includes/configuration/integrations/javascript.solidstart.mdx +++ b/platform-includes/configuration/integrations/javascript.solidstart.mdx @@ -39,6 +39,7 @@ Depending on whether an integration enhances the functionality of a particular r | [`replayIntegration`](./replay) | | | | ✓ | ✓ | | [`reportingObserverIntegration`](./reportingobserver) | | ✓ | | | | | [`statsigIntegration`](./statsig) | | | | | ✓ | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`unleashIntegration`](./unleash) | | | | | ✓ | ### Node.js Integrations diff --git a/platform-includes/configuration/integrations/javascript.sveltekit.mdx b/platform-includes/configuration/integrations/javascript.sveltekit.mdx index b727396ba84e8..e76bbc4544c31 100644 --- a/platform-includes/configuration/integrations/javascript.sveltekit.mdx +++ b/platform-includes/configuration/integrations/javascript.sveltekit.mdx @@ -75,4 +75,5 @@ Depending on whether an integration enhances the functionality of a particular r | [`localVariablesIntegration`](./localvariables) | | ✓ | | | | [`nodeProfilingIntegration`](./nodeprofiling) | | | ✓ | | | [`prismaIntegration`](./prisma) | | | ✓ | | +| [`supabaseIntegration`](./supabase) | | ✓ | ✓ | | | | [`trpcMiddleware`](./trpc) | | ✓ | ✓ | ✓ |