@datalyr/web 1.7.2 → 1.7.3

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.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * IdentityManager tests: the _dl_vid cross-domain bridge must not be an identity-takeover
3
+ * footgun (FSR-50), and a freshly generated id is gated on consent at init (FSR-107).
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=identity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.test.d.ts","sourceRoot":"","sources":["../src/identity.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -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;AAoBH,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;AAExB,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,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,qBAAqB,CAA8B;;IAM3D;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAoIjC;;;;;OAKG;YACW,eAAe;IA0J7B;;;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,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI;IA4DvD;;OAEG;IACH,IAAI,CAAC,UAAU,GAAE,cAAmB,GAAG,IAAI;IAwD3C;;;;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;IAehD;;OAEG;IACH,KAAK,IAAI,IAAI;IA+Bb;;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,MAAM,IAAI,IAAI;IA4Bd;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAqCxC;;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;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IA8EtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,OAAO,CAAC,8BAA8B;IA+DtC;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAgH9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsG1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;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;CAwEhB;AAGD,QAAA,MAAM,OAAO,SAAgB,CAAC;AAS9B,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAe,OAAO,CAAC"}
package/dist/queue.d.ts CHANGED
@@ -70,6 +70,17 @@ export declare class EventQueue {
70
70
  * FIXED (CRITICAL-06): Can now accept specific events or move entire queue
71
71
  */
72
72
  private moveToOfflineQueue;
73
+ /**
74
+ * Persist a critical event to the offline queue BEFORE its immediate send, so it
75
+ * survives an unload during the send/backoff window. Deduped on event_id so a
76
+ * re-enqueue can't double-store it. (FSR-16)
77
+ */
78
+ private persistCriticalEvent;
79
+ /**
80
+ * Remove a delivered/dropped event from the offline queue by event_id, and clear the
81
+ * persisted copy when the queue empties. (FSR-16)
82
+ */
83
+ private removeFromOfflineQueue;
73
84
  /**
74
85
  * Load offline queue from storage
75
86
  */
@@ -99,22 +110,32 @@ export declare class EventQueue {
99
110
  */
100
111
  private buildBatch;
101
112
  /**
102
- * Force flush (for page unload)
103
- * FIXED (WEB-3): include the offline queue, chunk under sendBeacon's ~64KB cap,
104
- * and persist any chunk the browser refuses so it survives to the next page load.
105
- * Previously this beaconed the live queue as one blob — ignoring the offline queue
106
- * entirely and silently failing (returning false) whenever the payload exceeded 64KB.
113
+ * Force flush. Called on visibilitychange:hidden (NON-terminal an ordinary tab
114
+ * switch / mobile background) and on pagehide+beforeunload (terminal unload).
107
115
  *
108
- * Two follow-up review fixes:
109
- * - HIGH-1: exclude any batch currently in-flight in _flush(). That batch is being
110
- * sent with a keepalive fetch that already survives unload; re-beaconing it would
111
- * double-send. (`inFlight` is the front `inFlight.length` events of this.queue.)
112
- * - HIGH-2: handleUnload is wired to visibilitychange+pagehide+beforeunload, so this
113
- * runs multiple times per lifecycle. Detach what we beacon SYNCHRONOUSLY (clear the
114
- * in-memory queues, persist a refused remainder straight to storage rather than back
115
- * into this.offlineQueue) so a repeat call finds nothing to re-send.
116
- */
117
- forceFlush(): Promise<void>;
116
+ * FSR-15: the old single path beaconed BOTH queues on EVERY visibilitychange and then
117
+ * storage.remove()'d the persisted offline copy on sendBeacon()===true. But sendBeacon
118
+ * true only means the browser ENQUEUED the request not that it was delivered. The
119
+ * offline queue exists precisely because earlier sends failed (ingest down / 5xx / 429);
120
+ * a single alt-tab during that outage beaconed the whole backlog into the dead endpoint
121
+ * and ERASED the persisted copy, so nothing replayed when ingest recovered. It also
122
+ * ignored rateLimitedUntil, firing beacons straight into the Retry-After window.
123
+ *
124
+ * Now:
125
+ * - Non-terminal (tab switch): deliver the LIVE queue via a response-checked keepalive
126
+ * fetch (flush) and response-check-drain the offline backlog (processOfflineQueue) —
127
+ * 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.
132
+ * - Both paths honor rateLimitedUntil (don't beacon/flush into the backoff window).
133
+ *
134
+ * Still excludes the in-flight _flush batch (its keepalive fetch already carries it,
135
+ * HIGH-1), and detaches synchronously so a repeat unload event this lifecycle re-enters
136
+ * with nothing to re-beacon (HIGH-2).
137
+ */
138
+ forceFlush(isTerminal?: boolean): Promise<void>;
118
139
  /**
119
140
  * Clear queue
120
141
  */
@@ -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;AAarF,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;IAuCxC;;;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;IAkDpB;;OAEG;YACW,SAAS;IAoEvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;YACW,mBAAmB;IAwCjC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;;OAeG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA6EjC;;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;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;IAoFvB;;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"}
package/dist/storage.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  */
6
6
  interface StorageWrapper {
7
7
  get(key: string, defaultValue?: any): any;
8
+ getString(key: string, defaultValue?: string | null): string | null;
8
9
  set(key: string, value: any): boolean;
9
10
  remove(key: string): boolean;
10
11
  keys(): string[];
@@ -17,6 +18,16 @@ declare class SafeStorage implements StorageWrapper {
17
18
  private prefix;
18
19
  constructor(storage?: Storage);
19
20
  get(key: string, defaultValue?: any): any;
21
+ /**
22
+ * Get a value as a RAW string, skipping the JSON.parse that get() applies.
23
+ *
24
+ * FSR-17: get() blindly JSON.parses, so a stored user_id like '12345' comes back as
25
+ * the NUMBER 12345 after reload, and a 16+-digit snowflake id ('1234567890123456789')
26
+ * is silently precision-corrupted (→ 1234567890123456800) — permanent identity
27
+ * fragmentation. Identifiers (dl_user_id, dl_anonymous_id, dl_auto_identified_email)
28
+ * must round-trip as the exact string they were stored as; use this for them.
29
+ */
30
+ getString(key: string, defaultValue?: string | null): string | null;
20
31
  set(key: string, value: any): boolean;
21
32
  remove(key: string): boolean;
22
33
  keys(): string[];
@@ -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,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,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;IAiBhC,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;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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Storage unit tests: getString round-trips identifiers losslessly (FSR-17) and
3
+ * CookieStorage.get handles duplicate cookie names (FSR-56).
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=storage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../src/storage.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/utils.d.ts CHANGED
@@ -52,7 +52,16 @@ export declare function isDoNotTrackEnabled(): boolean;
52
52
  */
53
53
  export declare function isGlobalPrivacyControlEnabled(): boolean;
54
54
  /**
55
- * Get root domain for cross-subdomain tracking
55
+ * Registrable domain (eTLD+1) for a hostname, honoring two-part ccTLDs.
56
+ * shop.example.co.uk → example.co.uk
57
+ * www.example.com → example.com
58
+ * localhost / IPs → returned unchanged
59
+ * Returns a bare host (no leading dot) — getRootDomain() adds the cookie-domain dot.
60
+ * (FSR-47: same-site referrer classification must use this, not naive last-two-labels.)
61
+ */
62
+ export declare function getRegistrableDomain(hostname: string): string;
63
+ /**
64
+ * Get root domain for cross-subdomain tracking (cookie-domain form, with leading dot).
56
65
  */
57
66
  export declare function getRootDomain(): string;
58
67
  /**
@@ -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;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,SAAI,EAAE,YAAY,SAAI,GAAG,GAAG,CAuDhF;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;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAyDtC;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;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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for utils: the eTLD+1 helper (FSR-47) and sanitizeEventData (FSR-57).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalyr/web",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
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",
@@ -16,6 +16,7 @@
16
16
  "lint": "eslint src --ext .ts",
17
17
  "typecheck": "tsc --noEmit",
18
18
  "clean": "rm -rf dist",
19
+ "build:check": "node scripts/check-bundle.js",
19
20
  "prepublishOnly": "npm run clean && npm run build"
20
21
  },
21
22
  "keywords": [