react-native-bspatch 1.1.3 → 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 +47 -52
  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 +356 -177
  67. package/tools/setup_project.js +95 -11
  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
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","ReactNativeBlobUtil","OTA_DIR","fs","dirs","DocumentDir","METADATA_PATH","saveLock","Promise","resolve","ensureOtaDir","exists","mkdir","loadMetadata","defaultVersion","content","readFile","JSON","parse","e","console","warn","currentVersion","previousVersions","rollbackCount","lastLaunchSuccessful","saveMetadata","metadata","prevLock","settleFn","writeFile","stringify","error","Error","message","MAX_VERSION_HISTORY","registerNewVersion","newVersion","versions","uniquePrevious","Array","from","Set","filter","v","slice","cleanupOldVersions","baseVersion","items","ls","retainedVersions","item","versionMatch","match","ver","parseInt","has","dirPath","unlink","catch","__DEV__","log","endsWith","markHealthy","updated","getBundlePath","version","filename","select","android","ios","default"],"sourceRoot":"../../../src","sources":["ota/otaMetadata.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","ReactNativeBlobUtil","OTA_DIR","fs","dirs","DocumentDir","METADATA_PATH","METADATA_TMP_PATH","saveLock","Promise","resolve","ensureOtaDir","exists","mkdir","loadMetadata","defaultVersion","path","JSON","parse","readFile","e","console","warn","currentVersion","previousVersions","rollbackCount","lastLaunchSuccessful","saveMetadata","metadata","prevLock","settleFn","writeFile","stringify","unlink","mv","error","Error","message","MAX_VERSION_HISTORY","registerNewVersion","newVersion","appVersion","versions","uniquePrevious","Array","from","Set","filter","v","slice","cleanupOldVersions","baseVersion","items","ls","retainedVersions","item","versionMatch","match","ver","parseInt","has","dirPath","catch","__DEV__","log","endsWith","markHealthy","updated","getBundlePath","version","filename","select","android","ios","default"],"sourceRoot":"../../../src","sources":["ota/otaMetadata.ts"],"mappings":"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","ignoreList":[]}
@@ -42,7 +42,9 @@ export class GitHubRawStorageProvider {
42
42
  // Cache-bust: registry is mutable; must always fetch the latest version
43
43
  const registryUrl = bustCache(`${normalizedBaseUrl}/${baseFolder}/ota_registry.json`);
44
44
  try {
45
- const res = await ReactNativeBlobUtil.fetch('GET', registryUrl, NO_CACHE_HEADERS);
45
+ const res = await ReactNativeBlobUtil.config({
46
+ timeout: 15000
47
+ }).fetch('GET', registryUrl, NO_CACHE_HEADERS);
46
48
  if (res.respInfo.status !== 200) {
47
49
  throw new Error(`Registry fetch failed with status ${res.respInfo.status}`);
48
50
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","ReactNativeBlobUtil","NO_CACHE_HEADERS","bustCache","url","Date","now","normalizeChannel","channel","lower","toLowerCase","GitHubRawStorageProvider","fetchManifest","config","customServer","bundledPatches","baseUrl","baseFolder","channelName","normalizedBaseUrl","endsWith","slice","registryUrl","res","fetch","respInfo","status","Error","registry","data","JSON","parse","appVersion","appGroup","apps","flavorGroup","flavors","patches","length","filter","p","platform","OS","error","console","warn","message","getUpdateFileUrl","filename","getAssetUrl","hash","ext"],"sourceRoot":"../../../../src","sources":["ota/storage/GitHubRawStorage.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","ReactNativeBlobUtil","NO_CACHE_HEADERS","bustCache","url","Date","now","normalizeChannel","channel","lower","toLowerCase","GitHubRawStorageProvider","fetchManifest","config","customServer","bundledPatches","baseUrl","baseFolder","channelName","normalizedBaseUrl","endsWith","slice","registryUrl","res","timeout","fetch","respInfo","status","Error","registry","data","JSON","parse","appVersion","appGroup","apps","flavorGroup","flavors","patches","length","filter","p","platform","OS","error","console","warn","message","getUpdateFileUrl","filename","getAssetUrl","hash","ext"],"sourceRoot":"../../../../src","sources":["ota/storage/GitHubRawStorage.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,OAAOC,mBAAmB,MAAM,wBAAwB;AAGxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMC,gBAAgB,GAAG;EAAE,eAAe,EAAE;AAAW,CAAC;;AAExD;AACA,MAAMC,SAAS,GAAIC,GAAW,IAC1B,GAAGA,GAAG,OAAOC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;AAE7B,MAAMC,gBAAgB,GAAIC,OAAe,IAAa;EAClD,MAAMC,KAAK,GAAGD,OAAO,CAACE,WAAW,CAAC,CAAC;EACnC,IAAID,KAAK,KAAK,KAAK,EAAE,OAAO,aAAa;EACzC,IAAIA,KAAK,KAAK,MAAM,EAAE,OAAO,YAAY;EACzC,OAAOA,KAAK;AAChB,CAAC;AAED,OAAO,MAAME,wBAAwB,CAA+B;EAChE,MAAMC,aAAaA,CAACC,MAAiB,EAAuB;IACxD,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE,OAAOD,MAAM,CAACE,cAAc,IAAI,EAAE;IAE5D,MAAM;MAAEC,OAAO;MAAER,OAAO;MAAES,UAAU,GAAG;IAAM,CAAC,GAAGJ,MAAM,CAACC,YAAY;IACpE,MAAMI,WAAW,GAAGX,gBAAgB,CAACC,OAAO,CAAC;IAC7C,MAAMW,iBAAiB,GAAGH,OAAO,CAACI,QAAQ,CAAC,GAAG,CAAC,GACzCJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACpBL,OAAO;IACb;IACA,MAAMM,WAAW,GAAGnB,SAAS,CACzB,GAAGgB,iBAAiB,IAAIF,UAAU,oBACtC,CAAC;IAED,IAAI;MACA,MAAMM,GAAG,GAAG,MAAMtB,mBAAmB,CAACY,MAAM,CAAC;QAAEW,OAAO,EAAE;MAAM,CAAC,CAAC,CAACC,KAAK,CAClE,KAAK,EACLH,WAAW,EACXpB,gBACJ,CAAC;MACD,IAAIqB,GAAG,CAACG,QAAQ,CAACC,MAAM,KAAK,GAAG,EAAE;QAC7B,MAAM,IAAIC,KAAK,CACX,qCAAqCL,GAAG,CAACG,QAAQ,CAACC,MAAM,EAC5D,CAAC;MACL;MAEA,MAAME,QAAQ,GACV,OAAON,GAAG,CAACO,IAAI,KAAK,QAAQ,GACtBC,IAAI,CAACC,KAAK,CAACT,GAAG,CAACO,IAAI,CAAC,GACpBP,GAAG,CAACO,IAAI;MAElB,IAAI,CAACjB,MAAM,CAACoB,UAAU,EAAE;QACpB,MAAM,IAAIL,KAAK,CACX,wEACJ,CAAC;MACL;MACA,MAAMM,QAAQ,GAAGL,QAAQ,EAAEM,IAAI,GAAGtB,MAAM,CAACoB,UAAU,CAAC;MACpD,MAAMG,WAAW,GAAGF,QAAQ,EAAEG,OAAO,GAAGnB,WAAW,CAAC;MAEpD,IAAI,CAACkB,WAAW,EAAEE,OAAO,EAAEC,MAAM,EAAE;QAC/B,OAAO1B,MAAM,CAACE,cAAc,IAAI,EAAE;MACtC;MAEA,OAAO,CAACqB,WAAW,CAACE,OAAO,IAAI,EAAE,EAAEE,MAAM,CACpCC,CAAW,IACR,CAACA,CAAC,CAACC,QAAQ,IACXD,CAAC,CAACC,QAAQ,CAAChC,WAAW,CAAC,CAAC,KAAKV,QAAQ,CAAC2C,EAAE,CAACjC,WAAW,CAAC,CAC7D,CAAC;IACL,CAAC,CAAC,OAAOkC,KAAK,EAAE;MACZC,OAAO,CAACC,IAAI,CACR,0CAA0C,EACzCF,KAAK,CAAWG,OACrB,CAAC;MACD,OAAOlC,MAAM,CAACE,cAAc,IAAI,EAAE;IACtC;EACJ;EAEA,MAAMiC,gBAAgBA,CAClBC,QAAgB,EAChBpC,MAAiB,EACF;IACf,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE;MACtB,MAAM,IAAIc,KAAK,CAAC,oCAAoC,CAAC;IACzD;IAEA,MAAM;MAAEZ,OAAO;MAAEC,UAAU,GAAG,KAAK;MAAET;IAAQ,CAAC,GAAGK,MAAM,CAACC,YAAY;IACpE,MAAMK,iBAAiB,GAAGH,OAAO,CAACI,QAAQ,CAAC,GAAG,CAAC,GACzCJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACpBL,OAAO;IACb,MAAME,WAAW,GAAGX,gBAAgB,CAACC,OAAO,CAAC;;IAE7C;IACA;IACA,OAAOL,SAAS,CACZ,GAAGgB,iBAAiB,IAAIF,UAAU,IAAIJ,MAAM,CAACoB,UAAU,IAAIf,WAAW,IAAI+B,QAAQ,EACtF,CAAC;EACL;EAEA,MAAMC,WAAWA,CACbC,IAAY,EACZC,GAAW,EACXvC,MAAiB,EACF;IACf,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE,OAAO,EAAE;IAEnC,MAAM;MAAEE,OAAO;MAAEC,UAAU,GAAG;IAAM,CAAC,GAAGJ,MAAM,CAACC,YAAY;IAC3D,MAAMK,iBAAiB,GAAGH,OAAO,CAACI,QAAQ,CAAC,GAAG,CAAC,GACzCJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACpBL,OAAO;;IAEb;IACA,OAAO,GAAGG,iBAAiB,IAAIF,UAAU,WAAWkC,IAAI,IAAIC,GAAG,EAAE;EACrE;AACJ","ignoreList":[]}
@@ -11,15 +11,6 @@ export let OtaUpdateMode = /*#__PURE__*/function (OtaUpdateMode) {
11
11
  OtaUpdateMode["BACKGROUND_DOWNLOAD"] = "BACKGROUND_DOWNLOAD";
12
12
  return OtaUpdateMode;
13
13
  }({});
14
- export let OtaStorageType = /*#__PURE__*/function (OtaStorageType) {
15
- /** Custom storage server (primary) */
16
- OtaStorageType["CUSTOM"] = "CUSTOM";
17
- /** GitHub Releases — public or token-authenticated */
18
- OtaStorageType["GITHUB"] = "GITHUB";
19
- /** GitHub Raw repository storage */
20
- OtaStorageType["GITHUB_RAW"] = "GITHUB_RAW";
21
- return OtaStorageType;
22
- }({});
23
14
 
24
15
  /**
25
16
  * A single content-addressed asset from the OTA asset store.
@@ -1 +1 @@
1
- {"version":3,"names":["OtaUpdateMode","OtaStorageType","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;AAAA;AACA;AACA;;AAqBA,WAAYA,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAOzB,WAAYC,cAAc,0BAAdA,cAAc;EACtB;EADQA,cAAc;EAGtB;EAHQA,cAAc;EAKtB;EALQA,cAAc;EAAA,OAAdA,cAAc;AAAA;;AA8C1B;AACA;AACA;;AAoHA,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["OtaUpdateMode","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;AAAA;AACA;AACA;;AAqBA,WAAYA,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;;AA4CzB;AACA;AACA;;AAsFA,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA","ignoreList":[]}
@@ -8,19 +8,7 @@ export interface Spec extends TurboModule {
8
8
  * @param callback Promise-like callback receiving true if successful, or false on error.
9
9
  */
10
10
  applyPatch(oldPath: string, newPath: string, patchPath: string): Promise<boolean>;
11
- /**
12
- * Unzip a file to a target directory
13
- * @param source The absolute path to the zip file
14
- * @param targetDir The absolute path to the destination directory
15
- */
16
- unzip(source: string, targetDir: string): Promise<boolean>;
17
11
  extractBundleFromAssets(assetName: string, destPath: string): Promise<boolean>;
18
- /**
19
- * Decompress a gzip file to the destination path.
20
- * @param sourcePath Absolute path to the .gz file
21
- * @param destPath Absolute path to write the decompressed output
22
- */
23
- decompressGzip(sourcePath: string, destPath: string): Promise<boolean>;
24
12
  /**
25
13
  * Mark the current boot as healthy to prevent rollback
26
14
  */
@@ -34,10 +22,10 @@ export interface Spec extends TurboModule {
34
22
  */
35
23
  logNative(message: string): void;
36
24
  /**
37
- * Verify HMAC-SHA256 signature natively with streaming file I/O
25
+ * Verify an RSA/ECDSA SHA-256 signature natively with streaming file I/O
38
26
  * @param filePath Absolute path to the file to verify
39
- * @param signature Base64-encoded expected signature
40
- * @param publicKey Base64-encoded secret key
27
+ * @param signature Base64-encoded signature
28
+ * @param publicKey SPKI public key (PEM or base64)
41
29
  */
42
30
  verifySignature(filePath: string, signature: string, publicKey: string): Promise<boolean>;
43
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;;;OAMG;IACH,UAAU,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;IAEtB;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;;AAED,wBAAiE"}
1
+ {"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;;;OAMG;IACH,UAAU,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;IAEtB;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;;AAED,wBAAiE"}
@@ -5,7 +5,7 @@ export * from './ota/otaLogger';
5
5
  export * from './ota/OtaProvider';
6
6
  export * from './ota/types';
7
7
  export { initOtaAssetResolver, resetOtaAssetResolver } from './ota/otaAssetResolver';
8
- export { GitHubReleaseStorageProvider } from './ota/storage/GitHubReleaseStorage';
8
+ export { GitHubRawStorageProvider } from './ota/storage/GitHubRawStorage';
9
9
  declare const _default: {
10
10
  applyPatch: typeof applyPatch;
11
11
  reloadBundle: typeof reloadBundle;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;;;;;;AAElF,wBAIE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;;;;;;AAE1E,wBAIE"}
@@ -1 +1 @@
1
- {"version":3,"file":"OtaProvider.d.ts","sourceRoot":"","sources":["../../../src/ota/OtaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAgBf,OAAO,EACL,SAAS,EAGT,QAAQ,EAGT,MAAM,SAAS,CAAC;AAIjB,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAAM,EACN,WAAW,EACX,cAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qBAiaA;AAED,wBAAgB,MAAM,aAMrB"}
1
+ {"version":3,"file":"OtaProvider.d.ts","sourceRoot":"","sources":["../../../src/ota/OtaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAgBf,OAAO,EACL,SAAS,EAGT,QAAQ,EAGT,MAAM,SAAS,CAAC;AAIjB,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAAM,EACN,WAAW,EACX,cAAqB,GACtB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qBAkaA;AAED,wBAAgB,MAAM,aAMrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"otaAssetResolver.d.ts","sourceRoot":"","sources":["../../../src/ota/otaAssetResolver.ts"],"names":[],"mappings":"AAmCA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAsCxE,CAAC;AAoGF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAO,IAMxC,CAAC"}
1
+ {"version":3,"file":"otaAssetResolver.d.ts","sourceRoot":"","sources":["../../../src/ota/otaAssetResolver.ts"],"names":[],"mappings":"AAmCA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAsCxE,CAAC;AAuGF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAO,IAMxC,CAAC"}
@@ -4,8 +4,7 @@
4
4
  * Responsibilities:
5
5
  * - Download patches with retry
6
6
  * - Verify integrity (SHA-256 hash)
7
- * - Verify security (HMAC signature)
8
- * - Handle gzip decompression
7
+ * - Verify security (RSA/ECDSA signature)
9
8
  * - Apply binary patch (bsdiff)
10
9
  * - Atomic bundle swap
11
10
  * - Full bundle fallback on failure
@@ -33,27 +32,6 @@ export declare const semverGte: (a: string, b: string) => boolean;
33
32
  * @returns `true` if hash matches or `expectedHash` is undefined, `false` otherwise
34
33
  */
35
34
  export declare const verifyHash: (path: string, expectedHash?: string) => Promise<boolean>;
36
- /**
37
- * Verify HMAC-SHA256 signature of a file.
38
- *
39
- * Uses CryptoJS to verify that the signature matches the file content
40
- * using the provided HMAC key.
41
- *
42
- * @param filePath - Path to the file to verify
43
- * @param signature - Base64-encoded HMAC signature to verify against
44
- * @param publicKey - Base64-encoded HMAC key
45
- * @returns true if signature is valid, false otherwise
46
- *
47
- * @example
48
- * // Server-side (Node.js) - generate signature:
49
- * const crypto = require('crypto');
50
- * const key = crypto.randomBytes(32).toString('base64');
51
- * const fileBuffer = fs.readFileSync('bundle.patch');
52
- * const signature = crypto.createHmac('sha256', Buffer.from(key, 'base64'))
53
- * .update(fileBuffer)
54
- * .digest('base64');
55
- */
56
- export declare const verifySignature: (filePath: string, signature?: string, publicKey?: string) => Promise<boolean>;
57
35
  /**
58
36
  * Fetches the list of available OTA patches from the remote manifest.
59
37
  *
@@ -87,25 +65,10 @@ export declare const getLocalAssetPath: (hash: string, ext: string) => string;
87
65
  * @returns Absolute path to the patch file
88
66
  */
89
67
  export declare const getLocalPatchPath: (patch: OtaPatch, docDir: string) => string;
90
- /**
91
- * Applies a single patch and reloads the bundle.
92
- *
93
- * Pipeline:
94
- * 1. Version compatibility check
95
- * 2. Download patch (with retry)
96
- * 3. Decompress (if .gz)
97
- * 4. Security signature check
98
- * 5. Resolve source bundle
99
- * 6. Verify source hash
100
- * 7. Apply binary patch
101
- * 8. Verify result hash
102
- * 9. Atomic commit (mv)
103
- * 10. Update metadata
104
- * 11. Reload bundle
105
- *
106
- * On failure → fallback to full bundle download if URL available.
107
- */
108
- export declare const applyOtaPatchInternal: (patch: OtaPatch, config: OtaConfig, onStatus: (status: OtaStatus, message: string, metrics?: OtaMetrics) => void, onProgress: (percent: number) => void, options?: {
68
+ /** Runs the pipeline below; rejects if another update is already running. */
69
+ export declare const applyOtaPatchInternal: typeof runUpdatePipeline;
70
+ declare const runUpdatePipeline: (patch: OtaPatch, config: OtaConfig, onStatus: (status: OtaStatus, message: string, metrics?: OtaMetrics) => void, onProgress: (percent: number) => void, options?: {
109
71
  autoReload?: boolean;
110
72
  }) => Promise<void>;
73
+ export {};
111
74
  //# sourceMappingURL=otaCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otaCore.d.ts","sourceRoot":"","sources":["../../../src/ota/otaCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH,OAAO,EACH,SAAS,EAGT,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EAEhB,MAAM,SAAS,CAAC;AAuBjB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAUhD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACnB,MAAM,MAAM,EACZ,eAAe,MAAM,KACtB,OAAO,CAAC,OAAO,CAQjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,GACxB,UAAU,MAAM,EAChB,YAAY,MAAM,EAClB,YAAY,MAAM,KACnB,OAAO,CAAC,OAAO,CA+BjB,CAAC;AA0FF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GACzB,QAAQ,SAAS,KAClB,OAAO,CAAC,QAAQ,EAAE,CAWpB,CAAC;AAyLF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MACvB,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,QAAQ,MAAM,KAAG,MACzB,CAAC;AAI5C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,GAC9B,OAAO,QAAQ,EACf,QAAQ,SAAS,EACjB,UAAU,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,UAAU,KACnB,IAAI,EACT,YAAY,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACrC,UAAS;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAyB,kBA2e3D,CAAC"}
1
+ {"version":3,"file":"otaCore.d.ts","sourceRoot":"","sources":["../../../src/ota/otaCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,EACH,SAAS,EAET,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EAEhB,MAAM,SAAS,CAAC;AAcjB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAUhD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACnB,MAAM,MAAM,EACZ,eAAe,MAAM,KACtB,OAAO,CAAC,OAAO,CAQjB,CAAC;AAwFF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GACzB,QAAQ,SAAS,KAClB,OAAO,CAAC,QAAQ,EAAE,CAWpB,CAAC;AAiMF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MACvB,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,QAAQ,MAAM,KAAG,MACL,CAAC;AAuBhE,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,EAAE,OAAO,iBAU1C,CAAC;AAEF,QAAA,MAAM,iBAAiB,GACnB,OAAO,QAAQ,EACf,QAAQ,SAAS,EACjB,UAAU,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,UAAU,KACnB,IAAI,EACT,YAAY,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACrC,UAAS;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAyB,kBAoe3D,CAAC"}
@@ -20,9 +20,7 @@ export declare enum OtaEvent {
20
20
  MARK_HEALTHY = "mark_healthy",
21
21
  RESET_FACTORY = "reset_factory",
22
22
  VERSION_INCOMPATIBLE = "version_incompatible",
23
- SIGNATURE_INVALID = "signature_invalid",
24
- DECOMPRESS_START = "decompress_start",
25
- DECOMPRESS_SUCCESS = "decompress_success"
23
+ SIGNATURE_INVALID = "signature_invalid"
26
24
  }
27
25
  export type OtaLogEntry = {
28
26
  event: OtaEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"otaLogger.d.ts","sourceRoot":"","sources":["../../../src/ota/otaLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,oBAAY,QAAQ;IAClB,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,oBAAoB,yBAAyB;IAC7C,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,oBAAoB,yBAAyB;IAC7C,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,gBAAgB;kBAE/C,QAAQ,YACL,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,CAAC;CAsBrD,CAAC"}
1
+ {"version":3,"file":"otaLogger.d.ts","sourceRoot":"","sources":["../../../src/ota/otaLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,oBAAY,QAAQ;IAClB,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,oBAAoB,yBAAyB;IAC7C,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,oBAAoB,yBAAyB;IAC7C,iBAAiB,sBAAsB;CACxC;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,gBAAgB;kBAE/C,QAAQ,YACL,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,CAAC;CAsBrD,CAAC"}
@@ -26,7 +26,7 @@ export declare const MAX_VERSION_HISTORY = 3;
26
26
  * @param newVersion - The newly applied OTA version.
27
27
  * @returns Updated metadata object.
28
28
  */
29
- export declare const registerNewVersion: (metadata: OtaMetadata, newVersion: number) => OtaMetadata;
29
+ export declare const registerNewVersion: (metadata: OtaMetadata, newVersion: number, appVersion?: string) => OtaMetadata;
30
30
  /**
31
31
  * Scans the OTA directory and removes old version directories and leftover temporary files
32
32
  * that are no longer referenced in the active metadata.
@@ -40,7 +40,7 @@ export declare const cleanupOldVersions: (metadata: OtaMetadata, baseVersion: nu
40
40
  * @param defaultVersion - Base version for metadata lookup fallback.
41
41
  * @returns The updated metadata.
42
42
  */
43
- export declare const markHealthy: (defaultVersion: number) => Promise<OtaMetadata>;
43
+ export declare const markHealthy: (defaultVersion: number, appVersion?: string) => Promise<OtaMetadata>;
44
44
  /**
45
45
  * Resolves the absolute path to the JS bundle for a specific version.
46
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"otaMetadata.d.ts","sourceRoot":"","sources":["../../../src/ota/otaMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,IAAI,CAIjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACrB,gBAAgB,MAAM,KACvB,OAAO,CAAC,WAAW,CAmBrB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,UAAU,WAAW,KAAG,OAAO,CAAC,IAAI,CAoBtE,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UAAU,WAAW,EACrB,YAAY,MAAM,KACnB,WAiBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UAAU,WAAW,EACrB,aAAa,MAAM,KACpB,OAAO,CAAC,IAAI,CAgCd,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACpB,gBAAgB,MAAM,KACvB,OAAO,CAAC,WAAW,CAarB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACtB,SAAS,MAAM,EACf,aAAa,MAAM,KACpB,MAAM,GAAG,IAUX,CAAC"}
1
+ {"version":3,"file":"otaMetadata.d.ts","sourceRoot":"","sources":["../../../src/ota/otaMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAStC;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,IAAI,CAIjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACrB,gBAAgB,MAAM,KACvB,OAAO,CAAC,WAAW,CAkBrB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,UAAU,WAAW,KAAG,OAAO,CAAC,IAAI,CAyBtE,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UAAU,WAAW,EACrB,YAAY,MAAM,EAClB,aAAa,MAAM,KACpB,WAkBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UAAU,WAAW,EACrB,aAAa,MAAM,KACpB,OAAO,CAAC,IAAI,CAgCd,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACpB,gBAAgB,MAAM,EACtB,aAAa,MAAM,KACpB,OAAO,CAAC,WAAW,CAerB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACtB,SAAS,MAAM,EACf,aAAa,MAAM,KACpB,MAAM,GAAG,IAUX,CAAC"}
@@ -22,14 +22,6 @@ export declare enum OtaUpdateMode {
22
22
  ON_APP_FOREGROUND = "ON_APP_FOREGROUND",
23
23
  BACKGROUND_DOWNLOAD = "BACKGROUND_DOWNLOAD"
24
24
  }
25
- export declare enum OtaStorageType {
26
- /** Custom storage server (primary) */
27
- CUSTOM = "CUSTOM",
28
- /** GitHub Releases — public or token-authenticated */
29
- GITHUB = "GITHUB",
30
- /** GitHub Raw repository storage */
31
- GITHUB_RAW = "GITHUB_RAW"
32
- }
33
25
  export type OtaPatch = {
34
26
  /** Unique ID: `v{from}-to-v{to}` */
35
27
  id: string;
@@ -53,10 +45,10 @@ export type OtaPatch = {
53
45
  minAppVersion?: string;
54
46
  /** URL for full bundle download (fallback when patch fails) */
55
47
  fullBundleUrl?: string;
56
- /** Whether the patch/bundle is gzip compressed */
57
- compressed?: boolean;
58
- /** HMAC-SHA256 signature for security verification */
48
+ /** RSA/ECDSA SHA-256 signature (base64) of the patch file */
59
49
  signature?: string;
50
+ /** RSA/ECDSA SHA-256 signature (base64) of the resulting bundle */
51
+ bundleSignature?: string;
60
52
  /** Whether this update is mandatory */
61
53
  mandatory?: boolean;
62
54
  /** URL to the asset manifest JSON for this version */
@@ -90,6 +82,10 @@ export type OtaMetadata = {
90
82
  previousVersions: number[];
91
83
  rollbackCount: number;
92
84
  lastLaunchSuccessful: boolean;
85
+ /** Native app version the OTA bundles were built for; native resolver drops OTA state when it changes */
86
+ appVersion?: string;
87
+ /** Versions that crashed on boot and were rolled back; never re-applied */
88
+ failedVersions?: number[];
93
89
  };
94
90
  export type OtaMetrics = {
95
91
  patchSizeKB: number;
@@ -121,55 +117,23 @@ export type OtaConfig = {
121
117
  network?: OtaNetworkStrategy;
122
118
  /** Telemetry: structured event callback for analytics */
123
119
  onEvent?: OtaEventCallback;
124
- /** Public key for signature verification (base64) */
120
+ /**
121
+ * SPKI public key (PEM or base64) for RSA/ECDSA signature verification.
122
+ * When set, patches and bundles without a valid signature are rejected.
123
+ */
125
124
  publicKey?: string;
126
- /** Base URL for the shared hashed asset store (e.g. a GitHub release URL) */
127
- assetBaseUrl?: string;
128
- /** Storage strategy */
129
- storageType?: OtaStorageType;
130
- /** GitHub Releases configuration (used when storageType === GITHUB) */
131
- githubRelease?: {
132
- /** Owner / repo in the format "owner/repo" */
133
- repo: string;
134
- /** Tag name of the release to fetch updates from */
135
- tag: string;
136
- /**
137
- * Path inside the release where ota_registry.json lives.
138
- * If your release contains the file at root, set to "ota_registry.json".
139
- * If it's inside a folder "ota/", set to "ota/ota_registry.json".
140
- */
141
- registryPath?: string;
142
- /**
143
- * Optional GitHub personal access token for private repos or higher rate limits.
144
- * For public repos this is optional.
145
- */
146
- token?: string;
147
- /**
148
- * Asset base URL for content-addressed assets.
149
- * Supports CDN URLs (jsDelivr, GitHub raw) or a custom base.
150
- * Example: "https://cdn.jsdelivr.net/gh/owner/repo@tag/assets"
151
- */
152
- assetBaseUrl?: string;
153
- };
154
- /** Custom storage server configuration */
125
+ /**
126
+ * Static storage layout read by the default provider: `${baseUrl}/${baseFolder}/...`.
127
+ * Any static host/CDN serving the same layout works (e.g. a public bucket).
128
+ * Read-only and public: never put upload credentials here, they ship inside the app.
129
+ */
155
130
  customServer?: {
131
+ /** e.g. https://raw.githubusercontent.com/<owner>/<repo>/<branch> */
156
132
  baseUrl: string;
157
- username: string;
158
- password: string;
159
133
  channel: string;
160
134
  baseFolder?: string;
161
- useMinio?: boolean;
162
- /** Override default API endpoints for non-standard servers */
163
- endpoints?: {
164
- /** Auth login endpoint (default: /public/authen/login) */
165
- login?: string;
166
- /** Generate download link endpoint (default: /api/minio/gen-download-link) */
167
- genDownloadLink?: string;
168
- /** Direct file download endpoint (default: /files/downloadStreamFile) */
169
- downloadFile?: string;
170
- };
171
135
  };
172
- /** Storage provider instance (optional, defaults to CustomStorageProvider) */
136
+ /** Storage provider instance (optional, defaults to GitHubRawStorageProvider) */
173
137
  storage?: OtaStorageProvider;
174
138
  };
175
139
  export declare enum OtaStatus {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ota/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ota/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-bspatch",
3
- "version": "1.1.3",
3
+ "version": "2.0.0",
4
4
  "description": "Premium OTA Update Solution for React Native using TurboModules and bsdiff",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -19,7 +19,8 @@
19
19
  "LICENSE",
20
20
  "!**/__tests__",
21
21
  "!**/__fixtures__",
22
- "!**/__mocks__"
22
+ "!**/__mocks__",
23
+ "!tools/bsdiff"
23
24
  ],
24
25
  "keywords": [
25
26
  "react-native",
@@ -41,9 +42,6 @@
41
42
  "react-native": "*",
42
43
  "react-native-blob-util": "*"
43
44
  },
44
- "dependencies": {
45
- "crypto-js": "^4.2.0"
46
- },
47
45
  "repository": {
48
46
  "type": "git",
49
47
  "url": "git+https://github.com/BuiHung1612/react-native-bspatch.git"
@@ -68,7 +66,6 @@
68
66
  "prepare": "bob build"
69
67
  },
70
68
  "devDependencies": {
71
- "@types/crypto-js": "^4.2.2",
72
69
  "@types/react": "^19.2.0",
73
70
  "react-native-builder-bob": "^0.43.0",
74
71
  "typescript": "^5.0.0"
@@ -20,7 +20,6 @@ Pod::Spec.new do |s|
20
20
 
21
21
  s.library = 'bz2'
22
22
 
23
- s.dependency "SSZipArchive"
24
23
 
25
24
  s.pod_target_xcconfig = {
26
25
  'OTHER_CFLAGS' => '$(inherited) -O3 -flto'
@@ -15,24 +15,11 @@ export interface Spec extends TurboModule {
15
15
  patchPath: string,
16
16
  ): Promise<boolean>;
17
17
 
18
- /**
19
- * Unzip a file to a target directory
20
- * @param source The absolute path to the zip file
21
- * @param targetDir The absolute path to the destination directory
22
- */
23
- unzip(source: string, targetDir: string): Promise<boolean>;
24
18
  extractBundleFromAssets(
25
19
  assetName: string,
26
20
  destPath: string,
27
21
  ): Promise<boolean>;
28
22
 
29
- /**
30
- * Decompress a gzip file to the destination path.
31
- * @param sourcePath Absolute path to the .gz file
32
- * @param destPath Absolute path to write the decompressed output
33
- */
34
- decompressGzip(sourcePath: string, destPath: string): Promise<boolean>;
35
-
36
23
  /**
37
24
  * Mark the current boot as healthy to prevent rollback
38
25
  */
@@ -49,10 +36,10 @@ export interface Spec extends TurboModule {
49
36
  logNative(message: string): void;
50
37
 
51
38
  /**
52
- * Verify HMAC-SHA256 signature natively with streaming file I/O
39
+ * Verify an RSA/ECDSA SHA-256 signature natively with streaming file I/O
53
40
  * @param filePath Absolute path to the file to verify
54
- * @param signature Base64-encoded expected signature
55
- * @param publicKey Base64-encoded secret key
41
+ * @param signature Base64-encoded signature
42
+ * @param publicKey SPKI public key (PEM or base64)
56
43
  */
57
44
  verifySignature(
58
45
  filePath: string,
package/src/index.ts CHANGED
@@ -20,7 +20,7 @@ export * from './ota/otaLogger';
20
20
  export * from './ota/OtaProvider';
21
21
  export * from './ota/types';
22
22
  export { initOtaAssetResolver, resetOtaAssetResolver } from './ota/otaAssetResolver';
23
- export { GitHubReleaseStorageProvider } from './ota/storage/GitHubReleaseStorage';
23
+ export { GitHubRawStorageProvider } from './ota/storage/GitHubRawStorage';
24
24
 
25
25
  export default {
26
26
  applyPatch,
@@ -102,7 +102,7 @@ export function OtaProvider({
102
102
  const directPatch = patchList.find(
103
103
  p => p.fromVersion === currentVer &&
104
104
  p.toVersion === targetVer &&
105
- p.platform === Platform.OS,
105
+ (!p.platform || p.platform === Platform.OS),
106
106
  );
107
107
 
108
108
  if (!directPatch) {
@@ -170,7 +170,7 @@ export function OtaProvider({
170
170
  const directPatch = patchList.find(
171
171
  p => p.fromVersion === localV &&
172
172
  p.toVersion === targetV &&
173
- p.platform === Platform.OS,
173
+ (!p.platform || p.platform === Platform.OS),
174
174
  );
175
175
  if (!directPatch) return;
176
176
 
@@ -221,17 +221,19 @@ export function OtaProvider({
221
221
  setStatus(OtaStatus.CHECKING);
222
222
  setMessage('Checking for updates...');
223
223
 
224
- const effectiveConfig = await getEffectiveConfig();
225
- const log = createOtaLogger(effectiveConfig.onEvent);
226
- log.emit(OtaEvent.CHECK_UPDATE);
227
-
228
224
  try {
225
+ const effectiveConfig = await getEffectiveConfig();
226
+ createOtaLogger(effectiveConfig.onEvent).emit(OtaEvent.CHECK_UPDATE);
229
227
  const remotePatches = await fetchOtaManifest(effectiveConfig);
230
228
  const metadata = await loadMetadata(config.baseAppVersion);
231
229
  const localV = metadata.currentVersion;
232
230
  console.log('[OtaProvider] checkUpdates | localV:', localV, 'remotePatches count:', remotePatches.length);
233
231
 
234
- const platformPatches = remotePatches.filter(p => p.platform === Platform.OS);
232
+ // Skip versions that crashed on boot and were rolled back by the native resolver
233
+ const failed = metadata.failedVersions ?? [];
234
+ const platformPatches = remotePatches.filter(
235
+ p => (!p.platform || p.platform === Platform.OS) && !failed.includes(p.toVersion),
236
+ );
235
237
  console.log('[OtaProvider] platformPatches count:', platformPatches.length);
236
238
 
237
239
  const maxV =
@@ -310,20 +312,6 @@ export function OtaProvider({
310
312
  // We just mark bootstrap as done
311
313
  bootstrapDone.current = true;
312
314
 
313
- // Always mark as healthy after a successful JS bootstrap.
314
- //
315
- // The native OtaBundleResolver uses its own baseVersion (DEFAULT_BASE_VERSION=1),
316
- // independent of the JS-side config.baseAppVersion. It marks
317
- // lastLaunchSuccessful=false before loading ANY OTA bundle (even when
318
- // JS baseAppVersion has been bumped to match currentVersion). If we only
319
- // call markAsHealthy when currentVersion > JS baseAppVersion, we miss this
320
- // case and the native layer will rollback on the very next cold boot.
321
- //
322
- // markAsHealthy() is safe to call unconditionally — it's a no-op when
323
- // the metadata already has lastLaunchSuccessful=true.
324
- console.log(`[OtaProvider] Marking V${metadata.currentVersion} as healthy`);
325
- await markAsHealthy();
326
-
327
315
  // Mode-based auto-check
328
316
  const mode = config.updateMode ?? OtaUpdateMode.MANUAL;
329
317
  if (
@@ -355,7 +343,8 @@ export function OtaProvider({
355
343
  // When going into background: if update is downloaded and ready, reload bundle silently
356
344
  if (
357
345
  appState.current === 'active' &&
358
- nextAppState.match(/inactive|background/) &&
346
+ // Not 'inactive': iOS fires it for Control Center, calls, Face ID prompts
347
+ nextAppState === 'background' &&
359
348
  pendingReloadRef.current
360
349
  ) {
361
350
  pendingReloadRef.current = false;
@@ -384,7 +373,8 @@ export function OtaProvider({
384
373
  const markAsHealthy = async () => {
385
374
  const log = createOtaLogger(config.onEvent);
386
375
  log.emit(OtaEvent.MARK_HEALTHY);
387
- await markHealthy(config.baseAppVersion);
376
+ const { appVersion } = await getEffectiveConfig().catch(() => config);
377
+ await markHealthy(config.baseAppVersion, appVersion);
388
378
  NativeBsPatch.markAsHealthy();
389
379
  };
390
380
 
@@ -440,6 +430,17 @@ export function OtaProvider({
440
430
  );
441
431
  }, [useLoadingView, isInitialized, config.updateMode, status]);
442
432
 
433
+ // Mark healthy only after the app's own tree has committed its first render.
434
+ // This effect runs after all child effects, so a bundle that throws while
435
+ // rendering never gets here and the native resolver rolls it back next boot.
436
+ const healthyMarkedRef = useRef(false);
437
+ useEffect(() => {
438
+ if (isBlocking || !isInitialized || healthyMarkedRef.current) return;
439
+ healthyMarkedRef.current = true;
440
+ markAsHealthy().catch(e => console.warn('[OtaProvider] markAsHealthy failed:', e));
441
+ // eslint-disable-next-line react-hooks/exhaustive-deps
442
+ }, [isBlocking, isInitialized]);
443
+
443
444
  return (
444
445
  <OtaContext.Provider value={value}>
445
446
  {!isBlocking ? (
@@ -150,8 +150,11 @@ const patchAssetResolver = (): void => {
150
150
  log(`REDIRECTED (BASE): ${uri} -> (MainBundle: ${finalUri})`);
151
151
  return { ...res, uri: finalUri };
152
152
  } else {
153
- // Android: let the default responder load it from apk assets (res.uri is correct)
154
- return res;
153
+ // Android: with a file-based bundle RN points at ota/vN/drawable-*/x.png,
154
+ // which doesn't exist. Base assets live in the APK as drawable/raw
155
+ // resources, addressed by name (originalPath: "drawable-mdpi/name.png").
156
+ const resName = found.originalPath.split('/').pop()!.replace(/\.[^.]+$/, '');
157
+ return { ...res, uri: resName };
155
158
  }
156
159
  }
157
160