fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24
, '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

fix(node): Fix Spotlight configuration precedence to match specification - #18195

Merged
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix
Nov 13, 2025
Merged

fix(node): Fix Spotlight configuration precedence to match specification#18195
BYK merged 4 commits into
developfrom
feat/node-spotlight-precedence-fix

Conversation

@BYK

@BYKBYK commented Nov 13, 2025

Copy link
Copy Markdown
Member

Problem

The Spotlight configuration logic had a precedence bug where when spotlight: true was set in config AND the SENTRY_SPOTLIGHT environment variable contained a URL string, the SDK would incorrectly use true instead of the URL from the environment variable.

According to the Spotlight specification, when spotlight: true is set and the env var contains a URL, the URL from the env var should be used to allow developers to override the Spotlight URL via environment variables.

Previous behavior:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = true ❌ (incorrect)

Expected behavior per spec:

// Config: spotlight: true// Env: SENTRY_SPOTLIGHT=http://custom:3000/stream// Result: spotlight = "http://custom:3000/stream" ✅ (correct)

Solution

Fixed the precedence logic in getClientOptions() to properly implement the specification:

  1. spotlight: false → Always disabled (overrides env var)
  2. spotlight: string → Uses the config URL (ignores env var)
  3. spotlight: true + env var URL → Uses the env var URL (the bug fix)
  4. spotlight: true + env var truthy → Uses default URL
  5. No config + env var → Parses and uses env var

The implementation reuses the existing envToBool() utility to avoid code duplication.

Changes

  • Fixed Spotlight precedence logic in packages/node-core/src/sdk/index.ts
  • Added 12 comprehensive test cases covering all precedence scenarios in packages/node-core/test/sdk/init.test.ts
  • Updated CHANGELOG.md

Test Coverage

The new tests cover:

  • ✅ Env var only: truthy values, falsy values, URL strings
  • ✅ Config only: true, false, URL string
  • ✅ Precedence: config false overrides env var (URL, truthy, falsy)
  • ✅ Precedence: config URL overrides env var
  • ✅ Precedence: config true + env var URL uses env var URL (the fix)
  • ✅ Precedence: config true + env var truthy uses default URL

Related

The Spotlight configuration logic had a precedence bug where when
'spotlight: true' was set AND the 'SENTRY_SPOTLIGHT' env var contained
a URL string, the SDK would use 'true' instead of the URL from the env var.
According to the Spotlight specification, when 'spotlight: true' is set
and the env var contains a URL, the URL should be used.
Changes:
- Fixed precedence logic in getClientOptions() to properly handle the
case where config is 'true' and env var is a URL string
- Added 12 comprehensive test cases covering all precedence scenarios
- Reused existing envToBool() utility for env var parsing
Fixes the issue where developers couldn't override the Spotlight URL
via environment variable when using 'spotlight: true' in config.
@BYK
BYK requested review from Lms24 and andreiborzaNovember 13, 2025 13:02
@github-actions

github-actionsBot commented Nov 13, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser24.6 kB--
@sentry/browser - with treeshaking flags23.09 kB--
@sentry/browser (incl. Tracing)41.26 kB--
@sentry/browser (incl. Tracing, Profiling)45.53 kB--
@sentry/browser (incl. Tracing, Replay)79.73 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags69.4 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)84.42 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)96.58 kB--
@sentry/browser (incl. Feedback)41.27 kB--
@sentry/browser (incl. sendFeedback)29.27 kB--
@sentry/browser (incl. FeedbackAsync)34.2 kB--
@sentry/react26.29 kB--
@sentry/react (incl. Tracing)43.22 kB--
@sentry/vue29.09 kB--
@sentry/vue (incl. Tracing)43.03 kB--
@sentry/svelte24.61 kB--
CDN Bundle26.9 kB--
CDN Bundle (incl. Tracing)41.81 kB--
CDN Bundle (incl. Tracing, Replay)78.33 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)83.81 kB--
CDN Bundle - uncompressed78.84 kB--
CDN Bundle (incl. Tracing) - uncompressed124 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed240.03 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed252.79 kB--
@sentry/nextjs (client)45.34 kB--
@sentry/sveltekit (client)41.64 kB--
@sentry/node-core50.86 kB+0.1%+47 B 🔺
@sentry/node158.04 kB+0.03%+44 B 🔺
@sentry/node - without tracing92.73 kB+0.06%+49 B 🔺
@sentry/aws-serverless106.5 kB+0.05%+46 B 🔺

View base workflow run

@github-actions

github-actionsBot commented Nov 13, 2025

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 Baseline8,997-8,922+1%
GET With Sentry1,33315%1,350-1%
GET With Sentry (error only)5,90866%6,147-4%
POST Baseline1,185-1,205-2%
POST With Sentry50743%524-3%
POST With Sentry (error only)1,07591%1,072+0%
MYSQL Baseline3,317-3,368-2%
MYSQL With Sentry46814%517-9%
MYSQL With Sentry (error only)2,71482%2,772-2%

View base workflow run

Before submitting a pull request, please take a look at our
[Contributing](https://github.com/getsentry/sentry-javascript/blob/master/CONTRIBUTING.md)
guidelines and verify:
- [x] If you've added code that should be tested, please add tests.
- [x] Ensure your code lints and the test suite passes (`yarn lint`) &
(`yarn test`).
Fixes a test failure where `process.env.SENTRY_SPOTLIGHT` was not
cleaned up after a test, causing environment variable pollution for
subsequent tests.
The failing test expected `spotlight: true` to resolve to `true`, but
due to the lingering environment variable, it received the URL from
`SENTRY_SPOTLIGHT` instead.
This PR adds an `afterEach` hook to the `spotlight configuration`
describe block to ensure `process.env.SENTRY_SPOTLIGHT` is deleted after
each test, preventing cross-test contamination.
---
<a
href="https://cursor.com/background-agent?bcId=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-cursor-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in
Cursor"
src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a
href="https://cursor.com/agents?id=bc-9f9696f9-3843-4420-b2e9-26aedf9b0e2e"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/open-in-web-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web"
src="https://cursor.com/open-in-web.svg"></picture></a>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>

@Lms24Lms24 left a comment

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.

LGTM! Thanks!

you can bump the size limit config for the failing entry here:

{
name: '@sentry/node',
path: 'packages/node/build/esm/index.js',
import: createImport('init'),
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
gzip: true,
limit: '158 KB',
},

Feel free to go with 160 or so (I already have that as a limit on a branch of mine, so we'll get there anyway).

@BYK
BYK enabled auto-merge (squash) November 13, 2025 15:30
@BYK
BYK merged commit c8ca286 into developNov 13, 2025
141 checks passed
@BYK
BYK deleted the feat/node-spotlight-precedence-fix branch November 13, 2025 15:41
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

@BYK@Lms24