pulse-updates 1.1.0 → 1.2.0
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 -10
- package/SECURITY.md +42 -0
- package/android/src/main/java/app/pulse/updates/PulseController.kt +6 -2
- package/android/src/main/java/app/pulse/updates/PulseUpdatesModule.kt +25 -0
- package/app.plugin.js +47 -0
- package/ios/PulseUpdates/PulseController.swift +7 -2
- package/ios/PulseUpdates/PulseUpdates.m +7 -0
- package/ios/PulseUpdates/PulseUpdates.swift +22 -0
- package/lib/commonjs/NativePulseUpdates.js.map +1 -1
- package/lib/commonjs/PulseUpdates.js +36 -0
- package/lib/commonjs/PulseUpdates.js.map +1 -1
- package/lib/commonjs/config.js +175 -21
- package/lib/commonjs/config.js.map +1 -1
- package/lib/commonjs/decisions.js +128 -0
- package/lib/commonjs/decisions.js.map +1 -0
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +164 -12
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/track.js +154 -12
- package/lib/commonjs/track.js.map +1 -1
- package/lib/commonjs/usePulseUpdates.js +21 -16
- package/lib/commonjs/usePulseUpdates.js.map +1 -1
- package/lib/module/NativePulseUpdates.js.map +1 -1
- package/lib/module/PulseUpdates.js +33 -0
- package/lib/module/PulseUpdates.js.map +1 -1
- package/lib/module/config.js +174 -21
- package/lib/module/config.js.map +1 -1
- package/lib/module/decisions.js +122 -0
- package/lib/module/decisions.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +165 -14
- package/lib/module/init.js.map +1 -1
- package/lib/module/track.js +152 -12
- package/lib/module/track.js.map +1 -1
- package/lib/module/usePulseUpdates.js +21 -16
- package/lib/module/usePulseUpdates.js.map +1 -1
- package/lib/typescript/NativePulseUpdates.d.ts +1 -0
- package/lib/typescript/NativePulseUpdates.d.ts.map +1 -1
- package/lib/typescript/PulseUpdates.d.ts +20 -0
- package/lib/typescript/PulseUpdates.d.ts.map +1 -1
- package/lib/typescript/config.d.ts +22 -0
- package/lib/typescript/config.d.ts.map +1 -1
- package/lib/typescript/decisions.d.ts +55 -0
- package/lib/typescript/decisions.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/init.d.ts +51 -4
- package/lib/typescript/init.d.ts.map +1 -1
- package/lib/typescript/track.d.ts +29 -1
- package/lib/typescript/track.d.ts.map +1 -1
- package/lib/typescript/usePulseUpdates.d.ts.map +1 -1
- package/logo.png +0 -0
- package/package.json +14 -3
- package/scripts/publish.mjs +68 -3
- package/src/NativePulseUpdates.ts +1 -0
- package/src/PulseUpdates.ts +54 -0
- package/src/config.ts +234 -21
- package/src/decisions.ts +179 -0
- package/src/index.ts +1 -0
- package/src/init.ts +240 -11
- package/src/track.ts +191 -13
- package/src/usePulseUpdates.ts +21 -16
package/lib/module/track.js
CHANGED
|
@@ -23,10 +23,16 @@
|
|
|
23
23
|
const DEFAULT_FLUSH_MS = 10_000;
|
|
24
24
|
const DEFAULT_MAX_BATCH = 100;
|
|
25
25
|
const DEFAULT_MAX_QUEUE = 500;
|
|
26
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
27
|
+
const DEFAULT_MAX_ATTEMPTS = 10;
|
|
28
|
+
const DEFAULT_STORAGE_KEY = 'pulse.events.v1';
|
|
26
29
|
let options = null;
|
|
27
30
|
let queue = [];
|
|
28
31
|
let timer = null;
|
|
29
32
|
let sending = false;
|
|
33
|
+
let nextAttemptAt = 0;
|
|
34
|
+
let lifecycleSubscription = null;
|
|
35
|
+
let trackingGeneration = 0;
|
|
30
36
|
|
|
31
37
|
/** Turns a config url into the track url; leaves an explicit track url alone. */
|
|
32
38
|
function trackUrl(url) {
|
|
@@ -34,8 +40,14 @@ function trackUrl(url) {
|
|
|
34
40
|
return trimmed.includes('/pulse/config/') ? trimmed.replace('/pulse/config/', '/pulse/track/') : trimmed;
|
|
35
41
|
}
|
|
36
42
|
export function configureTracking(opts) {
|
|
43
|
+
disposeTracking();
|
|
37
44
|
options = opts;
|
|
45
|
+
queue = readQueue(opts);
|
|
46
|
+
nextAttemptAt = 0;
|
|
38
47
|
startTimer();
|
|
48
|
+
lifecycleSubscription = opts.appState?.addEventListener('change', state => {
|
|
49
|
+
if (state !== 'active') void flushEvents();
|
|
50
|
+
}) ?? null;
|
|
39
51
|
}
|
|
40
52
|
|
|
41
53
|
/**
|
|
@@ -45,18 +57,32 @@ export function configureTracking(opts) {
|
|
|
45
57
|
*/
|
|
46
58
|
export function track(event, props, time) {
|
|
47
59
|
if (!options || !event) return;
|
|
60
|
+
if (options.hasConsent?.() === false) {
|
|
61
|
+
options.onDropped?.(1, 'no-consent');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
48
64
|
const flat = {};
|
|
65
|
+
const allow = options.propertyAllowlist ? new Set(options.propertyAllowlist) : null;
|
|
66
|
+
const redact = new Set(options.redactProperties ?? []);
|
|
49
67
|
for (const [key, value] of Object.entries(props ?? {})) {
|
|
50
68
|
if (value === null || value === undefined) continue;
|
|
51
|
-
|
|
69
|
+
if (allow && !allow.has(key)) continue;
|
|
70
|
+
flat[key] = redact.has(key) ? '[REDACTED]' : typeof value === 'string' ? value : String(value);
|
|
52
71
|
}
|
|
53
72
|
queue.push({
|
|
73
|
+
id: randomEventId(),
|
|
54
74
|
event,
|
|
55
75
|
time: (time ?? new Date()).toISOString(),
|
|
56
|
-
props: flat
|
|
76
|
+
props: flat,
|
|
77
|
+
attempts: 0
|
|
57
78
|
});
|
|
58
79
|
const maxQueue = options.maxQueue ?? DEFAULT_MAX_QUEUE;
|
|
59
|
-
if (queue.length > maxQueue)
|
|
80
|
+
if (queue.length > maxQueue) {
|
|
81
|
+
const dropped = queue.length - maxQueue;
|
|
82
|
+
queue = queue.slice(dropped);
|
|
83
|
+
options.onDropped?.(dropped, 'queue-full');
|
|
84
|
+
}
|
|
85
|
+
persistQueue();
|
|
60
86
|
if (queue.length >= (options.maxBatch ?? DEFAULT_MAX_BATCH)) void flushEvents();
|
|
61
87
|
}
|
|
62
88
|
|
|
@@ -68,8 +94,9 @@ export function track(event, props, time) {
|
|
|
68
94
|
* after launch, when the first events of a session are the ones a funnel needs most.
|
|
69
95
|
*/
|
|
70
96
|
export async function flushEvents() {
|
|
71
|
-
if (!options || sending || queue.length === 0) return 0;
|
|
97
|
+
if (!options || sending || queue.length === 0 || Date.now() < nextAttemptAt) return 0;
|
|
72
98
|
const opts = options;
|
|
99
|
+
const requestGeneration = trackingGeneration;
|
|
73
100
|
const ctx = opts.getContext?.() ?? {};
|
|
74
101
|
|
|
75
102
|
// Without a device id the server cannot put the event in an arm, and an empty id
|
|
@@ -78,7 +105,10 @@ export async function flushEvents() {
|
|
|
78
105
|
if (!ctx.deviceId) return 0;
|
|
79
106
|
const batch = queue.slice(0, opts.maxBatch ?? DEFAULT_MAX_BATCH);
|
|
80
107
|
queue = queue.slice(batch.length);
|
|
108
|
+
persistQueue();
|
|
81
109
|
sending = true;
|
|
110
|
+
const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
|
|
111
|
+
const timeout = controller ? setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS) : null;
|
|
82
112
|
try {
|
|
83
113
|
const response = await fetch(trackUrl(opts.url), {
|
|
84
114
|
method: 'POST',
|
|
@@ -91,27 +121,37 @@ export async function flushEvents() {
|
|
|
91
121
|
platform: ctx.platform,
|
|
92
122
|
appVersion: ctx.appVersion,
|
|
93
123
|
events: batch.map(e => ({
|
|
124
|
+
id: e.id,
|
|
94
125
|
event: e.event,
|
|
95
126
|
time: e.time,
|
|
96
127
|
props: e.props
|
|
97
128
|
}))
|
|
98
|
-
})
|
|
129
|
+
}),
|
|
130
|
+
signal: controller?.signal
|
|
99
131
|
});
|
|
100
132
|
if (!response.ok) {
|
|
101
133
|
// Rate limited or briefly down: keep the events, try on the next tick.
|
|
102
|
-
|
|
134
|
+
if (requestGeneration === trackingGeneration && options === opts) {
|
|
135
|
+
requeueWithBackoff(batch, response.status);
|
|
136
|
+
} else {
|
|
137
|
+
restoreStaleBatch(opts, batch, response.status);
|
|
138
|
+
}
|
|
103
139
|
if (response.status !== 429) opts.onError?.(new Error(`Pulse track failed: ${response.status}`));
|
|
104
140
|
return 0;
|
|
105
141
|
}
|
|
106
142
|
const body = await response.json();
|
|
143
|
+
if (requestGeneration !== trackingGeneration || options !== opts) return body.accepted ?? 0;
|
|
107
144
|
if (body.ignored && body.ignored.length > 0) opts.onIgnored?.(body.ignored);
|
|
145
|
+
nextAttemptAt = 0;
|
|
146
|
+
persistQueue();
|
|
108
147
|
return body.accepted ?? 0;
|
|
109
148
|
} catch (error) {
|
|
110
|
-
|
|
149
|
+
if (requestGeneration === trackingGeneration && options === opts) requeueWithBackoff(batch);else restoreStaleBatch(opts, batch);
|
|
111
150
|
opts.onError?.(error);
|
|
112
151
|
return 0;
|
|
113
152
|
} finally {
|
|
114
|
-
|
|
153
|
+
if (timeout) clearTimeout(timeout);
|
|
154
|
+
if (requestGeneration === trackingGeneration) sending = false;
|
|
115
155
|
}
|
|
116
156
|
}
|
|
117
157
|
|
|
@@ -119,14 +159,31 @@ export async function flushEvents() {
|
|
|
119
159
|
export function pendingEventCount() {
|
|
120
160
|
return queue.length;
|
|
121
161
|
}
|
|
162
|
+
export function getTrackingInfo() {
|
|
163
|
+
return {
|
|
164
|
+
queueDepth: queue.length,
|
|
165
|
+
sending,
|
|
166
|
+
nextAttemptAt
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Stop timers and listeners while preserving the durable outbox. */
|
|
171
|
+
export function disposeTracking() {
|
|
172
|
+
trackingGeneration += 1;
|
|
173
|
+
if (timer) clearInterval(timer);
|
|
174
|
+
timer = null;
|
|
175
|
+
lifecycleSubscription?.remove();
|
|
176
|
+
lifecycleSubscription = null;
|
|
177
|
+
persistQueue();
|
|
178
|
+
options = null;
|
|
179
|
+
sending = false;
|
|
180
|
+
}
|
|
122
181
|
export function stopTracking() {
|
|
123
|
-
|
|
124
|
-
clearInterval(timer);
|
|
125
|
-
timer = null;
|
|
126
|
-
}
|
|
182
|
+
disposeTracking();
|
|
127
183
|
options = null;
|
|
128
184
|
queue = [];
|
|
129
185
|
sending = false;
|
|
186
|
+
nextAttemptAt = 0;
|
|
130
187
|
}
|
|
131
188
|
function startTimer() {
|
|
132
189
|
if (timer) clearInterval(timer);
|
|
@@ -136,4 +193,87 @@ function startTimer() {
|
|
|
136
193
|
// and a CLI importing this should still be able to exit.
|
|
137
194
|
timer.unref?.();
|
|
138
195
|
}
|
|
196
|
+
function requeueWithBackoff(batch, status) {
|
|
197
|
+
if (!options) return;
|
|
198
|
+
const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
|
|
199
|
+
const retryable = [];
|
|
200
|
+
let dropped = 0;
|
|
201
|
+
for (const event of batch) {
|
|
202
|
+
const next = {
|
|
203
|
+
...event,
|
|
204
|
+
attempts: event.attempts + 1
|
|
205
|
+
};
|
|
206
|
+
if (next.attempts >= maxAttempts && status !== 429) dropped++;else retryable.push(next);
|
|
207
|
+
}
|
|
208
|
+
queue = [...retryable, ...queue];
|
|
209
|
+
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));
|
|
213
|
+
persistQueue();
|
|
214
|
+
}
|
|
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);
|
|
232
|
+
}
|
|
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;
|
|
241
|
+
}
|
|
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.
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function storageKey(opts) {
|
|
252
|
+
return opts.storageKey?.trim() || DEFAULT_STORAGE_KEY;
|
|
253
|
+
}
|
|
254
|
+
function readQueue(opts) {
|
|
255
|
+
if (!opts.storage) return [];
|
|
256
|
+
try {
|
|
257
|
+
const raw = opts.storage.getString(storageKey(opts));
|
|
258
|
+
if (!raw) return [];
|
|
259
|
+
const parsed = JSON.parse(raw);
|
|
260
|
+
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));
|
|
262
|
+
} catch {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function persistQueue() {
|
|
267
|
+
if (!options?.storage) return;
|
|
268
|
+
try {
|
|
269
|
+
options.storage.set(storageKey(options), JSON.stringify(queue));
|
|
270
|
+
} catch {
|
|
271
|
+
// Telemetry persistence must never become an app failure.
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function randomEventId() {
|
|
275
|
+
const cryptoLike = globalThis.crypto;
|
|
276
|
+
if (typeof cryptoLike?.randomUUID === 'function') return cryptoLike.randomUUID();
|
|
277
|
+
return `evt-${Date.now()}-${Math.random().toString(36).slice(2, 14)}`;
|
|
278
|
+
}
|
|
139
279
|
//# sourceMappingURL=track.js.map
|
package/lib/module/track.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_FLUSH_MS","DEFAULT_MAX_BATCH","DEFAULT_MAX_QUEUE","options","queue","timer","sending","trackUrl","url","trimmed","replace","includes","configureTracking","opts","startTimer","track","event","props","time","flat","key","value","Object","entries","undefined","String","push","Date","toISOString","maxQueue","length","slice","maxBatch","flushEvents","ctx","getContext","deviceId","batch","response","fetch","method","headers","body","JSON","stringify","userId","platform","appVersion","events","map","e","ok","status","onError","Error","json","ignored","onIgnored","accepted","error","pendingEventCount","stopTracking","clearInterval","every","flushIntervalMs","setInterval","unref"],"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","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,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState, useCallback } from 'react';
|
|
2
2
|
import * as PulseUpdates from './PulseUpdates';
|
|
3
3
|
export function usePulseUpdates() {
|
|
4
|
+
const [nativeState, setNativeState] = useState(PulseUpdates.getUpdatesState);
|
|
4
5
|
const [isChecking, setIsChecking] = useState(false);
|
|
5
6
|
const [isDownloading, setIsDownloading] = useState(false);
|
|
6
7
|
const [availableUpdate, setAvailableUpdate] = useState(null);
|
|
@@ -9,10 +10,14 @@ export function usePulseUpdates() {
|
|
|
9
10
|
|
|
10
11
|
// Refresh state on mount to get latest values after configure
|
|
11
12
|
useEffect(() => {
|
|
12
|
-
PulseUpdates.
|
|
13
|
+
const unsubscribe = PulseUpdates.onUpdatesStateChange(() => {
|
|
14
|
+
setNativeState(PulseUpdates.getUpdatesState());
|
|
15
|
+
});
|
|
16
|
+
void PulseUpdates.refreshStateAsync();
|
|
17
|
+
return unsubscribe;
|
|
13
18
|
}, []);
|
|
14
19
|
useEffect(() => {
|
|
15
|
-
if (!
|
|
20
|
+
if (!nativeState.isEnabled) return;
|
|
16
21
|
const subscription = PulseUpdates.addUpdateListener(event => {
|
|
17
22
|
switch (event.type) {
|
|
18
23
|
case 'updateAvailable':
|
|
@@ -30,9 +35,9 @@ export function usePulseUpdates() {
|
|
|
30
35
|
}
|
|
31
36
|
});
|
|
32
37
|
return () => subscription.remove();
|
|
33
|
-
}, []);
|
|
38
|
+
}, [nativeState.isEnabled]);
|
|
34
39
|
const checkForUpdate = useCallback(async () => {
|
|
35
|
-
if (!
|
|
40
|
+
if (!nativeState.isEnabled) {
|
|
36
41
|
return {
|
|
37
42
|
isAvailable: false
|
|
38
43
|
};
|
|
@@ -57,9 +62,9 @@ export function usePulseUpdates() {
|
|
|
57
62
|
} finally {
|
|
58
63
|
setIsChecking(false);
|
|
59
64
|
}
|
|
60
|
-
}, []);
|
|
65
|
+
}, [nativeState.isEnabled]);
|
|
61
66
|
const downloadUpdate = useCallback(async () => {
|
|
62
|
-
if (!
|
|
67
|
+
if (!nativeState.isEnabled) {
|
|
63
68
|
return {
|
|
64
69
|
isNew: false
|
|
65
70
|
};
|
|
@@ -81,21 +86,21 @@ export function usePulseUpdates() {
|
|
|
81
86
|
} finally {
|
|
82
87
|
setIsDownloading(false);
|
|
83
88
|
}
|
|
84
|
-
}, []);
|
|
89
|
+
}, [nativeState.isEnabled]);
|
|
85
90
|
const reload = useCallback(async () => {
|
|
86
|
-
if (!
|
|
91
|
+
if (!nativeState.isEnabled) return;
|
|
87
92
|
await PulseUpdates.reloadAsync();
|
|
88
|
-
}, []);
|
|
93
|
+
}, [nativeState.isEnabled]);
|
|
89
94
|
return {
|
|
90
|
-
isEnabled:
|
|
95
|
+
isEnabled: nativeState.isEnabled,
|
|
91
96
|
isChecking,
|
|
92
97
|
isDownloading,
|
|
93
|
-
updateId:
|
|
94
|
-
runtimeVersion:
|
|
95
|
-
channel:
|
|
96
|
-
manifest:
|
|
97
|
-
isEmbeddedLaunch:
|
|
98
|
-
createdAt:
|
|
98
|
+
updateId: nativeState.updateId,
|
|
99
|
+
runtimeVersion: nativeState.runtimeVersion,
|
|
100
|
+
channel: nativeState.channel,
|
|
101
|
+
manifest: nativeState.manifest,
|
|
102
|
+
isEmbeddedLaunch: nativeState.isEmbeddedLaunch,
|
|
103
|
+
createdAt: nativeState.createdAt,
|
|
99
104
|
build: PulseUpdates.getUpdateBuild(),
|
|
100
105
|
availableUpdate,
|
|
101
106
|
downloadedUpdate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","useCallback","PulseUpdates","usePulseUpdates","isChecking","setIsChecking","isDownloading","setIsDownloading","availableUpdate","setAvailableUpdate","downloadedUpdate","setDownloadedUpdate","error","setError","
|
|
1
|
+
{"version":3,"names":["useEffect","useState","useCallback","PulseUpdates","usePulseUpdates","nativeState","setNativeState","getUpdatesState","isChecking","setIsChecking","isDownloading","setIsDownloading","availableUpdate","setAvailableUpdate","downloadedUpdate","setDownloadedUpdate","error","setError","unsubscribe","onUpdatesStateChange","refreshStateAsync","isEnabled","subscription","addUpdateListener","event","type","manifest","Error","remove","checkForUpdate","isAvailable","result","checkForUpdateAsync","e","err","String","failedReason","message","downloadUpdate","isNew","fetchUpdateAsync","reload","reloadAsync","updateId","runtimeVersion","channel","isEmbeddedLaunch","createdAt","build","getUpdateBuild"],"sourceRoot":"../../src","sources":["usePulseUpdates.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -26,6 +26,7 @@ export interface Spec extends TurboModule {
|
|
|
26
26
|
reloadAsync(): Promise<void>;
|
|
27
27
|
markAppReady(): Promise<void>;
|
|
28
28
|
reportLaunchFailure(reason: string): Promise<void>;
|
|
29
|
+
verifySignatureAsync(canonicalPayload: string, alg: string, keyId: string, signature: string): Promise<boolean>;
|
|
29
30
|
addListener(eventName: string): void;
|
|
30
31
|
removeListeners(count: number): void;
|
|
31
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativePulseUpdates.d.ts","sourceRoot":"","sources":["../../src/NativePulseUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,SAAS,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,IAAI,CAAC;IAGR,aAAa,IAAI,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;KACzC,CAAC,CAAC;IAGH,mBAAmB,IAAI,OAAO,CAAC;QAC7B,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IAEH,gBAAgB,IAAI,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IAEH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"NativePulseUpdates.d.ts","sourceRoot":"","sources":["../../src/NativePulseUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,SAAS,CACP,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,IAAI,CAAC;IAGR,aAAa,IAAI,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;KACzC,CAAC,CAAC;IAGH,mBAAmB,IAAI,OAAO,CAAC;QAC7B,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IAEH,gBAAgB,IAAI,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IAEH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGhH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAA6D"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { PulseManifest, PulseUpdatesConfig, UpdateCheckResult, UpdateFetchResult } from './types';
|
|
2
|
+
export interface PulseNativeState {
|
|
3
|
+
isEnabled: boolean;
|
|
4
|
+
updateId: string | null;
|
|
5
|
+
runtimeVersion: string | null;
|
|
6
|
+
channel: string | null;
|
|
7
|
+
isEmbeddedLaunch: boolean;
|
|
8
|
+
manifest: PulseManifest | null;
|
|
9
|
+
createdAt: Date | null;
|
|
10
|
+
localAssets: Record<string, string> | null;
|
|
11
|
+
}
|
|
12
|
+
/** A stable read surface for React and for diagnostics. */
|
|
13
|
+
export declare function getUpdatesState(): PulseNativeState;
|
|
14
|
+
/** Subscribe to native-state refreshes without depending on mutable ES exports. */
|
|
15
|
+
export declare function onUpdatesStateChange(listener: () => void): () => void;
|
|
2
16
|
/**
|
|
3
17
|
* Configure pulse-updates with the given options.
|
|
4
18
|
*
|
|
@@ -59,6 +73,12 @@ export declare function markAppReady(): Promise<void>;
|
|
|
59
73
|
* Report a launch failure to trigger rollback on next start.
|
|
60
74
|
*/
|
|
61
75
|
export declare function reportLaunchFailure(reason: string): Promise<void>;
|
|
76
|
+
/** Verify config/decision payloads with the public key already pinned in native config. */
|
|
77
|
+
export declare function verifyConfigSignatureAsync(canonicalPayload: string, signature: {
|
|
78
|
+
alg: string;
|
|
79
|
+
keyId: string;
|
|
80
|
+
sig: string;
|
|
81
|
+
}): Promise<boolean>;
|
|
62
82
|
/**
|
|
63
83
|
* Get the build number from the current update's metadata.
|
|
64
84
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PulseUpdates.d.ts","sourceRoot":"","sources":["../../src/PulseUpdates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"PulseUpdates.d.ts","sourceRoot":"","sources":["../../src/PulseUpdates.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,14 @@ export interface ConfigExperiment {
|
|
|
32
32
|
key: string;
|
|
33
33
|
variant: string;
|
|
34
34
|
}
|
|
35
|
+
export interface ConfigSignature {
|
|
36
|
+
alg: string;
|
|
37
|
+
keyId: string;
|
|
38
|
+
sig: string;
|
|
39
|
+
/** Exact canonical response bytes covered by the signature, when supplied by PulseServer. */
|
|
40
|
+
canonical?: string;
|
|
41
|
+
}
|
|
42
|
+
export type ConfigSignatureStatus = 'not-configured' | 'verified' | 'cached-verified' | 'unsigned' | 'invalid';
|
|
35
43
|
export interface ConfigStorage {
|
|
36
44
|
getString(key: string): string | null | undefined;
|
|
37
45
|
set(key: string, value: string): void;
|
|
@@ -66,6 +74,8 @@ export interface ConfigOptions {
|
|
|
66
74
|
defaults?: Record<string, ConfigValue>;
|
|
67
75
|
/** Persistence for the last good payload. Without it the cache is memory-only. */
|
|
68
76
|
storage?: ConfigStorage;
|
|
77
|
+
/** App-scoped key for multi-app/white-label hosts. */
|
|
78
|
+
storageKey?: string;
|
|
69
79
|
/** Read fresh on every request: the country or plan can change between launches. */
|
|
70
80
|
getContext?: () => ConfigContext;
|
|
71
81
|
/** Foreground poll interval. 0 disables polling (launch + resume still fetch). */
|
|
@@ -96,6 +106,14 @@ export interface ConfigOptions {
|
|
|
96
106
|
reportExposure?: boolean;
|
|
97
107
|
/** Network timeout per request. */
|
|
98
108
|
timeoutMs?: number;
|
|
109
|
+
/** Ed25519 public key, as raw 32-byte base64. Enables built-in verification. */
|
|
110
|
+
signingPublicKey?: string;
|
|
111
|
+
/** Optional key-id pin. A response signed by another key is rejected. */
|
|
112
|
+
signingKeyId?: string;
|
|
113
|
+
/** Reject unsigned/unverifiable payloads and keep the last good snapshot. */
|
|
114
|
+
requireSignature?: boolean;
|
|
115
|
+
/** Custom verifier for hosts that keep keys in a secure native module. */
|
|
116
|
+
verifySignature?: (canonicalPayload: string, signature: ConfigSignature) => boolean | Promise<boolean>;
|
|
99
117
|
onError?: (error: unknown) => void;
|
|
100
118
|
}
|
|
101
119
|
/**
|
|
@@ -130,6 +148,8 @@ export declare function startConfigAutoRefresh(appState?: {
|
|
|
130
148
|
remove: () => void;
|
|
131
149
|
};
|
|
132
150
|
}): () => void;
|
|
151
|
+
/** Same recursive ordinal-key JSON form used by PulseServer's ManifestSigner. */
|
|
152
|
+
export declare function canonicalizeConfigJson(value: unknown): string;
|
|
133
153
|
/** The served value, or the registered default. Never a type's zero value. */
|
|
134
154
|
export declare function getConfigValue(key: string): ConfigValue;
|
|
135
155
|
export declare function getConfigBoolean(key: string): boolean;
|
|
@@ -161,6 +181,8 @@ export declare function getConfigInfo(): {
|
|
|
161
181
|
verifiedAt: number;
|
|
162
182
|
etag: string | null;
|
|
163
183
|
keyCount: number;
|
|
184
|
+
signatureStatus: ConfigSignatureStatus;
|
|
185
|
+
signatureKeyId: string | null;
|
|
164
186
|
};
|
|
165
187
|
/** Test seam: drops every piece of module state. */
|
|
166
188
|
export declare function resetConfigForTests(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type DecisionChannel = 'in_app' | 'encore' | 'replio' | 'email' | 'push' | 'sms' | 'whatsapp' | 'webhook';
|
|
2
|
+
export type DecisionOutcome = 'pending' | 'delivered' | 'dismissed' | 'accepted' | 'converted' | 'failed';
|
|
3
|
+
export interface DecisionContext {
|
|
4
|
+
userId?: string;
|
|
5
|
+
deviceId?: string;
|
|
6
|
+
platform?: string;
|
|
7
|
+
appVersion?: string;
|
|
8
|
+
country?: string;
|
|
9
|
+
language?: string;
|
|
10
|
+
osVersion?: string;
|
|
11
|
+
attributes?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export interface DecisionAction {
|
|
14
|
+
kind: string;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface PulseDecision {
|
|
18
|
+
decisionId: string;
|
|
19
|
+
replayed: boolean;
|
|
20
|
+
execute: boolean;
|
|
21
|
+
mode: 'shadow' | 'live' | string;
|
|
22
|
+
verdict: string;
|
|
23
|
+
reasonCode: string;
|
|
24
|
+
policyKey?: string | null;
|
|
25
|
+
policyVersion?: number | null;
|
|
26
|
+
action?: DecisionAction | null;
|
|
27
|
+
}
|
|
28
|
+
export interface DecisionHandlerResult {
|
|
29
|
+
outcome?: DecisionOutcome;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export type DecisionHandler = (action: DecisionAction, decision: PulseDecision) => void | DecisionHandlerResult | Promise<void | DecisionHandlerResult>;
|
|
33
|
+
export interface PulseDecisionClientOptions {
|
|
34
|
+
apiUrl: string;
|
|
35
|
+
appSlug: string;
|
|
36
|
+
getContext: () => DecisionContext | Promise<DecisionContext>;
|
|
37
|
+
fetch?: typeof globalThis.fetch;
|
|
38
|
+
timeoutMs?: number;
|
|
39
|
+
/** Safe default. User-facing execution needs an explicit per-app opt-in. */
|
|
40
|
+
executionMode?: 'shadow-only' | 'allow-live';
|
|
41
|
+
handlers?: Record<string, DecisionHandler>;
|
|
42
|
+
onError?: (error: unknown) => void;
|
|
43
|
+
}
|
|
44
|
+
export interface DecideOptions {
|
|
45
|
+
channel?: DecisionChannel;
|
|
46
|
+
idempotencyKey?: string;
|
|
47
|
+
attributes?: Record<string, string>;
|
|
48
|
+
}
|
|
49
|
+
export interface PulseDecisionClient {
|
|
50
|
+
decide(trigger: string, options?: DecideOptions): Promise<PulseDecision | null>;
|
|
51
|
+
reportOutcome(decisionId: string, outcome: DecisionOutcome, metadata?: Record<string, unknown>): Promise<boolean>;
|
|
52
|
+
}
|
|
53
|
+
/** Generic decision protocol. Product-specific action handlers remain in each app. */
|
|
54
|
+
export declare function createPulseDecisionClient(options: PulseDecisionClientOptions): PulseDecisionClient;
|
|
55
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../src/decisions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
|