@datalyr/web 1.7.5 → 1.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +542 -476
  2. package/dist/attribution-lyr.test.d.ts +2 -0
  3. package/dist/attribution-lyr.test.d.ts.map +1 -0
  4. package/dist/attribution-oppref.test.d.ts +2 -0
  5. package/dist/attribution-oppref.test.d.ts.map +1 -0
  6. package/dist/attribution.d.ts +4 -0
  7. package/dist/attribution.d.ts.map +1 -1
  8. package/dist/config.d.ts +1 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/datalyr.cjs.js +1303 -281
  11. package/dist/datalyr.cjs.js.map +1 -1
  12. package/dist/datalyr.esm.js +1303 -282
  13. package/dist/datalyr.esm.js.map +1 -1
  14. package/dist/datalyr.esm.min.js +1 -1
  15. package/dist/datalyr.esm.min.js.map +1 -1
  16. package/dist/datalyr.js +1303 -281
  17. package/dist/datalyr.js.map +1 -1
  18. package/dist/datalyr.min.js +1 -1
  19. package/dist/datalyr.min.js.map +1 -1
  20. package/dist/identify-dedupe.test.d.ts +2 -0
  21. package/dist/identify-dedupe.test.d.ts.map +1 -0
  22. package/dist/identity-pii.test.d.ts +2 -0
  23. package/dist/identity-pii.test.d.ts.map +1 -0
  24. package/dist/identity.d.ts +52 -4
  25. package/dist/identity.d.ts.map +1 -1
  26. package/dist/index.d.ts +116 -19
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.test.d.ts +3 -0
  29. package/dist/index.test.d.ts.map +1 -0
  30. package/dist/queue-403.test.d.ts +2 -0
  31. package/dist/queue-403.test.d.ts.map +1 -0
  32. package/dist/queue.d.ts +32 -4
  33. package/dist/queue.d.ts.map +1 -1
  34. package/dist/storage-migration.test.d.ts +2 -0
  35. package/dist/storage-migration.test.d.ts.map +1 -0
  36. package/dist/storage.d.ts.map +1 -1
  37. package/dist/stripe-session.d.ts +75 -0
  38. package/dist/stripe-session.d.ts.map +1 -0
  39. package/dist/stripe-session.test.d.ts +2 -0
  40. package/dist/stripe-session.test.d.ts.map +1 -0
  41. package/dist/types.d.ts +2 -0
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/utils.d.ts +13 -0
  44. package/dist/utils.d.ts.map +1 -1
  45. package/dist/utils.test.d.ts +2 -1
  46. package/dist/utils.test.d.ts.map +1 -1
  47. package/package.json +2 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=identify-dedupe.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify-dedupe.test.d.ts","sourceRoot":"","sources":["../src/identify-dedupe.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=identity-pii.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-pii.test.d.ts","sourceRoot":"","sources":["../src/identity-pii.test.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC"}
