Skip to content

Commit f549118

Browse files
committed
don't stringify event data until the end
1 parent e1c95fe commit f549118

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

packages/core/src/request.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ function getSdkMetadataForEnvelopeHeader(api: API): SdkInfo | undefined {
1313
}
1414

1515
/**
16-
* Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.
17-
* Merge with existing data if any.
16+
* Add SDK metadata (name, version, packages, integrations) to the event.
17+
*
18+
* Mutates the object in place. If prior metadata exists, it will be merged with the given metadata.
1819
**/
19-
function enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {
20+
function enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): void {
2021
if (!sdkInfo) {
21-
return event;
22+
return;
2223
}
2324
event.sdk = event.sdk || {};
2425
event.sdk.name = event.sdk.name || sdkInfo.name;
2526
event.sdk.version = event.sdk.version || sdkInfo.version;
2627
event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];
2728
event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];
28-
return event;
29+
return;
2930
}
3031

3132
/** Creates a SentryRequest from a Session. */
@@ -55,11 +56,7 @@ export function eventToSentryRequest(event: Event, api: API): SentryRequest {
5556
const eventType = event.type || 'event';
5657
const useEnvelope = eventType === 'transaction' || api.forceEnvelope();
5758

58-
const req: SentryRequest = {
59-
body: JSON.stringify(sdkInfo ? enhanceEventWithSdkInfo(event, api.metadata.sdk) : event),
60-
type: eventType,
61-
url: useEnvelope ? api.getEnvelopeEndpointWithUrlEncodedAuth() : api.getStoreEndpointWithUrlEncodedAuth(),
62-
};
59+
enhanceEventWithSdkInfo(event, api.metadata.sdk);
6360

6461
// Since we don't need to manipulate envelopes nor store them, there is no exported concept of an Envelope with
6562
// operations including serialization and deserialization. Instead, we only implement a minimal subset of the spec to
@@ -118,11 +115,22 @@ export function eventToSentryRequest(event: Event, api: API): SentryRequest {
118115

119116
const itemHeaders = JSON.stringify(itemHeaderEntries);
120117

118+
const eventJSON = JSON.stringify(event);
119+
121120
// The trailing newline is optional; leave it off to avoid sending unnecessary bytes. (Would be
122121
// `const envelope = `${envelopeHeaders}\n${itemHeaders}\n${req.body}\n`;`.)
123-
const envelope = `${envelopeHeaders}\n${itemHeaders}\n${req.body}`;
124-
req.body = envelope;
122+
const envelope = `${envelopeHeaders}\n${itemHeaders}\n${eventJSON}`;
123+
124+
return {
125+
body: envelope,
126+
type: eventType,
127+
url: api.getEnvelopeEndpointWithUrlEncodedAuth(),
128+
};
125129
}
126130

127-
return req;
131+
return {
132+
body: JSON.stringify(event),
133+
type: eventType,
134+
url: api.getStoreEndpointWithUrlEncodedAuth(),
135+
};
128136
}

0 commit comments

Comments
 (0)