UNPKG

2.96 kBJavaScriptView Raw
1import { dsnToString, createEnvelope, dropUndefinedKeys } 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 enhanceEventWithSdkInfo(event, metadata && metadata.sdk);
61
62 var envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);
63
64 // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to
65 // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may
66 // 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
67 // of this `delete`, lest we miss putting it back in the next time the property is in use.)
68 delete event.sdkProcessingMetadata;
69
70 var eventItem = [{ type: eventType }, event];
71 return createEnvelope(envelopeHeaders, [eventItem]);
72}
73
74function createEventEnvelopeHeaders(
75 event,
76 sdkInfo,
77 tunnel,
78 dsn,
79) {
80 var dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;
81
82 return {
83 event_id: event.event_id ,
84 sent_at: new Date().toISOString(),
85 ...(sdkInfo && { sdk: sdkInfo }),
86 ...(!!tunnel && { dsn: dsnToString(dsn) }),
87 ...(event.type === 'transaction' &&
88 dynamicSamplingContext && {
89 trace: dropUndefinedKeys({ ...dynamicSamplingContext }),
90 }),
91 };
92}
93
94export { createEventEnvelope, createSessionEnvelope };
95//# sourceMappingURL=envelope.js.map