@datalyr/web 1.7.0 → 1.7.1

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.
package/dist/queue.d.ts CHANGED
@@ -15,6 +15,10 @@ export declare class EventQueue {
15
15
  private OFFLINE_QUEUE_KEY;
16
16
  private flushLock;
17
17
  private offlineQueueLock;
18
+ private offlineProcessing;
19
+ private inFlight;
20
+ private enabled;
21
+ private rateLimitedUntil;
18
22
  constructor(config: any);
19
23
  /**
20
24
  * Add event to queue
@@ -90,14 +94,42 @@ export declare class EventQueue {
90
94
  * Get network status
91
95
  */
92
96
  getNetworkStatus(): NetworkStatus;
97
+ /**
98
+ * Build a batch payload from a set of events.
99
+ */
100
+ private buildBatch;
93
101
  /**
94
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.
107
+ *
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.
95
116
  */
96
117
  forceFlush(): Promise<void>;
97
118
  /**
98
119
  * Clear queue
99
120
  */
100
121
  clear(): void;
122
+ /**
123
+ * Enable/disable all sending. Used by opt-out / withdrawn analytics consent so that
124
+ * events persisted BEFORE opt-out aren't drained afterwards (the periodic drain and
125
+ * the on-load drain both honor this).
126
+ */
127
+ setEnabled(enabled: boolean): void;
128
+ /**
129
+ * Clear the offline queue and its persisted copy (used by opt-out to purge any
130
+ * PII-bearing events that were parked before the user opted out).
131
+ */
132
+ clearOffline(): void;
101
133
  /**
102
134
  * Debug logging
103
135
  */
@@ -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;AAQrF,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;gBAErB,MAAM,EAAE,GAAG;IA0BvB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAmCxC;;;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;IAkB5B;;;OAGG;YACW,MAAM;IAqCpB;;OAEG;YACW,SAAS;IA+DvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;YACW,mBAAmB;IAyBjC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;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;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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Regression tests for the queue data-loss / double-send paths fixed in 1.7.1
3
+ * (WEB-1/2/3/8) and the two follow-up review findings (HIGH-1 in-flight race,
4
+ * HIGH-2 multi-fire unload). queue.ts had ZERO coverage before this — these pin
5
+ * the exact behaviors so they can't silently regress.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=queue.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.test.d.ts","sourceRoot":"","sources":["../src/queue.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalyr/web",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
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",