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.
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 +117 -183
  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
@@ -6,8 +6,7 @@
6
6
  * Responsibilities:
7
7
  * - Download patches with retry
8
8
  * - Verify integrity (SHA-256 hash)
9
- * - Verify security (HMAC signature)
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, OtaStorageType } from './types';
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 CustomStorageProvider();
32
- const GITHUB_STORAGE = new GitHubReleaseStorageProvider();
33
- const GITHUB_RAW_STORAGE = new GitHubRawStorageProvider();
27
+ const DEFAULT_STORAGE = new GitHubRawStorageProvider();
34
28
 
35
- /**
36
- * Get the storage provider for the given configuration.
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
- * Verify HMAC-SHA256 signature of a file.
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 decompressGzip = async filePath => {
146
- if (!filePath.endsWith('.gz')) {
147
- return filePath;
148
- }
149
- const decompressedPath = filePath.replace(/\.gz$/, '');
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: destPath,
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
- assets = (manifest.assets || []).filter(a => !a.isBase);
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
- if (__DEV__) {
280
- console.warn('[otaCore] Failed to fetch asset manifest:', e);
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 ReactNativeBlobUtil.config({
330
- fileCache: true,
331
- path: localPath,
332
- followRedirect: true,
333
- timeout: config.network?.timeoutMs ?? 30000
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
- // Non-fatal: continue with other assets
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
- export const applyOtaPatchInternal = async (patch, config, onStatus, onProgress, options = {
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
- if (patch.signature && config.publicKey) {
432
+ // Verify before feeding the patch to native bspatch
433
+ if (config.publicKey) {
487
434
  onStatus(OtaStatus.APPLYING, 'Verifying signature...');
488
- const sigValid = await verifySignature(actualPatchPath, patch.signature, config.publicKey);
489
- if (!sigValid) {
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 new Error('Patch signature verification failed. Possible MITM.');
441
+ throw sigError;
494
442
  }
495
443
  }
496
444
 
497
445
  // ── Step 4.2: Download & Sync Assets ──
498
- if (patch.assetManifestUrl) {
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
- if (!(await ReactNativeBlobUtil.fs.exists(actualOldPath))) {
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(actualPatchPath);
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=${actualPatchPath}`);
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, actualPatchPath);
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":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,cAAc;AACvC,OAAOC,mBAAmB,MAAM,wBAAwB;AACxD,OAAOC,aAAa,MAAM,kBAAkB;AAC5C,SAASC,eAAe,EAAEC,QAAQ,QAAQ,aAAa;AACvD,SACIC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,kBAAkB,EAClBC,YAAY,QACT,eAAe;AACtB,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SACIC,SAAS,QAMN,SAAS;AAEhB,MAAMC,OAAO,GAAG,GAAGX,mBAAmB,CAACY,EAAE,CAACC,IAAI,CAACC,WAAW,MAAM;;AAEhE;;AAEA,MAAMC,eAAe,GAAG,IAAIN,wBAAwB,CAAC,CAAC;;AAEtD;AACA,MAAMO,UAAU,GAAIC,MAAiB,IACjCA,MAAM,CAACC,OAAO,IAAIH,eAAe;;AAErC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,SAAS,GAAGA,CAACC,CAAS,EAAEC,CAAS,KAAc;EACxD,MAAMC,EAAE,GAAGF,CAAC,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC;EACnC,MAAMC,EAAE,GAAGL,CAAC,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC;EACnC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IACxB,MAAMC,EAAE,GAAGN,EAAE,CAACK,CAAC,CAAC,IAAI,CAAC;IACrB,MAAME,EAAE,GAAGH,EAAE,CAACC,CAAC,CAAC,IAAI,CAAC;IACrB,IAAIC,EAAE,GAAGC,EAAE,EAAE,OAAO,IAAI;IACxB,IAAID,EAAE,GAAGC,EAAE,EAAE,OAAO,KAAK;EAC7B;EACA,OAAO,IAAI,CAAC,CAAC;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAG,MAAAA,CACtBC,IAAY,EACZC,YAAqB,KACF;EACnB,IAAI,CAACA,YAAY,EAAE,OAAO,IAAI;EAC9B,IAAI;IACA,MAAMC,IAAI,GAAG,MAAMjC,mBAAmB,CAACY,EAAE,CAACqB,IAAI,CAACF,IAAI,EAAE,QAAQ,CAAC;IAC9D,OAAOE,IAAI,CAACC,WAAW,CAAC,CAAC,KAAKF,YAAY,CAACE,WAAW,CAAC,CAAC;EAC5D,CAAC,CAAC,MAAM;IACJ,OAAO,KAAK;EAChB;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,MAAAA,CACjBC,QAAgB,EAChBC,SAA6B,EAC7BpB,MAAiB,EACjBqB,IAAY,KACI;EAChB,IAAI,CAACrB,MAAM,CAACsB,SAAS,EAAE;EACvB,MAAMC,KAAK,GACP,CAAC,CAACH,SAAS,KACV,MAAMpC,aAAa,CAACwC,eAAe,CAACL,QAAQ,EAAEC,SAAS,EAAEpB,MAAM,CAACsB,SAAS,CAAC,CAACG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;EACnG,IAAI,CAACF,KAAK,EAAE;IACR,MAAM,IAAIG,KAAK,CAAC,GAAGL,IAAI,+BAA+B,CAAC;EAC3D;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMM,iBAAiB,GAAG,MAAAA,CACtBC,GAAW,EACXC,QAAgB,EAChB7B,MAAiB,EACjB8B,UAAqC,EACrCC,OAA+B,GAAG,CAAC,CAAC,KACpB;EAChB,MAAMC,UAAU,GAAGhC,MAAM,CAACiC,OAAO,EAAEC,KAAK,IAAI,CAAC;EAC7C,MAAMC,OAAO,GAAGnC,MAAM,CAACiC,OAAO,EAAEG,SAAS,IAAI,KAAK;EAElD,KAAK,IAAI1B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsB,UAAU,EAAEtB,CAAC,EAAE,EAAE;IACjC,IAAI2B,OAAsC,GAAG,IAAI;IACjD;IACA;IACA,MAAMC,QAAQ,GAAG,GAAGT,QAAQ,OAAO;IACnC,IAAI;MACA,MAAMU,IAAI,GAAGxD,mBAAmB,CAACiB,MAAM,CAAC;QACpCwC,SAAS,EAAE,IAAI;QACf1B,IAAI,EAAEwB,QAAQ;QACdG,cAAc,EAAE,IAAI;QACpBN;MACJ,CAAC,CAAC,CACGO,KAAK,CAAC,KAAK,EAAEd,GAAG,EAAE;QACf,eAAe,EAAE,UAAU;QAC3B,GAAGG;MACP,CAAC,CAAC,CACDY,QAAQ,CAAC,CAACC,QAAa,EAAEC,KAAU,KAAK;QACrC,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CACrBxC,MAAM,CAACoC,QAAQ,CAAC,GAAGpC,MAAM,CAACqC,KAAK,CAAC,GAAI,GACzC,CAAC;QACDf,UAAU,CAACgB,OAAO,CAAC;MACvB,CAAC,CAAC;MACNT,OAAO,GAAG;QAAEY,MAAM,EAAEA,CAAA,KAAMV,IAAI,CAACU,MAAM,CAAC;MAAE,CAAC;MACzC,MAAMC,IAAI,GAAG,MAAMX,IAAI;MACvB,MAAMY,MAAM,GAAGD,IAAI,CAACE,QAAQ,CAACD,MAAM;MACnC,IAAIA,MAAM,GAAG,GAAG,IAAIA,MAAM,IAAI,GAAG,EAAE;QAC/B,MAAM,IAAIzB,KAAK,CAAC,QAAQyB,MAAM,QAAQvB,GAAG,EAAE,CAAC;MAChD;MACA,IAAI,MAAM7C,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACxB,QAAQ,CAAC,EAAE;QAC/C,MAAM9C,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAACzB,QAAQ,CAAC;MACjD;MACA,MAAM9C,mBAAmB,CAACY,EAAE,CAAC4D,EAAE,CAACjB,QAAQ,EAAET,QAAQ,CAAC;MACnD;IACJ,CAAC,CAAC,OAAO2B,CAAC,EAAE;MACR;MACAnB,OAAO,EAAEY,MAAM,CAAC,CAAC;MACjB,MAAMlE,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAAChB,QAAQ,CAAC,CAACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;MAC7D,IAAIf,CAAC,KAAKsB,UAAU,GAAG,CAAC,EAAE,MAAMwB,CAAC;MACjC,MAAMC,KAAK,GAAGV,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEhD,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;MACrC,IAAIiD,OAAO,EAAE;QACTC,OAAO,CAACC,IAAI,CACR,8BACInD,CAAC,GAAG,CAAC,wBACe+C,KAAK,OACjC,CAAC;MACL;MACA,MAAM,IAAIK,OAAO,CAAOC,OAAO,IAAIC,UAAU,CAACD,OAAO,EAAEN,KAAK,CAAC,CAAC;IAClE;EACJ;AACJ,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMQ,gBAAgB,GAAG,MAC5BjE,MAAiB,IACK;EACtB,IAAI;IACA,MAAMC,OAAO,GAAGF,UAAU,CAACC,MAAM,CAAC;IAClC,OAAO,MAAMC,OAAO,CAACiE,aAAa,CAAClE,MAAM,CAAC;EAC9C,CAAC,CAAC,OAAOmE,KAAK,EAAE;IACZP,OAAO,CAACC,IAAI,CACR,iCAAiC,EAChCM,KAAK,CAAWC,OACrB,CAAC;IACD,OAAOpE,MAAM,CAACqE,cAAc,IAAI,EAAE;EACtC;AACJ,CAAC;;AAED;;AAEA,MAAMC,eAAe,GAAG,GAAGvF,mBAAmB,CAACY,EAAE,CAACC,IAAI,CAACC,WAAW,aAAa;;AAE/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0E,qBAAqB,GAAG,MAAAA,CAC1BC,gBAAwB,EACxBC,OAAe,EACfzE,MAAiB,EACjB0E,GAAuC,EACvCC,QAIS,EACT7C,UAAqC,KACrB;EAChB6C,QAAQ,CAAClF,SAAS,CAACmF,cAAc,EAAE,mBAAmB,CAAC;EAEvD,MAAMC,UAAU,GAAG,GAAGnF,OAAO,KAAK+E,OAAO,EAAE;EAC3C,MAAMK,YAAY,GAAG,GAAGD,UAAU,oBAAoBJ,OAAO,OAAO;;EAEpE;EACA,IAAI,EAAE,MAAM1F,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACiB,eAAe,CAAC,CAAC,EAAE;IACzD,MAAMvF,mBAAmB,CAACY,EAAE,CAACoF,KAAK,CAACT,eAAe,CAAC;EACvD;;EAEA;EACA,IAAIU,MAAkB,GAAG,EAAE;EAC3B,IAAI;IACA,IAAIrB,OAAO,EAAE;MACTC,OAAO,CAACc,GAAG,CACP,2CAA2CF,gBAAgB,EAC/D,CAAC;IACL;IACA,MAAMtB,IAAI,GAAG,MAAMnE,mBAAmB,CAACiB,MAAM,CAAC;MAC1CyC,cAAc,EAAE,IAAI;MACpBN,OAAO,EAAE;IACb,CAAC,CAAC,CAACO,KAAK,CAAC,KAAK,EAAE8B,gBAAgB,EAAE;MAC9B,eAAe,EAAE;IACrB,CAAC,CAAC;IAEF,IAAItB,IAAI,CAACE,QAAQ,CAACD,MAAM,KAAK,GAAG,EAAE;MAC9B,MAAM,IAAIzB,KAAK,CACX,qCAAqCwB,IAAI,CAACE,QAAQ,CAACD,MAAM,EAC7D,CAAC;IACL;;IAEA;IACA,IAAI,EAAE,MAAMpE,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACwB,UAAU,CAAC,CAAC,EAAE;MACpD,MAAM9F,mBAAmB,CAACY,EAAE,CAACoF,KAAK,CAACF,UAAU,CAAC;IAClD;IAEA,MAAMI,YAAY,GACd,OAAO/B,IAAI,CAACgC,IAAI,KAAK,QAAQ,GACvBhC,IAAI,CAACgC,IAAI,GACTC,IAAI,CAACC,SAAS,CAAClC,IAAI,CAACgC,IAAI,CAAC;IACnC,MAAMnG,mBAAmB,CAACY,EAAE,CAAC0F,SAAS,CAClCP,YAAY,EACZG,YAAY,EACZ,MACJ,CAAC;IACD,IAAItB,OAAO,EAAE;MACTC,OAAO,CAACc,GAAG,CAAC,sCAAsCI,YAAY,EAAE,CAAC;IACrE;IAEA,MAAMQ,QAAQ,GAAGH,IAAI,CAACI,KAAK,CAACN,YAAY,CAAC;IACzC;IACA;IACAD,MAAM,GAAG,CAACM,QAAQ,CAACN,MAAM,IAAI,EAAE,EAAEQ,MAAM,CAClCrF,CAAM,IACH,CAACA,CAAC,CAACsF,MAAM,IACT,iBAAiB,CAACC,IAAI,CAACvF,CAAC,CAACa,IAAI,CAAC,IAC9B,cAAc,CAAC0E,IAAI,CAACvF,CAAC,CAACwF,GAAG,CACjC,CAAC;EACL,CAAC,CAAC,OAAOnC,CAAC,EAAE;IACR;IACA,MAAM,IAAI9B,KAAK,CAAC,mCAAoC8B,CAAC,CAAWY,OAAO,EAAE,CAAC;EAC9E;EAEA,IAAIY,MAAM,CAACY,MAAM,KAAK,CAAC,EAAE;IACrB,IAAIjC,OAAO,EAAE;MACTC,OAAO,CAACc,GAAG,CAAC,mDAAmD,CAAC;IACpE;IACA;EACJ;;EAEA;EACAC,QAAQ,CAAClF,SAAS,CAACmF,cAAc,EAAE,WAAWI,MAAM,CAACY,MAAM,cAAc,CAAC;EAE1E,IAAIC,SAAS,GAAG,CAAC;EACjB,IAAIC,UAAU,GAAG,CAAC;EAClB,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,MAAM,GAAG,CAAC;EAEd,MAAMC,cAAc,GAAGA,CAAA,KAAM;IACzBJ,SAAS,EAAE;IACX,MAAM/C,OAAO,GAAGC,IAAI,CAACmD,KAAK,CAAEL,SAAS,GAAGb,MAAM,CAACY,MAAM,GAAI,GAAG,CAAC;IAC7D9D,UAAU,CAACgB,OAAO,CAAC;EACvB,CAAC;;EAED;EACA,MAAMqD,cAAc,GAAG,CAAC,CAAC,CAAC;EAC1B,IAAIC,KAAK,GAAG,CAAC;EAEb,MAAMC,YAAY,GAAG,MAAAA,CAAA,KAA2B;IAC5C,IAAID,KAAK,IAAIpB,MAAM,CAACY,MAAM,EAAE;IAE5B,MAAMU,KAAK,GAAGtB,MAAM,CAACoB,KAAK,EAAE,CAAC;IAC7B,MAAMG,QAAQ,GAAG,GAAGD,KAAK,CAACtF,IAAI,IAAIsF,KAAK,CAACX,GAAG,EAAE;IAC7C,MAAMa,SAAS,GAAG,GAAGlC,eAAe,IAAIiC,QAAQ,EAAE;;IAElD;IACA,IAAI,MAAMxH,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACmD,SAAS,CAAC,EAAE;MAChDT,MAAM,EAAE;MACRE,cAAc,CAAC,CAAC;MAChB,MAAMI,YAAY,CAAC,CAAC,CAAC,CAAC;MACtB;IACJ;;IAEA;IACA1B,QAAQ,CACJlF,SAAS,CAACmF,cAAc,EACxB,mBAAmBiB,SAAS,GAAG,CAAC,IAAIb,MAAM,CAACY,MAAM,MACrD,CAAC;IACD,IAAI;MACA,MAAM3F,OAAO,GAAGF,UAAU,CAACC,MAAM,CAAC;MAClC,MAAMyG,QAAQ,GAAG,MAAMxG,OAAO,CAACyG,WAAW,CACtCJ,KAAK,CAACtF,IAAI,EACVsF,KAAK,CAACX,GAAG,EACT3F,MACJ,CAAC;MACD,IAAI,CAACyG,QAAQ,EAAE;QACX,IAAI9C,OAAO,EAAE;UACTC,OAAO,CAACC,IAAI,CACR,yCAAyC0C,QAAQ,EACrD,CAAC;QACL;MACJ,CAAC,MAAM;QACH,MAAM5E,iBAAiB,CAAC8E,QAAQ,EAAED,SAAS,EAAExG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,EAAE,MAAMa,UAAU,CAAC2F,SAAS,EAAEF,KAAK,CAACtF,IAAI,CAAC,CAAC,EAAE;UAC5C,MAAMjC,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAACkD,SAAS,CAAC,CAAC/E,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;UAC9D,MAAM,IAAIC,KAAK,CAAC,eAAe,CAAC;QACpC;QACAoE,UAAU,EAAE;QACZpB,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC0H,gBAAgB,EAAE;UAChCxC,OAAO,EAAE,qBAAqBmC,QAAQ;QAC1C,CAAC,CAAC;MACN;IACJ,CAAC,CAAC,OAAO/C,CAAC,EAAE;MACR,IAAIG,OAAO,EAAE;QACTC,OAAO,CAACC,IAAI,CACR,sCAAsC0C,QAAQ,GAAG,EACjD/C,CACJ,CAAC;MACL;MACAwC,MAAM,EAAE,CAAC,CAAC;IACd,CAAC,SAAS;MACNC,cAAc,CAAC,CAAC;MAChB,MAAMI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1B;EACJ,CAAC;;EAED;EACA,MAAMQ,cAAc,GAAG9D,IAAI,CAAC+D,GAAG,CAACX,cAAc,EAAEnB,MAAM,CAACY,MAAM,CAAC;EAC9D,MAAMmB,OAAO,GAAGC,KAAK,CAACH,cAAc,CAAC,CAChCI,IAAI,CAAC,IAAI,CAAC,CACV1G,GAAG,CAAC,MAAM8F,YAAY,CAAC,CAAC,CAAC;EAC9B,MAAMvC,OAAO,CAACoD,GAAG,CAACH,OAAO,CAAC;EAE1B,IAAIf,MAAM,GAAG,CAAC,EAAE;IACZ,MAAM,IAAItE,KAAK,CAAC,GAAGsE,MAAM,8BAA8B,CAAC;EAC5D;EAEArB,QAAQ,CACJlF,SAAS,CAACmF,cAAc,EACxB,kBAAkBkB,UAAU,SAASC,MAAM,UAC/C,CAAC;EACDnC,OAAO,CAACc,GAAG,CACP,qBAAqBoB,UAAU,gBAAgBC,MAAM,aACzD,CAAC;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMoB,iBAAiB,GAAGA,CAACnG,IAAY,EAAE2E,GAAW,KACvD,GAAGrB,eAAe,IAAItD,IAAI,IAAI2E,GAAG,EAAE;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMyB,iBAAiB,GAAGA,CAACC,KAAe,EAAEC,MAAc,KAC7D,GAAGA,MAAM,cAAcD,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACG,EAAE,QAAQ;;AAE/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,cAAc,GAAG,KAAK;;AAE1B;AACA,OAAO,MAAMC,qBAA+C,GAAG,MAAAA,CAAO,GAAGC,IAAI,KAAK;EAC9E,IAAIF,cAAc,EAAE;IAChB,MAAM,IAAI/F,KAAK,CAAC,2CAA2C,CAAC;EAChE;EACA+F,cAAc,GAAG,IAAI;EACrB,IAAI;IACA,OAAO,MAAMG,iBAAiB,CAAC,GAAGD,IAAI,CAAC;EAC3C,CAAC,SAAS;IACNF,cAAc,GAAG,KAAK;EAC1B;AACJ,CAAC;AAED,MAAMG,iBAAiB,GAAG,MAAAA,CACtBP,KAAe,EACfrH,MAAiB,EACjB2E,QAIS,EACT7C,UAAqC,EACrC+F,OAAiC,GAAG;EAAEC,UAAU,EAAE;AAAK,CAAC,KACvD;EACD,IAAInE,OAAO,IAAI3D,MAAM,CAAC+H,iBAAiB,KAAK,IAAI,EAAE;IAC9CpD,QAAQ,CACJlF,SAAS,CAACuI,UAAU,EACpB,uDACJ,CAAC;IACD,MAAM,IAAItG,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,MAAMgD,GAAG,GAAGzF,eAAe,CAACe,MAAM,CAACiI,OAAO,CAAC;EAC3C,MAAM9I,YAAY,CAAC,CAAC;EACpB,MAAM+I,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAE7B,MAAMC,eAAe,GACjBjJ,aAAa,CAACiI,KAAK,CAACiB,SAAS,EAAEtI,MAAM,CAACuI,cAAc,CAAC,IAAI,EAAE;EAC/D,MAAMC,UAAU,GAAG,GAAGH,eAAe,MAAM;EAC3C,MAAMI,cAAc,GAAGrB,iBAAiB,CACpCC,KAAK,EACLtI,mBAAmB,CAACY,EAAE,CAACC,IAAI,CAACC,WAChC,CAAC;;EAED;EACA,MAAM6I,UAAU,GAAG,MAAAA,CAAA,KAAY;IAC3B,IAAI,CAACrB,KAAK,CAAC7C,gBAAgB,EAAE;IAC7B,MAAMmE,WAAW,GAAG,MAAM5I,UAAU,CAACC,MAAM,CAAC,CAAC4I,gBAAgB,CACzDvB,KAAK,CAAC7C,gBAAgB,EACtBxE,MACJ,CAAC;IACD,MAAMuE,qBAAqB,CACvBoE,WAAW,EACXtB,KAAK,CAACiB,SAAS,EACftI,MAAM,EACN0E,GAAG,EACHC,QAAQ,EACR7C,UACJ,CAAC;EACL,CAAC;EAED,IAAI;IACA;IACA,IAAIuF,KAAK,CAACwB,aAAa,EAAE;MACrB,IAAIC,aAAa,GAAG9I,MAAM,CAACuH,UAAU;MACrC,IAAI,CAACuB,aAAa,IAAI,OAAO9J,aAAa,CAAC+J,aAAa,KAAK,UAAU,EAAE;QACrE,IAAI;UACAD,aAAa,GAAG,MAAM9J,aAAa,CAAC+J,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC,MAAM;UACJD,aAAa,GAAGE,SAAS;QAC7B;MACJ;MACA,IAAI,CAACF,aAAa,EAAE;QAChB,MAAM,IAAIpH,KAAK,CACX,oFACJ,CAAC;MACL;MACA,IAAI,CAACxB,SAAS,CAAC4I,aAAa,EAAEzB,KAAK,CAACwB,aAAa,CAAC,EAAE;QAChDnE,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC+J,oBAAoB,EAAE;UACpC7E,OAAO,EAAE,OAAO0E,aAAa,eAAezB,KAAK,CAACwB,aAAa,EAAE;UACjEpE,OAAO,EAAE4C,KAAK,CAACiB;QACnB,CAAC,CAAC;QACF,MAAM,IAAI5G,KAAK,CACX,cAAcoH,aAAa,0BAA0BzB,KAAK,CAACwB,aAAa,UAC5E,CAAC;MACL;IACJ;;IAEA;IACA,IAAIK,UAAU,GAAG,CAAC;IAClB,IAAIC,cAAc,GAAG,CAAC;IACtB,IAAIC,SAAS,GAAG,KAAK;IAErB,IAAI,MAAMrK,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACoF,cAAc,CAAC,EAAE;MACrD,MAAMY,IAAI,GAAG,MAAMtK,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAACZ,cAAc,CAAC;MAC9DU,cAAc,GAAG3I,MAAM,CAAC6I,IAAI,CAACC,IAAI,CAAC;MAClCF,SAAS,GAAG,IAAI;MAChBtH,UAAU,CAAC,GAAG,CAAC;IACnB,CAAC,MAAM;MACH4C,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACqK,cAAc,EAAE;QAAE9E,OAAO,EAAE4C,KAAK,CAACiB;MAAU,CAAC,CAAC;MAC/D3D,QAAQ,CACJlF,SAAS,CAAC+J,WAAW,EACrB,gBAAgBnC,KAAK,CAACiB,SAAS,KACnC,CAAC;MACD,MAAMmB,OAAO,GAAGtB,IAAI,CAACC,GAAG,CAAC,CAAC;MAC1B,IAAI;QACA,MAAMnI,OAAO,GAAGF,UAAU,CAACC,MAAM,CAAC;QAClC,MAAM4B,GAAG,GAAG,MAAM3B,OAAO,CAAC2I,gBAAgB,CACtCvB,KAAK,CAACd,QAAQ,EACdvG,MACJ,CAAC;QAED,MAAM2B,iBAAiB,CACnBC,GAAG,EACH6G,cAAc,EACdzI,MAAM,EACN8B,UAAU,EACV,CAAC,CACL,CAAC;QACDoH,UAAU,GAAGf,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGqB,OAAO;QACjC,MAAMJ,IAAI,GAAG,MAAMtK,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAACZ,cAAc,CAAC;QAC9DU,cAAc,GAAG3I,MAAM,CAAC6I,IAAI,CAACC,IAAI,CAAC;QAClC5E,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC0H,gBAAgB,EAAE;UAChCnC,OAAO,EAAE4C,KAAK,CAACiB,SAAS;UACxBoB,UAAU,EAAER,UAAU;UACtBS,MAAM,EAAER,cAAc,GAAG;QAC7B,CAAC,CAAC;MACN,CAAC,CAAC,OAAOS,OAAO,EAAE;QACdlF,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC2K,aAAa,EAAE;UAC7B1F,KAAK,EAAGyF,OAAO,CAAWxF,OAAO;UACjCK,OAAO,EAAE4C,KAAK,CAACiB;QACnB,CAAC,CAAC;QACF,MAAMsB,OAAO;MACjB;IACJ;;IAEA;IACA;IACA,IAAI5J,MAAM,CAACsB,SAAS,EAAE;MAClBqD,QAAQ,CAAClF,SAAS,CAACqK,QAAQ,EAAE,wBAAwB,CAAC;MACtD,IAAI;QACA,MAAM5I,YAAY,CAACuH,cAAc,EAAEpB,KAAK,CAACjG,SAAS,EAAEpB,MAAM,EAAE,OAAO,CAAC;MACxE,CAAC,CAAC,OAAO+J,QAAQ,EAAE;QACfrF,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC8K,iBAAiB,EAAE;UAAEvF,OAAO,EAAE4C,KAAK,CAACiB;QAAU,CAAC,CAAC;QAClE,MAAMyB,QAAQ;MAClB;IACJ;;IAEA;IACA,MAAMrB,UAAU,CAAC,CAAC;;IAElB;IACA/D,QAAQ,CAAClF,SAAS,CAACqK,QAAQ,EAAE,qBAAqB,CAAC;IACnD,MAAMG,QAAQ,GAAG,MAAM5K,YAAY,CAACW,MAAM,CAACuI,cAAc,CAAC;IAC1D,MAAM2B,aAAa,GAAG9K,aAAa,CAC/B6K,QAAQ,CAACE,cAAc,EACvBnK,MAAM,CAACuI,cACX,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM6B,cAAc,GAChBtL,QAAQ,CAACuL,EAAE,KAAK,SAAS,GACnB,sBAAsB,GACtB,eAAe;IAEzB,IAAIC,aAAa,GAAG,EAAE;IACtB,IAAI,CAACJ,aAAa,EAAE;MAChB;MACA;MACA,MAAMK,aAAa,GAAG,GAAG7K,OAAO,KAAKuK,QAAQ,CAACE,cAAc,IAAIC,cAAc,EAAE;MAChF,IAAI,MAAMrL,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACkH,aAAa,CAAC,EAAE;QACpD,IAAI5G,OAAO,EAAE;UACTC,OAAO,CAACc,GAAG,CACP,4CAA4CuF,QAAQ,CAACE,cAAc,2BACvE,CAAC;QACL;QACAG,aAAa,GAAGC,aAAa;MACjC,CAAC,MAAM;QACH;QACA;QACA;QACA;QACA;QACAD,aAAa,GAAG,GAAG5K,OAAO,WAAW;QACrC,MAAMV,aAAa,CAACwL,uBAAuB,CACvCJ,cAAc,EACdE,aACJ,CAAC;MACL;IACJ,CAAC,MAAM;MACHA,aAAa,GAAGJ,aAAa;IACjC;;IAEA;IACA,IAAI;MACA,MAAMO,OAAO,GAAG,MAAM1L,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAACiB,aAAa,CAAC;MAChE,MAAMI,SAAS,GAAG,MAAM3L,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAC/CZ,cACJ,CAAC;MACD,IAAI9E,OAAO,EAAE;QACTC,OAAO,CAACc,GAAG,CACP,mCAAmC+F,OAAO,CAACnB,IAAI,SAASgB,aAAa,EACzE,CAAC;QACD1G,OAAO,CAACc,GAAG,CACP,8BAA8BgG,SAAS,CAACpB,IAAI,SAASb,cAAc,EACvE,CAAC;QACD7E,OAAO,CAACc,GAAG,CACP,qCAAqC2C,KAAK,CAACsD,QAAQ,EACvD,CAAC;MACL;IACJ,CAAC,CAAC,MAAM;MACJ;IAAA;;IAGJ;IACA,IAAItD,KAAK,CAACsD,QAAQ,EAAE;MAChBjG,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC0L,iBAAiB,EAAE;QACjCxG,OAAO,EAAE;MACb,CAAC,CAAC;MACFO,QAAQ,CAAClF,SAAS,CAACqK,QAAQ,EAAE,+BAA+B,CAAC;MAC7D,MAAMe,OAAO,GAAG,MAAMhK,UAAU,CAACyJ,aAAa,EAAEjD,KAAK,CAACsD,QAAQ,CAAC;MAC/D,IAAI,CAACE,OAAO,EAAE;QACV;QACA,IAAIC,gBAAgB,GAAG,EAAE;QACzB,IAAIC,OAAO,GAAG,SAAS;QACvB,IAAI;UACAD,gBAAgB,GAAG,MAAM/L,mBAAmB,CAACY,EAAE,CAACqB,IAAI,CAChDsJ,aAAa,EACb,QACJ,CAAC;UACD,MAAMU,OAAO,GAAG,MAAMjM,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAC7CiB,aACJ,CAAC;UACDS,OAAO,GAAG,GAAGC,OAAO,CAAC1B,IAAI,QAAQ;QACrC,CAAC,CAAC,MAAM;UACJ;QAAA;QAEJ,IAAI3F,OAAO,EAAE;UACTC,OAAO,CAACO,KAAK,CACT,kCAAkC,GAC9B,eAAemG,aAAa,IAAI,GAChC,eAAeS,OAAO,IAAI,GAC1B,eAAe1D,KAAK,CAACsD,QAAQ,IAAI,GACjC,eAAeG,gBAAgB,IAAI,GACnC,eAAezD,KAAK,CAACG,EAAE,MAAMH,KAAK,CAAC4D,WAAW,KAAK5D,KAAK,CAACiB,SAAS,GAC1E,CAAC;QACL;QACA5D,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACgM,aAAa,EAAE;UAC7BzG,OAAO,EAAEwF,QAAQ,CAACE,cAAc;UAChC/F,OAAO,EAAE,6BAA6B;UACtC6F,QAAQ,EAAE;YACNkB,QAAQ,EAAE9D,KAAK,CAACsD,QAAQ;YACxBS,MAAM,EAAEN,gBAAgB;YACxBhK,IAAI,EAAEwJ;UACV;QACJ,CAAC,CAAC;QACF,MAAM,IAAI5I,KAAK,CACX,iDACJ,CAAC;MACL;MACAgD,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACmM,mBAAmB,EAAE;QACnCjH,OAAO,EAAE;MACb,CAAC,CAAC;IACN;;IAEA;IACA,MAAMS,UAAU,GAAG,GAAGnF,OAAO,KAAK2H,KAAK,CAACiB,SAAS,EAAE;IACnD,IAAI,EAAE,MAAMvJ,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACwB,UAAU,CAAC,CAAC,EAAE;MACpD,MAAM9F,mBAAmB,CAACY,EAAE,CAACoF,KAAK,CAACF,UAAU,CAAC;IAClD;IAEAH,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACoM,WAAW,EAAE;MAAE7G,OAAO,EAAE4C,KAAK,CAACiB;IAAU,CAAC,CAAC;IAC5D3D,QAAQ,CAAClF,SAAS,CAACqK,QAAQ,EAAE,0BAA0B,CAAC;IACxD,MAAMyB,UAAU,GAAGpD,IAAI,CAACC,GAAG,CAAC,CAAC;IAC7B,MAAMoD,OAAO,GAAG,MAAMxM,aAAa,CAACyM,UAAU,CAC1CnB,aAAa,EACb9B,UAAU,EACVC,cACJ,CAAC;IACD,MAAMiD,OAAO,GAAGvD,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGmD,UAAU;IAEvC,IAAI,CAACC,OAAO,EAAE;MACV9G,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACyM,UAAU,EAAE;QAC1BvH,OAAO,EAAE,wBAAwB;QACjCK,OAAO,EAAE4C,KAAK,CAACiB;MACnB,CAAC,CAAC;MACF,MAAM,IAAI5G,KAAK,CAAC,4BAA4B,CAAC;IACjD;;IAEA;IACA,IAAI2F,KAAK,CAACuE,UAAU,EAAE;MAClBlH,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC0L,iBAAiB,EAAE;QACjCxG,OAAO,EAAE;MACb,CAAC,CAAC;MACFO,QAAQ,CAAClF,SAAS,CAACqK,QAAQ,EAAE,wBAAwB,CAAC;MACtD,MAAMe,OAAO,GAAG,MAAMhK,UAAU,CAAC2H,UAAU,EAAEnB,KAAK,CAACuE,UAAU,CAAC;MAE9D,IAAI,CAACf,OAAO,EAAE;QACVjH,OAAO,CAACO,KAAK,CACT,mDAAmD,EACnDkD,KAAK,CAACuE,UAAU,EAChB,OAAO,EACPpD,UACJ,CAAC;QACD9D,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACgM,aAAa,EAAE;UAC7B9G,OAAO,EAAE,6BAA6B;UACtCK,OAAO,EAAE4C,KAAK,CAACiB,SAAS;UACxB2B,QAAQ,EAAE;YACNkB,QAAQ,EAAE9D,KAAK,CAACuE,UAAU;YAC1B9K,IAAI,EAAE0H;UACV;QACJ,CAAC,CAAC;QACF,MAAM,IAAI9G,KAAK,CAAC,6BAA6B,CAAC;MAClD;MACAgD,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACmM,mBAAmB,EAAE;QACnCjH,OAAO,EAAE;MACb,CAAC,CAAC;IACN;IAEA,MAAMlD,YAAY,CAACsH,UAAU,EAAEnB,KAAK,CAACwE,eAAe,EAAE7L,MAAM,EAAE,QAAQ,CAAC;;IAEvE;IACA,IAAI,MAAMjB,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACgF,eAAe,CAAC,EAAE;MACtD,MAAMtJ,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAAC+E,eAAe,CAAC;IACxD;IACA,MAAMtJ,mBAAmB,CAACY,EAAE,CAAC4D,EAAE,CAACiF,UAAU,EAAEH,eAAe,CAAC;IAE5D,MAAMtJ,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAACmF,cAAc,CAAC,CAAChH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;;IAEnE;IACA,MAAMqK,WAAW,GAAGxM,kBAAkB,CAAC2K,QAAQ,EAAE5C,KAAK,CAACiB,SAAS,EAAEtI,MAAM,CAACuH,UAAU,CAAC;IACpF,MAAMhI,YAAY,CAACuM,WAAW,CAAC;IAE/B,MAAMC,OAAO,GAAG5D,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,UAAU;IACvCxD,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAAC8M,aAAa,EAAE;MAC7BvH,OAAO,EAAE4C,KAAK,CAACiB,SAAS;MACxBoB,UAAU,EAAEqC,OAAO;MACnBpC,MAAM,EAAER,cAAc,GAAG;IAC7B,CAAC,CAAC;IAEFxE,QAAQ,CAAClF,SAAS,CAACwM,OAAO,EAAE,WAAW5E,KAAK,CAACiB,SAAS,cAAc,EAAE;MAClE4D,WAAW,EAAE/C,cAAc,GAAG,IAAI;MAClCD,UAAU;MACVwC,OAAO;MACPK,OAAO;MACP3C;IACJ,CAAC,CAAC;;IAEF;IACA;IACApK,aAAa,CAACmN,aAAa,CAAC,CAAC;IAE7B,IAAItE,OAAO,CAACC,UAAU,KAAK,KAAK,EAAE;MAC9B,IAAInE,OAAO,EAAE;QACTC,OAAO,CAACc,GAAG,CACP,cAAc2C,KAAK,CAACiB,SAAS,8BACjC,CAAC;MACL;MACAtJ,aAAa,CAACoN,YAAY,CAAC,CAAC;IAChC,CAAC,MAAM;MACH,IAAIzI,OAAO,EAAE;QACTC,OAAO,CAACc,GAAG,CACP,cAAc2C,KAAK,CAACiB,SAAS,+DACjC,CAAC;MACL;IACJ;EACJ,CAAC,CAAC,OAAOnE,KAAK,EAAE;IACZ,IAAIR,OAAO,EAAE;MACTC,OAAO,CAACO,KAAK,CAAC,4BAA4B,EAAEA,KAAK,CAAC;IACtD;IACA,MAAMpF,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAACmF,cAAc,CAAC,CAAChH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM1C,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAACkF,UAAU,CAAC,CAAC/G,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;;IAE/D;IACA,IAAI4F,KAAK,CAACgF,aAAa,EAAE;MACrB,IAAI;QACA1H,QAAQ,CACJlF,SAAS,CAAC+J,WAAW,EACrB,sCACJ,CAAC;QACD,MAAMvJ,OAAO,GAAGF,UAAU,CAACC,MAAM,CAAC;QAClC,MAAM4B,GAAG,GAAG,MAAM3B,OAAO,CAAC2I,gBAAgB,CACtCvB,KAAK,CAACgF,aAAa,IAAIhF,KAAK,CAACd,QAAQ,EACrCvG,MACJ,CAAC;QAED,MAAM6E,UAAU,GAAG,GAAGnF,OAAO,KAAK2H,KAAK,CAACiB,SAAS,EAAE;QACnD,IAAI,EAAE,MAAMvJ,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACwB,UAAU,CAAC,CAAC,EAAE;UACpD,MAAM9F,mBAAmB,CAACY,EAAE,CAACoF,KAAK,CAACF,UAAU,CAAC;QAClD;QACA,MAAMlD,iBAAiB,CACnBC,GAAG,EACH4G,UAAU,EACVxI,MAAM,EACN8B,UAAU,EACV,CAAC,CACL,CAAC;;QAED;QACA,IAAIuF,KAAK,CAACuE,UAAU,EAAE;UAClB,MAAMf,OAAO,GAAG,MAAMhK,UAAU,CAC5B2H,UAAU,EACVnB,KAAK,CAACuE,UACV,CAAC;UACD,IAAI,CAACf,OAAO,EAAE;YACV,IAAIyB,UAAU,GAAG,EAAE;YACnB,IAAIhD,IAAwB;YAC5B,IAAI;cACAgD,UAAU,GAAG,MAAMvN,mBAAmB,CAACY,EAAE,CAACqB,IAAI,CAC1CwH,UAAU,EACV,QACJ,CAAC;cACD,MAAMa,IAAI,GAAG,MAAMtK,mBAAmB,CAACY,EAAE,CAAC0J,IAAI,CAC1Cb,UACJ,CAAC;cACDc,IAAI,GAAGD,IAAI,CAACC,IAAI;YACpB,CAAC,CAAC,MAAM;cACJ;YAAA;YAEJ,IAAI3F,OAAO,EAAE;cACTC,OAAO,CAACO,KAAK,CACT,iDAAiD,EACjDkD,KAAK,CAACuE,UAAU,EAChB,SAAS,EACTU,UACJ,CAAC;YACL;YACA5H,GAAG,CAACiC,IAAI,CAACzH,QAAQ,CAACgM,aAAa,EAAE;cAC7B9G,OAAO,EAAE,2BAA2B;cACpC6F,QAAQ,EAAE;gBACNkB,QAAQ,EAAE9D,KAAK,CAACuE,UAAU;gBAC1BR,MAAM,EAAEkB,UAAU;gBAClBhD;cACJ;YACJ,CAAC,CAAC;YACF,MAAM,IAAI5H,KAAK,CACX,0CACJ,CAAC;UACL;QACJ;QAEA,MAAMR,YAAY,CAACsH,UAAU,EAAEnB,KAAK,CAACwE,eAAe,EAAE7L,MAAM,EAAE,aAAa,CAAC;QAC5E,MAAM0I,UAAU,CAAC,CAAC;;QAElB;QACA,IAAI,MAAM3J,mBAAmB,CAACY,EAAE,CAAC0D,MAAM,CAACgF,eAAe,CAAC,EAAE;UACtD,MAAMtJ,mBAAmB,CAACY,EAAE,CAAC2D,MAAM,CAAC+E,eAAe,CAAC;QACxD;QACA,MAAMtJ,mBAAmB,CAACY,EAAE,CAAC4D,EAAE,CAACiF,UAAU,EAAEH,eAAe,CAAC;QAE5D,MAAM4B,QAAQ,GAAG,MAAM5K,YAAY,CAACW,MAAM,CAACuI,cAAc,CAAC;QAC1D,MAAMuD,WAAW,GAAGxM,kBAAkB,CAClC2K,QAAQ,EACR5C,KAAK,CAACiB,SAAS,EACftI,MAAM,CAACuH,UACX,CAAC;QACD,MAAMhI,YAAY,CAACuM,WAAW,CAAC;;QAE/B;QACA;QACA;QACA;QACA9M,aAAa,CAACmN,aAAa,CAAC,CAAC;QAC7B,IAAIxI,OAAO,EAAE;UACTC,OAAO,CAACc,GAAG,CACP,uBAAuB2C,KAAK,CAACiB,SAAS,8BAC1C,CAAC;QACL;QAEA,IAAIT,OAAO,CAACC,UAAU,KAAK,KAAK,EAAE;UAC9BnD,QAAQ,CACJlF,SAAS,CAACwM,OAAO,EACjB,mCACJ,CAAC;UACDjN,aAAa,CAACoN,YAAY,CAAC,CAAC;QAChC,CAAC,MAAM;UACHzH,QAAQ,CACJlF,SAAS,CAACwM,OAAO,EACjB,kDACJ,CAAC;QACL;QACA;MACJ,CAAC,CAAC,OAAOM,aAAa,EAAE;QACpB,IAAI5I,OAAO,EAAE;UACTC,OAAO,CAACO,KAAK,CACT,6CAA6C,EAC7CoI,aACJ,CAAC;QACL;MACJ;IACJ;IAEA5H,QAAQ,CAAClF,SAAS,CAAC+M,KAAK,EAAE,UAAWrI,KAAK,CAAWC,OAAO,EAAE,CAAC;IAC/D,MAAMD,KAAK;EACf;AACJ,CAAC","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;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAkCpB;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":[]}
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
- if (await ReactNativeBlobUtil.fs.exists(METADATA_PATH)) {
29
- const content = await ReactNativeBlobUtil.fs.readFile(METADATA_PATH, 'utf8');
30
- return JSON.parse(content);
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
- await ReactNativeBlobUtil.fs.writeFile(METADATA_PATH, JSON.stringify(metadata, null, 2), 'utf8');
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
  };