@@ -7,6 +7,9 @@ export declare class IdentityManager {
7
7
  private userId;
8
8
  private sessionId;
9
9
  private persistNewId;
10
+ /** WEB-26: bumps whenever the persisted identity changes, so an in-flight
11
+ * encrypted write can tell it has been superseded. */
12
+ private piiGeneration;
10
13
  constructor(options?: {
11
14
  persistNewId?: boolean;
12
15
  });
@@ -21,11 +24,13 @@ export declare class IdentityManager {
21
24
  */
22
25
  private persistAnonymousId;
23
26
  /**
24
- * Whether a `_dl_vid` value is a well-formed Datalyr anonymous id (anon_ + UUID).
25
- * The length is bounded by the pattern, so an oversized/garbage value is rejected.
26
- * (FSR-50)
27
+ * TR-15 / FSR-107: tracking became allowed mid-session (optIn / consent grant). Start
28
+ * persisting AND flush the current in-memory anon id to the cookie + localStorage now.
29
+ * Without this, a visitor declined at init keeps a memory-only id, so that session's
30
+ * events land under a visitor_id that vanishes on the next page load (attribution
31
+ * fragmentation). Idempotent — a no-op once already persisting.
27
32
  */
28
- private isValidAnonymousId;
33
+ enablePersistence(): void;
29
34
  /**
30
35
  * Remove a query param from the current URL via history.replaceState (best-effort).
31
36
  * Used so a consumed `_dl_vid` doesn't linger in the address bar and get re-shared.
@@ -40,6 +45,49 @@ export declare class IdentityManager {
40
45
  * Get stored user ID from previous session
41
46
  */
42
47
  private getStoredUserId;
48
+ /**
49
+ * WEB-22 — is this user id personally identifying, and therefore not
50
+ * something we may write to localStorage in the clear?
51
+ *
52
+ * The auto-identify path calls `identify(email, { email })`, so the raw
53
+ * address became the `user_id` and was written unencrypted to `dl_user_id`.
54
+ * Measured 2026-07-25: on the four workspaces using auto-identify, **every**
55
+ * event carrying a `user_id` had an email in that column (20,502 / 20,502 on
56
+ * `f6260736` over 7 days) — while the surrounding code went to real lengths to
57
+ * encrypt the *same* address in `dl_auto_identified_email`.
58
+ *
59
+ * Deliberately narrow: an email is the case that actually occurs and the one
60
+ * the SDK itself creates. Opaque application ids — the overwhelming majority —
61
+ * keep the existing fast, synchronous, plaintext path with no behaviour change.
62
+ */
63
+ private static looksLikePII;
64
+ /**
65
+ * Persist the user id, encrypting it when it is PII.
66
+ *
67
+ * Three-way, and the ordering matters:
68
+ * - not PII → plaintext `dl_user_id`, exactly as before (sync, always works)
69
+ * - PII + crypto → encrypted `dl_user_id_pii`, and the plaintext key is REMOVED
70
+ * - PII, no crypto → memory only, and both keys removed
71
+ *
72
+ * That last branch is the deliberate trade. `crypto.subtle` is absent on
73
+ * http:// and old browsers, and index.ts is explicit that encryption is for
74
+ * PII-at-rest only and "must NOT gate event delivery". So we never block an
75
+ * event — `this.userId` is set in memory first and every event still carries
76
+ * it — we only decline to *persist* an address we cannot protect. The cost is
77
+ * that a returning visitor on an insecure origin is re-identified by the next
78
+ * `identify()` call rather than restored from storage; the alternative is
79
+ * writing their email to disk in the clear, which is what this fixes.
80
+ */
81
+ private persistUserId;
82
+ /**
83
+ * Restore a PII user id that was persisted encrypted. Async by necessity, so
84
+ * it cannot run in the constructor; index.ts calls it during init, right after
85
+ * `dataEncryption.initialize()`.
86
+ *
87
+ * Never overwrites an id already established this page load — an explicit
88
+ * `identify()` that has already run is fresher than anything on disk.
89
+ */
90
+ hydrateEncryptedUserId(): Promise<void>;
43
91
  /**
44
92
  * Get the anonymous ID
45
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IAIxC,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAMpD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuB/E;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAgB/D;;;OAGG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAqBzC"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IAIxC,OAAO,CAAC,YAAY,CAAU;IAC9B;2DACuD;IACvD,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAMpD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;;;OAMG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,aAAa;IAqCrB;;;;;;;OAOG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC7C;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAwB/E;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAgB/D;;;OAGG;IACH,KAAK,IAAI,IAAI;IAkBb;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAqBzC"}
package/dist/index.d.ts CHANGED
@@ -28,11 +28,23 @@ declare class Datalyr {
28
28
  private hashchangeHandler?;
29
29
  private unloadHandler?;
30
30
  private visibilityHandler?;
31
+ private shopifyConsentHandler?;
31
32
  private outboundDisposer?;
32
33
  private stripeLinksDisposer?;
34
+ private stripeSessionWatcher?;
33
35
  private lastSpaPath;
36
+ private initialPageViewReady;
37
+ private initialPageViewSent;
34
38
  private initializationPromise;
35
39
  constructor();
40
+ /**
41
+ * Return the workspace configured for this instance, or null before init().
42
+ *
43
+ * CDN bootstrap uses this public accessor instead of reaching into the
44
+ * private runtime config when deciding whether an existing global belongs
45
+ * to the requested workspace.
46
+ */
47
+ getWorkspaceId(): string | null;
36
48
  /**
37
49
  * Initialize the SDK
38
50
  */
@@ -67,7 +79,40 @@ declare class Datalyr {
67
79
  /**
68
80
  * Identify a user
69
81
  */
82
+ /**
83
+ * Stable fingerprint of an identity for redundant-emit suppression (WEB-20).
84
+ *
85
+ * Keys are sorted and each value is JSON-serialized, so `{a,b}` and `{b,a}`
86
+ * collapse to one identity while a genuinely changed nested trait does not.
87
+ * (The mobile SDKs use `String(value)`, which flattens every object to
88
+ * `[object Object]` and can swallow a real change; web traits are plain JSON,
89
+ * so it can afford to be exact.)
90
+ *
91
+ * Hashed rather than stored raw so the key does not become another copy of the
92
+ * user's traits at rest. Being honest about the strength: a 32-bit
93
+ * non-cryptographic digest sitting beside a readable `dl_dl_anonymous_id` is
94
+ * NOT protection against a determined reader — it defeats casual inspection
95
+ * and bulk scraping, nothing more. The PII that matters is handled properly
96
+ * (encrypted `dl_user_id_pii`, encrypted `dl_user_traits`). 32 bits also means
97
+ * a ~1-in-4.3e9 chance per identity that a genuine change is suppressed;
98
+ * acceptable for change detection, which is all this is.
99
+ */
100
+ private identityFingerprint;
70
101
  identify(userId: string, traits?: UserTraits): void;
102
+ /**
103
+ * WEB-27: queue health, including events the SDK gave up on.
104
+ *
105
+ * `getStats()` existed on EventQueue but was unreachable — `queue` is private
106
+ * and nothing exposed it, so the observability fix could not actually be
107
+ * observed. A non-zero `droppedEvents` means data was lost.
108
+ */
109
+ getQueueStats(): {
110
+ queued: number;
111
+ offline: number;
112
+ droppedEvents: number;
113
+ lastDropStatus: number | null;
114
+ backoffUntil: number;
115
+ } | null;
71
116
  /**
72
117
  * Track a page view
73
118
  */
@@ -177,6 +222,15 @@ declare class Datalyr {
177
222
  /**
178
223
  * Opt out of tracking
179
224
  */
225
+ /**
226
+ * X-1 (consent): stop the Stripe Payment Link + CheckoutChamp outbound-link decorators from
227
+ * stamping `client_reference_id`/`prefilled_email` onto <a> hrefs once consent/marketing is
228
+ * withdrawn. Their MutationObservers otherwise keep rewriting links after a CMP or Shopify
229
+ * decline — and the server still reads the stamped `client_reference_id` — so attribution
230
+ * continues post-withdrawal. Idempotent; decorators re-init on the next load if consent returns
231
+ * (same convention as pixels/auto-identify).
232
+ */
233
+ private disposeMarketingLinkDecorators;
180
234
  optOut(): void;
181
235
  /**
182
236
  * Opt in to tracking
@@ -216,17 +270,7 @@ declare class Datalyr {
216
270
  * Merges via Shopify's /cart/update.js (does not clobber other cart attributes).
217
271
  */
218
272
  private syncShopifyCartAttributes;
219
- /**
220
- * Restore _dl_* URL bridge params on a Checkout Champ funnel page.
221
- * Runs BEFORE IdentityManager so the storefront's visitor_id wins over a
222
- * freshly auto-generated one. Also restores _fbc / _fbp cookies and the
223
- * fbclid click time so server-side rebuilds carry the real click moment.
224
- *
225
- * Strategy: stamp matching cookies (without clobbering pre-existing values),
226
- * then rewrite the URL so `_dl_fbclid` becomes `fbclid` — that way the rest
227
- * of the SDK's attribution layer (which reads `params.fbclid`) works
228
- * unchanged, and any merchant analytics also see the canonical click ID.
229
- */
273
+ /** Strip the retired unsigned Checkout Champ bridge parameters. */
230
274
  private restoreFromURL;
231
275
  /**
232
276
  * Checkout Champ Meta Pixel ⇄ CAPI deduplication.
@@ -262,14 +306,7 @@ declare class Datalyr {
262
306
  * shape confirmed on a live funnel first — tracked as a follow-up.
263
307
  */
264
308
  private fireCheckoutChampPurchasePixel;
265
- /**
266
- * Storefront → Checkout Champ link stamping. Finds every `<a href>` whose host
267
- * matches the configured CC domain list and appends `?_dl_vid=…&_dl_fbc=…&
268
- * _dl_fbp=…&_dl_fbclid=…&_dl_fbclid_at=…&_dl_gclid=…` so the user's
269
- * visitor_id + Meta click signals cross the domain. MutationObserver watches
270
- * for dynamically-injected links. On click, force-flush the event queue so
271
- * any pending track() events land before the browser navigates away.
272
- */
309
+ /** Checkout Champ identity bridging remains disabled pending signed tokens. */
273
310
  private syncOutboundLinkParams;
274
311
  /**
275
312
  * Stripe Payment Link auto-decoration (D1). Structurally mirrors
@@ -296,6 +333,20 @@ declare class Datalyr {
296
333
  * changes. window.open(paymentLink) is not covered (use getVisitorId()
297
334
  * manually); iframe/shadow-DOM links are unreachable from document.
298
335
  */
336
+ /**
337
+ * Observe Stripe Checkout Session ids and report each one once.
338
+ *
339
+ * The event is what carries the pairing: the server stores
340
+ * (stripe_session_id -> visitor_id) and, when checkout.session.completed
341
+ * arrives without a client_reference_id, joins on session.id and feeds the
342
+ * SAME cacheCustomerVisitor path the Payment Link flow already uses — so
343
+ * every later invoice for that customer inherits the visitor too.
344
+ *
345
+ * Consent is re-checked at emit time, not just at init: a visitor can
346
+ * withdraw between page load and checkout, and this pairing is exactly the
347
+ * kind of identity link that must stop when they do.
348
+ */
349
+ private startStripeSessionCapture;
299
350
  private syncStripePaymentLinks;
300
351
  /**
301
352
  * Create event payload
@@ -311,6 +362,44 @@ declare class Datalyr {
311
362
  * pixels (which share data). No consent set = allowed (default).
312
363
  */
313
364
  private consentAllowsMarketing;
365
+ /**
366
+ * Shopify Customer Privacy API handle (9.A.1), or null when it doesn't apply.
367
+ *
368
+ * X-2 (LEGAL): gated on RUNTIME detection of `window.Shopify.customerPrivacy`, NOT on
369
+ * `config.platform === 'shopify'`. A Shopify merchant who installs via a plain <script>
370
+ * snippet or a headless storefront (no `platform:'shopify'`) still exposes customerPrivacy;
371
+ * gating on config.platform meant a shopper who DECLINED the native banner (with no
372
+ * setConsent() wired) was fully tracked — nullifying the consent feature for a whole install
373
+ * class, and unfixable server-side (platform is install-time only). Every access is wrapped —
374
+ * a Shopify API shape change (or a non-Shopify site) must NEVER break tracking (→ null = fail open).
375
+ */
376
+ private getShopifyCustomerPrivacy;
377
+ private isShopifyStorefront;
378
+ /**
379
+ * Shopify's analytics-consent signal: true/false when the Customer Privacy API is
380
+ * present and answers, null when there's no signal (API absent / unexpected shape)
381
+ * — null means "no restriction from Shopify", i.e. today's behavior.
382
+ */
383
+ private shopifyAnalyticsConsent;
384
+ /**
385
+ * Shopify's marketing-consent signal (gates pixels, click-id/email → CAPI, cart
386
+ * attribute stamping, auto-identify email capture). Same null semantics as
387
+ * shopifyAnalyticsConsent().
388
+ */
389
+ private shopifyMarketingConsent;
390
+ /**
391
+ * Listen for Shopify's `visitorConsentCollected` document event (9.A.1) so a
392
+ * consent decision made mid-session takes effect without a reload. Revocation is
393
+ * enforced immediately, mirroring setConsent(): queue gated + purged, pixels torn
394
+ * down, auto-identify (email capture + /account.json polling) destroyed. On grant
395
+ * the queue re-enables (track() re-checks shouldTrack() per event anyway) and cart
396
+ * attribute stamping runs; pixels / auto-identify resume on the next page load —
397
+ * the same convention as optIn().
398
+ */
399
+ private setupShopifyConsentListener;
400
+ private onShopifyConsentChanged;
401
+ /** Release the automatic landing pageview once, after init and consent. */
402
+ private trackInitialPageViewOnce;
314
403
  /**
315
404
  * Setup SPA tracking
316
405
  * Fixed Issue #15: Store original methods for cleanup
@@ -361,6 +450,14 @@ declare class Datalyr {
361
450
  */
362
451
  destroy(): void;
363
452
  }
453
+ /**
454
+ * Create an independent SDK instance without reading or mutating window.
455
+ *
456
+ * The CDN bootstrap uses this when an existing global is configured for a
457
+ * different workspace. Package consumers can also opt into multiple explicit
458
+ * instances without changing the default singleton contract below.
459
+ */
460
+ export declare function createDatalyrInstance(): Datalyr;
364
461
  declare const datalyr: Datalyr;
365
462
  export { datalyr };
366
463
  export default datalyr;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EAEb,aAAa,EACb,SAAS,EAEV,MAAM,SAAS,CAAC;AAGjB,cAAc,SAAS,CAAC;AAaxB,cAAM,OAAO;IACX,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,YAAY,CAAC,CAAsB;IAI3C,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAM;IAExB,OAAO,CAAC,iBAAiB,CAAC,CAA2B;IACrD,OAAO,CAAC,oBAAoB,CAAC,CAA8B;IAC3D,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,iBAAiB,CAAC,CAAgB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,WAAW,CAAuB;IAI1C,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,qBAAqB,CAA8B;;IAM3D;;;;;;OAMG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAgJjC;;;;;OAKG;YACW,eAAe;IAiN7B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,eAAoB,GAAG,IAAI;IAkDhE;;;;;;OAMG;IACG,qBAAqB,CAAC,OAAO,EAAE;QACnC,cAAc,EAAE,KAAK,GAAG,SAAS,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CjB;;OAEG;IACH;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,mBAAmB;IA4B3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI;IA2FvD;;;;;;OAMG;IACH,aAAa,IAAI;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI;IAKR;;OAEG;IACH,IAAI,CAAC,UAAU,GAAE,cAAmB,GAAG,IAAI;IA0D3C;;;;OAIG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAatE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAY9D;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAkCb;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;OAKG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAAiB,IAAI;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAQtF;;;;;;;;;;;OAWG;IACH,uBAAuB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE;IAIjD;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,eAAe,IAAI,MAAM;IAMzB;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAavD;;OAEG;IACH;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;IAStC,MAAM,IAAI,IAAI;IA4Cd;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAkExC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKzD;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK9C;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIzC;;;;;;;;OAQG;YACW,yBAAyB;IA2CvC,mEAAmE;IACnE,OAAO,CAAC,cAAc;IAqBtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,OAAO,CAAC,8BAA8B;IA+DtC,+EAA+E;IAC/E,OAAO,CAAC,sBAAsB;IAI9B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,sBAAsB;IA0H9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuH1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,mBAAmB;IAW3B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IAiCnC,OAAO,CAAC,uBAAuB;IA6C/B,2EAA2E;IAC3E,OAAO,CAAC,wBAAwB;IAOhC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,SAAS,IAAI,SAAS,EAAE;IAIxB;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMlC;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAO5B;;OAEG;IACH,OAAO,CAAC,GAAG;IASX;;OAEG;IACH,OAAO,IAAI,IAAI;CAsFhB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAMD,QAAA,MAAM,OAAO,EAAE,OACwE,CAAC;AASxF,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAe,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ type SdkModule = typeof import('./index');
2
+ declare function loadSdk(): SdkModule;
3
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,cAAc,SAAS,CAAC,CAAC;AAE1C,iBAAS,OAAO,IAAI,SAAS,CAO5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queue-403.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-403.test.d.ts","sourceRoot":"","sources":["../src/queue-403.test.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC"}
package/dist/queue.d.ts CHANGED
@@ -18,7 +18,10 @@ export declare class EventQueue {
18
18
  private offlineProcessing;
19
19
  private inFlight;
20
20
  private enabled;
21
+ private consentCheck?;
21
22
  private rateLimitedUntil;
23
+ private droppedEventCount;
24
+ private lastDropStatus;
22
25
  constructor(config: any);
23
26
  /**
24
27
  * Add event to queue
@@ -101,6 +104,21 @@ export declare class EventQueue {
101
104
  * Get offline queue size
102
105
  */
103
106
  getOfflineQueueSize(): number;
107
+ /**
108
+ * WEB-23: queue health, including events the SDK gave up on.
109
+ *
110
+ * `droppedEvents` is the number this session discarded as permanently rejected
111
+ * (a 400/401). It exists because a silent drop is precisely the failure mode
112
+ * that let the 2026-07-13 `allowed_origins` outage run for eleven days looking
113
+ * exactly like a healthy queue. A non-zero value here means data was lost.
114
+ */
115
+ getStats(): {
116
+ queued: number;
117
+ offline: number;
118
+ droppedEvents: number;
119
+ lastDropStatus: number | null;
120
+ backoffUntil: number;
121
+ };
104
122
  /**
105
123
  * Get network status
106
124
  */
@@ -125,10 +143,13 @@ export declare class EventQueue {
125
143
  * - Non-terminal (tab switch): deliver the LIVE queue via a response-checked keepalive
126
144
  * fetch (flush) and response-check-drain the offline backlog (processOfflineQueue) —
127
145
  * neither erases the backlog on failure. The destructive beacon path is not used.
128
- * - Terminal (unload): beacon live+offline best-effort, but PERSIST everything first
129
- * and NEVER storage.remove() on a mere beacon enqueue. The next page load's
130
- * response-checked drain (normal fetch, no 64KB cap) is the source of truth and
131
- * clears the copy; server event_id dedup makes the potential double-send safe.
146
+ * - Terminal (unload): PERSIST everything first (live + the already-persisted offline
147
+ * backlog) and NEVER storage.remove() on a mere beacon enqueue. Beacon ONLY the LIVE
148
+ * queue best-effort NOT the offline backlog (TR-13): the backlog is already durable and
149
+ * the next-load drain delivers it exactly once, so beaconing it here too risked a
150
+ * delivered-now-AND-re-drained-next-load double-send that, when >6h apart, outlives
151
+ * ingest's dedup window → a duplicate purchase. The next page load's response-checked
152
+ * drain (normal fetch, no 64KB cap) is the source of truth and clears the copy.
132
153
  * - Both paths honor rateLimitedUntil (don't beacon/flush into the backoff window).
133
154
  *
134
155
  * Still excludes the in-flight _flush batch (its keepalive fetch already carries it,
@@ -146,6 +167,13 @@ export declare class EventQueue {
146
167
  * the on-load drain both honor this).
147
168
  */
148
169
  setEnabled(enabled: boolean): void;
170
+ /**
171
+ * TR-15: register a live consent predicate the offline drain re-evaluates at drain time.
172
+ * `enabled` is latched at init to a fail-open value (Shopify's customerPrivacy loads
173
+ * async), and a returning DECLINED visitor fires no visitorConsentCollected event — so
174
+ * without this, their persisted backlog would drain before the decline is known.
175
+ */
176
+ setConsentCheck(fn: () => boolean): void;
149
177
  /**
150
178
  * Clear the offline queue and its persisted copy (used by opt-out to purge any
151
179
  * PII-bearing events that were parked before the user opted out).
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAsB,aAAa,EAAE,MAAM,SAAS,CAAC;AAuBrF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,qBAAqB,CAA+C;IAC5E,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAYZ;IACF,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,MAAM,EAAE,GAAG;IAyCvB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAsDxC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;;OAGG;YACW,MAAM;IAwDpB;;OAEG;YACW,SAAS;IAgGvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;YACW,mBAAmB;IAiDjC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,UAAU,CAAC,UAAU,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6EnD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;;OAGG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAsB,aAAa,EAAE,MAAM,SAAS,CAAC;AA6BrF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,qBAAqB,CAA+C;IAC5E,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAYZ;IACF,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAK;IAI7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,EAAE,GAAG;IAyCvB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAsDxC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;;OAGG;YACW,MAAM;IA+DpB;;OAEG;YACW,SAAS;IAgHvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;YACW,mBAAmB;IAqEjC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;;;;;OAOG;IACH,QAAQ,IAAI;QACV,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC;KACtB;IAUD;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,UAAU,CAAC,UAAU,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoFnD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI;IAIxC;;;OAGG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage-migration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-migration.test.d.ts","sourceRoot":"","sources":["../src/storage-migration.test.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,cAAc;IACtB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,IAAI,IAAI,MAAM,EAAE,CAAC;IAEjB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,cAAM,WAAY,YAAW,cAAc;IACzC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,CAAC,EAAE,OAAO;IAmB7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,GAAG;IA6B/C;;;;;;;;OAQG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,GAAG,IAAI;IAwBzE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO;IAqBrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgB5B,IAAI,IAAI,MAAM,EAAE;IAqBhB;;;;;;;OAOG;IACH,uBAAuB,IAAI,MAAM;IAoDjC;;;;;;OAMG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IA2BvE;;;;;;;;;OASG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAe9D;AAGD,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,MAAM,CAAmB;gBAErB,OAAO,GAAE;QACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KACtB;IAON,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BhC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAgCxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAuB7B;;OAEG;IACH,OAAO,CAAC,aAAa;CA8BtB;AAaD,eAAO,MAAM,OAAO,aAAuC,CAAC;AAC5D,eAAO,MAAM,cAAc,aAAyC,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,eAAO,MAAM,OAAO,eAAsB,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,cAAc;IACtB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,IAAI,IAAI,MAAM,EAAE,CAAC;IAEjB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,cAAM,WAAY,YAAW,cAAc;IACzC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,CAAC,EAAE,OAAO;IAmB7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,GAAG;IA6B/C;;;;;;;;OAQG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,GAAG,IAAI;IAwBzE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO;IAqBrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgB5B,IAAI,IAAI,MAAM,EAAE;IAqBhB;;;;;;;OAOG;IACH,uBAAuB,IAAI,MAAM;IAmEjC;;;;;;OAMG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IA2BvE;;;;;;;;;OASG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAe9D;AAGD,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,MAAM,CAAmB;gBAErB,OAAO,GAAE;QACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KACtB;IAON,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BhC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAgCxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAuB7B;;OAEG;IACH,OAAO,CAAC,aAAa;CA8BtB;AAaD,eAAO,MAAM,OAAO,aAAuC,CAAC;AAC5D,eAAO,MAAM,cAAc,aAAyC,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,eAAO,MAAM,OAAO,eAAsB,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Stripe Checkout Session capture.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * syncStripePaymentLinks stamps `client_reference_id` onto buy.stripe.com
6
+ * anchors, and deliberately never onto checkout.stripe.com — a Checkout Session
7
+ * URL ignores the param because the session already exists server-side. That
8
+ * leaves the single most common SaaS pattern uncovered: the merchant's backend
9
+ * creates a Session and the browser is sent to checkout.stripe.com/c/pay/cs_...
10
+ * The payment then reaches our webhook with no visitor at all.
11
+ *
12
+ * Measured 2026-07-25, 30d: of payers arriving via Stripe webhooks, 0.5% (one
13
+ * tenant, 128/28,187) and 13.3% (another, 13/98) had ANY web pageview on the
14
+ * same visitor. Not a misconfiguration — no tenant is wired, because being
15
+ * wired currently requires the merchant to hand-write client_reference_id.
16
+ *
17
+ * WHAT THIS DOES
18
+ * The session id must reach the browser for the redirect to happen at all, so
19
+ * we observe it rather than trying to inject anything:
20
+ * 1. fetch/XHR response bodies — `{url}` or `{sessionId}` from the
21
+ * merchant's own create-session endpoint
22
+ * 2. anchor clicks + window.open — direct links to checkout.stripe.com
23
+ * A server-side 302 straight to Stripe never exposes the id to JS and is NOT
24
+ * covered here; that case falls back to the email bridge.
25
+ *
26
+ * WHY THIS IS SAFE TO DEFAULT ON, WHEN autoIdentifyAPI IS NOT
27
+ * autoIdentifyAPI scans the same traffic for EMAILS, which is why it defaults
28
+ * off: an admin viewing a customer record gets identified as that customer, and
29
+ * a wrong email propagates into Meta advanced matching. A `cs_live_...` token is
30
+ * unambiguous, belongs to exactly one checkout, and is not PII. There is no
31
+ * mis-identification failure mode to guard against — only the wrapper itself,
32
+ * which is why every hook below is transparent and failure-isolated.
33
+ */
34
+ export type StripeSessionSink = (sessionId: string) => void;
35
+ export interface StripeSessionWatcherOptions {
36
+ /** Emit at most this many distinct session ids per page. */
37
+ maxSessions?: number;
38
+ /** Test seam. */
39
+ maxScanBytes?: number;
40
+ }
41
+ export declare function extractSessionId(text: string | null | undefined): string | null;
42
+ /**
43
+ * True when `href` points at a Stripe-hosted checkout. Uses the URL API and
44
+ * exact host equality — `a[href*="checkout.stripe.com"]` would match
45
+ * `evil.com/checkout.stripe.com/x` and `checkout.stripe.com.evil.com`.
46
+ */
47
+ export declare function isCheckoutUrl(href: string, base?: string): boolean;
48
+ export declare class StripeSessionWatcher {
49
+ private sink?;
50
+ private seen;
51
+ private disposers;
52
+ private started;
53
+ private readonly maxSessions;
54
+ private readonly maxScanBytes;
55
+ constructor(options?: StripeSessionWatcherOptions);
56
+ start(sink: StripeSessionSink): void;
57
+ stop(): void;
58
+ /** Report a session id at most once, and never more than maxSessions per page. */
59
+ private emit;
60
+ /**
61
+ * Scan a Response WITHOUT disturbing the merchant's own read. `clone()` must
62
+ * happen synchronously, before the caller can consume the body; the read of
63
+ * the clone is deliberately not awaited by the caller.
64
+ */
65
+ private scanResponse;
66
+ private hookFetch;
67
+ private hookXhr;
68
+ /**
69
+ * Direct links to checkout.stripe.com. Capture phase so we still see the click
70
+ * when the merchant's own handler calls stopPropagation().
71
+ */
72
+ private hookClicks;
73
+ private hookWindowOpen;
74
+ }
75
+ //# sourceMappingURL=stripe-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-session.d.ts","sourceRoot":"","sources":["../src/stripe-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAkBH,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,MAAM,WAAW,2BAA2B;IAC1C,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAUlE;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAoB;IACjC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,GAAE,2BAAgC;IAKrD,KAAK,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAUpC,IAAI,IAAI,IAAI;IAcZ,kFAAkF;IAClF,OAAO,CAAC,IAAI;IAWZ;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,OAAO;IA8Bf;;;OAGG;IACH,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,cAAc;CAmBvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stripe-session.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-session.test.d.ts","sourceRoot":"","sources":["../src/stripe-session.test.ts"],"names":[],"mappings":""}
package/dist/types.d.ts CHANGED
@@ -38,6 +38,7 @@ export interface DatalyrConfig {
38
38
  shopifyCartAttributes?: boolean;
39
39
  platform?: 'shopify' | 'checkoutchamp' | 'generic';
40
40
  checkoutChampDomains?: string[];
41
+ stripeCheckoutSessions?: boolean;
41
42
  stripePaymentLinks?: boolean;
42
43
  stripeLinkDomains?: string[];
43
44
  fallbackEndpoints?: string[];
@@ -168,6 +169,7 @@ export interface IngestEventPayload {
168
169
  received_at?: string;
169
170
  sdk_version?: string;
170
171
  sdk_name?: string;
172
+ schema_version?: number;
171
173
  }
172
174
  export interface IngestBatchPayload {
173
175
  events: IngestEventPayload[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -31,6 +31,19 @@ export declare function getAllQueryParams(search?: string): Record<string, strin
31
31
  * Sanitize event data (remove sensitive keys, DOM elements, functions)
32
32
  */
33
33
  export declare function sanitizeEventData(data: any, maxDepth?: number, currentDepth?: number): any;
34
+ /**
35
+ * Redact secret/PII param VALUES in a URL (9.A.4). The param NAME is kept
36
+ * (value → `__redacted__`) so funnel steps that match on the param's presence still
37
+ * work; every other param — click IDs (fbclid/gclid/…) and utm_* — survives untouched.
38
+ * Both the query string AND a k=v fragment are rewritten: TR-04 — OAuth-implicit /
39
+ * Supabase magic links carry the session in the FRAGMENT (`/welcome#access_token=eyJ…`),
40
+ * with no query string at all; the old code returned early on a missing `?` and reattached
41
+ * the fragment verbatim, leaking the full JWT into `url` / `landingPage` / `dl_first_touch`
42
+ * (90d) and onward to ad platforms. Non-k=v fragments (`#section`, `#/spa-route`) keep their
43
+ * shape. Returns the input unchanged when nothing sensitive matched or on any parse
44
+ * failure — redaction must never break tracking.
45
+ */
46
+ export declare function redactUrl(url: string): string;
34
47
  /**
35
48
  * Deep merge objects
36
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYrE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAYrC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAyB,GAAG,MAAM,GAAG,IAAI,CAsB1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BzF;AAgCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,SAAI,EAAE,YAAY,SAAI,GAAG,GAAG,CA2DhF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAgB7D;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAOlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CAI7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAGvD;AAkCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB7D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CActC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgBrD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYrE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAYrC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAyB,GAAG,MAAM,GAAG,IAAI,CAsB1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BzF;AAgCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,SAAI,EAAE,YAAY,SAAI,GAAG,GAAG,CA2DhF;AA2DD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4C7C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAgB7D;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAOlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CAI7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAGvD;AAkCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB7D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CActC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBrD"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Unit tests for utils: the eTLD+1 helper (FSR-47) and sanitizeEventData (FSR-57).
2
+ * Unit tests for utils: the eTLD+1 helper (FSR-47), sanitizeEventData (FSR-57)
3
+ * and redactUrl (9.A.4).
3
4
  */
4
5
  export {};
5
6
  //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalyr/web",
3
- "version": "1.7.5",
3
+ "version": "1.7.8",
4
4
  "description": "Datalyr Web SDK - Modern attribution tracking for web applications",
5
5
  "main": "dist/datalyr.js",
6
6
  "module": "dist/datalyr.esm.js",
@@ -41,6 +41,7 @@
41
41
  "devDependencies": {
42
42
  "@rollup/plugin-commonjs": "^25.0.7",
43
43
  "@rollup/plugin-node-resolve": "^15.2.3",
44
+ "@rollup/plugin-replace": "^6.0.3",
44
45
  "@rollup/plugin-terser": "^0.4.4",
45
46
  "@rollup/plugin-typescript": "^11.1.5",
46
47
  "@types/jest": "^29.5.11",