react-native-bspatch 1.1.4 → 2.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 +22 -32
- package/android/src/main/java/vn/reactnativebspatch/BsPatchModule.kt +15 -102
- package/android/src/main/java/vn/reactnativebspatch/OtaBundleResolver.kt +21 -1
- package/cpp/bsdiff/bspatch.c +1 -0
- package/ios/OtaBundleResolver.swift +16 -1
- package/ios/RNBsPatch.mm +61 -154
- package/lib/commonjs/NativeBsPatch.js.map +1 -1
- package/lib/commonjs/index.js +4 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ota/OtaProvider.js +26 -22
- package/lib/commonjs/ota/OtaProvider.js.map +1 -1
- package/lib/commonjs/ota/otaAssetResolver.js +8 -2
- package/lib/commonjs/ota/otaAssetResolver.js.map +1 -1
- package/lib/commonjs/ota/otaCore.js +89 -141
- package/lib/commonjs/ota/otaCore.js.map +1 -1
- package/lib/commonjs/ota/otaLogger.js +0 -2
- package/lib/commonjs/ota/otaLogger.js.map +1 -1
- package/lib/commonjs/ota/otaMetadata.js +18 -7
- package/lib/commonjs/ota/otaMetadata.js.map +1 -1
- package/lib/commonjs/ota/storage/GitHubRawStorage.js +3 -1
- package/lib/commonjs/ota/storage/GitHubRawStorage.js.map +1 -1
- package/lib/commonjs/ota/types.js +1 -10
- package/lib/commonjs/ota/types.js.map +1 -1
- package/lib/module/NativeBsPatch.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/ota/OtaProvider.js +26 -22
- package/lib/module/ota/OtaProvider.js.map +1 -1
- package/lib/module/ota/otaAssetResolver.js +8 -2
- package/lib/module/ota/otaAssetResolver.js.map +1 -1
- package/lib/module/ota/otaCore.js +88 -139
- package/lib/module/ota/otaCore.js.map +1 -1
- package/lib/module/ota/otaLogger.js +0 -2
- package/lib/module/ota/otaLogger.js.map +1 -1
- package/lib/module/ota/otaMetadata.js +18 -7
- package/lib/module/ota/otaMetadata.js.map +1 -1
- package/lib/module/ota/storage/GitHubRawStorage.js +3 -1
- package/lib/module/ota/storage/GitHubRawStorage.js.map +1 -1
- package/lib/module/ota/types.js +0 -9
- package/lib/module/ota/types.js.map +1 -1
- package/lib/typescript/NativeBsPatch.d.ts +3 -15
- package/lib/typescript/NativeBsPatch.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/ota/OtaProvider.d.ts.map +1 -1
- package/lib/typescript/ota/otaAssetResolver.d.ts.map +1 -1
- package/lib/typescript/ota/otaCore.d.ts +5 -42
- package/lib/typescript/ota/otaCore.d.ts.map +1 -1
- package/lib/typescript/ota/otaLogger.d.ts +1 -3
- package/lib/typescript/ota/otaLogger.d.ts.map +1 -1
- package/lib/typescript/ota/otaMetadata.d.ts +2 -2
- package/lib/typescript/ota/otaMetadata.d.ts.map +1 -1
- package/lib/typescript/ota/types.d.ts +18 -54
- package/lib/typescript/ota/types.d.ts.map +1 -1
- package/package.json +3 -6
- package/react-native-bspatch.podspec +0 -1
- package/src/NativeBsPatch.ts +3 -16
- package/src/index.ts +1 -1
- package/src/ota/OtaProvider.tsx +24 -23
- package/src/ota/otaAssetResolver.ts +5 -2
- package/src/ota/otaCore.ts +118 -176
- package/src/ota/otaLogger.ts +0 -2
- package/src/ota/otaMetadata.ts +18 -8
- package/src/ota/storage/GitHubRawStorage.ts +1 -1
- package/src/ota/types.ts +18 -57
- package/tools/build_ota.sh +117 -183
- package/tools/setup_project.js +33 -14
- package/tools/update_registry.js +24 -28
- package/tools/{upload_ota_custom.sh → upload_ota.sh} +33 -114
- package/lib/commonjs/crypto-js.d.js +0 -2
- package/lib/commonjs/crypto-js.d.js.map +0 -1
- package/lib/commonjs/ota/storage/CustomStorage.js +0 -160
- package/lib/commonjs/ota/storage/CustomStorage.js.map +0 -1
- package/lib/commonjs/ota/storage/GitHubReleaseStorage.js +0 -99
- package/lib/commonjs/ota/storage/GitHubReleaseStorage.js.map +0 -1
- package/lib/module/crypto-js.d.js +0 -2
- package/lib/module/crypto-js.d.js.map +0 -1
- package/lib/module/ota/storage/CustomStorage.js +0 -154
- package/lib/module/ota/storage/CustomStorage.js.map +0 -1
- package/lib/module/ota/storage/GitHubReleaseStorage.js +0 -93
- package/lib/module/ota/storage/GitHubReleaseStorage.js.map +0 -1
- package/lib/typescript/ota/storage/CustomStorage.d.ts +0 -12
- package/lib/typescript/ota/storage/CustomStorage.d.ts.map +0 -1
- package/lib/typescript/ota/storage/GitHubReleaseStorage.d.ts +0 -20
- package/lib/typescript/ota/storage/GitHubReleaseStorage.d.ts.map +0 -1
- package/src/crypto-js.d.ts +0 -1
- package/src/ota/storage/CustomStorage.ts +0 -166
- package/src/ota/storage/GitHubReleaseStorage.ts +0 -103
- package/tools/bsdiff +0 -0
|
@@ -3,15 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.verifyHash = exports.semverGte = exports.getLocalPatchPath = exports.getLocalAssetPath = exports.fetchOtaManifest = exports.applyOtaPatchInternal = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _reactNativeBlobUtil = _interopRequireDefault(require("react-native-blob-util"));
|
|
9
|
-
var _cryptoJs = _interopRequireDefault(require("crypto-js"));
|
|
10
9
|
var _NativeBsPatch = _interopRequireDefault(require("../NativeBsPatch"));
|
|
11
10
|
var _otaLogger = require("./otaLogger");
|
|
12
11
|
var _otaMetadata = require("./otaMetadata");
|
|
13
|
-
var _CustomStorage = require("./storage/CustomStorage");
|
|
14
|
-
var _GitHubReleaseStorage = require("./storage/GitHubReleaseStorage");
|
|
15
12
|
var _GitHubRawStorage = require("./storage/GitHubRawStorage");
|
|
16
13
|
var _types = require("./types");
|
|
17
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -21,8 +18,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
21
18
|
* Responsibilities:
|
|
22
19
|
* - Download patches with retry
|
|
23
20
|
* - Verify integrity (SHA-256 hash)
|
|
24
|
-
* - Verify security (
|
|
25
|
-
* - Handle gzip decompression
|
|
21
|
+
* - Verify security (RSA/ECDSA signature)
|
|
26
22
|
* - Apply binary patch (bsdiff)
|
|
27
23
|
* - Atomic bundle swap
|
|
28
24
|
* - Full bundle fallback on failure
|
|
@@ -33,20 +29,10 @@ const OTA_DIR = `${_reactNativeBlobUtil.default.fs.dirs.DocumentDir}/ota`;
|
|
|
33
29
|
|
|
34
30
|
// ─── Storage Provider Factory ──────────────────────────────────────────
|
|
35
31
|
|
|
36
|
-
const DEFAULT_STORAGE = new
|
|
37
|
-
const GITHUB_STORAGE = new _GitHubReleaseStorage.GitHubReleaseStorageProvider();
|
|
38
|
-
const GITHUB_RAW_STORAGE = new _GitHubRawStorage.GitHubRawStorageProvider();
|
|
32
|
+
const DEFAULT_STORAGE = new _GitHubRawStorage.GitHubRawStorageProvider();
|
|
39
33
|
|
|
40
|
-
/**
|
|
41
|
-
|
|
42
|
-
* Priority: explicit storage instance > storageType > default (CustomStorage)
|
|
43
|
-
*/
|
|
44
|
-
const getStorage = config => {
|
|
45
|
-
if (config.storage) return config.storage;
|
|
46
|
-
if (config.storageType === _types.OtaStorageType.GITHUB) return GITHUB_STORAGE;
|
|
47
|
-
if (config.storageType === _types.OtaStorageType.GITHUB_RAW) return GITHUB_RAW_STORAGE;
|
|
48
|
-
return DEFAULT_STORAGE;
|
|
49
|
-
};
|
|
34
|
+
/** Explicit `config.storage` (e.g. a future Cloudflare provider) or GitHub raw. */
|
|
35
|
+
const getStorage = config => config.storage ?? DEFAULT_STORAGE;
|
|
50
36
|
|
|
51
37
|
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
52
38
|
|
|
@@ -93,82 +79,16 @@ const verifyHash = async (path, expectedHash) => {
|
|
|
93
79
|
};
|
|
94
80
|
|
|
95
81
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* Uses CryptoJS to verify that the signature matches the file content
|
|
99
|
-
* using the provided HMAC key.
|
|
100
|
-
*
|
|
101
|
-
* @param filePath - Path to the file to verify
|
|
102
|
-
* @param signature - Base64-encoded HMAC signature to verify against
|
|
103
|
-
* @param publicKey - Base64-encoded HMAC key
|
|
104
|
-
* @returns true if signature is valid, false otherwise
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* // Server-side (Node.js) - generate signature:
|
|
108
|
-
* const crypto = require('crypto');
|
|
109
|
-
* const key = crypto.randomBytes(32).toString('base64');
|
|
110
|
-
* const fileBuffer = fs.readFileSync('bundle.patch');
|
|
111
|
-
* const signature = crypto.createHmac('sha256', Buffer.from(key, 'base64'))
|
|
112
|
-
* .update(fileBuffer)
|
|
113
|
-
* .digest('base64');
|
|
82
|
+
* When `config.publicKey` is set, an RSA/ECDSA SHA-256 signature is mandatory
|
|
83
|
+
* and must verify (fail closed). Without a public key, signing is not enforced.
|
|
114
84
|
*/
|
|
115
85
|
exports.verifyHash = verifyHash;
|
|
116
|
-
const
|
|
117
|
-
if (!
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const isValid = await _NativeBsPatch.default.verifySignature(filePath, signature, publicKey);
|
|
122
|
-
if (!isValid && __DEV__) {
|
|
123
|
-
console.warn('[otaCore] Signature mismatch');
|
|
124
|
-
}
|
|
125
|
-
return isValid;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Fallback to JS CryptoJS if native module is running an older binary
|
|
129
|
-
const fileData = await _reactNativeBlobUtil.default.fs.readFile(filePath, 'base64');
|
|
130
|
-
const fileWords = _cryptoJs.default.enc.Base64.parse(fileData);
|
|
131
|
-
const keyWords = _cryptoJs.default.enc.Base64.parse(publicKey);
|
|
132
|
-
const signatureWords = _cryptoJs.default.enc.Base64.parse(signature);
|
|
133
|
-
const hmac = _cryptoJs.default.HmacSHA256(fileWords, keyWords);
|
|
134
|
-
const isValid = hmac.toString(_cryptoJs.default.enc.Base64) === signatureWords.toString(_cryptoJs.default.enc.Base64);
|
|
135
|
-
if (!isValid && __DEV__) {
|
|
136
|
-
console.warn('[otaCore] Signature mismatch');
|
|
137
|
-
}
|
|
138
|
-
return isValid;
|
|
139
|
-
} catch (error) {
|
|
140
|
-
if (__DEV__) {
|
|
141
|
-
console.error('[otaCore] Signature verification failed:', error);
|
|
142
|
-
}
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Decompress a .gz file in-place using native helpers.
|
|
149
|
-
* Falls back to skipping decompression if no native helper is available,
|
|
150
|
-
* but enforces that the patch file must NOT be gzip-compressed in that case.
|
|
151
|
-
*/
|
|
152
|
-
exports.verifySignature = verifySignature;
|
|
153
|
-
const decompressGzip = async filePath => {
|
|
154
|
-
if (!filePath.endsWith('.gz')) {
|
|
155
|
-
return filePath;
|
|
156
|
-
}
|
|
157
|
-
const decompressedPath = filePath.replace(/\.gz$/, '');
|
|
158
|
-
try {
|
|
159
|
-
const success = await _NativeBsPatch.default.decompressGzip(filePath, decompressedPath);
|
|
160
|
-
if (success) {
|
|
161
|
-
return decompressedPath;
|
|
162
|
-
}
|
|
163
|
-
} catch {
|
|
164
|
-
// Native decompress not available — fall through
|
|
86
|
+
const assertSigned = async (filePath, signature, config, what) => {
|
|
87
|
+
if (!config.publicKey) return;
|
|
88
|
+
const valid = !!signature && (await _NativeBsPatch.default.verifySignature(filePath, signature, config.publicKey).catch(() => false));
|
|
89
|
+
if (!valid) {
|
|
90
|
+
throw new Error(`${what} signature missing or invalid`);
|
|
165
91
|
}
|
|
166
|
-
|
|
167
|
-
// No native gzip support: abort if file is actually compressed.
|
|
168
|
-
// Do NOT silently rename a .gz file to .patch — bspatch will read gzip
|
|
169
|
-
// magic bytes and fail with a confusing error.
|
|
170
|
-
console.error('[otaCore] .gz decompression is not supported on this platform. ' + 'Ensure the OTA server sends uncompressed patches (compressed: false).');
|
|
171
|
-
throw new Error('Gzip decompression is not supported on this platform.');
|
|
172
92
|
};
|
|
173
93
|
|
|
174
94
|
/**
|
|
@@ -180,10 +100,13 @@ const downloadWithRetry = async (url, destPath, config, onProgress, headers = {}
|
|
|
180
100
|
const timeout = config.network?.timeoutMs ?? 30000;
|
|
181
101
|
for (let i = 0; i < retryLimit; i++) {
|
|
182
102
|
let taskRef = null;
|
|
103
|
+
// Download to .part and rename only on a 2xx response, so a cut-off
|
|
104
|
+
// download or an error page never sits at destPath looking complete.
|
|
105
|
+
const partPath = `${destPath}.part`;
|
|
183
106
|
try {
|
|
184
107
|
const task = _reactNativeBlobUtil.default.config({
|
|
185
108
|
fileCache: true,
|
|
186
|
-
path:
|
|
109
|
+
path: partPath,
|
|
187
110
|
followRedirect: true,
|
|
188
111
|
timeout
|
|
189
112
|
}).fetch('GET', url, {
|
|
@@ -196,11 +119,20 @@ const downloadWithRetry = async (url, destPath, config, onProgress, headers = {}
|
|
|
196
119
|
taskRef = {
|
|
197
120
|
cancel: () => task.cancel()
|
|
198
121
|
};
|
|
199
|
-
await task;
|
|
122
|
+
const resp = await task;
|
|
123
|
+
const status = resp.respInfo.status;
|
|
124
|
+
if (status < 200 || status >= 300) {
|
|
125
|
+
throw new Error(`HTTP ${status} for ${url}`);
|
|
126
|
+
}
|
|
127
|
+
if (await _reactNativeBlobUtil.default.fs.exists(destPath)) {
|
|
128
|
+
await _reactNativeBlobUtil.default.fs.unlink(destPath);
|
|
129
|
+
}
|
|
130
|
+
await _reactNativeBlobUtil.default.fs.mv(partPath, destPath);
|
|
200
131
|
return;
|
|
201
132
|
} catch (e) {
|
|
202
133
|
// Cancel any lingering request before retrying
|
|
203
134
|
taskRef?.cancel();
|
|
135
|
+
await _reactNativeBlobUtil.default.fs.unlink(partPath).catch(() => {});
|
|
204
136
|
if (i === retryLimit - 1) throw e;
|
|
205
137
|
const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
|
|
206
138
|
if (__DEV__) {
|
|
@@ -282,12 +214,11 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
282
214
|
}
|
|
283
215
|
const manifest = JSON.parse(manifestData);
|
|
284
216
|
// Filter out base assets, we don't need to download them
|
|
285
|
-
|
|
217
|
+
// Hash/ext become file names: reject anything that isn't a plain sha256 + extension
|
|
218
|
+
assets = (manifest.assets || []).filter(a => !a.isBase && /^[a-f0-9]{64}$/i.test(a.hash) && /^[a-z0-9]+$/i.test(a.ext));
|
|
286
219
|
} catch (e) {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
return;
|
|
220
|
+
// Fatal: activating the bundle without its manifest leaves images unresolved
|
|
221
|
+
throw new Error(`Failed to fetch asset manifest: ${e.message}`);
|
|
291
222
|
}
|
|
292
223
|
if (assets.length === 0) {
|
|
293
224
|
if (__DEV__) {
|
|
@@ -301,6 +232,7 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
301
232
|
let processed = 0;
|
|
302
233
|
let downloaded = 0;
|
|
303
234
|
let cached = 0;
|
|
235
|
+
let failed = 0;
|
|
304
236
|
const updateProgress = () => {
|
|
305
237
|
processed++;
|
|
306
238
|
const percent = Math.round(processed / assets.length * 100);
|
|
@@ -334,12 +266,11 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
334
266
|
console.warn(`[otaCore] Could not get URL for asset ${filename}`);
|
|
335
267
|
}
|
|
336
268
|
} else {
|
|
337
|
-
await
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}).fetch('GET', assetUrl);
|
|
269
|
+
await downloadWithRetry(assetUrl, localPath, config, () => {});
|
|
270
|
+
if (!(await verifyHash(localPath, asset.hash))) {
|
|
271
|
+
await _reactNativeBlobUtil.default.fs.unlink(localPath).catch(() => {});
|
|
272
|
+
throw new Error('hash mismatch');
|
|
273
|
+
}
|
|
343
274
|
downloaded++;
|
|
344
275
|
log.emit(_otaLogger.OtaEvent.DOWNLOAD_SUCCESS, {
|
|
345
276
|
message: `Asset downloaded: ${filename}`
|
|
@@ -349,7 +280,7 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
349
280
|
if (__DEV__) {
|
|
350
281
|
console.warn(`[otaCore] Failed to download asset ${filename}:`, e);
|
|
351
282
|
}
|
|
352
|
-
//
|
|
283
|
+
failed++; // keep going, fail the sync at the end
|
|
353
284
|
} finally {
|
|
354
285
|
updateProgress();
|
|
355
286
|
await downloadNext(); // Start next download
|
|
@@ -360,6 +291,9 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
360
291
|
const initialWorkers = Math.min(maxConcurrency, assets.length);
|
|
361
292
|
const workers = Array(initialWorkers).fill(null).map(() => downloadNext());
|
|
362
293
|
await Promise.all(workers);
|
|
294
|
+
if (failed > 0) {
|
|
295
|
+
throw new Error(`${failed} asset(s) failed to download`);
|
|
296
|
+
}
|
|
363
297
|
onStatus(_types.OtaStatus.SYNCING_ASSETS, `Assets synced (${downloaded} new, ${cached} cached)`);
|
|
364
298
|
console.log(`[otaCore] Assets: ${downloaded} downloaded, ${cached} from cache`);
|
|
365
299
|
};
|
|
@@ -388,7 +322,7 @@ const getLocalAssetPath = (hash, ext) => `${ASSET_STORE_DIR}/${hash}.${ext}`;
|
|
|
388
322
|
* @returns Absolute path to the patch file
|
|
389
323
|
*/
|
|
390
324
|
exports.getLocalAssetPath = getLocalAssetPath;
|
|
391
|
-
const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.id}.patch`;
|
|
325
|
+
const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.appVersion}-${patch.id}.patch`;
|
|
392
326
|
|
|
393
327
|
// ─── Main Update Pipeline ─────────────────────────────────────────────
|
|
394
328
|
|
|
@@ -398,7 +332,6 @@ const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.id}.pa
|
|
|
398
332
|
* Pipeline:
|
|
399
333
|
* 1. Version compatibility check
|
|
400
334
|
* 2. Download patch (with retry)
|
|
401
|
-
* 3. Decompress (if .gz)
|
|
402
335
|
* 4. Security signature check
|
|
403
336
|
* 5. Resolve source bundle
|
|
404
337
|
* 6. Verify source hash
|
|
@@ -411,7 +344,22 @@ const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.id}.pa
|
|
|
411
344
|
* On failure → fallback to full bundle download if URL available.
|
|
412
345
|
*/
|
|
413
346
|
exports.getLocalPatchPath = getLocalPatchPath;
|
|
414
|
-
|
|
347
|
+
let updateInFlight = false;
|
|
348
|
+
|
|
349
|
+
/** Runs the pipeline below; rejects if another update is already running. */
|
|
350
|
+
const applyOtaPatchInternal = async (...args) => {
|
|
351
|
+
if (updateInFlight) {
|
|
352
|
+
throw new Error('Another OTA update is already in progress');
|
|
353
|
+
}
|
|
354
|
+
updateInFlight = true;
|
|
355
|
+
try {
|
|
356
|
+
return await runUpdatePipeline(...args);
|
|
357
|
+
} finally {
|
|
358
|
+
updateInFlight = false;
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
exports.applyOtaPatchInternal = applyOtaPatchInternal;
|
|
362
|
+
const runUpdatePipeline = async (patch, config, onStatus, onProgress, options = {
|
|
415
363
|
autoReload: true
|
|
416
364
|
}) => {
|
|
417
365
|
if (__DEV__ && config.allowDebugUpdates !== true) {
|
|
@@ -424,6 +372,13 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
424
372
|
const finalBundlePath = (0, _otaMetadata.getBundlePath)(patch.toVersion, config.baseAppVersion) || '';
|
|
425
373
|
const tempBundle = `${finalBundlePath}.tmp`;
|
|
426
374
|
const localPatchPath = getLocalPatchPath(patch, _reactNativeBlobUtil.default.fs.dirs.DocumentDir);
|
|
375
|
+
|
|
376
|
+
// Cached per asset hash, so calling it again in the fallback is cheap
|
|
377
|
+
const syncAssets = async () => {
|
|
378
|
+
if (!patch.assetManifestUrl) return;
|
|
379
|
+
const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
380
|
+
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
381
|
+
};
|
|
427
382
|
try {
|
|
428
383
|
// ── Step 1: Version Compatibility ──
|
|
429
384
|
if (patch.minAppVersion) {
|
|
@@ -483,33 +438,22 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
483
438
|
}
|
|
484
439
|
}
|
|
485
440
|
|
|
486
|
-
// ── Step 3: Decompress if needed ──
|
|
487
|
-
let actualPatchPath = localPatchPath;
|
|
488
|
-
if (patch.compressed) {
|
|
489
|
-
log.emit(_otaLogger.OtaEvent.DECOMPRESS_START);
|
|
490
|
-
onStatus(_types.OtaStatus.APPLYING, 'Decompressing...');
|
|
491
|
-
actualPatchPath = await decompressGzip(localPatchPath);
|
|
492
|
-
log.emit(_otaLogger.OtaEvent.DECOMPRESS_SUCCESS);
|
|
493
|
-
}
|
|
494
|
-
|
|
495
441
|
// ── Step 4: Signature Verification ──
|
|
496
|
-
|
|
442
|
+
// Verify before feeding the patch to native bspatch
|
|
443
|
+
if (config.publicKey) {
|
|
497
444
|
onStatus(_types.OtaStatus.APPLYING, 'Verifying signature...');
|
|
498
|
-
|
|
499
|
-
|
|
445
|
+
try {
|
|
446
|
+
await assertSigned(localPatchPath, patch.signature, config, 'Patch');
|
|
447
|
+
} catch (sigError) {
|
|
500
448
|
log.emit(_otaLogger.OtaEvent.SIGNATURE_INVALID, {
|
|
501
449
|
version: patch.toVersion
|
|
502
450
|
});
|
|
503
|
-
throw
|
|
451
|
+
throw sigError;
|
|
504
452
|
}
|
|
505
453
|
}
|
|
506
454
|
|
|
507
455
|
// ── Step 4.2: Download & Sync Assets ──
|
|
508
|
-
|
|
509
|
-
const storage = getStorage(config);
|
|
510
|
-
const manifestUrl = await storage.getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
511
|
-
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
512
|
-
}
|
|
456
|
+
await syncAssets();
|
|
513
457
|
|
|
514
458
|
// ── Step 5: Resolve Source Bundle ──
|
|
515
459
|
onStatus(_types.OtaStatus.APPLYING, 'Preparing source...');
|
|
@@ -543,15 +487,10 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
543
487
|
// True base: extract byte-for-byte from APK assets.
|
|
544
488
|
// RNFS.copyFileAssets is known to produce inconsistent bytes in some
|
|
545
489
|
// APK configurations (e.g., release signing + resource shrinking).
|
|
490
|
+
// Re-extract every time: a cached copy can be partial or left over
|
|
491
|
+
// from the previous store build. It's one local copy per update.
|
|
546
492
|
actualOldPath = `${OTA_DIR}/base.hbc`;
|
|
547
|
-
|
|
548
|
-
if (__DEV__) {
|
|
549
|
-
console.log(`[otaCore] Source: extracting bundle from APK assets → ${actualOldPath}`);
|
|
550
|
-
}
|
|
551
|
-
await _NativeBsPatch.default.extractBundleFromAssets(bundleFilename, actualOldPath);
|
|
552
|
-
} else if (__DEV__) {
|
|
553
|
-
console.log(`[otaCore] Source: cached APK-extracted bundle → ${actualOldPath}`);
|
|
554
|
-
}
|
|
493
|
+
await _NativeBsPatch.default.extractBundleFromAssets(bundleFilename, actualOldPath);
|
|
555
494
|
}
|
|
556
495
|
} else {
|
|
557
496
|
actualOldPath = oldBundlePath;
|
|
@@ -560,10 +499,10 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
560
499
|
// ── Debug: log file sizes for diagnostic ──
|
|
561
500
|
try {
|
|
562
501
|
const oldStat = await _reactNativeBlobUtil.default.fs.stat(actualOldPath);
|
|
563
|
-
const patchStat = await _reactNativeBlobUtil.default.fs.stat(
|
|
502
|
+
const patchStat = await _reactNativeBlobUtil.default.fs.stat(localPatchPath);
|
|
564
503
|
if (__DEV__) {
|
|
565
504
|
console.log(`[otaCore] DEBUG old bundle size=${oldStat.size} path=${actualOldPath}`);
|
|
566
|
-
console.log(`[otaCore] DEBUG patch size=${patchStat.size} path=${
|
|
505
|
+
console.log(`[otaCore] DEBUG patch size=${patchStat.size} path=${localPatchPath}`);
|
|
567
506
|
console.log(`[otaCore] DEBUG baseHash expected=${patch.baseHash}`);
|
|
568
507
|
}
|
|
569
508
|
} catch {
|
|
@@ -617,7 +556,7 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
617
556
|
});
|
|
618
557
|
onStatus(_types.OtaStatus.APPLYING, 'Applying binary patch...');
|
|
619
558
|
const applyStart = Date.now();
|
|
620
|
-
const success = await _NativeBsPatch.default.applyPatch(actualOldPath, tempBundle,
|
|
559
|
+
const success = await _NativeBsPatch.default.applyPatch(actualOldPath, tempBundle, localPatchPath);
|
|
621
560
|
const applyMs = Date.now() - applyStart;
|
|
622
561
|
if (!success) {
|
|
623
562
|
log.emit(_otaLogger.OtaEvent.PATCH_FAIL, {
|
|
@@ -650,15 +589,17 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
650
589
|
message: 'Result bundle verified'
|
|
651
590
|
});
|
|
652
591
|
}
|
|
592
|
+
await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
|
|
653
593
|
|
|
654
594
|
// ── Step 9: Atomic Commit ──
|
|
655
595
|
if (await _reactNativeBlobUtil.default.fs.exists(finalBundlePath)) {
|
|
656
596
|
await _reactNativeBlobUtil.default.fs.unlink(finalBundlePath);
|
|
657
597
|
}
|
|
658
598
|
await _reactNativeBlobUtil.default.fs.mv(tempBundle, finalBundlePath);
|
|
599
|
+
await _reactNativeBlobUtil.default.fs.unlink(localPatchPath).catch(() => {});
|
|
659
600
|
|
|
660
601
|
// ── Step 10: Update Metadata ──
|
|
661
|
-
const newMetadata = (0, _otaMetadata.registerNewVersion)(metadata, patch.toVersion);
|
|
602
|
+
const newMetadata = (0, _otaMetadata.registerNewVersion)(metadata, patch.toVersion, config.appVersion);
|
|
662
603
|
await (0, _otaMetadata.saveMetadata)(newMetadata);
|
|
663
604
|
const totalMs = Date.now() - totalStart;
|
|
664
605
|
log.emit(_otaLogger.OtaEvent.PATCH_SUCCESS, {
|
|
@@ -691,6 +632,8 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
691
632
|
if (__DEV__) {
|
|
692
633
|
console.error('[otaCore] Pipeline failed:', error);
|
|
693
634
|
}
|
|
635
|
+
await _reactNativeBlobUtil.default.fs.unlink(localPatchPath).catch(() => {});
|
|
636
|
+
await _reactNativeBlobUtil.default.fs.unlink(tempBundle).catch(() => {});
|
|
694
637
|
|
|
695
638
|
// ── Fallback: Full Bundle Download ──
|
|
696
639
|
if (patch.fullBundleUrl) {
|
|
@@ -698,6 +641,10 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
698
641
|
onStatus(_types.OtaStatus.DOWNLOADING, 'Fallback: Downloading full bundle...');
|
|
699
642
|
const storage = getStorage(config);
|
|
700
643
|
const url = await storage.getUpdateFileUrl(patch.fullBundleUrl || patch.filename, config);
|
|
644
|
+
const versionDir = `${OTA_DIR}/v${patch.toVersion}`;
|
|
645
|
+
if (!(await _reactNativeBlobUtil.default.fs.exists(versionDir))) {
|
|
646
|
+
await _reactNativeBlobUtil.default.fs.mkdir(versionDir);
|
|
647
|
+
}
|
|
701
648
|
await downloadWithRetry(url, tempBundle, config, onProgress, {});
|
|
702
649
|
|
|
703
650
|
// Verify full bundle hash
|
|
@@ -727,6 +674,8 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
727
674
|
throw new Error('Full bundle hash mismatch after fallback');
|
|
728
675
|
}
|
|
729
676
|
}
|
|
677
|
+
await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
|
|
678
|
+
await syncAssets();
|
|
730
679
|
|
|
731
680
|
// Atomic swap
|
|
732
681
|
if (await _reactNativeBlobUtil.default.fs.exists(finalBundlePath)) {
|
|
@@ -734,7 +683,7 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
734
683
|
}
|
|
735
684
|
await _reactNativeBlobUtil.default.fs.mv(tempBundle, finalBundlePath);
|
|
736
685
|
const metadata = await (0, _otaMetadata.loadMetadata)(config.baseAppVersion);
|
|
737
|
-
const newMetadata = (0, _otaMetadata.registerNewVersion)(metadata, patch.toVersion);
|
|
686
|
+
const newMetadata = (0, _otaMetadata.registerNewVersion)(metadata, patch.toVersion, config.appVersion);
|
|
738
687
|
await (0, _otaMetadata.saveMetadata)(newMetadata);
|
|
739
688
|
|
|
740
689
|
// ── CRITICAL: Mark healthy BEFORE reload so native OtaBundleResolver
|
|
@@ -762,5 +711,4 @@ const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, option
|
|
|
762
711
|
throw error;
|
|
763
712
|
}
|
|
764
713
|
};
|
|
765
|
-
exports.applyOtaPatchInternal = applyOtaPatchInternal;
|
|
766
714
|
//# sourceMappingURL=otaCore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeBlobUtil","_interopRequireDefault","_cryptoJs","_NativeBsPatch","_otaLogger","_otaMetadata","_CustomStorage","_GitHubReleaseStorage","_GitHubRawStorage","_types","e","__esModule","default","OTA_DIR","ReactNativeBlobUtil","fs","dirs","DocumentDir","DEFAULT_STORAGE","CustomStorageProvider","GITHUB_STORAGE","GitHubReleaseStorageProvider","GITHUB_RAW_STORAGE","GitHubRawStorageProvider","getStorage","config","storage","storageType","OtaStorageType","GITHUB","GITHUB_RAW","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","exports","verifyHash","path","expectedHash","hash","toLowerCase","verifySignature","filePath","signature","publicKey","NativeBsPatch","isValid","__DEV__","console","warn","fileData","readFile","fileWords","CryptoJS","enc","Base64","parse","keyWords","signatureWords","hmac","HmacSHA256","toString","error","decompressGzip","endsWith","decompressedPath","replace","success","Error","downloadWithRetry","url","destPath","onProgress","headers","retryLimit","network","retry","timeout","timeoutMs","taskRef","task","fileCache","followRedirect","fetch","progress","received","total","percent","Math","floor","cancel","delay","pow","Promise","resolve","setTimeout","fetchOtaManifest","fetchManifest","message","bundledPatches","ASSET_STORE_DIR","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","OtaStatus","SYNCING_ASSETS","versionDir","manifestPath","exists","mkdir","assets","resp","respInfo","status","manifestData","data","JSON","stringify","writeFile","manifest","filter","isBase","length","processed","downloaded","cached","updateProgress","round","maxConcurrency","index","downloadNext","asset","filename","ext","localPath","assetUrl","getAssetUrl","emit","OtaEvent","DOWNLOAD_SUCCESS","initialWorkers","min","workers","Array","fill","all","getLocalAssetPath","getLocalPatchPath","patch","docDir","id","applyOtaPatchInternal","options","autoReload","allowDebugUpdates","UP_TO_DATE","createOtaLogger","onEvent","ensureOtaDir","totalStart","Date","now","finalBundlePath","getBundlePath","toVersion","baseAppVersion","tempBundle","localPatchPath","minAppVersion","currentAppVer","appVersion","getAppVersion","undefined","VERSION_INCOMPATIBLE","downloadMs","patchSizeBytes","fromCache","stat","size","DOWNLOAD_START","DOWNLOADING","dlStart","getUpdateFileUrl","durationMs","sizeKB","dlError","DOWNLOAD_FAIL","actualPatchPath","compressed","DECOMPRESS_START","APPLYING","DECOMPRESS_SUCCESS","sigValid","SIGNATURE_INVALID","manifestUrl","metadata","loadMetadata","oldBundlePath","currentVersion","bundleFilename","Platform","OS","actualOldPath","otaStoredPath","extractBundleFromAssets","oldStat","patchStat","baseHash","HASH_VERIFY_START","actualSourceHash","srcSize","srcStat","fromVersion","HASH_MISMATCH","expected","actual","HASH_VERIFY_SUCCESS","PATCH_START","applyStart","applyPatch","applyMs","PATCH_FAIL","bundleHash","unlink","mv","newMetadata","registerNewVersion","saveMetadata","totalMs","PATCH_SUCCESS","SUCCESS","patchSizeKB","markAsHealthy","reloadBundle","fullBundleUrl","actualHash","fallbackError","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeBlobUtil","_interopRequireDefault","_NativeBsPatch","_otaLogger","_otaMetadata","_GitHubRawStorage","_types","e","__esModule","default","OTA_DIR","ReactNativeBlobUtil","fs","dirs","DocumentDir","DEFAULT_STORAGE","GitHubRawStorageProvider","getStorage","config","storage","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","exports","verifyHash","path","expectedHash","hash","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","NativeBsPatch","verifySignature","catch","Error","downloadWithRetry","url","destPath","onProgress","headers","retryLimit","network","retry","timeout","timeoutMs","taskRef","partPath","task","fileCache","followRedirect","fetch","progress","received","total","percent","Math","floor","cancel","resp","status","respInfo","exists","unlink","mv","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","fetchOtaManifest","fetchManifest","error","message","bundledPatches","ASSET_STORE_DIR","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","OtaStatus","SYNCING_ASSETS","versionDir","manifestPath","mkdir","assets","manifestData","data","JSON","stringify","writeFile","manifest","parse","filter","isBase","test","ext","length","processed","downloaded","cached","failed","updateProgress","round","maxConcurrency","index","downloadNext","asset","filename","localPath","assetUrl","getAssetUrl","emit","OtaEvent","DOWNLOAD_SUCCESS","initialWorkers","min","workers","Array","fill","all","getLocalAssetPath","getLocalPatchPath","patch","docDir","appVersion","id","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","createOtaLogger","onEvent","ensureOtaDir","totalStart","Date","now","finalBundlePath","getBundlePath","toVersion","baseAppVersion","tempBundle","localPatchPath","syncAssets","manifestUrl","getUpdateFileUrl","minAppVersion","currentAppVer","getAppVersion","undefined","VERSION_INCOMPATIBLE","downloadMs","patchSizeBytes","fromCache","stat","size","DOWNLOAD_START","DOWNLOADING","dlStart","durationMs","sizeKB","dlError","DOWNLOAD_FAIL","APPLYING","sigError","SIGNATURE_INVALID","metadata","loadMetadata","oldBundlePath","currentVersion","bundleFilename","Platform","OS","actualOldPath","otaStoredPath","extractBundleFromAssets","oldStat","patchStat","baseHash","HASH_VERIFY_START","isValid","actualSourceHash","srcSize","srcStat","fromVersion","HASH_MISMATCH","expected","actual","HASH_VERIFY_SUCCESS","PATCH_START","applyStart","success","applyPatch","applyMs","PATCH_FAIL","bundleHash","bundleSignature","newMetadata","registerNewVersion","saveMetadata","totalMs","PATCH_SUCCESS","SUCCESS","patchSizeKB","markAsHealthy","reloadBundle","fullBundleUrl","actualHash","fallbackError","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -29,8 +29,6 @@ let OtaEvent = exports.OtaEvent = /*#__PURE__*/function (OtaEvent) {
|
|
|
29
29
|
OtaEvent["RESET_FACTORY"] = "reset_factory";
|
|
30
30
|
OtaEvent["VERSION_INCOMPATIBLE"] = "version_incompatible";
|
|
31
31
|
OtaEvent["SIGNATURE_INVALID"] = "signature_invalid";
|
|
32
|
-
OtaEvent["DECOMPRESS_START"] = "decompress_start";
|
|
33
|
-
OtaEvent["DECOMPRESS_SUCCESS"] = "decompress_success";
|
|
34
32
|
return OtaEvent;
|
|
35
33
|
}({});
|
|
36
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","e","__esModule","default","OtaEvent","exports","createOtaLogger","onEvent","emit","event","details","entry","timestamp","Date","now","logStr","JSON","stringify","console","log","NativeBsPatch","logNative"],"sourceRoot":"../../../src","sources":["ota/otaLogger.ts"],"mappings":";;;;;;AAOA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAP7C;AACA;AACA;AACA;AACA;AACA;AALA,IASYG,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;
|
|
1
|
+
{"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","e","__esModule","default","OtaEvent","exports","createOtaLogger","onEvent","emit","event","details","entry","timestamp","Date","now","logStr","JSON","stringify","console","log","NativeBsPatch","logNative"],"sourceRoot":"../../../src","sources":["ota/otaLogger.ts"],"mappings":";;;;;;AAOA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAP7C;AACA;AACA;AACA;AACA;AACA;AALA,IASYG,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAgCpB;AACA;AACA;AACO,MAAME,eAAe,GAAIC,OAA0B,IAAK;EAC7D,MAAMC,IAAI,GAAGA,CACXC,KAAe,EACfC,OAAkD,KAC/C;IACH,MAAMC,KAAkB,GAAG;MACzBF,KAAK;MACLG,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrB,GAAGJ;IACL,CAAC;;IAED;IACA,MAAMK,MAAM,GAAG,QAAQN,KAAK,KAAKO,IAAI,CAACC,SAAS,CAACN,KAAK,CAAC,EAAE;IACxDO,OAAO,CAACC,GAAG,CAACJ,MAAM,CAAC;;IAEnB;IACA,IAAIK,sBAAa,IAAIA,sBAAa,CAACC,SAAS,EAAE;MAC5CD,sBAAa,CAACC,SAAS,CAACN,MAAM,CAAC;IACjC;;IAEA;IACAR,OAAO,GAAGI,KAAK,CAAC;EAClB,CAAC;EAED,OAAO;IAAEH;EAAK,CAAC;AACjB,CAAC;AAACH,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ var _reactNativeBlobUtil = _interopRequireDefault(require("react-native-blob-uti
|
|
|
9
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
const OTA_DIR = `${_reactNativeBlobUtil.default.fs.dirs.DocumentDir}/ota`;
|
|
11
11
|
const METADATA_PATH = `${OTA_DIR}/metadata.json`;
|
|
12
|
+
const METADATA_TMP_PATH = `${METADATA_PATH}.tmp`;
|
|
12
13
|
|
|
13
14
|
/** Promise-based lock to prevent concurrent metadata writes (double-tap guard). */
|
|
14
15
|
let saveLock = Promise.resolve();
|
|
@@ -31,9 +32,11 @@ const ensureOtaDir = async () => {
|
|
|
31
32
|
exports.ensureOtaDir = ensureOtaDir;
|
|
32
33
|
const loadMetadata = async defaultVersion => {
|
|
33
34
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
// A crash between unlink and rename in saveMetadata leaves only the .tmp copy
|
|
36
|
+
for (const path of [METADATA_PATH, METADATA_TMP_PATH]) {
|
|
37
|
+
if (await _reactNativeBlobUtil.default.fs.exists(path)) {
|
|
38
|
+
return JSON.parse(await _reactNativeBlobUtil.default.fs.readFile(path, 'utf8'));
|
|
39
|
+
}
|
|
37
40
|
}
|
|
38
41
|
} catch (e) {
|
|
39
42
|
console.warn('[otaMetadata] Failed to load metadata:', e);
|
|
@@ -62,7 +65,12 @@ const saveMetadata = async metadata => {
|
|
|
62
65
|
try {
|
|
63
66
|
await prevLock;
|
|
64
67
|
await ensureOtaDir();
|
|
65
|
-
|
|
68
|
+
// Write-then-rename so a kill mid-write never leaves truncated JSON
|
|
69
|
+
await _reactNativeBlobUtil.default.fs.writeFile(METADATA_TMP_PATH, JSON.stringify(metadata, null, 2), 'utf8');
|
|
70
|
+
if (await _reactNativeBlobUtil.default.fs.exists(METADATA_PATH)) {
|
|
71
|
+
await _reactNativeBlobUtil.default.fs.unlink(METADATA_PATH);
|
|
72
|
+
}
|
|
73
|
+
await _reactNativeBlobUtil.default.fs.mv(METADATA_TMP_PATH, METADATA_PATH);
|
|
66
74
|
} catch (e) {
|
|
67
75
|
console.error('[otaMetadata] Failed to save metadata:', e);
|
|
68
76
|
throw new Error(`Failed to save metadata: ${e.message}`);
|
|
@@ -83,12 +91,13 @@ const MAX_VERSION_HISTORY = exports.MAX_VERSION_HISTORY = 3;
|
|
|
83
91
|
* @param newVersion - The newly applied OTA version.
|
|
84
92
|
* @returns Updated metadata object.
|
|
85
93
|
*/
|
|
86
|
-
const registerNewVersion = (metadata, newVersion) => {
|
|
94
|
+
const registerNewVersion = (metadata, newVersion, appVersion) => {
|
|
87
95
|
const versions = [metadata.currentVersion, ...(metadata.previousVersions || [])];
|
|
88
96
|
// Keep internal history unique and capped
|
|
89
97
|
const uniquePrevious = Array.from(new Set(versions)).filter(v => v !== newVersion).slice(0, MAX_VERSION_HISTORY);
|
|
90
98
|
return {
|
|
91
99
|
...metadata,
|
|
100
|
+
appVersion: appVersion ?? metadata.appVersion,
|
|
92
101
|
currentVersion: newVersion,
|
|
93
102
|
previousVersions: uniquePrevious,
|
|
94
103
|
rollbackCount: 0,
|
|
@@ -122,7 +131,7 @@ const cleanupOldVersions = async (metadata, baseVersion) => {
|
|
|
122
131
|
}
|
|
123
132
|
}
|
|
124
133
|
// Clean up leftover temporary bundle files (.tmp)
|
|
125
|
-
if (item.endsWith('.tmp')) {
|
|
134
|
+
if (item.endsWith('.tmp') && item !== 'metadata.json.tmp') {
|
|
126
135
|
await _reactNativeBlobUtil.default.fs.unlink(`${OTA_DIR}/${item}`).catch(() => {});
|
|
127
136
|
}
|
|
128
137
|
}
|
|
@@ -140,10 +149,12 @@ const cleanupOldVersions = async (metadata, baseVersion) => {
|
|
|
140
149
|
* @returns The updated metadata.
|
|
141
150
|
*/
|
|
142
151
|
exports.cleanupOldVersions = cleanupOldVersions;
|
|
143
|
-
const markHealthy = async defaultVersion => {
|
|
152
|
+
const markHealthy = async (defaultVersion, appVersion) => {
|
|
144
153
|
const metadata = await loadMetadata(defaultVersion);
|
|
145
154
|
const updated = {
|
|
146
155
|
...metadata,
|
|
156
|
+
// Stamp legacy metadata so the native resolver can detect a store update later
|
|
157
|
+
appVersion: metadata.appVersion ?? appVersion,
|
|
147
158
|
lastLaunchSuccessful: true,
|
|
148
159
|
rollbackCount: 0
|
|
149
160
|
};
|