feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(core,cloudflare): Enable certain fields with env variables - #19245

Merged
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf
Feb 10, 2026
Merged

feat(core,cloudflare): Enable certain fields with env variables#19245
JPeer264 merged 4 commits into
developfrom
jp/env-variables-in-cf

Conversation

@JPeer264

Copy link
Copy Markdown
Member

It was not possible to use env variables for the Cloudflare SDK. This adds a subset of env variables to enable certain features just with env variables (not everything is yet supported - we should wait what gets supported once that PR lands).

This PR is important for #19215.

@JPeer264JPeer264 self-assigned this Feb 10, 2026
CfHostMetadata
>,
>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {
>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: I made this return undefined as it was also working before theoretically. I adapted the types to also allow undefined just to have this case also handled

Comment threadpackages/cloudflare/src/options.ts Outdated
: undefined;

return { release, ...userOptions };
const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env variable name typo: missing 'S' in TRACES

High Severity

The code reads SENTRY_TRACE_SAMPLE_RATE (missing the 'S' in "TRACES"), but the standard Sentry env variable name is SENTRY_TRACES_SAMPLE_RATE. The tests also use SENTRY_TRACES_SAMPLE_RATE. This mismatch means the traces sample rate env variable will never be read, making the feature non-functional. This also means the related tests will fail.

Fix in CursorFix in Web

tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
release,
...userOptions,
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Spread operator overrides env-derived fallback values

Medium Severity

The ...userOptions spread at the end of the return object overrides the env-derived fallback values for dsn, environment, and tracesSampleRate whenever those keys exist in userOptions — even if their values are undefined. This means if a user passes { dsn: undefined }, the SENTRY_DSN env fallback is silently ignored. The ?? fallback logic and the isFinite guard are both bypassed by the spread.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊


Generated by Codecov Action

const tracesSampleRate = userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACE_SAMPLE_RATE') ?? '');

return {
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

l: can we also add SENTRY_DEBUG? You could use envToBool for that from node-core, maybe lift that up into @sentry/core?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Great idea. Added.

I also added tunnel to it

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

envToBool(undefined) forces debug: false when unset

Medium Severity

When SENTRY_DEBUG is absent from env, getEnvVar returns undefined, and envToBool(undefined) returns false (since Boolean(undefined) is false in loose mode). This means debug is always explicitly set to false in the returned options, even when neither the user nor the env specified it. This breaks multiple existing toEqual assertions (e.g., lines 29, 120, 132) that don't expect a debug property.

Fix in CursorFix in Web

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser25.56 kB--
@sentry/browser - with treeshaking flags24.08 kB--
@sentry/browser (incl. Tracing)42.36 kB--
@sentry/browser (incl. Tracing, Profiling)47.03 kB--
@sentry/browser (incl. Tracing, Replay)81.18 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags70.8 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)85.87 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)98.03 kB--
@sentry/browser (incl. Feedback)42.29 kB--
@sentry/browser (incl. sendFeedback)30.23 kB--
@sentry/browser (incl. FeedbackAsync)35.22 kB--
@sentry/browser (incl. Metrics)26.74 kB--
@sentry/browser (incl. Logs)26.88 kB--
@sentry/browser (incl. Metrics & Logs)27.56 kB--
@sentry/react27.33 kB--
@sentry/react (incl. Tracing)44.7 kB--
@sentry/vue30.01 kB--
@sentry/vue (incl. Tracing)44.21 kB--
@sentry/svelte25.58 kB--
CDN Bundle28.11 kB--
CDN Bundle (incl. Tracing)43.2 kB--
CDN Bundle (incl. Logs, Metrics)28.95 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)44.03 kB--
CDN Bundle (incl. Replay, Logs, Metrics)68.02 kB--
CDN Bundle (incl. Tracing, Replay)80.07 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)80.94 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)85.5 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)86.4 kB--
CDN Bundle - uncompressed82.22 kB--
CDN Bundle (incl. Tracing) - uncompressed127.93 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed85.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed130.76 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed208.71 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed244.81 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed247.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed257.61 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed260.42 kB--
@sentry/nextjs (client)47.04 kB--
@sentry/sveltekit (client)42.81 kB--
@sentry/node-core52.17 kB-0.01%-5 B 🔽
@sentry/node166.52 kB-0.01%-11 B 🔽
@sentry/node - without tracing93.96 kB-0.01%-7 B 🔽
@sentry/aws-serverless109.45 kB-0.02%-16 B 🔽

View base workflow run

@github-actions

github-actionsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

ScenarioRequests/s% of BaselinePrev. Requests/sChange %
GET Baseline9,302-9,067+3%
GET With Sentry1,77019%1,737+2%
GET With Sentry (error only)6,27767%6,080+3%
POST Baseline1,179-1,201-2%
POST With Sentry57449%587-2%
POST With Sentry (error only)1,04989%1,057-1%
MYSQL Baseline3,349-3,317+1%
MYSQL With Sentry53316%491+9%
MYSQL With Sentry (error only)2,76883%2,719+2%

View base workflow run

@JPeer264JPeer264 changed the title feat(cloudflare): Enable certain fields with env variablesfeat(core,cloudflare): Enable certain fields with env variablesFeb 10, 2026
};

// Mock env without DSN for tests that should not initialize the SDK
const MOCK_ENV_WITHOUT_DSN = {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

note: It seems that the SDK was not initialized for the tests where this is used. By now also allowing SENTRY_DSN from the variables these tests fail. I'll create a follow up PR and remove this, so the SDK is actually initialized (I don't want to blow up this PR with other code changes)

@JPeer264
JPeer264force-pushed the jp/env-variables-in-cf branch from b7264d0 to 6c2f692CompareFebruary 10, 2026 16:53
@JPeer264
JPeer264 merged commit 197369d into developFeb 10, 2026
219 checks passed
@JPeer264
JPeer264 deleted the jp/env-variables-in-cf branch February 10, 2026 17:54
Sign up for freeto 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.

2 participants

@JPeer264@andreiborza