@thisbefine/analytics 0.2.1 → 0.3.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.
Files changed (49) hide show
  1. package/README.md +161 -3
  2. package/dist/core/analytics.d.ts +44 -2
  3. package/dist/core/analytics.d.ts.map +1 -1
  4. package/dist/core/analytics.js +154 -17
  5. package/dist/core/analytics.js.map +1 -1
  6. package/dist/core/errors.d.ts.map +1 -1
  7. package/dist/core/errors.js +3 -2
  8. package/dist/core/errors.js.map +1 -1
  9. package/dist/core/logger.d.ts +2 -1
  10. package/dist/core/logger.d.ts.map +1 -1
  11. package/dist/core/logger.js +53 -1
  12. package/dist/core/logger.js.map +1 -1
  13. package/dist/core/privacy.d.ts +50 -2
  14. package/dist/core/privacy.d.ts.map +1 -1
  15. package/dist/core/privacy.js +118 -1
  16. package/dist/core/privacy.js.map +1 -1
  17. package/dist/core/queue.d.ts +76 -3
  18. package/dist/core/queue.d.ts.map +1 -1
  19. package/dist/core/queue.js +353 -40
  20. package/dist/core/queue.js.map +1 -1
  21. package/dist/core/session.d.ts +5 -3
  22. package/dist/core/session.d.ts.map +1 -1
  23. package/dist/core/session.js +20 -5
  24. package/dist/core/session.js.map +1 -1
  25. package/dist/core/types.d.ts +150 -1
  26. package/dist/core/types.d.ts.map +1 -1
  27. package/dist/core/types.js +10 -0
  28. package/dist/core/types.js.map +1 -1
  29. package/dist/core/version.d.ts +1 -1
  30. package/dist/core/version.js +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/next.d.ts +2 -0
  35. package/dist/next.d.ts.map +1 -1
  36. package/dist/next.js +2 -3
  37. package/dist/next.js.map +1 -1
  38. package/dist/react/context.d.ts +95 -0
  39. package/dist/react/context.d.ts.map +1 -0
  40. package/dist/react/context.js +120 -0
  41. package/dist/react/context.js.map +1 -0
  42. package/dist/react/hooks.d.ts.map +1 -1
  43. package/dist/react/hooks.js +38 -34
  44. package/dist/react/hooks.js.map +1 -1
  45. package/dist/react.d.ts +2 -0
  46. package/dist/react.d.ts.map +1 -1
  47. package/dist/react.js +1 -0
  48. package/dist/react.js.map +1 -1
  49. package/package.json +1 -1
@@ -1,12 +1,18 @@
1
1
  import { createLogger } from "./logger";
2
+ import { STORAGE_KEYS } from "./types";
2
3
  /**
3
- * Event queue with batching, automatic flushing, and retry logic
4
+ * Event queue with batching, automatic flushing, retry logic, offline detection,
5
+ * persistent storage for crash recovery, and circuit breaker pattern.
4
6
  *
5
7
  * Features:
6
8
  * - Batches events up to flushAt threshold
7
9
  * - Flushes automatically after flushInterval
8
10
  * - Uses sendBeacon on page unload for reliability
9
11
  * - Exponential backoff retry on failure
12
+ * - Pauses when offline, resumes when online
13
+ * - Persists queue to localStorage for crash recovery
14
+ * - Calls onFlushError callback on failures
15
+ * - Circuit breaker to stop hammering failed servers
10
16
  */
