From 7f6836497febd5006510f4e1e80e4cf365e5d58a Mon Sep 17 00:00:00 2001 From: Steven Eubank Date: Tue, 29 Apr 2025 12:23:22 +0200 Subject: [PATCH 1/3] add docs for supabase integration --- .../configuration/integrations/supabase.mdx | 132 ++++++++++++++++++ .../integrations/javascript.astro.mdx | 1 + .../integrations/javascript.bun.mdx | 1 + .../integrations/javascript.deno.mdx | 1 + .../integrations/javascript.fastify.mdx | 3 +- .../integrations/javascript.gatsby.mdx | 1 + .../integrations/javascript.gcp-functions.mdx | 2 +- .../integrations/javascript.hapi.mdx | 1 + .../configuration/integrations/javascript.mdx | 1 + .../integrations/javascript.nestjs.mdx | 2 + .../integrations/javascript.nextjs.mdx | 1 + .../integrations/javascript.node.mdx | 25 ++-- .../integrations/javascript.nuxt.mdx | 1 + .../integrations/javascript.remix.mdx | 1 + .../integrations/javascript.solidstart.mdx | 1 + .../integrations/javascript.sveltekit.mdx | 1 + 16 files changed, 161 insertions(+), 14 deletions(-) create mode 100644 docs/platforms/javascript/common/configuration/integrations/supabase.mdx 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..f28b82fc12794 --- /dev/null +++ b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx @@ -0,0 +1,132 @@ +--- +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 + +### Using the Integration (Recommended) + +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, +}); +``` + +### Using the Instrumentation Method + +The instrumentation method is available for specific use cases where the integration method isn't suitable: + +```javascript +import * as Sentry from '@sentry/browser'; +import { createClient } from '@supabase/supabase-js'; + +const supabaseClient = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_KEY'); +Sentry.instrumentSupabaseClient(supabaseClient); +``` + +Use this method when: +- You need to instrument a Supabase client that was created before Sentry was initialized +- You want to add instrumentation to multiple Supabase clients at different times +- You're working in a codebase where you can't modify the Sentry initialization +- You need to add instrumentation dynamically after the application has started +- You're working with a legacy codebase where modifying the Sentry initialization is difficult + +## 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). + + +## 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) | | ✓ | ✓ | ✓ | From a3635f74b53efd822bad5f391f4cc93bb185f4e5 Mon Sep 17 00:00:00 2001 From: Steven Eubank <47563310+smeubank@users.noreply.github.com> Date: Wed, 30 Apr 2025 09:44:57 +0200 Subject: [PATCH 2/3] Update docs/platforms/javascript/common/configuration/integrations/supabase.mdx Co-authored-by: Onur Temizkan --- .../javascript/common/configuration/integrations/supabase.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/supabase.mdx b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx index f28b82fc12794..027cdf8b57866 100644 --- a/docs/platforms/javascript/common/configuration/integrations/supabase.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx @@ -116,7 +116,7 @@ These spans are used to populate Sentry's [Query Insights](/product/insights/bac ### 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). +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 From 1cc65fb0113ec93eb09a47624f4dfe69977d397b Mon Sep 17 00:00:00 2001 From: Steven Eubank Date: Wed, 30 Apr 2025 09:47:57 +0200 Subject: [PATCH 3/3] reduce removing this for now, i think we can can discuss if it really helps to enhance hte docs later. For now I think it is a distraction ```### Using the Instrumentation Method The instrumentation method is available for specific use cases where the integration method isn't suitable: ```javascript import * as Sentry from '@sentry/browser'; import { createClient } from '@supabase/supabase-js'; const supabaseClient = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_KEY'); Sentry.instrumentSupabaseClient(supabaseClient); ``` Use this method when: - You need to instrument a Supabase client that was created before Sentry was initialized - You want to add instrumentation to multiple Supabase clients at different times - You're working in a codebase where you can't modify the Sentry initialization - You need to add instrumentation dynamically after the application has started - You're working with a legacy codebase where modifying the Sentry initialization is difficult ``` --- .../configuration/integrations/supabase.mdx | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/supabase.mdx b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx index 027cdf8b57866..50d90a2a30a65 100644 --- a/docs/platforms/javascript/common/configuration/integrations/supabase.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/supabase.mdx @@ -37,8 +37,6 @@ You need to have both the Sentry SDK and the Supabase library installed. For Sup ## Configuration -### Using the Integration (Recommended) - This is the preferred method for most use cases. and follows Sentry's standard integration pattern. ```javascript @@ -57,25 +55,6 @@ Sentry.init({ }); ``` -### Using the Instrumentation Method - -The instrumentation method is available for specific use cases where the integration method isn't suitable: - -```javascript -import * as Sentry from '@sentry/browser'; -import { createClient } from '@supabase/supabase-js'; - -const supabaseClient = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_KEY'); -Sentry.instrumentSupabaseClient(supabaseClient); -``` - -Use this method when: -- You need to instrument a Supabase client that was created before Sentry was initialized -- You want to add instrumentation to multiple Supabase clients at different times -- You're working in a codebase where you can't modify the Sentry initialization -- You need to add instrumentation dynamically after the application has started -- You're working with a legacy codebase where modifying the Sentry initialization is difficult - ## Generated Spans The integration provides comprehensive monitoring for both authentication and database operations: