From 810ecebba78732322b820d1748d06ab524fe53bb Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:15:09 +0200 Subject: [PATCH 1/2] feat(core): Rename `queryParams` to `urlQueryParams` --- packages/astro/test/server/middleware.test.ts | 2 +- packages/core/src/integrations/requestdata.ts | 2 +- packages/core/src/types/datacollection.ts | 10 ++-- .../defaultPiiToCollectionOptions.ts | 4 +- .../resolveDataCollectionOptions.ts | 4 +- .../lib/integrations/mcp-server/testUtils.ts | 2 +- .../defaultPiiToCollectionOptions.test.ts | 8 ++-- .../resolveDataCollectionOptions.test.ts | 46 ++++++++++++++++--- packages/core/test/lib/utils/request.test.ts | 2 +- .../hooks/wrapMiddlewareHandler.test.ts | 2 +- packages/remix/test/server/errors.test.ts | 2 +- 11 files changed, 60 insertions(+), 24 deletions(-) diff --git a/packages/astro/test/server/middleware.test.ts b/packages/astro/test/server/middleware.test.ts index 208e9a522d0a..a5a43f78e7b3 100644 --- a/packages/astro/test/server/middleware.test.ts +++ b/packages/astro/test/server/middleware.test.ts @@ -63,7 +63,7 @@ describe('sentryMiddleware', () => { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: [], - queryParams: true, + urlQueryParams: true, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 5, diff --git a/packages/core/src/integrations/requestdata.ts b/packages/core/src/integrations/requestdata.ts index 5dc956c4dd73..27990ad2d6cc 100644 --- a/packages/core/src/integrations/requestdata.ts +++ b/packages/core/src/integrations/requestdata.ts @@ -56,7 +56,7 @@ const _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) = data: true, headers: dataCollection.httpHeaders.request !== false, ip: dataCollection.userInfo, - query_string: dataCollection.queryParams !== false, + query_string: dataCollection.urlQueryParams !== false, // No dataCollection equivalent — URL is always included url: true, ...options.include, diff --git a/packages/core/src/types/datacollection.ts b/packages/core/src/types/datacollection.ts index 8d4de6484544..38adc185eb1b 100644 --- a/packages/core/src/types/datacollection.ts +++ b/packages/core/src/types/datacollection.ts @@ -44,11 +44,14 @@ export interface DataCollection { */ httpBodies?: HttpBodyCollectionTarget[]; + /** @deprecated Use `urlQueryParams` instead. */ + queryParams?: CollectBehavior; + /** - * Controls query parameter collection and sensitive value filtering. + * Controls URL query parameter collection and sensitive value filtering. * @default true */ - queryParams?: CollectBehavior; + urlQueryParams?: CollectBehavior; /** * Controls generative AI input/output recording. @@ -75,7 +78,8 @@ export interface DataCollection { /** * Fully resolved `DataCollection` with all defaults applied. */ -export type ResolvedDataCollection = Required & { +// todo(v11): change `Omit` to just `DataCollection` +export type ResolvedDataCollection = Required> & { httpHeaders: Required>; genAI: Required>; }; diff --git a/packages/core/src/utils/data-collection/defaultPiiToCollectionOptions.ts b/packages/core/src/utils/data-collection/defaultPiiToCollectionOptions.ts index 361275f62f02..3ae0a8aaa6ce 100644 --- a/packages/core/src/utils/data-collection/defaultPiiToCollectionOptions.ts +++ b/packages/core/src/utils/data-collection/defaultPiiToCollectionOptions.ts @@ -15,7 +15,7 @@ export function defaultPiiToCollectionOptions(sendDefaultPii?: boolean): Resolve cookies: true, httpHeaders: { request: true, response: true }, httpBodies: ['incomingRequest', 'outgoingRequest', 'incomingResponse', 'outgoingResponse'], - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 7, // default should be 5, but ContextLines integration uses 7 @@ -25,7 +25,7 @@ export function defaultPiiToCollectionOptions(sendDefaultPii?: boolean): Resolve cookies: { deny: PII_HEADER_SNIPPETS }, httpHeaders: { request: { deny: PII_HEADER_SNIPPETS }, response: { deny: PII_HEADER_SNIPPETS } }, httpBodies: [], - queryParams: { deny: PII_HEADER_SNIPPETS }, + urlQueryParams: { deny: PII_HEADER_SNIPPETS }, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 7, // default should be 5, but ContextLines integration uses 7 diff --git a/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts b/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts index 558bb05a468c..ff2dc529f484 100644 --- a/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts +++ b/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts @@ -6,7 +6,7 @@ const DEFAULTS: ResolvedDataCollection = { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: ['incomingRequest', 'outgoingRequest', 'incomingResponse', 'outgoingResponse'], - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 5, @@ -42,7 +42,7 @@ export function resolveDataCollectionOptions(options: { response: dc.httpHeaders?.response ?? base.httpHeaders.response, }, httpBodies: dc.httpBodies ?? base.httpBodies, - queryParams: dc.queryParams ?? base.queryParams, + urlQueryParams: dc.urlQueryParams ?? dc.queryParams ?? base.urlQueryParams, genAI: { inputs: dc.genAI?.inputs ?? base.genAI.inputs, outputs: dc.genAI?.outputs ?? base.genAI.outputs, diff --git a/packages/core/test/lib/integrations/mcp-server/testUtils.ts b/packages/core/test/lib/integrations/mcp-server/testUtils.ts index fce9bf7d2ae8..86dafe27b9f4 100644 --- a/packages/core/test/lib/integrations/mcp-server/testUtils.ts +++ b/packages/core/test/lib/integrations/mcp-server/testUtils.ts @@ -16,7 +16,7 @@ export function createMockClient(userInfo = true, genAI?: { inputs: boolean; out cookies: true, httpHeaders: { request: true, response: true }, httpBodies: [], - queryParams: true, + urlQueryParams: true, genAI: genAIOptions, stackFrameVariables: true, frameContextLines: 5, diff --git a/packages/core/test/lib/utils/data-collection/defaultPiiToCollectionOptions.test.ts b/packages/core/test/lib/utils/data-collection/defaultPiiToCollectionOptions.test.ts index fcd9463e7f0f..c1882827a0aa 100644 --- a/packages/core/test/lib/utils/data-collection/defaultPiiToCollectionOptions.test.ts +++ b/packages/core/test/lib/utils/data-collection/defaultPiiToCollectionOptions.test.ts @@ -8,7 +8,7 @@ describe('defaultPiiToCollectionOptions', () => { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: ['incomingRequest', 'outgoingRequest', 'incomingResponse', 'outgoingResponse'], - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 7, @@ -24,7 +24,7 @@ describe('defaultPiiToCollectionOptions', () => { response: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, }, httpBodies: [], - queryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, + urlQueryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 7, @@ -40,7 +40,7 @@ describe('defaultPiiToCollectionOptions', () => { response: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, }, httpBodies: [], - queryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, + urlQueryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 7, @@ -56,7 +56,7 @@ describe('defaultPiiToCollectionOptions', () => { response: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, }, httpBodies: [], - queryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, + urlQueryParams: { deny: ['forwarded', '-ip', 'remote-', 'via', '-user'] }, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 7, diff --git a/packages/core/test/lib/utils/data-collection/resolveDataCollectionOptions.test.ts b/packages/core/test/lib/utils/data-collection/resolveDataCollectionOptions.test.ts index 2cd76e599a05..4380e5ac116e 100644 --- a/packages/core/test/lib/utils/data-collection/resolveDataCollectionOptions.test.ts +++ b/packages/core/test/lib/utils/data-collection/resolveDataCollectionOptions.test.ts @@ -7,7 +7,7 @@ describe('resolveDataCollectionOptions', () => { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: ['incomingRequest', 'outgoingRequest', 'incomingResponse', 'outgoingResponse'], - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 5, @@ -44,7 +44,7 @@ describe('resolveDataCollectionOptions', () => { expect(result.cookies).toBe(true); expect(result.httpHeaders).toEqual({ request: true, response: true }); expect(result.httpBodies).toEqual(['incomingRequest', 'outgoingRequest', 'incomingResponse', 'outgoingResponse']); - expect(result.queryParams).toBe(true); + expect(result.urlQueryParams).toBe(true); expect(result.genAI).toEqual({ inputs: true, outputs: true }); }); @@ -86,7 +86,7 @@ describe('resolveDataCollectionOptions', () => { // Everything else is spec default expect(result.cookies).toBe(true); expect(result.httpHeaders).toEqual({ request: true, response: true }); - expect(result.queryParams).toBe(true); + expect(result.urlQueryParams).toBe(true); expect(result.genAI).toEqual({ inputs: true, outputs: true }); expect(result.stackFrameVariables).toBe(true); expect(result.frameContextLines).toBe(5); @@ -124,14 +124,14 @@ describe('resolveDataCollectionOptions', () => { expect(result.cookies).toEqual({ deny: ['x-custom'] }); }); - it('supports turning off query params', () => { + it('supports turning off URL query params', () => { const result = resolveDataCollectionOptions({ dataCollection: { - queryParams: false, + urlQueryParams: false, }, }); - expect(result.queryParams).toBe(false); + expect(result.urlQueryParams).toBe(false); }); }); @@ -146,7 +146,7 @@ describe('resolveDataCollectionOptions', () => { expect(result).toHaveProperty('httpHeaders.request'); expect(result).toHaveProperty('httpHeaders.response'); expect(result).toHaveProperty('httpBodies'); - expect(result).toHaveProperty('queryParams'); + expect(result).toHaveProperty('urlQueryParams'); expect(result).toHaveProperty('genAI'); expect(result).toHaveProperty('genAI.inputs'); expect(result).toHaveProperty('genAI.outputs'); @@ -154,4 +154,36 @@ describe('resolveDataCollectionOptions', () => { expect(result).toHaveProperty('frameContextLines'); }); }); + + describe('deprecated queryParams alias', () => { + it('honors deprecated queryParams when urlQueryParams is not set', () => { + expect(resolveDataCollectionOptions({ dataCollection: { queryParams: false } }).urlQueryParams).toBe(false); + + expect( + resolveDataCollectionOptions({ dataCollection: { queryParams: { deny: ['token'] } } }).urlQueryParams, + ).toEqual({ deny: ['token'] }); + }); + + it('prefers urlQueryParams over the deprecated queryParams when both are set', () => { + // new field wins, even when it is the "off" value + expect( + resolveDataCollectionOptions({ dataCollection: { urlQueryParams: false, queryParams: true } }).urlQueryParams, + ).toBe(false); + + expect( + resolveDataCollectionOptions({ dataCollection: { urlQueryParams: true, queryParams: false } }).urlQueryParams, + ).toBe(true); + }); + + it('falls back to the default when neither is set', () => { + // dataCollection provided → spec default (collect) + expect(resolveDataCollectionOptions({ dataCollection: {} }).urlQueryParams).toBe(true); + }); + + it('does not leak the deprecated queryParams key into the resolved output', () => { + const result = resolveDataCollectionOptions({ dataCollection: { queryParams: false } }); + expect(result).not.toHaveProperty('queryParams'); + expect(Object.keys(result)).toHaveLength(8); + }); + }); }); diff --git a/packages/core/test/lib/utils/request.test.ts b/packages/core/test/lib/utils/request.test.ts index 609dde8a05ab..16b176701ccf 100644 --- a/packages/core/test/lib/utils/request.test.ts +++ b/packages/core/test/lib/utils/request.test.ts @@ -873,7 +873,7 @@ describe('request utils', () => { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: [], - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 5, diff --git a/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts b/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts index d022eef4492f..1792e01c4981 100644 --- a/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts +++ b/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts @@ -46,7 +46,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { cookies: true, httpHeaders: { request: true, response: true }, httpBodies: [], - queryParams: true, + urlQueryParams: true, genAI: { inputs: false, outputs: false }, stackFrameVariables: true, frameContextLines: 5, diff --git a/packages/remix/test/server/errors.test.ts b/packages/remix/test/server/errors.test.ts index a3faf2dfdfdc..24050ff1e066 100644 --- a/packages/remix/test/server/errors.test.ts +++ b/packages/remix/test/server/errors.test.ts @@ -16,7 +16,7 @@ function createMockClient(httpBodies: string[] = []): Client { cookies: true, httpHeaders: { request: true, response: true }, httpBodies, - queryParams: true, + urlQueryParams: true, genAI: { inputs: true, outputs: true }, stackFrameVariables: true, frameContextLines: 5, From 4d024613f97878bb4b0f30499d5de6c7d97dab68 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:33:47 +0200 Subject: [PATCH 2/2] fix deprecation warning --- .../src/utils/data-collection/resolveDataCollectionOptions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts b/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts index ff2dc529f484..8a79ef5c5141 100644 --- a/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts +++ b/packages/core/src/utils/data-collection/resolveDataCollectionOptions.ts @@ -42,6 +42,7 @@ export function resolveDataCollectionOptions(options: { response: dc.httpHeaders?.response ?? base.httpHeaders.response, }, httpBodies: dc.httpBodies ?? base.httpBodies, + // oxlint-disable-next-line typescript/no-deprecated urlQueryParams: dc.urlQueryParams ?? dc.queryParams ?? base.urlQueryParams, genAI: { inputs: dc.genAI?.inputs ?? base.genAI.inputs,