Skip to content

Commit ab9efb2

Browse files
authored
fix: Include DSN in envelope header for sessions (getsentry#3680)
* fix: Include DSN in envelope header for sessions * Add url tests for non-tunnel requests
1 parent e9c6d6a commit ab9efb2

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

packages/core/src/request.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export function sessionToSentryRequest(session: Session | SessionAggregates, api
3333
const envelopeHeaders = JSON.stringify({
3434
sent_at: new Date().toISOString(),
3535
...(sdkInfo && { sdk: sdkInfo }),
36+
...(api.forceEnvelope() && { dsn: api.getDsn().toString() }),
3637
});
3738
// I know this is hacky but we don't want to add `session` to request type since it's never rate limited
3839
const type: SentryRequestType = 'aggregates' in session ? ('sessions' as SentryRequestType) : 'session';

packages/core/test/lib/request.test.ts

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ import { DebugMeta, Event, SentryRequest, TransactionSamplingMethod } from '@sen
33
import { API } from '../../src/api';
44
import { eventToSentryRequest, sessionToSentryRequest } from '../../src/request';
55

6-
const api = new API('https://[email protected]/12312012', {
6+
const ingestDsn = 'https://[email protected]/12312012';
7+
const ingestUrl =
8+
'https://squirrelchasers.ingest.sentry.io/api/12312012/envelope/?sentry_key=dogsarebadatkeepingsecrets&sentry_version=7';
9+
const tunnel = 'https://hello.com/world';
10+
11+
const api = new API(ingestDsn, {
712
sdk: {
813
integrations: ['AWSLambda'],
914
name: 'sentry.javascript.browser',
@@ -12,9 +17,6 @@ const api = new API('https://[email protected]
1217
},
1318
});
1419

15-
const ingestDsn = 'https://[email protected]/12312012';
16-
const tunnel = 'https://hello.com/world';
17-
1820
function parseEnvelopeRequest(request: SentryRequest): any {
1921
const [envelopeHeaderString, itemHeaderString, eventString] = request.body.split('\n');
2022

@@ -26,19 +28,9 @@ function parseEnvelopeRequest(request: SentryRequest): any {
2628
}
2729

2830
describe('eventToSentryRequest', () => {
29-
let api: API;
3031
let event: Event;
3132

3233
beforeEach(() => {
33-
api = new API(ingestDsn, {
34-
sdk: {
35-
integrations: ['AWSLambda'],
36-
name: 'sentry.javascript.browser',
37-
version: `12.31.12`,
38-
packages: [{ name: 'npm:@sentry/browser', version: `12.31.12` }],
39-
},
40-
});
41-
4234
event = {
4335
contexts: { trace: { trace_id: '1231201211212012', span_id: '12261980', op: 'pageload' } },
4436
environment: 'dogpark',
@@ -140,17 +132,15 @@ describe('eventToSentryRequest', () => {
140132
});
141133

142134
it('uses tunnel as the url if it is configured', () => {
143-
api = new API(ingestDsn, {}, tunnel);
135+
const tunnelRequest = eventToSentryRequest(event, new API(ingestDsn, {}, tunnel));
136+
expect(tunnelRequest.url).toEqual(tunnel);
144137

145-
const result = eventToSentryRequest(event, api);
146-
147-
expect(result.url).toEqual(tunnel);
138+
const defaultRequest = eventToSentryRequest(event, new API(ingestDsn, {}));
139+
expect(defaultRequest.url).toEqual(ingestUrl);
148140
});
149141

150142
it('adds dsn to envelope header if tunnel is configured', () => {
151-
api = new API(ingestDsn, {}, tunnel);
152-
153-
const result = eventToSentryRequest(event, api);
143+
const result = eventToSentryRequest(event, new API(ingestDsn, {}, tunnel));
154144
const envelope = parseEnvelopeRequest(result);
155145

156146
expect(envelope.envelopeHeader).toEqual(
@@ -161,10 +151,9 @@ describe('eventToSentryRequest', () => {
161151
});
162152

163153
it('adds default "event" item type to item header if tunnel is configured', () => {
164-
api = new API(ingestDsn, {}, tunnel);
165154
delete event.type;
166155

167-
const result = eventToSentryRequest(event, api);
156+
const result = eventToSentryRequest(event, new API(ingestDsn, {}, tunnel));
168157
const envelope = parseEnvelopeRequest(result);
169158

170159
expect(envelope.itemHeader).toEqual(
@@ -202,4 +191,23 @@ describe('sessionToSentryRequest', () => {
202191
}),
203192
);
204193
});
194+
195+
it('uses tunnel as the url if it is configured', () => {
196+
const tunnelRequest = sessionToSentryRequest({ aggregates: [] }, new API(ingestDsn, {}, tunnel));
197+
expect(tunnelRequest.url).toEqual(tunnel);
198+
199+
const defaultRequest = sessionToSentryRequest({ aggregates: [] }, new API(ingestDsn, {}));
200+
expect(defaultRequest.url).toEqual(ingestUrl);
201+
});
202+
203+
it('adds dsn to envelope header if tunnel is configured', () => {
204+
const result = sessionToSentryRequest({ aggregates: [] }, new API(ingestDsn, {}, tunnel));
205+
const envelope = parseEnvelopeRequest(result);
206+
207+
expect(envelope.envelopeHeader).toEqual(
208+
expect.objectContaining({
209+
dsn: ingestDsn,
210+
}),
211+
);
212+
});
205213
});

0 commit comments

Comments
 (0)