From 07618a8eb5c400ad7d443453d8fcc19c1e5eb810 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Mon, 28 Apr 2025 14:02:12 +0200 Subject: [PATCH 1/4] add todo/fixme comments --- packages/browser-utils/src/networkUtils.ts | 1 + packages/browser/src/integrations/httpcontext.ts | 2 +- packages/bun/src/integrations/bunserver.ts | 4 ++-- packages/cloudflare/src/sdk.ts | 1 + packages/core/src/fetch.ts | 1 + packages/core/src/integrations/requestdata.ts | 3 +++ packages/node/src/integrations/context.ts | 1 + packages/replay-internal/src/coreHandlers/util/fetchUtils.ts | 2 ++ packages/vercel-edge/src/sdk.ts | 1 + 9 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/browser-utils/src/networkUtils.ts b/packages/browser-utils/src/networkUtils.ts index db8bb36fe357..ecc9789847d7 100644 --- a/packages/browser-utils/src/networkUtils.ts +++ b/packages/browser-utils/src/networkUtils.ts @@ -17,6 +17,7 @@ export function serializeFormData(formData: FormData): string { /** Get the string representation of a body. */ export function getBodyString(body: unknown, _logger: Logger = logger): [string | undefined, NetworkMetaWarning?] { + // fixme: only add body string if `sendDefaultPii` is enabled? try { if (typeof body === 'string') { return [body]; diff --git a/packages/browser/src/integrations/httpcontext.ts b/packages/browser/src/integrations/httpcontext.ts index 78e27713c78f..5f5a148b9123 100644 --- a/packages/browser/src/integrations/httpcontext.ts +++ b/packages/browser/src/integrations/httpcontext.ts @@ -20,7 +20,7 @@ export const httpContextIntegration = defineIntegration(() => { const { userAgent } = WINDOW.navigator || {}; const headers = { - ...event.request?.headers, + ...event.request?.headers, // fixme: add conditional for `sendDefaultPii` here? ...(referrer && { Referer: referrer }), ...(userAgent && { 'User-Agent': userAgent }), }; diff --git a/packages/bun/src/integrations/bunserver.ts b/packages/bun/src/integrations/bunserver.ts index 89a86d827ea0..859a7110d5eb 100644 --- a/packages/bun/src/integrations/bunserver.ts +++ b/packages/bun/src/integrations/bunserver.ts @@ -209,7 +209,7 @@ function wrapRequestHandler( normalizedRequest: { url: request.url, method: request.method, - headers: request.headers.toJSON(), + headers: request.headers.toJSON(), // fixme: headers are passed 1:1 query_string: parsedUrl?.search, } satisfies RequestEventData, }); @@ -232,7 +232,7 @@ function wrapRequestHandler( if (response?.status) { setHttpStatus(span, response.status); isolationScope.setContext('response', { - headers: response.headers.toJSON(), + headers: response.headers.toJSON(), // fixme: headers are passed 1:1 status_code: response.status, }); } diff --git a/packages/cloudflare/src/sdk.ts b/packages/cloudflare/src/sdk.ts index 96e5fcc643a9..293911966513 100644 --- a/packages/cloudflare/src/sdk.ts +++ b/packages/cloudflare/src/sdk.ts @@ -27,6 +27,7 @@ export function getDefaultIntegrations(options: CloudflareOptions): Integration[ functionToStringIntegration(), linkedErrorsIntegration(), fetchIntegration(), + // todo: the `include` object should be defined based on `sendDefaultPii` directly in the integration requestDataIntegration(sendDefaultPii ? undefined : { include: { cookies: false } }), consoleIntegration(), ]; diff --git a/packages/core/src/fetch.ts b/packages/core/src/fetch.ts index f6d3ab96486c..1e623866b159 100644 --- a/packages/core/src/fetch.ts +++ b/packages/core/src/fetch.ts @@ -205,6 +205,7 @@ function endSpan(span: Span, handlerData: HandlerDataFetch): void { if (handlerData.response) { setHttpStatus(span, handlerData.response.status); + // fixme: only send if `sendDefaultPii`? const contentLength = handlerData.response?.headers && handlerData.response.headers.get('content-length'); if (contentLength) { diff --git a/packages/core/src/integrations/requestdata.ts b/packages/core/src/integrations/requestdata.ts index c8271043ece2..2645699edeac 100644 --- a/packages/core/src/integrations/requestdata.ts +++ b/packages/core/src/integrations/requestdata.ts @@ -45,6 +45,7 @@ const _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) = const includeWithDefaultPiiApplied: RequestDataIncludeOptions = { ...include, + // todo: also exclude cookies and headers if sendDefaultPii is false ip: include.ip ?? client.getOptions().sendDefaultPii, }; @@ -74,6 +75,7 @@ function addNormalizedRequestDataToEvent( additionalData: { ipAddress?: string }, include: RequestDataIncludeOptions, ): void { + // fixme: only add when `sendDefaultPii` is enabled? event.request = { ...event.request, ...extractNormalizedRequestData(req, include), @@ -121,6 +123,7 @@ function extractNormalizedRequestData( } if (include.cookies) { + // fixme: cookies enabled by default? const cookies = normalizedRequest.cookies || (headers?.cookie ? parseCookie(headers.cookie) : undefined); requestData.cookies = cookies || {}; } diff --git a/packages/node/src/integrations/context.ts b/packages/node/src/integrations/context.ts index ed3e265b952b..9610def62e9b 100644 --- a/packages/node/src/integrations/context.ts +++ b/packages/node/src/integrations/context.ts @@ -61,6 +61,7 @@ const _nodeContextIntegration = ((options: ContextOptions = {}) => { const updatedContext = _updateContext(await cachedContext); + // fixme: conditional with `sendDefaultPii` here? event.contexts = { ...event.contexts, app: { ...updatedContext.app, ...event.contexts?.app }, diff --git a/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts b/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts index e66bd9c26849..b9952fb00664 100644 --- a/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts +++ b/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts @@ -55,9 +55,11 @@ export function enrichFetchBreadcrumb( ): void { const { input, response } = hint; + // fixme: only add this if `sendDefaultPii` is enabled? const body = input ? getFetchRequestArgBody(input) : undefined; const reqSize = getBodySize(body); + // fixme: only send response body size if `sendDefaultPii` is enabled? const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined; if (reqSize !== undefined) { diff --git a/packages/vercel-edge/src/sdk.ts b/packages/vercel-edge/src/sdk.ts index 1a09b16496a9..775908293164 100644 --- a/packages/vercel-edge/src/sdk.ts +++ b/packages/vercel-edge/src/sdk.ts @@ -59,6 +59,7 @@ export function getDefaultIntegrations(options: Options): Integration[] { linkedErrorsIntegration(), winterCGFetchIntegration(), consoleIntegration(), + // fixme: integration can be included - but integration should not add IP address etc ...(options.sendDefaultPii ? [requestDataIntegration()] : []), ]; } From 8252444574e192a38807a3be0a1612d5044bb5f7 Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Wed, 30 Apr 2025 12:22:21 +0200 Subject: [PATCH 2/4] add comment --- packages/replay-internal/src/coreHandlers/util/xhrUtils.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/replay-internal/src/coreHandlers/util/xhrUtils.ts b/packages/replay-internal/src/coreHandlers/util/xhrUtils.ts index 6028a09232ba..72c54eb52858 100644 --- a/packages/replay-internal/src/coreHandlers/util/xhrUtils.ts +++ b/packages/replay-internal/src/coreHandlers/util/xhrUtils.ts @@ -99,6 +99,8 @@ function _prepareXhrData( }; } + // ---- This additional network data below is only captured for URLs defined in `networkDetailAllowUrls` ---- + const xhrInfo = xhr[SENTRY_XHR_DATA_KEY]; const networkRequestHeaders = xhrInfo ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders) From f2fdc6556ca379162e7817f54d5cee41bd2c0a3f Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Wed, 30 Apr 2025 17:45:05 +0200 Subject: [PATCH 3/4] add todos for v10 --- packages/browser-utils/src/networkUtils.ts | 1 - packages/browser/src/integrations/httpcontext.ts | 2 +- packages/bun/src/integrations/bunserver.ts | 2 +- packages/cloudflare/src/sdk.ts | 2 +- packages/core/src/fetch.ts | 1 - packages/core/src/integrations/requestdata.ts | 3 +-- packages/node/src/integrations/context.ts | 2 +- packages/replay-internal/src/coreHandlers/util/fetchUtils.ts | 2 -- packages/vercel-edge/src/sdk.ts | 2 +- 9 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/browser-utils/src/networkUtils.ts b/packages/browser-utils/src/networkUtils.ts index ecc9789847d7..db8bb36fe357 100644 --- a/packages/browser-utils/src/networkUtils.ts +++ b/packages/browser-utils/src/networkUtils.ts @@ -17,7 +17,6 @@ export function serializeFormData(formData: FormData): string { /** Get the string representation of a body. */ export function getBodyString(body: unknown, _logger: Logger = logger): [string | undefined, NetworkMetaWarning?] { - // fixme: only add body string if `sendDefaultPii` is enabled? try { if (typeof body === 'string') { return [body]; diff --git a/packages/browser/src/integrations/httpcontext.ts b/packages/browser/src/integrations/httpcontext.ts index 5f5a148b9123..78e27713c78f 100644 --- a/packages/browser/src/integrations/httpcontext.ts +++ b/packages/browser/src/integrations/httpcontext.ts @@ -20,7 +20,7 @@ export const httpContextIntegration = defineIntegration(() => { const { userAgent } = WINDOW.navigator || {}; const headers = { - ...event.request?.headers, // fixme: add conditional for `sendDefaultPii` here? + ...event.request?.headers, ...(referrer && { Referer: referrer }), ...(userAgent && { 'User-Agent': userAgent }), }; diff --git a/packages/bun/src/integrations/bunserver.ts b/packages/bun/src/integrations/bunserver.ts index 859a7110d5eb..6aafdfc04116 100644 --- a/packages/bun/src/integrations/bunserver.ts +++ b/packages/bun/src/integrations/bunserver.ts @@ -209,7 +209,7 @@ function wrapRequestHandler( normalizedRequest: { url: request.url, method: request.method, - headers: request.headers.toJSON(), // fixme: headers are passed 1:1 + headers: request.headers.toJSON(), query_string: parsedUrl?.search, } satisfies RequestEventData, }); diff --git a/packages/cloudflare/src/sdk.ts b/packages/cloudflare/src/sdk.ts index 293911966513..54a96bcc4908 100644 --- a/packages/cloudflare/src/sdk.ts +++ b/packages/cloudflare/src/sdk.ts @@ -27,7 +27,7 @@ export function getDefaultIntegrations(options: CloudflareOptions): Integration[ functionToStringIntegration(), linkedErrorsIntegration(), fetchIntegration(), - // todo: the `include` object should be defined based on `sendDefaultPii` directly in the integration + // TODO(v10): the `include` object should be defined directly in the integration based on `sendDefaultPii` requestDataIntegration(sendDefaultPii ? undefined : { include: { cookies: false } }), consoleIntegration(), ]; diff --git a/packages/core/src/fetch.ts b/packages/core/src/fetch.ts index 1e623866b159..f6d3ab96486c 100644 --- a/packages/core/src/fetch.ts +++ b/packages/core/src/fetch.ts @@ -205,7 +205,6 @@ function endSpan(span: Span, handlerData: HandlerDataFetch): void { if (handlerData.response) { setHttpStatus(span, handlerData.response.status); - // fixme: only send if `sendDefaultPii`? const contentLength = handlerData.response?.headers && handlerData.response.headers.get('content-length'); if (contentLength) { diff --git a/packages/core/src/integrations/requestdata.ts b/packages/core/src/integrations/requestdata.ts index 2645699edeac..c5a05395f624 100644 --- a/packages/core/src/integrations/requestdata.ts +++ b/packages/core/src/integrations/requestdata.ts @@ -21,6 +21,7 @@ type RequestDataIntegrationOptions = { include?: RequestDataIncludeOptions; }; +// TODO(v10): Change defaults based on `sendDefaultPii` const DEFAULT_INCLUDE: RequestDataIncludeOptions = { cookies: true, data: true, @@ -75,7 +76,6 @@ function addNormalizedRequestDataToEvent( additionalData: { ipAddress?: string }, include: RequestDataIncludeOptions, ): void { - // fixme: only add when `sendDefaultPii` is enabled? event.request = { ...event.request, ...extractNormalizedRequestData(req, include), @@ -123,7 +123,6 @@ function extractNormalizedRequestData( } if (include.cookies) { - // fixme: cookies enabled by default? const cookies = normalizedRequest.cookies || (headers?.cookie ? parseCookie(headers.cookie) : undefined); requestData.cookies = cookies || {}; } diff --git a/packages/node/src/integrations/context.ts b/packages/node/src/integrations/context.ts index 9610def62e9b..89d594710343 100644 --- a/packages/node/src/integrations/context.ts +++ b/packages/node/src/integrations/context.ts @@ -61,7 +61,7 @@ const _nodeContextIntegration = ((options: ContextOptions = {}) => { const updatedContext = _updateContext(await cachedContext); - // fixme: conditional with `sendDefaultPii` here? + // TODO(v10): conditional with `sendDefaultPii` here? event.contexts = { ...event.contexts, app: { ...updatedContext.app, ...event.contexts?.app }, diff --git a/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts b/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts index b9952fb00664..e66bd9c26849 100644 --- a/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts +++ b/packages/replay-internal/src/coreHandlers/util/fetchUtils.ts @@ -55,11 +55,9 @@ export function enrichFetchBreadcrumb( ): void { const { input, response } = hint; - // fixme: only add this if `sendDefaultPii` is enabled? const body = input ? getFetchRequestArgBody(input) : undefined; const reqSize = getBodySize(body); - // fixme: only send response body size if `sendDefaultPii` is enabled? const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined; if (reqSize !== undefined) { diff --git a/packages/vercel-edge/src/sdk.ts b/packages/vercel-edge/src/sdk.ts index 775908293164..fdd254a21d21 100644 --- a/packages/vercel-edge/src/sdk.ts +++ b/packages/vercel-edge/src/sdk.ts @@ -59,7 +59,7 @@ export function getDefaultIntegrations(options: Options): Integration[] { linkedErrorsIntegration(), winterCGFetchIntegration(), consoleIntegration(), - // fixme: integration can be included - but integration should not add IP address etc + // TODO(v10): integration can be included - but integration should not add IP address etc ...(options.sendDefaultPii ? [requestDataIntegration()] : []), ]; } From b3d6025ed0fea49988c351ea9bcbd6bba322afdd Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Wed, 30 Apr 2025 17:47:47 +0200 Subject: [PATCH 4/4] delete unnecessary comments --- packages/bun/src/integrations/bunserver.ts | 2 +- packages/core/src/integrations/requestdata.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bun/src/integrations/bunserver.ts b/packages/bun/src/integrations/bunserver.ts index 6aafdfc04116..89a86d827ea0 100644 --- a/packages/bun/src/integrations/bunserver.ts +++ b/packages/bun/src/integrations/bunserver.ts @@ -232,7 +232,7 @@ function wrapRequestHandler( if (response?.status) { setHttpStatus(span, response.status); isolationScope.setContext('response', { - headers: response.headers.toJSON(), // fixme: headers are passed 1:1 + headers: response.headers.toJSON(), status_code: response.status, }); } diff --git a/packages/core/src/integrations/requestdata.ts b/packages/core/src/integrations/requestdata.ts index c5a05395f624..767d2764002f 100644 --- a/packages/core/src/integrations/requestdata.ts +++ b/packages/core/src/integrations/requestdata.ts @@ -46,7 +46,6 @@ const _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) = const includeWithDefaultPiiApplied: RequestDataIncludeOptions = { ...include, - // todo: also exclude cookies and headers if sendDefaultPii is false ip: include.ip ?? client.getOptions().sendDefaultPii, };