fix(core): redact deep-link query params before sending as event properties… - #1320
Open
sunitaprajapati89 wants to merge 1 commit into
Open
fix(core): redact deep-link query params before sending as event properties…#1320sunitaprajapati89 wants to merge 1 commit into
sunitaprajapati89 wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Problem: When trackDeepLinks is enabled, the full deep-link URL (including query string) was spread into the Deep Link Opened event and uploaded. Deep links routinely carry secrets — OAuth authorization codes, magic-link/password-reset tokens, session IDs — that should never appear in analytics data.
On Android, individual query params were additionally spread as top-level event properties (e.g. token, code) alongside the raw URL.
Changes
util.ts — adds stripQueryString(url) helper that removes everything from ? onward, keeping scheme, host, and path.
analytics.ts — trackDeepLinkEvent now strips the query string from url by default before building the event. A new deepLinkPropertiesDecorator config hook lets callers override this (e.g. to allowlist safe params like utm_source while dropping secrets).
types.ts — adds deepLinkPropertiesDecorator?: (props) => props to Config with a doc comment explaining the risk.
AnalyticsReactNativeModule.kt — replaces the query-param spread loop with uri.buildUpon().clearQuery().fragment(null), stripping secrets at the native layer before they reach JS.
Test plan
stripQueryStringunit tests: no query string (unchanged), single param stripped, multiple params stripped, no-path URLtrackDeepLinksintegration tests: default stripping removes query string from URL; deepLinkPropertiesDecorator is called with original props and its return value is usedExisting deep-linktests still pass (URLs without query strings are unaffected)Run yarn test in packages/core — all tests pass
Migration note
If you rely on query parameters being present in Deep Link Opened events, use deepLinkPropertiesDecorator to selectively re-add the ones you need: