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.
- package/README.md +50 -2
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/init.js +23 -8
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/links.js +561 -61
- package/lib/commonjs/links.js.map +1 -1
- package/lib/commonjs/track.js +241 -76
- package/lib/commonjs/track.js.map +1 -1
- package/lib/module/config.js.map +1 -1
- package/lib/module/init.js +24 -9
- package/lib/module/init.js.map +1 -1
- package/lib/module/links.js +561 -61
- package/lib/module/links.js.map +1 -1
- package/lib/module/track.js +240 -76
- package/lib/module/track.js.map +1 -1
- package/lib/typescript/config.d.ts +6 -0
- package/lib/typescript/config.d.ts.map +1 -1
- package/lib/typescript/init.d.ts +15 -6
- package/lib/typescript/init.d.ts.map +1 -1
- package/lib/typescript/links.d.ts +49 -0
- package/lib/typescript/links.d.ts.map +1 -1
- package/lib/typescript/track.d.ts +29 -7
- package/lib/typescript/track.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +6 -0
- package/src/init.ts +33 -7
- package/src/links.ts +810 -40
- package/src/track.ts +348 -83
package/lib/commonjs/track.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.getTrackingInfo = getTrackingInfo;
|
|
|
10
10
|
exports.pendingEventCount = pendingEventCount;
|
|
11
11
|
exports.stopTracking = stopTracking;
|
|
12
12
|
exports.track = track;
|
|
13
|
+
exports.trackIdempotent = trackIdempotent;
|
|
13
14
|
/**
|
|
14
15
|
* Pulse Track — the app's own events, sent to Pulse.
|
|
15
16
|
*
|
|
@@ -38,13 +39,17 @@ const DEFAULT_MAX_QUEUE = 500;
|
|
|
38
39
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
39
40
|
const DEFAULT_MAX_ATTEMPTS = 10;
|
|
40
41
|
const DEFAULT_STORAGE_KEY = 'pulse.events.v1';
|
|
42
|
+
const ANALYTICS_INSTALLATION_ID_SUFFIX = '.analytics-installation-id';
|
|
43
|
+
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;
|
|
41
44
|
let options = null;
|
|
42
45
|
let queue = [];
|
|
46
|
+
let analyticsInstallationId = '';
|
|
43
47
|
let timer = null;
|
|
44
48
|
let sending = false;
|
|
45
49
|
let nextAttemptAt = 0;
|
|
46
50
|
let lifecycleSubscription = null;
|
|
47
51
|
let trackingGeneration = 0;
|
|
52
|
+
const asynchronousStorageAdapters = new WeakSet();
|
|
48
53
|
|
|
49
54
|
/** Turns a config url into the track url; leaves an explicit track url alone. */
|
|
50
55
|
function trackUrl(url) {
|
|
@@ -55,6 +60,7 @@ function configureTracking(opts) {
|
|
|
55
60
|
disposeTracking();
|
|
56
61
|
options = opts;
|
|
57
62
|
queue = readQueue(opts);
|
|
63
|
+
analyticsInstallationId = opts.identityMode === 'anonymous_installation' ? resolveAnalyticsInstallationId(opts) : '';
|
|
58
64
|
nextAttemptAt = 0;
|
|
59
65
|
startTimer();
|
|
60
66
|
lifecycleSubscription = opts.appState?.addEventListener('change', state => {
|
|
@@ -68,10 +74,37 @@ function configureTracking(opts) {
|
|
|
68
74
|
* caller has to wrap.
|
|
69
75
|
*/
|
|
70
76
|
function track(event, props, time) {
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
void enqueueEvent(randomEventId(), event, props, time, false);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Durably enqueue one logical event with a caller-owned UUID. Replaying the same id is safe:
|
|
82
|
+
* Pulse's server/read model deduplicates it, while the local outbox avoids duplicate rows that
|
|
83
|
+
* are still pending. `true` means the event is present in persistent storage, not delivered yet;
|
|
84
|
+
* once acknowledged, Track keeps it in that outbox through retries and process restarts until a
|
|
85
|
+
* successful server response removes it transactionally.
|
|
86
|
+
*/
|
|
87
|
+
function trackIdempotent(eventId, event, props, time) {
|
|
88
|
+
const normalizedId = eventId.trim().toLowerCase();
|
|
89
|
+
if (!UUID_PATTERN.test(normalizedId)) return false;
|
|
90
|
+
return enqueueEvent(normalizedId, event, props, time, true);
|
|
91
|
+
}
|
|
92
|
+
function enqueueEvent(eventId, event, props, time, requirePersistentAck) {
|
|
93
|
+
if (!options || !event) return false;
|
|
94
|
+
try {
|
|
95
|
+
if (options.hasConsent?.() === false) {
|
|
96
|
+
options.onDropped?.(1, 'no-consent');
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
} catch {
|
|
73
100
|
options.onDropped?.(1, 'no-consent');
|
|
74
|
-
return;
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
if (requirePersistentAck) {
|
|
104
|
+
// Probe with the unchanged queue before accepting caller-owned data. This discovers custom
|
|
105
|
+
// adapters that secretly return a Promise without ever placing the terminal event in Track;
|
|
106
|
+
// the upstream Links outbox remains the single source of truth.
|
|
107
|
+
if (!options.storage || !supportsDurableSyncWrites(options.storage) || !persistQueue()) return false;
|
|
75
108
|
}
|
|
76
109
|
const flat = {};
|
|
77
110
|
const allow = options.propertyAllowlist ? new Set(options.propertyAllowlist) : null;
|
|
@@ -81,43 +114,90 @@ function track(event, props, time) {
|
|
|
81
114
|
if (allow && !allow.has(key)) continue;
|
|
82
115
|
flat[key] = redact.has(key) ? '[REDACTED]' : typeof value === 'string' ? value : String(value);
|
|
83
116
|
}
|
|
117
|
+
let occurredAt;
|
|
118
|
+
try {
|
|
119
|
+
occurredAt = (time ?? new Date()).toISOString();
|
|
120
|
+
} catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
const existing = queue.find(queued => queued.id === eventId);
|
|
124
|
+
if (existing) {
|
|
125
|
+
const sameLogicalEvent = existing.event === event && existing.time === occurredAt && JSON.stringify(existing.props) === JSON.stringify(flat);
|
|
126
|
+
if (!sameLogicalEvent) return false;
|
|
127
|
+
if (requirePersistentAck && existing.durable !== true) {
|
|
128
|
+
existing.durable = true;
|
|
129
|
+
if (!persistQueue()) {
|
|
130
|
+
delete existing.durable;
|
|
131
|
+
persistQueue();
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
const queueBeforeDurableEnqueue = requirePersistentAck ? [...queue] : null;
|
|
84
138
|
queue.push({
|
|
85
|
-
id:
|
|
139
|
+
id: eventId,
|
|
86
140
|
event,
|
|
87
|
-
time:
|
|
141
|
+
time: occurredAt,
|
|
88
142
|
props: flat,
|
|
89
|
-
attempts: 0
|
|
143
|
+
attempts: 0,
|
|
144
|
+
...(requirePersistentAck ? {
|
|
145
|
+
durable: true
|
|
146
|
+
} : {})
|
|
90
147
|
});
|
|
91
|
-
const maxQueue = options.maxQueue ?? DEFAULT_MAX_QUEUE;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
148
|
+
const maxQueue = Math.max(0, options.maxQueue ?? DEFAULT_MAX_QUEUE);
|
|
149
|
+
let dropped = 0;
|
|
150
|
+
while (queue.length > maxQueue) {
|
|
151
|
+
// Never evict a previously acknowledged durable event to make room. When every queued row
|
|
152
|
+
// is durable, the newest enqueue is refused and its upstream outbox remains authoritative.
|
|
153
|
+
const bestEffortIndex = queue.findIndex(queued => queued.durable !== true);
|
|
154
|
+
if (bestEffortIndex < 0) {
|
|
155
|
+
// The queue can already exceed a newly lowered max after restart. Refuse only the newest
|
|
156
|
+
// durable enqueue; previously acknowledged records must still reach the server.
|
|
157
|
+
const newestIndex = queue.findIndex(queued => queued.id === eventId);
|
|
158
|
+
if (newestIndex >= 0) {
|
|
159
|
+
queue.splice(newestIndex, 1);
|
|
160
|
+
dropped += 1;
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
const index = bestEffortIndex;
|
|
165
|
+
queue.splice(index, 1);
|
|
166
|
+
dropped += 1;
|
|
96
167
|
}
|
|
97
|
-
|
|
168
|
+
const retained = queue.some(queued => queued.id === eventId);
|
|
169
|
+
const persisted = persistQueue();
|
|
170
|
+
if (requirePersistentAck && (!retained || !persisted)) {
|
|
171
|
+
queue = queueBeforeDurableEnqueue ?? queue;
|
|
172
|
+
// If an adapter revealed itself as asynchronous only on the second write, schedule a
|
|
173
|
+
// compensating best-effort mirror without the caller-owned event.
|
|
174
|
+
persistQueue();
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
if (dropped > 0) options.onDropped?.(dropped, 'queue-full');
|
|
98
178
|
if (queue.length >= (options.maxBatch ?? DEFAULT_MAX_BATCH)) void flushEvents();
|
|
179
|
+
return retained && (!requirePersistentAck || persisted);
|
|
99
180
|
}
|
|
100
181
|
|
|
101
182
|
/**
|
|
102
183
|
* Send what is queued. Returns how many events the server accepted.
|
|
103
184
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* after
|
|
185
|
+
* The batch remains in the durable queue while HTTP is in flight and is removed only after a
|
|
186
|
+
* successful response is also persisted locally. This intentionally permits duplicate replay
|
|
187
|
+
* after a crash, while a caller-owned event id lets the server/read model deduplicate it.
|
|
107
188
|
*/
|
|
108
189
|
async function flushEvents() {
|
|
109
190
|
if (!options || sending || queue.length === 0 || Date.now() < nextAttemptAt) return 0;
|
|
110
191
|
const opts = options;
|
|
111
192
|
const requestGeneration = trackingGeneration;
|
|
112
193
|
const ctx = opts.getContext?.() ?? {};
|
|
194
|
+
const anonymousInstallation = opts.identityMode === 'anonymous_installation';
|
|
113
195
|
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
196
|
+
// The legacy/default mode intentionally preserves the original experiment-event
|
|
197
|
+
// contract. Anonymous campaign events opt into a separate identity explicitly.
|
|
198
|
+
if (!anonymousInstallation && !ctx.deviceId) return 0;
|
|
199
|
+
const requestDeviceId = anonymousInstallation ? analyticsInstallationId : ctx.deviceId;
|
|
118
200
|
const batch = queue.slice(0, opts.maxBatch ?? DEFAULT_MAX_BATCH);
|
|
119
|
-
queue = queue.slice(batch.length);
|
|
120
|
-
persistQueue();
|
|
121
201
|
sending = true;
|
|
122
202
|
const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
|
|
123
203
|
const timeout = controller ? setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS) : null;
|
|
@@ -128,8 +208,12 @@ async function flushEvents() {
|
|
|
128
208
|
'Content-Type': 'application/json'
|
|
129
209
|
},
|
|
130
210
|
body: JSON.stringify({
|
|
131
|
-
deviceId:
|
|
132
|
-
|
|
211
|
+
deviceId: requestDeviceId,
|
|
212
|
+
// Anonymous mode deliberately omits the property rather than serializing an
|
|
213
|
+
// empty identifier. Context mode remains backwards compatible.
|
|
214
|
+
...(anonymousInstallation ? {} : {
|
|
215
|
+
userId: ctx.userId
|
|
216
|
+
}),
|
|
133
217
|
platform: ctx.platform,
|
|
134
218
|
appVersion: ctx.appVersion,
|
|
135
219
|
events: batch.map(e => ({
|
|
@@ -142,11 +226,9 @@ async function flushEvents() {
|
|
|
142
226
|
signal: controller?.signal
|
|
143
227
|
});
|
|
144
228
|
if (!response.ok) {
|
|
145
|
-
// Rate limited or briefly down:
|
|
229
|
+
// Rate limited or briefly down: the batch never left the durable queue.
|
|
146
230
|
if (requestGeneration === trackingGeneration && options === opts) {
|
|
147
|
-
|
|
148
|
-
} else {
|
|
149
|
-
restoreStaleBatch(opts, batch, response.status);
|
|
231
|
+
markBatchForRetry(batch, response.status);
|
|
150
232
|
}
|
|
151
233
|
if (response.status !== 429) opts.onError?.(new Error(`Pulse track failed: ${response.status}`));
|
|
152
234
|
return 0;
|
|
@@ -155,10 +237,15 @@ async function flushEvents() {
|
|
|
155
237
|
if (requestGeneration !== trackingGeneration || options !== opts) return body.accepted ?? 0;
|
|
156
238
|
if (body.ignored && body.ignored.length > 0) opts.onIgnored?.(body.ignored);
|
|
157
239
|
nextAttemptAt = 0;
|
|
158
|
-
|
|
240
|
+
if (!acknowledgeBatch(opts, batch)) {
|
|
241
|
+
// The server may already have accepted the ids. Keep and replay them rather than creating
|
|
242
|
+
// the loss window between remote ACK and local deletion.
|
|
243
|
+
nextAttemptAt = Date.now() + retryDelayFor(batch);
|
|
244
|
+
opts.onError?.(new Error('Pulse track acknowledgement was not persisted'));
|
|
245
|
+
}
|
|
159
246
|
return body.accepted ?? 0;
|
|
160
247
|
} catch (error) {
|
|
161
|
-
if (requestGeneration === trackingGeneration && options === opts)
|
|
248
|
+
if (requestGeneration === trackingGeneration && options === opts) markBatchForRetry(batch);
|
|
162
249
|
opts.onError?.(error);
|
|
163
250
|
return 0;
|
|
164
251
|
} finally {
|
|
@@ -194,6 +281,7 @@ function stopTracking() {
|
|
|
194
281
|
disposeTracking();
|
|
195
282
|
options = null;
|
|
196
283
|
queue = [];
|
|
284
|
+
analyticsInstallationId = '';
|
|
197
285
|
sending = false;
|
|
198
286
|
nextAttemptAt = 0;
|
|
199
287
|
}
|
|
@@ -205,64 +293,94 @@ function startTimer() {
|
|
|
205
293
|
// and a CLI importing this should still be able to exit.
|
|
206
294
|
timer.unref?.();
|
|
207
295
|
}
|
|
208
|
-
function
|
|
296
|
+
function markBatchForRetry(batch, status) {
|
|
209
297
|
if (!options) return;
|
|
210
298
|
const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
|
|
211
|
-
const
|
|
299
|
+
const batchIds = new Set(batch.map(event => event.id));
|
|
212
300
|
let dropped = 0;
|
|
213
|
-
|
|
301
|
+
queue = queue.flatMap(event => {
|
|
302
|
+
if (!batchIds.has(event.id)) return [event];
|
|
214
303
|
const next = {
|
|
215
304
|
...event,
|
|
216
|
-
attempts: event.attempts + 1
|
|
305
|
+
attempts: Math.min(event.attempts + 1, 100_000)
|
|
217
306
|
};
|
|
218
|
-
if (next.attempts >= maxAttempts && status !== 429)
|
|
219
|
-
|
|
220
|
-
|
|
307
|
+
if (next.durable !== true && next.attempts >= maxAttempts && status !== 429) {
|
|
308
|
+
dropped += 1;
|
|
309
|
+
return [];
|
|
310
|
+
}
|
|
311
|
+
return [next];
|
|
312
|
+
});
|
|
221
313
|
if (dropped > 0) options.onDropped?.(dropped, 'max-attempts');
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
314
|
+
nextAttemptAt = Date.now() + retryDelayFor(batch.map(event => ({
|
|
315
|
+
...event,
|
|
316
|
+
attempts: Math.min(event.attempts + 1, 100_000)
|
|
317
|
+
})));
|
|
225
318
|
persistQueue();
|
|
226
319
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
*/
|
|
234
|
-
function restoreStaleBatch(opts, batch, status) {
|
|
235
|
-
const maxAttempts = opts.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
|
|
236
|
-
const retryable = [];
|
|
237
|
-
let dropped = 0;
|
|
238
|
-
for (const event of batch) {
|
|
239
|
-
const next = {
|
|
240
|
-
...event,
|
|
241
|
-
attempts: event.attempts + 1
|
|
242
|
-
};
|
|
243
|
-
if (next.attempts >= maxAttempts && status !== 429) dropped++;else retryable.push(next);
|
|
320
|
+
function acknowledgeBatch(opts, batch) {
|
|
321
|
+
const acknowledgedIds = new Set(batch.map(event => event.id));
|
|
322
|
+
const remaining = queue.filter(event => !acknowledgedIds.has(event.id));
|
|
323
|
+
if (!opts.storage) {
|
|
324
|
+
queue = remaining;
|
|
325
|
+
return true;
|
|
244
326
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
327
|
+
const includesDurable = batch.some(event => event.durable === true);
|
|
328
|
+
// Never schedule a destructive outbox write through an adapter already known to be async.
|
|
329
|
+
// The server may have accepted this batch, but retaining it for a deduplicated replay is safer
|
|
330
|
+
// than losing it during the gap before an asynchronous deletion reaches disk.
|
|
331
|
+
if (!supportsDurableSyncWrites(opts.storage)) {
|
|
332
|
+
if (includesDurable) return false;
|
|
333
|
+
queue = remaining;
|
|
334
|
+
// Best-effort events keep the historical AsyncStorage behavior: the in-memory batch drains
|
|
335
|
+
// after 2xx and the mirror may replay after a crash, but it cannot block or resend forever.
|
|
336
|
+
writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, true);
|
|
337
|
+
return true;
|
|
253
338
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
339
|
+
const persisted = writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, false);
|
|
340
|
+
if (!persisted) {
|
|
341
|
+
if (!includesDurable && !supportsDurableSyncWrites(opts.storage)) {
|
|
342
|
+
queue = remaining;
|
|
343
|
+
writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(remaining), opts.onError, true);
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
if (!supportsDurableSyncWrites(opts.storage)) {
|
|
347
|
+
// A conditional thenable may already have scheduled deletion. Immediately schedule the
|
|
348
|
+
// unchanged durable outbox behind it so a normal ordered async adapter restores the record.
|
|
349
|
+
writeStorageValue(opts.storage, storageKey(opts), JSON.stringify(queue), opts.onError, true);
|
|
350
|
+
}
|
|
351
|
+
return false;
|
|
261
352
|
}
|
|
353
|
+
queue = remaining;
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
function retryDelayFor(batch) {
|
|
357
|
+
const attempts = batch.reduce((max, event) => Math.max(max, event.attempts), 1);
|
|
358
|
+
const base = Math.min(60_000, 1_000 * 2 ** Math.min(Math.max(attempts - 1, 0), 6));
|
|
359
|
+
return base + Math.floor(Math.random() * Math.max(1, base / 4));
|
|
262
360
|
}
|
|
263
361
|
function storageKey(opts) {
|
|
264
362
|
return opts.storageKey?.trim() || DEFAULT_STORAGE_KEY;
|
|
265
363
|
}
|
|
364
|
+
function analyticsInstallationIdStorageKey(opts) {
|
|
365
|
+
return `${storageKey(opts)}${ANALYTICS_INSTALLATION_ID_SUFFIX}`;
|
|
366
|
+
}
|
|
367
|
+
function resolveAnalyticsInstallationId(opts) {
|
|
368
|
+
if (opts.storage) {
|
|
369
|
+
try {
|
|
370
|
+
const stored = opts.storage.getString(analyticsInstallationIdStorageKey(opts))?.trim();
|
|
371
|
+
if (stored && UUID_PATTERN.test(stored)) return stored.toLowerCase();
|
|
372
|
+
} catch {
|
|
373
|
+
// A telemetry identifier can stay memory-only when storage is unavailable.
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
const generated = randomAnalyticsInstallationId();
|
|
377
|
+
if (opts.storage) {
|
|
378
|
+
// This identifier does not acknowledge delivery, so asynchronous best-effort persistence is
|
|
379
|
+
// acceptable. The helper still observes rejections and marks accidental thenable adapters.
|
|
380
|
+
writeStorageValue(opts.storage, analyticsInstallationIdStorageKey(opts), generated, opts.onError, true);
|
|
381
|
+
}
|
|
382
|
+
return generated;
|
|
383
|
+
}
|
|
266
384
|
function readQueue(opts) {
|
|
267
385
|
if (!opts.storage) return [];
|
|
268
386
|
try {
|
|
@@ -270,22 +388,69 @@ function readQueue(opts) {
|
|
|
270
388
|
if (!raw) return [];
|
|
271
389
|
const parsed = JSON.parse(raw);
|
|
272
390
|
if (!Array.isArray(parsed)) return [];
|
|
273
|
-
|
|
391
|
+
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)));
|
|
392
|
+
const maxQueue = Math.max(0, opts.maxQueue ?? DEFAULT_MAX_QUEUE);
|
|
393
|
+
if (restored.length <= maxQueue) return restored;
|
|
394
|
+
const selected = new Set();
|
|
395
|
+
restored.forEach((event, index) => {
|
|
396
|
+
if (event.durable === true) selected.add(index);
|
|
397
|
+
});
|
|
398
|
+
// A lower max in a later app version may not erase already-ACKed durable rows. Fill any
|
|
399
|
+
// remaining capacity with the newest best-effort events, retaining original send order.
|
|
400
|
+
for (let index = restored.length - 1; index >= 0 && selected.size < maxQueue; index -= 1) {
|
|
401
|
+
if (restored[index]?.durable !== true) selected.add(index);
|
|
402
|
+
}
|
|
403
|
+
return restored.filter((_event, index) => selected.has(index));
|
|
274
404
|
} catch {
|
|
275
405
|
return [];
|
|
276
406
|
}
|
|
277
407
|
}
|
|
278
408
|
function persistQueue() {
|
|
279
|
-
if (!options?.storage) return;
|
|
409
|
+
if (!options?.storage) return false;
|
|
410
|
+
// Best-effort track() still mirrors through AsyncStorage, but the return value stays false so
|
|
411
|
+
// trackIdempotent() cannot claim synchronous durability that the adapter has not provided.
|
|
412
|
+
return writeStorageValue(options.storage, storageKey(options), JSON.stringify(queue), options.onError, true);
|
|
413
|
+
}
|
|
414
|
+
function supportsDurableSyncWrites(storage) {
|
|
415
|
+
return storage.supportsDurableSyncWrites !== false && !asynchronousStorageAdapters.has(storage);
|
|
416
|
+
}
|
|
417
|
+
function writeStorageValue(storage, key, value, onError, allowKnownAsyncBestEffort) {
|
|
418
|
+
const declaredOrObservedAsync = !supportsDurableSyncWrites(storage);
|
|
419
|
+
if (declaredOrObservedAsync && !allowKnownAsyncBestEffort) return false;
|
|
280
420
|
try {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
421
|
+
const result = storage.set(key, value);
|
|
422
|
+
if (isThenable(result)) {
|
|
423
|
+
asynchronousStorageAdapters.add(storage);
|
|
424
|
+
void Promise.resolve(result).catch(error => reportStorageError(onError, error));
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
return !declaredOrObservedAsync;
|
|
428
|
+
} catch (error) {
|
|
429
|
+
reportStorageError(onError, error);
|
|
430
|
+
return false;
|
|
284
431
|
}
|
|
285
432
|
}
|
|
433
|
+
function isThenable(value) {
|
|
434
|
+
return typeof value === 'object' && value !== null || typeof value === 'function' ? typeof value.then === 'function' : false;
|
|
435
|
+
}
|
|
436
|
+
function reportStorageError(onError, error) {
|
|
437
|
+
try {
|
|
438
|
+
onError?.(error);
|
|
439
|
+
} catch {/* telemetry diagnostics never become an app failure */}
|
|
440
|
+
}
|
|
286
441
|
function randomEventId() {
|
|
287
442
|
const cryptoLike = globalThis.crypto;
|
|
288
443
|
if (typeof cryptoLike?.randomUUID === 'function') return cryptoLike.randomUUID();
|
|
289
444
|
return `evt-${Date.now()}-${Math.random().toString(36).slice(2, 14)}`;
|
|
290
445
|
}
|
|
446
|
+
function randomAnalyticsInstallationId() {
|
|
447
|
+
const cryptoLike = globalThis.crypto;
|
|
448
|
+
if (typeof cryptoLike?.randomUUID === 'function') return cryptoLike.randomUUID().toLowerCase();
|
|
449
|
+
const bytes = new Uint8Array(16);
|
|
450
|
+
if (typeof cryptoLike?.getRandomValues === 'function') cryptoLike.getRandomValues(bytes);else for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);
|
|
451
|
+
bytes[6] = (bytes[6] ?? 0) & 0x0f | 0x40;
|
|
452
|
+
bytes[8] = (bytes[8] ?? 0) & 0x3f | 0x80;
|
|
453
|
+
const hex = Array.from(bytes, value => value.toString(16).padStart(2, '0')).join('');
|
|
454
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
455
|
+
}
|
|
291
456
|
//# 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":[]}
|