UNPKG

4.09 kBJavaScriptView Raw
1Object.defineProperty(exports, "__esModule", { value: true });
2var tslib_1 = require("tslib");
3/** Extract sdk info from from the API metadata */
4function getSdkMetadataForEnvelopeHeader(api) {
5 if (!api.metadata || !api.metadata.sdk) {
6 return;
7 }
8 var _a = api.metadata.sdk, name = _a.name, version = _a.version;
9 return { name: name, version: version };
10}
11/**
12 * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.
13 * Merge with existing data if any.
14 **/
15function enhanceEventWithSdkInfo(event, sdkInfo) {
16 if (!sdkInfo) {
17 return event;
18 }
19 event.sdk = event.sdk || {};
20 event.sdk.name = event.sdk.name || sdkInfo.name;
21 event.sdk.version = event.sdk.version || sdkInfo.version;
22 event.sdk.integrations = tslib_1.__spread((event.sdk.integrations || []), (sdkInfo.integrations || []));
23 event.sdk.packages = tslib_1.__spread((event.sdk.packages || []), (sdkInfo.packages || []));
24 return event;
25}
26/** Creates a SentryRequest from a Session. */
27function sessionToSentryRequest(session, api) {
28 var sdkInfo = getSdkMetadataForEnvelopeHeader(api);
29 var envelopeHeaders = JSON.stringify(tslib_1.__assign(tslib_1.__assign({ sent_at: new Date().toISOString() }, (sdkInfo && { sdk: sdkInfo })), (api.forceEnvelope() && { dsn: api.getDsn().toString() })));
30 // I know this is hacky but we don't want to add `session` to request type since it's never rate limited
31 var type = 'aggregates' in session ? 'sessions' : 'session';
32 var itemHeaders = JSON.stringify({
33 type: type,
34 });
35 return {
36 body: envelopeHeaders + "\n" + itemHeaders + "\n" + JSON.stringify(session),
37 type: type,
38 url: api.getEnvelopeEndpointWithUrlEncodedAuth(),
39 };
40}
41exports.sessionToSentryRequest = sessionToSentryRequest;
42/** Creates a SentryRequest from an event. */
43function eventToSentryRequest(event, api) {
44 var sdkInfo = getSdkMetadataForEnvelopeHeader(api);
45 var eventType = event.type || 'event';
46 var useEnvelope = eventType === 'transaction' || api.forceEnvelope();
47 var _a = event.debug_meta || {}, transactionSampling = _a.transactionSampling, metadata = tslib_1.__rest(_a, ["transactionSampling"]);
48 var _b = transactionSampling || {}, samplingMethod = _b.method, sampleRate = _b.rate;
49 if (Object.keys(metadata).length === 0) {
50 delete event.debug_meta;
51 }
52 else {
53 event.debug_meta = metadata;
54 }
55 var req = {
56 body: JSON.stringify(sdkInfo ? enhanceEventWithSdkInfo(event, api.metadata.sdk) : event),
57 type: eventType,
58 url: useEnvelope ? api.getEnvelopeEndpointWithUrlEncodedAuth() : api.getStoreEndpointWithUrlEncodedAuth(),
59 };
60 // https://develop.sentry.dev/sdk/envelopes/
61 // Since we don't need to manipulate envelopes nor store them, there is no
62 // exported concept of an Envelope with operations including serialization and
63 // deserialization. Instead, we only implement a minimal subset of the spec to
64 // serialize events inline here.
65 if (useEnvelope) {
66 var envelopeHeaders = JSON.stringify(tslib_1.__assign(tslib_1.__assign({ event_id: event.event_id, sent_at: new Date().toISOString() }, (sdkInfo && { sdk: sdkInfo })), (api.forceEnvelope() && { dsn: api.getDsn().toString() })));
67 var itemHeaders = JSON.stringify({
68 type: eventType,
69 // TODO: Right now, sampleRate may or may not be defined (it won't be in the cases of inheritance and
70 // explicitly-set sampling decisions). Are we good with that?
71 sample_rates: [{ id: samplingMethod, rate: sampleRate }],
72 });
73 // The trailing newline is optional. We intentionally don't send it to avoid
74 // sending unnecessary bytes.
75 //
76 // const envelope = `${envelopeHeaders}\n${itemHeaders}\n${req.body}\n`;
77 var envelope = envelopeHeaders + "\n" + itemHeaders + "\n" + req.body;
78 req.body = envelope;
79 }
80 return req;
81}
82exports.eventToSentryRequest = eventToSentryRequest;
83//# sourceMappingURL=request.js.map
\No newline at end of file