Skip to content

feat(SDK-453): Unknown User Activation epic for React Native SDK - #934

Open
jferrao-itrbl wants to merge 29 commits into
masterfrom
feature/SDK-548-uua-feature-parity
Open

jferrao-itrbl wants to merge 29 commits into
masterfrom
feature/SDK-548-uua-feature-parity

Conversation

@jferrao-itrbl

@jferrao-itrbl jferrao-itrbl commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Epic integration PR for SDK-453 (UUA on RN SDK). This merges the long-lived feature/SDK-548-uua-feature-parity branch into master.

Each slice below was implemented on its own branch, reviewed, and merged into this epic branch already. This PR is mainly integration and changelog packaging, not a first-pass review of new design.

General RN feature parity (logout, embedded sync, jsonOnly, and related SDK-548 work) is tracked separately in #933 on feature/SDK-548-feature-parity.

Jira Ticket: SDK-453

Included work (already reviewed)

Jira Branch PR
SDK-553 feature/SDK-553-event-threshold-limit #926
SDK-554 feature/SDK-554-enable-foreground-criteria #924
SDK-556 feature/SDK-556-identity-resolution #925
SDK-561 feature/SDK-561-visitor-usage-tracked #927
SDK-794 feature/SDK-794-enable-unknown-user-activation #928
SDK-804 feature/SDK-804-unknown-user-handler #930

Example app harness work (SDK-810, SDK-811) lives in the test app repo and is not part of this branch.

Description

Rolls up Unknown User Activation surface area for React Native: opt-in via IterableConfig.enableUnknownUserActivation, visitor consent APIs, config knobs (eventThresholdLimit, enableForegroundCriteriaFetch, identityResolution), and unknownUserHandler for JWT-enabled projects. All options forward to the pinned native SDKs (iOS 6.7.5, Android 3.10.1).

See CHANGELOG.md Unreleased for customer-facing bullets.

How to test?

  • Confirm CI on this PR (lint, typecheck, Jest with coverage, circular deps, example builds).
  • Spot-check one change from the table above if you want a sanity pass on the integrated tree.
  • No new behavior is expected beyond what was already verified on the linked PRs.

Changelog

Unreleased section added in CHANGELOG.md on this branch.

Loom recording if applicable

N/A

Github Issues solved

N/A

Docs PR if applicable

N/A

Wire through iOS and Android Serialization for UUA foreground criteria fetch.
Cover toDict() when enableForegroundCriteriaFetch is false.
Remove duplicate default assert from embeddedManager tests.
Add IterableIdentityResolution type and wire defaults through iOS/Android Serialization.
Name the case that sets only replayOnVisitorToKnown.
Wire the unknown-user local event cap through iOS and Android Serialization.
Clarify changelog and TSDoc: RN has no enableUnknownUserActivation yet.
Add setVisitorUsageTracked and getVisitorUsageTracked across the TurboModule bridge.
Guard calls until initialize resolves to avoid Android pre-init crashes.
Describe storage on setVisitorUsageTracked and reads on getVisitorUsageTracked.
Wire the UUA opt-in flag through iOS and Android Serialization with default false.
…-limit

feat(SDK-553): expose IterableConfig.eventThresholdLimit
…4-enable-foreground-criteria

Resolve CHANGELOG and Iterable.test.ts conflicts for SDK-554 and SDK-553.
…nd-criteria

feat(SDK-554): expose IterableConfig.enableForegroundCriteriaFetch
…4-enable-unknown-user-activation

Resolve IterableConfig, tests, and changelog conflicts by keeping UUA parity options together.
…user-activation

feat(SDK-794): expose IterableConfig.enableUnknownUserActivation
…6-identity-resolution

Resolve IterableConfig, tests, and changelog conflicts by keeping UUA parity options with identity resolution.
…1-visitor-usage-tracked

Resolve CHANGELOG conflict and document UUA config parity alongside visitor consent APIs.
…vation

Consent APIs only store and return the flag; UUA also requires IterableConfig at init.
Use optional chaining so null/undefined identityResolution defaults both
flags to true instead of throwing during bridge serialization.
…tion

feat(SDK-556): expose IterableConfig.identityResolution
Export resetSdkInitializationStateForTests from Iterable.ts for tests only
so it is not on the public Iterable static API surface.
…racked

feat(SDK-561): expose visitor usage consent APIs
Emit handleUnknownUserCreatedCalled so apps store the generated id before authHandler.
Use shared mock EventEmitter listenerCount instead of emit-not-throwing.
Consume the cached id on each auth call so later JWT minting uses getUserId().
…ndler

feat(SDK-804): IterableConfig.unknownUserHandler
@jferrao-itrbl
jferrao-itrbl requested a review from a team as a code owner October 29, 2026 02:27
@qltysh

qltysh Bot commented Oct 29, 2026

Copy link
Copy Markdown

Qlty


Coverage Impact

⬆️ Merging this pull request will increase total coverage on master by 0.9%.

Modified Files with Diff Coverage (3)

RatingFile% DiffUncovered Line #s
Coverage rating: A Coverage rating: A
src/core/classes/IterableApi.ts100.0%
Coverage rating: A Coverage rating: A
src/core/classes/Iterable.ts95.8%1317
Coverage rating: A Coverage rating: A
src/core/classes/IterableConfig.ts100.0%
Total96.9%
🤖 Increase coverage with AI coding...
In the `feature/SDK-548-uua-feature-parity` branch, add test coverage for this new code:

- `src/core/classes/Iterable.ts` -- Line 1317

🚦 See full report on Qlty Cloud »

🛟 Help
  • Diff Coverage: Coverage for added or modified lines of code (excludes deleted files). Learn more.

  • Total Coverage: Coverage for the whole repository, calculated as the sum of all File Coverage. Learn more.

  • File Coverage: Covered Lines divided by Covered Lines plus Missed Lines. (Excludes non-executable lines including blank lines and comments.)

    • Indirect Changes: Changes to File Coverage for files that were not modified in this PR. Learn more.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Lines Statements Branches Functions
Coverage: 72%
72.84% (609/836) 62.37% (242/388) 68.16% (182/267)

Unblocks iOS example and CodeQL Swift builds after unknownUserHandler conformance.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant