From 7d9e5234e7cbd661db23e1933a67fda77a36cf4e Mon Sep 17 00:00:00 2001 From: lucas Date: Wed, 3 Sep 2025 10:22:33 +0100 Subject: [PATCH 1/4] fix deprecated ip --- packages/core/src/js/client.ts | 10 +++++- packages/core/test/client.test.ts | 51 +++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/packages/core/src/js/client.ts b/packages/core/src/js/client.ts index fb8e8eea40..50e3b36584 100644 --- a/packages/core/src/js/client.ts +++ b/packages/core/src/js/client.ts @@ -52,6 +52,15 @@ export class ReactNativeClient extends Client { 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, + }; + } + // We default this to true, as it is the safer scenario options.parentSpanIsAlwaysRootSpan = options.parentSpanIsAlwaysRootSpan === undefined ? true : options.parentSpanIsAlwaysRootSpan; @@ -60,7 +69,6 @@ export class ReactNativeClient extends Client { this._outcomesBuffer = []; if (options.sendDefaultPii === true) { - this.on('postprocessEvent', addAutoIpAddressToUser); this.on('beforeSendSession', addAutoIpAddressToSession); } diff --git a/packages/core/test/client.test.ts b/packages/core/test/client.test.ts index 14c35b533e..ff3e0c4a36 100644 --- a/packages/core/test/client.test.ts +++ b/packages/core/test/client.test.ts @@ -687,25 +687,45 @@ describe('Tests ReactNativeClient', () => { }); expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toEqual( - expect.objectContaining({ ip_address: '{{auto}}' }), + expect.objectContaining({ ip_address: undefined }), + ); + expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( + expect.objectContaining({ + settings: { + infer_ip: 'never' + } + } + ), ); }); - test('adds ip_address {{auto}} to user if not set', () => { + test('adds ip_address undefined to user if not set', () => { client.captureEvent({ user: {}, }); - expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toEqual( - expect.objectContaining({ ip_address: '{{auto}}' }), + expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toBeEmptyObject(); + expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( + expect.objectContaining({ + settings: { + infer_ip: 'never' + } + } + ), ); }); - test('adds ip_address {{auto}} to undefined user', () => { + test('leaves ip_address undefined to undefined user', () => { client.captureEvent({}); - expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user).toEqual( - expect.objectContaining({ ip_address: '{{auto}}' }), + 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' + } + } + ), ); }); @@ -724,15 +744,14 @@ describe('Tests ReactNativeClient', () => { expect( mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].user?.ip_address, ).toBeUndefined(); - }); - - test('uses ip address hooks if sendDefaultPii is true', () => { - const { onSpy } = createClientWithSpy({ - sendDefaultPii: true, - }); - - expect(onSpy).toHaveBeenCalledWith('postprocessEvent', addAutoIpAddressToUser); - expect(onSpy).toHaveBeenCalledWith('beforeSendSession', addAutoIpAddressToSession); + expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( + expect.objectContaining({ + settings: { + infer_ip: 'never' + } + } + ), + ); }); test('does not add ip_address {{auto}} to session if sendDefaultPii is false', () => { From d619bb2c508dd1491dd74667bad1a25ee1e80530 Mon Sep 17 00:00:00 2001 From: lucas Date: Wed, 3 Sep 2025 10:30:19 +0100 Subject: [PATCH 2/4] changelog and lint fix --- CHANGELOG.md | 19 +++++++++++++++++++ packages/core/src/js/client.ts | 1 - packages/core/test/client.test.ts | 28 ++++++++++++---------------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0522466e20..6e7d520e5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,25 @@ > make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first. +## Unreleased + +## Fixes + +- Ensure IP address is only inferred by Relay if `sendDefaultPii` is `true` ([#5138](https://github.com/getsentry/sentry-react-native/pull/5137)) + +### Important Changes + +This release includes a fix for a [behaviour change](https://docs.sentry.io/platforms/javascript/migration/v8-to-v9/#behavior-changes) +that was originally fixed on version 6.21.0 of the React Native SDK: User IP Addresses should only be added to Sentry events automatically, +if `sendDefaultPii` was set to `true`. + +To avoid making a major bump, the fix was patched on the current version and not by bumping to V8. +There is _no API_ breakage involved and hence it is safe to update. +However, after updating the SDK, events (errors, traces, replays, etc.) sent from the browser, will only include +user IP addresses, if you set `sendDefaultPii: true` in your `Sentry.init` options. + +We apologize for any inconvenience caused! + ## 7.0.0 ### Upgrading from 6.x to 7.0 diff --git a/packages/core/src/js/client.ts b/packages/core/src/js/client.ts index 50e3b36584..a9aedfcd48 100644 --- a/packages/core/src/js/client.ts +++ b/packages/core/src/js/client.ts @@ -13,7 +13,6 @@ import type { import { _INTERNAL_flushLogsBuffer, addAutoIpAddressToSession, - addAutoIpAddressToUser, Client, dateTimestampInSeconds, debug, diff --git a/packages/core/test/client.test.ts b/packages/core/test/client.test.ts index ff3e0c4a36..eb0da4b3ea 100644 --- a/packages/core/test/client.test.ts +++ b/packages/core/test/client.test.ts @@ -692,10 +692,9 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never' - } - } - ), + infer_ip: 'never', + }, + }), ); }); @@ -708,10 +707,9 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never' - } - } - ), + infer_ip: 'never', + }, + }), ); }); @@ -722,10 +720,9 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never' - } - } - ), + infer_ip: 'never', + }, + }), ); }); @@ -747,10 +744,9 @@ describe('Tests ReactNativeClient', () => { expect(mockTransportSend.mock.calls[0][firstArg][envelopeItems][0][envelopeItemPayload].sdk).toEqual( expect.objectContaining({ settings: { - infer_ip: 'never' - } - } - ), + infer_ip: 'never', + }, + }), ); }); From 2e11709775a9bf3e0632fd0e4bbecfd0ca7a706a Mon Sep 17 00:00:00 2001 From: LucasZF Date: Wed, 3 Sep 2025 11:35:36 +0100 Subject: [PATCH 3/4] Apply suggestions from code review --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1588f14df2..88b72439ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,19 @@ ## Unreleased +### Important Changes + +This release includes a fix for a [behaviour change](https://docs.sentry.io/platforms/javascript/migration/v8-to-v9/#behavior-changes) +that was originally fixed on version 6.21.0 of the React Native SDK: User IP Addresses should only be added to Sentry events automatically, +if `sendDefaultPii` was set to `true`. + +To avoid making a major bump, the fix was patched on the current version and not by bumping to V8. +There is _no API_ breakage involved and hence it is safe to update. +However, after updating the SDK, events (errors, traces, replays, etc.) sent from the browser, will only include +user IP addresses, if you set `sendDefaultPii: true` in your `Sentry.init` options. + +We apologize for any inconvenience caused! + ## Fixes - Ensure IP address is only inferred by Relay if `sendDefaultPii` is `true` ([#5138](https://github.com/getsentry/sentry-react-native/pull/5137)) From 46cabab44c745a4dbbfa576c574ddc04d0955e92 Mon Sep 17 00:00:00 2001 From: LucasZF Date: Wed, 3 Sep 2025 11:35:59 +0100 Subject: [PATCH 4/4] Apply suggestions from code review --- CHANGELOG.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88b72439ad..deb3324d8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,20 +31,6 @@ We apologize for any inconvenience caused! - [changelog](https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/main/CHANGELOG.md#430) - [diff](https://github.com/getsentry/sentry-javascript-bundler-plugins/compare/4.2.0...4.3.0) -### Important Changes - -This release includes a fix for a [behaviour change](https://docs.sentry.io/platforms/javascript/migration/v8-to-v9/#behavior-changes) -that was originally fixed on version 6.21.0 of the React Native SDK: User IP Addresses should only be added to Sentry events automatically, -if `sendDefaultPii` was set to `true`. - -To avoid making a major bump, the fix was patched on the current version and not by bumping to V8. -There is _no API_ breakage involved and hence it is safe to update. -However, after updating the SDK, events (errors, traces, replays, etc.) sent from the browser, will only include -user IP addresses, if you set `sendDefaultPii: true` in your `Sentry.init` options. - -We apologize for any inconvenience caused! - - ## 7.0.0 ### Upgrading from 6.x to 7.0