1.1.0 - #84
Merged
Merged
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.
Minor bump for #83. Bumps
package.jsonand the generatedsrc/version.ts— nothing else, matching previous releases.Minor rather than patch: no API breaks, but three changes are observable in the data.
Highlights
Traffic-source sanitization.
utm_*/ref/referrercaptured from deep links and the Android Play install referrer were stored and replayed onto every event with no validation. Anyone who can get a user to openmyapp://x?utm_source=<script>…controlled the value for the whole session. Values are now checked raw and percent-decoded, including doubly-encoded payloads, schemes smuggled inside a query value, multi-byte escapes, and query keys.Cold-start attribution. The first event of an app session now ships immediately instead of waiting for
flushAtor the 30s timer — those were exactly the events lost to a force-quit, an OS memory kill, or a crash, none of which giveAppStatea chance to report background.Queue and teardown reliability. Failed flushes re-arm the retry interval instead of stranding events; permanently-rejected batches are dropped rather than re-posted forever; teardown is bounded and idempotent, and can no longer hang the SDK's re-initialization; events cleared during opt-out can no longer be resurrected by an in-flight send.
CI.
src/version.tsis now verified againstpackage.jsonon every PR, solibrary_versioncannot silently report a stale release.Upgrade notes
Nothing to change — no API, type, export, or dependency changes. Three behaviours are worth knowing about:
Mother's Day) and campaign text beginning withjavascript:/data:. Values already persisted by an older SDK are also scrubbed on first read. Dropped fields come out absent, not"".Smaller: one extra request per session (the immediate first flush); a queue outliving an outage keeps retrying rather than stalling;
408is retried;cleanup()is idempotent;enqueue()after cleanup is ignored; callbacks are not invoked for batches abandoned at teardown, though the returned promise still resolves.Verification
371 tests (331 before #83); typecheck, lint, build and
pnpm audit --prodclean;version-syncpasses at 1.1.0.Verified end-to-end against
examples/with-react-nativeunder Metro with events pointed at a local collector: normal delivery intact with the first batch carrying exactly one event, doubly-encoded / scheme-in-value / multi-byte payloads all dropped while cleanutm_mediumandutm_contentcame through untouched, and repeated unmount → cleanup → re-init cycles with no hang or unhandled rejection.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.