Skip to content

Commit d8b0a83

Browse files
authored
Merge branch 'getsentry:develop' into feat/graphqlClientIntegration
2 parents 998a3fe + 3e31bdc commit d8b0a83

39 files changed

+370
-36
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

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

13-
Work in this release was contributed by @tjhiggins, @chris-basebone, @GrizliK1988, @davidturissini, @nwalters512, @aloisklink, @arturovt, @benjick, @maximepvrt, @mstrokin, @kunal-511, @jahands, @jrandolf, @Zen-cronic and @nathankleyn. Thank you for your contributions!
13+
Work in this release was contributed by @tjhiggins, @chris-basebone, @GrizliK1988, @davidturissini, @nwalters512, @aloisklink, @arturovt, @benjick, @maximepvrt, @mstrokin, @kunal-511, @jahands, @jrandolf, @tannerlinsley, @Zen-cronic and @nathankleyn. Thank you for your contributions!
1414

1515
## 9.0.0-alpha.0
1616

dev-packages/e2e-tests/test-applications/sveltekit-2-twp/package.json renamed to dev-packages/e2e-tests/test-applications/sveltekit-2.5.0-twp/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "sveltekit-2-svelte-5",
2+
"name": "sveltekit-2.5.0-twp",
33
"version": "0.0.1",
44
"private": true,
55
"scripts": {
@@ -22,7 +22,7 @@
2222
"@sentry-internal/test-utils": "link:../../../test-utils",
2323
"@sentry/core": "latest || *",
2424
"@sveltejs/adapter-auto": "^3.0.0",
25-
"@sveltejs/kit": "^2.0.0",
25+
"@sveltejs/kit": "2.5.0",
2626
"@sveltejs/vite-plugin-svelte": "^3.0.0",
2727
"svelte": "^5.0.0-next.115",
2828
"svelte-check": "^3.6.0",

dev-packages/e2e-tests/test-applications/sveltekit-2-twp/start-event-proxy.mjs renamed to dev-packages/e2e-tests/test-applications/sveltekit-2.5.0-twp/start-event-proxy.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils';
22

33
startEventProxyServer({
44
port: 3031,
5-
proxyServerName: 'sveltekit-2-twp',
5+
proxyServerName: 'sveltekit-2.5.0-twp',
66
});

dev-packages/e2e-tests/test-applications/sveltekit-2-twp/tests/errors.test.ts renamed to dev-packages/e2e-tests/test-applications/sveltekit-2.5.0-twp/tests/errors.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import { expect, test } from '@playwright/test';
22
import { waitForError } from '@sentry-internal/test-utils';
33

44
test('errors on frontend and backend are connected by the same trace', async ({ page }) => {
5-
const clientErrorPromise = waitForError('sveltekit-2-twp', evt => {
5+
const clientErrorPromise = waitForError('sveltekit-2.5.0-twp', evt => {
66
return evt.exception?.values?.[0].value === 'Client Error';
77
});
88

9-
const serverErrorPromise = waitForError('sveltekit-2-twp', evt => {
9+
const serverErrorPromise = waitForError('sveltekit-2.5.0-twp', evt => {
1010
return evt.exception?.values?.[0].value === 'No search query provided';
1111
});
1212

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { expect, test } from '@playwright/test';
2+
3+
test.describe('SDK-internal behavior', () => {
4+
test('Injects fetch proxy script for SvelteKit<2.16.0', async ({ page }) => {
5+
await page.goto('/');
6+
7+
const sentryCarrier = await page.evaluate('typeof window.__SENTRY__');
8+
const proxyHandle = await page.evaluate('typeof window._sentryFetchProxy');
9+
10+
// sanity check
11+
expect(sentryCarrier).toBe('object');
12+
13+
// fetch proxy script ran
14+
expect(proxyHandle).toBe('function');
15+
});
16+
});

dev-packages/e2e-tests/test-applications/sveltekit-2/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@sentry/core": "latest || *",
2424
"@sveltejs/adapter-auto": "^3.0.0",
2525
"@sveltejs/adapter-node": "^2.0.0",
26-
"@sveltejs/kit": "^2.5.0",
26+
"@sveltejs/kit": "^2.16.0",
2727
"@sveltejs/vite-plugin-svelte": "^3.0.0",
2828
"svelte": "^4.2.8",
2929
"svelte-check": "^3.6.0",
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { expect, test } from '@playwright/test';
2+
import { waitForInitialPageload } from './utils';
3+
4+
test.describe('SDK-internal behavior', () => {
5+
test("Doesn't inject fetch proxy script for SvelteKit>=2.16.0", async ({ page }) => {
6+
await waitForInitialPageload(page, { route: '/' });
7+
const sentryCarrier = await page.evaluate('typeof window.__SENTRY__');
8+
const proxyHandle = await page.evaluate('typeof window._sentryFetchProxy');
9+
10+
// sanity check
11+
expect(sentryCarrier).toBe('object');
12+
13+
// fetch proxy script didn't run
14+
expect(proxyHandle).toBe('undefined');
15+
});
16+
});
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { loggingTransport } from '@sentry-internal/node-integration-tests';
2+
import * as Sentry from '@sentry/node';
3+
4+
Sentry.init({
5+
dsn: 'https://[email protected]/1337',
6+
release: '1.0',
7+
tracePropagationTargets: [/\/v0/, 'v1'],
8+
integrations: [Sentry.httpIntegration({ spans: false })],
9+
transport: loggingTransport,
10+
// Ensure this gets a correct hint
11+
beforeBreadcrumb(breadcrumb, hint) {
12+
breadcrumb.data = breadcrumb.data || {};
13+
const req = hint?.request as { path?: string };
14+
breadcrumb.data.ADDED_PATH = req?.path;
15+
return breadcrumb;
16+
},
17+
});
18+
19+
import * as http from 'http';
20+
21+
async function run(): Promise<void> {
22+
Sentry.addBreadcrumb({ message: 'manual breadcrumb' });
23+
24+
await makeHttpRequest(`${process.env.SERVER_URL}/api/v0`);
25+
await makeHttpGet(`${process.env.SERVER_URL}/api/v1`);
26+
await makeHttpRequest(`${process.env.SERVER_URL}/api/v2`);
27+
await makeHttpRequest(`${process.env.SERVER_URL}/api/v3`);
28+
29+
Sentry.captureException(new Error('foo'));
30+
}
31+
32+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
33+
run();
34+
35+
function makeHttpRequest(url: string): Promise<void> {
36+
return new Promise<void>(resolve => {
37+
http
38+
.request(url, httpRes => {
39+
httpRes.on('data', () => {
40+
// we don't care about data
41+
});
42+
httpRes.on('end', () => {
43+
resolve();
44+
});
45+
})
46+
.end();
47+
});
48+
}
49+
50+
function makeHttpGet(url: string): Promise<void> {
51+
return new Promise<void>(resolve => {
52+
http.get(url, httpRes => {
53+
httpRes.on('data', () => {
54+
// we don't care about data
55+
});
56+
httpRes.on('end', () => {
57+
resolve();
58+
});
59+
});
60+
});
61+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import { createRunner } from '../../../../utils/runner';
2+
import { createTestServer } from '../../../../utils/server';
3+
4+
test('outgoing http requests are correctly instrumented with tracing & spans disabled', done => {
5+
expect.assertions(11);
6+
7+
createTestServer(done)
8+
.get('/api/v0', headers => {
9+
expect(headers['sentry-trace']).toEqual(expect.stringMatching(/^([a-f0-9]{32})-([a-f0-9]{16})$/));
10+
expect(headers['sentry-trace']).not.toEqual('00000000000000000000000000000000-0000000000000000');
11+
expect(headers['baggage']).toEqual(expect.any(String));
12+
})
13+
.get('/api/v1', headers => {
14+
expect(headers['sentry-trace']).toEqual(expect.stringMatching(/^([a-f0-9]{32})-([a-f0-9]{16})$/));
15+
expect(headers['sentry-trace']).not.toEqual('00000000000000000000000000000000-0000000000000000');
16+
expect(headers['baggage']).toEqual(expect.any(String));
17+
})
18+
.get('/api/v2', headers => {
19+
expect(headers['baggage']).toBeUndefined();
20+
expect(headers['sentry-trace']).toBeUndefined();
21+
})
22+
.get('/api/v3', headers => {
23+
expect(headers['baggage']).toBeUndefined();
24+
expect(headers['sentry-trace']).toBeUndefined();
25+
})
26+
.start()
27+
.then(([SERVER_URL, closeTestServer]) => {
28+
createRunner(__dirname, 'scenario.ts')
29+
.withEnv({ SERVER_URL })
30+
.ensureNoErrorOutput()
31+
.expect({
32+
event: {
33+
exception: {
34+
values: [
35+
{
36+
type: 'Error',
37+
value: 'foo',
38+
},
39+
],
40+
},
41+
breadcrumbs: [
42+
{
43+
message: 'manual breadcrumb',
44+
timestamp: expect.any(Number),
45+
},
46+
{
47+
category: 'http',
48+
data: {
49+
'http.method': 'GET',
50+
url: `${SERVER_URL}/api/v0`,
51+
status_code: 200,
52+
ADDED_PATH: '/api/v0',
53+
},
54+
timestamp: expect.any(Number),
55+
type: 'http',
56+
},
57+
{
58+
category: 'http',
59+
data: {
60+
'http.method': 'GET',
61+
url: `${SERVER_URL}/api/v1`,
62+
status_code: 200,
63+
ADDED_PATH: '/api/v1',
64+
},
65+
timestamp: expect.any(Number),
66+
type: 'http',
67+
},
68+
{
69+
category: 'http',
70+
data: {
71+
'http.method': 'GET',
72+
url: `${SERVER_URL}/api/v2`,
73+
status_code: 200,
74+
ADDED_PATH: '/api/v2',
75+
},
76+
timestamp: expect.any(Number),
77+
type: 'http',
78+
},
79+
{
80+
category: 'http',
81+
data: {
82+
'http.method': 'GET',
83+
url: `${SERVER_URL}/api/v3`,
84+
status_code: 200,
85+
ADDED_PATH: '/api/v3',
86+
},
87+
timestamp: expect.any(Number),
88+
type: 'http',
89+
},
90+
],
91+
},
92+
})
93+
.start(closeTestServer);
94+
});
95+
});

packages/core/src/utils-hoist/baggage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ function baggageHeaderToObject(baggageHeader: string): Record<string, string> {
130130
* @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header
131131
* is not spec compliant.
132132
*/
133-
function objectToBaggageHeader(object: Record<string, string>): string | undefined {
133+
export function objectToBaggageHeader(object: Record<string, string>): string | undefined {
134134
if (Object.keys(object).length === 0) {
135135
// An empty baggage header is not spec compliant: We return undefined.
136136
return undefined;

packages/core/src/utils-hoist/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export {
130130
baggageHeaderToDynamicSamplingContext,
131131
dynamicSamplingContextToSentryBaggageHeader,
132132
parseBaggageHeader,
133+
objectToBaggageHeader,
133134
} from './baggage';
134135

135136
export { getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from './url';

0 commit comments

Comments
 (0)