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.
Files changed (89) hide show
  1. package/README.md +22 -32
  2. package/android/src/main/java/vn/reactnativebspatch/BsPatchModule.kt +15 -102
  3. package/android/src/main/java/vn/reactnativebspatch/OtaBundleResolver.kt +21 -1
  4. package/cpp/bsdiff/bspatch.c +1 -0
  5. package/ios/OtaBundleResolver.swift +16 -1
  6. package/ios/RNBsPatch.mm +61 -154
  7. package/lib/commonjs/NativeBsPatch.js.map +1 -1
  8. package/lib/commonjs/index.js +4 -4
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/ota/OtaProvider.js +26 -22
  11. package/lib/commonjs/ota/OtaProvider.js.map +1 -1
  12. package/lib/commonjs/ota/otaAssetResolver.js +8 -2
  13. package/lib/commonjs/ota/otaAssetResolver.js.map +1 -1
  14. package/lib/commonjs/ota/otaCore.js +89 -141
  15. package/lib/commonjs/ota/otaCore.js.map +1 -1
  16. package/lib/commonjs/ota/otaLogger.js +0 -2
  17. package/lib/commonjs/ota/otaLogger.js.map +1 -1
  18. package/lib/commonjs/ota/otaMetadata.js +18 -7
  19. package/lib/commonjs/ota/otaMetadata.js.map +1 -1
  20. package/lib/commonjs/ota/storage/GitHubRawStorage.js +3 -1
  21. package/lib/commonjs/ota/storage/GitHubRawStorage.js.map +1 -1
  22. package/lib/commonjs/ota/types.js +1 -10
  23. package/lib/commonjs/ota/types.js.map +1 -1
  24. package/lib/module/NativeBsPatch.js.map +1 -1
  25. package/lib/module/index.js +1 -1
  26. package/lib/module/index.js.map +1 -1
  27. package/lib/module/ota/OtaProvider.js +26 -22
  28. package/lib/module/ota/OtaProvider.js.map +1 -1
  29. package/lib/module/ota/otaAssetResolver.js +8 -2
  30. package/lib/module/ota/otaAssetResolver.js.map +1 -1
  31. package/lib/module/ota/otaCore.js +88 -139
  32. package/lib/module/ota/otaCore.js.map +1 -1
  33. package/lib/module/ota/otaLogger.js +0 -2
  34. package/lib/module/ota/otaLogger.js.map +1 -1
  35. package/lib/module/ota/otaMetadata.js +18 -7
  36. package/lib/module/ota/otaMetadata.js.map +1 -1
  37. package/lib/module/ota/storage/GitHubRawStorage.js +3 -1
  38. package/lib/module/ota/storage/GitHubRawStorage.js.map +1 -1
  39. package/lib/module/ota/types.js +0 -9
  40. package/lib/module/ota/types.js.map +1 -1
  41. package/lib/typescript/NativeBsPatch.d.ts +3 -15
  42. package/lib/typescript/NativeBsPatch.d.ts.map +1 -1
  43. package/lib/typescript/index.d.ts +1 -1
  44. package/lib/typescript/index.d.ts.map +1 -1
  45. package/lib/typescript/ota/OtaProvider.d.ts.map +1 -1
  46. package/lib/typescript/ota/otaAssetResolver.d.ts.map +1 -1
  47. package/lib/typescript/ota/otaCore.d.ts +5 -42
  48. package/lib/typescript/ota/otaCore.d.ts.map +1 -1
  49. package/lib/typescript/ota/otaLogger.d.ts +1 -3
  50. package/lib/typescript/ota/otaLogger.d.ts.map +1 -1
  51. package/lib/typescript/ota/otaMetadata.d.ts +2 -2
  52. package/lib/typescript/ota/otaMetadata.d.ts.map +1 -1
  53. package/lib/typescript/ota/types.d.ts +18 -54
  54. package/lib/typescript/ota/types.d.ts.map +1 -1
  55. package/package.json +3 -6
  56. package/react-native-bspatch.podspec +0 -1
  57. package/src/NativeBsPatch.ts +3 -16
  58. package/src/index.ts +1 -1
  59. package/src/ota/OtaProvider.tsx +24 -23
  60. package/src/ota/otaAssetResolver.ts +5 -2
  61. package/src/ota/otaCore.ts +118 -176
  62. package/src/ota/otaLogger.ts +0 -2
  63. package/src/ota/otaMetadata.ts +18 -8
  64. package/src/ota/storage/GitHubRawStorage.ts +1 -1
  65. package/src/ota/types.ts +18 -57
  66. package/tools/build_ota.sh +101 -174
  67. package/tools/setup_project.js +33 -14
  68. package/tools/update_registry.js +24 -28
  69. package/tools/{upload_ota_custom.sh → upload_ota.sh} +33 -114
  70. package/lib/commonjs/crypto-js.d.js +0 -2
  71. package/lib/commonjs/crypto-js.d.js.map +0 -1
  72. package/lib/commonjs/ota/storage/CustomStorage.js +0 -160
  73. package/lib/commonjs/ota/storage/CustomStorage.js.map +0 -1
  74. package/lib/commonjs/ota/storage/GitHubReleaseStorage.js +0 -99
  75. package/lib/commonjs/ota/storage/GitHubReleaseStorage.js.map +0 -1
  76. package/lib/module/crypto-js.d.js +0 -2
  77. package/lib/module/crypto-js.d.js.map +0 -1
  78. package/lib/module/ota/storage/CustomStorage.js +0 -154
  79. package/lib/module/ota/storage/CustomStorage.js.map +0 -1
  80. package/lib/module/ota/storage/GitHubReleaseStorage.js +0 -93
  81. package/lib/module/ota/storage/GitHubReleaseStorage.js.map +0 -1
  82. package/lib/typescript/ota/storage/CustomStorage.d.ts +0 -12
  83. package/lib/typescript/ota/storage/CustomStorage.d.ts.map +0 -1
  84. package/lib/typescript/ota/storage/GitHubReleaseStorage.d.ts +0 -20
  85. package/lib/typescript/ota/storage/GitHubReleaseStorage.d.ts.map +0 -1
  86. package/src/crypto-js.d.ts +0 -1
  87. package/src/ota/storage/CustomStorage.ts +0 -166
  88. package/src/ota/storage/GitHubReleaseStorage.ts +0 -103
  89. package/tools/bsdiff +0 -0
