react-native-bspatch 3.1.1 → 4.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 (53) hide show
  1. package/README.md +3 -3
  2. package/android/build.gradle +18 -40
  3. package/android/src/main/java/vn/reactnativebspatch/BsPatchModule.kt +148 -13
  4. package/android/src/main/java/vn/reactnativebspatch/OtaBundleResolver.kt +21 -3
  5. package/cpp/CMakeLists.txt +0 -3
  6. package/cpp/bsdiff/bspatch_wrapper.c +3 -2
  7. package/ios/OtaBundleResolver.swift +22 -5
  8. package/ios/RNBsPatch.mm +220 -32
  9. package/lib/commonjs/NativeBsPatch.js.map +1 -1
  10. package/lib/commonjs/index.js +1 -13
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/ota/OtaProvider.js +21 -21
  13. package/lib/commonjs/ota/OtaProvider.js.map +1 -1
  14. package/lib/commonjs/ota/otaCore.js +50 -88
  15. package/lib/commonjs/ota/otaCore.js.map +1 -1
  16. package/lib/commonjs/ota/otaMetadata.js +46 -23
  17. package/lib/commonjs/ota/otaMetadata.js.map +1 -1
  18. package/lib/commonjs/ota/storage/GitHubRawStorage.js +22 -12
  19. package/lib/commonjs/ota/storage/GitHubRawStorage.js.map +1 -1
  20. package/lib/module/NativeBsPatch.js.map +1 -1
  21. package/lib/module/index.js +0 -8
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/ota/OtaProvider.js +22 -22
  24. package/lib/module/ota/OtaProvider.js.map +1 -1
  25. package/lib/module/ota/otaCore.js +50 -87
  26. package/lib/module/ota/otaCore.js.map +1 -1
  27. package/lib/module/ota/otaMetadata.js +44 -21
  28. package/lib/module/ota/otaMetadata.js.map +1 -1
  29. package/lib/module/ota/storage/GitHubRawStorage.js +20 -10
  30. package/lib/module/ota/storage/GitHubRawStorage.js.map +1 -1
  31. package/lib/typescript/NativeBsPatch.d.ts +36 -1
  32. package/lib/typescript/NativeBsPatch.d.ts.map +1 -1
  33. package/lib/typescript/index.d.ts +0 -7
  34. package/lib/typescript/index.d.ts.map +1 -1
  35. package/lib/typescript/ota/OtaProvider.d.ts.map +1 -1
  36. package/lib/typescript/ota/otaCore.d.ts +2 -1
  37. package/lib/typescript/ota/otaCore.d.ts.map +1 -1
  38. package/lib/typescript/ota/otaMetadata.d.ts +5 -0
  39. package/lib/typescript/ota/otaMetadata.d.ts.map +1 -1
  40. package/lib/typescript/ota/storage/GitHubRawStorage.d.ts +2 -0
  41. package/lib/typescript/ota/storage/GitHubRawStorage.d.ts.map +1 -1
  42. package/package.json +2 -3
  43. package/react-native-bspatch.podspec +3 -25
  44. package/src/NativeBsPatch.ts +44 -1
  45. package/src/index.ts +0 -7
  46. package/src/ota/OtaProvider.tsx +37 -23
  47. package/src/ota/otaCore.ts +55 -94
  48. package/src/ota/otaMetadata.ts +44 -25
  49. package/src/ota/storage/GitHubRawStorage.ts +17 -22
  50. package/tools/build_ota.sh +83 -58
  51. package/tools/update_registry.js +4 -2
  52. package/tools/upload_ota.sh +35 -19
  53. package/ios/RNBsPatch.h +0 -8
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeBlobUtil","_interopRequireDefault","e","__esModule","default","NO_CACHE_HEADERS","bustCache","url","Date","now","normalizeChannel","channel","lower","toLowerCase","GitHubRawStorageProvider","fetchManifest","config","customServer","Error","baseUrl","baseFolder","channelName","normalizedBaseUrl","endsWith","slice","registryUrl","res","ReactNativeBlobUtil","timeout","fetch","respInfo","status","registry","data","JSON","parse","appVersion","appGroup","apps","flavorGroup","flavors","patches","filter","p","platform","Platform","OS","error","message","getUpdateFileUrl","filename","getAssetUrl","hash","ext","exports"],"sourceRoot":"../../../../src","sources":["ota/storage/GitHubRawStorage.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NO_CACHE_HEADERS","fetchJson","url","timeoutMs","controller","AbortController","timer","setTimeout","abort","res","fetch","headers","signal","ok","Error","status","json","clearTimeout","exports","bustCache","Date","now","normalizeChannel","channel","lower","toLowerCase","GitHubRawStorageProvider","fetchManifest","config","customServer","baseUrl","baseFolder","channelName","normalizedBaseUrl","endsWith","slice","registryUrl","registry","appVersion","appGroup","apps","flavorGroup","flavors","patches","error","message","getUpdateFileUrl","filename","getAssetUrl","hash","ext"],"sourceRoot":"../../../../src","sources":["ota/storage/GitHubRawStorage.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBsPatch.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAiDlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBsPatch.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AA4FlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
@@ -13,14 +13,6 @@ export function reloadBundle() {
13
13
  export * from './ota/otaLogger';
14
14
  export * from './ota/OtaProvider';
15
15
  export * from './ota/types';
16
-
17
- /**
18
- * @deprecated No-ops since 3.1: OTA assets are placed next to the bundle, where React
19
- * Native resolves them by default, so no source transformer is needed.
20
- */
21
- export const initOtaAssetResolver = async _version => {};
22
- /** @deprecated No-op since 3.1, see initOtaAssetResolver. */
23
- export const resetOtaAssetResolver = () => {};
24
16
  export { GitHubRawStorageProvider } from './ota/storage/GitHubRawStorage';
25
17
  export default {
26
18
  applyPatch,
@@ -1 +1 @@
1
- {"version":3,"names":["NativeBsPatch","applyPatch","oldBundlePath","newBundlePath","patchPath","markAsHealthy","reloadBundle","initOtaAssetResolver","_version","resetOtaAssetResolver","GitHubRawStorageProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,iBAAiB;AAE3C,OAAO,SAASC,UAAUA,CACxBC,aAAqB,EACrBC,aAAqB,EACrBC,SAAiB,EACC;EAClB,OAAOJ,aAAa,CAACC,UAAU,CAACC,aAAa,EAAEC,aAAa,EAAEC,SAAS,CAAC;AAC1E;AAEA,OAAO,SAASC,aAAaA,CAAA,EAAS;EACpC,OAAOL,aAAa,CAACK,aAAa,CAAC,CAAC;AACtC;AAEA,OAAO,SAASC,YAAYA,CAAA,EAAS;EACnC,OAAON,aAAa,CAACM,YAAY,CAAC,CAAC;AACrC;AAEA,cAAc,iBAAiB;AAC/B,cAAc,mBAAmB;AACjC,cAAc,aAAa;;AAE3B;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAG,MAAOC,QAAgB,IAAoB,CAAC,CAAC;AACjF;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAY,CAAC,CAAC;AACnD,SAASC,wBAAwB,QAAQ,gCAAgC;AAEzE,eAAe;EACbT,UAAU;EACVK,YAAY;EACZD;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NativeBsPatch","applyPatch","oldBundlePath","newBundlePath","patchPath","markAsHealthy","reloadBundle","GitHubRawStorageProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,aAAa,MAAM,iBAAiB;AAE3C,OAAO,SAASC,UAAUA,CACxBC,aAAqB,EACrBC,aAAqB,EACrBC,SAAiB,EACC;EAClB,OAAOJ,aAAa,CAACC,UAAU,CAACC,aAAa,EAAEC,aAAa,EAAEC,SAAS,CAAC;AAC1E;AAEA,OAAO,SAASC,aAAaA,CAAA,EAAS;EACpC,OAAOL,aAAa,CAACK,aAAa,CAAC,CAAC;AACtC;AAEA,OAAO,SAASC,YAAYA,CAAA,EAAS;EACnC,OAAON,aAAa,CAACM,YAAY,CAAC,CAAC;AACrC;AAEA,cAAc,iBAAiB;AAC/B,cAAc,mBAAmB;AACjC,cAAc,aAAa;AAE3B,SAASC,wBAAwB,QAAQ,gCAAgC;AAEzE,eAAe;EACbN,UAAU;EACVK,YAAY;EACZD;AACF,CAAC","ignoreList":[]}
@@ -2,11 +2,10 @@
2
2
 
3
3
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { ActivityIndicator, AppState, Platform, StyleSheet, Text, View } from 'react-native';
5
- import ReactNativeBlobUtil from 'react-native-blob-util';
6
5
  import NativeBsPatch from '../NativeBsPatch';
7
6
  import { applyOtaPatchInternal, fetchOtaManifest, selectUpdate, validateOtaConfig } from './otaCore';
8
7
  import { createOtaLogger, OtaEvent } from './otaLogger';
9
- import { loadMetadata, markHealthy } from './otaMetadata';
8
+ import { DOCUMENT_DIR, loadMetadata, markHealthy, OTA_DIR } from './otaMetadata';
10
9
  import { OtaStatus, OtaUpdateMode } from './types';
11
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
11
  const OtaContext = /*#__PURE__*/createContext(undefined);
@@ -73,10 +72,11 @@ export function OtaProvider({
73
72
  * OR called automatically by checkUpdates()
74
73
  */
75
74
  const executeApplyUpdate = useCallback(async (patchList, currentVer, targetVer) => {
76
- console.log('[OtaProvider] executeApplyUpdate | targetV:', targetVer, 'currentV:', currentVer);
77
75
  const directPatch = selectUpdate(patchList, currentVer, targetVer);
78
76
  if (!directPatch) {
79
- console.warn('[OtaProvider] No update entry found for', currentVer, '->', targetVer);
77
+ if (__DEV__) {
78
+ console.warn('[OtaProvider] No update entry found for', currentVer, '->', targetVer);
79
+ }
80
80
  setStatus(OtaStatus.ERROR);
81
81
  setMessage('No upgrade path found.');
82
82
  return;
@@ -94,7 +94,9 @@ export function OtaProvider({
94
94
  setProgressIfChanged(percent);
95
95
  });
96
96
  } catch (error) {
97
- console.error('[OtaProvider] Update error:', error);
97
+ if (__DEV__) {
98
+ console.error('[OtaProvider] Update error:', error);
99
+ }
98
100
  setStatus(OtaStatus.ERROR);
99
101
  setMessage(`Update failed: ${error.message}`);
100
102
  }
@@ -161,14 +163,12 @@ export function OtaProvider({
161
163
  const remotePatches = await fetchOtaManifest(effectiveConfig);
162
164
  const metadata = await loadMetadata(config.baseAppVersion);
163
165
  const localV = metadata.currentVersion;
164
- console.log('[OtaProvider] checkUpdates | localV:', localV, 'remotePatches count:', remotePatches.length);
165
166
 
166
- // Skip versions that crashed on boot and were rolled back by the native resolver
167
+ // The one platform filter (storage providers return every platform).
168
+ // Also skips versions that crashed on boot and were rolled back natively.
167
169
  const failed = metadata.failedVersions ?? [];
168
- const platformPatches = remotePatches.filter(p => (!p.platform || p.platform === Platform.OS) && !failed.includes(p.toVersion));
169
- console.log('[OtaProvider] platformPatches count:', platformPatches.length);
170
+ const platformPatches = remotePatches.filter(p => (!p.platform || p.platform.toLowerCase() === Platform.OS) && !failed.includes(p.toVersion));
170
171
  const maxV = platformPatches.length > 0 ? Math.max(...platformPatches.map(p => p.toVersion)) : localV;
171
- console.log('[OtaProvider] latestV determined:', maxV);
172
172
  setPatches(platformPatches);
173
173
  setCurrentVersion(localV);
174
174
  setLatestVersion(maxV);
@@ -212,10 +212,10 @@ export function OtaProvider({
212
212
  useEffect(() => {
213
213
  const bootstrap = async () => {
214
214
  // Clean up any pending trash directories from previous resets (non-blocking)
215
- ReactNativeBlobUtil.fs.ls(ReactNativeBlobUtil.fs.dirs.DocumentDir).then(dirs => {
215
+ NativeBsPatch.readDir(DOCUMENT_DIR).then(dirs => {
216
216
  for (const dir of dirs) {
217
217
  if (dir.startsWith('ota_trash_')) {
218
- ReactNativeBlobUtil.fs.unlink(`${ReactNativeBlobUtil.fs.dirs.DocumentDir}/${dir}`).catch(() => {});
218
+ NativeBsPatch.removePath(`${DOCUMENT_DIR}/${dir}`).catch(() => {});
219
219
  }
220
220
  }
221
221
  }).catch(() => {});
@@ -275,23 +275,21 @@ export function OtaProvider({
275
275
  subscription.remove();
276
276
  };
277
277
  }, [config.updateMode, checkUpdates]);
278
- const markAsHealthy = async () => {
278
+ const markAsHealthy = useCallback(async () => {
279
279
  const log = createOtaLogger(config.onEvent);
280
280
  log.emit(OtaEvent.MARK_HEALTHY);
281
281
  const appVersion = await NativeBsPatch.getAppVersion().catch(() => config.appVersion);
282
282
  await markHealthy(config.baseAppVersion, runningVersionRef.current, appVersion);
283
- };
284
- const resetToFactory = async () => {
283
+ }, [config]);
284
+ const resetToFactory = useCallback(async () => {
285
285
  const log = createOtaLogger(config.onEvent);
286
286
  try {
287
287
  setStatus(OtaStatus.APPLYING);
288
288
  setMessage('Executing system wipe...');
289
289
  log.emit(OtaEvent.RESET_FACTORY);
290
- const otaDir = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota`;
291
- if (await ReactNativeBlobUtil.fs.exists(otaDir)) {
290
+ if (await NativeBsPatch.exists(OTA_DIR)) {
292
291
  // Fast atomic rename to prevent blocking the JS thread during deletion of potentially 1000s of files
293
- const trashDir = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota_trash_${Date.now()}`;
294
- await ReactNativeBlobUtil.fs.mv(otaDir, trashDir);
292
+ await NativeBsPatch.moveFile(OTA_DIR, `${DOCUMENT_DIR}/ota_trash_${Date.now()}`);
295
293
  // Deletion is deferred to the next app bootstrap to prevent blocking the bridge before reload
296
294
  }
297
295
  setMessage('Reset complete. Core reload initiated...');
@@ -300,8 +298,10 @@ export function OtaProvider({
300
298
  setStatus(OtaStatus.ERROR);
301
299
  setMessage(`Reset failed: ${error.message}`);
302
300
  }
303
- };
304
- const value = {
301
+ }, [config]);
302
+
303
+ // Memoized: consumers re-render only when something they can see changes
304
+ const value = useMemo(() => ({
305
305
  status,
306
306
  message,
307
307
  progress,
@@ -316,7 +316,7 @@ export function OtaProvider({
316
316
  markAsHealthy,
317
317
  checkUpdate: checkUpdates,
318
318
  reloadBundle: () => NativeBsPatch.reloadBundle()
319
- };
319
+ }), [status, message, progress, currentVersion, latestVersion, pendingCount, isChecking, metrics, isUpdateReady, applyUpdate, resetToFactory, markAsHealthy, checkUpdates]);
320
320
 
321
321
  // Logic to determine if we should block the UI
322
322
  const isBlocking = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","ActivityIndicator","AppState","Platform","StyleSheet","Text","View","ReactNativeBlobUtil","NativeBsPatch","applyOtaPatchInternal","fetchOtaManifest","selectUpdate","validateOtaConfig","createOtaLogger","OtaEvent","loadMetadata","markHealthy","OtaStatus","OtaUpdateMode","jsx","_jsx","jsxs","_jsxs","OtaContext","undefined","OtaProvider","children","config","loadingView","useLoadingView","status","setStatus","IDLE","message","setMessage","progress","setProgress","currentVersion","setCurrentVersion","baseAppVersion","latestVersion","setLatestVersion","pendingCount","setPendingCount","isChecking","setIsChecking","metrics","setMetrics","patches","setPatches","isInitialized","setIsInitialized","isUpdateReady","setIsUpdateReady","appState","currentState","isCheckingRef","pendingReloadRef","bootstrapDone","runningVersionRef","progressRef","isDebugUpdateEnabled","__DEV__","allowDebugUpdates","configError","e","Error","setProgressIfChanged","nextProgress","current","getEffectiveConfig","appVersion","nativeVer","getAppVersion","executeApplyUpdate","patchList","currentVer","targetVer","console","log","directPatch","warn","ERROR","effectiveConfig","DOWNLOADING","s","msg","m","percent","error","applyUpdate","UP_TO_DATE","downloadBackgroundUpdate","localV","targetV","SUCCESS","autoReload","checkUpdates","CHECKING","onEvent","emit","CHECK_UPDATE","remotePatches","metadata","length","failed","failedVersions","platformPatches","filter","p","platform","OS","includes","toVersion","maxV","Math","max","map","UPDATE_AVAILABLE","updateMode","BACKGROUND_DOWNLOAD","ON_APP_START","ON_APP_FOREGROUND","bootstrap","fs","ls","dirs","DocumentDir","then","dir","startsWith","unlink","catch","mode","MANUAL","subscription","addEventListener","nextAppState","reloadBundle","match","remove","markAsHealthy","MARK_HEALTHY","resetToFactory","APPLYING","RESET_FACTORY","otaDir","exists","trashDir","Date","now","mv","value","checkUpdate","isBlocking","healthyMarkedRef","Provider","style","styles","loadingContainer","loadingCard","size","color","loadingTitle","loadingText","progressText","toFixed","useOta","context","create","flex","justifyContent","alignItems","backgroundColor","paddingHorizontal","width","maxWidth","borderRadius","paddingVertical","borderWidth","borderColor","marginTop","fontSize","fontWeight","lineHeight","textAlign"],"sourceRoot":"../../../src","sources":["ota/OtaProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","ActivityIndicator","AppState","Platform","StyleSheet","Text","View","NativeBsPatch","applyOtaPatchInternal","fetchOtaManifest","selectUpdate","validateOtaConfig","createOtaLogger","OtaEvent","DOCUMENT_DIR","loadMetadata","markHealthy","OTA_DIR","OtaStatus","OtaUpdateMode","jsx","_jsx","jsxs","_jsxs","OtaContext","undefined","OtaProvider","children","config","loadingView","useLoadingView","status","setStatus","IDLE","message","setMessage","progress","setProgress","currentVersion","setCurrentVersion","baseAppVersion","latestVersion","setLatestVersion","pendingCount","setPendingCount","isChecking","setIsChecking","metrics","setMetrics","patches","setPatches","isInitialized","setIsInitialized","isUpdateReady","setIsUpdateReady","appState","currentState","isCheckingRef","pendingReloadRef","bootstrapDone","runningVersionRef","progressRef","isDebugUpdateEnabled","__DEV__","allowDebugUpdates","configError","e","Error","setProgressIfChanged","nextProgress","current","getEffectiveConfig","appVersion","nativeVer","getAppVersion","executeApplyUpdate","patchList","currentVer","targetVer","directPatch","console","warn","ERROR","effectiveConfig","DOWNLOADING","s","msg","m","percent","error","applyUpdate","UP_TO_DATE","downloadBackgroundUpdate","localV","targetV","SUCCESS","autoReload","checkUpdates","CHECKING","onEvent","emit","CHECK_UPDATE","remotePatches","metadata","failed","failedVersions","platformPatches","filter","p","platform","toLowerCase","OS","includes","toVersion","maxV","length","Math","max","map","UPDATE_AVAILABLE","updateMode","BACKGROUND_DOWNLOAD","ON_APP_START","ON_APP_FOREGROUND","bootstrap","readDir","then","dirs","dir","startsWith","removePath","catch","mode","MANUAL","subscription","addEventListener","nextAppState","reloadBundle","match","remove","markAsHealthy","log","MARK_HEALTHY","resetToFactory","APPLYING","RESET_FACTORY","exists","moveFile","Date","now","value","checkUpdate","isBlocking","healthyMarkedRef","Provider","style","styles","loadingContainer","loadingCard","size","color","loadingTitle","loadingText","progressText","toFixed","useOta","context","create","flex","justifyContent","alignItems","backgroundColor","paddingHorizontal","width","maxWidth","borderRadius","paddingVertical","borderWidth","borderColor","marginTop","fontSize","fontWeight","lineHeight","textAlign"],"sourceRoot":"../../../src","sources":["ota/OtaProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -13,14 +13,11 @@
13
13
  * - Structured telemetry logging
14
14
  */
15
15
 
16
- import { Platform } from 'react-native';
17
- import ReactNativeBlobUtil from 'react-native-blob-util';
18
16
  import NativeBsPatch from '../NativeBsPatch';
19
17
  import { createOtaLogger, OtaEvent } from './otaLogger';
20
- import { ensureOtaDir, getBundlePath, loadMetadata, registerNewVersion, updateMetadata } from './otaMetadata';
21
- import { GitHubRawStorageProvider } from './storage/GitHubRawStorage';
18
+ import { ASSET_LIST_FILE, DOCUMENT_DIR, ensureOtaDir, OTA_DIR, getBundlePath, loadMetadata, registerNewVersion, updateMetadata } from './otaMetadata';
19
+ import { fetchJson, GitHubRawStorageProvider } from './storage/GitHubRawStorage';
22
20
  import { OtaStatus } from './types';
23
- const OTA_DIR = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota`;
24
21
 
25
22
  // ─── Storage Provider Factory ──────────────────────────────────────────
26
23
 
@@ -84,7 +81,7 @@ export const semverGte = (a, b) => {
84
81
  export const verifyHash = async (path, expectedHash) => {
85
82
  if (!expectedHash) return true;
86
83
  try {
87
- const hash = await ReactNativeBlobUtil.fs.hash(path, 'sha256');
84
+ const hash = await NativeBsPatch.hashFile(path);
88
85
  return hash.toLowerCase() === expectedHash.toLowerCase();
89
86
  } catch {
90
87
  return false;
@@ -105,53 +102,34 @@ const assertSigned = async (filePath, signature, config, what) => {
105
102
 
106
103
  /**
107
104
  * Download a file with retry logic using exponential backoff.
108
- * Cancels any in-flight request before retrying to avoid resource leaks.
105
+ * Native streams to `${destPath}.part` and renames only on a 2xx response, so a
106
+ * cut-off download or an error page never sits at destPath looking complete.
107
+ * @returns Size of the downloaded file in bytes
109
108
  */
110
- const downloadWithRetry = async (url, destPath, config, onProgress, headers = {}) => {
111
- const retryLimit = config.network?.retry ?? 3;
109
+ const downloadWithRetry = async (url, destPath, config, onProgress) => {
110
+ const retryLimit = Math.max(1, config.network?.retry ?? 3);
112
111
  const timeout = config.network?.timeoutMs ?? 30000;
113
- for (let i = 0; i < retryLimit; i++) {
114
- let taskRef = null;
115
- // Download to .part and rename only on a 2xx response, so a cut-off
116
- // download or an error page never sits at destPath looking complete.
117
- const partPath = `${destPath}.part`;
118
- try {
119
- const task = ReactNativeBlobUtil.config({
120
- fileCache: true,
121
- path: partPath,
122
- followRedirect: true,
123
- timeout
124
- }).fetch('GET', url, {
125
- 'Cache-Control': 'no-cache',
126
- ...headers
127
- }).progress((received, total) => {
128
- const percent = Math.floor(Number(received) / Number(total) * 100);
129
- onProgress(percent);
130
- });
131
- taskRef = {
132
- cancel: () => task.cancel()
133
- };
134
- const resp = await task;
135
- const status = resp.respInfo.status;
136
- if (status < 200 || status >= 300) {
137
- throw new Error(`HTTP ${status} for ${url}`);
138
- }
139
- if (await ReactNativeBlobUtil.fs.exists(destPath)) {
140
- await ReactNativeBlobUtil.fs.unlink(destPath);
141
- }
142
- await ReactNativeBlobUtil.fs.mv(partPath, destPath);
143
- return;
144
- } catch (e) {
145
- // Cancel any lingering request before retrying
146
- taskRef?.cancel();
147
- await ReactNativeBlobUtil.fs.unlink(partPath).catch(() => {});
148
- if (i === retryLimit - 1) throw e;
149
- const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
150
- if (__DEV__) {
151
- console.warn(`[otaCore] Download attempt ${i + 1} failed. Retrying in ${delay}ms...`);
112
+ const subscription = NativeBsPatch.onDownloadProgress(e => {
113
+ // total is -1 without a Content-Length
114
+ if (e.path === destPath && e.total > 0) {
115
+ onProgress(Math.min(100, Math.floor(e.received / e.total * 100)));
116
+ }
117
+ });
118
+ try {
119
+ for (let i = 0;; i++) {
120
+ try {
121
+ return await NativeBsPatch.downloadFile(url, destPath, timeout);
122
+ } catch (e) {
123
+ if (i >= retryLimit - 1) throw e;
124
+ const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
125
+ if (__DEV__) {
126
+ console.warn(`[otaCore] Download attempt ${i + 1} failed. Retrying in ${delay}ms...`);
127
+ }
128
+ await new Promise(resolve => setTimeout(resolve, delay));
152
129
  }
153
- await new Promise(resolve => setTimeout(resolve, delay));
154
130
  }
131
+ } finally {
132
+ subscription.remove();
155
133
  }
156
134
  };
157
135
 
@@ -170,7 +148,7 @@ export const fetchOtaManifest = config => getStorage(config).fetchManifest(confi
170
148
 
171
149
  // ─── Hashed Asset Store ───────────────────────────────────────────────
172
150
 
173
- const ASSET_STORE_DIR = `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/ota/assets`;
151
+ const ASSET_STORE_DIR = `${OTA_DIR}/assets`;
174
152
 
175
153
  /** Relative path inside the version dir: no absolute paths, no `..` segments. */
176
154
  const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith('/') && !p.split('/').includes('..');
@@ -185,21 +163,12 @@ const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith(
185
163
  * hash into ota/assets/ and copied from there for later versions.
186
164
  */
187
165
  const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onStatus, onProgress) => {
188
- const fs = ReactNativeBlobUtil.fs;
166
+ const fs = NativeBsPatch;
189
167
  onStatus(OtaStatus.SYNCING_ASSETS, 'Syncing assets...');
190
168
  const versionDir = `${OTA_DIR}/v${version}`;
191
169
  let assets = [];
192
170
  try {
193
- const resp = await ReactNativeBlobUtil.config({
194
- followRedirect: true,
195
- timeout: 10000
196
- }).fetch('GET', assetManifestUrl, {
197
- 'Cache-Control': 'no-cache'
198
- });
199
- if (resp.respInfo.status !== 200) {
200
- throw new Error(`status ${resp.respInfo.status}`);
201
- }
202
- const manifest = typeof resp.data === 'string' ? JSON.parse(resp.data) : resp.data;
171
+ const manifest = await fetchJson(assetManifestUrl, 10000);
203
172
  // Hash/ext/path become file names: reject anything unexpected
204
173
  assets = (manifest.assets || []).filter(a => /^[a-f0-9]{64}$/i.test(a.hash) && /^[a-z0-9]+$/i.test(a.ext) && typeof a.originalPath === 'string' && isSafeRelativePath(a.originalPath));
205
174
  } catch (e) {
@@ -207,12 +176,14 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
207
176
  throw new Error(`Failed to fetch asset manifest: ${e.message}`);
208
177
  }
209
178
  if (assets.length === 0) return;
179
+ // Lets cleanupOldVersions keep the store files that retained versions use
180
+ await fs.writeFile(`${versionDir}/${ASSET_LIST_FILE}`, JSON.stringify(assets.map(a => `${a.hash}.${a.ext}`)));
210
181
  onStatus(OtaStatus.SYNCING_ASSETS, `Syncing ${assets.length} asset(s)...`);
211
- // One promise per dir: parallel workers would otherwise race mkdir (EEXIST)
182
+ // Native mkdir creates parents and tolerates an existing dir; this just skips repeats
212
183
  const dirs = new Map();
213
184
  const ensureDir = dir => {
214
185
  if (!dirs.has(dir)) {
215
- dirs.set(dir, fs.exists(dir).then(ok => ok ? undefined : fs.mkdir(dir)));
186
+ dirs.set(dir, fs.mkdir(dir));
216
187
  }
217
188
  return dirs.get(dir);
218
189
  };
@@ -231,18 +202,14 @@ const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onS
231
202
  if (!url) throw new Error('no URL');
232
203
  await downloadWithRetry(url, storePath, config, () => {});
233
204
  if (!(await verifyHash(storePath, asset.hash))) {
234
- await fs.unlink(storePath).catch(() => {});
205
+ await fs.removePath(storePath).catch(() => {});
235
206
  throw new Error('hash mismatch');
236
207
  }
237
208
  downloaded++;
238
209
  }
239
210
  const dest = `${versionDir}/${asset.originalPath}`;
240
- const parts = asset.originalPath.split('/').slice(0, -1);
241
- for (let i = 1; i <= parts.length; i++) {
242
- await ensureDir(`${versionDir}/${parts.slice(0, i).join('/')}`);
243
- }
244
- if (await fs.exists(dest)) await fs.unlink(dest);
245
- await fs.cp(storePath, dest);
211
+ await ensureDir(dest.slice(0, dest.lastIndexOf('/')));
212
+ await fs.copyFile(storePath, dest);
246
213
  } catch (e) {
247
214
  if (__DEV__) {
248
215
  console.warn(`[otaCore] Asset ${asset.originalPath} failed:`, e);
@@ -288,7 +255,7 @@ export const getLocalAssetPath = (hash, ext) => `${ASSET_STORE_DIR}/${hash}.${ex
288
255
  * Gets the local filesystem path for a downloaded patch file.
289
256
  *
290
257
  * @param patch - Patch metadata object
291
- * @param docDir - Document directory path (use `ReactNativeBlobUtil.fs.dirs.DocumentDir`)
258
+ * @param docDir - Document directory path (`DOCUMENT_DIR`)
292
259
  * @returns Absolute path to the patch file
293
260
  */
294
261
  export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch.appVersion}-${patch.id}.patch`;
@@ -296,9 +263,10 @@ export const getLocalPatchPath = (patch, docDir) => `${docDir}/ota/patch-${patch
296
263
  /**
297
264
  * Picks the registry entry for `localV → targetV`: a patch from the OTA bundle
298
265
  * already on disk, else the full-bundle entry (store build, or outside the patch window).
266
+ * `patchList` is already filtered to this platform (checkUpdates).
299
267
  */
300
268
  export const selectUpdate = (patchList, localV, targetV) => {
301
- const forTarget = patchList.filter(p => p.toVersion === targetV && (!p.platform || p.platform === Platform.OS));
269
+ const forTarget = patchList.filter(p => p.toVersion === targetV);
302
270
  return forTarget.find(p => p.filename && p.fromVersion === localV) ?? forTarget.find(p => !p.filename);
303
271
  };
304
272
 
@@ -340,11 +308,11 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
340
308
  const log = createOtaLogger(config.onEvent);
341
309
  await ensureOtaDir();
342
310
  const totalStart = Date.now();
343
- const fs = ReactNativeBlobUtil.fs;
311
+ const fs = NativeBsPatch;
344
312
  const finalBundlePath = getBundlePath(patch.toVersion, config.baseAppVersion) || '';
345
313
  const tempBundle = `${finalBundlePath}.tmp`;
346
314
  const versionDir = `${OTA_DIR}/v${patch.toVersion}`;
347
- const localPatchPath = getLocalPatchPath(patch, fs.dirs.DocumentDir);
315
+ const localPatchPath = getLocalPatchPath(patch, DOCUMENT_DIR);
348
316
 
349
317
  // ── Version Compatibility ──
350
318
  // Checked before anything else so an incompatible update can't reach the full-bundle path
@@ -364,17 +332,16 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
364
332
  throw new Error(`Native app ${currentAppVer} is too old. Update to ${patch.minAppVersion}+ first.`);
365
333
  }
366
334
  }
367
- if (!(await fs.exists(versionDir))) {
368
- await fs.mkdir(versionDir);
369
- }
335
+ await fs.mkdir(versionDir);
370
336
  const download = async (remoteName, dest) => {
371
337
  log.emit(OtaEvent.DOWNLOAD_START, {
372
338
  version: patch.toVersion
373
339
  });
374
340
  const dlStart = Date.now();
341
+ let sizeBytes;
375
342
  try {
376
343
  const url = await getStorage(config).getUpdateFileUrl(remoteName, config);
377
- await downloadWithRetry(url, dest, config, onProgress);
344
+ sizeBytes = await downloadWithRetry(url, dest, config, onProgress);
378
345
  } catch (dlError) {
379
346
  log.emit(OtaEvent.DOWNLOAD_FAIL, {
380
347
  error: dlError.message,
@@ -383,7 +350,6 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
383
350
  throw dlError;
384
351
  }
385
352
  const downloadMs = Date.now() - dlStart;
386
- const sizeBytes = Number((await fs.stat(dest)).size);
387
353
  log.emit(OtaEvent.DOWNLOAD_SUCCESS, {
388
354
  version: patch.toVersion,
389
355
  durationMs: downloadMs,
@@ -396,7 +362,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
396
362
  };
397
363
  const assertHash = async (path, expected, what) => {
398
364
  if (!expected || (await verifyHash(path, expected))) return;
399
- const actual = await fs.hash(path, 'sha256').catch(() => '');
365
+ const actual = await fs.hashFile(path).catch(() => '');
400
366
  log.emit(OtaEvent.HASH_MISMATCH, {
401
367
  message: `${what} hash mismatch`,
402
368
  version: patch.toVersion,
@@ -415,10 +381,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
415
381
  const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
416
382
  await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
417
383
  }
418
- if (await fs.exists(finalBundlePath)) {
419
- await fs.unlink(finalBundlePath);
420
- }
421
- await fs.mv(tempBundle, finalBundlePath);
384
+ await fs.moveFile(tempBundle, finalBundlePath);
422
385
 
423
386
  // Native version, not config.appVersion: the native resolver compares against it on boot
424
387
  const nativeAppVersion = await NativeBsPatch.getAppVersion().catch(() => config.appVersion);
@@ -468,7 +431,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
468
431
  const applyStart = Date.now();
469
432
  const success = await NativeBsPatch.applyPatch(sourcePath, tempBundle, localPatchPath);
470
433
  const applyMs = Date.now() - applyStart;
471
- await fs.unlink(localPatchPath).catch(() => {});
434
+ await fs.removePath(localPatchPath).catch(() => {});
472
435
  if (!success) {
473
436
  log.emit(OtaEvent.PATCH_FAIL, {
474
437
  message: 'BsPatch returned false',
@@ -505,8 +468,8 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
505
468
  });
506
469
  };
507
470
  const cleanup = async () => {
508
- await fs.unlink(localPatchPath).catch(() => {});
509
- await fs.unlink(tempBundle).catch(() => {});
471
+ await fs.removePath(localPatchPath).catch(() => {});
472
+ await fs.removePath(tempBundle).catch(() => {});
510
473
  };
511
474
 
512
475
  // Patch only from an OTA bundle we installed ourselves (byte-identical to the build output)