From a2ace6cfa6ce102a7275681d1f7ab95eb7d9c690 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 24 Sep 2025 16:51:44 +0200 Subject: [PATCH 1/7] Fix the issue with changing immutable metadata structure in the contructor of `ReactNativeClient` --- packages/core/src/js/client.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/core/src/js/client.ts b/packages/core/src/js/client.ts index 3762099ced..5c84549b2a 100644 --- a/packages/core/src/js/client.ts +++ b/packages/core/src/js/client.ts @@ -49,16 +49,17 @@ export class ReactNativeClient extends Client { */ public constructor(options: ReactNativeClientOptions) { ignoreRequireCycleLogs(ReactNativeLibraries.ReactNativeVersion?.version); - options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || defaultSdkInfo; - - // Only allow IP inferral by Relay if sendDefaultPii is true - if (options._metadata?.sdk) { - options._metadata.sdk.settings = { - infer_ip: options.sendDefaultPii ? 'auto' : 'never', - ...options._metadata.sdk.settings, - }; - } + options._metadata = { + ...options._metadata, + sdk: { + ...(options._metadata?.sdk || defaultSdkInfo), + settings: { + // Only allow IP inferral by Relay if sendDefaultPii is true + infer_ip: options.sendDefaultPii ? 'auto' : 'never', + ...options._metadata?.sdk?.settings, + } + } + }; // We default this to true, as it is the safer scenario options.parentSpanIsAlwaysRootSpan = From 24b6cd86e1697645cfefc753ccb78d9d096cbe99 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 24 Sep 2025 17:14:36 +0200 Subject: [PATCH 2/7] lint fix --- packages/core/src/js/client.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/js/client.ts b/packages/core/src/js/client.ts index 5c84549b2a..b263689735 100644 --- a/packages/core/src/js/client.ts +++ b/packages/core/src/js/client.ts @@ -57,8 +57,8 @@ export class ReactNativeClient extends Client { // Only allow IP inferral by Relay if sendDefaultPii is true infer_ip: options.sendDefaultPii ? 'auto' : 'never', ...options._metadata?.sdk?.settings, - } - } + }, + }, }; // We default this to true, as it is the safer scenario From ad628afa5c5aa1c0a1e36d9eb595c47907c0ef12 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Tue, 30 Sep 2025 10:44:00 +0200 Subject: [PATCH 3/7] Test updates --- packages/core/test/client.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/test/client.test.ts b/packages/core/test/client.test.ts index eb0da4b3ea..f495b0476d 100644 --- a/packages/core/test/client.test.ts +++ b/packages/core/test/client.test.ts @@ -679,7 +679,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test('adds ip_address {{auto}} to user if set to undefined', () => { + test("doesn't change infer_ip if the ip_address is set to undefined", () => { client.captureEvent({ user: { ip_address: undefined, @@ -692,13 +692,13 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never', + infer_ip: 'auto', }, }), ); }); - test('adds ip_address undefined to user if not set', () => { + test("doesn't change infer_ip if the user is not set", () => { client.captureEvent({ user: {}, }); @@ -707,20 +707,20 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never', + infer_ip: 'auto', }, }), ); }); - test('leaves ip_address undefined to undefined user', () => { + test("doesn't change infer_ip if the event is empty", () => { client.captureEvent({}); expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toBeUndefined(); expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never', + infer_ip: 'auto', }, }), ); From 31287a2f8d78c075e14b6255085e382f0326d794 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 1 Oct 2025 10:15:49 +0200 Subject: [PATCH 4/7] Test fixes --- packages/core/test/client.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/test/client.test.ts b/packages/core/test/client.test.ts index f495b0476d..67323c8da1 100644 --- a/packages/core/test/client.test.ts +++ b/packages/core/test/client.test.ts @@ -679,7 +679,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test("doesn't change infer_ip if the ip_address is set to undefined", () => { + test('doesn\'t change infer_ip if the ip_address is set to undefined', () => { client.captureEvent({ user: { ip_address: undefined, @@ -698,7 +698,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test("doesn't change infer_ip if the user is not set", () => { + test('doesn\'t change infer_ip if the user is not set', () => { client.captureEvent({ user: {}, }); @@ -713,7 +713,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test("doesn't change infer_ip if the event is empty", () => { + test('doesn\'t change infer_ip if the event is empty', () => { client.captureEvent({}); expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toBeUndefined(); From 2866666d0ed85cdc49dd1d455006efeff206119b Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 1 Oct 2025 14:07:50 +0200 Subject: [PATCH 5/7] Updated changelog message --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 671e56ae78..faa41b58b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### Fixes - Fixes .env file loading in Expo sourcemap uploads ([#5210](https://github.com/getsentry/sentry-react-native/pull/5210)) +- Fixes the issue with changing immutable metadata structure in the contructor of `ReactNativeClient`. This structure is getting re-created instead of being modified to ensure IP address is only inferred by Relay if `sendDefaultPii` is `true`. ### Dependencies From 7bdad5ecb9be62198b657cd681215d39630f5daa Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 1 Oct 2025 16:22:55 +0200 Subject: [PATCH 6/7] Message fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index faa41b58b3..99b3f645ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ ### Fixes - Fixes .env file loading in Expo sourcemap uploads ([#5210](https://github.com/getsentry/sentry-react-native/pull/5210)) -- Fixes the issue with changing immutable metadata structure in the contructor of `ReactNativeClient`. This structure is getting re-created instead of being modified to ensure IP address is only inferred by Relay if `sendDefaultPii` is `true`. +- Fixes the issue with changing immutable metadata structure in the contructor of `ReactNativeClient`. This structure is getting re-created instead of being modified to ensure IP address is only inferred by Relay if `sendDefaultPii` is `true` ([#5202](https://github.com/getsentry/sentry-react-native/pull/5202)) ### Dependencies From 6102ef332c36240aa9396927923574493ebd4263 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 6 Oct 2025 11:24:35 +0200 Subject: [PATCH 7/7] lint fixes --- packages/core/test/client.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/test/client.test.ts b/packages/core/test/client.test.ts index 67323c8da1..f495b0476d 100644 --- a/packages/core/test/client.test.ts +++ b/packages/core/test/client.test.ts @@ -679,7 +679,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test('doesn\'t change infer_ip if the ip_address is set to undefined', () => { + test("doesn't change infer_ip if the ip_address is set to undefined", () => { client.captureEvent({ user: { ip_address: undefined, @@ -698,7 +698,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test('doesn\'t change infer_ip if the user is not set', () => { + test("doesn't change infer_ip if the user is not set", () => { client.captureEvent({ user: {}, }); @@ -713,7 +713,7 @@ describe('Tests ReactNativeClient', () => { ); }); - test('doesn\'t change infer_ip if the event is empty', () => { + test("doesn't change infer_ip if the event is empty", () => { client.captureEvent({}); expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toBeUndefined();