react-native-bspatch 4.1.0 → 5.0.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 +83 -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 +116 -20
- package/lib/commonjs/ota/OtaProvider.js.map +1 -1
- package/lib/commonjs/ota/eligibility.js +40 -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 +116 -20
- package/lib/module/ota/OtaProvider.js.map +1 -1
- package/lib/module/ota/eligibility.js +34 -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 +19 -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 +52 -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 +115 -24
- package/src/ota/eligibility.ts +48 -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 +49 -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,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.rolloutBucket = exports.ineligibleReason = exports.SUPPORTED_FEATURES = void 0;
|
|
7
|
+
/** Entry `requires` values this client understands */
|
|
8
|
+
const SUPPORTED_FEATURES = exports.SUPPORTED_FEATURES = ['gzip', 'bz2'];
|
|
9
|
+
/** FNV-1a: stable 0-99 bucket for an install and version (a different slice of installs per version) */
|
|
10
|
+
const rolloutBucket = (installId, version) => {
|
|
11
|
+
let h = 0x811c9dc5;
|
|
12
|
+
for (const c of `${installId}:${version}`) {
|
|
13
|
+
h ^= c.charCodeAt(0);
|
|
14
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
15
|
+
}
|
|
16
|
+
return h % 100;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Why this client must not install the entry, or null when it may */
|
|
20
|
+
exports.rolloutBucket = rolloutBucket;
|
|
21
|
+
const ineligibleReason = (e, ctx) => {
|
|
22
|
+
if (e.platform && e.platform.toLowerCase() !== ctx.platform) return 'other platform';
|
|
23
|
+
if (ctx.failedVersions.includes(e.toVersion)) return 'crashed on boot here before';
|
|
24
|
+
if (e.disabled) return 'disabled';
|
|
25
|
+
const missing = (e.requires ?? []).filter(f => !SUPPORTED_FEATURES.includes(f));
|
|
26
|
+
if (missing.length) return `needs a newer client (${missing.join(', ')})`;
|
|
27
|
+
if (e.runtimeFingerprint && e.runtimeFingerprint !== ctx.runtimeFingerprint) {
|
|
28
|
+
return ctx.runtimeFingerprint ? 'built for different native code (needs a store build)' : 'this binary has no runtime fingerprint (run `react-native-bspatch setup` and rebuild)';
|
|
29
|
+
}
|
|
30
|
+
if (e.hermesBytecodeVersion && ctx.hermesBytecodeVersion && e.hermesBytecodeVersion !== ctx.hermesBytecodeVersion) {
|
|
31
|
+
return `Hermes bytecode ${e.hermesBytecodeVersion}, runtime reads ${ctx.hermesBytecodeVersion}`;
|
|
32
|
+
}
|
|
33
|
+
if (e.allowInstallIds?.length && !e.allowInstallIds.includes(ctx.installId)) return 'not in the QA list';
|
|
34
|
+
if (e.rolloutPercent !== undefined && rolloutBucket(ctx.installId, e.toVersion) >= e.rolloutPercent) {
|
|
35
|
+
return `outside the ${e.rolloutPercent}% rollout`;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
exports.ineligibleReason = ineligibleReason;
|
|
40
|
+
//# sourceMappingURL=eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SUPPORTED_FEATURES","exports","rolloutBucket","installId","version","h","c","charCodeAt","Math","imul","ineligibleReason","e","ctx","platform","toLowerCase","failedVersions","includes","toVersion","disabled","missing","requires","filter","f","length","join","runtimeFingerprint","hermesBytecodeVersion","allowInstallIds","rolloutPercent","undefined"],"sourceRoot":"../../../src","sources":["ota/eligibility.ts"],"mappings":";;;;;;AAEA;AACO,MAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AAcjD;AACO,MAAME,aAAa,GAAGA,CAACC,SAAiB,EAAEC,OAAe,KAAa;EACzE,IAAIC,CAAC,GAAG,UAAU;EAClB,KAAK,MAAMC,CAAC,IAAI,GAAGH,SAAS,IAAIC,OAAO,EAAE,EAAE;IACvCC,CAAC,IAAIC,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC;IACpBF,CAAC,GAAGG,IAAI,CAACC,IAAI,CAACJ,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;EACtC;EACA,OAAOA,CAAC,GAAG,GAAG;AAClB,CAAC;;AAED;AAAAJ,OAAA,CAAAC,aAAA,GAAAA,aAAA;AACO,MAAMQ,gBAAgB,GAAGA,CAACC,CAAW,EAAEC,GAAuB,KAAoB;EACrF,IAAID,CAAC,CAACE,QAAQ,IAAIF,CAAC,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC,KAAKF,GAAG,CAACC,QAAQ,EAAE,OAAO,gBAAgB;EACpF,IAAID,GAAG,CAACG,cAAc,CAACC,QAAQ,CAACL,CAAC,CAACM,SAAS,CAAC,EAAE,OAAO,6BAA6B;EAClF,IAAIN,CAAC,CAACO,QAAQ,EAAE,OAAO,UAAU;EACjC,MAAMC,OAAO,GAAG,CAACR,CAAC,CAACS,QAAQ,IAAI,EAAE,EAAEC,MAAM,CAACC,CAAC,IAAI,CAACtB,kBAAkB,CAACgB,QAAQ,CAACM,CAAC,CAAC,CAAC;EAC/E,IAAIH,OAAO,CAACI,MAAM,EAAE,OAAO,yBAAyBJ,OAAO,CAACK,IAAI,CAAC,IAAI,CAAC,GAAG;EACzE,IAAIb,CAAC,CAACc,kBAAkB,IAAId,CAAC,CAACc,kBAAkB,KAAKb,GAAG,CAACa,kBAAkB,EAAE;IACzE,OAAOb,GAAG,CAACa,kBAAkB,GACvB,uDAAuD,GACvD,uFAAuF;EACjG;EACA,IAAId,CAAC,CAACe,qBAAqB,IAAId,GAAG,CAACc,qBAAqB,IAAIf,CAAC,CAACe,qBAAqB,KAAKd,GAAG,CAACc,qBAAqB,EAAE;IAC/G,OAAO,mBAAmBf,CAAC,CAACe,qBAAqB,mBAAmBd,GAAG,CAACc,qBAAqB,EAAE;EACnG;EACA,IAAIf,CAAC,CAACgB,eAAe,EAAEJ,MAAM,IAAI,CAACZ,CAAC,CAACgB,eAAe,CAACX,QAAQ,CAACJ,GAAG,CAACT,SAAS,CAAC,EAAE,OAAO,oBAAoB;EACxG,IAAIQ,CAAC,CAACiB,cAAc,KAAKC,SAAS,IAAI3B,aAAa,CAACU,GAAG,CAACT,SAAS,EAAEQ,CAAC,CAACM,SAAS,CAAC,IAAIN,CAAC,CAACiB,cAAc,EAAE;IACjG,OAAO,eAAejB,CAAC,CAACiB,cAAc,WAAW;EACrD;EACA,OAAO,IAAI;AACf,CAAC;AAAC3B,OAAA,CAAAS,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parsePublicKeys = exports.entryPayload = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* What `entrySignature` signs: the fields that decide which bundle a client installs.
|
|
9
|
+
* Must stay byte-for-byte equal to entryPayload in tools/update_registry.js.
|
|
10
|
+
*/
|
|
11
|
+
const entryPayload = p => ['bspatch-entry-v2', p.appVersion, p.flavor ?? '', p.platform ?? '', p.fromVersion, p.toVersion, p.bundleHash ?? '', p.assetManifestHash ?? '', p.minAppVersion ?? '', p.runtimeFingerprint ?? '', p.hermesBytecodeVersion ?? ''].join('\n');
|
|
12
|
+
|
|
13
|
+
/** Public keys from config or the embedded list: PEM blocks, or base64 SPKI separated by commas/whitespace */
|
|
14
|
+
exports.entryPayload = entryPayload;
|
|
15
|
+
const parsePublicKeys = keys => {
|
|
16
|
+
if (!keys) return [];
|
|
17
|
+
if (keys.includes('-----BEGIN')) {
|
|
18
|
+
return (keys.match(/-----BEGIN PUBLIC KEY-----[\s\S]*?-----END PUBLIC KEY-----/g) ?? []).map(block => block.replace(/-----[A-Z ]+-----|\s+/g, ''));
|
|
19
|
+
}
|
|
20
|
+
return keys.split(/[\s,]+/).filter(Boolean);
|
|
21
|
+
};
|
|
22
|
+
exports.parsePublicKeys = parsePublicKeys;
|
|
23
|
+
//# sourceMappingURL=entrySignature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["entryPayload","p","appVersion","flavor","platform","fromVersion","toVersion","bundleHash","assetManifestHash","minAppVersion","runtimeFingerprint","hermesBytecodeVersion","join","exports","parsePublicKeys","keys","includes","match","map","block","replace","split","filter","Boolean"],"sourceRoot":"../../../src","sources":["ota/entrySignature.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACO,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;AAAAC,OAAA,CAAAb,YAAA,GAAAA,YAAA;AACO,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;AAACV,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getInstallId = void 0;
|
|
7
|
+
var _NativeBsPatch = _interopRequireDefault(require("../NativeBsPatch"));
|
|
8
|
+
var _otaMetadata = require("./otaMetadata");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
// Outside ota/: resetToFactory and native rollbacks keep it
|
|
11
|
+
const INSTALL_ID_PATH = `${_otaMetadata.DOCUMENT_DIR}/bspatch-install-id`;
|
|
12
|
+
let installId;
|
|
13
|
+
|
|
14
|
+
/** Random ID made on first use and kept for the life of the install (rollout bucket, QA lists, telemetry) */
|
|
15
|
+
const getInstallId = () => installId ??= (async () => {
|
|
16
|
+
try {
|
|
17
|
+
const saved = (await _NativeBsPatch.default.readFile(INSTALL_ID_PATH)).trim();
|
|
18
|
+
if (/^[0-9a-f]{32}$/.test(saved)) return saved;
|
|
19
|
+
} catch {}
|
|
20
|
+
const id = Array.from({
|
|
21
|
+
length: 32
|
|
22
|
+
}, () => Math.floor(Math.random() * 16).toString(16)).join('');
|
|
23
|
+
await _NativeBsPatch.default.writeFile(INSTALL_ID_PATH, id).catch(() => {});
|
|
24
|
+
return id;
|
|
25
|
+
})();
|
|
26
|
+
exports.getInstallId = getInstallId;
|
|
27
|
+
//# sourceMappingURL=installId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","_otaMetadata","e","__esModule","default","INSTALL_ID_PATH","DOCUMENT_DIR","installId","getInstallId","saved","NativeBsPatch","readFile","trim","test","id","Array","from","length","Math","floor","random","toString","join","writeFile","catch","exports"],"sourceRoot":"../../../src","sources":["ota/installId.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAA6C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7C;AACA,MAAMG,eAAe,GAAG,GAAGC,yBAAY,qBAAqB;AAC5D,IAAIC,SAAsC;;AAE1C;AACO,MAAMC,YAAY,GAAGA,CAAA,KACvBD,SAAS,KAAK,CAAC,YAAY;EACxB,IAAI;IACA,MAAME,KAAK,GAAG,CAAC,MAAMC,sBAAa,CAACC,QAAQ,CAACN,eAAe,CAAC,EAAEO,IAAI,CAAC,CAAC;IACpE,IAAI,gBAAgB,CAACC,IAAI,CAACJ,KAAK,CAAC,EAAE,OAAOA,KAAK;EAClD,CAAC,CAAC,MAAM,CAAC;EACT,MAAMK,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,MAAMZ,sBAAa,CAACa,SAAS,CAAClB,eAAe,EAAES,EAAE,CAAC,CAACU,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EAClE,OAAOV,EAAE;AACb,CAAC,EAAE,CAAE;AAACW,OAAA,CAAAjB,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.verifyHash = exports.validateOtaConfig = exports.semverGte = exports.selectUpdate = exports.getLocalPatchPath = exports.getLocalAssetPath = exports.fetchOtaManifest = exports.applyOtaPatchInternal = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
7
8
|
var _NativeBsPatch = _interopRequireDefault(require("../NativeBsPatch"));
|
|
9
|
+
var _entrySignature = require("./entrySignature");
|
|
8
10
|
var _otaLogger = require("./otaLogger");
|
|
9
11
|
var _otaMetadata = require("./otaMetadata");
|
|
10
|
-
var
|
|
12
|
+
var _R2Storage = require("./storage/R2Storage");
|
|
11
13
|
var _types = require("./types");
|
|
12
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
15
|
/**
|
|
@@ -25,9 +27,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
25
27
|
|
|
26
28
|
// ─── Storage Provider Factory ──────────────────────────────────────────
|
|
27
29
|
|
|
28
|
-
const DEFAULT_STORAGE = new
|
|
30
|
+
const DEFAULT_STORAGE = new _R2Storage.R2StorageProvider();
|
|
29
31
|
|
|
30
|
-
/** Explicit `config.storage` or the default
|
|
32
|
+
/** Explicit `config.storage` or the default provider (R2 public URL). */
|
|
31
33
|
const getStorage = config => config.storage ?? DEFAULT_STORAGE;
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -95,27 +97,58 @@ const verifyHash = async (path, expectedHash) => {
|
|
|
95
97
|
};
|
|
96
98
|
|
|
97
99
|
/**
|
|
98
|
-
* When
|
|
99
|
-
*
|
|
100
|
+
* When there is a public key (config.publicKey, else the embedded ones), an RSA/ECDSA
|
|
101
|
+
* SHA-256 signature is mandatory and must verify against one of them (fail closed):
|
|
102
|
+
* the backup key takes over without a store build if the primary is lost.
|
|
100
103
|
*/
|
|
101
104
|
exports.verifyHash = verifyHash;
|
|
102
105
|
const assertSigned = async (filePath, signature, config, what) => {
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
const keys = (0, _entrySignature.parsePublicKeys)(config.publicKey);
|
|
107
|
+
if (keys.length === 0) return;
|
|
108
|
+
let valid = false;
|
|
109
|
+
for (const key of signature ? keys : []) {
|
|
110
|
+
if (await _NativeBsPatch.default.verifySignature(filePath, signature, key).catch(() => false)) {
|
|
111
|
+
valid = true;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
105
115
|
if (!valid) {
|
|
106
116
|
throw new Error(`${what} signature missing or invalid`);
|
|
107
117
|
}
|
|
108
118
|
};
|
|
109
119
|
|
|
120
|
+
/**
|
|
121
|
+
* With config.publicKey the registry entry itself must be signed and meant for this app,
|
|
122
|
+
* so a registry served by someone else (e.g. a lapsed domain) can't hand over another
|
|
123
|
+
* flavor's, platform's or release's signed bundle, or swap the asset manifest.
|
|
124
|
+
*/
|
|
125
|
+
const assertEntrySigned = async (patch, config) => {
|
|
126
|
+
if ((0, _entrySignature.parsePublicKeys)(config.publicKey).length === 0) return;
|
|
127
|
+
const channel = config.customServer?.channel;
|
|
128
|
+
const mismatch = patch.appVersion !== config.appVersion ? 'appVersion' : patch.platform !== _reactNative.Platform.OS ? 'platform' : channel && patch.flavor !== (0, _R2Storage.normalizeChannel)(channel) ? 'flavor' : patch.assetManifestUrl && !patch.assetManifestHash ? 'assetManifestHash' : null;
|
|
129
|
+
if (mismatch) {
|
|
130
|
+
throw new Error(`Registry entry rejected: ${mismatch} doesn't match this app`);
|
|
131
|
+
}
|
|
132
|
+
const payloadPath = `${_otaMetadata.OTA_DIR}/entry-payload.txt`;
|
|
133
|
+
await _NativeBsPatch.default.writeFile(payloadPath, (0, _entrySignature.entryPayload)(patch));
|
|
134
|
+
try {
|
|
135
|
+
await assertSigned(payloadPath, patch.entrySignature, config, 'Registry entry');
|
|
136
|
+
} finally {
|
|
137
|
+
await _NativeBsPatch.default.removePath(payloadPath).catch(() => {});
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
|
|
110
141
|
/**
|
|
111
142
|
* Download a file with retry logic using exponential backoff.
|
|
112
143
|
* Native streams to `${destPath}.part` and renames only on a 2xx response, so a
|
|
113
|
-
* cut-off download or an error page never sits at destPath looking complete
|
|
144
|
+
* cut-off download or an error page never sits at destPath looking complete;
|
|
145
|
+
* each retry resumes where the last attempt stopped.
|
|
114
146
|
* @returns Size of the downloaded file in bytes
|
|
115
147
|
*/
|
|
116
148
|
const downloadWithRetry = async (url, destPath, config, onProgress) => {
|
|
117
149
|
const retryLimit = Math.max(1, config.network?.retry ?? 3);
|
|
118
150
|
const timeout = config.network?.timeoutMs ?? 30000;
|
|
151
|
+
const headers = JSON.stringify(config.customServer?.headers ?? {});
|
|
119
152
|
const subscription = _NativeBsPatch.default.onDownloadProgress(e => {
|
|
120
153
|
// total is -1 without a Content-Length
|
|
121
154
|
if (e.path === destPath && e.total > 0) {
|
|
@@ -125,7 +158,7 @@ const downloadWithRetry = async (url, destPath, config, onProgress) => {
|
|
|
125
158
|
try {
|
|
126
159
|
for (let i = 0;; i++) {
|
|
127
160
|
try {
|
|
128
|
-
return await _NativeBsPatch.default.downloadFile(url, destPath, timeout);
|
|
161
|
+
return await _NativeBsPatch.default.downloadFile(url, destPath, timeout, headers);
|
|
129
162
|
} catch (e) {
|
|
130
163
|
if (i >= retryLimit - 1) throw e;
|
|
131
164
|
const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
|
|
@@ -169,13 +202,20 @@ const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith(
|
|
|
169
202
|
* transformer (which raced the first render). Files are fetched once per content
|
|
170
203
|
* hash into ota/assets/ and copied from there for later versions.
|
|
171
204
|
*/
|
|
172
|
-
const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onStatus, onProgress) => {
|
|
205
|
+
const downloadAndSyncAssets = async (assetManifestUrl, assetManifestHash, version, config, log, onStatus, onProgress) => {
|
|
173
206
|
const fs = _NativeBsPatch.default;
|
|
174
207
|
onStatus(_types.OtaStatus.SYNCING_ASSETS, 'Syncing assets...');
|
|
175
208
|
const versionDir = `${_otaMetadata.OTA_DIR}/v${version}`;
|
|
176
209
|
let assets = [];
|
|
177
210
|
try {
|
|
178
|
-
|
|
211
|
+
// Through a file: its hash is in the (signed) registry entry
|
|
212
|
+
const manifestPath = `${versionDir}/asset-manifest.json`;
|
|
213
|
+
await downloadWithRetry(assetManifestUrl, manifestPath, config, () => {});
|
|
214
|
+
if (!(await verifyHash(manifestPath, assetManifestHash))) {
|
|
215
|
+
throw new Error('hash mismatch');
|
|
216
|
+
}
|
|
217
|
+
const manifest = JSON.parse(await fs.readFile(manifestPath));
|
|
218
|
+
await fs.removePath(manifestPath).catch(() => {});
|
|
179
219
|
// Hash/ext/path become file names: reject anything unexpected
|
|
180
220
|
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));
|
|
181
221
|
} catch (e) {
|
|
@@ -289,6 +329,7 @@ const selectUpdate = (patchList, localV, targetV) => {
|
|
|
289
329
|
* Full path (store build, no patch, or patch path failed):
|
|
290
330
|
* download full bundle → hash → signature
|
|
291
331
|
* Both then: sync assets → atomic commit → metadata → mark healthy → reload.
|
|
332
|
+
* Only a patch-path failure falls back to the full bundle, never a failed commit.
|
|
292
333
|
*
|
|
293
334
|
* The store build's bundle is never used as a patch source: it can't be
|
|
294
335
|
* reproduced byte-for-byte at build time, so the first OTA is always a full download.
|
|
@@ -318,10 +359,22 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
318
359
|
}
|
|
319
360
|
const log = (0, _otaLogger.createOtaLogger)(config.onEvent);
|
|
320
361
|
await (0, _otaMetadata.ensureOtaDir)();
|
|
362
|
+
try {
|
|
363
|
+
await assertEntrySigned(patch, config);
|
|
364
|
+
} catch (error) {
|
|
365
|
+
log.emit(_otaLogger.OtaEvent.SIGNATURE_INVALID, {
|
|
366
|
+
version: patch.toVersion,
|
|
367
|
+
error: error.message
|
|
368
|
+
});
|
|
369
|
+
onStatus(_types.OtaStatus.ERROR, `Error: ${error.message}`);
|
|
370
|
+
throw error;
|
|
371
|
+
}
|
|
321
372
|
const totalStart = Date.now();
|
|
322
373
|
const fs = _NativeBsPatch.default;
|
|
323
374
|
const finalBundlePath = (0, _otaMetadata.getBundlePath)(patch.toVersion, config.baseAppVersion) || '';
|
|
324
375
|
const tempBundle = `${finalBundlePath}.tmp`;
|
|
376
|
+
/** Compressed full bundle, before decompressing into tempBundle */
|
|
377
|
+
const tempDownload = `${finalBundlePath}.download`;
|
|
325
378
|
const versionDir = `${_otaMetadata.OTA_DIR}/v${patch.toVersion}`;
|
|
326
379
|
const localPatchPath = getLocalPatchPath(patch, _otaMetadata.DOCUMENT_DIR);
|
|
327
380
|
|
|
@@ -343,6 +396,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
343
396
|
throw new Error(`Native app ${currentAppVer} is too old. Update to ${patch.minAppVersion}+ first.`);
|
|
344
397
|
}
|
|
345
398
|
}
|
|
399
|
+
|
|
400
|
+
// Room for the download, the decompressed bundle and its assets; a full disk mid-write
|
|
401
|
+
// would fail later and leave the user's storage fuller
|
|
402
|
+
const needBytes = (patch.bundleSize ?? 0) * 3 + 20 * 1024 * 1024;
|
|
403
|
+
const freeBytes = await fs.getFreeDiskSpace().catch(() => Number.MAX_SAFE_INTEGER);
|
|
404
|
+
if (freeBytes < needBytes) {
|
|
405
|
+
throw new Error(`Not enough free storage: ${Math.ceil(needBytes / 1048576)} MB needed`);
|
|
406
|
+
}
|
|
346
407
|
await fs.mkdir(versionDir);
|
|
347
408
|
const download = async (remoteName, dest) => {
|
|
348
409
|
log.emit(_otaLogger.OtaEvent.DOWNLOAD_START, {
|
|
@@ -385,12 +446,11 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
385
446
|
});
|
|
386
447
|
throw new Error(`${what} hash mismatch`);
|
|
387
448
|
};
|
|
388
|
-
|
|
389
449
|
/** tempBundle is verified: sync assets, swap it in, record the version, reload. */
|
|
390
450
|
const commit = async metrics => {
|
|
391
451
|
if (patch.assetManifestUrl) {
|
|
392
452
|
const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
393
|
-
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
453
|
+
await downloadAndSyncAssets(manifestUrl, patch.assetManifestHash, patch.toVersion, config, log, onStatus, onProgress);
|
|
394
454
|
}
|
|
395
455
|
await fs.moveFile(tempBundle, finalBundlePath);
|
|
396
456
|
|
|
@@ -417,6 +477,8 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
417
477
|
console.log(`[otaCore] V${patch.toVersion} prepared in background — applies on next launch.`);
|
|
418
478
|
}
|
|
419
479
|
};
|
|
480
|
+
|
|
481
|
+
/** Leaves the verified result at tempBundle. */
|
|
420
482
|
const applyPatchFile = async sourcePath => {
|
|
421
483
|
onStatus(_types.OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion}...`);
|
|
422
484
|
const {
|
|
@@ -452,12 +514,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
452
514
|
}
|
|
453
515
|
await assertHash(tempBundle, patch.bundleHash, 'Result bundle');
|
|
454
516
|
await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
|
|
455
|
-
|
|
517
|
+
return {
|
|
456
518
|
patchSizeKB: sizeBytes / 1024,
|
|
457
519
|
downloadMs,
|
|
458
520
|
applyMs
|
|
459
|
-
}
|
|
521
|
+
};
|
|
460
522
|
};
|
|
523
|
+
|
|
524
|
+
/** Leaves the verified full bundle at tempBundle. */
|
|
461
525
|
const installFullBundle = async () => {
|
|
462
526
|
if (!patch.fullBundleUrl) {
|
|
463
527
|
throw new Error(`No full bundle for V${patch.toVersion}`);
|
|
@@ -466,31 +530,42 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
466
530
|
version: patch.toVersion
|
|
467
531
|
});
|
|
468
532
|
onStatus(_types.OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion} (full bundle)...`);
|
|
533
|
+
const compression = patch.fullBundleCompression;
|
|
469
534
|
const {
|
|
470
535
|
downloadMs,
|
|
471
536
|
sizeBytes
|
|
472
|
-
} = await download(patch.fullBundleUrl, tempBundle);
|
|
537
|
+
} = await download(patch.fullBundleUrl, compression ? tempDownload : tempBundle);
|
|
538
|
+
if (compression) {
|
|
539
|
+
onStatus(_types.OtaStatus.APPLYING, 'Decompressing...');
|
|
540
|
+
await fs.decompressFile(tempDownload, tempBundle, compression);
|
|
541
|
+
await fs.removePath(tempDownload).catch(() => {});
|
|
542
|
+
}
|
|
473
543
|
await assertHash(tempBundle, patch.bundleHash, 'Full bundle');
|
|
474
544
|
await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
|
|
475
|
-
|
|
545
|
+
return {
|
|
476
546
|
patchSizeKB: sizeBytes / 1024,
|
|
477
547
|
downloadMs,
|
|
478
548
|
applyMs: 0
|
|
479
|
-
}
|
|
549
|
+
};
|
|
480
550
|
};
|
|
481
551
|
const cleanup = async () => {
|
|
482
552
|
await fs.removePath(localPatchPath).catch(() => {});
|
|
483
553
|
await fs.removePath(tempBundle).catch(() => {});
|
|
554
|
+
// tempDownload's .part stays: the next attempt resumes it
|
|
555
|
+
await fs.removePath(tempDownload).catch(() => {});
|
|
484
556
|
};
|
|
485
557
|
|
|
486
558
|
// Patch only from an OTA bundle we installed ourselves (byte-identical to the build output)
|
|
487
559
|
const metadata = await (0, _otaMetadata.loadMetadata)(config.baseAppVersion);
|
|
488
560
|
const sourcePath = (0, _otaMetadata.getBundlePath)(metadata.currentVersion, config.baseAppVersion);
|
|
489
561
|
const canPatch = !!patch.filename && patch.fromVersion === metadata.currentVersion && !!sourcePath && (await fs.exists(sourcePath));
|
|
562
|
+
|
|
563
|
+
// Only a failed patch falls back to the full bundle; a failed commit (asset sync)
|
|
564
|
+
// would fail the same way after re-downloading the whole bundle
|
|
565
|
+
let metrics;
|
|
490
566
|
if (canPatch) {
|
|
491
567
|
try {
|
|
492
|
-
await applyPatchFile(sourcePath);
|
|
493
|
-
return;
|
|
568
|
+
metrics = await applyPatchFile(sourcePath);
|
|
494
569
|
} catch (error) {
|
|
495
570
|
await cleanup();
|
|
496
571
|
if (__DEV__) {
|
|
@@ -503,7 +578,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
|
|
|
503
578
|
}
|
|
504
579
|
}
|
|
505
580
|
try {
|
|
506
|
-
await installFullBundle();
|
|
581
|
+
await commit(metrics ?? (await installFullBundle()));
|
|
507
582
|
} catch (error) {
|
|
508
583
|
await cleanup();
|
|
509
584
|
onStatus(_types.OtaStatus.ERROR, `Error: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","_otaLogger","_otaMetadata","_GitHubRawStorage","_types","e","__esModule","default","DEFAULT_STORAGE","GitHubRawStorageProvider","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","exports","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","NativeBsPatch","hashFile","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","verifySignature","catch","Error","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","subscription","onDownloadProgress","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","OTA_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","fs","OtaStatus","SYNCING_ASSETS","versionDir","assets","manifest","fetchJson","filter","ext","originalPath","message","length","writeFile","ASSET_LIST_FILE","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","OtaEvent","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","createOtaLogger","onEvent","ensureOtaDir","totalStart","Date","now","finalBundlePath","getBundlePath","baseAppVersion","tempBundle","localPatchPath","DOCUMENT_DIR","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","updateMetadata","registerNewVersion","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","loadMetadata","currentVersion","canPatch","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeBsPatch","_interopRequireDefault","_entrySignature","_otaLogger","_otaMetadata","_R2Storage","_types","e","__esModule","default","DEFAULT_STORAGE","R2StorageProvider","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","exports","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","NativeBsPatch","hashFile","toLowerCase","assertSigned","filePath","signature","what","keys","parsePublicKeys","publicKey","length","valid","key","verifySignature","catch","Error","assertEntrySigned","patch","mismatch","appVersion","platform","Platform","OS","flavor","normalizeChannel","assetManifestUrl","assetManifestHash","payloadPath","OTA_DIR","writeFile","entryPayload","entrySignature","removePath","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","headers","subscription","onDownloadProgress","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","OtaStatus","SYNCING_ASSETS","versionDir","assets","manifestPath","manifest","parse","readFile","filter","ext","originalPath","message","ASSET_LIST_FILE","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","OtaEvent","DOWNLOAD_SUCCESS","getLocalPatchPath","docDir","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","createOtaLogger","onEvent","ensureOtaDir","error","SIGNATURE_INVALID","ERROR","totalStart","Date","now","finalBundlePath","getBundlePath","baseAppVersion","tempBundle","tempDownload","localPatchPath","DOCUMENT_DIR","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","updateMetadata","registerNewVersion","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","loadMetadata","currentVersion","canPatch"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.fetchJson = exports.
|
|
6
|
+
exports.normalizeChannel = exports.fetchJson = exports.R2StorageProvider = void 0;
|
|
7
7
|
/**
|
|
8
|
-
* Storage Provider for
|
|
9
|
-
*
|
|
8
|
+
* Storage Provider for the public URL of a Cloudflare R2 bucket (r2.dev or a custom
|
|
9
|
+
* domain): plain HTTP GETs, so any static host serving the same layout also works.
|
|
10
10
|
*
|
|
11
11
|
* Direct URL mapping:
|
|
12
12
|
* - Manifest: `${baseUrl}/${baseFolder}/ota_registry.json`
|
|
@@ -14,22 +14,25 @@ exports.fetchJson = exports.GitHubRawStorageProvider = void 0;
|
|
|
14
14
|
* - Assets: `${baseUrl}/${baseFolder}/assets/${hash}.${ext}`
|
|
15
15
|
*
|
|
16
16
|
* NOTE: Only the registry is mutable: it is fetched with Cache-Control: no-cache
|
|
17
|
-
* and a timestamp query param (
|
|
17
|
+
* and a timestamp query param (the CDN in front of the bucket may cache it). Bundles,
|
|
18
18
|
* patches, manifests and assets are never overwritten, so they stay cacheable.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
/** Headers to bypass
|
|
21
|
+
/** Headers to bypass the CDN cache on mutable files (registry, manifests) */
|
|
22
22
|
const NO_CACHE_HEADERS = {
|
|
23
23
|
'Cache-Control': 'no-cache'
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
/** GET + JSON.parse with a timeout (fetch has none of its own); rejects on non-2xx. */
|
|
27
|
-
const fetchJson = async (url, timeoutMs) => {
|
|
27
|
+
const fetchJson = async (url, timeoutMs, headers) => {
|
|
28
28
|
const controller = new AbortController();
|
|
29
29
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
30
30
|
try {
|
|
31
31
|
const res = await fetch(url, {
|
|
32
|
-
headers:
|
|
32
|
+
headers: {
|
|
33
|
+
...NO_CACHE_HEADERS,
|
|
34
|
+
...headers
|
|
35
|
+
},
|
|
33
36
|
signal: controller.signal
|
|
34
37
|
});
|
|
35
38
|
if (!res.ok) {
|
|
@@ -50,31 +53,33 @@ const normalizeChannel = channel => {
|
|
|
50
53
|
if (lower === 'prod') return 'production';
|
|
51
54
|
return lower;
|
|
52
55
|
};
|
|
53
|
-
|
|
56
|
+
exports.normalizeChannel = normalizeChannel;
|
|
57
|
+
class R2StorageProvider {
|
|
54
58
|
async fetchManifest(config) {
|
|
55
59
|
if (!config.customServer) {
|
|
56
|
-
throw new Error('[
|
|
60
|
+
throw new Error('[R2Storage] customServer configuration missing');
|
|
57
61
|
}
|
|
58
62
|
const {
|
|
59
63
|
baseUrl,
|
|
60
64
|
channel,
|
|
61
|
-
baseFolder = 'ota'
|
|
65
|
+
baseFolder = 'ota',
|
|
66
|
+
headers
|
|
62
67
|
} = config.customServer;
|
|
63
68
|
const channelName = normalizeChannel(channel);
|
|
64
69
|
const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
65
70
|
// Cache-bust: registry is mutable; must always fetch the latest version
|
|
66
71
|
const registryUrl = bustCache(`${normalizedBaseUrl}/${baseFolder}/ota_registry.json`);
|
|
67
72
|
try {
|
|
68
|
-
const registry = await fetchJson(registryUrl, 15000);
|
|
73
|
+
const registry = await fetchJson(registryUrl, 15000, headers);
|
|
69
74
|
if (!config.appVersion) {
|
|
70
|
-
throw new Error('[
|
|
75
|
+
throw new Error('[R2Storage] config.appVersion is required to query OTA registry');
|
|
71
76
|
}
|
|
72
77
|
const appGroup = registry?.apps?.[config.appVersion];
|
|
73
78
|
const flavorGroup = appGroup?.flavors?.[channelName];
|
|
74
79
|
return flavorGroup?.patches ?? [];
|
|
75
80
|
} catch (error) {
|
|
76
81
|
// Surface it: "no patches" would report a broken registry as up to date
|
|
77
|
-
throw new Error(`[
|
|
82
|
+
throw new Error(`[R2Storage] Manifest fetch error: ${error.message}`);
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
async getUpdateFileUrl(filename, config) {
|
|
@@ -104,5 +109,5 @@ class GitHubRawStorageProvider {
|
|
|
104
109
|
return `${normalizedBaseUrl}/${baseFolder}/assets/${hash}.${ext}`;
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
|
-
exports.
|
|
108
|
-
//# sourceMappingURL=
|
|
112
|
+
exports.R2StorageProvider = R2StorageProvider;
|
|
113
|
+
//# 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","exports","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","exports","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAuBYA,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;
|
|
1
|
+
{"version":3,"names":["OtaUpdateMode","exports","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAuBYA,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAgEzB;AACA;AACA;AAFA,IA8FYE,SAAS,GAAAD,OAAA,CAAAC,SAAA,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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBsPatch.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBsPatch.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AA4HlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -13,7 +13,8 @@ export function reloadBundle() {
|
|
|
13
13
|
export * from './ota/otaLogger';
|
|
14
14
|
export * from './ota/OtaProvider';
|
|
15
15
|
export * from './ota/types';
|
|
16
|
-
export {
|
|
16
|
+
export { R2StorageProvider, /** @deprecated Renamed to R2StorageProvider */
|
|
17
|
+
R2StorageProvider as GitHubRawStorageProvider } from './ota/storage/R2Storage';
|
|
17
18
|
export default {
|
|
18
19
|
applyPatch,
|
|
19
20
|
reloadBundle,
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeBsPatch","applyPatch","oldBundlePath","newBundlePath","patchPath","markAsHealthy","reloadBundle","GitHubRawStorageProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,iBAAiB;AAE3C,OAAO,SAASC,UAAUA,CACxBC,aAAqB,EACrBC,aAAqB,EACrBC,SAAiB,EACC;EAClB,OAAOJ,aAAa,CAACC,UAAU,CAACC,aAAa,EAAEC,aAAa,EAAEC,SAAS,CAAC;AAC1E;AAEA,OAAO,SAASC,aAAaA,CAAA,EAAS;EACpC,OAAOL,aAAa,CAACK,aAAa,CAAC,CAAC;AACtC;AAEA,OAAO,SAASC,YAAYA,CAAA,EAAS;EACnC,OAAON,aAAa,CAACM,YAAY,CAAC,CAAC;AACrC;AAEA,cAAc,iBAAiB;AAC/B,cAAc,mBAAmB;AACjC,cAAc,aAAa;AAE3B,
|
|
1
|
+
{"version":3,"names":["NativeBsPatch","applyPatch","oldBundlePath","newBundlePath","patchPath","markAsHealthy","reloadBundle","R2StorageProvider","GitHubRawStorageProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,iBAAiB;AAE3C,OAAO,SAASC,UAAUA,CACxBC,aAAqB,EACrBC,aAAqB,EACrBC,SAAiB,EACC;EAClB,OAAOJ,aAAa,CAACC,UAAU,CAACC,aAAa,EAAEC,aAAa,EAAEC,SAAS,CAAC;AAC1E;AAEA,OAAO,SAASC,aAAaA,CAAA,EAAS;EACpC,OAAOL,aAAa,CAACK,aAAa,CAAC,CAAC;AACtC;AAEA,OAAO,SAASC,YAAYA,CAAA,EAAS;EACnC,OAAON,aAAa,CAACM,YAAY,CAAC,CAAC;AACrC;AAEA,cAAc,iBAAiB;AAC/B,cAAc,mBAAmB;AACjC,cAAc,aAAa;AAE3B,SACEC,iBAAiB,EACjB;AACAA,iBAAiB,IAAIC,wBAAwB,QACxC,yBAAyB;AAEhC,eAAe;EACbP,UAAU;EACVK,YAAY;EACZD;AACF,CAAC","ignoreList":[]}
|