Skip to content

fix(cloudflare): Do not add back channel integrations the user removed - #25585

Open
isaacs wants to merge 1 commit into
isaacschlueter/js-3973-cloudflare-export-channel-integrationsfrom
isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed
Open

isaacs wants to merge 1 commit into
isaacschlueter/js-3973-cloudflare-export-channel-integrationsfrom
isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed

Conversation

@isaacs

@isaacs isaacs commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

The @sentry/cloudflare/vite plugin stores an integration factory for each instrumented package when the package first runs. At init(), the SDK adds the stored factories to the defaults. A package that runs after init(), for example a driver loaded with a dynamic import(), emits orchestrion.module-injected, and the SDK then called client.addIntegration(factory()).

That handler did not check the user's options, so it ignored each way to opt out: an integrations function that filtered the integration out, defaultIntegrations: false, and a custom defaultIntegrations list. The user got the integration back. For the AI integrations, that can turn prompt and response capture back on. Whether it happened depended on module load order.

The handler now applies the rules that init() applies to the defaults:

  • If the user set defaultIntegrations, the SDK defaults are off, so the handler adds nothing.
  • If integrations is a function, the handler passes the late integration through it with getIntegrationsToSetup and installs the result with the same name, if there is one. This calls the function again, once for each late module. If the function throws, the handler skips the integration, so the module load that emitted the event still works.
  • If integrations is an array, nothing changes. An array cannot remove a default, and addIntegration already skips a name the user configured.

Fixes #25576
Fixes JS-3974

@linear-code

linear-code Bot commented Oct 20, 2026

Copy link
Copy Markdown

JS-3974

@isaacs
isaacs added this pull request to stack #25589 October 20, 2026 22:30
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

size-limit report 📦

Compared: 465f86a (PR test merge using develop at 02bd99d)

Against: b3e0c9e (develop) · base run #63030

⚠️ Baseline mismatch: 12 develop commit(s) in the PR build are missing from the baseline. Their size changes also affect this comparison. Compare commits. Re-run once develop's baseline build for 02bd99d finishes.

Path Size % Change Change
@sentry/browser 29.91 kB - -
@sentry/browser - with treeshaking flags 28.05 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 27.95 kB - -
@sentry/browser (incl. Tracing) 52.1 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 52.1 kB - -
@sentry/browser (incl. Tracing, Profiling) 55.05 kB - -
@sentry/browser (incl. Tracing, Replay) 91.85 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 80.72 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 96.58 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 109.52 kB - -
@sentry/browser (incl. Feedback) 47.42 kB - -
@sentry/browser (incl. sendFeedback) 34.97 kB - -
@sentry/browser (incl. FeedbackAsync) 40.07 kB - -
@sentry/browser (incl. Metrics) 30.93 kB - -
@sentry/browser (incl. Logs) 31.21 kB - -
@sentry/browser (incl. Metrics & Logs) 31.84 kB - -
@sentry/react 31.74 kB - -
@sentry/react (incl. Tracing) 54.42 kB - -
@sentry/vue 38.07 kB - -
@sentry/vue (incl. Tracing) 55.03 kB - -
@sentry/svelte 29.93 kB - -
@sentry/remix (Remix 3 client bundle) 57.11 kB - -
CDN Bundle 31.67 kB - -
CDN Bundle (incl. Tracing) 52.61 kB - -
CDN Bundle (incl. Logs, Metrics) 33.87 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 54.55 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 74.79 kB - -
CDN Bundle (incl. Tracing, Replay) 90.28 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 92.21 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 96.42 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 98.37 kB - -
CDN Bundle - uncompressed 93.29 kB - -
CDN Bundle (incl. Tracing) - uncompressed 156.14 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 99.84 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 162.11 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 229.88 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 276.31 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 282.26 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 290.01 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 295.96 kB - -
@sentry/nextjs (client) 57.31 kB - -
@sentry/sveltekit (client) 52.48 kB - -
@sentry/core/server 41.85 kB - -
@sentry/core/browser 13.81 kB - -
@sentry/node 152.87 kB +0.13% +195 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection) 81.58 kB - -
@sentry/node - without tracing 94.4 kB +0.17% +153 B 🔺
@sentry/node - without channel injection 133.52 kB +0.13% +173 B 🔺
@sentry/aws-serverless 102.65 kB +0.17% +174 B 🔺
@sentry/cloudflare (withSentry) - minified 212.78 kB +0.8% +1.67 kB 🔺
@sentry/cloudflare (withSentry) 527.48 kB +0.7% +3.65 kB 🔺
@sentry/nextjs/cloudflare (withSentry) - minified 232.34 kB +0.7% +1.6 kB 🔺

View base workflow run

@isaacs

isaacs commented Oct 21, 2026

Copy link
Copy Markdown
Member Author

Bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit abb4fe2. Configure here.

@isaacs
isaacs marked this pull request as ready for review October 21, 2026 00:44
@isaacs
isaacs requested a review from a team as a code owner October 21, 2026 00:44
@isaacs
isaacs requested review from JPeer264 and mydea and removed request for a team October 21, 2026 00:44
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from 17f3007 to 1ec6d31 Compare October 21, 2026 01:07
@isaacs
isaacs requested a review from a team as a code owner October 21, 2026 01:13
@isaacs
isaacs requested review from s1gr1d and removed request for a team October 21, 2026 01:13
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from 1ec6d31 to 5097841 Compare October 21, 2026 01:13
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch 4 times, most recently from f20e973 to e725255 Compare October 21, 2026 14:16
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Optional E2E tests

All optional checks were successful. 32 successful. See the run.

Successful checks
Check Status
✅ CI: Optional E2E Tests / E2E nextjs-14 (latest) Test (optional) Successful in 6m Details
✅ CI: Optional E2E Tests / E2E nuxt-4 (canary) Test (optional) Successful in 5m Details
✅ CI: Optional E2E Tests / E2E cloudflare-pi-durable (latest) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (canary, webpack) Test (optional) Successful in 8m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (canary, turbopack) Test (optional) Successful in 8m Details
✅ CI: Optional E2E Tests / E2E gen-ai-libraries Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nuxt-4-static (canary) Test (optional) Successful in 5m Details
✅ CI: Optional E2E Tests / E2E nextjs-16-standalone (canary, turbopack) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E cloudflare-mastra Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E nextjs-15 (latest) Test (optional) Successful in 5m Details
✅ CI: Optional E2E Tests / E2E nextjs-14 (canary) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E cloudflare-agent Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E gen-ai-libraries (cloudflare) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E cloudflare-workers-send-to-sentry Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (vinext) Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E cloudflare-flue-send-to-sentry Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E nextjs-16-tunnel (cloudflare) Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E cloudflare-think Test (optional) Successful in 56s Details
✅ CI: Optional E2E Tests / E2E nuxt-5 Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (vinext, bun) Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps (client source maps kept) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nuxt-3 (canary) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nextjs-15 (turbo) Test (optional) Successful in 6m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (deno) Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E cloudflare-pi-durable Test (optional) Successful in 2m Details
✅ CI: Optional E2E Tests / E2E nextjs-16 (cloudflare, latest) Test (optional) Successful in 3m Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps Test (optional) Successful in 35s Details
✅ CI: Optional E2E Tests / E2E cloudflare-think (ai v6) Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E tanstackstart-react-cloudflare Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E nextjs-orpc Test (optional) Successful in 1m Details
✅ CI: Optional E2E Tests / E2E supabase-nextjs Test (optional) Successful in 4m Details
✅ CI: Optional E2E Tests / E2E nuxt-5-sourcemaps (static / nuxt generate) Test (optional) Successful in 43s Details

@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from e725255 to f9f181b Compare October 21, 2026 16:45
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from f9f181b to b7a2eb0 Compare October 21, 2026 16:59
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from b7a2eb0 to adf4a7b Compare October 21, 2026 17:28
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from adf4a7b to e239a55 Compare October 21, 2026 18:27
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from e239a55 to ee5be05 Compare October 21, 2026 18:37
The `@sentry/cloudflare/vite` plugin stores an integration factory for
each instrumented package when the package first runs. At `init()`, the
SDK adds the stored factories to the defaults. A package that runs after
`init()`, for example a driver loaded with a dynamic `import()`, emits
`orchestrion.module-injected`, and the SDK then called
`client.addIntegration(factory())`.

That handler did not check the user's options, so it ignored each way
to opt out: an `integrations` function that filtered the integration
out, `defaultIntegrations: false`, and a custom `defaultIntegrations`
list. The user got the integration back. For the AI integrations, that
can turn prompt and response capture back on. Whether it happened
depended on module load order.

The handler now applies the rules that `init()` applies to the defaults:

- If the user set `defaultIntegrations`, the SDK defaults are off, so
  the handler adds nothing.
- If `integrations` is a function, the handler passes the late
  integration through it with `getIntegrationsToSetup` and installs the
  result with the same name, if there is one. This calls the function
  again, once for each late module. If the function throws, the handler
  skips the integration, so the module load that emitted the event
  still works.
- If `integrations` is an array, nothing changes. An array cannot
  remove a default, and `addIntegration` already skips a name the user
  configured.

Fixes #25576
Fixes JS-3974

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@isaacs
isaacs force-pushed the isaacschlueter/js-3974-cloudflare-adds-back-channel-integrations-the-user-removed branch from ee5be05 to 1a01a04 Compare October 21, 2026 18:40

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cloudflare adds back channel integrations the user removed, when the module loads after  init()

1 participant