From 77ea0bd27dfd055879e5acb51672262ba0fe90e6 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 1 Mar 2022 09:49:54 -0500 Subject: [PATCH 1/3] ref(core): Use helpers with session envelopes This patch converts the sessions logic in `packages/core/src/request.ts` to use the recently introduced envelope helpers. ref: https://github.com/getsentry/sentry-javascript/pull/4587 --- packages/core/src/request.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/core/src/request.ts b/packages/core/src/request.ts index 36952e66d461..51075b6fb32c 100644 --- a/packages/core/src/request.ts +++ b/packages/core/src/request.ts @@ -1,12 +1,12 @@ import { Event, - EventEnvelope, - EventItem, SdkInfo, SentryRequest, SentryRequestType, Session, SessionAggregates, + SessionEnvelope, + SessionItem, } from '@sentry/types'; import { createEnvelope, dsnToString, normalize, serializeEnvelope } from '@sentry/utils'; @@ -40,19 +40,20 @@ function enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event { /** Creates a SentryRequest from a Session. */ export function sessionToSentryRequest(session: Session | SessionAggregates, api: APIDetails): SentryRequest { const sdkInfo = getSdkMetadataForEnvelopeHeader(api); - const envelopeHeaders = JSON.stringify({ + const envelopeHeaders = { sent_at: new Date().toISOString(), ...(sdkInfo && { sdk: sdkInfo }), ...(!!api.tunnel && { dsn: dsnToString(api.dsn) }), - }); - // I know this is hacky but we don't want to add `session` to request type since it's never rate limited - const type: SentryRequestType = 'aggregates' in session ? ('sessions' as SentryRequestType) : 'session'; - const itemHeaders = JSON.stringify({ - type, - }); + }; + + // I know this is hacky but we don't want to add `sessions` to request type since it's never rate limited + const type = 'aggregates' in session ? ('sessions' as SentryRequestType) : 'session'; + // Have to cast type because envelope items do not accept a `SentryRequestType` + const envelopeItem = [{ type } as { type: 'session' | 'sessions' }, session] as SessionItem; + const envelope = createEnvelope(envelopeHeaders, [envelopeItem]); return { - body: `${envelopeHeaders}\n${itemHeaders}\n${JSON.stringify(session)}`, + body: serializeEnvelope(envelope), type, url: getEnvelopeEndpointWithUrlEncodedAuth(api.dsn, api.tunnel), }; From e2378f16c4abef06714c8722b5c03cbaee634db6 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 1 Mar 2022 18:27:46 -0500 Subject: [PATCH 2/3] Update packages/core/src/request.ts Co-authored-by: Katie Byers --- packages/core/src/request.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/request.ts b/packages/core/src/request.ts index 51075b6fb32c..c64d2803487a 100644 --- a/packages/core/src/request.ts +++ b/packages/core/src/request.ts @@ -49,7 +49,7 @@ export function sessionToSentryRequest(session: Session | SessionAggregates, api // I know this is hacky but we don't want to add `sessions` to request type since it's never rate limited const type = 'aggregates' in session ? ('sessions' as SentryRequestType) : 'session'; - // Have to cast type because envelope items do not accept a `SentryRequestType` + // TODO (v7) Have to cast type because envelope items do not accept a `SentryRequestType` const envelopeItem = [{ type } as { type: 'session' | 'sessions' }, session] as SessionItem; const envelope = createEnvelope(envelopeHeaders, [envelopeItem]); return { From 5b7c100cd2e597a0885feca871c4d115911ccc32 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 2 Mar 2022 10:45:17 -0500 Subject: [PATCH 3/3] add back event item --- packages/core/src/request.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core/src/request.ts b/packages/core/src/request.ts index c64d2803487a..01cdd4a3035f 100644 --- a/packages/core/src/request.ts +++ b/packages/core/src/request.ts @@ -1,5 +1,7 @@ import { Event, + EventEnvelope, + EventItem, SdkInfo, SentryRequest, SentryRequestType,