react-native-bspatch 1.1.4 → 2.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 +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 +101 -174
- 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
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
* Responsibilities:
|
|
7
7
|
* - Download patches with retry
|
|
8
8
|
* - Verify integrity (SHA-256 hash)
|
|
9
|
-
* - Verify security (
|
|
10
|
-
* - Handle gzip decompression
|
|
9
|
+
* - Verify security (RSA/ECDSA signature)
|
|
11
10
|
* - Apply binary patch (bsdiff)
|
|
12
11
|
* - Atomic bundle swap
|
|
13
12
|
* - Full bundle fallback on failure
|
|
@@ -16,32 +15,19 @@
|
|
|
16
15
|
|
|
17
16
|
import { Platform } from 'react-native';
|
|
18
17
|
import ReactNativeBlobUtil from 'react-native-blob-util';
|
|
19
|
-
import CryptoJS from 'crypto-js';
|
|
20
18
|
import NativeBsPatch from '../NativeBsPatch';
|
|
21
19
|
import { createOtaLogger, OtaEvent } from './otaLogger';
|
|
22
20
|
import { ensureOtaDir, getBundlePath, loadMetadata, registerNewVersion, saveMetadata } from './otaMetadata';
|
|
23
|
-
import { CustomStorageProvider } from './storage/CustomStorage';
|
|
24
|
-
import { GitHubReleaseStorageProvider } from './storage/GitHubReleaseStorage';
|
|
25
21
|
import { GitHubRawStorageProvider } from './storage/GitHubRawStorage';
|
|
26
|
-
import { OtaStatus
|
|
22
|
+
import { OtaStatus } from './types';
|
|
27
23
|
const OTA_DIR = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota`;
|
|
28
24
|
|
|
29
25
|
// ─── Storage Provider Factory ──────────────────────────────────────────
|
|
30
26
|
|
|
31
|
-
const DEFAULT_STORAGE = new
|
|
32
|
-
const GITHUB_STORAGE = new GitHubReleaseStorageProvider();
|
|
33
|
-
const GITHUB_RAW_STORAGE = new GitHubRawStorageProvider();
|
|
27
|
+
const DEFAULT_STORAGE = new GitHubRawStorageProvider();
|
|
34
28
|
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
* Priority: explicit storage instance > storageType > default (CustomStorage)
|
|
38
|
-
*/
|
|
39
|
-
const getStorage = config => {
|
|
40
|
-
if (config.storage) return config.storage;
|
|
41
|
-
if (config.storageType === OtaStorageType.GITHUB) return GITHUB_STORAGE;
|
|
42
|
-
if (config.storageType === OtaStorageType.GITHUB_RAW) return GITHUB_RAW_STORAGE;
|
|
43
|
-
return DEFAULT_STORAGE;
|
|
44
|
-
};
|
|
29
|
+
/** Explicit `config.storage` (e.g. a future Cloudflare provider) or GitHub raw. */
|
|
30
|
+
const getStorage = config => config.storage ?? DEFAULT_STORAGE;
|
|
45
31
|
|
|
46
32
|
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
47
33
|
|
|
@@ -87,80 +73,15 @@ export const verifyHash = async (path, expectedHash) => {
|
|
|
87
73
|
};
|
|
88
74
|
|
|
89
75
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* Uses CryptoJS to verify that the signature matches the file content
|
|
93
|
-
* using the provided HMAC key.
|
|
94
|
-
*
|
|
95
|
-
* @param filePath - Path to the file to verify
|
|
96
|
-
* @param signature - Base64-encoded HMAC signature to verify against
|
|
97
|
-
* @param publicKey - Base64-encoded HMAC key
|
|
98
|
-
* @returns true if signature is valid, false otherwise
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* // Server-side (Node.js) - generate signature:
|
|
102
|
-
* const crypto = require('crypto');
|
|
103
|
-
* const key = crypto.randomBytes(32).toString('base64');
|
|
104
|
-
* const fileBuffer = fs.readFileSync('bundle.patch');
|
|
105
|
-
* const signature = crypto.createHmac('sha256', Buffer.from(key, 'base64'))
|
|
106
|
-
* .update(fileBuffer)
|
|
107
|
-
* .digest('base64');
|
|
108
|
-
*/
|
|
109
|
-
export const verifySignature = async (filePath, signature, publicKey) => {
|
|
110
|
-
if (!signature || !publicKey) return true; // Skip if not configured
|
|
111
|
-
try {
|
|
112
|
-
// Fast-path: use Native streaming HMAC-SHA256 (avoids Base64 conversion and JS thread blocking)
|
|
113
|
-
if (typeof NativeBsPatch.verifySignature === 'function') {
|
|
114
|
-
const isValid = await NativeBsPatch.verifySignature(filePath, signature, publicKey);
|
|
115
|
-
if (!isValid && __DEV__) {
|
|
116
|
-
console.warn('[otaCore] Signature mismatch');
|
|
117
|
-
}
|
|
118
|
-
return isValid;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Fallback to JS CryptoJS if native module is running an older binary
|
|
122
|
-
const fileData = await ReactNativeBlobUtil.fs.readFile(filePath, 'base64');
|
|
123
|
-
const fileWords = CryptoJS.enc.Base64.parse(fileData);
|
|
124
|
-
const keyWords = CryptoJS.enc.Base64.parse(publicKey);
|
|
125
|
-
const signatureWords = CryptoJS.enc.Base64.parse(signature);
|
|
126
|
-
const hmac = CryptoJS.HmacSHA256(fileWords, keyWords);
|
|
127
|
-
const isValid = hmac.toString(CryptoJS.enc.Base64) === signatureWords.toString(CryptoJS.enc.Base64);
|
|
128
|
-
if (!isValid && __DEV__) {
|
|
129
|
-
console.warn('[otaCore] Signature mismatch');
|
|
130
|
-
}
|
|
131
|
-
return isValid;
|
|
132
|
-
} catch (error) {
|
|
133
|
-
if (__DEV__) {
|
|
134
|
-
console.error('[otaCore] Signature verification failed:', error);
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Decompress a .gz file in-place using native helpers.
|
|
142
|
-
* Falls back to skipping decompression if no native helper is available,
|
|
143
|
-
* but enforces that the patch file must NOT be gzip-compressed in that case.
|
|
76
|
+
* When `config.publicKey` is set, an RSA/ECDSA SHA-256 signature is mandatory
|
|
77
|
+
* and must verify (fail closed). Without a public key, signing is not enforced.
|
|
144
78
|
*/
|
|
145
|
-
const
|
|
146
|
-
if (!
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
try {
|
|
151
|
-
const success = await NativeBsPatch.decompressGzip(filePath, decompressedPath);
|
|
152
|
-
if (success) {
|
|
153
|
-
return decompressedPath;
|
|
154
|
-
}
|
|
155
|
-
} catch {
|
|
156
|
-
// Native decompress not available — fall through
|
|
79
|
+
const assertSigned = async (filePath, signature, config, what) => {
|
|
80
|
+
if (!config.publicKey) return;
|
|
81
|
+
const valid = !!signature && (await NativeBsPatch.verifySignature(filePath, signature, config.publicKey).catch(() => false));
|
|
82
|
+
if (!valid) {
|
|
83
|
+
throw new Error(`${what} signature missing or invalid`);
|
|
157
84
|
}
|
|
158
|
-
|
|
159
|
-
// No native gzip support: abort if file is actually compressed.
|
|
160
|
-
// Do NOT silently rename a .gz file to .patch — bspatch will read gzip
|
|
161
|
-
// magic bytes and fail with a confusing error.
|
|
162
|
-
console.error('[otaCore] .gz decompression is not supported on this platform. ' + 'Ensure the OTA server sends uncompressed patches (compressed: false).');
|
|
163
|
-
throw new Error('Gzip decompression is not supported on this platform.');
|
|
164
85
|
};
|
|
165
86
|
|
|
166
87
|
/**
|
|
@@ -172,10 +93,13 @@ const downloadWithRetry = async (url, destPath, config, onProgress, headers = {}
|
|
|
172
93
|
const timeout = config.network?.timeoutMs ?? 30000;
|
|
173
94
|
for (let i = 0; i < retryLimit; i++) {
|
|
174
95
|
let taskRef = null;
|
|
96
|
+
// Download to .part and rename only on a 2xx response, so a cut-off
|
|
97
|
+
// download or an error page never sits at destPath looking complete.
|
|
98
|
+
const partPath = `${destPath}.part`;
|
|
175
99
|
try {
|
|
176
100
|
const task = ReactNativeBlobUtil.config({
|
|
177
101
|
fileCache: true,
|
|
178
|
-
path:
|
|
102
|
+
path: partPath,
|
|
179
103
|
followRedirect: true,
|
|
180
104
|
timeout
|
|
181
105
|
}).fetch('GET', url, {
|
|
@@ -188,11 +112,20 @@ const downloadWithRetry = async (url, destPath, config, onProgress, headers = {}
|
|
|
188
112
|
taskRef = {
|
|
189
113
|
cancel: () => task.cancel()
|
|
190
114
|
};
|
|
191
|
-
await task;
|
|
115
|
+
const resp = await task;
|
|
116
|
+
const status = resp.respInfo.status;
|
|
117
|
+
if (status < 200 || status >= 300) {
|
|
118
|
+
throw new Error(`HTTP ${status} for ${url}`);
|
|
119
|
+
}
|
|
120
|
+
if (await ReactNativeBlobUtil.fs.exists(destPath)) {
|
|
121
|
+
await ReactNativeBlobUtil.fs.unlink(destPath);
|
|
122
|
+
}
|
|
123
|
+
await ReactNativeBlobUtil.fs.mv(partPath, destPath);
|
|
192
124
|
return;
|
|
193
125
|
} catch (e) {
|
|
194
126
|
// Cancel any lingering request before retrying
|
|
195
127
|
taskRef?.cancel();
|
|
128
|
+
await ReactNativeBlobUtil.fs.unlink(partPath).catch(() => {});
|
|
196
129
|
if (i === retryLimit - 1) throw e;
|
|
197
130
|
const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
|
|
198
131
|
if (__DEV__) {
|
|
@@ -274,12 +207,11 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
274
207
|
}
|
|
275
208
|
const manifest = JSON.parse(manifestData);
|
|
276
209
|
// Filter out base assets, we don't need to download them
|
|
277
|
-
|
|
210
|
+
// Hash/ext become file names: reject anything that isn't a plain sha256 + extension
|
|
211
|
+
assets = (manifest.assets || []).filter(a => !a.isBase && /^[a-f0-9]{64}$/i.test(a.hash) && /^[a-z0-9]+$/i.test(a.ext));
|
|
278
212
|
} catch (e) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
return;
|
|
213
|
+
// Fatal: activating the bundle without its manifest leaves images unresolved
|
|
214
|
+
throw new Error(`Failed to fetch asset manifest: ${e.message}`);
|
|
283
215
|
}
|
|
284
216
|
if (assets.length === 0) {
|
|
285
217
|
if (__DEV__) {
|
|
@@ -293,6 +225,7 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
293
225
|
let processed = 0;
|
|
294
226
|
let downloaded = 0;
|
|
295
227
|
let cached = 0;
|
|
228
|
+
let failed = 0;
|
|
296
229
|
const updateProgress = () => {
|
|
297
230
|
processed++;
|
|
298
231
|
const percent = Math.round(processed / assets.length * 100);
|
|
@@ -326,12 +259,11 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
326
259
|
console.warn(`[otaCore] Could not get URL for asset ${filename}`);
|
|
327
260
|
}
|
|
328
261
|
} else {
|
|
329
|
-
await
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
}).fetch('GET', assetUrl);
|
|
262
|
+
await downloadWithRetry(assetUrl, localPath, config, () => {});
|
|
263
|
+
if (!(await verifyHash(localPath, asset.hash))) {
|
|
264
|
+
await ReactNativeBlobUtil.fs.unlink(localPath).catch(() => {});
|
|
265
|
+
throw new Error('hash mismatch');
|
|
266
|
+
}
|
|
335
267
|
downloaded++;
|
|
336
268
|
log.emit(OtaEvent.DOWNLOAD_SUCCESS, {
|
|
337
269
|
message: `Asset downloaded: ${filename}`
|
|
@@ -341,7 +273,7 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
341
273
|
if (__DEV__) {
|
|
342
274
|
console.warn(`[otaCore] Failed to download asset ${filename}:`, e);
|
|
343
275
|
}
|
|
344
|
-
//
|
|
276
|
+
failed++; // keep going, fail the sync at the end
|
|
345
277
|
} finally {
|
|
346
278
|
updateProgress();
|
|
347
279
|
await downloadNext(); // Start next download
|
|
@@ -352,6 +284,9 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
|
|
|
352
284
|
const initialWorkers = Math.min(maxConcurrency, assets.length);
|
|
353
285
|
const workers = Array(initialWorkers).fill(null).map(() => downloadNext());
|
|
354
286
|
await Promise.all(workers);
|
|
287
|
+
if (failed > 0) {
|
|
288
|
+
throw new Error(`${failed} asset(s) failed to download`);
|
|
289
|
+
}
|
|
355
290
|
onStatus(OtaStatus.SYNCING_ASSETS, `Assets synced (${downloaded} new, ${cached} cached)`);
|
|
356
291
|
console.log(`[otaCore] Assets: ${downloaded} downloaded, ${cached} from cache`);
|
|
357
292
|
};
|
|
@@ -379,7 +314,7 @@ export const getLocalAssetPath = (hash, ext) => `${ASSET_STORE_DIR}/${hash}.${ex
|
|
|
379
314
|
* @param docDir - Document directory path (use `ReactNativeBlobUtil.fs.dirs.DocumentDir`)
|
|
380
315
|
* @returns Absolute path to the patch file
|
|
381
316
|
*/
|
|
382
|
-
export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.id}.patch`;
|
|
317
|
+
export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.appVersion}-${patch.id}.patch`;
|
|
383
318
|
|
|
384
319
|
// ─── Main Update Pipeline ─────────────────────────────────────────────
|
|
385
320
|
|
|
@@ -389,7 +324,6 @@ export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch
|
|
|
389
324
|
* Pipeline:
|
|
390
325
|
* 1. Version compatibility check
|
|
391
326
|
* 2. Download patch (with retry)
|
|
392
|
-
* 3. Decompress (if .gz)
|
|
393
327
|
* 4. Security signature check
|
|
394
328
|
* 5. Resolve source bundle
|
|
395
329
|
* 6. Verify source hash
|
|
@@ -401,7 +335,21 @@ export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch
|
|
|
401
335
|
*
|
|
402
336
|
* On failure → fallback to full bundle download if URL available.
|
|
403
337
|
*/
|
|
404
|
-
|
|
338
|
+
let updateInFlight = false;
|
|
339
|
+
|
|
340
|
+
/** Runs the pipeline below; rejects if another update is already running. */
|
|
341
|
+
export const applyOtaPatchInternal = async (...args) => {
|
|
342
|
+
if (updateInFlight) {
|
|
343
|
+
throw new Error('Another OTA update is already in progress');
|
|
344
|
+
}
|
|
345
|
+
updateInFlight = true;
|
|
346
|
+
try {
|
|
347
|
+
return await runUpdatePipeline(...args);
|
|
348
|
+
} finally {
|
|
349
|
+
updateInFlight = false;
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
const runUpdatePipeline = async (patch, config, onStatus, onProgress, options = {
|
|
405
353
|
autoReload: true
|
|
406
354
|
}) => {
|
|
407
355
|
if (__DEV__ && config.allowDebugUpdates !== true) {
|
|
@@ -414,6 +362,13 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
414
362
|
const finalBundlePath = getBundlePath(patch.toVersion, config.baseAppVersion) || '';
|
|
415
363
|
const tempBundle = `${finalBundlePath}.tmp`;
|
|
416
364
|
const localPatchPath = getLocalPatchPath(patch, ReactNativeBlobUtil.fs.dirs.DocumentDir);
|
|
365
|
+
|
|
366
|
+
// Cached per asset hash, so calling it again in the fallback is cheap
|
|
367
|
+
const syncAssets = async () => {
|
|
368
|
+
if (!patch.assetManifestUrl) return;
|
|
369
|
+
const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
370
|
+
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
371
|
+
};
|
|
417
372
|
try {
|
|
418
373
|
// ── Step 1: Version Compatibility ──
|
|
419
374
|
if (patch.minAppVersion) {
|
|
@@ -473,33 +428,22 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
473
428
|
}
|
|
474
429
|
}
|
|
475
430
|
|
|
476
|
-
// ── Step 3: Decompress if needed ──
|
|
477
|
-
let actualPatchPath = localPatchPath;
|
|
478
|
-
if (patch.compressed) {
|
|
479
|
-
log.emit(OtaEvent.DECOMPRESS_START);
|
|
480
|
-
onStatus(OtaStatus.APPLYING, 'Decompressing...');
|
|
481
|
-
actualPatchPath = await decompressGzip(localPatchPath);
|
|
482
|
-
log.emit(OtaEvent.DECOMPRESS_SUCCESS);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
431
|
// ── Step 4: Signature Verification ──
|
|
486
|
-
|
|
432
|
+
// Verify before feeding the patch to native bspatch
|
|
433
|
+
if (config.publicKey) {
|
|
487
434
|
onStatus(OtaStatus.APPLYING, 'Verifying signature...');
|
|
488
|
-
|
|
489
|
-
|
|
435
|
+
try {
|
|
436
|
+
await assertSigned(localPatchPath, patch.signature, config, 'Patch');
|
|
437
|
+
} catch (sigError) {
|
|
490
438
|
log.emit(OtaEvent.SIGNATURE_INVALID, {
|
|
491
439
|
version: patch.toVersion
|
|
492
440
|
});
|
|
493
|
-
throw
|
|
441
|
+
throw sigError;
|
|
494
442
|
}
|
|
495
443
|
}
|
|
496
444
|
|
|
497
445
|
// ── Step 4.2: Download & Sync Assets ──
|
|
498
|
-
|
|
499
|
-
const storage = getStorage(config);
|
|
500
|
-
const manifestUrl = await storage.getUpdateFileUrl(patch.assetManifestUrl, config);
|
|
501
|
-
await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
|
|
502
|
-
}
|
|
446
|
+
await syncAssets();
|
|
503
447
|
|
|
504
448
|
// ── Step 5: Resolve Source Bundle ──
|
|
505
449
|
onStatus(OtaStatus.APPLYING, 'Preparing source...');
|
|
@@ -533,15 +477,10 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
533
477
|
// True base: extract byte-for-byte from APK assets.
|
|
534
478
|
// RNFS.copyFileAssets is known to produce inconsistent bytes in some
|
|
535
479
|
// APK configurations (e.g., release signing + resource shrinking).
|
|
480
|
+
// Re-extract every time: a cached copy can be partial or left over
|
|
481
|
+
// from the previous store build. It's one local copy per update.
|
|
536
482
|
actualOldPath = `${OTA_DIR}/base.hbc`;
|
|
537
|
-
|
|
538
|
-
if (__DEV__) {
|
|
539
|
-
console.log(`[otaCore] Source: extracting bundle from APK assets → ${actualOldPath}`);
|
|
540
|
-
}
|
|
541
|
-
await NativeBsPatch.extractBundleFromAssets(bundleFilename, actualOldPath);
|
|
542
|
-
} else if (__DEV__) {
|
|
543
|
-
console.log(`[otaCore] Source: cached APK-extracted bundle → ${actualOldPath}`);
|
|
544
|
-
}
|
|
483
|
+
await NativeBsPatch.extractBundleFromAssets(bundleFilename, actualOldPath);
|
|
545
484
|
}
|
|
546
485
|
} else {
|
|
547
486
|
actualOldPath = oldBundlePath;
|
|
@@ -550,10 +489,10 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
550
489
|
// ── Debug: log file sizes for diagnostic ──
|
|
551
490
|
try {
|
|
552
491
|
const oldStat = await ReactNativeBlobUtil.fs.stat(actualOldPath);
|
|
553
|
-
const patchStat = await ReactNativeBlobUtil.fs.stat(
|
|
492
|
+
const patchStat = await ReactNativeBlobUtil.fs.stat(localPatchPath);
|
|
554
493
|
if (__DEV__) {
|
|
555
494
|
console.log(`[otaCore] DEBUG old bundle size=${oldStat.size} path=${actualOldPath}`);
|
|
556
|
-
console.log(`[otaCore] DEBUG patch size=${patchStat.size} path=${
|
|
495
|
+
console.log(`[otaCore] DEBUG patch size=${patchStat.size} path=${localPatchPath}`);
|
|
557
496
|
console.log(`[otaCore] DEBUG baseHash expected=${patch.baseHash}`);
|
|
558
497
|
}
|
|
559
498
|
} catch {
|
|
@@ -607,7 +546,7 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
607
546
|
});
|
|
608
547
|
onStatus(OtaStatus.APPLYING, 'Applying binary patch...');
|
|
609
548
|
const applyStart = Date.now();
|
|
610
|
-
const success = await NativeBsPatch.applyPatch(actualOldPath, tempBundle,
|
|
549
|
+
const success = await NativeBsPatch.applyPatch(actualOldPath, tempBundle, localPatchPath);
|
|
611
550
|
const applyMs = Date.now() - applyStart;
|
|
612
551
|
if (!success) {
|
|
613
552
|
log.emit(OtaEvent.PATCH_FAIL, {
|
|
@@ -640,15 +579,17 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
640
579
|
message: 'Result bundle verified'
|
|
641
580
|
});
|
|
642
581
|
}
|
|
582
|
+
await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
|
|
643
583
|
|
|
644
584
|
// ── Step 9: Atomic Commit ──
|
|
645
585
|
if (await ReactNativeBlobUtil.fs.exists(finalBundlePath)) {
|
|
646
586
|
await ReactNativeBlobUtil.fs.unlink(finalBundlePath);
|
|
647
587
|
}
|
|
648
588
|
await ReactNativeBlobUtil.fs.mv(tempBundle, finalBundlePath);
|
|
589
|
+
await ReactNativeBlobUtil.fs.unlink(localPatchPath).catch(() => {});
|
|
649
590
|
|
|
650
591
|
// ── Step 10: Update Metadata ──
|
|
651
|
-
const newMetadata = registerNewVersion(metadata, patch.toVersion);
|
|
592
|
+
const newMetadata = registerNewVersion(metadata, patch.toVersion, config.appVersion);
|
|
652
593
|
await saveMetadata(newMetadata);
|
|
653
594
|
const totalMs = Date.now() - totalStart;
|
|
654
595
|
log.emit(OtaEvent.PATCH_SUCCESS, {
|
|
@@ -681,6 +622,8 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
681
622
|
if (__DEV__) {
|
|
682
623
|
console.error('[otaCore] Pipeline failed:', error);
|
|
683
624
|
}
|
|
625
|
+
await ReactNativeBlobUtil.fs.unlink(localPatchPath).catch(() => {});
|
|
626
|
+
await ReactNativeBlobUtil.fs.unlink(tempBundle).catch(() => {});
|
|
684
627
|
|
|
685
628
|
// ── Fallback: Full Bundle Download ──
|
|
686
629
|
if (patch.fullBundleUrl) {
|
|
@@ -688,6 +631,10 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
688
631
|
onStatus(OtaStatus.DOWNLOADING, 'Fallback: Downloading full bundle...');
|
|
689
632
|
const storage = getStorage(config);
|
|
690
633
|
const url = await storage.getUpdateFileUrl(patch.fullBundleUrl || patch.filename, config);
|
|
634
|
+
const versionDir = `${OTA_DIR}/v${patch.toVersion}`;
|
|
635
|
+
if (!(await ReactNativeBlobUtil.fs.exists(versionDir))) {
|
|
636
|
+
await ReactNativeBlobUtil.fs.mkdir(versionDir);
|
|
637
|
+
}
|
|
691
638
|
await downloadWithRetry(url, tempBundle, config, onProgress, {});
|
|
692
639
|
|
|
693
640
|
// Verify full bundle hash
|
|
@@ -717,6 +664,8 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
717
664
|
throw new Error('Full bundle hash mismatch after fallback');
|
|
718
665
|
}
|
|
719
666
|
}
|
|
667
|
+
await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
|
|
668
|
+
await syncAssets();
|
|
720
669
|
|
|
721
670
|
// Atomic swap
|
|
722
671
|
if (await ReactNativeBlobUtil.fs.exists(finalBundlePath)) {
|
|
@@ -724,7 +673,7 @@ export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress,
|
|
|
724
673
|
}
|
|
725
674
|
await ReactNativeBlobUtil.fs.mv(tempBundle, finalBundlePath);
|
|
726
675
|
const metadata = await loadMetadata(config.baseAppVersion);
|
|
727
|
-
const newMetadata = registerNewVersion(metadata, patch.toVersion);
|
|
676
|
+
const newMetadata = registerNewVersion(metadata, patch.toVersion, config.appVersion);
|
|
728
677
|
await saveMetadata(newMetadata);
|
|
729
678
|
|
|
730
679
|
// ── CRITICAL: Mark healthy BEFORE reload so native OtaBundleResolver
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","ReactNativeBlobUtil","CryptoJS","NativeBsPatch","createOtaLogger","OtaEvent","ensureOtaDir","getBundlePath","loadMetadata","registerNewVersion","saveMetadata","CustomStorageProvider","GitHubReleaseStorageProvider","GitHubRawStorageProvider","OtaStatus","OtaStorageType","OTA_DIR","fs","dirs","DocumentDir","DEFAULT_STORAGE","GITHUB_STORAGE","GITHUB_RAW_STORAGE","getStorage","config","storage","storageType","GITHUB","GITHUB_RAW","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","toLowerCase","verifySignature","filePath","signature","publicKey","isValid","__DEV__","console","warn","fileData","readFile","fileWords","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","e","delay","pow","Promise","resolve","setTimeout","fetchOtaManifest","fetchManifest","message","bundledPatches","ASSET_STORE_DIR","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","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","DOWNLOAD_SUCCESS","initialWorkers","min","workers","Array","fill","all","getLocalAssetPath","getLocalPatchPath","patch","docDir","id","applyOtaPatchInternal","options","autoReload","allowDebugUpdates","UP_TO_DATE","onEvent","totalStart","Date","now","finalBundlePath","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","oldBundlePath","currentVersion","bundleFilename","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","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":["Platform","ReactNativeBlobUtil","NativeBsPatch","createOtaLogger","OtaEvent","ensureOtaDir","getBundlePath","loadMetadata","registerNewVersion","saveMetadata","GitHubRawStorageProvider","OtaStatus","OTA_DIR","fs","dirs","DocumentDir","DEFAULT_STORAGE","getStorage","config","storage","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","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","e","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","fetchOtaManifest","fetchManifest","error","message","bundledPatches","ASSET_STORE_DIR","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","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","DOWNLOAD_SUCCESS","initialWorkers","min","workers","Array","fill","all","getLocalAssetPath","getLocalPatchPath","patch","docDir","appVersion","id","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","onEvent","totalStart","Date","now","finalBundlePath","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","oldBundlePath","currentVersion","bundleFilename","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","totalMs","PATCH_SUCCESS","SUCCESS","patchSizeKB","markAsHealthy","reloadBundle","fullBundleUrl","actualHash","fallbackError","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,8 +25,6 @@ export let OtaEvent = /*#__PURE__*/function (OtaEvent) {
|
|
|
25
25
|
OtaEvent["RESET_FACTORY"] = "reset_factory";
|
|
26
26
|
OtaEvent["VERSION_INCOMPATIBLE"] = "version_incompatible";
|
|
27
27
|
OtaEvent["SIGNATURE_INVALID"] = "signature_invalid";
|
|
28
|
-
OtaEvent["DECOMPRESS_START"] = "decompress_start";
|
|
29
|
-
OtaEvent["DECOMPRESS_SUCCESS"] = "decompress_success";
|
|
30
28
|
return OtaEvent;
|
|
31
29
|
}({});
|
|
32
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeBsPatch","OtaEvent","createOtaLogger","onEvent","emit","event","details","entry","timestamp","Date","now","logStr","JSON","stringify","console","log","logNative"],"sourceRoot":"../../../src","sources":["ota/otaLogger.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,aAAa,MAAM,kBAAkB;AAE5C,WAAYC,QAAQ,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","OtaEvent","createOtaLogger","onEvent","emit","event","details","entry","timestamp","Date","now","logStr","JSON","stringify","console","log","logNative"],"sourceRoot":"../../../src","sources":["ota/otaLogger.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,aAAa,MAAM,kBAAkB;AAE5C,WAAYC,QAAQ,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;AACA,OAAO,MAAMC,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,IAAIX,aAAa,IAAIA,aAAa,CAACgB,SAAS,EAAE;MAC5ChB,aAAa,CAACgB,SAAS,CAACL,MAAM,CAAC;IACjC;;IAEA;IACAR,OAAO,GAAGI,KAAK,CAAC;EAClB,CAAC;EAED,OAAO;IAAEH;EAAK,CAAC;AACjB,CAAC","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { Platform } from 'react-native';
|
|
|
4
4
|
import ReactNativeBlobUtil from 'react-native-blob-util';
|
|
5
5
|
const OTA_DIR = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota`;
|
|
6
6
|
const METADATA_PATH = `${OTA_DIR}/metadata.json`;
|
|
7
|
+
const METADATA_TMP_PATH = `${METADATA_PATH}.tmp`;
|
|
7
8
|
|
|
8
9
|
/** Promise-based lock to prevent concurrent metadata writes (double-tap guard). */
|
|
9
10
|
let saveLock = Promise.resolve();
|
|
@@ -25,9 +26,11 @@ export const ensureOtaDir = async () => {
|
|
|
25
26
|
*/
|
|
26
27
|
export const loadMetadata = async defaultVersion => {
|
|
27
28
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// A crash between unlink and rename in saveMetadata leaves only the .tmp copy
|
|
30
|
+
for (const path of [METADATA_PATH, METADATA_TMP_PATH]) {
|
|
31
|
+
if (await ReactNativeBlobUtil.fs.exists(path)) {
|
|
32
|
+
return JSON.parse(await ReactNativeBlobUtil.fs.readFile(path, 'utf8'));
|
|
33
|
+
}
|
|
31
34
|
}
|
|
32
35
|
} catch (e) {
|
|
33
36
|
console.warn('[otaMetadata] Failed to load metadata:', e);
|
|
@@ -55,7 +58,12 @@ export const saveMetadata = async metadata => {
|
|
|
55
58
|
try {
|
|
56
59
|
await prevLock;
|
|
57
60
|
await ensureOtaDir();
|
|
58
|
-
|
|
61
|
+
// Write-then-rename so a kill mid-write never leaves truncated JSON
|
|
62
|
+
await ReactNativeBlobUtil.fs.writeFile(METADATA_TMP_PATH, JSON.stringify(metadata, null, 2), 'utf8');
|
|
63
|
+
if (await ReactNativeBlobUtil.fs.exists(METADATA_PATH)) {
|
|
64
|
+
await ReactNativeBlobUtil.fs.unlink(METADATA_PATH);
|
|
65
|
+
}
|
|
66
|
+
await ReactNativeBlobUtil.fs.mv(METADATA_TMP_PATH, METADATA_PATH);
|
|
59
67
|
} catch (e) {
|
|
60
68
|
console.error('[otaMetadata] Failed to save metadata:', e);
|
|
61
69
|
throw new Error(`Failed to save metadata: ${e.message}`);
|
|
@@ -75,12 +83,13 @@ export const MAX_VERSION_HISTORY = 3;
|
|
|
75
83
|
* @param newVersion - The newly applied OTA version.
|
|
76
84
|
* @returns Updated metadata object.
|
|
77
85
|
*/
|
|
78
|
-
export const registerNewVersion = (metadata, newVersion) => {
|
|
86
|
+
export const registerNewVersion = (metadata, newVersion, appVersion) => {
|
|
79
87
|
const versions = [metadata.currentVersion, ...(metadata.previousVersions || [])];
|
|
80
88
|
// Keep internal history unique and capped
|
|
81
89
|
const uniquePrevious = Array.from(new Set(versions)).filter(v => v !== newVersion).slice(0, MAX_VERSION_HISTORY);
|
|
82
90
|
return {
|
|
83
91
|
...metadata,
|
|
92
|
+
appVersion: appVersion ?? metadata.appVersion,
|
|
84
93
|
currentVersion: newVersion,
|
|
85
94
|
previousVersions: uniquePrevious,
|
|
86
95
|
rollbackCount: 0,
|
|
@@ -113,7 +122,7 @@ export const cleanupOldVersions = async (metadata, baseVersion) => {
|
|
|
113
122
|
}
|
|
114
123
|
}
|
|
115
124
|
// Clean up leftover temporary bundle files (.tmp)
|
|
116
|
-
if (item.endsWith('.tmp')) {
|
|
125
|
+
if (item.endsWith('.tmp') && item !== 'metadata.json.tmp') {
|
|
117
126
|
await ReactNativeBlobUtil.fs.unlink(`${OTA_DIR}/${item}`).catch(() => {});
|
|
118
127
|
}
|
|
119
128
|
}
|
|
@@ -130,10 +139,12 @@ export const cleanupOldVersions = async (metadata, baseVersion) => {
|
|
|
130
139
|
* @param defaultVersion - Base version for metadata lookup fallback.
|
|
131
140
|
* @returns The updated metadata.
|
|
132
141
|
*/
|
|
133
|
-
export const markHealthy = async defaultVersion => {
|
|
142
|
+
export const markHealthy = async (defaultVersion, appVersion) => {
|
|
134
143
|
const metadata = await loadMetadata(defaultVersion);
|
|
135
144
|
const updated = {
|
|
136
145
|
...metadata,
|
|
146
|
+
// Stamp legacy metadata so the native resolver can detect a store update later
|
|
147
|
+
appVersion: metadata.appVersion ?? appVersion,
|
|
137
148
|
lastLaunchSuccessful: true,
|
|
138
149
|
rollbackCount: 0
|
|
139
150
|
};
|