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
|
@@ -8,6 +8,7 @@ var _react = require("react");
|
|
|
8
8
|
var PulseUpdates = _interopRequireWildcard(require("./PulseUpdates"));
|
|
9
9
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
10
|
function usePulseUpdates() {
|
|
11
|
+
const [nativeState, setNativeState] = (0, _react.useState)(PulseUpdates.getUpdatesState);
|
|
11
12
|
const [isChecking, setIsChecking] = (0, _react.useState)(false);
|
|
12
13
|
const [isDownloading, setIsDownloading] = (0, _react.useState)(false);
|
|
13
14
|
const [availableUpdate, setAvailableUpdate] = (0, _react.useState)(null);
|
|
@@ -16,10 +17,14 @@ function usePulseUpdates() {
|
|
|
16
17
|
|
|
17
18
|
// Refresh state on mount to get latest values after configure
|
|
18
19
|
(0, _react.useEffect)(() => {
|
|
19
|
-
PulseUpdates.
|
|
20
|
+
const unsubscribe = PulseUpdates.onUpdatesStateChange(() => {
|
|
21
|
+
setNativeState(PulseUpdates.getUpdatesState());
|
|
22
|
+
});
|
|
23
|
+
void PulseUpdates.refreshStateAsync();
|
|
24
|
+
return unsubscribe;
|
|
20
25
|
}, []);
|
|
21
26
|
(0, _react.useEffect)(() => {
|
|
22
|
-
if (!
|
|
27
|
+
if (!nativeState.isEnabled) return;
|
|
23
28
|
const subscription = PulseUpdates.addUpdateListener(event => {
|
|
24
29
|
switch (event.type) {
|
|
25
30
|
case 'updateAvailable':
|
|
@@ -37,9 +42,9 @@ function usePulseUpdates() {
|
|
|
37
42
|
}
|
|
38
43
|
});
|
|
39
44
|
return () => subscription.remove();
|
|
40
|
-
}, []);
|
|
45
|
+
}, [nativeState.isEnabled]);
|
|
41
46
|
const checkForUpdate = (0, _react.useCallback)(async () => {
|
|
42
|
-
if (!
|
|
47
|
+
if (!nativeState.isEnabled) {
|
|
43
48
|
return {
|
|
44
49
|
isAvailable: false
|
|
45
50
|
};
|
|
@@ -64,9 +69,9 @@ function usePulseUpdates() {
|
|
|
64
69
|
} finally {
|
|
65
70
|
setIsChecking(false);
|
|
66
71
|
}
|
|
67
|
-
}, []);
|
|
72
|
+
}, [nativeState.isEnabled]);
|
|
68
73
|
const downloadUpdate = (0, _react.useCallback)(async () => {
|
|
69
|
-
if (!
|
|
74
|
+
if (!nativeState.isEnabled) {
|
|
70
75
|
return {
|
|
71
76
|
isNew: false
|
|
72
77
|
};
|
|
@@ -88,21 +93,21 @@ function usePulseUpdates() {
|
|
|
88
93
|
} finally {
|
|
89
94
|
setIsDownloading(false);
|
|
90
95
|
}
|
|
91
|
-
}, []);
|
|
96
|
+
}, [nativeState.isEnabled]);
|
|
92
97
|
const reload = (0, _react.useCallback)(async () => {
|
|
93
|
-
if (!
|
|
98
|
+
if (!nativeState.isEnabled) return;
|
|
94
99
|
await PulseUpdates.reloadAsync();
|
|
95
|
-
}, []);
|
|
100
|
+
}, [nativeState.isEnabled]);
|
|
96
101
|
return {
|
|
97
|
-
isEnabled:
|
|
102
|
+
isEnabled: nativeState.isEnabled,
|
|
98
103
|
isChecking,
|
|
99
104
|
isDownloading,
|
|
100
|
-
updateId:
|
|
101
|
-
runtimeVersion:
|
|
102
|
-
channel:
|
|
103
|
-
manifest:
|
|
104
|
-
isEmbeddedLaunch:
|
|
105
|
-
createdAt:
|
|
105
|
+
updateId: nativeState.updateId,
|
|
106
|
+
runtimeVersion: nativeState.runtimeVersion,
|
|
107
|
+
channel: nativeState.channel,
|
|
108
|
+
manifest: nativeState.manifest,
|
|
109
|
+
isEmbeddedLaunch: nativeState.isEmbeddedLaunch,
|
|
110
|
+
createdAt: nativeState.createdAt,
|
|
106
111
|
build: PulseUpdates.getUpdateBuild(),
|
|
107
112
|
availableUpdate,
|
|
108
113
|
downloadedUpdate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","PulseUpdates","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","usePulseUpdates","
|
|
1
|
+
{"version":3,"names":["_react","require","PulseUpdates","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","usePulseUpdates","nativeState","setNativeState","useState","getUpdatesState","isChecking","setIsChecking","isDownloading","setIsDownloading","availableUpdate","setAvailableUpdate","downloadedUpdate","setDownloadedUpdate","error","setError","useEffect","unsubscribe","onUpdatesStateChange","refreshStateAsync","isEnabled","subscription","addUpdateListener","event","type","manifest","Error","remove","checkForUpdate","useCallback","isAvailable","result","checkForUpdateAsync","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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../src","sources":["NativePulseUpdates.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../src","sources":["NativePulseUpdates.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAmDlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,cAAc,CAAC","ignoreList":[]}
|
|
@@ -14,6 +14,29 @@ let _isEmbeddedLaunch = true;
|
|
|
14
14
|
let _manifest = null;
|
|
15
15
|
let _createdAt = null;
|
|
16
16
|
let _localAssets = null;
|
|
17
|
+
const stateListeners = new Set();
|
|
18
|
+
/** A stable read surface for React and for diagnostics. */
|
|
19
|
+
export function getUpdatesState() {
|
|
20
|
+
return {
|
|
21
|
+
isEnabled: _isEnabled,
|
|
22
|
+
updateId: _updateId,
|
|
23
|
+
runtimeVersion: _runtimeVersion,
|
|
24
|
+
channel: _channel,
|
|
25
|
+
isEmbeddedLaunch: _isEmbeddedLaunch,
|
|
26
|
+
manifest: _manifest,
|
|
27
|
+
createdAt: _createdAt,
|
|
28
|
+
localAssets: _localAssets
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Subscribe to native-state refreshes without depending on mutable ES exports. */
|
|
33
|
+
export function onUpdatesStateChange(listener) {
|
|
34
|
+
stateListeners.add(listener);
|
|
35
|
+
return () => stateListeners.delete(listener);
|
|
36
|
+
}
|
|
37
|
+
function notifyStateListeners() {
|
|
38
|
+
for (const listener of stateListeners) listener();
|
|
39
|
+
}
|
|
17
40
|
|
|
18
41
|
/**
|
|
19
42
|
* Configure pulse-updates with the given options.
|
|
@@ -37,6 +60,9 @@ export function configure(config) {
|
|
|
37
60
|
_isConfigured = true;
|
|
38
61
|
_isEnabled = config.enabled;
|
|
39
62
|
_runtimeVersion = config.runtimeVersion;
|
|
63
|
+
isEnabled = _isEnabled;
|
|
64
|
+
runtimeVersion = _runtimeVersion;
|
|
65
|
+
notifyStateListeners();
|
|
40
66
|
}
|
|
41
67
|
|
|
42
68
|
/**
|
|
@@ -116,6 +142,7 @@ export async function refreshStateAsync() {
|
|
|
116
142
|
// Read localAssets map for asset resolution
|
|
117
143
|
_localAssets = state.localAssets ?? null;
|
|
118
144
|
localAssets = _localAssets;
|
|
145
|
+
notifyStateListeners();
|
|
119
146
|
} catch (error) {
|
|
120
147
|
console.warn('[PulseUpdates] Failed to refresh state:', error);
|
|
121
148
|
// Keep current values on error
|
|
@@ -215,6 +242,12 @@ export async function reportLaunchFailure(reason) {
|
|
|
215
242
|
await PulseUpdatesModule.reportLaunchFailure(reason);
|
|
216
243
|
}
|
|
217
244
|
|
|
245
|
+
/** Verify config/decision payloads with the public key already pinned in native config. */
|
|
246
|
+
export async function verifyConfigSignatureAsync(canonicalPayload, signature) {
|
|
247
|
+
if (!PulseUpdatesModule?.verifySignatureAsync) return false;
|
|
248
|
+
return PulseUpdatesModule.verifySignatureAsync(canonicalPayload, signature.alg, signature.keyId, signature.sig);
|
|
249
|
+
}
|
|
250
|
+
|
|
218
251
|
/**
|
|
219
252
|
* Get the build number from the current update's metadata.
|
|
220
253
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativePulseUpdates","PulseUpdatesModule","_isConfigured","_isEnabled","_updateId","_runtimeVersion","_channel","_isEmbeddedLaunch","_manifest","_createdAt","_localAssets","
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativePulseUpdates","PulseUpdatesModule","_isConfigured","_isEnabled","_updateId","_runtimeVersion","_channel","_isEmbeddedLaunch","_manifest","_createdAt","_localAssets","stateListeners","Set","getUpdatesState","isEnabled","updateId","runtimeVersion","channel","isEmbeddedLaunch","manifest","createdAt","localAssets","onUpdatesStateChange","listener","add","delete","notifyStateListeners","configure","config","console","warn","enabled","updateUrl","checkOnLaunch","launchWaitMs","signingKeyId","signingPublicKey","isConfigured","getIsEnabled","isUsingEmbeddedAssets","refreshStateAsync","__DEV__","state","getStateAsync","manifestString","JSON","parse","commitTime","Date","error","checkForUpdateAsync","isAvailable","reason","Error","result","isRollback","failedReason","fetchUpdateAsync","isNew","reloadAsync","log","markAppReady","reportLaunchFailure","verifyConfigSignatureAsync","canonicalPayload","signature","verifySignatureAsync","alg","keyId","sig","getUpdateBuild","metadata","build","getDisplayVersion","appVersion","getLocalAssetPath","assetKey","getLocalAssets","eventEmitter","getEventEmitter","addUpdateListener","emitter","subscription","addListener","remove"],"sourceRoot":"../../src","sources":["PulseUpdates.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/config.js
CHANGED
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
* config costs a 304 with no body.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
import nacl from 'tweetnacl';
|
|
24
|
+
|
|
23
25
|
/**
|
|
24
26
|
* An A/B arm this install was assigned, as the server resolved it.
|
|
25
27
|
*
|
|
@@ -66,11 +68,14 @@ let fetchedAt = 0;
|
|
|
66
68
|
*/
|
|
67
69
|
let verifiedAt = 0;
|
|
68
70
|
let source = 'defaults';
|
|
71
|
+
let signatureStatus = 'not-configured';
|
|
72
|
+
let signatureKeyId = null;
|
|
69
73
|
let pending = null;
|
|
70
74
|
/** The arm set already reported this session, so a poll does not re-report it. */
|
|
71
75
|
let reportedExposure = null;
|
|
72
76
|
let inFlight = null;
|
|
73
77
|
let pollTimer = null;
|
|
78
|
+
let configGeneration = 0;
|
|
74
79
|
const listeners = new Set();
|
|
75
80
|
|
|
76
81
|
/**
|
|
@@ -79,18 +84,27 @@ const listeners = new Set();
|
|
|
79
84
|
* while the network call is in flight.
|
|
80
85
|
*/
|
|
81
86
|
export function configureConfig(opts) {
|
|
87
|
+
// A host can switch app/tenant without restarting the JS runtime. Nothing from the
|
|
88
|
+
// previous app — values, ETag, pending activation or an eventual network response —
|
|
89
|
+
// may cross that boundary.
|
|
90
|
+
configGeneration += 1;
|
|
91
|
+
stopPolling();
|
|
82
92
|
options = opts;
|
|
83
93
|
defaults = {
|
|
84
94
|
...(opts.defaults ?? {})
|
|
85
95
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
values = {};
|
|
97
|
+
experiments = [];
|
|
98
|
+
etag = null;
|
|
99
|
+
fetchedAt = 0;
|
|
100
|
+
verifiedAt = 0;
|
|
101
|
+
source = 'defaults';
|
|
102
|
+
signatureStatus = 'not-configured';
|
|
103
|
+
signatureKeyId = null;
|
|
104
|
+
pending = null;
|
|
105
|
+
reportedExposure = null;
|
|
106
|
+
inFlight = null;
|
|
107
|
+
applyCachedPayload(readCache(opts.storage, opts.storageKey), opts);
|
|
94
108
|
}
|
|
95
109
|
|
|
96
110
|
/** Merge more defaults after configure (a late-loading module registering its own). */
|
|
@@ -116,7 +130,8 @@ export async function fetchConfig() {
|
|
|
116
130
|
if (minInterval > 0 && fetchedAt > 0 && Date.now() - fetchedAt < minInterval) {
|
|
117
131
|
return false;
|
|
118
132
|
}
|
|
119
|
-
|
|
133
|
+
const requestGeneration = configGeneration;
|
|
134
|
+
const request = (async () => {
|
|
120
135
|
const opts = options;
|
|
121
136
|
const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
|
|
122
137
|
const timer = controller ? setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS) : null;
|
|
@@ -126,6 +141,7 @@ export async function fetchConfig() {
|
|
|
126
141
|
headers: buildHeaders(opts, etag),
|
|
127
142
|
signal: controller?.signal
|
|
128
143
|
});
|
|
144
|
+
if (requestGeneration !== configGeneration || options !== opts) return false;
|
|
129
145
|
|
|
130
146
|
// Nothing changed — which is a positive answer about freshness, not a
|
|
131
147
|
// non-event: the values we hold are the ones the server would send.
|
|
@@ -135,7 +151,10 @@ export async function fetchConfig() {
|
|
|
135
151
|
}
|
|
136
152
|
if (!response.ok) throw new Error(`Pulse config HTTP ${response.status}`);
|
|
137
153
|
const payload = await response.json();
|
|
138
|
-
|
|
154
|
+
await verifyConfigPayload(payload, opts, requestGeneration);
|
|
155
|
+
if (requestGeneration !== configGeneration || options !== opts) return false;
|
|
156
|
+
const payloadObject = payload;
|
|
157
|
+
const nextValues = payloadObject.values;
|
|
139
158
|
// A payload without a values object is a broken response, not "no keys": adopting
|
|
140
159
|
// it would blank every flag at once.
|
|
141
160
|
if (!nextValues || typeof nextValues !== 'object' || Array.isArray(nextValues)) {
|
|
@@ -146,7 +165,7 @@ export async function fetchConfig() {
|
|
|
146
165
|
verifiedAt = fetchedAt;
|
|
147
166
|
const snapshot = {
|
|
148
167
|
values: nextValues,
|
|
149
|
-
experiments: parseExperiments(
|
|
168
|
+
experiments: parseExperiments(payloadObject.experiments)
|
|
150
169
|
};
|
|
151
170
|
if (opts.activateOnFetch === false) {
|
|
152
171
|
pending = snapshot;
|
|
@@ -160,10 +179,11 @@ export async function fetchConfig() {
|
|
|
160
179
|
return false;
|
|
161
180
|
} finally {
|
|
162
181
|
if (timer) clearTimeout(timer);
|
|
163
|
-
inFlight = null;
|
|
182
|
+
if (requestGeneration === configGeneration) inFlight = null;
|
|
164
183
|
}
|
|
165
184
|
})();
|
|
166
|
-
|
|
185
|
+
inFlight = request;
|
|
186
|
+
return request;
|
|
167
187
|
}
|
|
168
188
|
|
|
169
189
|
/**
|
|
@@ -213,8 +233,10 @@ function applySnapshot(next, opts) {
|
|
|
213
233
|
values,
|
|
214
234
|
experiments,
|
|
215
235
|
etag,
|
|
216
|
-
fetchedAt
|
|
217
|
-
|
|
236
|
+
fetchedAt,
|
|
237
|
+
signatureVerified: signatureStatus === 'verified',
|
|
238
|
+
signatureKeyId
|
|
239
|
+
}, opts.storageKey);
|
|
218
240
|
|
|
219
241
|
// Reported on apply, never on fetch: with activateOnFetch false a payload can sit
|
|
220
242
|
// unapplied for the rest of a session, and an arm the app is not actually serving
|
|
@@ -268,8 +290,113 @@ async function reportExposure(opts) {
|
|
|
268
290
|
});
|
|
269
291
|
} catch {
|
|
270
292
|
// A device that cannot report its arm still has the right arm.
|
|
271
|
-
reportedExposure = signature;
|
|
293
|
+
if (options === opts) reportedExposure = signature;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Verifies the exact unsigned JSON object the server signs. A configured verifier
|
|
299
|
+
* also rejects a bad optional signature: accepting a payload that claims to be
|
|
300
|
+
* signed but is not valid would make signature stripping safer than tampering.
|
|
301
|
+
*/
|
|
302
|
+
async function verifyConfigPayload(payload, opts, requestGeneration) {
|
|
303
|
+
const setSignatureState = (status, keyId = null) => {
|
|
304
|
+
if (requestGeneration !== configGeneration || options !== opts) return;
|
|
305
|
+
signatureStatus = status;
|
|
306
|
+
signatureKeyId = keyId;
|
|
307
|
+
};
|
|
308
|
+
const verificationConfigured = Boolean(opts.requireSignature || opts.signingPublicKey || opts.signingKeyId || opts.verifySignature);
|
|
309
|
+
if (!verificationConfigured) {
|
|
310
|
+
setSignatureState('not-configured');
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
314
|
+
setSignatureState('invalid');
|
|
315
|
+
throw new Error('Pulse config: malformed signed payload');
|
|
316
|
+
}
|
|
317
|
+
const record = payload;
|
|
318
|
+
const rawSignature = record.signature;
|
|
319
|
+
if (!isConfigSignature(rawSignature)) {
|
|
320
|
+
setSignatureState('unsigned');
|
|
321
|
+
if (opts.requireSignature) throw new Error('Pulse config: signature required but missing');
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
setSignatureState('not-configured', rawSignature.keyId);
|
|
325
|
+
if (rawSignature.alg.toLowerCase() !== 'ed25519' || opts.signingKeyId && rawSignature.keyId !== opts.signingKeyId) {
|
|
326
|
+
setSignatureState('invalid', rawSignature.keyId);
|
|
327
|
+
throw new Error('Pulse config: signature algorithm or key id is not trusted');
|
|
328
|
+
}
|
|
329
|
+
const unsigned = {
|
|
330
|
+
...record
|
|
331
|
+
};
|
|
332
|
+
delete unsigned.signature;
|
|
333
|
+
const locallyCanonical = canonicalizeConfigJson(unsigned);
|
|
334
|
+
let canonical = locallyCanonical;
|
|
335
|
+
if (rawSignature.canonical) {
|
|
336
|
+
try {
|
|
337
|
+
// Compare semantic JSON after parsing, then verify the server's exact bytes.
|
|
338
|
+
// This preserves tamper detection while avoiding 1.0/1 formatting drift
|
|
339
|
+
// between System.Text.Json and JavaScript.
|
|
340
|
+
if (canonicalizeConfigJson(JSON.parse(rawSignature.canonical)) !== locallyCanonical) {
|
|
341
|
+
throw new Error('canonical payload mismatch');
|
|
342
|
+
}
|
|
343
|
+
canonical = rawSignature.canonical;
|
|
344
|
+
} catch {
|
|
345
|
+
setSignatureState('invalid', rawSignature.keyId);
|
|
346
|
+
throw new Error('Pulse config: signed canonical payload does not match response');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
let valid = false;
|
|
350
|
+
if (opts.verifySignature) {
|
|
351
|
+
valid = await opts.verifySignature(canonical, rawSignature);
|
|
352
|
+
} else if (opts.signingPublicKey) {
|
|
353
|
+
try {
|
|
354
|
+
valid = nacl.sign.detached.verify(utf8Bytes(canonical), decodeBase64(rawSignature.sig), decodeBase64(opts.signingPublicKey));
|
|
355
|
+
} catch {
|
|
356
|
+
valid = false;
|
|
357
|
+
}
|
|
358
|
+
} else if (opts.requireSignature) {
|
|
359
|
+
setSignatureState('invalid', rawSignature.keyId);
|
|
360
|
+
throw new Error('Pulse config: signature required but no verifier or public key is configured');
|
|
361
|
+
} else {
|
|
362
|
+
setSignatureState('not-configured', rawSignature.keyId);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (!valid) {
|
|
366
|
+
setSignatureState('invalid', rawSignature.keyId);
|
|
367
|
+
throw new Error('Pulse config: signature verification failed');
|
|
368
|
+
}
|
|
369
|
+
setSignatureState('verified', rawSignature.keyId);
|
|
370
|
+
}
|
|
371
|
+
function isConfigSignature(value) {
|
|
372
|
+
if (!value || typeof value !== 'object') return false;
|
|
373
|
+
const signature = value;
|
|
374
|
+
return typeof signature.alg === 'string' && typeof signature.keyId === 'string' && typeof signature.sig === 'string' && (signature.canonical === undefined || typeof signature.canonical === 'string');
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/** Same recursive ordinal-key JSON form used by PulseServer's ManifestSigner. */
|
|
378
|
+
export function canonicalizeConfigJson(value) {
|
|
379
|
+
if (value === null || typeof value !== 'object') return JSON.stringify(value);
|
|
380
|
+
if (Array.isArray(value)) return `[${value.map(canonicalizeConfigJson).join(',')}]`;
|
|
381
|
+
return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${canonicalizeConfigJson(value[key])}`).join(',')}}`;
|
|
382
|
+
}
|
|
383
|
+
function decodeBase64(value) {
|
|
384
|
+
const atobLike = globalThis.atob;
|
|
385
|
+
if (atobLike) {
|
|
386
|
+
const decoded = atobLike(value);
|
|
387
|
+
return Uint8Array.from(decoded, char => char.charCodeAt(0));
|
|
272
388
|
}
|
|
389
|
+
// Node/older React Native hosts commonly expose Buffer even when atob is absent.
|
|
390
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
391
|
+
const BufferCtor = require('buffer').Buffer;
|
|
392
|
+
return Uint8Array.from(BufferCtor.from(value, 'base64'));
|
|
393
|
+
}
|
|
394
|
+
function utf8Bytes(value) {
|
|
395
|
+
const Encoder = globalThis.TextEncoder;
|
|
396
|
+
if (Encoder) return new Encoder().encode(value);
|
|
397
|
+
// encodeURIComponent is available in every RN JS runtime supported by this package.
|
|
398
|
+
const encoded = unescape(encodeURIComponent(value));
|
|
399
|
+
return Uint8Array.from(encoded, char => char.charCodeAt(0));
|
|
273
400
|
}
|
|
274
401
|
|
|
275
402
|
/**
|
|
@@ -406,17 +533,22 @@ export function getConfigInfo() {
|
|
|
406
533
|
fetchedAt,
|
|
407
534
|
verifiedAt,
|
|
408
535
|
etag,
|
|
409
|
-
keyCount: Object.keys(getAllConfig()).length
|
|
536
|
+
keyCount: Object.keys(getAllConfig()).length,
|
|
537
|
+
signatureStatus,
|
|
538
|
+
signatureKeyId
|
|
410
539
|
};
|
|
411
540
|
}
|
|
412
541
|
|
|
413
542
|
/** Test seam: drops every piece of module state. */
|
|
414
543
|
export function resetConfigForTests() {
|
|
544
|
+
configGeneration += 1;
|
|
415
545
|
options = null;
|
|
416
546
|
defaults = {};
|
|
417
547
|
verifiedAt = 0;
|
|
418
548
|
values = {};
|
|
419
549
|
experiments = [];
|
|
550
|
+
signatureStatus = 'not-configured';
|
|
551
|
+
signatureKeyId = null;
|
|
420
552
|
etag = null;
|
|
421
553
|
fetchedAt = 0;
|
|
422
554
|
source = 'defaults';
|
|
@@ -449,10 +581,18 @@ function buildHeaders(opts, currentEtag) {
|
|
|
449
581
|
if (currentEtag) headers['If-None-Match'] = currentEtag;
|
|
450
582
|
return headers;
|
|
451
583
|
}
|
|
452
|
-
function readCache(storage) {
|
|
584
|
+
function readCache(storage, key) {
|
|
453
585
|
if (!storage) return null;
|
|
454
586
|
try {
|
|
455
|
-
const raw = storage.getString(STORAGE_KEY);
|
|
587
|
+
const raw = storage.getString(key?.trim() || STORAGE_KEY);
|
|
588
|
+
return parseCachedPayload(raw);
|
|
589
|
+
} catch {
|
|
590
|
+
// A corrupt cache is not worth a crash at boot: fall back to defaults.
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
function parseCachedPayload(raw) {
|
|
595
|
+
try {
|
|
456
596
|
if (!raw) return null;
|
|
457
597
|
const parsed = JSON.parse(raw);
|
|
458
598
|
if (!parsed || typeof parsed !== 'object' || !parsed.values) return null;
|
|
@@ -462,10 +602,23 @@ function readCache(storage) {
|
|
|
462
602
|
return null;
|
|
463
603
|
}
|
|
464
604
|
}
|
|
465
|
-
function
|
|
605
|
+
function applyCachedPayload(cached, opts) {
|
|
606
|
+
if (!cached || opts.requireSignature && cached.signatureVerified !== true) return;
|
|
607
|
+
values = cached.values;
|
|
608
|
+
experiments = cached.experiments ?? [];
|
|
609
|
+
etag = cached.etag;
|
|
610
|
+
fetchedAt = cached.fetchedAt;
|
|
611
|
+
source = 'cache';
|
|
612
|
+
if (cached.signatureVerified) {
|
|
613
|
+
signatureStatus = 'cached-verified';
|
|
614
|
+
signatureKeyId = cached.signatureKeyId ?? null;
|
|
615
|
+
}
|
|
616
|
+
notify();
|
|
617
|
+
}
|
|
618
|
+
function writeCache(storage, payload, key) {
|
|
466
619
|
if (!storage) return;
|
|
467
620
|
try {
|
|
468
|
-
storage.set(STORAGE_KEY, JSON.stringify(payload));
|
|
621
|
+
void storage.set(key?.trim() || STORAGE_KEY, JSON.stringify(payload));
|
|
469
622
|
} catch {
|
|
470
623
|
// Persistence is an optimisation; failing to write must not fail the fetch.
|
|
471
624
|
}
|
package/lib/module/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["STORAGE_KEY","DEFAULT_POLL_MS","DEFAULT_TIMEOUT_MS","options","defaults","values","experiments","etag","fetchedAt","verifiedAt","source","pending","reportedExposure","inFlight","pollTimer","listeners","Set","configureConfig","opts","cached","readCache","storage","setConfigDefaults","more","fetchConfig","minInterval","minimumFetchIntervalMs","Date","now","controller","AbortController","timer","setTimeout","abort","timeoutMs","response","fetch","url","method","headers","buildHeaders","signal","status","ok","Error","payload","json","nextValues","Array","isArray","get","snapshot","parseExperiments","activateOnFetch","applySnapshot","error","onError","clearTimeout","activateConfig","next","hasPendingConfig","startConfigAutoRefresh","appState","subscription","addEventListener","state","interval","pollIntervalMs","stopPolling","setInterval","unref","remove","changed","shallowEqual","sameExperiments","writeCache","reportExposure","notify","length","signature","map","e","key","variant","join","context","getContext","assignments","entry","replace","body","JSON","stringify","platform","appVersion","raw","filter","a","b","every","i","aKeys","Object","keys","bKeys","k","av","bv","clearInterval","getConfigValue","prototype","hasOwnProperty","call","fallback","undefined","getConfigBoolean","value","toLowerCase","getConfigNumber","parsed","Number","isNaN","getConfigString","String","getAllConfig","getConfigJson","parse","getConfigSource","getConfigExperiments","getConfigVariant","experimentKey","find","getConfigKeys","sort","onConfigChange","listener","add","delete","getConfigInfo","keyCount","resetConfigForTests","clear","currentEtag","ctx","Accept","osVersion","language","deviceId","userId","userAttributes","getString","set","forEach"],"sourceRoot":"../../src","sources":["config.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["nacl","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","e","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","sign","detached","verify","utf8Bytes","decodeBase64","sig","value","undefined","Object","keys","sort","atobLike","globalThis","atob","decoded","Uint8Array","from","char","charCodeAt","BufferCtor","require","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":[]}
|