UNPKG

3.27 kBJavaScriptView Raw
1import { dsnToString, createEnvelope, dropUndefinedKeys, getSentryBaggageItems } from '@sentry/utils';
2
3/** Extract sdk info from from the API metadata */
4function getSdkMetadataForEnvelopeHeader(metadata) {
5 if (!metadata || !metadata.sdk) {
6 return;
7 }
8 const { name, version } = metadata.sdk;
9 return { name, version };
10}
11
12/**
13 * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.
14 * Merge with existing data if any.
15 **/
16function 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/** Creates an envelope from a Session */
29function 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 * Create an Envelope from an event.
50 */
51function 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 // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to
68 // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may
69 // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid
70 // of this `delete`, lest we miss putting it back in the next time the property is in use.)
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
83function 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
104export { createEventEnvelope, createSessionEnvelope };
105//# sourceMappingURL=envelope.js.map