Skip to content

Conversation

mydea
Copy link
Member

@mydea mydea commented Sep 5, 2025

This refactors the astro middleware a bit to be more correct & future proof.

Right now, http.server spans are not emitted by the node http integration because import-in-the-middle does not work with Astro. So we emit our own. This PR makes astro ready to also handle the base http.server spans and enhance them with routing information.

It also handles static routes better: these do not emit spans anymore now, and do not continue traces, but instead only propagate the parametrized route to the client, no trace data.

One fundamental problem remains that is not fixed in this PR: Sentry.init() is only injected via page-ssr into SSR pages. This means that only once any SSR page is hit, the server-side part of Sentry is initialized. If you hit a prerendered (static) page first, sentry will not be initialized and thus neither errors are captured nor spans created. For regular prerendered pages this should be fine because we do not need to run anything at runtime there. However, when you hit a prerendered page that has a server-island, the server island (which is dynamic) will not be instrumented either because Sentry is not initialized yet.

I don't think we can fix this with the current set of primitives we have, so this is a future problem to look into...

@mydea mydea requested review from Lms24 and s1gr1d September 5, 2025 09:21
const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;

// if there is an active span, we just want to enhance it with routing data etc.
if (rootSpan && spanToJSON(rootSpan).op === 'http.server') {
Copy link
Member Author

Choose a reason for hiding this comment

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

today this path is never hit as the http integration does not work, but this will become relevant when we adjust this to not need an otel instrumentation anymore. I opted to still make this forwards-compatible change here, for simplicity...

Copy link
Member

Choose a reason for hiding this comment

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

Sounds good to me! Though see my other comment about sub requests. Again, not sure if this is really a concern so we can also just do this for the moment and adjust if necessary.

cursor[bot]

This comment was marked as outdated.

// if there is an active span, we know that this handle call is nested and hence
// we don't create a new domain for it. If we created one, nested server calls would
// create new transactions instead of adding a child span to the currently active span.
if (getActiveSpan()) {
Copy link
Member Author

Choose a reason for hiding this comment

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

I don't know if/where this would happen that the http.server span would be nested, could not find any case of this. Even then, I suppose it is not too bad if the isolation scope would be forked again for the sub-request 🤔

Copy link
Member

Choose a reason for hiding this comment

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

The idea here is that Astro doesn't actually make another network request when you call fetch during SSR and the request targets e.g. an API route on the Astro server. So to avoid the network roundtrip, the framework just programatically re-enters the request lifecycle as a "sub request".

^ now that being said, I don't know if it works like that anymore and the comment suggests that it hasn't been updated in a long time ("domains"). I does work like that still in Sveltekit but obviously that doesn't mean anything 😅

Copy link
Member Author

Choose a reason for hiding this comment

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

yeah, I think that makes sense/could be, but arguably even then it would be OK to fork the isolation scope I'd say and have a dedicated isolation scope for the "sub-request"? 🤔 e.g. if I had (theoretically):

  • GET /page --> isolation scope forked
    • GET /sub-request --> fork isolation scope again here, as that could have it's own tags etc. that should not leak to the general /page request, I suppose

Copy link
Member

Choose a reason for hiding this comment

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

yeah sounds good!

"@xstate/fsm" "^1.4.0"
base64-arraybuffer "^1.0.1"
fflate "^0.4.4"
mitt "^3.0.0"
Copy link
Member Author

Choose a reason for hiding this comment

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

no idea where this changes come from...

Copy link
Contributor

github-actions bot commented Sep 5, 2025

size-limit report 📦

⚠️ Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

Path Size % Change Change
@sentry/browser 24.17 kB - -
@sentry/browser - with treeshaking flags 22.75 kB - -
@sentry/browser (incl. Tracing) 40.14 kB - -
@sentry/browser (incl. Tracing, Replay) 78.5 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 68.26 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 83.18 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 95.38 kB - -
@sentry/browser (incl. Feedback) 40.91 kB - -
@sentry/browser (incl. sendFeedback) 28.82 kB - -
@sentry/browser (incl. FeedbackAsync) 33.77 kB - -
@sentry/react 25.89 kB - -
@sentry/react (incl. Tracing) 42.11 kB - -
@sentry/vue 28.66 kB - -
@sentry/vue (incl. Tracing) 41.95 kB - -
@sentry/svelte 24.2 kB - -
CDN Bundle 25.76 kB - -
CDN Bundle (incl. Tracing) 40.01 kB - -
CDN Bundle (incl. Tracing, Replay) 76.29 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 81.75 kB - -
CDN Bundle - uncompressed 75.2 kB - -
CDN Bundle (incl. Tracing) - uncompressed 118.31 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 233.4 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 246.16 kB - -
@sentry/nextjs (client) 44.14 kB - -
@sentry/sveltekit (client) 40.58 kB - -
@sentry/node-core 49.66 kB - -
@sentry/node 150.7 kB - -
@sentry/node - without tracing 92.23 kB - -
@sentry/aws-serverless 105.53 kB -0.01% -2 B 🔽

View base workflow run

Copy link
Contributor

github-actions bot commented Sep 5, 2025

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.

Scenario Requests/s % of Baseline Prev. Requests/s Change %
GET Baseline 8,955 - 8,890 +1%
GET With Sentry 1,326 15% 1,331 -0%
GET With Sentry (error only) 5,910 66% 6,018 -2%
POST Baseline 1,214 - 1,208 +0%
POST With Sentry 480 40% 534 -10%
POST With Sentry (error only) 1,060 87% 1,063 -0%
MYSQL Baseline 3,370 - 3,348 +1%
MYSQL With Sentry 450 13% 474 -5%
MYSQL With Sentry (error only) 2,728 81% 2,728 -

View base workflow run

Copy link
Member

@Lms24 Lms24 left a comment

Choose a reason for hiding this comment

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

LGTM! Thanks for refactoring the middleware! Left some remarks but nothing too actionable. RE sub requests: If we don't have tests that cover this scenario I think it's also fine to just live with it right now.

// if there is an active span, we know that this handle call is nested and hence
// we don't create a new domain for it. If we created one, nested server calls would
// create new transactions instead of adding a child span to the currently active span.
if (getActiveSpan()) {
Copy link
Member

Choose a reason for hiding this comment

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

The idea here is that Astro doesn't actually make another network request when you call fetch during SSR and the request targets e.g. an API route on the Astro server. So to avoid the network roundtrip, the framework just programatically re-enters the request lifecycle as a "sub request".

^ now that being said, I don't know if it works like that anymore and the comment suggests that it hasn't been updated in a long time ("domains"). I does work like that still in Sveltekit but obviously that doesn't mean anything 😅

const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;

// if there is an active span, we just want to enhance it with routing data etc.
if (rootSpan && spanToJSON(rootSpan).op === 'http.server') {
Copy link
Member

Choose a reason for hiding this comment

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

Sounds good to me! Though see my other comment about sub requests. Again, not sure if this is really a concern so we can also just do this for the moment and adjust if necessary.

Comment on lines +144 to +146
// This is here for backwards compatibility, we used to set this here before
method,
Copy link
Member

Choose a reason for hiding this comment

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

l: shouldnt this be http.method? (likely was wrong beforehand already)

Copy link
Member Author

Choose a reason for hiding this comment

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

so http.method will already be there from the http.server span of http. this is added because we used to have this before, for backwards compatibility 😅

if (options.trackClientIp) {
isolationScope.setUser({ ip_address: ctx.clientAddress });
Copy link
Member

Choose a reason for hiding this comment

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

side-note (not relevant for this PR ): Should we remove this? I don't think we ever set the user in other SDKs, right? This is something, users could easily achieve with a middleware on their own. It's also kinda weird with sendDefaultPii usually gating IP address storing.

Copy link
Member Author

Choose a reason for hiding this comment

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

we do set the ip address in the base http requestDataIntegration handling!

Copy link
Member

Choose a reason for hiding this comment

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

right, I blanked and thought we only set event.request but you're right! Though still, since requestDataIntegration does this anyway, having this logic is redundant and still confusing with trackClientIp vs sendDefaultPii, IMHO

Copy link
Member Author

Choose a reason for hiding this comment

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

it probably makes sense to adjust this in a follow up and look at sendDefaultPii here as well!

@mydea mydea force-pushed the fn/astro-fixes branch 2 times, most recently from 3083981 to 93ec015 Compare September 8, 2025 06:39
cursor[bot]

This comment was marked as outdated.

mydea and others added 7 commits September 8, 2025 09:17
This refactors the astro middleware a bit to be more correct & future proof.

Right now, http.server spans are not emitted by the node http integration because import-in-the-middle does not work with Astro. So we emit our own. This PR makes astro ready to also handle the base http.server spans and enhance them with routing information.

It also handles static routes better: these do not emit spans anymore now, and do not continue traces, but instead only propagate the parametrized route to the client, no trace data.
Co-authored-by: Lukas Stracke <[email protected]>
} finally {
await flushIfServerless();
}
}
Copy link

Choose a reason for hiding this comment

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

Bug: Refactoring Breaks Sentry Data Capture

The refactoring introduced inconsistencies in Sentry data capture. enhanceHttpServerSpan and handleStaticRoute paths are missing client IP and SDK processing metadata (request data) settings. enhanceHttpServerSpan also lacks consistent fallback transaction naming and sentry.source attribute setting when a parametrized route is unavailable, leading to incomplete or inconsistent Sentry events.

Fix in Cursor Fix in Web

@mydea mydea merged commit 5441df9 into develop Sep 8, 2025
163 checks passed
@mydea mydea deleted the fn/astro-fixes branch September 8, 2025 07:52
mergify bot added a commit to reisene/HulajDusza-serwis that referenced this pull request Oct 13, 2025
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=)
![Contributor](https://badgen.net/badge/icon/Contributor/000000?label=)
[<img width="16" alt="Powered by Pull Request Badge"
src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!--
PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->


![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)


<h3>Snyk has created this PR to upgrade @sentry/node from 9.43.0 to
10.12.0.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.

<hr/>


- The recommended version is **22 versions** ahead of your current
version.

- The recommended version was released **23 days ago**.

⚠️ **Warning:** This PR contains major version upgrade(s), and may be a
breaking change.

#### Issues fixed by the recommended upgrade:

|  | Issue | Score | Exploit Maturity |

:-------------------------:|:-------------------------|:-------------------------|:-------------------------
![low
severity](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests//severity-low.svg
'low severity') | Regular Expression Denial of Service
(ReDoS)<br/>[SNYK-JS-BRACEEXPANSION-9789073](https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073)
| **57** | Proof of Concept
![low
severity](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests//severity-low.svg
'low severity') | Regular Expression Denial of Service
(ReDoS)<br/>[SNYK-JS-BRACEEXPANSION-9789073](https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073)
| **57** | Proof of Concept



<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>@sentry/node</b></summary>
    <ul>
      <li>
<b>10.12.0</b> - <a
href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.12.0">2025-09-16</a></br><h3>Important
Changes</h3>
<ul>
<li>
<p><strong>ref: Add and Adjust error event <code>mechanism</code>
values</strong></p>
<p>This release includes a variety of changes aimed at setting the
<code>mechanism</code> field on errors captured automatically by the
Sentry SDKs. <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/17212"
data-hovercard-type="issue"
data-hovercard-url="/getsentry/sentry-javascript/issues/17212/hovercard">The
intention</a> is to clearly mark which instrumentation captured an
error. In addition, some instrumentations previously did not yet
annotate the error as handled or unhandled which this series of PRs
corrects as well.</p>
<details>
<summary> Relevant PRs </summary>
<br>
<p>Released in <code>10.12.0</code>:</p>
<ul>
<li>ref(angular): Adjust ErrorHandler event mechanism (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17608"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17608/hovercard">#17608</a>)</li>
<li>ref(astro): Adjust <code>mechanism</code> on error events captured
by astro middleware (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17613"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17613/hovercard">#17613</a>)</li>
<li>ref(aws-severless): Slightly adjust aws-serverless mechanism type
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17614"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17614/hovercard">#17614</a>)</li>
<li>ref(bun): Adjust <code>mechanism</code> of errors captured in
Bun.serve (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17616"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17616/hovercard">#17616</a>)</li>
<li>ref(cloudflare): Adjust event <code>mechanisms</code> and durable
object origin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17618"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17618/hovercard">#17618</a>)</li>
<li>ref(core): Adjust <code>mechanism</code> in
<code>captureConsoleIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17633"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17633/hovercard">#17633</a>)</li>
<li>ref(core): Adjust MCP server error event <code>mechanism</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17622"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17622/hovercard">#17622</a>)</li>
<li>ref(core): Simplify <code>linkedErrors</code> mechanism logic (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17600"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17600/hovercard">#17600</a>)</li>
<li>ref(deno): Adjust <code>mechanism</code> of errors caught by
<code>globalHandlersIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17635"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17635/hovercard">#17635</a>)</li>
<li>ref(nextjs): Set more specific event <code>mechanism</code>s (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17543"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17543/hovercard">#17543</a>)</li>
<li>ref(node): Adjust mechanism of express, hapi and fastify error
handlers (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17623"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17623/hovercard">#17623</a>)</li>
<li>ref(node-core): Add <code>mechanism</code> to cron instrumentations
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17544"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17544/hovercard">#17544</a>)</li>
<li>ref(node-core): Add more specific <code>mechanism.type</code> to
worker thread errors from <code>childProcessIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17578"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17578/hovercard">#17578</a>)</li>
<li>ref(node-core): Adjust <code>mechanism</code> of
<code>onUnhandledRejection</code> and <code>onUnhandledException</code>
integrations (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17636"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17636/hovercard">#17636</a>)</li>
<li>ref(node): Add mechanism to errors captured via connect and koa
integrations (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17579"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17579/hovercard">#17579</a>)</li>
<li>ref(nuxt): Add and adjust <code>mechanism.type</code> in error
events (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17599"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17599/hovercard">#17599</a>)</li>
<li>ref(react): Add mechanism to <code>reactErrorHandler</code> and
adjust mechanism in <code>ErrorBoundary</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17602"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17602/hovercard">#17602</a>)</li>
<li>ref(remix): Adjust event mechanism of
<code>captureRemixServerException</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17629"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17629/hovercard">#17629</a>)</li>
<li>ref(replay-internal): Add mechanism to error caught by
<code>replayIntegration</code> in debug mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17606"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17606/hovercard">#17606</a>)</li>
<li>ref(solid): Add <code>mechanism</code> to error captured by
<code>withSentryErrorBoundary</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17607"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17607/hovercard">#17607</a>)</li>
<li>ref(solidstart): Adjust event mechanism in
withServerActionInstrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17637"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17637/hovercard">#17637</a>)</li>
<li>ref(sveltekit): Adjust <code>mechanism</code> of error events (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17646"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17646/hovercard">#17646</a>)</li>
<li>ref(vue): Adjust mechanism in Vue error handler (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17647"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17647/hovercard">#17647</a>)</li>
</ul>
<br>
<p>Released in <code>10.11.0</code>:</p>
<ul>
<li>ref(browser): Add more specific <code>mechanism.type</code> to
errors captured by <code>httpClientIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17254"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17254/hovercard">#17254</a>)</li>
<li>ref(browser): Set more descriptive <code>mechanism.type</code> in
<code>browserApiErrorsIntergation</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17251"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17251/hovercard">#17251</a>)</li>
<li>ref(core): Add <code>mechanism.type</code> to
<code>trpcMiddleware</code> errors (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17287"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17287/hovercard">#17287</a>)</li>
<li>ref(core): Add more specific event <code>mechanism</code>s and span
origins to <code>openAiIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17288"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17288/hovercard">#17288</a>)</li>
<li>ref(nestjs): Add <code>mechanism</code> to captured errors (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17312"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17312/hovercard">#17312</a>)</li>
</ul>
</details></li>
</ul>

<ul>
<li><strong>feat(node) Ensure <code>prismaIntegration</code> works with
Prisma 5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17595"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17595/hovercard">#17595</a>)</strong></li>
</ul>
<p>We used to require to pass in the v5 version of <code>@
prisma/instrumentation</code> into <code>prismaIntegration({
prismaInstrumentation: new PrismaInstrumentation() })</code>, if you
wanted to get full instrumentation for Prisma v5. However, it turns out
this does not work on v10 of the SDK anymore, because <code>@
prisma/instrumentation@5</code> requires OTEL v1.</p>
<p>With this release, we dropped the requirement to configure anything
to get v5 support of Prisma. You do not need to configure anything in
the integration anymore, and can remove the dependency on <code>@
prisma/instrumentation@5</code> if you had it in your application. You
only need to configure the <code>tracing</code> preview feature <a
href="https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/prisma/"
rel="nofollow">according to our docs</a>.</p>
<ul>
<li><strong>feat(deps): Update OpenTelemetry dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17558"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17558/hovercard">#17558</a>)</strong>
<ul>
<li>@ opentelemetry/core bumped to ^2.1.0</li>
<li>@ opentelemetry/context-async-hooks bumped to ^2.1.0</li>
<li>@ opentelemetry/resources bumped to ^2.1.0</li>
<li>@ opentelemetry/sdk-trace-base bumped to ^2.1.0</li>
<li>@ opentelemetry/semantic-conventions bumped to ^1.37.0</li>
<li>@ opentelemetry/instrumentation bumped to ^0.204.0</li>
<li>@ opentelemetry/instrumentation-http bumped to ^0.204.0</li>
<li>@ opentelemetry/instrumentation-amqplib bumped to ^0.51.0</li>
<li>@ opentelemetry/instrumentation-aws-sdk bumped to ^0.59.0</li>
<li>@ opentelemetry/instrumentation-connect bumped to ^0.48.0</li>
<li>@ opentelemetry/instrumentation-dataloader bumped to ^0.22.0</li>
<li>@ opentelemetry/instrumentation-express bumped to ^0.53.0</li>
<li>@ opentelemetry/instrumentation-fs bumped from to ^0.24.0</li>
<li>@ opentelemetry/instrumentation-generic-pool bumped to ^0.48.0</li>
<li>@ opentelemetry/instrumentation-graphql bumped to ^0.52.0</li>
<li>@ opentelemetry/instrumentation-hapi bumped to ^0.51.0</li>
<li>@ opentelemetry/instrumentation-ioredis bumped to ^0.52.0</li>
<li>@ opentelemetry/instrumentation-kafkajs bumped to ^0.14.0</li>
<li>@ opentelemetry/instrumentation-knex bumped to ^0.49.0</li>
<li>@ opentelemetry/instrumentation-koa bumped to ^0.52.0</li>
<li>@ opentelemetry/instrumentation-lru-memoizer bumped to ^0.49.0</li>
<li>@ opentelemetry/instrumentation-mongodb bumped from to ^0.57.0</li>
<li>@ opentelemetry/instrumentation-mongoose bumped from to ^0.51.0</li>
<li>@ opentelemetry/instrumentation-mysql bumped to ^0.50.0</li>
<li>@ opentelemetry/instrumentation-mysql2 bumped to ^0.51.0</li>
<li>@ opentelemetry/instrumentation-nestjs-core bumped to ^0.50.0</li>
<li>@ opentelemetry/instrumentation-pg bumped to ^0.57.0</li>
<li>@ opentelemetry/instrumentation-redis bumped to ^0.53.0</li>
<li>@ opentelemetry/instrumentation-undici bumped to ^0.15.0</li>
<li>@ prisma/instrumentation bumped to 6.15.0</li>
</ul>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(browser): Add timing and status atttributes to resource spans
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17562"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17562/hovercard">#17562</a>)</li>
<li>feat(cloudflare,vercel-edge): Add support for Anthropic AI
instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17571"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17571/hovercard">#17571</a>)</li>
<li>feat(core): Add Consola integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17435"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17435/hovercard">#17435</a>)</li>
<li>feat(deps): Update OpenTelemetry dependencies (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17569"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17569/hovercard">#17569</a>)</li>
<li>feat(core): Export <code>TracesSamplerSamplingContext</code> type
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17523"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17523/hovercard">#17523</a>)</li>
<li>feat(deno): Add OpenTelemetry support and vercelAI integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17445"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17445/hovercard">#17445</a>)</li>
<li>feat(node-core): Remove experimental note from winston api (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17626"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17626/hovercard">#17626</a>)</li>
<li>feat(node): Ensure <code>prismaIntegration</code> works with Prisma
v5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17595"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17595/hovercard">#17595</a>)</li>
<li>feat(node): Tidy existing ESM loader hook (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17566"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17566/hovercard">#17566</a>)</li>
<li>feat(sveltekit): Align build time options with shared type (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17413"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17413/hovercard">#17413</a>)</li>
<li>fix(core): Fix error handling when sending envelopes (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17662"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17662/hovercard">#17662</a>)</li>
<li>fix(browser): Always start navigation as root span (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17648"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17648/hovercard">#17648</a>)</li>
<li>fix(browser): Ensure propagated <code>parentSpanId</code> stays
consistent during trace in TwP mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17526"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17526/hovercard">#17526</a>)</li>
<li>fix(cloudflare): Initialize once per workflow run and preserve scope
for <code>step.do</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17582"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17582/hovercard">#17582</a>)</li>
<li>fix(nextjs): Add edge polyfills for nextjs-13 in dev mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17488"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17488/hovercard">#17488</a>)</li>
<li>fix(nitro): Support nested <code>_platform</code> properties in
Nitro 2.11.7+ (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17596"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17596/hovercard">#17596</a>)</li>
<li>fix(node): Preserve synchronous return behavior for streamText and
other methods for AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17580"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17580/hovercard">#17580</a>)</li>
<li>ref(node): Inline types imported from <code>shimmer</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17597"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17597/hovercard">#17597</a>)
- ref(nuxt): Add and adjust <code>mechanism.type</code> in error events
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17599"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17599/hovercard">#17599</a>)</li>
<li>ref(browser): Improve <code>fetchTransport</code> error handling (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17661"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17661/hovercard">#17661</a>)</li>
</ul>
<details>
  <summary> <strong>Internal Changes</strong> </summary>
<ul>
<li>chore: Add changelog note about mechanism changes (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17632"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17632/hovercard">#17632</a>)</li>
<li>chore(aws): Update README.md (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17601"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17601/hovercard">#17601</a>)</li>
<li>chore(deps): bump hono from 4.7.10 to 4.9.7 in
/dev-packages/e2e-tests/test-applications/cloudflare-hono (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17630"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17630/hovercard">#17630</a>)</li>
<li>chore(deps): bump next from 14.2.25 to 14.2.32 in
/dev-packages/e2e-tests/test-applications/nextjs-app-dir (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17627"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17627/hovercard">#17627</a>)</li>
<li>chore(deps): bump next from 14.2.25 to 14.2.32 in
/dev-packages/e2e-tests/test-applications/nextjs-pages-dir (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17620"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17620/hovercard">#17620</a>)</li>
<li>chore(deps): bump next from 14.2.29 to 14.2.32 in
/dev-packages/e2e-tests/test-applications/nextjs-orpc (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17494"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17494/hovercard">#17494</a>)</li>
<li>chore(deps): bump next from 14.2.30 to 14.2.32 in
/dev-packages/e2e-tests/test-applications/nextjs-14 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17628"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17628/hovercard">#17628</a>)</li>
<li>chore(repo): Rename <code>.claude/settings.local.json</code> to
<code>.claude/settings.json</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17591"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17591/hovercard">#17591</a>)</li>
<li>docs(issue-template): Add note about prioritization (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17590"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17590/hovercard">#17590</a>)</li>
<li>ref(core): Streamline event processor handling (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17634"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17634/hovercard">#17634</a>)</li>
<li>test(angular): Bump TS version to 5.9.0 in Angular 20 e2e test (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17605"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17605/hovercard">#17605</a>)</li>
<li>test(nextjs): Remove Next 13 and pin Next 14 canary and latest tests
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17577"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17577/hovercard">#17577</a>)</li>
<li>test(react-router): Unflake <code>flushIfServerless</code> test (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17610"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17610/hovercard">#17610</a>)</li>
</ul>
</details>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.59 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.19 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>39.21 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>76.69 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking
flags</td>
<td>66.64 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>81.24 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>93.16 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>39.92 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>28.13 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.96 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>25.27 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>41.18 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.97 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>40.99 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.62 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>25.13 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>39.11 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>74.48 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>79.86 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>73.41 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>115.73 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>228.13 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>240.59 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>43.12 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>39.64 KB</td>
</tr>
<tr>
<td>@ sentry/node-core</td>
<td>48.69 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>147.6 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>89.6 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>102.73 KB</td>
</tr>
</tbody>
</table>
      </li>
      <li>
<b>10.11.0</b> - <a
href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.11.0">2025-09-09</a></br><h3>Important
Changes</h3>
<ul>
<li>
<p><strong>feat(aws): Add experimental AWS Lambda extension for
tunnelling events (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17525"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17525/hovercard">#17525</a>)</strong></p>
<p>This release adds an experimental Sentry Lambda extension to the
existing Sentry Lambda layer. Sentry events are now tunneled through the
extension and then forwarded to Sentry. This has the benefit of reducing
the request processing time.</p>
<p>To enable it, set <code>_experiments.enableLambdaExtension</code> in
your Sentry config like this:</p>
<div class="highlight highlight-source-js notranslate position-relative
overflow-auto" data-snippet-clipboard-copy-content="Sentry.init({
  dsn: '&lt;YOUR_DSN&gt;',
  _experiments: {
    enableLambdaExtension: true,
  },
});"><pre><span class="pl-v">Sentry</span><span
class="pl-kos">.</span><span class="pl-en">init</span><span
class="pl-kos">(</span><span class="pl-kos">{</span>
<span class="pl-c1">dsn</span>: <span
class="pl-s">'&lt;YOUR_DSN&gt;'</span><span class="pl-kos">,</span>
  <span class="pl-c1">_experiments</span>: <span class="pl-kos">{</span>
<span class="pl-c1">enableLambdaExtension</span>: <span
class="pl-c1">true</span><span class="pl-kos">,</span>
  <span class="pl-kos">}</span><span class="pl-kos">,</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span
class="pl-kos">;</span></pre></div>
</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(core): Add replay id to logs (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17563"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17563/hovercard">#17563</a>)</li>
<li>feat(core): Improve error handling for Anthropic AI instrumentation
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17535"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17535/hovercard">#17535</a>)</li>
<li>feat(deps): bump @ opentelemetry/instrumentation-ioredis from 0.51.0
to 0.52.0 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17557"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17557/hovercard">#17557</a>)</li>
<li>feat(node): Add incoming request headers as OTel span attributes (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17475"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17475/hovercard">#17475</a>)</li>
<li>fix(astro): Ensure traces are correctly propagated for static routes
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17536"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17536/hovercard">#17536</a>)</li>
<li>fix(react): Remove <code>handleExistingNavigation</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17534"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17534/hovercard">#17534</a>)</li>
<li>ref(browser): Add more specific <code>mechanism.type</code> to
errors captured by <code>httpClientIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17254"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17254/hovercard">#17254</a>)</li>
<li>ref(browser): Set more descriptive <code>mechanism.type</code> in
<code>browserApiErrorsIntergation</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17251"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17251/hovercard">#17251</a>)</li>
<li>ref(core): Add <code>mechanism.type</code> to
<code>trpcMiddleware</code> errors (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17287"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17287/hovercard">#17287</a>)</li>
<li>ref(core): Add more specific event <code>mechanism</code>s and span
origins to <code>openAiIntegration</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17288"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17288/hovercard">#17288</a>)</li>
<li>ref(nestjs): Add <code>mechanism</code> to captured errors (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17312"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17312/hovercard">#17312</a>)</li>
</ul>
<details>
  <summary> <strong>Internal Changes</strong> </summary>
<ul>
<li>chore: Use proper <code>test-utils</code> dependency in workspace
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17538"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17538/hovercard">#17538</a>)</li>
<li>chore(test): Remove <code>geist</code> font (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17541"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17541/hovercard">#17541</a>)</li>
<li>ci: Check for stable lockfile (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17552"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17552/hovercard">#17552</a>)</li>
<li>ci: Fix running of only changed E2E tests (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17551"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17551/hovercard">#17551</a>)</li>
<li>ci: Remove project automation workflow (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17508"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17508/hovercard">#17508</a>)</li>
<li>test(node-integration-tests): pin [email protected] to fix test fails (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17542"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17542/hovercard">#17542</a>)</li>
</ul>
</details>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.61 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.22 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>39.2 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>76.66 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking
flags</td>
<td>66.66 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>81.23 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>93.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>39.95 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>28.15 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.98 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>25.29 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>41.12 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.99 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>40.97 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.63 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>25.16 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>39.07 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>74.5 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>79.83 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>73.44 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>115.53 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>227.93 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>240.39 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>43.11 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>39.63 KB</td>
</tr>
<tr>
<td>@ sentry/node-core</td>
<td>48.66 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>148.65 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>90.07 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>103.24 KB</td>
</tr>
</tbody>
</table>
      </li>
      <li>
<b>10.10.0</b> - <a
href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.10.0">2025-09-04</a></br><h3>Important
Changes</h3>
<ul>
<li><strong>feat(browser): Add support for
<code>propagateTraceparent</code> SDK option (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17509"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17509/hovercard">#17509</a>)</strong></li>
</ul>
<p>Adds support for a new browser SDK init option,
<code>propagateTraceparent</code> for attaching a W3C compliant
traceparent header to outgoing fetch and XHR requests, in addition to
sentry-trace and baggage headers. More details can be found <a
href="https://develop.sentry.dev/sdk/telemetry/traces/#propagatetraceparent"
rel="nofollow">here</a>.</p>
<ul>
<li><strong>feat(core): Add tool calls attributes for Anthropic AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17478"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17478/hovercard">#17478</a>)</strong></li>
</ul>
<p>Adds missing tool call attributes, we add gen_ai.response.tool_calls
attribute for Anthropic AI, supporting both streaming and non-streaming
requests.</p>
<ul>
<li><strong>feat(nextjs): Use compiler hook for uploading turbopack
sourcemaps (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17352"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17352/hovercard">#17352</a>)</strong></li>
</ul>
<p>Adds a new <em>experimental</em> flag
<code>_experimental.useRunAfterProductionCompileHook</code> to
<code>withSentryConfig</code> for automatic source maps uploads when
building a Next.js app with <code>next build --turbopack</code>.<br>
When set we:</p>
<ul>
<li>Automatically enable source map generation for turbopack client
files (if not explicitly disabled)</li>
<li>Upload generated source maps to Sentry at the end of the build by
leveraging <a
href="https://nextjs.org/docs/architecture/nextjs-compiler#runafterproductioncompile"
rel="nofollow">a Next.js compiler hook</a>.</li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>feat(feedback): Add more labels so people can configure Highlight
and Hide labels (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17513"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17513/hovercard">#17513</a>)</li>
<li>fix(node): Add <code>origin</code> for OpenAI spans &amp; test auto
instrumentation (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17519"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17519/hovercard">#17519</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.59 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.2 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>39.19 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>76.63 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking
flags</td>
<td>66.64 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>81.2 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>93.13 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>39.93 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>28.13 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.96 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>25.27 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>41.11 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.97 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>40.95 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.62 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>25.14 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>39.05 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>74.48 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>79.82 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>73.4 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>115.49 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>227.88 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>240.35 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>43.08 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>39.62 KB</td>
</tr>
<tr>
<td>@ sentry/node-core</td>
<td>48.49 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>147.1 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>90.07 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>103.06 KB</td>
</tr>
</tbody>
</table>
      </li>
      <li>
<b>10.9.0</b> - <a
href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.9.0">2025-09-03</a></br><h3>Important
Changes</h3>
<ul>
<li><strong>feat(node): Update <code>httpIntegration</code> handling of
incoming requests (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17371"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17371/hovercard">#17371</a>)</strong></li>
</ul>
<p>This version updates the handling of the Node SDK of incoming
requests. Instead of relying on @ opentelemetry/instrumentation-http, we
now handle incoming request instrumentation internally, ensuring that we
can optimize performance as much as possible and avoid interop
problems.</p>
<p>This change should not affect you, unless you're relying on very
in-depth implementation details. Importantly, this also drops the
<code>_experimentalConfig</code> option of the integration - this will
no longer do anything.<br>
Finally, you can still pass
<code>instrumentation.{requestHook,responseHook,applyCustomAttributesOnSpan}</code>
options, but they are deprecated and will be removed in v11. Instead,
you can use the new <code>incomingRequestSpanHook</code> configuration
option if you want to adjust the incoming request span.</p>
<h3>Other Changes</h3>
<ul>
<li>feat(browser): Add replay.feedback CDN bundle (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17496"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17496/hovercard">#17496</a>)</li>
<li>feat(browser): Export <code>sendFeedback</code> from CDN bundles (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17495"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17495/hovercard">#17495</a>)</li>
<li>fix(astro): Ensure span name from <code>beforeStartSpan</code> isn't
overwritten (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17500"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17500/hovercard">#17500</a>)</li>
<li>fix(browser): Ensure source is set correctly when updating span name
in-place in <code>beforeStartSpan</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17501"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17501/hovercard">#17501</a>)</li>
<li>fix(core): Only set template attributes on logs if parameters exist
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17480"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17480/hovercard">#17480</a>)</li>
<li>fix(nextjs): Fix parameterization for root catchall routes (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17489"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17489/hovercard">#17489</a>)</li>
<li>fix(node-core): Shut down OTel TraceProvider when calling
<code>Sentry.close()</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17499"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17499/hovercard">#17499</a>)</li>
</ul>
<details>
  <summary> <strong>Internal Changes</strong> </summary>
<ul>
<li>chore: Add <code>changelog</code> script back to package.json (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17517"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17517/hovercard">#17517</a>)</li>
<li>chore: Ensure prettier is run on all files (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17497"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17497/hovercard">#17497</a>)</li>
<li>chore: Ignore prettier commit for git blame (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17498"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17498/hovercard">#17498</a>)</li>
<li>chore: Remove experimental from Nuxt SDK package description (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17483"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17483/hovercard">#17483</a>)</li>
<li>ci: Capture overhead in node app (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17420"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17420/hovercard">#17420</a>)</li>
<li>ci: Ensure we fail on cancelled jobs (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17506"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17506/hovercard">#17506</a>)</li>
<li>ci(deps): bump actions/checkout from 4 to 5 (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17505"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17505/hovercard">#17505</a>)</li>
<li>ci(deps): bump actions/create-github-app-token from 2.0.6 to 2.1.1
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17504"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17504/hovercard">#17504</a>)</li>
<li>test(aws): Improve reliability on CI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/17502"
data-hovercard-type="pull_request"
data-hovercard-url="/getsentry/sentry-javascript/pull/17502/hovercard">#17502</a>)</li>
</ul>
</details>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>@ sentry/browser</td>
<td>23.59 KB</td>
</tr>
<tr>
<td>@ sentry/browser - with treeshaking flags</td>
<td>22.2 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing)</td>
<td>38.93 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay)</td>
<td>76.4 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking
flags</td>
<td>66.43 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td>
<td>80.97 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td>
<td>92.81 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. Feedback)</td>
<td>39.88 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. sendFeedback)</td>
<td>28.13 KB</td>
</tr>
<tr>
<td>@ sentry/browser (incl. FeedbackAsync)</td>
<td>32.92 KB</td>
</tr>
<tr>
<td>@ sentry/react</td>
<td>25.27 KB</td>
</tr>
<tr>
<td>@ sentry/react (incl. Tracing)</td>
<td>40.91 KB</td>
</tr>
<tr>
<td>@ sentry/vue</td>
<td>27.97 KB</td>
</tr>
<tr>
<td>@ sentry/vue (incl. Tracing)</td>
<td>40.72 KB</td>
</tr>
<tr>
<td>@ sentry/svelte</td>
<td>23.62 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>25.06 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>38.82 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>74.25 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>79.56 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>73.2 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>114.83 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>227.23 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>239.56 KB</td>
</tr>
<tr>
<td>@ sentry/nextjs (client)</td>
<td>42.86 KB</td>
</tr>
<tr>
<td>@ sentry/sveltekit (client)</td>
<td>39.38 KB</td>
</tr>
<tr>
<td>@ sentry/node-core</td>
<td>48.45 KB</td>
</tr>
<tr>
<td>@ sentry/node</td>
<td>146.74 KB</td>
</tr>
<tr>
<td>@ sentry/node - without tracing</td>
<td>90.02 KB</td>
</tr>
<tr>
<td>@ sentry/aws-serverless</td>
<td>103.01 KB</td>
</tr>
</tbody>
</table>
      </li>
      <li>
        <b>10.8.0</b> - 2025-08-29
      </li>
      <li>
        <b>10.7.0</b> - 2025-08-27
      </li>
      <li>
        <b>10.6.0</b> - 2025-08-26
      </li>
      <li>
        <b>10.5.0</b> - 2025-08-12
      </li>
      <li>
        <b>10.4.0</b> - 2025-08-11
      </li>
      <li>
        <b>10.3.0</b> - 2025-08-08
      </li>
      <li>
        <b>10.2.0</b> - 2025-08-06
      </li>
      <li>
        <b>10.1.0</b> - 2025-08-04
      </li>
      <li>
        <b>10.0.0</b> - 2025-07-31
      </li>
      <li>
        <b>10.0.0-beta.0</b> - 2025-07-30
      </li>
      <li>
        <b>10.0.0-alpha.2</b> - 2025-07-24
      </li>
      <li>
        <b>10.0.0-alpha.1</b> - 2025-07-21
      </li>
      <li>
        <b>10.0.0-alpha.0</b> - 2025-07-21
      </li>
      <li>
        <b>9.46.0</b> - 2025-08-13
      </li>
      <li>
        <b>9.45.0</b> - 2025-08-08
      </li>
      <li>
        <b>9.44.2</b> - 2025-08-04
      </li>
      <li>
        <b>9.44.1</b> - 2025-08-04
      </li>
      <li>
        <b>9.44.0</b> - 2025-07-31
      </li>
      <li>
        <b>9.43.0</b> - 2025-07-29
      </li>
    </ul>
from <a
href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/node
GitHub release notes</a>
  </details>
</details>

---

> [!IMPORTANT]
>
> - **Warning:** This PR contains a major version upgrade, and may be a
breaking change.
> - Check the changes in this PR to ensure they won't cause issues with
your project.
> - This PR was automatically created by Snyk using the credentials of a
real user.
> - Max score is 1000. Note that the real score may have changed since
the PR was raised.

---

**Note:** _You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs._

**For more information:** <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIwYjlmNDY5NC1mMzkzLTQ0NDctOGI3NC02NWRjODdmYjI1ODkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjBiOWY0Njk0LWYzOTMtNDQ0Ny04Yjc0LTY1ZGM4N2ZiMjU4OSJ9fQ=="
width="0" height="0"/>

> - 🧐 [View latest project
report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR
templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg&#x3D;@sentry/node&amp;utm_source&#x3D;github-cloud-app&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

[//]: #
'snyk:metadata:{"breakingChangeRiskLevel":null,"FF_showPullRequestBreakingChanges":null,"FF_showPullRequestBreakingChangesWebSearch":null,"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/node","from":"9.43.0","to":"10.12.0"}],"env":"prod","hasFixes":true,"isBreakingChange":true,"isMajorUpgrade":true,"issuesToFix":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"],"prId":"0b9f4694-f393-4447-8b74-65dc87fb2589","prPublicId":"0b9f4694-f393-4447-8b74-65dc87fb2589","packageManager":"npm","priorityScoreList":[57],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":["priorityScore"],"type":"auto","upgrade":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"],"upgradeInfo":{"versionsDiff":22,"publishedDate":"2025-09-16T15:02:23.181Z"},"vulns":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"]}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants