react-native-bspatch 4.1.0 → 5.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 (81) hide show
  1. package/README.md +83 -27
  2. package/android/build.gradle +25 -0
  3. package/android/src/main/AndroidManifest.xml +2 -0
  4. package/android/src/main/java/vn/reactnativebspatch/BsPatchModule.kt +86 -6
  5. package/android/src/main/res/values/bspatch_public_key.xml +5 -0
  6. package/cpp/bsdiff/bspatch_wrapper.c +34 -0
  7. package/cpp/bsdiff/bspatch_wrapper.h +2 -0
  8. package/cpp/bspatch_jni.cpp +18 -0
  9. package/ios/RNBsPatch.mm +142 -1
  10. package/lib/commonjs/NativeBsPatch.js.map +1 -1
  11. package/lib/commonjs/index.js +9 -2
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/commonjs/ota/OtaProvider.js +116 -20
  14. package/lib/commonjs/ota/OtaProvider.js.map +1 -1
  15. package/lib/commonjs/ota/eligibility.js +40 -0
  16. package/lib/commonjs/ota/eligibility.js.map +1 -0
  17. package/lib/commonjs/ota/entrySignature.js +23 -0
  18. package/lib/commonjs/ota/entrySignature.js.map +1 -0
  19. package/lib/commonjs/ota/installId.js +27 -0
  20. package/lib/commonjs/ota/installId.js.map +1 -0
  21. package/lib/commonjs/ota/otaCore.js +96 -21
  22. package/lib/commonjs/ota/otaCore.js.map +1 -1
  23. package/lib/commonjs/ota/storage/{GitHubRawStorage.js → R2Storage.js} +20 -15
  24. package/lib/commonjs/ota/storage/R2Storage.js.map +1 -0
  25. package/lib/commonjs/ota/types.js.map +1 -1
  26. package/lib/module/NativeBsPatch.js.map +1 -1
  27. package/lib/module/index.js +2 -1
  28. package/lib/module/index.js.map +1 -1
  29. package/lib/module/ota/OtaProvider.js +116 -20
  30. package/lib/module/ota/OtaProvider.js.map +1 -1
  31. package/lib/module/ota/eligibility.js +34 -0
  32. package/lib/module/ota/eligibility.js.map +1 -0
  33. package/lib/module/ota/entrySignature.js +17 -0
  34. package/lib/module/ota/entrySignature.js.map +1 -0
  35. package/lib/module/ota/installId.js +22 -0
  36. package/lib/module/ota/installId.js.map +1 -0
  37. package/lib/module/ota/otaCore.js +96 -21
  38. package/lib/module/ota/otaCore.js.map +1 -1
  39. package/lib/module/ota/storage/{GitHubRawStorage.js → R2Storage.js} +18 -14
  40. package/lib/module/ota/storage/R2Storage.js.map +1 -0
  41. package/lib/module/ota/types.js.map +1 -1
  42. package/lib/typescript/NativeBsPatch.d.ts +28 -2
  43. package/lib/typescript/NativeBsPatch.d.ts.map +1 -1
  44. package/lib/typescript/index.d.ts +3 -1
  45. package/lib/typescript/index.d.ts.map +1 -1
  46. package/lib/typescript/ota/OtaProvider.d.ts.map +1 -1
  47. package/lib/typescript/ota/eligibility.d.ts +19 -0
  48. package/lib/typescript/ota/eligibility.d.ts.map +1 -0
  49. package/lib/typescript/ota/entrySignature.d.ts +9 -0
  50. package/lib/typescript/ota/entrySignature.d.ts.map +1 -0
  51. package/lib/typescript/ota/installId.d.ts +3 -0
  52. package/lib/typescript/ota/installId.d.ts.map +1 -0
  53. package/lib/typescript/ota/otaCore.d.ts.map +1 -1
  54. package/lib/typescript/ota/storage/{GitHubRawStorage.d.ts → R2Storage.d.ts} +4 -3
  55. package/lib/typescript/ota/storage/R2Storage.d.ts.map +1 -0
  56. package/lib/typescript/ota/types.d.ts +52 -5
  57. package/lib/typescript/ota/types.d.ts.map +1 -1
  58. package/package.json +3 -2
  59. package/react-native-bspatch.podspec +3 -1
  60. package/src/NativeBsPatch.ts +34 -2
  61. package/src/index.ts +5 -1
  62. package/src/ota/OtaProvider.tsx +115 -24
  63. package/src/ota/eligibility.ts +48 -0
  64. package/src/ota/entrySignature.ts +31 -0
  65. package/src/ota/installId.ts +18 -0
  66. package/src/ota/otaCore.ts +102 -21
  67. package/src/ota/storage/{GitHubRawStorage.ts → R2Storage.ts} +17 -13
  68. package/src/ota/types.ts +49 -5
  69. package/tools/build_ota.sh +343 -116
  70. package/tools/doctor.js +130 -0
  71. package/tools/ensure_signing_key.js +216 -0
  72. package/tools/fingerprint.js +111 -0
  73. package/tools/ios_fingerprint.sh +9 -0
  74. package/tools/ota_admin.js +131 -0
  75. package/tools/setup_project.js +41 -15
  76. package/tools/update_registry.js +111 -11
  77. package/tools/upload_ota.sh +85 -184
  78. package/tools/verify_publish.js +81 -0
  79. package/lib/commonjs/ota/storage/GitHubRawStorage.js.map +0 -1
  80. package/lib/module/ota/storage/GitHubRawStorage.js.map +0 -1
  81. package/lib/typescript/ota/storage/GitHubRawStorage.d.ts.map +0 -1
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.rolloutBucket = exports.ineligibleReason = exports.SUPPORTED_FEATURES = void 0;
7
+ /** Entry `requires` values this client understands */
8
+ const SUPPORTED_FEATURES = exports.SUPPORTED_FEATURES = ['gzip', 'bz2'];
9
+ /** FNV-1a: stable 0-99 bucket for an install and version (a different slice of installs per version) */
10
+ const rolloutBucket = (installId, version) => {
11
+ let h = 0x811c9dc5;
12
+ for (const c of `${installId}:${version}`) {
13
+ h ^= c.charCodeAt(0);
14
+ h = Math.imul(h, 0x01000193) >>> 0;
15
+ }
16
+ return h % 100;
17
+ };
18
+
19
+ /** Why this client must not install the entry, or null when it may */
20
+ exports.rolloutBucket = rolloutBucket;
21
+ const ineligibleReason = (e, ctx) => {
22
+ if (e.platform && e.platform.toLowerCase() !== ctx.platform) return 'other platform';
23
+ if (ctx.failedVersions.includes(e.toVersion)) return 'crashed on boot here before';
24
+ if (e.disabled) return 'disabled';
25
+ const missing = (e.requires ?? []).filter(f => !SUPPORTED_FEATURES.includes(f));
26
+ if (missing.length) return `needs a newer client (${missing.join(', ')})`;
27
+ if (e.runtimeFingerprint && e.runtimeFingerprint !== ctx.runtimeFingerprint) {
28
+ return ctx.runtimeFingerprint ? 'built for different native code (needs a store build)' : 'this binary has no runtime fingerprint (run `react-native-bspatch setup` and rebuild)';
29
+ }
30
+ if (e.hermesBytecodeVersion && ctx.hermesBytecodeVersion && e.hermesBytecodeVersion !== ctx.hermesBytecodeVersion) {
31
+ return `Hermes bytecode ${e.hermesBytecodeVersion}, runtime reads ${ctx.hermesBytecodeVersion}`;
32
+ }
33
+ if (e.allowInstallIds?.length && !e.allowInstallIds.includes(ctx.installId)) return 'not in the QA list';
34
+ if (e.rolloutPercent !== undefined && rolloutBucket(ctx.installId, e.toVersion) >= e.rolloutPercent) {
35
+ return `outside the ${e.rolloutPercent}% rollout`;
36
+ }
37
+ return null;
38
+ };
39
+ exports.ineligibleReason = ineligibleReason;
40
+ //# sourceMappingURL=eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SUPPORTED_FEATURES","exports","rolloutBucket","installId","version","h","c","charCodeAt","Math","imul","ineligibleReason","e","ctx","platform","toLowerCase","failedVersions","includes","toVersion","disabled","missing","requires","filter","f","length","join","runtimeFingerprint","hermesBytecodeVersion","allowInstallIds","rolloutPercent","undefined"],"sourceRoot":"../../../src","sources":["ota/eligibility.ts"],"mappings":";;;;;;AAEA;AACO,MAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AAcjD;AACO,MAAME,aAAa,GAAGA,CAACC,SAAiB,EAAEC,OAAe,KAAa;EACzE,IAAIC,CAAC,GAAG,UAAU;EAClB,KAAK,MAAMC,CAAC,IAAI,GAAGH,SAAS,IAAIC,OAAO,EAAE,EAAE;IACvCC,CAAC,IAAIC,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC;IACpBF,CAAC,GAAGG,IAAI,CAACC,IAAI,CAACJ,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;EACtC;EACA,OAAOA,CAAC,GAAG,GAAG;AAClB,CAAC;;AAED;AAAAJ,OAAA,CAAAC,aAAA,GAAAA,aAAA;AACO,MAAMQ,gBAAgB,GAAGA,CAACC,CAAW,EAAEC,GAAuB,KAAoB;EACrF,IAAID,CAAC,CAACE,QAAQ,IAAIF,CAAC,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC,KAAKF,GAAG,CAACC,QAAQ,EAAE,OAAO,gBAAgB;EACpF,IAAID,GAAG,CAACG,cAAc,CAACC,QAAQ,CAACL,CAAC,CAACM,SAAS,CAAC,EAAE,OAAO,6BAA6B;EAClF,IAAIN,CAAC,CAACO,QAAQ,EAAE,OAAO,UAAU;EACjC,MAAMC,OAAO,GAAG,CAACR,CAAC,CAACS,QAAQ,IAAI,EAAE,EAAEC,MAAM,CAACC,CAAC,IAAI,CAACtB,kBAAkB,CAACgB,QAAQ,CAACM,CAAC,CAAC,CAAC;EAC/E,IAAIH,OAAO,CAACI,MAAM,EAAE,OAAO,yBAAyBJ,OAAO,CAACK,IAAI,CAAC,IAAI,CAAC,GAAG;EACzE,IAAIb,CAAC,CAACc,kBAAkB,IAAId,CAAC,CAACc,kBAAkB,KAAKb,GAAG,CAACa,kBAAkB,EAAE;IACzE,OAAOb,GAAG,CAACa,kBAAkB,GACvB,uDAAuD,GACvD,uFAAuF;EACjG;EACA,IAAId,CAAC,CAACe,qBAAqB,IAAId,GAAG,CAACc,qBAAqB,IAAIf,CAAC,CAACe,qBAAqB,KAAKd,GAAG,CAACc,qBAAqB,EAAE;IAC/G,OAAO,mBAAmBf,CAAC,CAACe,qBAAqB,mBAAmBd,GAAG,CAACc,qBAAqB,EAAE;EACnG;EACA,IAAIf,CAAC,CAACgB,eAAe,EAAEJ,MAAM,IAAI,CAACZ,CAAC,CAACgB,eAAe,CAACX,QAAQ,CAACJ,GAAG,CAACT,SAAS,CAAC,EAAE,OAAO,oBAAoB;EACxG,IAAIQ,CAAC,CAACiB,cAAc,KAAKC,SAAS,IAAI3B,aAAa,CAACU,GAAG,CAACT,SAAS,EAAEQ,CAAC,CAACM,SAAS,CAAC,IAAIN,CAAC,CAACiB,cAAc,EAAE;IACjG,OAAO,eAAejB,CAAC,CAACiB,cAAc,WAAW;EACrD;EACA,OAAO,IAAI;AACf,CAAC;AAAC3B,OAAA,CAAAS,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parsePublicKeys = exports.entryPayload = void 0;
7
+ /**
8
+ * What `entrySignature` signs: the fields that decide which bundle a client installs.
9
+ * Must stay byte-for-byte equal to entryPayload in tools/update_registry.js.
10
+ */
11
+ const entryPayload = p => ['bspatch-entry-v2', p.appVersion, p.flavor ?? '', p.platform ?? '', p.fromVersion, p.toVersion, p.bundleHash ?? '', p.assetManifestHash ?? '', p.minAppVersion ?? '', p.runtimeFingerprint ?? '', p.hermesBytecodeVersion ?? ''].join('\n');
12
+
13
+ /** Public keys from config or the embedded list: PEM blocks, or base64 SPKI separated by commas/whitespace */
14
+ exports.entryPayload = entryPayload;
15
+ const parsePublicKeys = keys => {
16
+ if (!keys) return [];
17
+ if (keys.includes('-----BEGIN')) {
18
+ return (keys.match(/-----BEGIN PUBLIC KEY-----[\s\S]*?-----END PUBLIC KEY-----/g) ?? []).map(block => block.replace(/-----[A-Z ]+-----|\s+/g, ''));
19
+ }
20
+ return keys.split(/[\s,]+/).filter(Boolean);
21
+ };
22
+ exports.parsePublicKeys = parsePublicKeys;
23
+ //# sourceMappingURL=entrySignature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["entryPayload","p","appVersion","flavor","platform","fromVersion","toVersion","bundleHash","assetManifestHash","minAppVersion","runtimeFingerprint","hermesBytecodeVersion","join","exports","parsePublicKeys","keys","includes","match","map","block","replace","split","filter","Boolean"],"sourceRoot":"../../../src","sources":["ota/entrySignature.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACO,MAAMA,YAAY,GAAIC,CAAW,IACpC,CACI,kBAAkB,EAClBA,CAAC,CAACC,UAAU,EACZD,CAAC,CAACE,MAAM,IAAI,EAAE,EACdF,CAAC,CAACG,QAAQ,IAAI,EAAE,EAChBH,CAAC,CAACI,WAAW,EACbJ,CAAC,CAACK,SAAS,EACXL,CAAC,CAACM,UAAU,IAAI,EAAE,EAClBN,CAAC,CAACO,iBAAiB,IAAI,EAAE,EACzBP,CAAC,CAACQ,aAAa,IAAI,EAAE,EACrBR,CAAC,CAACS,kBAAkB,IAAI,EAAE,EAC1BT,CAAC,CAACU,qBAAqB,IAAI,EAAE,CAChC,CAACC,IAAI,CAAC,IAAI,CAAC;;AAEhB;AAAAC,OAAA,CAAAb,YAAA,GAAAA,YAAA;AACO,MAAMc,eAAe,GAAIC,IAAwB,IAAe;EACnE,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,IAAIA,IAAI,CAACC,QAAQ,CAAC,YAAY,CAAC,EAAE;IAC7B,OAAO,CAACD,IAAI,CAACE,KAAK,CAAC,6DAA6D,CAAC,IAAI,EAAE,EAAEC,GAAG,CAACC,KAAK,IAC9FA,KAAK,CAACC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAC9C,CAAC;EACL;EACA,OAAOL,IAAI,CAACM,KAAK,CAAC,QAAQ,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;AAC/C,CAAC;AAACV,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getInstallId = void 0;
7
+ var _NativeBsPatch = _interopRequireDefault(require("../NativeBsPatch"));
8
+ var _otaMetadata = require("./otaMetadata");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ // Outside ota/: resetToFactory and native rollbacks keep it
11
+ const INSTALL_ID_PATH = `${_otaMetadata.DOCUMENT_DIR}/bspatch-install-id`;
12
+ let installId;
13
+
14
+ /** Random ID made on first use and kept for the life of the install (rollout bucket, QA lists, telemetry) */
15
+ const getInstallId = () => installId ??= (async () => {
16
+ try {
17
+ const saved = (await _NativeBsPatch.default.readFile(INSTALL_ID_PATH)).trim();
18
+ if (/^[0-9a-f]{32}$/.test(saved)) return saved;
19
+ } catch {}
20
+ const id = Array.from({
21
+ length: 32
22
+ }, () => Math.floor(Math.random() * 16).toString(16)).join('');
23
+ await _NativeBsPatch.default.writeFile(INSTALL_ID_PATH, id).catch(() => {});
24
+ return id;
25
+ })();
26
+ exports.getInstallId = getInstallId;
27
+ //# sourceMappingURL=installId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","_otaMetadata","e","__esModule","default","INSTALL_ID_PATH","DOCUMENT_DIR","installId","getInstallId","saved","NativeBsPatch","readFile","trim","test","id","Array","from","length","Math","floor","random","toString","join","writeFile","catch","exports"],"sourceRoot":"../../../src","sources":["ota/installId.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAA6C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7C;AACA,MAAMG,eAAe,GAAG,GAAGC,yBAAY,qBAAqB;AAC5D,IAAIC,SAAsC;;AAE1C;AACO,MAAMC,YAAY,GAAGA,CAAA,KACvBD,SAAS,KAAK,CAAC,YAAY;EACxB,IAAI;IACA,MAAME,KAAK,GAAG,CAAC,MAAMC,sBAAa,CAACC,QAAQ,CAACN,eAAe,CAAC,EAAEO,IAAI,CAAC,CAAC;IACpE,IAAI,gBAAgB,CAACC,IAAI,CAACJ,KAAK,CAAC,EAAE,OAAOA,KAAK;EAClD,CAAC,CAAC,MAAM,CAAC;EACT,MAAMK,EAAE,GAAGC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,MAAMC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;EACjG,MAAMZ,sBAAa,CAACa,SAAS,CAAClB,eAAe,EAAES,EAAE,CAAC,CAACU,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EAClE,OAAOV,EAAE;AACb,CAAC,EAAE,CAAE;AAACW,OAAA,CAAAjB,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.verifyHash = exports.validateOtaConfig = exports.semverGte = exports.selectUpdate = exports.getLocalPatchPath = exports.getLocalAssetPath = exports.fetchOtaManifest = exports.applyOtaPatchInternal = void 0;
7
+ var _reactNative = require("react-native");
7
8
  var _NativeBsPatch = _interopRequireDefault(require("../NativeBsPatch"));
9
+ var _entrySignature = require("./entrySignature");
8
10
  var _otaLogger = require("./otaLogger");
9
11
  var _otaMetadata = require("./otaMetadata");
10
- var _GitHubRawStorage = require("./storage/GitHubRawStorage");
12
+ var _R2Storage = require("./storage/R2Storage");
11
13
  var _types = require("./types");
12
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
15
  /**
@@ -25,9 +27,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
25
27
 
26
28
  // ─── Storage Provider Factory ──────────────────────────────────────────
27
29
 
28
- const DEFAULT_STORAGE = new _GitHubRawStorage.GitHubRawStorageProvider();
30
+ const DEFAULT_STORAGE = new _R2Storage.R2StorageProvider();
29
31
 
30
- /** Explicit `config.storage` or the default static-host provider (GitHub raw, R2, CDN...). */
32
+ /** Explicit `config.storage` or the default provider (R2 public URL). */
31
33
  const getStorage = config => config.storage ?? DEFAULT_STORAGE;
32
34
 
33
35
  /**
@@ -95,27 +97,58 @@ const verifyHash = async (path, expectedHash) => {
95
97
  };
96
98
 
97
99
  /**
98
- * When `config.publicKey` is set, an RSA/ECDSA SHA-256 signature is mandatory
99
- * and must verify (fail closed). Without a public key, signing is not enforced.
100
+ * When there is a public key (config.publicKey, else the embedded ones), an RSA/ECDSA
101
+ * SHA-256 signature is mandatory and must verify against one of them (fail closed):
102
+ * the backup key takes over without a store build if the primary is lost.
100
103
  */
101
104
  exports.verifyHash = verifyHash;
102
105
  const assertSigned = async (filePath, signature, config, what) => {
103
- if (!config.publicKey) return;
104
- const valid = !!signature && (await _NativeBsPatch.default.verifySignature(filePath, signature, config.publicKey).catch(() => false));
106
+ const keys = (0, _entrySignature.parsePublicKeys)(config.publicKey);
107
+ if (keys.length === 0) return;
108
+ let valid = false;
109
+ for (const key of signature ? keys : []) {
110
+ if (await _NativeBsPatch.default.verifySignature(filePath, signature, key).catch(() => false)) {
111
+ valid = true;
112
+ break;
113
+ }
114
+ }
105
115
  if (!valid) {
106
116
  throw new Error(`${what} signature missing or invalid`);
107
117
  }
108
118
  };
109
119
 
120
+ /**
121
+ * With config.publicKey the registry entry itself must be signed and meant for this app,
122
+ * so a registry served by someone else (e.g. a lapsed domain) can't hand over another
123
+ * flavor's, platform's or release's signed bundle, or swap the asset manifest.
124
+ */
125
+ const assertEntrySigned = async (patch, config) => {
126
+ if ((0, _entrySignature.parsePublicKeys)(config.publicKey).length === 0) return;
127
+ const channel = config.customServer?.channel;
128
+ const mismatch = patch.appVersion !== config.appVersion ? 'appVersion' : patch.platform !== _reactNative.Platform.OS ? 'platform' : channel && patch.flavor !== (0, _R2Storage.normalizeChannel)(channel) ? 'flavor' : patch.assetManifestUrl && !patch.assetManifestHash ? 'assetManifestHash' : null;
129
+ if (mismatch) {
130
+ throw new Error(`Registry entry rejected: ${mismatch} doesn't match this app`);
131
+ }
132
+ const payloadPath = `${_otaMetadata.OTA_DIR}/entry-payload.txt`;
133
+ await _NativeBsPatch.default.writeFile(payloadPath, (0, _entrySignature.entryPayload)(patch));
134
+ try {
135
+ await assertSigned(payloadPath, patch.entrySignature, config, 'Registry entry');
136
+ } finally {
137
+ await _NativeBsPatch.default.removePath(payloadPath).catch(() => {});
138
+ }
139
+ };
140
+
110
141
  /**
111
142
  * Download a file with retry logic using exponential backoff.
112
143
  * Native streams to `${destPath}.part` and renames only on a 2xx response, so a
113
- * cut-off download or an error page never sits at destPath looking complete.
144
+ * cut-off download or an error page never sits at destPath looking complete;
145
+ * each retry resumes where the last attempt stopped.
114
146
  * @returns Size of the downloaded file in bytes
115
147
  */
116
148
  const downloadWithRetry = async (url, destPath, config, onProgress) => {
117
149
  const retryLimit = Math.max(1, config.network?.retry ?? 3);
118
150
  const timeout = config.network?.timeoutMs ?? 30000;
151
+ const headers = JSON.stringify(config.customServer?.headers ?? {});
119
152
  const subscription = _NativeBsPatch.default.onDownloadProgress(e => {
120
153
  // total is -1 without a Content-Length
121
154
  if (e.path === destPath && e.total > 0) {
@@ -125,7 +158,7 @@ const downloadWithRetry = async (url, destPath, config, onProgress) => {
125
158
  try {
126
159
  for (let i = 0;; i++) {
127
160
  try {
128
- return await _NativeBsPatch.default.downloadFile(url, destPath, timeout);
161
+ return await _NativeBsPatch.default.downloadFile(url, destPath, timeout, headers);
129
162
  } catch (e) {
130
163
  if (i >= retryLimit - 1) throw e;
131
164
  const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
@@ -169,13 +202,20 @@ const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith(
169
202
  * transformer (which raced the first render). Files are fetched once per content
170
203
  * hash into ota/assets/ and copied from there for later versions.
171
204
  */
172
- const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onStatus, onProgress) => {
205
+ const downloadAndSyncAssets = async (assetManifestUrl, assetManifestHash, version, config, log, onStatus, onProgress) => {
173
206
  const fs = _NativeBsPatch.default;
174
207
  onStatus(_types.OtaStatus.SYNCING_ASSETS, 'Syncing assets...');
175
208
  const versionDir = `${_otaMetadata.OTA_DIR}/v${version}`;
176
209
  let assets = [];
177
210
  try {
178
- const manifest = await (0, _GitHubRawStorage.fetchJson)(assetManifestUrl, 10000);
211
+ // Through a file: its hash is in the (signed) registry entry
212
+ const manifestPath = `${versionDir}/asset-manifest.json`;
213
+ await downloadWithRetry(assetManifestUrl, manifestPath, config, () => {});
214
+ if (!(await verifyHash(manifestPath, assetManifestHash))) {
215
+ throw new Error('hash mismatch');
216
+ }
217
+ const manifest = JSON.parse(await fs.readFile(manifestPath));
218
+ await fs.removePath(manifestPath).catch(() => {});
179
219
  // Hash/ext/path become file names: reject anything unexpected
180
220
  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));
181
221
  } catch (e) {
@@ -289,6 +329,7 @@ const selectUpdate = (patchList, localV, targetV) => {
289
329
  * Full path (store build, no patch, or patch path failed):
290
330
  * download full bundle → hash → signature
291
331
  * Both then: sync assets → atomic commit → metadata → mark healthy → reload.
332
+ * Only a patch-path failure falls back to the full bundle, never a failed commit.
292
333
  *
293
334
  * The store build's bundle is never used as a patch source: it can't be
294
335
  * reproduced byte-for-byte at build time, so the first OTA is always a full download.
@@ -318,10 +359,22 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
318
359
  }
319
360
  const log = (0, _otaLogger.createOtaLogger)(config.onEvent);
320
361
  await (0, _otaMetadata.ensureOtaDir)();
362
+ try {
363
+ await assertEntrySigned(patch, config);
364
+ } catch (error) {
365
+ log.emit(_otaLogger.OtaEvent.SIGNATURE_INVALID, {
366
+ version: patch.toVersion,
367
+ error: error.message
368
+ });
369
+ onStatus(_types.OtaStatus.ERROR, `Error: ${error.message}`);
370
+ throw error;
371
+ }
321
372
  const totalStart = Date.now();
322
373
  const fs = _NativeBsPatch.default;
323
374
  const finalBundlePath = (0, _otaMetadata.getBundlePath)(patch.toVersion, config.baseAppVersion) || '';
324
375
  const tempBundle = `${finalBundlePath}.tmp`;
376
+ /** Compressed full bundle, before decompressing into tempBundle */
377
+ const tempDownload = `${finalBundlePath}.download`;
325
378
  const versionDir = `${_otaMetadata.OTA_DIR}/v${patch.toVersion}`;
326
379
  const localPatchPath = getLocalPatchPath(patch, _otaMetadata.DOCUMENT_DIR);
327
380
 
@@ -343,6 +396,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
343
396
  throw new Error(`Native app ${currentAppVer} is too old. Update to ${patch.minAppVersion}+ first.`);
344
397
  }
345
398
  }
399
+
400
+ // Room for the download, the decompressed bundle and its assets; a full disk mid-write
401
+ // would fail later and leave the user's storage fuller
402
+ const needBytes = (patch.bundleSize ?? 0) * 3 + 20 * 1024 * 1024;
403
+ const freeBytes = await fs.getFreeDiskSpace().catch(() => Number.MAX_SAFE_INTEGER);
404
+ if (freeBytes < needBytes) {
405
+ throw new Error(`Not enough free storage: ${Math.ceil(needBytes / 1048576)} MB needed`);
406
+ }
346
407
  await fs.mkdir(versionDir);
347
408
  const download = async (remoteName, dest) => {
348
409
  log.emit(_otaLogger.OtaEvent.DOWNLOAD_START, {
@@ -385,12 +446,11 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
385
446
  });
386
447
  throw new Error(`${what} hash mismatch`);
387
448
  };
388
-
389
449
  /** tempBundle is verified: sync assets, swap it in, record the version, reload. */
390
450
  const commit = async metrics => {
391
451
  if (patch.assetManifestUrl) {
392
452
  const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
393
- await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
453
+ await downloadAndSyncAssets(manifestUrl, patch.assetManifestHash, patch.toVersion, config, log, onStatus, onProgress);
394
454
  }
395
455
  await fs.moveFile(tempBundle, finalBundlePath);
396
456
 
@@ -417,6 +477,8 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
417
477
  console.log(`[otaCore] V${patch.toVersion} prepared in background — applies on next launch.`);
418
478
  }
419
479
  };
480
+
481
+ /** Leaves the verified result at tempBundle. */
420
482
  const applyPatchFile = async sourcePath => {
421
483
  onStatus(_types.OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion}...`);
422
484
  const {
@@ -452,12 +514,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
452
514
  }
453
515
  await assertHash(tempBundle, patch.bundleHash, 'Result bundle');
454
516
  await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
455
- await commit({
517
+ return {
456
518
  patchSizeKB: sizeBytes / 1024,
457
519
  downloadMs,
458
520
  applyMs
459
- });
521
+ };
460
522
  };
523
+
524
+ /** Leaves the verified full bundle at tempBundle. */
461
525
  const installFullBundle = async () => {
462
526
  if (!patch.fullBundleUrl) {
463
527
  throw new Error(`No full bundle for V${patch.toVersion}`);
@@ -466,31 +530,42 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
466
530
  version: patch.toVersion
467
531
  });
468
532
  onStatus(_types.OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion} (full bundle)...`);
533
+ const compression = patch.fullBundleCompression;
469
534
  const {
470
535
  downloadMs,
471
536
  sizeBytes
472
- } = await download(patch.fullBundleUrl, tempBundle);
537
+ } = await download(patch.fullBundleUrl, compression ? tempDownload : tempBundle);
538
+ if (compression) {
539
+ onStatus(_types.OtaStatus.APPLYING, 'Decompressing...');
540
+ await fs.decompressFile(tempDownload, tempBundle, compression);
541
+ await fs.removePath(tempDownload).catch(() => {});
542
+ }
473
543
  await assertHash(tempBundle, patch.bundleHash, 'Full bundle');
474
544
  await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
475
- await commit({
545
+ return {
476
546
  patchSizeKB: sizeBytes / 1024,
477
547
  downloadMs,
478
548
  applyMs: 0
479
- });
549
+ };
480
550
  };
481
551
  const cleanup = async () => {
482
552
  await fs.removePath(localPatchPath).catch(() => {});
483
553
  await fs.removePath(tempBundle).catch(() => {});
554
+ // tempDownload's .part stays: the next attempt resumes it
555
+ await fs.removePath(tempDownload).catch(() => {});
484
556
  };
485
557
 
486
558
  // Patch only from an OTA bundle we installed ourselves (byte-identical to the build output)
487
559
  const metadata = await (0, _otaMetadata.loadMetadata)(config.baseAppVersion);
488
560
  const sourcePath = (0, _otaMetadata.getBundlePath)(metadata.currentVersion, config.baseAppVersion);
489
561
  const canPatch = !!patch.filename && patch.fromVersion === metadata.currentVersion && !!sourcePath && (await fs.exists(sourcePath));
562
+
563
+ // Only a failed patch falls back to the full bundle; a failed commit (asset sync)
564
+ // would fail the same way after re-downloading the whole bundle
565
+ let metrics;
490
566
  if (canPatch) {
491
567
  try {
492
- await applyPatchFile(sourcePath);
493
- return;
568
+ metrics = await applyPatchFile(sourcePath);
494
569
  } catch (error) {
495
570
  await cleanup();
496
571
  if (__DEV__) {
@@ -503,7 +578,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
503
578
  }
504
579
  }
505
580
  try {
506
- await installFullBundle();
581
+ await commit(metrics ?? (await installFullBundle()));
507
582
  } catch (error) {
508
583
  await cleanup();
509
584
  onStatus(_types.OtaStatus.ERROR, `Error: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"names":["_NativeBsPatch","_interopRequireDefault","require","_otaLogger","_otaMetadata","_GitHubRawStorage","_types","e","__esModule","default","DEFAULT_STORAGE","GitHubRawStorageProvider","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","exports","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","NativeBsPatch","hashFile","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","verifySignature","catch","Error","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","subscription","onDownloadProgress","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","OTA_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","fs","OtaStatus","SYNCING_ASSETS","versionDir","assets","manifest","fetchJson","filter","ext","originalPath","message","length","writeFile","ASSET_LIST_FILE","dirs","Map","ensureDir","dir","has","set","mkdir","get","processed","downloaded","failed","index","worker","asset","storePath","getLocalAssetPath","exists","getAssetUrl","removePath","dest","slice","lastIndexOf","copyFile","round","all","Array","from","emit","OtaEvent","DOWNLOAD_SUCCESS","getLocalPatchPath","patch","docDir","appVersion","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","createOtaLogger","onEvent","ensureOtaDir","totalStart","Date","now","finalBundlePath","getBundlePath","baseAppVersion","tempBundle","localPatchPath","DOCUMENT_DIR","minAppVersion","currentAppVer","getAppVersion","undefined","VERSION_INCOMPATIBLE","download","remoteName","DOWNLOAD_START","dlStart","sizeBytes","getUpdateFileUrl","dlError","DOWNLOAD_FAIL","error","downloadMs","durationMs","sizeKB","assertHash","expected","actual","HASH_MISMATCH","metadata","commit","metrics","manifestUrl","moveFile","nativeAppVersion","updateMetadata","registerNewVersion","totalMs","PATCH_SUCCESS","patchSizeKB","SUCCESS","fromCache","reloadBundle","applyPatchFile","sourcePath","DOWNLOADING","APPLYING","sigError","SIGNATURE_INVALID","baseHash","PATCH_START","applyStart","success","applyPatch","applyMs","PATCH_FAIL","bundleHash","bundleSignature","installFullBundle","fullBundleUrl","FALLBACK_FULL_BUNDLE","cleanup","loadMetadata","currentVersion","canPatch","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_NativeBsPatch","_interopRequireDefault","_entrySignature","_otaLogger","_otaMetadata","_R2Storage","_types","e","__esModule","default","DEFAULT_STORAGE","R2StorageProvider","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","exports","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","NativeBsPatch","hashFile","toLowerCase","assertSigned","filePath","signature","what","keys","parsePublicKeys","publicKey","length","valid","key","verifySignature","catch","Error","assertEntrySigned","patch","mismatch","appVersion","platform","Platform","OS","flavor","normalizeChannel","assetManifestUrl","assetManifestHash","payloadPath","OTA_DIR","writeFile","entryPayload","entrySignature","removePath","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","headers","subscription","onDownloadProgress","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","version","log","onStatus","fs","OtaStatus","SYNCING_ASSETS","versionDir","assets","manifestPath","manifest","parse","readFile","filter","ext","originalPath","message","ASSET_LIST_FILE","dirs","Map","ensureDir","dir","has","set","mkdir","get","processed","downloaded","failed","index","worker","asset","storePath","getLocalAssetPath","exists","getAssetUrl","dest","slice","lastIndexOf","copyFile","round","all","Array","from","emit","OtaEvent","DOWNLOAD_SUCCESS","getLocalPatchPath","docDir","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","createOtaLogger","onEvent","ensureOtaDir","error","SIGNATURE_INVALID","ERROR","totalStart","Date","now","finalBundlePath","getBundlePath","baseAppVersion","tempBundle","tempDownload","localPatchPath","DOCUMENT_DIR","minAppVersion","currentAppVer","getAppVersion","undefined","VERSION_INCOMPATIBLE","needBytes","bundleSize","freeBytes","getFreeDiskSpace","MAX_SAFE_INTEGER","ceil","download","remoteName","DOWNLOAD_START","dlStart","sizeBytes","getUpdateFileUrl","dlError","DOWNLOAD_FAIL","downloadMs","durationMs","sizeKB","assertHash","expected","actual","HASH_MISMATCH","metadata","commit","metrics","manifestUrl","moveFile","nativeAppVersion","updateMetadata","registerNewVersion","totalMs","PATCH_SUCCESS","patchSizeKB","SUCCESS","fromCache","reloadBundle","applyPatchFile","sourcePath","DOWNLOADING","APPLYING","sigError","baseHash","PATCH_START","applyStart","success","applyPatch","applyMs","PATCH_FAIL","bundleHash","bundleSignature","installFullBundle","fullBundleUrl","FALLBACK_FULL_BUNDLE","compression","fullBundleCompression","decompressFile","cleanup","loadMetadata","currentVersion","canPatch"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.fetchJson = exports.GitHubRawStorageProvider = void 0;
6
+ exports.normalizeChannel = exports.fetchJson = exports.R2StorageProvider = void 0;
7
7
  /**
8
- * Storage Provider for any static host with this layout: GitHub raw, a public
9
- * Cloudflare R2 bucket (r2.dev or custom domain), S3, a CDN...
8
+ * Storage Provider for the public URL of a Cloudflare R2 bucket (r2.dev or a custom
9
+ * domain): plain HTTP GETs, so any static host serving the same layout also works.
10
10
  *
11
11
  * Direct URL mapping:
12
12
  * - Manifest: `${baseUrl}/${baseFolder}/ota_registry.json`
@@ -14,22 +14,25 @@ exports.fetchJson = exports.GitHubRawStorageProvider = void 0;
14
14
  * - Assets: `${baseUrl}/${baseFolder}/assets/${hash}.${ext}`
15
15
  *
16
16
  * NOTE: Only the registry is mutable: it is fetched with Cache-Control: no-cache
17
- * and a timestamp query param (GitHub's CDN caches for 5 minutes). Bundles,
17
+ * and a timestamp query param (the CDN in front of the bucket may cache it). Bundles,
18
18
  * patches, manifests and assets are never overwritten, so they stay cacheable.
19
19
  */
20
20
 
21
- /** Headers to bypass GitHub CDN cache on mutable files (registry, manifests) */
21
+ /** Headers to bypass the CDN cache on mutable files (registry, manifests) */
22
22
  const NO_CACHE_HEADERS = {
23
23
  'Cache-Control': 'no-cache'
24
24
  };
25
25
 
26
26
  /** GET + JSON.parse with a timeout (fetch has none of its own); rejects on non-2xx. */
27
- const fetchJson = async (url, timeoutMs) => {
27
+ const fetchJson = async (url, timeoutMs, headers) => {
28
28
  const controller = new AbortController();
29
29
  const timer = setTimeout(() => controller.abort(), timeoutMs);
30
30
  try {
31
31
  const res = await fetch(url, {
32
- headers: NO_CACHE_HEADERS,
32
+ headers: {
33
+ ...NO_CACHE_HEADERS,
34
+ ...headers
35
+ },
33
36
  signal: controller.signal
34
37
  });
35
38
  if (!res.ok) {
@@ -50,31 +53,33 @@ const normalizeChannel = channel => {
50
53
  if (lower === 'prod') return 'production';
51
54
  return lower;
52
55
  };
53
- class GitHubRawStorageProvider {
56
+ exports.normalizeChannel = normalizeChannel;
57
+ class R2StorageProvider {
54
58
  async fetchManifest(config) {
55
59
  if (!config.customServer) {
56
- throw new Error('[GitHubRawStorage] customServer configuration missing');
60
+ throw new Error('[R2Storage] customServer configuration missing');
57
61
  }
58
62
  const {
59
63
  baseUrl,
60
64
  channel,
61
- baseFolder = 'ota'
65
+ baseFolder = 'ota',
66
+ headers
62
67
  } = config.customServer;
63
68
  const channelName = normalizeChannel(channel);
64
69
  const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
65
70
  // Cache-bust: registry is mutable; must always fetch the latest version
66
71
  const registryUrl = bustCache(`${normalizedBaseUrl}/${baseFolder}/ota_registry.json`);
67
72
  try {
68
- const registry = await fetchJson(registryUrl, 15000);
73
+ const registry = await fetchJson(registryUrl, 15000, headers);
69
74
  if (!config.appVersion) {
70
- throw new Error('[GitHubRawStorage] config.appVersion is required to query OTA registry');
75
+ throw new Error('[R2Storage] config.appVersion is required to query OTA registry');
71
76
  }
72
77
  const appGroup = registry?.apps?.[config.appVersion];
73
78
  const flavorGroup = appGroup?.flavors?.[channelName];
74
79
  return flavorGroup?.patches ?? [];
75
80
  } catch (error) {
76
81
  // Surface it: "no patches" would report a broken registry as up to date
77
- throw new Error(`[GitHubRawStorage] Manifest fetch error: ${error.message}`);
82
+ throw new Error(`[R2Storage] Manifest fetch error: ${error.message}`);
78
83
  }
79
84
  }
80
85
  async getUpdateFileUrl(filename, config) {
@@ -104,5 +109,5 @@ class GitHubRawStorageProvider {
104
109
  return `${normalizedBaseUrl}/${baseFolder}/assets/${hash}.${ext}`;
105
110
  }
106
111
  }
107
- exports.GitHubRawStorageProvider = GitHubRawStorageProvider;
108
- //# sourceMappingURL=GitHubRawStorage.js.map
112
+ exports.R2StorageProvider = R2StorageProvider;
113
+ //# sourceMappingURL=R2Storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NO_CACHE_HEADERS","fetchJson","url","timeoutMs","headers","controller","AbortController","timer","setTimeout","abort","res","fetch","signal","ok","Error","status","json","clearTimeout","exports","bustCache","Date","now","normalizeChannel","channel","lower","toLowerCase","R2StorageProvider","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/R2Storage.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["OtaUpdateMode","exports","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAuBYA,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAwCzB;AACA;AACA;AAFA,IA+EYE,SAAS,GAAAD,OAAA,CAAAC,SAAA,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","exports","OtaStatus"],"sourceRoot":"../../../src","sources":["ota/types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AAFA,IAuBYA,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAgEzB;AACA;AACA;AAFA,IA8FYE,SAAS,GAAAD,OAAA,CAAAC,SAAA,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 +1 @@
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":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBsPatch.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AA4HlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
@@ -13,7 +13,8 @@ export function reloadBundle() {
13
13
  export * from './ota/otaLogger';
14
14
  export * from './ota/OtaProvider';
15
15
  export * from './ota/types';
16
- export { GitHubRawStorageProvider } from './ota/storage/GitHubRawStorage';
16
+ export { R2StorageProvider, /** @deprecated Renamed to R2StorageProvider */
17
+ R2StorageProvider as GitHubRawStorageProvider } from './ota/storage/R2Storage';
17
18
  export default {
18
19
  applyPatch,
19
20
  reloadBundle,
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"names":["NativeBsPatch","applyPatch","oldBundlePath","newBundlePath","patchPath","markAsHealthy","reloadBundle","R2StorageProvider","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,SACEC,iBAAiB,EACjB;AACAA,iBAAiB,IAAIC,wBAAwB,QACxC,yBAAyB;AAEhC,eAAe;EACbP,UAAU;EACVK,YAAY;EACZD;AACF,CAAC","ignoreList":[]}