pulse-updates 1.3.6 → 1.3.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.
@@ -26,13 +26,17 @@ const DEFAULT_MAX_QUEUE = 500;
26
26
  const DEFAULT_TIMEOUT_MS = 10_000;
27
27
  const DEFAULT_MAX_ATTEMPTS = 10;
28
28
  const DEFAULT_STORAGE_KEY = 'pulse.events.v1';
29
+ const ANALYTICS_INSTALLATION_ID_SUFFIX = '.analytics-installation-id';
30
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
29
31
  let options = null;
30
32
  let queue = [];
33
+ let analyticsInstallationId = '';
31
34
  let timer = null;
32
35
  let sending = false;
33
36
  let nextAttemptAt = 0;
34
37
  let lifecycleSubscription = null;
35
38
  let trackingGeneration = 0;
39
+ const asynchronousStorageAdapters = new WeakSet();
36
40
 
37
41
  /** Turns a config url into the track url; leaves an explicit track url alone. */
38
42
  function trackUrl(url) {
@@ -43,6 +47,7 @@ export function configureTracking(opts) {
43
47
  disposeTracking();
44
48
  options = opts;
45
49
  queue = readQueue(opts);
50
+ analyticsInstallationId = opts.identityMode === 'anonymous_installation' ? resolveAnalyticsInstallationId(opts) : '';
46
51
  nextAttemptAt = 0;
47
52
  startTimer();
48
53
  lifecycleSubscription = opts.appState?.addEventListener('change', state => {
@@ -56,10 +61,37 @@ export function configureTracking(opts) {
56
61
  * caller has to wrap.
57
62
  */
58
63
  export function track(event, props, time) {
59
- if (!options || !event) return;
60
- if (options.hasConsent?.() === false) {
64
+ void enqueueEvent(randomEventId(), event, props, time, false);
65
+ }
66
+
67
+ /**
68
+ * Durably enqueue one logical event with a caller-owned UUID. Replaying the same id is safe:
69
+ * Pulse's server/read model deduplicates it, while the local outbox avoids duplicate rows that
70
+ * are still pending. `true` means the event is present in persistent storage, not delivered yet;
71
+ * once acknowledged, Track keeps it in that outbox through retries and process restarts until a
72
+ * successful server response removes it transactionally.
73
+ */
74
+ export function trackIdempotent(eventId, event, props, time) {
75
+ const normalizedId = eventId.trim().toLowerCase();
76
+ if (!UUID_PATTERN.test(normalizedId)) return false;
77
+ return enqueueEvent(normalizedId, event, props, time, true);
78
+ }
79
+ function enqueueEvent(eventId, event, props, time, requirePersistentAck) {
80
+ if (!options || !event) return false;
81
+ try {
82
+ if (options.hasConsent?.() === false) {
83
+ options.onDropped?.(1, 'no-consent');
84
+ return false;
85
+ }
86
+ } catch {
61
87
  options.onDropped?.(1, 'no-consent');
62
- return;
88
+ return false;
89
+ }
90
+ if (requirePersistentAck) {
91
+ // Probe with the unchanged queue before accepting caller-owned data. This discovers custom
92
+ // adapters that secretly return a Promise without ever placing the terminal event in Track;
93
+ // the upstream Links outbox remains the single source of truth.
94
+ if (!options.storage || !supportsDurableSyncWrites(options.storage) || !persistQueue()) return false;
63
95
  }
64
96
  const flat = {};
65
97
  const allow = options.propertyAllowlist ? new Set(options.propertyAllowlist) : null;
@@ -69,43 +101,90 @@ export function track(event, props, time) {
69
101
  if (allow && !allow.has(key)) continue;
70
102
  flat[key] = redact.has(key) ? '[REDACTED]' : typeof value === 'string' ? value : String(value);
71
103
  }
104
+ let occurredAt;
105
+ try {
106
+ occurredAt = (time ?? new Date()).toISOString();
107
+ } catch {
108
+ return false;
109
+ }
110
+ const existing = queue.find(queued => queued.id === eventId);
111
+ if (existing) {
112
+ const sameLogicalEvent = existing.event === event && existing.time === occurredAt && JSON.stringify(existing.props) === JSON.stringify(flat);
113
+ if (!sameLogicalEvent) return false;
114
+ if (requirePersistentAck && existing.durable !== true) {
115
+ existing.durable = true;
116
+ if (!persistQueue()) {
117
+ delete existing.durable;
118
+ persistQueue();
119
+ return false;
120
+ }
121
+ }
122
+ return true;
123
+ }
124
+ const queueBeforeDurableEnqueue = requirePersistentAck ? [...queue] : null;
72
125
  queue.push({
73
- id: randomEventId(),
126
+ id: eventId,
74
127
  event,
75
- time: (time ?? new Date()).toISOString(),
128
+ time: occurredAt,
76
129
  props: flat,
77
- attempts: 0
130
+ attempts: 0,
131
+ ...(requirePersistentAck ? {
132
+ durable: true
133
+ } : {})
78
134
  });
79
- const maxQueue = options.maxQueue ?? DEFAULT_MAX_QUEUE;
80
- if (queue.length > maxQueue) {
81
- const dropped = queue.length - maxQueue;
82
- queue = queue.slice(dropped);
83
- options.onDropped?.(dropped, 'queue-full');
135
+ const maxQueue = Math.max(0, options.maxQueue ?? DEFAULT_MAX_QUEUE);
136
+ let dropped = 0;
137
+ while (queue.length > maxQueue) {
138
+ // Never evict a previously acknowledged durable event to make room. When every queued row
139
+ // is durable, the newest enqueue is refused and its upstream outbox remains authoritative.
140
+ const bestEffortIndex = queue.findIndex(queued => queued.durable !== true);
141
+ if (bestEffortIndex < 0) {
142
+ // The queue can already exceed a newly lowered max after restart. Refuse only the newest
143
+ // durable enqueue; previously acknowledged records must still reach the server.
144
+ const newestIndex = queue.findIndex(queued => queued.id === eventId);
145
+ if (newestIndex >= 0) {
146
+ queue.splice(newestIndex, 1);
147
+ dropped += 1;
148
+ }
149
+ break;
150
+ }
151
+ const index = bestEffortIndex;
152
+ queue.splice(index, 1);
153
+ dropped += 1;
84
154
  }
85
- persistQueue();
155
+ const retained = queue.some(queued => queued.id === eventId);
156
+ const persisted = persistQueue();
157
+ if (requirePersistentAck && (!retained || !persisted)) {
158
+ queue = queueBeforeDurableEnqueue ?? queue;
159
+ // If an adapter revealed itself as asynchronous only on the second write, schedule a
160
+ // compensating best-effort mirror without the caller-owned event.
161
+ persistQueue();
162
+ return false;
163
+ }
164
+ if (dropped > 0) options.onDropped?.(dropped, 'queue-full');
86
165
  if (queue.length >= (options.maxBatch ?? DEFAULT_MAX_BATCH)) void flushEvents();
166
+ return retained && (!requirePersistentAck || persisted);
87
167
  }
88
168
 
89
169
  /**
90
170
  * Send what is queued. Returns how many events the server accepted.
91
171
  *
92
- * Failures put the batch back at the front of the queue rather than dropping it: the
93
- * usual cause is a network that is about to come back, and the usual moment is right
94
- * after launch, when the first events of a session are the ones a funnel needs most.
172
+ * The batch remains in the durable queue while HTTP is in flight and is removed only after a
173
+ * successful response is also persisted locally. This intentionally permits duplicate replay
174
+ * after a crash, while a caller-owned event id lets the server/read model deduplicate it.
95
175
  */
96
176
  export async function flushEvents() {
97
177
  if (!options || sending || queue.length === 0 || Date.now() < nextAttemptAt) return 0;
98
178
  const opts = options;
99
179
  const requestGeneration = trackingGeneration;
100
180
  const ctx = opts.getContext?.() ?? {};
181
+ const anonymousInstallation = opts.identityMode === 'anonymous_installation';
101
182
 
102
- // Without a device id the server cannot put the event in an arm, and an empty id
103
- // would pool every such install into one. Held rather than dropped: the id usually
104
- // arrives a moment after boot.
105
- if (!ctx.deviceId) return 0;
183
+ // The legacy/default mode intentionally preserves the original experiment-event
184
+ // contract. Anonymous campaign events opt into a separate identity explicitly.
185
+ if (!anonymousInstallation && !ctx.deviceId) return 0;
186
+ const requestDeviceId = anonymousInstallation ? analyticsInstallationId : ctx.deviceId;
106
187
  const batch = queue.slice(0, opts.maxBatch ?? DEFAULT_MAX_BATCH);
107
- queue = queue.slice(batch.length);
108
- persistQueue();
109
188
  sending = true;
110
189
  const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
111
190
  const timeout = controller ? setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS) : null;
@@ -116,8 +195,12 @@ export async function flushEvents() {
116
195
  'Content-Type': 'application/json'
117
196
  },
118
197
  body: JSON.stringify({
119
- deviceId: ctx.deviceId,
120
- userId: ctx.userId,
198
+ deviceId: requestDeviceId,
199
+ // Anonymous mode deliberately omits the property rather than serializing an
200
+ // empty identifier. Context mode remains backwards compatible.
201
+ ...(anonymousInstallation ? {} : {
202
+ userId: ctx.userId
203
+ }),
121
204
  platform: ctx.platform,
122
205
  appVersion: ctx.appVersion,
123
206
  events: batch.map(e => ({
@@ -130,11 +213,9 @@ export async function flushEvents() {
130
213
  signal: controller?.signal
131
214
  });
132
215
  if (!response.ok) {
133
- // Rate limited or briefly down: keep the events, try on the next tick.
216
+ // Rate limited or briefly down: the batch never left the durable queue.
134
217
  if (requestGeneration === trackingGeneration && options === opts) {
135
- requeueWithBackoff(batch, response.status);
136
- } else {
137
- restoreStaleBatch(opts, batch, response.status);
218
+ markBatchForRetry(batch, response.status);
138
219
  }
139
220
  if (response.status !== 429) opts.onError?.(new Error(`Pulse track failed: ${response.status}`));
140
221
  return 0;
@@ -143,10 +224,15 @@ export async function flushEvents() {
143
224
  if (requestGeneration !== trackingGeneration || options !== opts) return body.accepted ?? 0;
144
225
  if (body.ignored && body.ignored.length > 0) opts.onIgnored?.(body.ignored);
145
226
  nextAttemptAt = 0;
146
- persistQueue();
227
+ if (!acknowledgeBatch(opts, batch)) {
228
+ // The server may already have accepted the ids. Keep and replay them rather than creating
229
+ // the loss window between remote ACK and local deletion.
230
+ nextAttemptAt = Date.now() + retryDelayFor(batch);
231
+ opts.onError?.(new Error('Pulse track acknowledgement was not persisted'));
232
+ }
147
233
  return body.accepted ?? 0;
148
234
  } catch (error) {
149
- if (requestGeneration === trackingGeneration && options === opts) requeueWithBackoff(batch);else restoreStaleBatch(opts, batch);
235
+ if (requestGeneration === trackingGeneration && options === opts) markBatchForRetry(batch);
150
236
  opts.onError?.(error);
151
237
  return 0;
152
238
  } finally {
@@ -182,6 +268,7 @@ export function stopTracking() {
182
268
  disposeTracking();
183
269
  options = null;
184
270
  queue = [];
271
+ analyticsInstallationId = '';
185
272
  sending = false;
186
273
  nextAttemptAt = 0;
187
274
  }
@@ -193,64 +280,94 @@ function startTimer() {
193
280
  // and a CLI importing this should still be able to exit.
194
281
  timer.unref?.();
195
282
  }
196
- function requeueWithBackoff(batch, status) {
283
+ function markBatchForRetry(batch, status) {
197
284
  if (!options) return;
198
285
  const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
199
- const retryable = [];
286
+ const batchIds = new Set(batch.map(event => event.id));
200
287
  let dropped = 0;
201
- for (const event of batch) {
288
+ queue = queue.flatMap(event => {
289
+ if (!batchIds.has(event.id)) return [event];
202
290
  const next = {
203
291
  ...event,
204
- attempts: event.attempts + 1
292
+ attempts: Math.min(event.attempts + 1, 100_000)
205
293
  };
206
- if (next.attempts >= maxAttempts && status !== 429) dropped++;else retryable.push(next);
207
- }
208
- queue = [...retryable, ...queue];
294
+ if (next.durable !== true && next.attempts >= maxAttempts && status !== 429) {
295
+ dropped += 1;
296
+ return [];
297
+ }
298
+ return [next];
299
+ });
209
300
  if (dropped > 0) options.onDropped?.(dropped, 'max-attempts');
210
- const attempts = retryable.reduce((max, event) => Math.max(max, event.attempts), 1);
211
- const base = Math.min(60_000, 1_000 * 2 ** Math.min(attempts - 1, 6));
212
- nextAttemptAt = Date.now() + base + Math.floor(Math.random() * Math.max(1, base / 4));
301
+ nextAttemptAt = Date.now() + retryDelayFor(batch.map(event => ({
302
+ ...event,
303
+ attempts: Math.min(event.attempts + 1, 100_000)
304
+ })));
213
305
  persistQueue();
214
306
  }
215
-
216
- /**
217
- * An old request may fail after another app has been configured. Its rows belong in
218
- * the old app's outbox, never in the new app's in-memory queue. When the same app was
219
- * merely reconfigured, merge them back into the live queue so it need not restart to
220
- * see them; otherwise persist directly under the captured app-scoped key.
221
- */
222
- function restoreStaleBatch(opts, batch, status) {
223
- const maxAttempts = opts.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
224
- const retryable = [];
225
- let dropped = 0;
226
- for (const event of batch) {
227
- const next = {
228
- ...event,
229
- attempts: event.attempts + 1
230
- };
231
- if (next.attempts >= maxAttempts && status !== 429) dropped++;else retryable.push(next);
307
+ function acknowledgeBatch(opts, batch) {
308
+ const acknowledgedIds = new Set(batch.map(event => event.id));
309
+ const remaining = queue.filter(event => !acknowledgedIds.has(event.id));
310
+ if (!opts.storage) {
311
+ queue = remaining;
312
+ return true;
232
313
  }
233
- if (dropped > 0) opts.onDropped?.(dropped, 'max-attempts');
234
- if (retryable.length === 0) return;
235
- const currentOptions = options;
236
- const sameOutbox = currentOptions?.storage === opts.storage && currentOptions !== null && storageKey(currentOptions) === storageKey(opts);
237
- if (sameOutbox) {
238
- queue = [...retryable, ...queue].slice(-(options?.maxQueue ?? DEFAULT_MAX_QUEUE));
239
- persistQueue();
240
- return;
314
+ const includesDurable = batch.some(event => event.durable === true);
315
+ // Never schedule a destructive outbox write through an adapter already known to be async.
316
+ // The server may have accepted this batch, but retaining it for a deduplicated replay is safer
317
+ // than losing it during the gap before an asynchronous deletion reaches disk.
318
+ if (!supportsDurableSyncWrites(opts.storage)) {
319
+ if (includesDurable) return false;
320
+ queue = remaining;
321
+ // Best-effort events keep the historical AsyncStorage behavior: the in-memory batch drains
322
+ // after 2xx and the mirror may replay after a crash, but it cannot block or resend forever.
323
+ writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, true);
324
+ return true;
241
325
  }
242
- if (!opts.storage) return;
243
- try {
244
- const stored = readQueue(opts);
245
- const restored = [...retryable, ...stored].slice(-(opts.maxQueue ?? DEFAULT_MAX_QUEUE));
246
- opts.storage.set(storageKey(opts), JSON.stringify(restored));
247
- } catch {
248
- // Best effort only; a telemetry recovery must not affect the new app session.
326
+ const persisted = writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, false);
327
+ if (!persisted) {
328
+ if (!includesDurable && !supportsDurableSyncWrites(opts.storage)) {
329
+ queue = remaining;
330
+ writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, true);
331
+ return true;
332
+ }
333
+ if (!supportsDurableSyncWrites(opts.storage)) {
334
+ // A conditional thenable may already have scheduled deletion. Immediately schedule the
335
+ // unchanged durable outbox behind it so a normal ordered async adapter restores the record.
336
+ writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(queue), opts.onError, true);
337
+ }
338
+ return false;
249
339
  }
340
+ queue = remaining;
341
+ return true;
342
+ }
343
+ function retryDelayFor(batch) {
344
+ const attempts = batch.reduce((max, event) => Math.max(max, event.attempts), 1);
345
+ const base = Math.min(60_000, 1_000 * 2 ** Math.min(Math.max(attempts - 1, 0), 6));
346
+ return base + Math.floor(Math.random() * Math.max(1, base / 4));
250
347
  }
251
348
  function storageKey(opts) {
252
349
  return opts.storageKey?.trim() || DEFAULT_STORAGE_KEY;
253
350
  }
351
+ function analyticsInstallationIdStorageKey(opts) {
352
+ return `${storageKey(opts)}${ANALYTICS_INSTALLATION_ID_SUFFIX}`;
353
+ }
354
+ function resolveAnalyticsInstallationId(opts) {
355
+ if (opts.storage) {
356
+ try {
357
+ const stored = opts.storage.getString(analyticsInstallationIdStorageKey(opts))?.trim();
358
+ if (stored && UUID_PATTERN.test(stored)) return stored.toLowerCase();
359
+ } catch {
360
+ // A telemetry identifier can stay memory-only when storage is unavailable.
361
+ }
362
+ }
363
+ const generated = randomAnalyticsInstallationId();
364
+ if (opts.storage) {
365
+ // This identifier does not acknowledge delivery, so asynchronous best-effort persistence is
366
+ // acceptable. The helper still observes rejections and marks accidental thenable adapters.
367
+ writeStorageValue(opts.storage, analyticsInstallationIdStorageKey(opts), generated, opts.onError, true);
368
+ }
369
+ return generated;
370
+ }
254
371
  function readQueue(opts) {
255
372
  if (!opts.storage) return [];
256
373
  try {
@@ -258,22 +375,69 @@ function readQueue(opts) {
258
375
  if (!raw) return [];
259
376
  const parsed = JSON.parse(raw);
260
377
  if (!Array.isArray(parsed)) return [];
261
- return parsed.filter(item => Boolean(item && typeof item === 'object' && typeof item.id === 'string' && typeof item.event === 'string' && typeof item.time === 'string' && typeof item.props === 'object' && typeof item.attempts === 'number')).slice(-(opts.maxQueue ?? DEFAULT_MAX_QUEUE));
378
+ const restored = parsed.filter(item => Boolean(item && typeof item === 'object' && typeof item.id === 'string' && typeof item.event === 'string' && typeof item.time === 'string' && item.props && typeof item.props === 'object' && !Array.isArray(item.props) && typeof item.attempts === 'number' && Number.isSafeInteger(item.attempts) && item.attempts >= 0 && item.attempts <= 100_000 && (item.durable === undefined || item.durable === true)));
379
+ const maxQueue = Math.max(0, opts.maxQueue ?? DEFAULT_MAX_QUEUE);
380
+ if (restored.length <= maxQueue) return restored;
381
+ const selected = new Set();
382
+ restored.forEach((event, index) => {
383
+ if (event.durable === true) selected.add(index);
384
+ });
385
+ // A lower max in a later app version may not erase already-ACKed durable rows. Fill any
386
+ // remaining capacity with the newest best-effort events, retaining original send order.
387
+ for (let index = restored.length - 1; index >= 0 && selected.size < maxQueue; index -= 1) {
388
+ if (restored[index]?.durable !== true) selected.add(index);
389
+ }
390
+ return restored.filter((_event, index) => selected.has(index));
262
391
  } catch {
263
392
  return [];
264
393
  }
265
394
  }
266
395
  function persistQueue() {
267
- if (!options?.storage) return;
396
+ if (!options?.storage) return false;
397
+ // Best-effort track() still mirrors through AsyncStorage, but the return value stays false so
398
+ // trackIdempotent() cannot claim synchronous durability that the adapter has not provided.
399
+ return writeStorageValue(options.storage, storageKey(options), JSON.stringify(queue), options.onError, true);
400
+ }
401
+ function supportsDurableSyncWrites(storage) {
402
+ return storage.supportsDurableSyncWrites !== false && !asynchronousStorageAdapters.has(storage);
403
+ }
404
+ function writeStorageValue(storage, key, value, onError, allowKnownAsyncBestEffort) {
405
+ const declaredOrObservedAsync = !supportsDurableSyncWrites(storage);
406
+ if (declaredOrObservedAsync && !allowKnownAsyncBestEffort) return false;
268
407
  try {
269
- options.storage.set(storageKey(options), JSON.stringify(queue));
270
- } catch {
271
- // Telemetry persistence must never become an app failure.
408
+ const result = storage.set(key, value);
409
+ if (isThenable(result)) {
410
+ asynchronousStorageAdapters.add(storage);
411
+ void Promise.resolve(result).catch(error => reportStorageError(onError, error));
412
+ return false;
413
+ }
414
+ return !declaredOrObservedAsync;
415
+ } catch (error) {
416
+ reportStorageError(onError, error);
417
+ return false;
272
418
  }
273
419
  }
420
+ function isThenable(value) {
421
+ return typeof value === 'object' && value !== null || typeof value === 'function' ? typeof value.then === 'function' : false;
422
+ }
423
+ function reportStorageError(onError, error) {
424
+ try {
425
+ onError?.(error);
426
+ } catch {/* telemetry diagnostics never become an app failure */}
427
+ }
274
428
  function randomEventId() {
275
429
  const cryptoLike = globalThis.crypto;
276
430
  if (typeof cryptoLike?.randomUUID === 'function') return cryptoLike.randomUUID();
277
431
  return `evt-${Date.now()}-${Math.random().toString(36).slice(2, 14)}`;
278
432
  }
433
+ function randomAnalyticsInstallationId() {
434
+ const cryptoLike = globalThis.crypto;
435
+ if (typeof cryptoLike?.randomUUID === 'function') return cryptoLike.randomUUID().toLowerCase();
436
+ const bytes = new Uint8Array(16);
437
+ if (typeof cryptoLike?.getRandomValues === 'function') cryptoLike.getRandomValues(bytes);else for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);
438
+ bytes[6] = (bytes[6] ?? 0) & 0x0f | 0x40;
439
+ bytes[8] = (bytes[8] ?? 0) & 0x3f | 0x80;
440
+ const hex = Array.from(bytes, value => value.toString(16).padStart(2, '0')).join('');
441
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
442
+ }
279
443
  //# sourceMappingURL=track.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_FLUSH_MS","DEFAULT_MAX_BATCH","DEFAULT_MAX_QUEUE","DEFAULT_TIMEOUT_MS","DEFAULT_MAX_ATTEMPTS","DEFAULT_STORAGE_KEY","options","queue","timer","sending","nextAttemptAt","lifecycleSubscription","trackingGeneration","trackUrl","url","trimmed","replace","includes","configureTracking","opts","disposeTracking","readQueue","startTimer","appState","addEventListener","state","flushEvents","track","event","props","time","hasConsent","onDropped","flat","allow","propertyAllowlist","Set","redact","redactProperties","key","value","Object","entries","undefined","has","String","push","id","randomEventId","Date","toISOString","attempts","maxQueue","length","dropped","slice","persistQueue","maxBatch","now","requestGeneration","ctx","getContext","deviceId","batch","controller","AbortController","timeout","setTimeout","abort","timeoutMs","response","fetch","method","headers","body","JSON","stringify","userId","platform","appVersion","events","map","e","signal","ok","requeueWithBackoff","status","restoreStaleBatch","onError","Error","json","accepted","ignored","onIgnored","error","clearTimeout","pendingEventCount","getTrackingInfo","queueDepth","clearInterval","remove","stopTracking","every","flushIntervalMs","setInterval","unref","maxAttempts","retryable","next","reduce","max","Math","base","min","floor","random","currentOptions","sameOutbox","storage","storageKey","stored","restored","set","trim","raw","getString","parsed","parse","Array","isArray","filter","item","Boolean","cryptoLike","globalThis","crypto","randomUUID","toString"],"sourceRoot":"../../src","sources":["track.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_FLUSH_MS","DEFAULT_MAX_BATCH","DEFAULT_MAX_QUEUE","DEFAULT_TIMEOUT_MS","DEFAULT_MAX_ATTEMPTS","DEFAULT_STORAGE_KEY","ANALYTICS_INSTALLATION_ID_SUFFIX","UUID_PATTERN","options","queue","analyticsInstallationId","timer","sending","nextAttemptAt","lifecycleSubscription","trackingGeneration","asynchronousStorageAdapters","WeakSet","trackUrl","url","trimmed","replace","includes","configureTracking","opts","disposeTracking","readQueue","identityMode","resolveAnalyticsInstallationId","startTimer","appState","addEventListener","state","flushEvents","track","event","props","time","enqueueEvent","randomEventId","trackIdempotent","eventId","normalizedId","trim","toLowerCase","test","requirePersistentAck","hasConsent","onDropped","storage","supportsDurableSyncWrites","persistQueue","flat","allow","propertyAllowlist","Set","redact","redactProperties","key","value","Object","entries","undefined","has","String","occurredAt","Date","toISOString","existing","find","queued","id","sameLogicalEvent","JSON","stringify","durable","queueBeforeDurableEnqueue","push","attempts","maxQueue","Math","max","dropped","length","bestEffortIndex","findIndex","newestIndex","splice","index","retained","some","persisted","maxBatch","now","requestGeneration","ctx","getContext","anonymousInstallation","deviceId","requestDeviceId","batch","slice","controller","AbortController","timeout","setTimeout","abort","timeoutMs","response","fetch","method","headers","body","userId","platform","appVersion","events","map","e","signal","ok","markBatchForRetry","status","onError","Error","json","accepted","ignored","onIgnored","acknowledgeBatch","retryDelayFor","error","clearTimeout","pendingEventCount","getTrackingInfo","queueDepth","clearInterval","remove","stopTracking","every","flushIntervalMs","setInterval","unref","maxAttempts","batchIds","flatMap","next","min","acknowledgedIds","remaining","filter","includesDurable","writeStorageValue","storageKey","reduce","base","floor","random","analyticsInstallationIdStorageKey","stored","getString","generated","randomAnalyticsInstallationId","raw","parsed","parse","Array","isArray","restored","item","Boolean","Number","isSafeInteger","selected","forEach","add","size","_event","allowKnownAsyncBestEffort","declaredOrObservedAsync","result","set","isThenable","Promise","resolve","catch","reportStorageError","then","cryptoLike","globalThis","crypto","randomUUID","toString","bytes","Uint8Array","getRandomValues","i","hex","from","padStart","join"],"sourceRoot":"../../src","sources":["track.ts"],"mappings":"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","ignoreList":[]}
@@ -43,6 +43,12 @@ export type ConfigSignatureStatus = 'not-configured' | 'verified' | 'cached-veri
43
43
  export interface ConfigStorage {
44
44
  getString(key: string): string | null | undefined;
45
45
  set(key: string, value: string): void;
46
+ /**
47
+ * False when `set` only mirrors a write and schedules asynchronous persistence. Durable
48
+ * acknowledgement APIs must fail closed because process death may still lose that write.
49
+ * Omitted means the historical synchronous-storage contract.
50
+ */
51
+ readonly supportsDurableSyncWrites?: boolean;
46
52
  }
47
53
  /**
48
54
  * Everything the server may ever want to target on. Sent on every request even when
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,10 @@
14
14
  * - the urls, from the base url and the slug, which is what stops the two halves
15
15
  * from ever addressing different apps;
16
16
  * - platform and OS version, from React Native;
17
- * - the device id, minted and persisted on first launch — an app that has a stable
18
- * identifier of its own (the vendor id, an installation id) should pass it, and an
19
- * app that has none should not have to invent one to be measurable.
17
+ * - the config/experiment id, minted and persisted on first launch — an app that has
18
+ * a stable identifier of its own may pass it. Event tracking keeps the original
19
+ * context identity by default; privacy-sensitive campaign events can explicitly
20
+ * opt into a separate random app-scoped analytics installation UUID.
20
21
  *
21
22
  * Deliberately not automatic: the app version. Nothing here can read the store build
22
23
  * reliably on both platforms, and a version guessed wrong aims a rollout at the wrong
@@ -58,6 +59,12 @@ export interface InitPulseOptions {
58
59
  /** Privacy guardrails applied to every track() call. */
59
60
  eventPropertyAllowlist?: readonly string[];
60
61
  redactEventProperties?: readonly string[];
62
+ /**
63
+ * Event-envelope identity. Defaults to the backwards-compatible config context.
64
+ * Use `anonymous_installation` for events that carry their own experiment/variant
65
+ * dimensions and must never transmit the app's device or account identifier.
66
+ */
67
+ eventIdentityMode?: 'context' | 'anonymous_installation';
61
68
  /** Signed config uses the same Ed25519 public key as OTA updates. */
62
69
  signingPublicKey?: string;
63
70
  signingKeyId?: string;
@@ -92,6 +99,7 @@ export interface PulseClient {
92
99
  configUrl: string;
93
100
  trackUrl: string;
94
101
  track: (event: string, props?: TrackedEventInput['props'], time?: Date) => void;
102
+ trackIdempotent: (eventId: string, event: string, props?: TrackedEventInput['props'], time?: Date) => boolean;
95
103
  flush: () => Promise<number>;
96
104
  setUser: (userId?: string, attributes?: Record<string, string>) => void;
97
105
  clearUser: () => void;
@@ -111,11 +119,12 @@ export interface AsyncPulseStorage {
111
119
  getItem(key: string): Promise<string | null>;
112
120
  setItem(key: string, value: string): Promise<void>;
113
121
  }
114
- /** Wires config and events, and returns the context the two share. */
122
+ /** Wires config and events with an explicit event-envelope identity policy. */
115
123
  export declare function initPulse(opts: InitPulseOptions): PulseClient;
116
124
  /**
117
- * AsyncStorage-friendly one-call setup. It preloads only Pulse's three app-scoped
118
- * records, then exposes the same synchronous hot-path API as initPulse.
125
+ * AsyncStorage-friendly one-call setup. It preloads only Pulse's app-scoped config,
126
+ * event, analytics-installation and exposure records, then exposes the same
127
+ * synchronous hot-path API as initPulse.
119
128
  */
120
129
  export declare function initPulseAsync(opts: Omit<InitPulseOptions, 'storage'> & {
121
130
  storage: AsyncPulseStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"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"}