11
17
  export class Queue {
12
18
  constructor(config) {
@@ -14,9 +20,25 @@ export class Queue {
14
20
  this.timer = null;
15
21
  this.flushPromise = null;
16
22
  this.visibilityFlushPending = false;
23
+ this.destroyed = false;
24
+ this.isOnline = true;
25
+ this.circuitState = "closed";
26
+ this.consecutiveFailures = 0;
27
+ this.circuitOpenedAt = null;
28
+ this.clockOffset = 0;
29
+ this.boundVisibilityHandler = null;
30
+ this.boundBeforeUnloadHandler = null;
31
+ this.boundPageHideHandler = null;
32
+ this.boundOnlineHandler = null;
33
+ this.boundOfflineHandler = null;
17
34
  this.config = config;
18
- this.logger = createLogger("Queue", config.debug);
35
+ this.logger = createLogger("Queue", config.debug, config.structuredLogging);
36
+ if (typeof navigator !== "undefined") {
37
+ this.isOnline = navigator.onLine;
38
+ }
39
+ this.restoreFromStorage();
19
40
  this.setupUnloadHandlers();
41
+ this.setupOnlineHandlers();
20
42
  }
21
43
  /**
22
44
  * Set up handlers for page unload to ensure events are sent
@@ -24,7 +46,7 @@ export class Queue {
24
46
  setupUnloadHandlers() {
25
47
  if (typeof window === "undefined")
26
48
  return;
27
- document.addEventListener("visibilitychange", () => {
49
+ this.boundVisibilityHandler = () => {
28
50
  if (document.visibilityState === "hidden") {
29
51
  if (this.visibilityFlushPending)
30
52
  return;
@@ -34,20 +56,92 @@ export class Queue {
34
56
  this.visibilityFlushPending = false;
35
57
  }, 1000);
36
58
  }
37
- });
38
- window.addEventListener("beforeunload", () => {
59
+ };
60
+ this.boundBeforeUnloadHandler = () => {
39
61
  this.flush(true);
40
- });
41
- window.addEventListener("pagehide", () => {
62
+ };
63
+ this.boundPageHideHandler = () => {
42
64
  this.flush(true);
43
- });
65
+ };
66
+ document.addEventListener("visibilitychange", this.boundVisibilityHandler);
67
+ window.addEventListener("beforeunload", this.boundBeforeUnloadHandler);
68
+ window.addEventListener("pagehide", this.boundPageHideHandler);
69
+ }
70
+ /**
71
+ * Set up handlers for online/offline detection
72
+ */
73
+ setupOnlineHandlers() {
74
+ if (typeof window === "undefined")
75
+ return;
76
+ this.boundOnlineHandler = () => {
77
+ this.logger.log("Network online, resuming queue");
78
+ this.isOnline = true;
79
+ if (this.items.length > 0) {
80
+ this.flush();
81
+ }
82
+ };
83
+ this.boundOfflineHandler = () => {
84
+ this.logger.log("Network offline, pausing queue");
85
+ this.isOnline = false;
86
+ };
87
+ window.addEventListener("online", this.boundOnlineHandler);
88
+ window.addEventListener("offline", this.boundOfflineHandler);
89
+ }
90
+ /**
91
+ * Restore queue from persistent storage (crash recovery)
92
+ */
93
+ restoreFromStorage() {
94
+ if (!this.config.persistQueue)
95
+ return;
96
+ if (typeof localStorage === "undefined")
97
+ return;
98
+ try {
99
+ const stored = localStorage.getItem(STORAGE_KEYS.QUEUE);
100
+ if (stored) {
101
+ const parsed = JSON.parse(stored);
102
+ if (Array.isArray(parsed) && parsed.length > 0) {
103
+ this.items = parsed;
104
+ this.logger.log(`Restored ${parsed.length} events from storage`);
105
+ localStorage.removeItem(STORAGE_KEYS.QUEUE);
106
+ }
107
+ }
108
+ }
109
+ catch (error) {
110
+ this.logger.log("Failed to restore queue from storage:", error);
111
+ }
112
+ }
113
+ /**
114
+ * Persist queue to storage for crash recovery
115
+ */
116
+ persistToStorage() {
117
+ if (!this.config.persistQueue)
118
+ return;
119
+ if (typeof localStorage === "undefined")
120
+ return;
121
+ try {
122
+ if (this.items.length === 0) {
123
+ localStorage.removeItem(STORAGE_KEYS.QUEUE);
124
+ }
125
+ else {
126
+ const toStore = this.items.slice(0, this.config.maxPersistedEvents);
127
+ localStorage.setItem(STORAGE_KEYS.QUEUE, JSON.stringify(toStore));
128
+ }
129
+ }
130
+ catch (error) {
131
+ this.logger.log("Failed to persist queue to storage:", error);
132
+ }
44
133
  }
45
134
  /**
46
135
  * Add an event to the queue
47
136
  */
48
137
  push(event) {
138
+ if (this.destroyed) {
139
+ this.logger.warn("Cannot push to destroyed queue");
140
+ return;
141
+ }
49
142
  this.items.push(event);
50
143
  this.logger.log("Event queued:", event.type, "event" in event ? event.event : "");
144
+ this.persistToStorage();
51
145
  if (this.items.length >= this.config.flushAt) {
52
146
  this.logger.log("Batch size reached, flushing...");
53
147
  this.flush();
@@ -64,6 +158,7 @@ export class Queue {
64
158
  *
65
159
  * @param useBeacon - Use sendBeacon for page unload scenarios
66
160
  * @param depth - Internal recursion depth counter (prevents stack overflow)
161
+ * @returns FlushResult with success status and any errors
67
162
  */
68
163
  async flush(useBeacon = false, depth = 0) {
69
164
  const MAX_FLUSH_DEPTH = 3;
@@ -74,63 +169,207 @@ export class Queue {
74
169
  this.flush();
75
170
  }, this.config.flushInterval);
76
171
  }
77
- return;
172
+ return {
173
+ success: false,
174
+ eventCount: 0,
175
+ errors: [new Error("Max flush depth reached")],
176
+ };
78
177
  }
79
178
  if (this.timer) {
80
179
  clearTimeout(this.timer);
81
180
  this.timer = null;
82
181
  }
83
182
  if (this.items.length === 0) {
84
- return;
183
+ return { success: true, eventCount: 0 };
184
+ }
185
+ if (!this.isOnline && !useBeacon) {
186
+ this.logger.log("Offline, skipping flush (events remain queued)");
187
+ if (!this.timer) {
188
+ this.timer = setTimeout(() => {
189
+ if (this.isOnline) {
190
+ this.flush();
191
+ }
192
+ }, this.config.flushInterval);
193
+ }
194
+ return {
195
+ success: false,
196
+ eventCount: 0,
197
+ errors: [new Error("Network offline")],
198
+ };
199
+ }
200
+ if (!useBeacon && !this.canAttemptRequest()) {
201
+ this.logger.log("Circuit breaker open, skipping flush (events remain queued)");
202
+ if (!this.timer) {
203
+ this.timer = setTimeout(() => {
204
+ this.flush();
205
+ }, this.config.circuitBreakerResetTimeout);
206
+ }
207
+ return {
208
+ success: false,
209
+ eventCount: 0,
210
+ errors: [new Error("Circuit breaker open")],
211
+ };
85
212
  }
86
213
  if (this.flushPromise) {
87
214
  this.logger.log("Flush in progress, waiting...");
88
- await this.flushPromise;
215
+ const result = await this.flushPromise;
89
216
  if (this.items.length > 0) {
90
217
  return this.flush(useBeacon, depth + 1);
91
218
  }
92
- return;
219
+ return result;
93
220
  }
94
221
  const batch = this.items.splice(0);
95
- this.logger.log(`Flushing ${batch.length} events...`);
222
+ const batchCount = batch.length;
223
+ this.logger.log(`Flushing ${batchCount} events...`);
224
+ this.persistToStorage();
225
+ let result;
96
226
  this.flushPromise = (async () => {
97
227
  try {
98
228
  if (useBeacon) {
99
- this.sendWithBeacon(batch);
229
+ const success = this.sendWithBeacon(batch);
230
+ if (!success) {
231
+ this.items.unshift(...batch);
232
+ this.persistToStorage();
233
+ const error = new Error("sendBeacon returned false");
234
+ this.recordFailure();
235
+ this.notifyError(error, batch);
236
+ return { success: false, eventCount: batchCount, errors: [error] };
237
+ }
238
+ this.recordSuccess();
239
+ return { success: true, eventCount: batchCount };
100
240
  }
101
241
  else {
102
242
  await this.sendWithRetry(batch);
243
+ this.logger.log("Flush successful");
244
+ this.recordSuccess();
245
+ return { success: true, eventCount: batchCount };
103
246
  }
104
- this.logger.log("Flush successful");
105
247
  }
106
248
  catch (error) {
107
249
  this.items.unshift(...batch);
108
- this.logger.log("Flush failed, re-queued events:", error);
250
+ this.persistToStorage();
251
+ const err = error instanceof Error ? error : new Error(String(error));
252
+ this.logger.log("Flush failed, re-queued events:", err.message);
253
+ this.recordFailure();
254
+ this.notifyError(err, batch);
255
+ return { success: false, eventCount: batchCount, errors: [err] };
109
256
  }
110
257
  })();
111
258
  try {
112
- await this.flushPromise;
259
+ result = await this.flushPromise;
113
260
  }
114
261
  finally {
115
262
  this.flushPromise = null;
116
263
  }
264
+ return result;
265
+ }
266
+ /**
267
+ * Notify error callback of flush failure
268
+ */
269
+ notifyError(error, failedEvents) {
270
+ if (this.config.onFlushError) {
271
+ try {
272
+ this.config.onFlushError(error, failedEvents);
273
+ }
274
+ catch (callbackError) {
275
+ this.logger.warn("onFlushError callback threw:", callbackError);
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * Check if we can attempt a request based on circuit breaker state
281
+ */
282
+ canAttemptRequest() {
283
+ if (this.circuitState === "closed") {
284
+ return true;
285
+ }
286
+ if (this.circuitState === "open" && this.circuitOpenedAt !== null) {
287
+ const elapsed = Date.now() - this.circuitOpenedAt;
288
+ if (elapsed >= this.config.circuitBreakerResetTimeout) {
289
+ this.circuitState = "half-open";
290
+ this.logger.log("Circuit breaker half-open, attempting test request");
291
+ return true;
292
+ }
293
+ return false;
294
+ }
295
+ return this.circuitState === "half-open";
296
+ }
297
+ /**
298
+ * Record a successful request, closing the circuit
299
+ */
300
+ recordSuccess() {
301
+ if (this.circuitState !== "closed") {
302
+ this.logger.log("Circuit breaker closed after successful request");
303
+ }
304
+ this.consecutiveFailures = 0;
305
+ this.circuitState = "closed";
306
+ this.circuitOpenedAt = null;
307
+ }
308
+ /**
309
+ * Record a failed request, potentially opening the circuit
310
+ */
311
+ recordFailure() {
312
+ this.consecutiveFailures++;
313
+ this.logger.log(`Consecutive failures: ${this.consecutiveFailures}/${this.config.circuitBreakerThreshold}`);
314
+ if (this.consecutiveFailures >= this.config.circuitBreakerThreshold) {
315
+ this.circuitState = "open";
316
+ this.circuitOpenedAt = Date.now();
317
+ this.logger.log("Circuit breaker opened after consecutive failures");
318
+ }
319
+ }
320
+ /**
321
+ * Get the current circuit breaker state (for testing/debugging)
322
+ */
323
+ get circuitBreakerState() {
324
+ return this.circuitState;
325
+ }
326
+ /**
327
+ * Update clock offset from server response
328
+ * Uses the Date header to calculate the difference between client and server time
329
+ */
330
+ updateClockOffset(response, requestTime) {
331
+ const dateHeader = response.headers.get("Date");
332
+ if (!dateHeader)
333
+ return;
334
+ try {
335
+ const serverTime = new Date(dateHeader).getTime();
336
+ if (Number.isNaN(serverTime))
337
+ return;
338
+ const responseTime = Date.now();
339
+ const roundTripTime = responseTime - requestTime;
340
+ const estimatedServerTime = serverTime + roundTripTime / 2;
341
+ const clientTime = requestTime + roundTripTime / 2;
342
+ const newOffset = clientTime - estimatedServerTime;
343
+ if (Math.abs(newOffset) > 1000) {
344
+ this.clockOffset = this.clockOffset * 0.7 + newOffset * 0.3;
345
+ this.logger.log(`Clock offset updated: ${Math.round(this.clockOffset)}ms`);
346
+ }
347
+ }
348
+ catch { }
349
+ }
350
+ /**
351
+ * Get the current clock offset (for testing/debugging)
352
+ */
353
+ getClockOffset() {
354
+ return this.clockOffset;
117
355
  }
118
356
  /**
119
357
  * Send events using sendBeacon (for page unload)
358
+ * @returns true if sendBeacon succeeded, false otherwise
120
359
  */
121
360
  sendWithBeacon(batch) {
122
361
  if (typeof navigator === "undefined" || !navigator.sendBeacon) {
123
362
  this.sendWithKeepalive(batch);
124
- return;
363
+ return true;
125
364
  }
126
365
  const url = `${this.config.host}/api/v1/track`;
127
- const payload = this.formatBatchPayload(batch);
366
+ const payload = this.formatBatchPayload(batch, true);
128
367
  const blob = new Blob([JSON.stringify(payload)], {
129
368
  type: "application/json",
130
369
  });
131
- const urlWithKey = `${url}?key=${encodeURIComponent(this.config.apiKey)}`;
132
- const success = navigator.sendBeacon(urlWithKey, blob);
370
+ const success = navigator.sendBeacon(url, blob);
133
371
  this.logger.log("sendBeacon result:", success);
372
+ return success;
134
373
  }
135
374
  /**
136
375
  * Send events using fetch with keepalive (for page unload fallback)
@@ -148,7 +387,10 @@ export class Queue {
148
387
  },
149
388
  body: JSON.stringify(payload),
150
389
  keepalive: true,
151
- }).catch(() => { });
390
+ }).catch((error) => {
391
+ this.logger.log("Keepalive fetch failed:", error);
392
+ this.notifyError(error instanceof Error ? error : new Error(String(error)), batch);
393
+ });
152
394
  }
153
395
  /**
154
396
  * Send events with exponential backoff retry
@@ -157,8 +399,14 @@ export class Queue {
157
399
  const url = `${this.config.host}/api/v1/track`;
158
400
  const payload = this.formatBatchPayload(batch);
159
401
  for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
402
+ if (!this.isOnline) {
403
+ throw new Error("Network went offline during retry");
404
+ }
405
+ let response;
406
+ let requestTime;
160
407
  try {
161
- const response = await fetch(url, {
408
+ requestTime = Date.now();
409
+ response = await fetch(url, {
162
410
  method: "POST",
163
411
  headers: {
164
412
  "Content-Type": "application/json",
@@ -166,41 +414,53 @@ export class Queue {
166
414
  },
167
415
  body: JSON.stringify(payload),
168
416
  });
169
- if (response.ok) {
170
- return;
171
- }
172
- if (response.status >= 400 && response.status < 500) {
173
- if (response.status === 429) {
174
- this.logger.log("Rate limited, retrying...");
175
- }
176
- else {
177
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
178
- }
179
- }
180
- if (attempt === this.config.maxRetries) {
181
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
182
- }
183
417
  }
184
418
  catch (error) {
185
419
  if (attempt === this.config.maxRetries) {
186
420
  throw error;
187
421
  }
422
+ const baseDelay = 2 ** attempt * 1000;
423
+ const jitter = Math.random() * baseDelay * 0.5;
424
+ const delay = baseDelay + jitter;
425
+ this.logger.log(`Network error, retry ${attempt + 1}/${this.config.maxRetries} in ${Math.round(delay)}ms`);
426
+ await this.sleep(delay);
427
+ continue;
428
+ }
429
+ if (response.ok) {
430
+ this.updateClockOffset(response, requestTime);
431
+ return;
432
+ }
433
+ if (response.status >= 400 &&
434
+ response.status < 500 &&
435
+ response.status !== 429) {
436
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
437
+ }
438
+ if (response.status === 429) {
439
+ this.logger.log("Rate limited, retrying...");
440
+ }
441
+ if (attempt === this.config.maxRetries) {
442
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
188
443
  }
189
444
  const baseDelay = 2 ** attempt * 1000;
190
- const jitter = Math.random() * 1000;
445
+ const jitter = Math.random() * baseDelay * 0.5;
191
446
  const delay = baseDelay + jitter;
192
- this.logger.log(`Retry ${attempt + 1}/${this.config.maxRetries} in ${delay}ms`);
447
+ this.logger.log(`Retry ${attempt + 1}/${this.config.maxRetries} in ${Math.round(delay)}ms`);
193
448
  await this.sleep(delay);
194
449
  }
195
450
  }
196
451
  /**
197
452
  * Format events into batch payload for the API
198
453
  */
199
- formatBatchPayload(batch) {
454
+ formatBatchPayload(batch, includeApiKey = false) {
200
455
  return {
201
456
  sentAt: new Date().toISOString(),
457
+ ...(Math.abs(this.clockOffset) > 1000 && {
458
+ clockOffset: Math.round(this.clockOffset),
459
+ }),
460
+ ...(includeApiKey && { apiKey: this.config.apiKey }),
202
461
  batch: batch.map((event) => {
203
462
  const base = {
463
+ messageId: event.messageId,
204
464
  timestamp: event.timestamp,
205
465
  anonymousId: event.anonymousId,
206
466
  userId: event.userId,
@@ -259,5 +519,58 @@ export class Queue {
259
519
  get length() {
260
520
  return this.items.length;
261
521
  }
522
+ /**
523
+ * Check if the queue is currently online
524
+ */
525
+ get online() {
526
+ return this.isOnline;
527
+ }
528
+ /**
529
+ * Destroy the queue, removing all event listeners and clearing timers.
530
+ * Attempts to flush remaining events before cleanup.
531
+ */
532
+ async destroy() {
533
+ if (this.destroyed)
534
+ return;
535
+ this.destroyed = true;
536
+ this.logger.log("Destroying queue...");
537
+ if (this.timer) {
538
+ clearTimeout(this.timer);
539
+ this.timer = null;
540
+ }
541
+ if (this.items.length > 0) {
542
+ this.sendWithBeacon(this.items);
543
+ this.items = [];
544
+ }
545
+ if (this.config.persistQueue && typeof localStorage !== "undefined") {
546
+ try {
547
+ localStorage.removeItem(STORAGE_KEYS.QUEUE);
548
+ }
549
+ catch { }
550
+ }
551
+ if (typeof window !== "undefined") {
552
+ if (this.boundVisibilityHandler) {
553
+ document.removeEventListener("visibilitychange", this.boundVisibilityHandler);
554
+ this.boundVisibilityHandler = null;
555
+ }
556
+ if (this.boundBeforeUnloadHandler) {
557
+ window.removeEventListener("beforeunload", this.boundBeforeUnloadHandler);
558
+ this.boundBeforeUnloadHandler = null;
559
+ }
560
+ if (this.boundPageHideHandler) {
561
+ window.removeEventListener("pagehide", this.boundPageHideHandler);
562
+ this.boundPageHideHandler = null;
563
+ }
564
+ if (this.boundOnlineHandler) {
565
+ window.removeEventListener("online", this.boundOnlineHandler);
566
+ this.boundOnlineHandler = null;
567
+ }
568
+ if (this.boundOfflineHandler) {
569
+ window.removeEventListener("offline", this.boundOfflineHandler);
570
+ this.boundOfflineHandler = null;
571
+ }
572
+ }
573
+ this.logger.log("Queue destroyed");
574
+ }
262
575
  }
263
576
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { AccountTraits, StorageInterface, UserState, UserTraits } from "./types";
2
2
  /**
3
3
  * Session manager handles:
4
- * - Anonymous ID generation and persistence
4
+ * - Anonymous ID generation and persistence (with optional rotation)
5
5
  * - User ID management
6
6
  * - Session ID with timeout-based regeneration
7
7
  * - User traits storage
@@ -10,10 +10,11 @@ import type { AccountTraits, StorageInterface, UserState, UserTraits } from "./t
10
10
  export declare class Session {
11
11
  private storage;
12
12
  private sessionTimeout;
13
+ private anonymousIdMaxAge;
13
14
  private currentSessionId;
14
15
  private logger;
15
16
  private broadcastChannel;
16
- constructor(storage: StorageInterface, sessionTimeout: number, debug?: boolean);
17
+ constructor(storage: StorageInterface, sessionTimeout: number, debug?: boolean, anonymousIdMaxAge?: number);
17
18
  /**
18
19
  * Set up cross-tab session synchronization using BroadcastChannel
19
20
  */
@@ -27,7 +28,8 @@ export declare class Session {
27
28
  */
28
29
  private broadcastMessage;
29
30
  /**
30
- * Get the anonymous ID, generating one if it doesn't exist
31
+ * Get the anonymous ID, generating one if it doesn't exist or has expired.
32
+ * If anonymousIdMaxAge is set, the ID will be rotated after that duration.
31
33
  */
32
34
  getAnonymousId(): string;
33
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,MAAM,SAAS,CAAC;AAYjB;;;;;;;GAOG;AACH,qBAAa,OAAO;IACnB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAiC;gBAGxD,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,MAAM,EACtB,KAAK,UAAQ;IAUd;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,cAAc,IAAI,MAAM;IAYxB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,SAAS;IAWvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAOvC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,SAAS;IAW7C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAO7C;;OAEG;IACH,YAAY,IAAI,MAAM;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAwBb;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,YAAY,IAAI,SAAS;CASzB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,MAAM,SAAS,CAAC;AAYjB;;;;;;;GAOG;AACH,qBAAa,OAAO;IACnB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAiC;gBAGxD,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,MAAM,EACtB,KAAK,UAAQ,EACb,iBAAiB,SAAI;IAWtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;OAGG;IACH,cAAc,IAAI,MAAM;IA4BxB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,SAAS;IAWvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAOvC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,SAAS;IAW7C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAO7C;;OAEG;IACH,YAAY,IAAI,MAAM;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAyBb;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,YAAY,IAAI,SAAS;CASzB"}