pulse-updates 1.2.2 → 1.2.4
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/android/src/main/java/app/pulse/updates/PulseController.kt +31 -0
- package/ios/PulseUpdates/PulseController.swift +27 -1
- package/ios/PulseUpdates/PulseUpdates.swift +4 -0
- package/lib/commonjs/config.js +177 -12
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/decisions.js +85 -8
- package/lib/commonjs/decisions.js.map +1 -1
- package/lib/commonjs/init.js +4 -1
- package/lib/commonjs/init.js.map +1 -1
- package/lib/module/config.js +174 -12
- package/lib/module/config.js.map +1 -1
- package/lib/module/decisions.js +85 -8
- package/lib/module/decisions.js.map +1 -1
- package/lib/module/init.js +5 -2
- package/lib/module/init.js.map +1 -1
- package/lib/typescript/config.d.ts +10 -0
- package/lib/typescript/config.d.ts.map +1 -1
- package/lib/typescript/decisions.d.ts +12 -0
- package/lib/typescript/decisions.d.ts.map +1 -1
- package/lib/typescript/init.d.ts +4 -1
- package/lib/typescript/init.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +205 -11
- package/src/decisions.ts +128 -10
- package/src/init.ts +16 -1
|
@@ -680,6 +680,20 @@ class PulseController private constructor() {
|
|
|
680
680
|
// Re-select the best update before reloading
|
|
681
681
|
launchBestUpdate { success ->
|
|
682
682
|
pulseLog(TAG, "Reload: launchBestUpdate success=$success")
|
|
683
|
+
if (!success) {
|
|
684
|
+
// Same fallback the cold-start path has always had, and for the same reason: with no
|
|
685
|
+
// launchable update left, launchAssetFile still points at whatever was running, so the
|
|
686
|
+
// host reload below would come straight back up on the bundle we are trying to leave.
|
|
687
|
+
//
|
|
688
|
+
// That is not hypothetical. Measured on a Pixel 6a (2026-08-26): an update that marks
|
|
689
|
+
// ITSELF unusable (Bastion's Layer-0 canary) marked itself FAILED, which emptied the
|
|
690
|
+
// launchable list, launchBestUpdate failed, and the app reloaded into the same broken
|
|
691
|
+
// bundle 29 times in a row — a splash screen that never resolves, which is worse than
|
|
692
|
+
// the problem it was trying to escape. Falling back to the bundle inside the APK gives
|
|
693
|
+
// the reload something good to land on.
|
|
694
|
+
pulseLogWarn(TAG, "Reload: no launchable update, falling back to embedded")
|
|
695
|
+
launchEmbedded()
|
|
696
|
+
}
|
|
683
697
|
callback(success)
|
|
684
698
|
}
|
|
685
699
|
}
|
|
@@ -698,10 +712,27 @@ class PulseController private constructor() {
|
|
|
698
712
|
runReaper()
|
|
699
713
|
}
|
|
700
714
|
|
|
715
|
+
/**
|
|
716
|
+
* Report that THIS update is not usable, from JS.
|
|
717
|
+
*
|
|
718
|
+
* It used to only bump the failure counter, which nothing reads at selection time:
|
|
719
|
+
* launchableUpdates() filters on `status IN ('ready','embedded')`, so the update stayed
|
|
720
|
+
* selectable and the next launch booted the very bundle the caller had just declared broken.
|
|
721
|
+
* The API said "trigger rollback on next start" and did not. Now it marks the update FAILED —
|
|
722
|
+
* the same thing the native crash handler does — which is what actually takes it out of the
|
|
723
|
+
* running and falls back to the previous good update, or to the embedded one.
|
|
724
|
+
*
|
|
725
|
+
* The embedded bundle is never demoted: it is the floor, and excluding it would leave the app
|
|
726
|
+
* with nothing to launch.
|
|
727
|
+
*/
|
|
701
728
|
fun reportLaunchFailure(reason: String) {
|
|
702
729
|
launchedUpdate?.let { update ->
|
|
703
730
|
try {
|
|
704
731
|
database?.recordFailedLaunch(update.updateId)
|
|
732
|
+
if (!update.isEmbedded) {
|
|
733
|
+
database?.setStatus(update.updateId, PulseUpdateStatus.FAILED)
|
|
734
|
+
pulseLogWarn(TAG, "reportLaunchFailure: marked ${update.updateId} FAILED ($reason)")
|
|
735
|
+
}
|
|
705
736
|
} catch (e: Exception) {
|
|
706
737
|
pulseLogWarn(TAG, "Failed to record launch failure: ${e.message}")
|
|
707
738
|
}
|
|
@@ -713,7 +713,16 @@ public final class PulseController {
|
|
|
713
713
|
/// Reload the app with the new update
|
|
714
714
|
public func reload(completion: ((Bool) -> Void)? = nil) {
|
|
715
715
|
// Re-select the best update before reloading
|
|
716
|
-
launchBestUpdate { success in
|
|
716
|
+
launchBestUpdate { [weak self] success in
|
|
717
|
+
if !success {
|
|
718
|
+
// Same fallback the cold-start path has, and for the same reason: with no launchable
|
|
719
|
+
// update left, launchAssetUrl still points at whatever is running, so the reload comes
|
|
720
|
+
// straight back up on the bundle we are trying to leave. Measured on Android (Pixel 6a,
|
|
721
|
+
// 2026-08-26): an update that marked ITSELF unusable emptied the launchable list and the
|
|
722
|
+
// app reloaded into the same broken bundle 29 times — a splash that never resolves.
|
|
723
|
+
pulseLog("Reload: no launchable update, falling back to embedded")
|
|
724
|
+
self?.launchEmbedded()
|
|
725
|
+
}
|
|
717
726
|
// Signal React Native to reload with the new bundle
|
|
718
727
|
NotificationCenter.default.post(name: NSNotification.Name("PulseUpdatesReload"), object: nil)
|
|
719
728
|
completion?(success)
|
|
@@ -769,6 +778,23 @@ public final class PulseController {
|
|
|
769
778
|
errorRecovery?.handle(error: error)
|
|
770
779
|
}
|
|
771
780
|
|
|
781
|
+
/// Mark THIS update unusable, from JS.
|
|
782
|
+
///
|
|
783
|
+
/// The recovery pipeline only marks a failure when content never appeared, and even then it just
|
|
784
|
+
/// bumps the counter — which nothing reads when picking what to launch (the selection filters on
|
|
785
|
+
/// status). So an update the app itself declares broken stayed selectable and came back on the
|
|
786
|
+
/// next start. Flipping the status is what actually takes it out of the running.
|
|
787
|
+
///
|
|
788
|
+
/// The embedded bundle is never demoted: it is the floor, and excluding it would leave nothing
|
|
789
|
+
/// to launch.
|
|
790
|
+
public func markLaunchFailed(_ reason: String) {
|
|
791
|
+
guard let update = launchedUpdate, !update.isEmbedded else { return }
|
|
792
|
+
try? database?.recordFailedLaunch(updateId: update.updateId)
|
|
793
|
+
try? database?.setStatus(.failed, forUpdateId: update.updateId)
|
|
794
|
+
reportEvent("launch_failure", updateId: update.updateId)
|
|
795
|
+
pulseLog("markLaunchFailed: marked \(update.updateId) failed (\(reason))")
|
|
796
|
+
}
|
|
797
|
+
|
|
772
798
|
/// Report a fatal exception for error recovery handling
|
|
773
799
|
public func reportException(_ exception: NSException) {
|
|
774
800
|
errorRecovery?.handle(exception: exception)
|
|
@@ -219,6 +219,10 @@ public class PulseUpdates: RCTEventEmitter {
|
|
|
219
219
|
func reportLaunchFailure(_ reason: String,
|
|
220
220
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
221
221
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
222
|
+
// Both halves: the recovery pipeline still sees the error (it drives its own policy), and the
|
|
223
|
+
// update is marked FAILED so the next selection actually skips it — which is what this API
|
|
224
|
+
// has always claimed to do.
|
|
225
|
+
PulseController.shared.markLaunchFailed(reason)
|
|
222
226
|
let error = NSError(domain: "PulseUpdates", code: -1, userInfo: [NSLocalizedDescriptionKey: reason])
|
|
223
227
|
PulseController.shared.reportError(error)
|
|
224
228
|
resolve(nil)
|
package/lib/commonjs/config.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.activateConfig = activateConfig;
|
|
|
7
7
|
exports.canonicalizeConfigJson = canonicalizeConfigJson;
|
|
8
8
|
exports.configureConfig = configureConfig;
|
|
9
9
|
exports.fetchConfig = fetchConfig;
|
|
10
|
+
exports.flushExposures = flushExposures;
|
|
10
11
|
exports.getAllConfig = getAllConfig;
|
|
11
12
|
exports.getConfigBoolean = getConfigBoolean;
|
|
12
13
|
exports.getConfigExperiments = getConfigExperiments;
|
|
@@ -18,8 +19,10 @@ exports.getConfigSource = getConfigSource;
|
|
|
18
19
|
exports.getConfigString = getConfigString;
|
|
19
20
|
exports.getConfigValue = getConfigValue;
|
|
20
21
|
exports.getConfigVariant = getConfigVariant;
|
|
22
|
+
exports.getExposureDeliveryInfo = getExposureDeliveryInfo;
|
|
21
23
|
exports.hasPendingConfig = hasPendingConfig;
|
|
22
24
|
exports.onConfigChange = onConfigChange;
|
|
25
|
+
exports.pendingExposureCount = pendingExposureCount;
|
|
23
26
|
exports.resetConfigForTests = resetConfigForTests;
|
|
24
27
|
exports.setConfigDefaults = setConfigDefaults;
|
|
25
28
|
exports.startConfigAutoRefresh = startConfigAutoRefresh;
|
|
@@ -75,6 +78,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
75
78
|
const STORAGE_KEY = 'pulse.config.v1';
|
|
76
79
|
const DEFAULT_POLL_MS = 5 * 60 * 1000;
|
|
77
80
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
81
|
+
const DEFAULT_EXPOSURE_RETRY_MS = 10_000;
|
|
82
|
+
const DEFAULT_EXPOSURE_STORAGE_KEY = 'pulse.exposures.v1';
|
|
83
|
+
const MAX_EXPOSURE_QUEUE = 50;
|
|
78
84
|
let options = null;
|
|
79
85
|
let defaults = {};
|
|
80
86
|
let values = {};
|
|
@@ -98,6 +104,11 @@ let signatureKeyId = null;
|
|
|
98
104
|
let pending = null;
|
|
99
105
|
/** The arm set already reported this session, so a poll does not re-report it. */
|
|
100
106
|
let reportedExposure = null;
|
|
107
|
+
let exposureQueue = [];
|
|
108
|
+
let deliveredExposureSignatures = new Set();
|
|
109
|
+
let exposureSending = false;
|
|
110
|
+
let exposureNextAttemptAt = 0;
|
|
111
|
+
let exposureTimer = null;
|
|
101
112
|
let inFlight = null;
|
|
102
113
|
let pollTimer = null;
|
|
103
114
|
let configGeneration = 0;
|
|
@@ -114,6 +125,7 @@ function configureConfig(opts) {
|
|
|
114
125
|
// may cross that boundary.
|
|
115
126
|
configGeneration += 1;
|
|
116
127
|
stopPolling();
|
|
128
|
+
stopExposureDelivery();
|
|
117
129
|
options = opts;
|
|
118
130
|
defaults = {
|
|
119
131
|
...(opts.defaults ?? {})
|
|
@@ -128,6 +140,10 @@ function configureConfig(opts) {
|
|
|
128
140
|
signatureKeyId = null;
|
|
129
141
|
pending = null;
|
|
130
142
|
reportedExposure = null;
|
|
143
|
+
exposureQueue = readExposureQueue(opts);
|
|
144
|
+
deliveredExposureSignatures = readDeliveredExposureSignatures(opts);
|
|
145
|
+
exposureSending = false;
|
|
146
|
+
exposureNextAttemptAt = 0;
|
|
131
147
|
inFlight = null;
|
|
132
148
|
applyCachedPayload(readCache(opts.storage, opts.storageKey), opts);
|
|
133
149
|
}
|
|
@@ -233,6 +249,8 @@ function hasPendingConfig() {
|
|
|
233
249
|
*/
|
|
234
250
|
function startConfigAutoRefresh(appState) {
|
|
235
251
|
void fetchConfig();
|
|
252
|
+
startExposureDelivery();
|
|
253
|
+
void flushExposures();
|
|
236
254
|
const subscription = appState?.addEventListener('change', state => {
|
|
237
255
|
if (state === 'active') void fetchConfig();
|
|
238
256
|
});
|
|
@@ -247,6 +265,7 @@ function startConfigAutoRefresh(appState) {
|
|
|
247
265
|
return () => {
|
|
248
266
|
subscription?.remove();
|
|
249
267
|
stopPolling();
|
|
268
|
+
stopExposureDelivery();
|
|
250
269
|
};
|
|
251
270
|
}
|
|
252
271
|
function applySnapshot(next, opts) {
|
|
@@ -266,7 +285,7 @@ function applySnapshot(next, opts) {
|
|
|
266
285
|
// Reported on apply, never on fetch: with activateOnFetch false a payload can sit
|
|
267
286
|
// unapplied for the rest of a session, and an arm the app is not actually serving
|
|
268
287
|
// is not an exposure.
|
|
269
|
-
|
|
288
|
+
queueExposure(opts);
|
|
270
289
|
|
|
271
290
|
// Listeners drive re-renders and gate re-evaluation: firing them for an identical
|
|
272
291
|
// payload is pure churn, and the 200-with-same-content case is common enough
|
|
@@ -292,32 +311,94 @@ function applySnapshot(next, opts) {
|
|
|
292
311
|
* Failure is swallowed on purpose. This is a diagnostic, and no diagnostic is worth
|
|
293
312
|
* a rejected promise on the path that delivers config to the app.
|
|
294
313
|
*/
|
|
295
|
-
|
|
314
|
+
function queueExposure(opts) {
|
|
296
315
|
if (opts.reportExposure !== true) return;
|
|
297
316
|
if (experiments.length === 0) return;
|
|
298
317
|
const signature = experiments.map(e => `${e.key}=${e.variant}`).join(',');
|
|
299
|
-
if (signature === reportedExposure) return;
|
|
300
|
-
reportedExposure = signature;
|
|
318
|
+
if (signature === reportedExposure || deliveredExposureSignatures.has(signature) || exposureQueue.some(item => item.signature === signature)) return;
|
|
301
319
|
const context = opts.getContext?.() ?? {};
|
|
302
320
|
const assignments = {};
|
|
303
321
|
for (const entry of experiments) assignments[entry.key] = entry.variant;
|
|
322
|
+
exposureQueue.push({
|
|
323
|
+
reportId: randomDeliveryId('exp'),
|
|
324
|
+
signature,
|
|
325
|
+
platform: context.platform,
|
|
326
|
+
appVersion: context.appVersion,
|
|
327
|
+
assignments,
|
|
328
|
+
attempts: 0
|
|
329
|
+
});
|
|
330
|
+
if (exposureQueue.length > MAX_EXPOSURE_QUEUE) {
|
|
331
|
+
exposureQueue = exposureQueue.slice(-MAX_EXPOSURE_QUEUE);
|
|
332
|
+
}
|
|
333
|
+
persistExposureQueue(opts, exposureQueue);
|
|
334
|
+
void flushExposures();
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Flushes the durable exposure outbox. Safe to call on launch, resume or manually. */
|
|
338
|
+
async function flushExposures() {
|
|
339
|
+
if (!options || exposureSending || exposureQueue.length === 0 || Date.now() < exposureNextAttemptAt) return 0;
|
|
340
|
+
const opts = options;
|
|
341
|
+
const requestGeneration = configGeneration;
|
|
342
|
+
const item = exposureQueue[0];
|
|
343
|
+
exposureSending = true;
|
|
344
|
+
const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
|
|
345
|
+
const timeout = controller ? setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS) : null;
|
|
304
346
|
try {
|
|
305
|
-
await fetch(`${opts.url.replace(/\/+$/, '')}/exposure`, {
|
|
347
|
+
const response = await fetch(`${opts.url.replace(/\/+$/, '')}/exposure`, {
|
|
306
348
|
method: 'POST',
|
|
307
349
|
headers: {
|
|
308
350
|
'Content-Type': 'application/json'
|
|
309
351
|
},
|
|
310
352
|
body: JSON.stringify({
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
353
|
+
reportId: item.reportId,
|
|
354
|
+
platform: item.platform,
|
|
355
|
+
appVersion: item.appVersion,
|
|
356
|
+
assignments: item.assignments
|
|
357
|
+
}),
|
|
358
|
+
signal: controller?.signal
|
|
315
359
|
});
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
360
|
+
if (!response.ok) throw new Error(`Pulse exposure HTTP ${response.status}`);
|
|
361
|
+
if (requestGeneration === configGeneration && options === opts) {
|
|
362
|
+
exposureQueue = exposureQueue.filter(queued => queued.reportId !== item.reportId);
|
|
363
|
+
reportedExposure = item.signature;
|
|
364
|
+
deliveredExposureSignatures.add(item.signature);
|
|
365
|
+
persistDeliveredExposureSignatures(opts);
|
|
366
|
+
exposureNextAttemptAt = 0;
|
|
367
|
+
persistExposureQueue(opts, exposureQueue);
|
|
368
|
+
if (exposureQueue.length > 0) void flushExposures();
|
|
369
|
+
} else {
|
|
370
|
+
removeExposureFromStoredQueue(opts, item.reportId);
|
|
371
|
+
markStoredExposureDelivered(opts, item.signature);
|
|
372
|
+
}
|
|
373
|
+
return 1;
|
|
374
|
+
} catch (error) {
|
|
375
|
+
if (requestGeneration === configGeneration && options === opts) {
|
|
376
|
+
exposureQueue = exposureQueue.map(queued => queued.reportId === item.reportId ? {
|
|
377
|
+
...queued,
|
|
378
|
+
attempts: queued.attempts + 1
|
|
379
|
+
} : queued);
|
|
380
|
+
const attempts = Math.min(item.attempts + 1, 6);
|
|
381
|
+
const base = Math.min(60_000, 1_000 * 2 ** Math.max(0, attempts - 1));
|
|
382
|
+
exposureNextAttemptAt = Date.now() + base;
|
|
383
|
+
persistExposureQueue(opts, exposureQueue);
|
|
384
|
+
}
|
|
385
|
+
opts.onError?.(error);
|
|
386
|
+
return 0;
|
|
387
|
+
} finally {
|
|
388
|
+
if (timeout) clearTimeout(timeout);
|
|
389
|
+
if (requestGeneration === configGeneration) exposureSending = false;
|
|
319
390
|
}
|
|
320
391
|
}
|
|
392
|
+
function pendingExposureCount() {
|
|
393
|
+
return exposureQueue.length;
|
|
394
|
+
}
|
|
395
|
+
function getExposureDeliveryInfo() {
|
|
396
|
+
return {
|
|
397
|
+
queueDepth: exposureQueue.length,
|
|
398
|
+
sending: exposureSending,
|
|
399
|
+
nextAttemptAt: exposureNextAttemptAt
|
|
400
|
+
};
|
|
401
|
+
}
|
|
321
402
|
|
|
322
403
|
/**
|
|
323
404
|
* Verifies the exact unsigned JSON object the server signs. A configured verifier
|
|
@@ -461,6 +542,85 @@ function stopPolling() {
|
|
|
461
542
|
pollTimer = null;
|
|
462
543
|
}
|
|
463
544
|
}
|
|
545
|
+
function startExposureDelivery() {
|
|
546
|
+
stopExposureDelivery();
|
|
547
|
+
if (options?.reportExposure !== true) return;
|
|
548
|
+
exposureTimer = setInterval(() => void flushExposures(), DEFAULT_EXPOSURE_RETRY_MS);
|
|
549
|
+
exposureTimer.unref?.();
|
|
550
|
+
}
|
|
551
|
+
function stopExposureDelivery() {
|
|
552
|
+
if (exposureTimer) clearInterval(exposureTimer);
|
|
553
|
+
exposureTimer = null;
|
|
554
|
+
}
|
|
555
|
+
function exposureStorageKey(opts) {
|
|
556
|
+
if (opts.exposureStorageKey?.trim()) return opts.exposureStorageKey.trim();
|
|
557
|
+
if (opts.storageKey?.trim()) return `${opts.storageKey.trim()}.exposures`;
|
|
558
|
+
return DEFAULT_EXPOSURE_STORAGE_KEY;
|
|
559
|
+
}
|
|
560
|
+
function deliveredExposureStorageKey(opts) {
|
|
561
|
+
return `${exposureStorageKey(opts)}.delivered`;
|
|
562
|
+
}
|
|
563
|
+
function readExposureQueue(opts) {
|
|
564
|
+
if (!opts.storage) return [];
|
|
565
|
+
try {
|
|
566
|
+
const raw = opts.storage.getString(exposureStorageKey(opts));
|
|
567
|
+
if (!raw) return [];
|
|
568
|
+
const parsed = JSON.parse(raw);
|
|
569
|
+
if (!Array.isArray(parsed)) return [];
|
|
570
|
+
return parsed.filter(item => Boolean(item && typeof item === 'object' && typeof item.reportId === 'string' && typeof item.signature === 'string' && typeof item.assignments === 'object' && typeof item.attempts === 'number')).slice(-MAX_EXPOSURE_QUEUE);
|
|
571
|
+
} catch {
|
|
572
|
+
return [];
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
function persistExposureQueue(opts, queued) {
|
|
576
|
+
if (!opts.storage) return;
|
|
577
|
+
try {
|
|
578
|
+
opts.storage.set(exposureStorageKey(opts), JSON.stringify(queued));
|
|
579
|
+
} catch {
|
|
580
|
+
// Exposure delivery is diagnostic and may never make config adoption fail.
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
function readDeliveredExposureSignatures(opts) {
|
|
584
|
+
if (!opts.storage) return new Set();
|
|
585
|
+
try {
|
|
586
|
+
const raw = opts.storage.getString(deliveredExposureStorageKey(opts));
|
|
587
|
+
if (!raw) return new Set();
|
|
588
|
+
const parsed = JSON.parse(raw);
|
|
589
|
+
if (!Array.isArray(parsed)) return new Set();
|
|
590
|
+
return new Set(parsed.filter(value => typeof value === 'string').slice(-100));
|
|
591
|
+
} catch {
|
|
592
|
+
return new Set();
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
function persistDeliveredExposureSignatures(opts) {
|
|
596
|
+
if (!opts.storage) return;
|
|
597
|
+
try {
|
|
598
|
+
const values = [...deliveredExposureSignatures].slice(-100);
|
|
599
|
+
opts.storage.set(deliveredExposureStorageKey(opts), JSON.stringify(values));
|
|
600
|
+
} catch {
|
|
601
|
+
// The server-side reportId still protects retries in this process.
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
function markStoredExposureDelivered(opts, signature) {
|
|
605
|
+
if (!opts.storage) return;
|
|
606
|
+
try {
|
|
607
|
+
const stored = readDeliveredExposureSignatures(opts);
|
|
608
|
+
stored.add(signature);
|
|
609
|
+
opts.storage.set(deliveredExposureStorageKey(opts), JSON.stringify([...stored].slice(-100)));
|
|
610
|
+
} catch {
|
|
611
|
+
// A later server retry remains idempotent through its reportId.
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
function removeExposureFromStoredQueue(opts, reportId) {
|
|
615
|
+
if (!opts.storage) return;
|
|
616
|
+
const queued = readExposureQueue(opts).filter(item => item.reportId !== reportId);
|
|
617
|
+
persistExposureQueue(opts, queued);
|
|
618
|
+
}
|
|
619
|
+
function randomDeliveryId(prefix) {
|
|
620
|
+
const cryptoLike = globalThis.crypto;
|
|
621
|
+
if (typeof cryptoLike?.randomUUID === 'function') return `${prefix}-${cryptoLike.randomUUID()}`;
|
|
622
|
+
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 14)}`;
|
|
623
|
+
}
|
|
464
624
|
|
|
465
625
|
// ─── Reads ────────────────────────────────────────────────────────────────────
|
|
466
626
|
|
|
@@ -580,8 +740,13 @@ function resetConfigForTests() {
|
|
|
580
740
|
inFlight = null;
|
|
581
741
|
pending = null;
|
|
582
742
|
reportedExposure = null;
|
|
743
|
+
exposureQueue = [];
|
|
744
|
+
deliveredExposureSignatures = new Set();
|
|
745
|
+
exposureSending = false;
|
|
746
|
+
exposureNextAttemptAt = 0;
|
|
583
747
|
listeners.clear();
|
|
584
748
|
stopPolling();
|
|
749
|
+
stopExposureDelivery();
|
|
585
750
|
}
|
|
586
751
|
|
|
587
752
|
// ─── Internals ────────────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tweetnacl","_interopRequireDefault","require","e","__esModule","default","STORAGE_KEY","DEFAULT_POLL_MS","DEFAULT_TIMEOUT_MS","options","defaults","values","experiments","etag","fetchedAt","verifiedAt","source","signatureStatus","signatureKeyId","pending","reportedExposure","inFlight","pollTimer","configGeneration","listeners","Set","configureConfig","opts","stopPolling","applyCachedPayload","readCache","storage","storageKey","setConfigDefaults","more","fetchConfig","minInterval","minimumFetchIntervalMs","Date","now","requestGeneration","request","controller","AbortController","timer","setTimeout","abort","timeoutMs","response","fetch","url","method","headers","buildHeaders","signal","status","ok","Error","payload","json","verifyConfigPayload","payloadObject","nextValues","Array","isArray","get","snapshot","parseExperiments","activateOnFetch","applySnapshot","error","onError","clearTimeout","activateConfig","next","hasPendingConfig","startConfigAutoRefresh","appState","subscription","addEventListener","state","interval","pollIntervalMs","setInterval","unref","remove","changed","shallowEqual","sameExperiments","writeCache","signatureVerified","reportExposure","notify","length","signature","map","key","variant","join","context","getContext","assignments","entry","replace","body","JSON","stringify","platform","appVersion","setSignatureState","keyId","verificationConfigured","Boolean","requireSignature","signingPublicKey","signingKeyId","verifySignature","record","rawSignature","isConfigSignature","alg","toLowerCase","unsigned","locallyCanonical","canonicalizeConfigJson","canonical","parse","valid","nacl","sign","detached","verify","utf8Bytes","decodeBase64","sig","value","undefined","Object","keys","sort","atobLike","globalThis","atob","decoded","Uint8Array","from","char","charCodeAt","BufferCtor","Buffer","Encoder","TextEncoder","encode","encoded","unescape","encodeURIComponent","raw","filter","a","b","every","i","aKeys","bKeys","k","av","bv","clearInterval","getConfigValue","prototype","hasOwnProperty","call","fallback","getConfigBoolean","getConfigNumber","parsed","Number","isNaN","getConfigString","String","getAllConfig","getConfigJson","getConfigSource","getConfigExperiments","getConfigVariant","experimentKey","find","getConfigKeys","onConfigChange","listener","add","delete","getConfigInfo","keyCount","resetConfigForTests","clear","currentEtag","ctx","Accept","osVersion","language","deviceId","userId","userAttributes","getString","trim","parseCachedPayload","cached","set","forEach"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_tweetnacl","_interopRequireDefault","require","e","__esModule","default","STORAGE_KEY","DEFAULT_POLL_MS","DEFAULT_TIMEOUT_MS","DEFAULT_EXPOSURE_RETRY_MS","DEFAULT_EXPOSURE_STORAGE_KEY","MAX_EXPOSURE_QUEUE","options","defaults","values","experiments","etag","fetchedAt","verifiedAt","source","signatureStatus","signatureKeyId","pending","reportedExposure","exposureQueue","deliveredExposureSignatures","Set","exposureSending","exposureNextAttemptAt","exposureTimer","inFlight","pollTimer","configGeneration","listeners","configureConfig","opts","stopPolling","stopExposureDelivery","readExposureQueue","readDeliveredExposureSignatures","applyCachedPayload","readCache","storage","storageKey","setConfigDefaults","more","fetchConfig","minInterval","minimumFetchIntervalMs","Date","now","requestGeneration","request","controller","AbortController","timer","setTimeout","abort","timeoutMs","response","fetch","url","method","headers","buildHeaders","signal","status","ok","Error","payload","json","verifyConfigPayload","payloadObject","nextValues","Array","isArray","get","snapshot","parseExperiments","activateOnFetch","applySnapshot","error","onError","clearTimeout","activateConfig","next","hasPendingConfig","startConfigAutoRefresh","appState","startExposureDelivery","flushExposures","subscription","addEventListener","state","interval","pollIntervalMs","setInterval","unref","remove","changed","shallowEqual","sameExperiments","writeCache","signatureVerified","queueExposure","notify","reportExposure","length","signature","map","key","variant","join","has","some","item","context","getContext","assignments","entry","push","reportId","randomDeliveryId","platform","appVersion","attempts","slice","persistExposureQueue","timeout","replace","body","JSON","stringify","filter","queued","add","persistDeliveredExposureSignatures","removeExposureFromStoredQueue","markStoredExposureDelivered","Math","min","base","max","pendingExposureCount","getExposureDeliveryInfo","queueDepth","sending","nextAttemptAt","setSignatureState","keyId","verificationConfigured","Boolean","requireSignature","signingPublicKey","signingKeyId","verifySignature","record","rawSignature","isConfigSignature","alg","toLowerCase","unsigned","locallyCanonical","canonicalizeConfigJson","canonical","parse","valid","nacl","sign","detached","verify","utf8Bytes","decodeBase64","sig","value","undefined","Object","keys","sort","atobLike","globalThis","atob","decoded","Uint8Array","from","char","charCodeAt","BufferCtor","Buffer","Encoder","TextEncoder","encode","encoded","unescape","encodeURIComponent","raw","a","b","every","i","aKeys","bKeys","k","av","bv","clearInterval","exposureStorageKey","trim","deliveredExposureStorageKey","getString","parsed","set","stored","prefix","cryptoLike","crypto","randomUUID","random","toString","getConfigValue","prototype","hasOwnProperty","call","fallback","getConfigBoolean","getConfigNumber","Number","isNaN","getConfigString","String","getAllConfig","getConfigJson","getConfigSource","getConfigExperiments","getConfigVariant","experimentKey","find","getConfigKeys","onConfigChange","listener","delete","getConfigInfo","keyCount","resetConfigForTests","clear","currentEtag","ctx","Accept","osVersion","language","deviceId","userId","userAttributes","parseCachedPayload","cached","forEach"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createPulseDecisionClient = createPulseDecisionClient;
|
|
7
|
+
const DEFAULT_OUTCOME_FLUSH_MS = 10_000;
|
|
8
|
+
const DEFAULT_OUTCOME_MAX_QUEUE = 100;
|
|
9
|
+
|
|
7
10
|
/** Generic decision protocol. Product-specific action handlers remain in each app. */
|
|
8
11
|
function createPulseDecisionClient(options) {
|
|
9
12
|
const fetcher = options.fetch ?? globalThis.fetch;
|
|
@@ -11,26 +14,77 @@ function createPulseDecisionClient(options) {
|
|
|
11
14
|
const slug = encodeURIComponent(options.appSlug);
|
|
12
15
|
const timeoutMs = Math.max(250, options.timeoutMs ?? 3_000);
|
|
13
16
|
const executionMode = options.executionMode ?? 'shadow-only';
|
|
14
|
-
const
|
|
17
|
+
const storageKey = options.storageKey?.trim() || `pulse.${options.appSlug.trim()}.outcomes.v1`;
|
|
18
|
+
const maxQueue = Math.max(1, options.maxQueue ?? DEFAULT_OUTCOME_MAX_QUEUE);
|
|
19
|
+
let outcomeQueue = readOutcomeQueue(options.storage, storageKey, maxQueue);
|
|
20
|
+
let outcomeSending = false;
|
|
21
|
+
let outcomeNextAttemptAt = 0;
|
|
22
|
+
let disposed = false;
|
|
23
|
+
const persistOutcomes = () => {
|
|
24
|
+
if (!options.storage) return;
|
|
25
|
+
try {
|
|
26
|
+
options.storage.set(storageKey, JSON.stringify(outcomeQueue));
|
|
27
|
+
} catch {
|
|
28
|
+
// A storage failure may reduce durability, but decision execution itself must
|
|
29
|
+
// remain available and the caller still receives the delivery result.
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const flushOutcomes = async () => {
|
|
33
|
+
if (disposed || outcomeSending || outcomeQueue.length === 0 || Date.now() < outcomeNextAttemptAt) return 0;
|
|
34
|
+
outcomeSending = true;
|
|
35
|
+
const queued = outcomeQueue[0];
|
|
15
36
|
try {
|
|
16
|
-
const response = await timedFetch(fetcher, `${base}/pulse/decisions/${slug}/${encodeURIComponent(decisionId)}/outcome`, {
|
|
37
|
+
const response = await timedFetch(fetcher, `${base}/pulse/decisions/${slug}/${encodeURIComponent(queued.decisionId)}/outcome`, {
|
|
17
38
|
method: 'POST',
|
|
18
39
|
headers: {
|
|
19
40
|
'Content-Type': 'application/json'
|
|
20
41
|
},
|
|
21
42
|
body: JSON.stringify({
|
|
22
|
-
outcome,
|
|
23
|
-
...(metadata ? {
|
|
24
|
-
metadata
|
|
43
|
+
outcome: queued.outcome,
|
|
44
|
+
...(queued.metadata ? {
|
|
45
|
+
metadata: queued.metadata
|
|
25
46
|
} : {})
|
|
26
47
|
})
|
|
27
48
|
}, timeoutMs);
|
|
28
|
-
|
|
49
|
+
if (!response.ok) throw new Error(`Pulse outcome HTTP ${response.status}`);
|
|
50
|
+
|
|
51
|
+
// A newer terminal state may have replaced this one while the request was in
|
|
52
|
+
// flight (accepted -> converted). Remove only the exact revision delivered.
|
|
53
|
+
outcomeQueue = outcomeQueue.filter(item => item.decisionId !== queued.decisionId || item.revision !== queued.revision);
|
|
54
|
+
outcomeNextAttemptAt = 0;
|
|
55
|
+
persistOutcomes();
|
|
56
|
+
return 1;
|
|
29
57
|
} catch (error) {
|
|
58
|
+
const current = outcomeQueue.find(item => item.decisionId === queued.decisionId);
|
|
59
|
+
if (current?.revision === queued.revision) current.attempts += 1;
|
|
60
|
+
const attempts = Math.min(current?.attempts ?? queued.attempts + 1, 6);
|
|
61
|
+
const baseDelay = Math.min(60_000, 1_000 * 2 ** Math.max(0, attempts - 1));
|
|
62
|
+
outcomeNextAttemptAt = Date.now() + baseDelay;
|
|
63
|
+
persistOutcomes();
|
|
30
64
|
options.onError?.(error);
|
|
31
|
-
return
|
|
65
|
+
return 0;
|
|
66
|
+
} finally {
|
|
67
|
+
outcomeSending = false;
|
|
68
|
+
if (!disposed && outcomeNextAttemptAt === 0 && outcomeQueue.length > 0) void flushOutcomes();
|
|
32
69
|
}
|
|
33
70
|
};
|
|
71
|
+
const reportOutcome = async (decisionId, outcome, metadata) => {
|
|
72
|
+
if (!decisionId.trim() || disposed) return false;
|
|
73
|
+
const next = {
|
|
74
|
+
decisionId,
|
|
75
|
+
outcome,
|
|
76
|
+
metadata,
|
|
77
|
+
revision: randomKey(),
|
|
78
|
+
attempts: 0
|
|
79
|
+
};
|
|
80
|
+
const existing = outcomeQueue.findIndex(item => item.decisionId === decisionId);
|
|
81
|
+
if (existing >= 0) outcomeQueue[existing] = next;else outcomeQueue.push(next);
|
|
82
|
+
outcomeQueue = outcomeQueue.slice(-maxQueue);
|
|
83
|
+
outcomeNextAttemptAt = 0;
|
|
84
|
+
persistOutcomes();
|
|
85
|
+
await flushOutcomes();
|
|
86
|
+
return !outcomeQueue.some(item => item.decisionId === decisionId && item.revision === next.revision);
|
|
87
|
+
};
|
|
34
88
|
const decide = async (trigger, request = {}) => {
|
|
35
89
|
try {
|
|
36
90
|
const context = await options.getContext();
|
|
@@ -83,11 +137,34 @@ function createPulseDecisionClient(options) {
|
|
|
83
137
|
return null;
|
|
84
138
|
}
|
|
85
139
|
};
|
|
140
|
+
const timer = setInterval(() => void flushOutcomes(), options.flushIntervalMs ?? DEFAULT_OUTCOME_FLUSH_MS);
|
|
141
|
+
timer.unref?.();
|
|
142
|
+
void flushOutcomes();
|
|
86
143
|
return {
|
|
87
144
|
decide,
|
|
88
|
-
reportOutcome
|
|
145
|
+
reportOutcome,
|
|
146
|
+
flushOutcomes,
|
|
147
|
+
pendingOutcomeCount: () => outcomeQueue.length,
|
|
148
|
+
dispose: async () => {
|
|
149
|
+
clearInterval(timer);
|
|
150
|
+
await flushOutcomes();
|
|
151
|
+
disposed = true;
|
|
152
|
+
persistOutcomes();
|
|
153
|
+
}
|
|
89
154
|
};
|
|
90
155
|
}
|
|
156
|
+
function readOutcomeQueue(storage, key, maxQueue) {
|
|
157
|
+
if (!storage) return [];
|
|
158
|
+
try {
|
|
159
|
+
const raw = storage.getString(key);
|
|
160
|
+
if (!raw) return [];
|
|
161
|
+
const parsed = JSON.parse(raw);
|
|
162
|
+
if (!Array.isArray(parsed)) return [];
|
|
163
|
+
return parsed.filter(item => Boolean(item && typeof item === 'object' && typeof item.decisionId === 'string' && typeof item.outcome === 'string' && typeof item.revision === 'string' && typeof item.attempts === 'number')).slice(-maxQueue);
|
|
164
|
+
} catch {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
91
168
|
function parseDecision(raw) {
|
|
92
169
|
if (!raw || typeof raw !== 'object') throw new Error('Malformed Pulse decision');
|
|
93
170
|
const value = raw;
|