1 | import { dsnToString, createEnvelope, dropUndefinedKeys, getSentryBaggageItems } from '@sentry/utils';
|
2 |
|
3 |
|
4 | function getSdkMetadataForEnvelopeHeader(metadata) {
|
5 | if (!metadata || !metadata.sdk) {
|
6 | return;
|
7 | }
|
8 | const { name, version } = metadata.sdk;
|
9 | return { name, version };
|
10 | }
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | function enhanceEventWithSdkInfo(event, sdkInfo) {
|
17 | if (!sdkInfo) {
|
18 | return event;
|
19 | }
|
20 | event.sdk = event.sdk || {};
|
21 | event.sdk.name = event.sdk.name || sdkInfo.name;
|
22 | event.sdk.version = event.sdk.version || sdkInfo.version;
|
23 | event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];
|
24 | event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];
|
25 | return event;
|
26 | }
|
27 |
|
28 |
|
29 | function createSessionEnvelope(
|
30 | session,
|
31 | dsn,
|
32 | metadata,
|
33 | tunnel,
|
34 | ) {
|
35 | var sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);
|
36 | var envelopeHeaders = {
|
37 | sent_at: new Date().toISOString(),
|
38 | ...(sdkInfo && { sdk: sdkInfo }),
|
39 | ...(!!tunnel && { dsn: dsnToString(dsn) }),
|
40 | };
|
41 |
|
42 | var envelopeItem =
|
43 | 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session];
|
44 |
|
45 | return createEnvelope(envelopeHeaders, [envelopeItem]);
|
46 | }
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | function createEventEnvelope(
|
52 | event,
|
53 | dsn,
|
54 | metadata,
|
55 | tunnel,
|
56 | ) {
|
57 | var sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);
|
58 | var eventType = event.type || 'event';
|
59 |
|
60 | const { transactionSampling } = event.sdkProcessingMetadata || {};
|
61 | const { method: samplingMethod, rate: sampleRate } = transactionSampling || {};
|
62 |
|
63 | enhanceEventWithSdkInfo(event, metadata && metadata.sdk);
|
64 |
|
65 | var envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | delete event.sdkProcessingMetadata;
|
72 |
|
73 | var eventItem = [
|
74 | {
|
75 | type: eventType,
|
76 | sample_rates: [{ id: samplingMethod, rate: sampleRate }],
|
77 | },
|
78 | event,
|
79 | ];
|
80 | return createEnvelope(envelopeHeaders, [eventItem]);
|
81 | }
|
82 |
|
83 | function createEventEnvelopeHeaders(
|
84 | event,
|
85 | sdkInfo,
|
86 | tunnel,
|
87 | dsn,
|
88 | ) {
|
89 | var baggage = event.sdkProcessingMetadata && event.sdkProcessingMetadata.baggage;
|
90 | var dynamicSamplingContext = baggage && getSentryBaggageItems(baggage);
|
91 |
|
92 | return {
|
93 | event_id: event.event_id ,
|
94 | sent_at: new Date().toISOString(),
|
95 | ...(sdkInfo && { sdk: sdkInfo }),
|
96 | ...(!!tunnel && { dsn: dsnToString(dsn) }),
|
97 | ...(event.type === 'transaction' &&
|
98 | dynamicSamplingContext && {
|
99 | trace: dropUndefinedKeys({ ...dynamicSamplingContext }) ,
|
100 | }),
|
101 | };
|
102 | }
|
103 |
|
104 | export { createEventEnvelope, createSessionEnvelope };
|
105 |
|