@@ -3,15 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.verifySignature = exports.verifyHash = exports.semverGte = exports.getLocalPatchPath = exports.getLocalAssetPath = exports.fetchOtaManifest = exports.applyOtaPatchInternal = void 0;
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 (HMAC signature)
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 _CustomStorage.CustomStorageProvider();
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
- * Get the storage provider for the given configuration.
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
- * Verify HMAC-SHA256 signature of a file.
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 verifySignature = async (filePath, signature, publicKey) => {
117
- if (!signature || !publicKey) return true; // Skip if not configured
118
- try {
119
- // Fast-path: use Native streaming HMAC-SHA256 (avoids Base64 conversion and JS thread blocking)
120
- if (typeof _NativeBsPatch.default.verifySignature === 'function') {
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: destPath,
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
- assets = (manifest.assets || []).filter(a => !a.isBase);
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
- if (__DEV__) {
288
- console.warn('[otaCore] Failed to fetch asset manifest:', e);
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 _reactNativeBlobUtil.default.config({
338
- fileCache: true,
339
- path: localPath,
340
- followRedirect: true,
341
- timeout: config.network?.timeoutMs ?? 30000
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
- // Non-fatal: continue with other assets
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
- const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, options = {
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
- if (patch.signature && config.publicKey) {
442
+ // Verify before feeding the patch to native bspatch
443
+ if (config.publicKey) {
497
444
  onStatus(_types.OtaStatus.APPLYING, 'Verifying signature...');
498
- const sigValid = await verifySignature(actualPatchPath, patch.signature, config.publicKey);
499
- if (!sigValid) {
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 new Error('Patch signature verification failed. Possible MITM.');
451
+ throw sigError;
504
452
  }
505
453
  }
506
454
 
507
455
  // ── Step 4.2: Download & Sync Assets ──
508
- if (patch.assetManifestUrl) {
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
- if (!(await _reactNativeBlobUtil.default.fs.exists(actualOldPath))) {
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(actualPatchPath);
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=${actualPatchPath}`);
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, actualPatchPath);
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;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAkCpB;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":[]}
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
- if (await _reactNativeBlobUtil.default.fs.exists(METADATA_PATH)) {
35
- const content = await _reactNativeBlobUtil.default.fs.readFile(METADATA_PATH, 'utf8');
36
- return JSON.parse(content);
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
- await _reactNativeBlobUtil.default.fs.writeFile(METADATA_PATH, JSON.stringify(metadata, null, 2), 'utf8');
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
  };