From bc6faa5554b163cbf7e4e8eb9e86e98db2b8e3d2 Mon Sep 17 00:00:00 2001 From: Lubomir Igonda Date: Fri, 10 Nov 2023 14:28:08 +0000 Subject: [PATCH 1/2] fix(tracing-internal): Fix case when originalURL contain query params --- .../src/node/integrations/express.ts | 4 +++- .../tracing-internal/test/node/express.test.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/tracing-internal/src/node/integrations/express.ts b/packages/tracing-internal/src/node/integrations/express.ts index f7ff20fa9986..019682141837 100644 --- a/packages/tracing-internal/src/node/integrations/express.ts +++ b/packages/tracing-internal/src/node/integrations/express.ts @@ -543,7 +543,9 @@ export function preventDuplicateSegments( reconstructedRoute?: string, layerPath?: string, ): string | undefined { - const originalUrlSplit = originalUrl?.split('/').filter(v => !!v); + // filter query params + const normalizeURL = originalUrl?.split('?')?.[0]; + const originalUrlSplit = normalizeURL?.split('/').filter(v => !!v); let tempCounter = 0; const currentOffset = reconstructedRoute?.split('/').filter(v => !!v).length || 0; const result = layerPath diff --git a/packages/tracing-internal/test/node/express.test.ts b/packages/tracing-internal/test/node/express.test.ts index 4b8d31fb2cdc..1631971d9863 100644 --- a/packages/tracing-internal/test/node/express.test.ts +++ b/packages/tracing-internal/test/node/express.test.ts @@ -35,6 +35,22 @@ describe('unit Test for preventDuplicateSegments', () => { const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); expect(result1).toBe('1234'); }); + + it('should prevent duplicate segment v1 originalUrl with query param without trailing slash', () => { + const originalUrl = '/api/v1/1234?queryParam=123'; + const reconstructedRoute = '/api/v1'; + const layerPath = '/v1/1234'; + const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); + expect(result1).toBe('1234'); + }); + + it('should prevent duplicate segment v1 originalUrl with query param with trailing slash', () => { + const originalUrl = '/api/v1/1234/?queryParam=123'; + const reconstructedRoute = '/api/v1'; + const layerPath = '/v1/1234'; + const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); + expect(result1).toBe('1234'); + }); }); describe('preventDuplicateSegments should handle empty input gracefully', () => { it('Empty input values', () => { From 091958e9f3431a608c34ca565a0209796b01a014 Mon Sep 17 00:00:00 2001 From: Lubomir Igonda Date: Sat, 11 Nov 2023 12:34:10 +0000 Subject: [PATCH 2/2] fix(tracing-internal): replace custom striping query from url logic for stripUrlQueryAndFragment function --- packages/tracing-internal/src/node/integrations/express.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tracing-internal/src/node/integrations/express.ts b/packages/tracing-internal/src/node/integrations/express.ts index 019682141837..eb1c22cf41d1 100644 --- a/packages/tracing-internal/src/node/integrations/express.ts +++ b/packages/tracing-internal/src/node/integrations/express.ts @@ -544,7 +544,7 @@ export function preventDuplicateSegments( layerPath?: string, ): string | undefined { // filter query params - const normalizeURL = originalUrl?.split('?')?.[0]; + const normalizeURL = stripUrlQueryAndFragment(originalUrl || ''); const originalUrlSplit = normalizeURL?.split('/').filter(v => !!v); let tempCounter = 0; const currentOffset = reconstructedRoute?.split('/').filter(v => !!v).length || 0;