react-native-bspatch 4.1.0 → 5.0.1
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 +84 -27
- package/android/build.gradle +25 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/vn/reactnativebspatch/BsPatchModule.kt +86 -6
- package/android/src/main/res/values/bspatch_public_key.xml +5 -0
- package/cpp/bsdiff/bspatch_wrapper.c +34 -0
- package/cpp/bsdiff/bspatch_wrapper.h +2 -0
- package/cpp/bspatch_jni.cpp +18 -0
- package/ios/RNBsPatch.mm +142 -1
- package/lib/commonjs/NativeBsPatch.js.map +1 -1
- package/lib/commonjs/index.js +9 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ota/OtaProvider.js +165 -35
- package/lib/commonjs/ota/OtaProvider.js.map +1 -1
- package/lib/commonjs/ota/eligibility.js +47 -0
- package/lib/commonjs/ota/eligibility.js.map +1 -0
- package/lib/commonjs/ota/entrySignature.js +23 -0
- package/lib/commonjs/ota/entrySignature.js.map +1 -0
- package/lib/commonjs/ota/installId.js +27 -0
- package/lib/commonjs/ota/installId.js.map +1 -0
- package/lib/commonjs/ota/otaCore.js +96 -21
- package/lib/commonjs/ota/otaCore.js.map +1 -1
- package/lib/commonjs/ota/storage/{GitHubRawStorage.js → R2Storage.js} +20 -15
- package/lib/commonjs/ota/storage/R2Storage.js.map +1 -0
- package/lib/commonjs/ota/types.js.map +1 -1
- package/lib/module/NativeBsPatch.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/ota/OtaProvider.js +165 -35
- package/lib/module/ota/OtaProvider.js.map +1 -1
- package/lib/module/ota/eligibility.js +41 -0
- package/lib/module/ota/eligibility.js.map +1 -0
- package/lib/module/ota/entrySignature.js +17 -0
- package/lib/module/ota/entrySignature.js.map +1 -0
- package/lib/module/ota/installId.js +22 -0
- package/lib/module/ota/installId.js.map +1 -0
- package/lib/module/ota/otaCore.js +96 -21
- package/lib/module/ota/otaCore.js.map +1 -1
- package/lib/module/ota/storage/{GitHubRawStorage.js → R2Storage.js} +18 -14
- package/lib/module/ota/storage/R2Storage.js.map +1 -0
- package/lib/module/ota/types.js.map +1 -1
- package/lib/typescript/NativeBsPatch.d.ts +28 -2
- package/lib/typescript/NativeBsPatch.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/ota/OtaProvider.d.ts.map +1 -1
- package/lib/typescript/ota/eligibility.d.ts +25 -0
- package/lib/typescript/ota/eligibility.d.ts.map +1 -0
- package/lib/typescript/ota/entrySignature.d.ts +9 -0
- package/lib/typescript/ota/entrySignature.d.ts.map +1 -0
- package/lib/typescript/ota/installId.d.ts +3 -0
- package/lib/typescript/ota/installId.d.ts.map +1 -0
- package/lib/typescript/ota/otaCore.d.ts.map +1 -1
- package/lib/typescript/ota/storage/{GitHubRawStorage.d.ts → R2Storage.d.ts} +4 -3
- package/lib/typescript/ota/storage/R2Storage.d.ts.map +1 -0
- package/lib/typescript/ota/types.d.ts +58 -5
- package/lib/typescript/ota/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/react-native-bspatch.podspec +3 -1
- package/src/NativeBsPatch.ts +34 -2
- package/src/index.ts +5 -1
- package/src/ota/OtaProvider.tsx +167 -42
- package/src/ota/eligibility.ts +57 -0
- package/src/ota/entrySignature.ts +31 -0
- package/src/ota/installId.ts +18 -0
- package/src/ota/otaCore.ts +102 -21
- package/src/ota/storage/{GitHubRawStorage.ts → R2Storage.ts} +17 -13
- package/src/ota/types.ts +55 -5
- package/tools/build_ota.sh +343 -116
- package/tools/doctor.js +130 -0
- package/tools/ensure_signing_key.js +216 -0
- package/tools/fingerprint.js +111 -0
- package/tools/ios_fingerprint.sh +9 -0
- package/tools/ota_admin.js +131 -0
- package/tools/setup_project.js +41 -15
- package/tools/update_registry.js +111 -11
- package/tools/upload_ota.sh +85 -184
- package/tools/verify_publish.js +81 -0
- package/lib/commonjs/ota/storage/GitHubRawStorage.js.map +0 -1
- package/lib/module/ota/storage/GitHubRawStorage.js.map +0 -1
- package/lib/typescript/ota/storage/GitHubRawStorage.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["entryPayload","p","appVersion","flavor","platform","fromVersion","toVersion","bundleHash","assetManifestHash","minAppVersion","runtimeFingerprint","hermesBytecodeVersion","join","parsePublicKeys","keys","includes","match","map","block","replace","split","filter","Boolean"],"sourceRoot":"../../../src","sources":["ota/entrySignature.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,GAAIC,CAAW,IACpC,CACI,kBAAkB,EAClBA,CAAC,CAACC,UAAU,EACZD,CAAC,CAACE,MAAM,IAAI,EAAE,EACdF,CAAC,CAACG,QAAQ,IAAI,EAAE,EAChBH,CAAC,CAACI,WAAW,EACbJ,CAAC,CAACK,SAAS,EACXL,CAAC,CAACM,UAAU,IAAI,EAAE,EAClBN,CAAC,CAACO,iBAAiB,IAAI,EAAE,EACzBP,CAAC,CAACQ,aAAa,IAAI,EAAE,EACrBR,CAAC,CAACS,kBAAkB,IAAI,EAAE,EAC1BT,CAAC,CAACU,qBAAqB,IAAI,EAAE,CAChC,CAACC,IAAI,CAAC,IAAI,CAAC;;AAEhB;AACA,OAAO,MAAMC,eAAe,GAAIC,IAAwB,IAAe;EACnE,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,IAAIA,IAAI,CAACC,QAAQ,CAAC,YAAY,CAAC,EAAE;IAC7B,OAAO,CAACD,IAAI,CAACE,KAAK,CAAC,6DAA6D,CAAC,IAAI,EAAE,EAAEC,GAAG,CAACC,KAAK,IAC9FA,KAAK,CAACC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAC9C,CAAC;EACL;EACA,OAAOL,IAAI,CAACM,KAAK,CAAC,QAAQ,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;AAC/C,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NativeBsPatch from '../NativeBsPatch';
|
|
4
|
+
import { DOCUMENT_DIR } from './otaMetadata';
|
|
5
|
+
|
|
6
|
+
// Outside ota/: resetToFactory and native rollbacks keep it
|
|
7
|
+
const INSTALL_ID_PATH = `${DOCUMENT_DIR}/bspatch-install-id`;
|
|
8
|
+
let installId;
|
|
9
|
+
|
|
10
|
+
/** Random ID made on first use and kept for the life of the install (rollout bucket, QA lists, telemetry) */
|
|
11
|
+
export const getInstallId = () => installId ??= (async () => {
|
|
12
|
+
try {
|
|
13
|
+
const saved = (await NativeBsPatch.readFile(INSTALL_ID_PATH)).trim();
|
|
14
|
+
if (/^[0-9a-f]{32}$/.test(saved)) return saved;
|
|
15
|
+
} catch {}
|
|
16
|
+
const id = Array.from({
|
|
17
|
+
length: 32
|
|
18
|
+
}, () => Math.floor(Math.random() * 16).toString(16)).join('');
|
|
19
|
+
await NativeBsPatch.writeFile(INSTALL_ID_PATH, id).catch(() => {});
|
|
20
|
+
return id;
|
|
21
|
+
})();
|
|
22
|
+
//# sourceMappingURL=installId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeBsPatch","DOCUMENT_DIR","INSTALL_ID_PATH","installId","getInstallId","saved","readFile","trim","test","id","Array","from","length","Math","floor","random","toString","join","writeFile","catch"],"sourceRoot":"../../../src","sources":["ota/installId.ts"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,kBAAkB;AAC5C,SAASC,YAAY,QAAQ,eAAe;;AAE5C;AACA,MAAMC,eAAe,GAAG,GAAGD,YAAY,qBAAqB;AAC5D,IAAIE,SAAsC;;AAE1C;AACA,OAAO,MAAMC,YAAY,GAAGA,CAAA,KACvBD,SAAS,KAAK,CAAC,YAAY;EACxB,IAAI;IACA,MAAME,KAAK,GAAG,CAAC,MAAML,aAAa,CAACM,QAAQ,CAACJ,eAAe,CAAC,EAAEK,IAAI,CAAC,CAAC;IACpE,IAAI,gBAAgB,CAACC,IAAI,CAACH,KAAK,CAAC,EAAE,OAAOA,KAAK;EAClD,CAAC,CAAC,MAAM,CAAC;EACT,MAAMI,EAAE,GAAGC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,MAAMC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;EACjG,MAAMjB,aAAa,CAACkB,SAAS,CAAChB,eAAe,EAAEO,EAAE,CAAC,CAACU,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EAClE,OAAOV,EAAE;AACb,CAAC,EAAE,CAAE","ignoreList":[]}
|
|
@@ -13,17 +13,19 @@
|
|
|
13
13
|
* - Structured telemetry logging
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { Platform } from 'react-native';
|
|
16
17
|
import NativeBsPatch from '../NativeBsPatch';
|
|
18
|
+
import { entryPayload, parsePublicKeys } from './entrySignature';
|
|
17
19
|
import { createOtaLogger, OtaEvent } from './otaLogger';
|
|
18
20
|
import { ASSET_LIST_FILE, DOCUMENT_DIR, ensureOtaDir, OTA_DIR, getBundlePath, loadMetadata, registerNewVersion, updateMetadata } from './otaMetadata';
|
|
19
|
-
import {
|
|
21
|
+
import { normalizeChannel, R2StorageProvider } from './storage/R2Storage';
|
|
20
22
|
import { OtaStatus } from './types';
|
|
21
23
|
|
|
22
24
|
// ─── Storage Provider Factory ──────────────────────────────────────────
|
|
23
25
|
|
|
24
|
-
const DEFAULT_STORAGE = new
|
|
26
|
+
const DEFAULT_STORAGE = new R2StorageProvider();
|
|
25
27
|
|
|
26
|
-
/** Explicit `config.storage` or the default
|
|
28
|
+
/** Explicit `config.storage` or the default provider (R2 public URL). */
|
|
27
29
|
const getStorage = config => config.storage ?? DEFAULT_STORAGE;
|
|
28
30
|
|
|
29
31
|
/**
|
|
@@ -89,26 +91,57 @@ export const verifyHash = async (path, expectedHash) => {
|
|
|
89
91
|
};
|
|
90
92
|
|
|
91
93
|
/**
|
|
92
|
-
* When
|
|
93
|
-
*
|
|
94
|
+
* When there is a public key (config.publicKey, else the embedded ones), an RSA/ECDSA
|
|
95
|
+
* SHA-256 signature is mandatory and must verify against one of them (fail closed):
|
|
96
|
+
* the backup key takes over without a store build if the primary is lost.
|
|
94
97
|
*/
|
|
95
98
|
const assertSigned = async (filePath, signature, config, what) => {
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
const keys = parsePublicKeys(config.publicKey);
|
|
100
|
+
if (keys.length === 0) return;
|
|
101
|
+
let valid = false;
|
|
102
|
+
for (const key of signature ? keys : []) {
|
|
103
|
+
if (await NativeBsPatch.verifySignature(filePath, signature, key).catch(() => false)) {
|
|
104
|
+
valid = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
98
108
|
if (!valid) {
|
|
99
109
|
throw new Error(`${what} signature missing or invalid`);
|
|
100
110
|
}
|
|
101
111
|
};
|
|
102
112
|
|
|
113
|
+
/**
|
|
114
|
+
* With config.publicKey the registry entry itself must be signed and meant for this app,
|
|
115
|
+
* so a registry served by someone else (e.g. a lapsed domain) can't hand over another
|
|
116
|
+
* flavor's, platform's or release's signed bundle, or swap the asset manifest.
|
|
117
|
+
*/
|
|
118
|
+
const assertEntrySigned = async (patch, config) => {
|
|
119
|
+
if (parsePublicKeys(config.publicKey).length === 0) return;
|
|
120
|
+
const channel = config.customServer?.channel;
|
|
121
|
+
const mismatch = patch.appVersion !== config.appVersion ? 'appVersion' : patch.platform !== Platform.OS ? 'platform' : channel && patch.flavor !== normalizeChannel(channel) ? 'flavor' : patch.assetManifestUrl && !patch.assetManifestHash ? 'assetManifestHash' : null;
|
|
122
|
+
if (mismatch) {
|
|
123
|
+
throw new Error(`Registry entry rejected: ${mismatch} doesn't match this app`);
|
|
124
|
+
}
|
|
125
|
+
const payloadPath = `${OTA_DIR}/entry-payload.txt`;
|
|
126
|
+
await NativeBsPatch.writeFile(payloadPath, entryPayload(patch));
|
|
127
|
+
try {
|
|
128
|
+
await assertSigned(payloadPath, patch.entrySignature, config, 'Registry entry');
|
|
129
|
+
} finally {
|
|
130
|
+
await NativeBsPatch.removePath(payloadPath).catch(() => {});
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
103
134
|
/**
|
|
104
135
|
* Download a file with retry logic using exponential backoff.
|
|
105
136
|
* Native streams to `${destPath}.part` and renames only on a 2xx response, so a
|
|
106
|
-
* cut-off download or an error page never sits at destPath looking complete
|
|
137
|
+
* cut-off download or an error page never sits at destPath looking complete;
|
|
138
|
+
* each retry resumes where the last attempt stopped.
|
|
107
139
|
* @returns Size of the downloaded file in bytes
|
|
108
140
|
*/
|
|
109
141
|
const downloadWithRetry = async (url, destPath, config, onProgress) => {
|
|
110
142
|
const retryLimit = Math.max(1, config.network?.retry ?? 3);
|
|
111
143
|
const timeout = config.network?.timeoutMs ?? 30000;
|
|
144
|
+
const headers = JSON.stringify(config.customServer?.headers ?? {});
|
|
112
145
|
const subscription = NativeBsPatch.onDownloadProgress(e => {
|
|
113
146
|
// total is -1 without a Content-Length
|
|
114
147
|
if (e.path === destPath && e.total > 0) {
|
|
@@ -118,7 +151,7 @@ const downloadWithRetry = async (url, destPath, config, onProgress) => {
|
|
|
118
151
|
try {
|
|
119
152
|
for (let i = 0;; i++) {
|
|
120
153
|
try {
|
|
121
|
-
return await NativeBsPatch.downloadFile(url, destPath, timeout);
|
|
154
|
+
return await NativeBsPatch.downloadFile(url, destPath, timeout, headers);
|
|
122
155
|
} catch (e) {
|
|
123
156
|
if (i >= retryLimit - 1) throw e;
|
|
124
157
|
const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
|
|
@@ -162,13 +195,20 @@ const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith(
|
|
|
162
195
|
* transformer (which raced the first render). Files are fetched once per content
|
|
163
196
|
* hash into ota/assets/ and copied from there for later versions.
|
|
164
197
|
*/
|
|
165
|
-
const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onStatus, onProgress) => {
|
|
198
|
+
const downloadAndSyncAssets = async (assetManifestUrl, assetManifestHash, version, config, log, onStatus, onProgress) => {
|
|
166
199
|
const fs = NativeBsPatch;
|
|
167
200
|
onStatus(OtaStatus.SYNCING_ASSETS, 'Syncing assets...');
|
|
168
201
|
const versionDir = `${OTA_DIR}/v${version}`;
|
|
169
202
|
let assets = [];
|
|
170
203
|
try {
|
|
171
|
-
|
|
204
|
+
// Through a file: its hash is in the (signed) registry entry
|
|
205
|
+
const manifestPath = `${versionDir}/asset-manifest.json`;
|
|
206
|
+
await downloadWithRetry(assetManifestUrl, manifestPath, config, () => {});
|
|
207
|
+
if (!(await verifyHash(manifestPath, assetManifestHash))) {
|
|
208
|
+
throw new Error('hash mismatch');
|
|
209
|
+
}
|
|
210
|
+
const manifest = JSON.parse(await fs.readFile(manifestPath));
|
|
211
|
+
await fs.removePath(manifestPath).catch(() => {});
|
|
172
212
|
// Hash/ext/path become file names: reject anything unexpected
|
|
173
213
|
assets = (manifest.assets || []).filter(a => /^[a-f0-9]{64}$/i.test(a.hash) && /^[a-z0-9]+$/i.test(a.ext) && typeof a.originalPath === 'string' && isSafeRelativePath(a.originalPath));
|
|
174
214
|
} catch (e) {
|
|
@@ -280,6 +320,7 @@ export const selectUpdate = (patchList, localV, targetV) => {
|
|
|
280
320
|
* Full path (store build, no patch, or patch path failed):
|
|
281
321
|
* download full bundle → hash → signature
|
|
282
322
|
* Both then: sync assets → atomic commit → metadata → mark healthy → reload.
|
|
323
|
+
* Only a patch-path failure falls back to the full bundle, never a failed commit.
|
|
283
324
|
*
|
|
284
325
|
* The store build's bundle is never used as a patch source: it can't be
|
|
285
326
|
* reproduced byte-for-byte at build time, so the first OTA is always a full download.
|
|
@@ -307,10 +348,22 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
307
348
|
}
|
|
308
349
|
const log = createOtaLogger(config.onEvent);
|
|
309
350
|
await ensureOtaDir();
|
|
351
|
+
try {
|
|
352
|
+
await assertEntrySigned(patch, config);
|
|
353
|
+
} catch (error) {
|
|
354
|
+
log.emit(OtaEvent.SIGNATURE_INVALID, {
|
|
355
|
+
version: patch.toVersion,
|
|
356
|
+
error: error.message
|
|
357
|
+
});
|
|
358
|
+
onStatus(OtaStatus.ERROR, `Error: ${error.message}`);
|
|
359
|
+
throw error;
|
|
360
|
+
}
|
|
310
361
|
const totalStart = Date.now();
|
|
311
362
|
const fs = NativeBsPatch;
|
|
312
363
|
const finalBundlePath = getBundlePath(patch.toVersion, config.baseAppVersion) || '';
|
|
313
364
|
const tempBundle = `${finalBundlePath}.tmp`;
|
|
365
|
+
/** Compressed full bundle, before decompressing into tempBundle */
|
|
366
|
+
const tempDownload = `${finalBundlePath}.download`;
|
|
314
367
|
const versionDir = `${OTA_DIR}/v${patch.toVersion}`;
|
|
315
368
|
const localPatchPath = getLocalPatchPath(patch, DOCUMENT_DIR);
|
|
316
369
|
|
|
@@ -332,6 +385,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
332
385
|
throw new Error(`Native app ${currentAppVer} is too old. Update to ${patch.minAppVersion}+ first.`);
|
|
333
386
|
}
|
|
334
387
|
}
|
|
388
|
+
|
|
389
|
+
// Room for the download, the decompressed bundle and its assets; a full disk mid-write
|
|
390
|
+
// would fail later and leave the user's storage fuller
|
|
391
|
+
const needBytes = (patch.bundleSize ?? 0) * 3 + 20 * 1024 * 1024;
|
|
392
|
+
const freeBytes = await fs.getFreeDiskSpace().catch(() => Number.MAX_SAFE_INTEGER);
|
|
393
|
+
if (freeBytes < needBytes) {
|
|
394
|
+
throw new Error(`Not enough free storage: ${Math.ceil(needBytes / 1048576)} MB needed`);
|
|
395
|
+
}
|
|
335
396
|
await fs.mkdir(versionDir);
|
|
336
397
|
const download = async (remoteName, dest) => {
|
|
337
398
|
log.emit(OtaEvent.DOWNLOAD_START, {
|
|
@@ -374,12 +435,11 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
374
435
|
});
|
|
375
436
|
throw new Error(`${what} hash mismatch`);
|
|
376
437
|
};
|
|
377
|
-
|
|
378
438
|
/** tempBundle is verified: sync assets, swap it in, record the version, reload. */
|
|
379
439
|
const commit = async metrics => {
|
|
380
440
|
if (patch.assetManifestUrl) {
|
|
381
441
|
const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
382
|
-
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
442
|
+
await downloadAndSyncAssets(manifestUrl, patch.assetManifestHash, patch.toVersion, config, log, onStatus, onProgress);
|
|
383
443
|
}
|
|
384
444
|
await fs.moveFile(tempBundle, finalBundlePath);
|
|
385
445
|
|
|
@@ -406,6 +466,8 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
406
466
|
console.log(`[otaCore] V${patch.toVersion} prepared in background — applies on next launch.`);
|
|
407
467
|
}
|
|
408
468
|
};
|
|
469
|
+
|
|
470
|
+
/** Leaves the verified result at tempBundle. */
|
|
409
471
|
const applyPatchFile = async sourcePath => {
|
|
410
472
|
onStatus(OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion}...`);
|
|
411
473
|
const {
|
|
@@ -441,12 +503,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
441
503
|
}
|
|
442
504
|
await assertHash(tempBundle, patch.bundleHash, 'Result bundle');
|
|
443
505
|
await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
|
|
444
|
-
|
|
506
|
+
return {
|
|
445
507
|
patchSizeKB: sizeBytes / 1024,
|
|
446
508
|
downloadMs,
|
|
447
509
|
applyMs
|
|
448
|
-
}
|
|
510
|
+
};
|
|
449
511
|
};
|
|
512
|
+
|
|
513
|
+
/** Leaves the verified full bundle at tempBundle. */
|
|
450
514
|
const installFullBundle = async () => {
|
|
451
515
|
if (!patch.fullBundleUrl) {
|
|
452
516
|
throw new Error(`No full bundle for V${patch.toVersion}`);
|
|
@@ -455,31 +519,42 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
455
519
|
version: patch.toVersion
|
|
456
520
|
});
|
|
457
521
|
onStatus(OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion} (full bundle)...`);
|
|
522
|
+
const compression = patch.fullBundleCompression;
|
|
458
523
|
const {
|
|
459
524
|
downloadMs,
|
|
460
525
|
sizeBytes
|
|
461
|
-
} = await download(patch.fullBundleUrl, tempBundle);
|
|
526
|
+
} = await download(patch.fullBundleUrl, compression ? tempDownload : tempBundle);
|
|
527
|
+
if (compression) {
|
|
528
|
+
onStatus(OtaStatus.APPLYING, 'Decompressing...');
|
|
529
|
+
await fs.decompressFile(tempDownload, tempBundle, compression);
|
|
530
|
+
await fs.removePath(tempDownload).catch(() => {});
|
|
531
|
+
}
|
|
462
532
|
await assertHash(tempBundle, patch.bundleHash, 'Full bundle');
|
|
463
533
|
await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
|
|
464
|
-
|
|
534
|
+
return {
|
|
465
535
|
patchSizeKB: sizeBytes / 1024,
|
|
466
536
|
downloadMs,
|
|
467
537
|
applyMs: 0
|
|
468
|
-
}
|
|
538
|
+
};
|
|
469
539
|
};
|
|
470
540
|
const cleanup = async () => {
|
|
471
541
|
await fs.removePath(localPatchPath).catch(() => {});
|
|
472
542
|
await fs.removePath(tempBundle).catch(() => {});
|
|
543
|
+
// tempDownload's .part stays: the next attempt resumes it
|
|
544
|
+
await fs.removePath(tempDownload).catch(() => {});
|
|
473
545
|
};
|
|
474
546
|
|
|
475
547
|
// Patch only from an OTA bundle we installed ourselves (byte-identical to the build output)
|
|
476
548
|
const metadata = await loadMetadata(config.baseAppVersion);
|
|
477
549
|
const sourcePath = getBundlePath(metadata.currentVersion, config.baseAppVersion);
|
|
478
550
|
const canPatch = !!patch.filename && patch.fromVersion === metadata.currentVersion && !!sourcePath && (await fs.exists(sourcePath));
|
|
551
|
+
|
|
552
|
+
// Only a failed patch falls back to the full bundle; a failed commit (asset sync)
|
|
553
|
+
// would fail the same way after re-downloading the whole bundle
|
|
554
|
+
let metrics;
|
|
479
555
|
if (canPatch) {
|
|
480
556
|
try {
|
|
481
|
-
await applyPatchFile(sourcePath);
|
|
482
|
-
return;
|
|
557
|
+
metrics = await applyPatchFile(sourcePath);
|
|
483
558
|
} catch (error) {
|
|
484
559
|
await cleanup();
|
|
485
560
|
if (__DEV__) {
|
|
@@ -492,7 +567,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
492
567
|
}
|
|
493
568
|
}
|
|
494
569
|
try {
|
|
495
|
-
await installFullBundle();
|
|
570
|
+
await commit(metrics ?? (await installFullBundle()));
|
|
496
571
|
} catch (error) {
|
|
497
572
|
await cleanup();
|
|
498
573
|
onStatus(OtaStatus.ERROR, `Error: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeBsPatch","createOtaLogger","OtaEvent","ASSET_LIST_FILE","DOCUMENT_DIR","ensureOtaDir","OTA_DIR","getBundlePath","loadMetadata","registerNewVersion","updateMetadata","fetchJson","GitHubRawStorageProvider","OtaStatus","DEFAULT_STORAGE","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","hashFile","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","verifySignature","catch","Error","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","subscription","onDownloadProgress","e","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","fs","SYNCING_ASSETS","versionDir","assets","manifest","filter","ext","originalPath","message","length","writeFile","dirs","Map","ensureDir","dir","has","set","mkdir","get","processed","downloaded","failed","index","worker","asset","storePath","getLocalAssetPath","exists","getAssetUrl","removePath","dest","slice","lastIndexOf","copyFile","round","all","Array","from","emit","DOWNLOAD_SUCCESS","getLocalPatchPath","patch","docDir","appVersion","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","onEvent","totalStart","Date","now","finalBundlePath","baseAppVersion","tempBundle","localPatchPath","minAppVersion","currentAppVer","getAppVersion","undefined","VERSION_INCOMPATIBLE","download","remoteName","DOWNLOAD_START","dlStart","sizeBytes","getUpdateFileUrl","dlError","DOWNLOAD_FAIL","error","downloadMs","durationMs","sizeKB","assertHash","expected","actual","HASH_MISMATCH","metadata","commit","metrics","manifestUrl","moveFile","nativeAppVersion","totalMs","PATCH_SUCCESS","patchSizeKB","SUCCESS","fromCache","reloadBundle","applyPatchFile","sourcePath","DOWNLOADING","APPLYING","sigError","SIGNATURE_INVALID","baseHash","PATCH_START","applyStart","success","applyPatch","applyMs","PATCH_FAIL","bundleHash","bundleSignature","installFullBundle","fullBundleUrl","FALLBACK_FULL_BUNDLE","cleanup","currentVersion","canPatch","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","NativeBsPatch","entryPayload","parsePublicKeys","createOtaLogger","OtaEvent","ASSET_LIST_FILE","DOCUMENT_DIR","ensureOtaDir","OTA_DIR","getBundlePath","loadMetadata","registerNewVersion","updateMetadata","normalizeChannel","R2StorageProvider","OtaStatus","DEFAULT_STORAGE","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","hashFile","toLowerCase","assertSigned","filePath","signature","what","keys","publicKey","length","valid","key","verifySignature","catch","Error","assertEntrySigned","patch","mismatch","appVersion","platform","OS","flavor","assetManifestUrl","assetManifestHash","payloadPath","writeFile","entrySignature","removePath","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","headers","subscription","onDownloadProgress","e","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","version","log","onStatus","fs","SYNCING_ASSETS","versionDir","assets","manifestPath","manifest","parse","readFile","filter","ext","originalPath","message","dirs","Map","ensureDir","dir","has","set","mkdir","get","processed","downloaded","failed","index","worker","asset","storePath","getLocalAssetPath","exists","getAssetUrl","dest","slice","lastIndexOf","copyFile","round","all","Array","from","emit","DOWNLOAD_SUCCESS","getLocalPatchPath","docDir","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","onEvent","error","SIGNATURE_INVALID","ERROR","totalStart","Date","now","finalBundlePath","baseAppVersion","tempBundle","tempDownload","localPatchPath","minAppVersion","currentAppVer","getAppVersion","undefined","VERSION_INCOMPATIBLE","needBytes","bundleSize","freeBytes","getFreeDiskSpace","MAX_SAFE_INTEGER","ceil","download","remoteName","DOWNLOAD_START","dlStart","sizeBytes","getUpdateFileUrl","dlError","DOWNLOAD_FAIL","downloadMs","durationMs","sizeKB","assertHash","expected","actual","HASH_MISMATCH","metadata","commit","metrics","manifestUrl","moveFile","nativeAppVersion","totalMs","PATCH_SUCCESS","patchSizeKB","SUCCESS","fromCache","reloadBundle","applyPatchFile","sourcePath","DOWNLOADING","APPLYING","sigError","baseHash","PATCH_START","applyStart","success","applyPatch","applyMs","PATCH_FAIL","bundleHash","bundleSignature","installFullBundle","fullBundleUrl","FALLBACK_FULL_BUNDLE","compression","fullBundleCompression","decompressFile","cleanup","currentVersion","canPatch"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Storage Provider for
|
|
5
|
-
*
|
|
4
|
+
* Storage Provider for the public URL of a Cloudflare R2 bucket (r2.dev or a custom
|
|
5
|
+
* domain): plain HTTP GETs, so any static host serving the same layout also works.
|
|
6
6
|
*
|
|
7
7
|
* Direct URL mapping:
|
|
8
8
|
* - Manifest: `${baseUrl}/${baseFolder}/ota_registry.json`
|
|
@@ -10,22 +10,25 @@
|
|
|
10
10
|
* - Assets: `${baseUrl}/${baseFolder}/assets/${hash}.${ext}`
|
|
11
11
|
*
|
|
12
12
|
* NOTE: Only the registry is mutable: it is fetched with Cache-Control: no-cache
|
|
13
|
-
* and a timestamp query param (
|
|
13
|
+
* and a timestamp query param (the CDN in front of the bucket may cache it). Bundles,
|
|
14
14
|
* patches, manifests and assets are never overwritten, so they stay cacheable.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
/** Headers to bypass
|
|
17
|
+
/** Headers to bypass the CDN cache on mutable files (registry, manifests) */
|
|
18
18
|
const NO_CACHE_HEADERS = {
|
|
19
19
|
'Cache-Control': 'no-cache'
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
/** GET + JSON.parse with a timeout (fetch has none of its own); rejects on non-2xx. */
|
|
23
|
-
export const fetchJson = async (url, timeoutMs) => {
|
|
23
|
+
export const fetchJson = async (url, timeoutMs, headers) => {
|
|
24
24
|
const controller = new AbortController();
|
|
25
25
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
26
26
|
try {
|
|
27
27
|
const res = await fetch(url, {
|
|
28
|
-
headers:
|
|
28
|
+
headers: {
|
|
29
|
+
...NO_CACHE_HEADERS,
|
|
30
|
+
...headers
|
|
31
|
+
},
|
|
29
32
|
signal: controller.signal
|
|
30
33
|
});
|
|
31
34
|
if (!res.ok) {
|
|
@@ -39,37 +42,38 @@ export const fetchJson = async (url, timeoutMs) => {
|
|
|
39
42
|
|
|
40
43
|
/** Append a timestamp query param to defeat CDN caches on mutable URLs */
|
|
41
44
|
const bustCache = url => `${url}?cb=${Date.now()}`;
|
|
42
|
-
const normalizeChannel = channel => {
|
|
45
|
+
export const normalizeChannel = channel => {
|
|
43
46
|
const lower = channel.toLowerCase();
|
|
44
47
|
if (lower === 'dev') return 'development';
|
|
45
48
|
if (lower === 'prod') return 'production';
|
|
46
49
|
return lower;
|
|
47
50
|
};
|
|
48
|
-
export class
|
|
51
|
+
export class R2StorageProvider {
|
|
49
52
|
async fetchManifest(config) {
|
|
50
53
|
if (!config.customServer) {
|
|
51
|
-
throw new Error('[
|
|
54
|
+
throw new Error('[R2Storage] customServer configuration missing');
|
|
52
55
|
}
|
|
53
56
|
const {
|
|
54
57
|
baseUrl,
|
|
55
58
|
channel,
|
|
56
|
-
baseFolder = 'ota'
|
|
59
|
+
baseFolder = 'ota',
|
|
60
|
+
headers
|
|
57
61
|
} = config.customServer;
|
|
58
62
|
const channelName = normalizeChannel(channel);
|
|
59
63
|
const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
60
64
|
// Cache-bust: registry is mutable; must always fetch the latest version
|
|
61
65
|
const registryUrl = bustCache(`${normalizedBaseUrl}/${baseFolder}/ota_registry.json`);
|
|
62
66
|
try {
|
|
63
|
-
const registry = await fetchJson(registryUrl, 15000);
|
|
67
|
+
const registry = await fetchJson(registryUrl, 15000, headers);
|
|
64
68
|
if (!config.appVersion) {
|
|
65
|
-
throw new Error('[
|
|
69
|
+
throw new Error('[R2Storage] config.appVersion is required to query OTA registry');
|
|
66
70
|
}
|
|
67
71
|
const appGroup = registry?.apps?.[config.appVersion];
|
|
68
72
|
const flavorGroup = appGroup?.flavors?.[channelName];
|
|
69
73
|
return flavorGroup?.patches ?? [];
|
|
70
74
|
} catch (error) {
|
|
71
75
|
// Surface it: "no patches" would report a broken registry as up to date
|
|
72
|
-
throw new Error(`[
|
|
76
|
+
throw new Error(`[R2Storage] Manifest fetch error: ${error.message}`);
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
async getUpdateFileUrl(filename, config) {
|
|
@@ -99,4 +103,4 @@ export class GitHubRawStorageProvider {
|
|
|
99
103
|
return `${normalizedBaseUrl}/${baseFolder}/assets/${hash}.${ext}`;
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
|
-
//# sourceMappingURL=
|
|
106
|
+
//# sourceMappingURL=R2Storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NO_CACHE_HEADERS","fetchJson","url","timeoutMs","headers","controller","AbortController","timer","setTimeout","abort","res","fetch","signal","ok","Error","status","json","clearTimeout","bustCache","Date","now","normalizeChannel","channel","lower","toLowerCase","R2StorageProvider","fetchManifest","config","customServer","baseUrl","baseFolder","channelName","normalizedBaseUrl","endsWith","slice","registryUrl","registry","appVersion","appGroup","apps","flavorGroup","flavors","patches","error","message","getUpdateFileUrl","filename","getAssetUrl","hash","ext"],"sourceRoot":"../../../../src","sources":["ota/storage/R2Storage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OtaUpdateMode","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;AAAA;AACA;AACA;;AAqBA,WAAYA,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;;
|
|
1
|
+
{"version":3,"names":["OtaUpdateMode","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;AAAA;AACA;AACA;;AAqBA,WAAYA,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;;AAgEzB;AACA;AACA;;AA4FA,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ export type DownloadProgress = {
|
|
|
3
3
|
/** destPath passed to downloadFile */
|
|
4
4
|
path: string;
|
|
5
5
|
received: number;
|
|
6
|
-
/** -1 when
|
|
6
|
+
/** -1 when unknown: no Content-Length, or a Content-Encoding (received counts decoded bytes) */
|
|
7
7
|
total: number;
|
|
8
8
|
};
|
|
9
9
|
export interface Spec extends TurboModule {
|
|
@@ -40,13 +40,39 @@ export interface Spec extends TurboModule {
|
|
|
40
40
|
getAppVersion(): Promise<string>;
|
|
41
41
|
/** Directory the native resolver reads `ota/` from (filesDir on Android, Documents on iOS) */
|
|
42
42
|
getDocumentDir(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Public keys the CLI embedded in the app, comma-separated base64 SPKI (primary first,
|
|
45
|
+
* then the offline backup): Info.plist `BsPatchPublicKey` / Android string
|
|
46
|
+
* `bspatch_public_key`. '' when none.
|
|
47
|
+
*/
|
|
48
|
+
getEmbeddedPublicKeys(): string;
|
|
49
|
+
/** Build number: versionCode (Android) / CFBundleVersion (iOS) */
|
|
50
|
+
getAppBuild(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Native runtime fingerprint stamped into this binary at build time (Info.plist
|
|
53
|
+
* `BsPatchRuntimeFingerprint` / Android resValue `bspatch_runtime_fingerprint`);
|
|
54
|
+
* '' when the build hook didn't run. An OTA only installs on a matching binary.
|
|
55
|
+
*/
|
|
56
|
+
getRuntimeFingerprint(): string;
|
|
57
|
+
/** Free bytes on the volume holding getDocumentDir() */
|
|
58
|
+
getFreeDiskSpace(): Promise<number>;
|
|
59
|
+
/** Current connection: 'wifi' | 'cellular' | 'ethernet' | 'none' | 'unknown' */
|
|
60
|
+
getNetworkType(): Promise<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Decompresses srcPath into destPath (replacing it). format: 'gzip' | 'bz2'.
|
|
63
|
+
* Rejects on unknown format or corrupt input; destPath is removed on failure.
|
|
64
|
+
*/
|
|
65
|
+
decompressFile(srcPath: string, destPath: string, format: string): Promise<void>;
|
|
43
66
|
/**
|
|
44
67
|
* Streams `url` to `destPath` (via `destPath.part`, renamed only on a 2xx response,
|
|
45
68
|
* replacing any existing file). Rejects on network error or non-2xx status.
|
|
69
|
+
* A failed download of the same destPath is resumed (HTTP Range) on the next call
|
|
70
|
+
* when the server supports it; otherwise it restarts from zero.
|
|
46
71
|
* @param timeoutMs Idle timeout: no bytes for this long fails the download
|
|
72
|
+
* @param headersJson Extra request headers as a JSON object string ('{}' for none)
|
|
47
73
|
* @returns Size of the downloaded file in bytes
|
|
48
74
|
*/
|
|
49
|
-
downloadFile(url: string, destPath: string, timeoutMs: number): Promise<number>;
|
|
75
|
+
downloadFile(url: string, destPath: string, timeoutMs: number, headersJson: string): Promise<number>;
|
|
50
76
|
/** Lowercase hex SHA-256 of a file */
|
|
51
77
|
hashFile(path: string): Promise<string>;
|
|
52
78
|
exists(path: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;;;OAMG;IACH,UAAU,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;IAEtB;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAIjC,8FAA8F;IAC9F,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC;IAEhC,kEAAkE;IAClE,WAAW,IAAI,MAAM,CAAC;IAEtB;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC;IAEhC,wDAAwD;IACxD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,gFAAgF;IAChF,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErG,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,oDAAoD;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,iCAAiC;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;CAC1E;;AAED,wBAAiE"}
|
|
@@ -4,7 +4,9 @@ export declare function reloadBundle(): void;
|
|
|
4
4
|
export * from './ota/otaLogger';
|
|
5
5
|
export * from './ota/OtaProvider';
|
|
6
6
|
export * from './ota/types';
|
|
7
|
-
export {
|
|
7
|
+
export { R2StorageProvider,
|
|
8
|
+
/** @deprecated Renamed to R2StorageProvider */
|
|
9
|
+
R2StorageProvider as GitHubRawStorageProvider, } from './ota/storage/R2Storage';
|
|
8
10
|
declare const _default: {
|
|
9
11
|
applyPatch: typeof applyPatch;
|
|
10
12
|
reloadBundle: typeof reloadBundle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAE5B,OAAO,EACL,iBAAiB;AACjB,+CAA+C;AAC/C,iBAAiB,IAAI,wBAAwB,GAC9C,MAAM,yBAAyB,CAAC;;;;;;AAEjC,wBAIE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtaProvider.d.ts","sourceRoot":"","sources":["../../../src/ota/OtaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"OtaProvider.d.ts","sourceRoot":"","sources":["../../../src/ota/OtaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAgBf,OAAO,EACL,SAAS,EAGT,QAAQ,EAGT,MAAM,SAAS,CAAC;AAqBjB,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAAM,EACN,WAAW,EACX,cAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qBA+gBA;AAED,wBAAgB,MAAM,aAMrB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { OtaPatch } from './types';
|
|
2
|
+
/** Entry `requires` values this client understands */
|
|
3
|
+
export declare const SUPPORTED_FEATURES: string[];
|
|
4
|
+
export type EligibilityContext = {
|
|
5
|
+
/** Platform.OS */
|
|
6
|
+
platform: string;
|
|
7
|
+
/** Versions that crashed on boot here and were rolled back */
|
|
8
|
+
failedVersions: number[];
|
|
9
|
+
/** Fingerprint stamped into this binary ('' when the build hook didn't run) */
|
|
10
|
+
runtimeFingerprint: string;
|
|
11
|
+
/** Bytecode version of the running Hermes (undefined off Hermes) */
|
|
12
|
+
hermesBytecodeVersion?: number;
|
|
13
|
+
installId: string;
|
|
14
|
+
};
|
|
15
|
+
/** FNV-1a: stable 0-99 bucket for an install and version (a different slice of installs per version) */
|
|
16
|
+
export declare const rolloutBucket: (installId: string, version: number) => number;
|
|
17
|
+
/**
|
|
18
|
+
* Why this client must not install the entry, or null when it may.
|
|
19
|
+
* ignoreControls (installing a chosen entry by hand, e.g. QA): skip the kill switch,
|
|
20
|
+
* rollout and QA list, keep every check that protects the app.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ineligibleReason: (e: OtaPatch, ctx: EligibilityContext, { ignoreControls }?: {
|
|
23
|
+
ignoreControls?: boolean;
|
|
24
|
+
}) => string | null;
|
|
25
|
+
//# sourceMappingURL=eligibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eligibility.d.ts","sourceRoot":"","sources":["../../../src/ota/eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,UAAkB,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+EAA+E;IAC/E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,MAOlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GACzB,GAAG,QAAQ,EACX,KAAK,kBAAkB,EACvB,qBAA4B;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,KAC9D,MAAM,GAAG,IAoBX,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OtaPatch } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* What `entrySignature` signs: the fields that decide which bundle a client installs.
|
|
4
|
+
* Must stay byte-for-byte equal to entryPayload in tools/update_registry.js.
|
|
5
|
+
*/
|
|
6
|
+
export declare const entryPayload: (p: OtaPatch) => string;
|
|
7
|
+
/** Public keys from config or the embedded list: PEM blocks, or base64 SPKI separated by commas/whitespace */
|
|
8
|
+
export declare const parsePublicKeys: (keys: string | undefined) => string[];
|
|
9
|
+
//# sourceMappingURL=entrySignature.d.ts.map
|