Skip to content

Commit 5b51d5e

Browse files
authored
Merge pull request #21874 from getsentry/prepare-release/10.63.0
meta(changelog): Update changelog for 10.63.0
2 parents 4d71d0b + 4e16503 commit 5b51d5e

345 files changed

Lines changed: 5256 additions & 27659 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.oxlintrc.base.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@
169169
"**/integrations/tracing/amqplib/vendored/**/*.ts",
170170
"**/integrations/tracing/prisma/vendored/**/*.ts",
171171
"**/integrations/tracing/postgres/vendored/**/*.ts",
172-
"**/integrations/tracing/fastify/vendored/**/*.ts",
173172
"**/integrations/tracing/redis/vendored/**/*.ts"
174173
],
175174
"rules": {

CHANGELOG.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,51 @@
44

55
- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott
66

7+
## 10.63.0
8+
9+
- feat(browser): Add `url.full` attribute to resource spans ([#21846](https://github.com/getsentry/sentry-javascript/pull/21846))
10+
- feat(core): Add `extendIntegration` method ([#21759](https://github.com/getsentry/sentry-javascript/pull/21759))
11+
- feat(core): Add `isTracingSuppressed` to the async context strategy ([#21785](https://github.com/getsentry/sentry-javascript/pull/21785))
12+
- feat(core): Pass normalizedRequest to the sampling context for root spans ([#21833](https://github.com/getsentry/sentry-javascript/pull/21833))
13+
- feat(node): Add lru-memoizer diagnostics-channel integration to experimentalUseDiagnosticsChannelInjection ([#21786](https://github.com/getsentry/sentry-javascript/pull/21786))
14+
- feat(node): Expose channel-based, streamlined `fastifyIntegration` ([#21706](https://github.com/getsentry/sentry-javascript/pull/21706))
15+
- fix(browser): Defer sending session envelope until browser is idle ([#21844](https://github.com/getsentry/sentry-javascript/pull/21844))
16+
- fix(core): Improve waiting for tracing channel bindings ([#21815](https://github.com/getsentry/sentry-javascript/pull/21815))
17+
- fix(core): Serialize streamed span status message to `sentry.status.message` attribute ([#21811](https://github.com/getsentry/sentry-javascript/pull/21811))
18+
- fix(nextjs): Don't inject trace meta tags when Cache Components is enabled ([#21141](https://github.com/getsentry/sentry-javascript/pull/21141))
19+
- fix(opentelemetry): Strip leading ? and # from inferred http.query and http.fragment ([#21848](https://github.com/getsentry/sentry-javascript/pull/21848))
20+
- fix(tanstackstart-react): Drop server transactions for tunnel route requests ([#21769](https://github.com/getsentry/sentry-javascript/pull/21769))
21+
22+
<details>
23+
<summary><strong>Internal Changes</strong></summary>
24+
25+
- chore: Add external contributor to CHANGELOG.md ([#21832](https://github.com/getsentry/sentry-javascript/pull/21832))
26+
- chore: Hoist transitive imports for bundles ([#21858](https://github.com/getsentry/sentry-javascript/pull/21858))
27+
- chore: Mark http.query/http.fragment stripping for v11 url.query migration ([#21852](https://github.com/getsentry/sentry-javascript/pull/21852))
28+
- docs: Use Cloudflare nodejs_compat flag ([#21659](https://github.com/getsentry/sentry-javascript/pull/21659))
29+
- feat(server-utils): Add lru-memoizer diagnostics-channel integration ([#21786](https://github.com/getsentry/sentry-javascript/pull/21786))
30+
- feat(server-utils): Expose channel-based, streamlined `fastifyIntegration` ([#21706](https://github.com/getsentry/sentry-javascript/pull/21706))
31+
- feat(server-utils): Restore caller context for callback tracing channels ([#21863](https://github.com/getsentry/sentry-javascript/pull/21863))
32+
- ref(core): Move `spanStreamingIntegration` setup into `ServerRuntimeClient` ([#21814](https://github.com/getsentry/sentry-javascript/pull/21814))
33+
- ref(node): Infer orchestrion integration names ([#21834](https://github.com/getsentry/sentry-javascript/pull/21834))
34+
- ref(node): Move node-fetch instrumentation away from InstrumentBase ([#21778](https://github.com/getsentry/sentry-javascript/pull/21778))
35+
- ref(node): Streamline Prisma instrumentation (v6 and v7) ([#21819](https://github.com/getsentry/sentry-javascript/pull/21819))
36+
- ref(node): Streamline vendored mysql instrumentation ([#21568](https://github.com/getsentry/sentry-javascript/pull/21568))
37+
- ref(server-utils): Ensure ts3.8 has diagnostics channel shim ([#21845](https://github.com/getsentry/sentry-javascript/pull/21845))
38+
- ref(server-utils): Move mysql orchestrion integration onto bindTracingChannelToSpan ([#21865](https://github.com/getsentry/sentry-javascript/pull/21865))
39+
- ref(server-utils): Set error attributes on span and simplify error info extraction ([#21822](https://github.com/getsentry/sentry-javascript/pull/21822))
40+
- test: Introduce .unordered in node-integration-tests ([#21697](https://github.com/getsentry/sentry-javascript/pull/21697))
41+
- test(cloudflare): Align CF types and compat flags ([#21835](https://github.com/getsentry/sentry-javascript/pull/21835))
42+
- test(e2e/hono): Isolate request-data extraction tests onto a dedicated route ([#21869](https://github.com/getsentry/sentry-javascript/pull/21869))
43+
- test(node-integration): Harden knex mysql2 healthcheck to fix flaky test ([#21868](https://github.com/getsentry/sentry-javascript/pull/21868))
44+
- test(node-integration-tests): Fix flaky postgresjs basic transaction/error ordering ([#21870](https://github.com/getsentry/sentry-javascript/pull/21870))
45+
- test(node-integration-tests): Retry transient docker compose up failures ([#21860](https://github.com/getsentry/sentry-javascript/pull/21860))
46+
- test(nuxt): Test `mysql` instrumentation with orchestrion bundler plugin ([#21782](https://github.com/getsentry/sentry-javascript/pull/21782))
47+
48+
</details>
49+
50+
Work in this release was contributed by @suzunn. Thank you for your contribution!
51+
752
## 10.62.0
853

954
### Important Changes

dev-packages/browser-integration-tests/suites/public-api/debug/test.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ sentryTest('logs debug messages correctly', async ({ getLocalTestUrl, page }) =>
1717

1818
await page.goto(url);
1919

20+
if (hasDebug) {
21+
// The initial session capture is deferred to the browser's idle period, so its
22+
// "Discarded session" warning is emitted asynchronously. Wait for it before
23+
// logging so the console message order stays deterministic.
24+
await expect
25+
.poll(() => consoleMessages)
26+
.toContain('Sentry Logger [warn]: Discarded session because of missing or non-string release');
27+
}
28+
2029
await page.evaluate(() => console.log('test log'));
2130

2231
expect(consoleMessages).toEqual(
@@ -34,8 +43,8 @@ sentryTest('logs debug messages correctly', async ({ getLocalTestUrl, page }) =>
3443
'Sentry Logger [log]: Integration installed: Dedupe',
3544
'Sentry Logger [log]: Integration installed: HttpContext',
3645
'Sentry Logger [log]: Integration installed: CultureContext',
37-
'Sentry Logger [warn]: Discarded session because of missing or non-string release',
3846
'Sentry Logger [log]: Integration installed: BrowserSession',
47+
'Sentry Logger [warn]: Discarded session because of missing or non-string release',
3948
'test log',
4049
]
4150
: ['[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.', 'test log'],

dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/subject.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ Sentry.startSpan({ name: 'test-span', op: 'test' }, () => {
77
inactiveSpan.end();
88

99
Sentry.startSpanManual({ name: 'test-manual-span' }, span => {
10-
// noop
10+
// 2 = SPAN_STATUS_ERROR. The message must be preserved as the `sentry.status.message`
11+
// attribute on the streamed span, since v2 statuses are reduced to ok/error.
12+
span.setStatus({ code: 2, message: 'Connection Refused' });
1113
span.end();
1214
});
1315
});

dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID,
1212
SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME,
1313
SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,
14+
SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE,
1415
} from '@sentry/core';
1516
import { sentryTest } from '../../../../utils/fixtures';
1617
import { shouldSkipTracingTest } from '../../../../utils/helpers';
@@ -171,14 +172,18 @@ sentryTest(
171172
type: 'string',
172173
value: 'production',
173174
},
175+
[SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE]: {
176+
type: 'string',
177+
value: 'Connection Refused',
178+
},
174179
},
175180
end_timestamp: expect.any(Number),
176181
is_segment: false,
177182
name: 'test-manual-span',
178183
parent_span_id: segmentSpanId,
179184
span_id: expect.stringMatching(/^[\da-f]{16}$/),
180185
start_timestamp: expect.any(Number),
181-
status: 'ok',
186+
status: 'error',
182187
trace_id: traceId,
183188
},
184189
{
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
Sentry.setUser({
2-
id: '1337',
3-
email: 'user@name.com',
4-
username: 'user1337',
1+
document.getElementById('set-user').addEventListener('click', () => {
2+
Sentry.setUser({
3+
id: '1337',
4+
email: 'user@name.com',
5+
username: 'user1337',
6+
});
57
});

dev-packages/browser-integration-tests/suites/sessions/user/template.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
</head>
66
<body>
77
<a id="navigate" href="#foo">Navigate</a>
8+
<button id="set-user">Set user</button>
89
</body>
910
</html>

dev-packages/browser-integration-tests/suites/sessions/user/test.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import { expect } from '@playwright/test';
22
import { sentryTest } from '../../../utils/fixtures';
33
import { waitForSession } from '../../../utils/helpers';
44

5-
sentryTest('updates the session when setting the user', async ({ getLocalTestUrl, page }) => {
5+
sentryTest('updates the session when the user is set after the initial session', async ({ getLocalTestUrl, page }) => {
66
const initialSessionPromise = waitForSession(page, s => !!s.init && s.status === 'ok');
7-
const updatedSessionPromise = waitForSession(page, s => !s.init && s.status === 'ok');
87

98
const url = await getLocalTestUrl({ testDir: __dirname });
109
await page.goto(url);
1110

11+
// The initial session envelope is deferred (sent once the browser is idle). At this point
12+
// no user has been set yet, so it carries no `did`.
1213
const initialSession = await initialSessionPromise;
13-
const updatedSession = await updatedSessionPromise;
1414

1515
expect(initialSession).toEqual({
1616
attrs: {
@@ -26,6 +26,12 @@ sentryTest('updates the session when setting the user', async ({ getLocalTestUrl
2626
timestamp: expect.any(String),
2727
});
2828

29+
// Setting the user _after_ the initial session was sent must still be captured as a
30+
// dedicated session update carrying the `did`.
31+
const updatedSessionPromise = waitForSession(page, s => !s.init && s.status === 'ok');
32+
await page.locator('#set-user').click();
33+
const updatedSession = await updatedSessionPromise;
34+
2935
expect(updatedSession).toEqual({
3036
...initialSession,
3137
init: false,
@@ -42,6 +48,10 @@ sentryTest('includes the user id in the exited session', async ({ getLocalTestUr
4248

4349
const initialSession = await initialSessionPromise;
4450

51+
// Set the user after the initial session was sent, then navigate so the (now exited)
52+
// initial session carries the `did`.
53+
await page.locator('#set-user').click();
54+
4555
const exitedInitialSessionPromise = waitForSession(page, s => !s.init && s.status === 'exited');
4656

4757
await page.locator('#navigate').click();
@@ -79,6 +89,10 @@ sentryTest('includes the user id in the subsequent session', async ({ getLocalTe
7989
timestamp: expect.any(String),
8090
});
8191

92+
// Set the user after the initial session was sent, then navigate so the subsequent
93+
// session inherits the `did`.
94+
await page.locator('#set-user').click();
95+
8296
const secondSessionPromise = waitForSession(page, s => !!s.init && s.status === 'ok' && s.sid !== initialSession.sid);
8397

8498
await page.locator('#navigate').click();

dev-packages/browser-integration-tests/suites/tracing/metrics/pageload-resource-spans/test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU
6565
expect(scriptSpans?.map(({ description }) => description).sort()).toEqual(expectedScripts);
6666
expect(scriptSpans?.map(({ parent_span_id }) => parent_span_id)).toEqual(expectedScripts.map(() => spanId));
6767

68+
// The init bundle script is served from the test origin: its description is origin-relative,
69+
// but `url.full` retains the full absolute URL (needed for span description inference).
70+
const sameOriginScriptSpan = scriptSpans?.find(({ description }) => description === '/init.bundle.js');
71+
expect(sameOriginScriptSpan?.data?.['url.same_origin']).toBe(true);
72+
expect(sameOriginScriptSpan?.data?.['url.full']).toMatch(/^https?:\/\/.+\/init\.bundle\.js$/);
73+
6874
const customScriptSpan = scriptSpans?.find(
6975
({ description }) => description === 'https://sentry-test-site.example/path/to/script.js',
7076
);
@@ -94,6 +100,7 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU
94100
'server.address': 'sentry-test-site.example',
95101
'url.same_origin': false,
96102
'url.scheme': 'https',
103+
'url.full': 'https://sentry-test-site.example/path/to/image.svg',
97104
...(!isWebkitRun && {
98105
'http.response.status_code': expect.any(Number),
99106
'resource.render_blocking_status': 'non-blocking',
@@ -141,6 +148,7 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU
141148
'server.address': 'sentry-test-site.example',
142149
'url.same_origin': false,
143150
'url.scheme': 'https',
151+
'url.full': 'https://sentry-test-site.example/path/to/style.css',
144152
...(!isWebkitRun && {
145153
'http.response.status_code': expect.any(Number),
146154
'resource.render_blocking_status': 'non-blocking',
@@ -182,6 +190,7 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU
182190
'server.address': 'sentry-test-site.example',
183191
'url.same_origin': false,
184192
'url.scheme': 'https',
193+
'url.full': 'https://sentry-test-site.example/path/to/script.js',
185194
...(!isWebkitRun && {
186195
'http.response.status_code': expect.any(Number),
187196
'resource.render_blocking_status': 'non-blocking',

dev-packages/cloudflare-integration-tests/suites/basic/wrangler.jsonc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"name": "worker-name",
33
"compatibility_date": "2025-06-17",
44
"main": "index.ts",
5-
"compatibility_flags": ["nodejs_compat"],
5+
"compatibility_flags": ["nodejs_als"],
66
}

0 commit comments

Comments
 (0)