Skip to content

Commit e04d2fc

Browse files
authored
ref(replay): Send SDK's name in replay event (#6514)
Replace the `sentry.javascript.integration.replay` name in `event.sdk.name` with the actual Sentry SDK name (e.g. `sentry.javascript.browser`), analogously to how we send SDK metadata in other event types. Going forward, we can can also use this information e.g. for data analysis to filter replay events by SDK
1 parent 967dfb1 commit e04d2fc

File tree

6 files changed

+73
-15
lines changed

6 files changed

+73
-15
lines changed

packages/replay/src/constants.ts

-5
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,3 @@ export const MAX_SESSION_LIFE = 1_800_000; // 30 minutes
2525
*/
2626
export const DEFAULT_SESSION_SAMPLE_RATE = 0.1;
2727
export const DEFAULT_ERROR_SAMPLE_RATE = 1.0;
28-
29-
export const REPLAY_SDK_INFO = {
30-
name: 'sentry.javascript.integration.replay',
31-
version: __SENTRY_REPLAY_VERSION__,
32-
};

packages/replay/src/replay.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,6 @@ export class ReplayContainer implements ReplayContainerInterface {
939939
};
940940

941941
const replayEvent = await getReplayEvent({ scope, client, replayId, event: baseEvent });
942-
943942
replayEvent.tags = {
944943
...replayEvent.tags,
945944
sessionSampleRate: this._options.sessionSampleRate,
@@ -971,8 +970,8 @@ export class ReplayContainer implements ReplayContainerInterface {
971970
"BrowserTracing",
972971
"Replay"
973972
],
974-
"name": "sentry.javascript.integration.replay",
975-
"version": "7.24.2"
973+
"name": "sentry.javascript.browser",
974+
"version": "7.25.0"
976975
},
977976
"sdkProcessingMetadata": {},
978977
"tags": {

packages/replay/src/util/createReplayEnvelope.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import { Envelope, Event } from '@sentry/types';
22
import { createEnvelope } from '@sentry/utils';
33

4-
import { REPLAY_SDK_INFO } from '../constants';
5-
64
export function createReplayEnvelope(
75
replayId: string,
86
replayEvent: Event,
97
payloadWithSequence: string | Uint8Array,
108
): Envelope {
9+
const { name, version } = replayEvent.sdk || {};
1110
return createEnvelope(
1211
{
1312
event_id: replayId,
1413
sent_at: new Date().toISOString(),
15-
sdk: REPLAY_SDK_INFO,
14+
sdk: { name, version },
1615
},
1716
[
1817
// @ts-ignore New types

packages/replay/src/util/getReplayEvent.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { Scope } from '@sentry/core';
22
import { Client, Event } from '@sentry/types';
33

4-
import { REPLAY_SDK_INFO } from '../constants';
5-
64
export async function getReplayEvent({
75
client,
86
scope,
@@ -18,9 +16,14 @@ export async function getReplayEvent({
1816
// @ts-ignore private api
1917
const preparedEvent: Event = await client._prepareEvent(event, { event_id }, scope);
2018

19+
// extract the SDK name because `client._prepareEvent` doesn't add it to the event
20+
const metadata = client.getOptions() && client.getOptions()._metadata;
21+
const { name } = (metadata && metadata.sdk) || {};
22+
2123
preparedEvent.sdk = {
2224
...preparedEvent.sdk,
23-
...REPLAY_SDK_INFO,
25+
version: __SENTRY_REPLAY_VERSION__,
26+
name,
2427
};
2528

2629
return preparedEvent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { Event } from '@sentry/types';
2+
3+
import { createReplayEnvelope } from '../../../src/util/createReplayEnvelope';
4+
5+
describe('createReplayEnvelope', () => {
6+
it('creates an envelope for a given Replay event', () => {
7+
const replayId = '1234';
8+
const replayEvent = {
9+
type: 'replay_event',
10+
timestamp: 1670837008.634,
11+
error_ids: ['errorId'],
12+
trace_ids: ['traceId'],
13+
urls: ['https://example.com'],
14+
replay_id: 'eventId',
15+
segment_id: 3,
16+
platform: 'javascript',
17+
event_id: 'eventId',
18+
environment: 'production',
19+
sdk: {
20+
integrations: ['BrowserTracing', 'Replay'],
21+
name: 'sentry.javascript.browser',
22+
version: '7.25.0',
23+
},
24+
tags: {
25+
sessionSampleRate: 1,
26+
errorSampleRate: 0,
27+
replayType: 'error',
28+
},
29+
};
30+
const payloadWithSequence = 'payload';
31+
32+
const envelope = createReplayEnvelope(replayId, replayEvent as Event, payloadWithSequence);
33+
34+
expect(envelope).toEqual([
35+
{
36+
event_id: '1234',
37+
sdk: { name: 'sentry.javascript.browser', version: '7.25.0' },
38+
sent_at: expect.any(String),
39+
},
40+
[
41+
[
42+
{ type: 'replay_event' },
43+
{
44+
environment: 'production',
45+
error_ids: ['errorId'],
46+
event_id: 'eventId',
47+
platform: 'javascript',
48+
replay_id: 'eventId',
49+
sdk: { integrations: ['BrowserTracing', 'Replay'], name: 'sentry.javascript.browser', version: '7.25.0' },
50+
segment_id: 3,
51+
tags: { errorSampleRate: 0, replayType: 'error', sessionSampleRate: 1 },
52+
timestamp: 1670837008.634,
53+
trace_ids: ['traceId'],
54+
type: 'replay_event',
55+
urls: ['https://example.com'],
56+
},
57+
],
58+
[{ length: 7, type: 'replay_recording' }, 'payload'],
59+
],
60+
]);
61+
});
62+
});

packages/replay/test/unit/util/getReplayEvent.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('getReplayEvent', () => {
5050
event_id: 'replay-ID',
5151
environment: 'production',
5252
sdk: {
53-
name: 'sentry.javascript.integration.replay',
53+
name: 'sentry.javascript.browser',
5454
version: 'version:Test',
5555
},
5656
sdkProcessingMetadata: {},

0 commit comments

Comments
 (0)