UNPKG

2.79 kBJavaScriptView Raw
1Object.defineProperty(exports, '__esModule', { value: true });
2
3const utils = require('@sentry/utils');
4
5/**
6 * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.
7 * Merge with existing data if any.
8 **/
9function enhanceEventWithSdkInfo(event, sdkInfo) {
10 if (!sdkInfo) {
11 return event;
12 }
13 event.sdk = event.sdk || {};
14 event.sdk.name = event.sdk.name || sdkInfo.name;
15 event.sdk.version = event.sdk.version || sdkInfo.version;
16 event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];
17 event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];
18 return event;
19}
20
21/** Creates an envelope from a Session */
22function createSessionEnvelope(
23 session,
24 dsn,
25 metadata,
26 tunnel,
27) {
28 const sdkInfo = utils.getSdkMetadataForEnvelopeHeader(metadata);
29 const envelopeHeaders = {
30 sent_at: new Date().toISOString(),
31 ...(sdkInfo && { sdk: sdkInfo }),
32 ...(!!tunnel && { dsn: utils.dsnToString(dsn) }),
33 };
34
35 const envelopeItem =
36 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session];
37
38 return utils.createEnvelope(envelopeHeaders, [envelopeItem]);
39}
40
41/**
42 * Create an Envelope from an event.
43 */
44function createEventEnvelope(
45 event,
46 dsn,
47 metadata,
48 tunnel,
49) {
50 const sdkInfo = utils.getSdkMetadataForEnvelopeHeader(metadata);
51
52 /*
53 Note: Due to TS, event.type may be `replay_event`, theoretically.
54 In practice, we never call `createEventEnvelope` with `replay_event` type,
55 and we'd have to adjut a looot of types to make this work properly.
56 We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)
57 So the safe choice is to really guard against the replay_event type here.
58 */
59 const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';
60
61 enhanceEventWithSdkInfo(event, metadata && metadata.sdk);
62
63 const envelopeHeaders = utils.createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);
64
65 // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to
66 // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may
67 // 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
68 // of this `delete`, lest we miss putting it back in the next time the property is in use.)
69 delete event.sdkProcessingMetadata;
70
71 const eventItem = [{ type: eventType }, event];
72 return utils.createEnvelope(envelopeHeaders, [eventItem]);
73}
74
75exports.createEventEnvelope = createEventEnvelope;
76exports.createSessionEnvelope = createSessionEnvelope;
77//# sourceMappingURL=envelope.js.map