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
@@ -13,17 +13,19 @@
13
13
  * - Structured telemetry logging
14
14
  */
15
15
 
16
+ import { Platform } from 'react-native';
16
17
  import NativeBsPatch from '../NativeBsPatch';
18
+ import { entryPayload, parsePublicKeys } from './entrySignature';
17
19
  import { createOtaLogger, OtaEvent } from './otaLogger';
18
20
  import { ASSET_LIST_FILE, DOCUMENT_DIR, ensureOtaDir, OTA_DIR, getBundlePath, loadMetadata, registerNewVersion, updateMetadata } from './otaMetadata';
19
- import { fetchJson, GitHubRawStorageProvider } from './storage/GitHubRawStorage';
21
+ import { normalizeChannel, R2StorageProvider } from './storage/R2Storage';
20
22
  import { OtaStatus } from './types';
21
23
 
22
24
  // ─── Storage Provider Factory ──────────────────────────────────────────
23
25
 
24
- const DEFAULT_STORAGE = new GitHubRawStorageProvider();
26
+ const DEFAULT_STORAGE = new R2StorageProvider();
25
27
 
26
- /** Explicit `config.storage` or the default static-host provider (GitHub raw, R2, CDN...). */
28
+ /** Explicit `config.storage` or the default provider (R2 public URL). */
27
29
  const getStorage = config => config.storage ?? DEFAULT_STORAGE;
28
30
 
29
31
  /**
@@ -89,26 +91,57 @@ export const verifyHash = async (path, expectedHash) => {
89
91
  };
90
92
 
91
93
  /**
92
- * When `config.publicKey` is set, an RSA/ECDSA SHA-256 signature is mandatory
93
- * and must verify (fail closed). Without a public key, signing is not enforced.
94
+ * When there is a public key (config.publicKey, else the embedded ones), an RSA/ECDSA
95
+ * SHA-256 signature is mandatory and must verify against one of them (fail closed):
96
+ * the backup key takes over without a store build if the primary is lost.
94
97
  */
95
98
  const assertSigned = async (filePath, signature, config, what) => {
96
- if (!config.publicKey) return;
97
- const valid = !!signature && (await NativeBsPatch.verifySignature(filePath, signature, config.publicKey).catch(() => false));
99
+ const keys = parsePublicKeys(config.publicKey);
100
+ if (keys.length === 0) return;
101
+ let valid = false;
102
+ for (const key of signature ? keys : []) {
103
+ if (await NativeBsPatch.verifySignature(filePath, signature, key).catch(() => false)) {
104
+ valid = true;
105
+ break;
106
+ }
107
+ }
98
108
  if (!valid) {
99
109
  throw new Error(`${what} signature missing or invalid`);
100
110
  }
101
111
  };
102
112
 
113
+ /**
114
+ * With config.publicKey the registry entry itself must be signed and meant for this app,
115
+ * so a registry served by someone else (e.g. a lapsed domain) can't hand over another
116
+ * flavor's, platform's or release's signed bundle, or swap the asset manifest.
117
+ */
118
+ const assertEntrySigned = async (patch, config) => {
119
+ if (parsePublicKeys(config.publicKey).length === 0) return;
120
+ const channel = config.customServer?.channel;
121
+ const mismatch = patch.appVersion !== config.appVersion ? 'appVersion' : patch.platform !== Platform.OS ? 'platform' : channel && patch.flavor !== normalizeChannel(channel) ? 'flavor' : patch.assetManifestUrl && !patch.assetManifestHash ? 'assetManifestHash' : null;
122
+ if (mismatch) {
123
+ throw new Error(`Registry entry rejected: ${mismatch} doesn't match this app`);
124
+ }
125
+ const payloadPath = `${OTA_DIR}/entry-payload.txt`;
126
+ await NativeBsPatch.writeFile(payloadPath, entryPayload(patch));
127
+ try {
128
+ await assertSigned(payloadPath, patch.entrySignature, config, 'Registry entry');
129
+ } finally {
130
+ await NativeBsPatch.removePath(payloadPath).catch(() => {});
131
+ }
132
+ };
133
+
103
134
  /**
104
135
  * Download a file with retry logic using exponential backoff.
105
136
  * 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.
137
+ * cut-off download or an error page never sits at destPath looking complete;
138
+ * each retry resumes where the last attempt stopped.
107
139
  * @returns Size of the downloaded file in bytes
108
140
  */
109
141
  const downloadWithRetry = async (url, destPath, config, onProgress) => {
110
142
  const retryLimit = Math.max(1, config.network?.retry ?? 3);
111
143
  const timeout = config.network?.timeoutMs ?? 30000;
144
+ const headers = JSON.stringify(config.customServer?.headers ?? {});
112
145
  const subscription = NativeBsPatch.onDownloadProgress(e => {
113
146
  // total is -1 without a Content-Length
114
147
  if (e.path === destPath && e.total > 0) {
@@ -118,7 +151,7 @@ const downloadWithRetry = async (url, destPath, config, onProgress) => {
118
151
  try {
119
152
  for (let i = 0;; i++) {
120
153
  try {
121
- return await NativeBsPatch.downloadFile(url, destPath, timeout);
154
+ return await NativeBsPatch.downloadFile(url, destPath, timeout, headers);
122
155
  } catch (e) {
123
156
  if (i >= retryLimit - 1) throw e;
124
157
  const delay = Math.pow(2, i) * 1000; // Exponential backoff: 1s, 2s, 4s...
@@ -162,13 +195,20 @@ const isSafeRelativePath = p => /^[A-Za-z0-9_\-.@/]+$/.test(p) && !p.startsWith(
162
195
  * transformer (which raced the first render). Files are fetched once per content
163
196
  * hash into ota/assets/ and copied from there for later versions.
164
197
  */
165
- const downloadAndSyncAssets = async (assetManifestUrl, version, config, log, onStatus, onProgress) => {
198
+ const downloadAndSyncAssets = async (assetManifestUrl, assetManifestHash, version, config, log, onStatus, onProgress) => {
166
199
  const fs = NativeBsPatch;
167
200
  onStatus(OtaStatus.SYNCING_ASSETS, 'Syncing assets...');
168
201
  const versionDir = `${OTA_DIR}/v${version}`;
169
202
  let assets = [];
170
203
  try {
171
- const manifest = await fetchJson(assetManifestUrl, 10000);
204
+ // Through a file: its hash is in the (signed) registry entry
205
+ const manifestPath = `${versionDir}/asset-manifest.json`;
206
+ await downloadWithRetry(assetManifestUrl, manifestPath, config, () => {});
207
+ if (!(await verifyHash(manifestPath, assetManifestHash))) {
208
+ throw new Error('hash mismatch');
209
+ }
210
+ const manifest = JSON.parse(await fs.readFile(manifestPath));
211
+ await fs.removePath(manifestPath).catch(() => {});
172
212
  // Hash/ext/path become file names: reject anything unexpected
173
213
  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));
174
214
  } catch (e) {
@@ -280,6 +320,7 @@ export const selectUpdate = (patchList, localV, targetV) => {
280
320
  * Full path (store build, no patch, or patch path failed):
281
321
  * download full bundle → hash → signature
282
322
  * Both then: sync assets → atomic commit → metadata → mark healthy → reload.
323
+ * Only a patch-path failure falls back to the full bundle, never a failed commit.
283
324
  *
284
325
  * The store build's bundle is never used as a patch source: it can't be
285
326
  * reproduced byte-for-byte at build time, so the first OTA is always a full download.
@@ -307,10 +348,22 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
307
348
  }
308
349
  const log = createOtaLogger(config.onEvent);
309
350
  await ensureOtaDir();
351
+ try {
352
+ await assertEntrySigned(patch, config);
353
+ } catch (error) {
354
+ log.emit(OtaEvent.SIGNATURE_INVALID, {
355
+ version: patch.toVersion,
356
+ error: error.message
357
+ });
358
+ onStatus(OtaStatus.ERROR, `Error: ${error.message}`);
359
+ throw error;
360
+ }
310
361
  const totalStart = Date.now();
311
362
  const fs = NativeBsPatch;
312
363
  const finalBundlePath = getBundlePath(patch.toVersion, config.baseAppVersion) || '';
313
364
  const tempBundle = `${finalBundlePath}.tmp`;
365
+ /** Compressed full bundle, before decompressing into tempBundle */
366
+ const tempDownload = `${finalBundlePath}.download`;
314
367
  const versionDir = `${OTA_DIR}/v${patch.toVersion}`;
315
368
  const localPatchPath = getLocalPatchPath(patch, DOCUMENT_DIR);
316
369
 
@@ -332,6 +385,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
332
385
  throw new Error(`Native app ${currentAppVer} is too old. Update to ${patch.minAppVersion}+ first.`);
333
386
  }
334
387
  }
388
+
389
+ // Room for the download, the decompressed bundle and its assets; a full disk mid-write
390
+ // would fail later and leave the user's storage fuller
391
+ const needBytes = (patch.bundleSize ?? 0) * 3 + 20 * 1024 * 1024;
392
+ const freeBytes = await fs.getFreeDiskSpace().catch(() => Number.MAX_SAFE_INTEGER);
393
+ if (freeBytes < needBytes) {
394
+ throw new Error(`Not enough free storage: ${Math.ceil(needBytes / 1048576)} MB needed`);
395
+ }
335
396
  await fs.mkdir(versionDir);
336
397
  const download = async (remoteName, dest) => {
337
398
  log.emit(OtaEvent.DOWNLOAD_START, {
@@ -374,12 +435,11 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
374
435
  });
375
436
  throw new Error(`${what} hash mismatch`);
376
437
  };
377
-
378
438
  /** tempBundle is verified: sync assets, swap it in, record the version, reload. */
379
439
  const commit = async metrics => {
380
440
  if (patch.assetManifestUrl) {
381
441
  const manifestUrl = await getStorage(config).getUpdateFileUrl(patch.assetManifestUrl, config);
382
- await downloadAndSyncAssets(manifestUrl, patch.toVersion, config, log, onStatus, onProgress);
442
+ await downloadAndSyncAssets(manifestUrl, patch.assetManifestHash, patch.toVersion, config, log, onStatus, onProgress);
383
443
  }
384
444
  await fs.moveFile(tempBundle, finalBundlePath);
385
445
 
@@ -406,6 +466,8 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
406
466
  console.log(`[otaCore] V${patch.toVersion} prepared in background — applies on next launch.`);
407
467
  }
408
468
  };
469
+
470
+ /** Leaves the verified result at tempBundle. */
409
471
  const applyPatchFile = async sourcePath => {
410
472
  onStatus(OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion}...`);
411
473
  const {
@@ -441,12 +503,14 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
441
503
  }
442
504
  await assertHash(tempBundle, patch.bundleHash, 'Result bundle');
443
505
  await assertSigned(tempBundle, patch.bundleSignature, config, 'Bundle');
444
- await commit({
506
+ return {
445
507
  patchSizeKB: sizeBytes / 1024,
446
508
  downloadMs,
447
509
  applyMs
448
- });
510
+ };
449
511
  };
512
+
513
+ /** Leaves the verified full bundle at tempBundle. */
450
514
  const installFullBundle = async () => {
451
515
  if (!patch.fullBundleUrl) {
452
516
  throw new Error(`No full bundle for V${patch.toVersion}`);
@@ -455,31 +519,42 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
455
519
  version: patch.toVersion
456
520
  });
457
521
  onStatus(OtaStatus.DOWNLOADING, `Downloading V${patch.toVersion} (full bundle)...`);
522
+ const compression = patch.fullBundleCompression;
458
523
  const {
459
524
  downloadMs,
460
525
  sizeBytes
461
- } = await download(patch.fullBundleUrl, tempBundle);
526
+ } = await download(patch.fullBundleUrl, compression ? tempDownload : tempBundle);
527
+ if (compression) {
528
+ onStatus(OtaStatus.APPLYING, 'Decompressing...');
529
+ await fs.decompressFile(tempDownload, tempBundle, compression);
530
+ await fs.removePath(tempDownload).catch(() => {});
531
+ }
462
532
  await assertHash(tempBundle, patch.bundleHash, 'Full bundle');
463
533
  await assertSigned(tempBundle, patch.bundleSignature, config, 'Full bundle');
464
- await commit({
534
+ return {
465
535
  patchSizeKB: sizeBytes / 1024,
466
536
  downloadMs,
467
537
  applyMs: 0
468
- });
538
+ };
469
539
  };
470
540
  const cleanup = async () => {
471
541
  await fs.removePath(localPatchPath).catch(() => {});
472
542
  await fs.removePath(tempBundle).catch(() => {});
543
+ // tempDownload's .part stays: the next attempt resumes it
544
+ await fs.removePath(tempDownload).catch(() => {});
473
545
  };
474
546
 
475
547
  // Patch only from an OTA bundle we installed ourselves (byte-identical to the build output)
476
548
  const metadata = await loadMetadata(config.baseAppVersion);
477
549
  const sourcePath = getBundlePath(metadata.currentVersion, config.baseAppVersion);
478
550
  const canPatch = !!patch.filename && patch.fromVersion === metadata.currentVersion && !!sourcePath && (await fs.exists(sourcePath));
551
+
552
+ // Only a failed patch falls back to the full bundle; a failed commit (asset sync)
553
+ // would fail the same way after re-downloading the whole bundle
554
+ let metrics;
479
555
  if (canPatch) {
480
556
  try {
481
- await applyPatchFile(sourcePath);
482
- return;
557
+ metrics = await applyPatchFile(sourcePath);
483
558
  } catch (error) {
484
559
  await cleanup();
485
560
  if (__DEV__) {
@@ -492,7 +567,7 @@ const runUpdatePipeline = async (patch, config, onStatus, onProgress, options =
492
567
  }
493
568
  }
494
569
  try {
495
- await installFullBundle();
570
+ await commit(metrics ?? (await installFullBundle()));
496
571
  } catch (error) {
497
572
  await cleanup();
498
573
  onStatus(OtaStatus.ERROR, `Error: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeBsPatch","createOtaLogger","OtaEvent","ASSET_LIST_FILE","DOCUMENT_DIR","ensureOtaDir","OTA_DIR","getBundlePath","loadMetadata","registerNewVersion","updateMetadata","fetchJson","GitHubRawStorageProvider","OtaStatus","DEFAULT_STORAGE","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","hashFile","toLowerCase","assertSigned","filePath","signature","what","publicKey","valid","verifySignature","catch","Error","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","subscription","onDownloadProgress","e","total","min","floor","received","downloadFile","delay","pow","__DEV__","console","warn","Promise","resolve","setTimeout","remove","fetchOtaManifest","fetchManifest","ASSET_STORE_DIR","isSafeRelativePath","p","startsWith","includes","downloadAndSyncAssets","assetManifestUrl","version","log","onStatus","fs","SYNCING_ASSETS","versionDir","assets","manifest","filter","ext","originalPath","message","length","writeFile","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","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","onEvent","totalStart","Date","now","finalBundlePath","baseAppVersion","tempBundle","localPatchPath","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","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","currentVersion","canPatch","ERROR"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,aAAa,MAAM,kBAAkB;AAC5C,SAASC,eAAe,EAAEC,QAAQ,QAAQ,aAAa;AACvD,SACIC,eAAe,EACfC,YAAY,EACZC,YAAY,EACZC,OAAO,EACPC,aAAa,EACbC,YAAY,EACZC,kBAAkB,EAClBC,cAAc,QACX,eAAe;AACtB,SAASC,SAAS,EAAEC,wBAAwB,QAAQ,4BAA4B;AAChF,SACIC,SAAS,QAMN,SAAS;;AAEhB;;AAEA,MAAMC,eAAe,GAAG,IAAIF,wBAAwB,CAAC,CAAC;;AAEtD;AACA,MAAMG,UAAU,GAAIC,MAAiB,IACjCA,MAAM,CAACC,OAAO,IAAIH,eAAe;;AAErC;AACA;AACA;AACA;AACA,OAAO,MAAMI,iBAAiB,GAAIF,MAAiB,IAAoB;EACnE,IAAIA,MAAM,CAACC,OAAO,EAAE,OAAO,IAAI;EAC/B,MAAM;IAAEE,OAAO;IAAEC;EAAQ,CAAC,GAAGJ,MAAM,CAACK,YAAY,IAAI,CAAC,CAAC;EACtD,IAAI,CAACF,OAAO,IAAI,CAAC,cAAc,CAACG,IAAI,CAACH,OAAO,CAAC,EAAE;IAC3C,OAAO,oDAAoDI,IAAI,CAACC,SAAS,CAACL,OAAO,CAAC,EAAE;EACxF;EACA,IAAI,CAACC,OAAO,EAAE;IACV,OAAO,yCAAyCG,IAAI,CAACC,SAAS,CAACJ,OAAO,CAAC,EAAE;EAC7E;EACA,OAAO,IAAI;AACf,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,SAAS,GAAGA,CAACC,CAAS,EAAEC,CAAS,KAAc;EACxD,MAAMC,EAAE,GAAGF,CAAC,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC;EACnC,MAAMC,EAAE,GAAGL,CAAC,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC;EACnC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IACxB,MAAMC,EAAE,GAAGN,EAAE,CAACK,CAAC,CAAC,IAAI,CAAC;IACrB,MAAME,EAAE,GAAGH,EAAE,CAACC,CAAC,CAAC,IAAI,CAAC;IACrB,IAAIC,EAAE,GAAGC,EAAE,EAAE,OAAO,IAAI;IACxB,IAAID,EAAE,GAAGC,EAAE,EAAE,OAAO,KAAK;EAC7B;EACA,OAAO,IAAI,CAAC,CAAC;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAG,MAAAA,CACtBC,IAAY,EACZC,YAAqB,KACF;EACnB,IAAI,CAACA,YAAY,EAAE,OAAO,IAAI;EAC9B,IAAI;IACA,MAAMC,IAAI,GAAG,MAAMvC,aAAa,CAACwC,QAAQ,CAACH,IAAI,CAAC;IAC/C,OAAOE,IAAI,CAACE,WAAW,CAAC,CAAC,KAAKH,YAAY,CAACG,WAAW,CAAC,CAAC;EAC5D,CAAC,CAAC,MAAM;IACJ,OAAO,KAAK;EAChB;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,MAAAA,CACjBC,QAAgB,EAChBC,SAA6B,EAC7B5B,MAAiB,EACjB6B,IAAY,KACI;EAChB,IAAI,CAAC7B,MAAM,CAAC8B,SAAS,EAAE;EACvB,MAAMC,KAAK,GACP,CAAC,CAACH,SAAS,KACV,MAAM5C,aAAa,CAACgD,eAAe,CAACL,QAAQ,EAAEC,SAAS,EAAE5B,MAAM,CAAC8B,SAAS,CAAC,CAACG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;EACnG,IAAI,CAACF,KAAK,EAAE;IACR,MAAM,IAAIG,KAAK,CAAC,GAAGL,IAAI,+BAA+B,CAAC;EAC3D;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,iBAAiB,GAAG,MAAAA,CACtBC,GAAW,EACXC,QAAgB,EAChBrC,MAAiB,EACjBsC,UAAqC,KACnB;EAClB,MAAMC,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEzC,MAAM,CAAC0C,OAAO,EAAEC,KAAK,IAAI,CAAC,CAAC;EAC1D,MAAMC,OAAO,GAAG5C,MAAM,CAAC0C,OAAO,EAAEG,SAAS,IAAI,KAAK;EAClD,MAAMC,YAAY,GAAG9D,aAAa,CAAC+D,kBAAkB,CAACC,CAAC,IAAI;IACvD;IACA,IAAIA,CAAC,CAAC3B,IAAI,KAAKgB,QAAQ,IAAIW,CAAC,CAACC,KAAK,GAAG,CAAC,EAAE;MACpCX,UAAU,CAACE,IAAI,CAACU,GAAG,CAAC,GAAG,EAAEV,IAAI,CAACW,KAAK,CAAEH,CAAC,CAACI,QAAQ,GAAGJ,CAAC,CAACC,KAAK,GAAI,GAAG,CAAC,CAAC,CAAC;IACvE;EACJ,CAAC,CAAC;EAEF,IAAI;IACA,KAAK,IAAIhC,CAAC,GAAG,CAAC,GAAIA,CAAC,EAAE,EAAE;MACnB,IAAI;QACA,OAAO,MAAMjC,aAAa,CAACqE,YAAY,CAACjB,GAAG,EAAEC,QAAQ,EAAEO,OAAO,CAAC;MACnE,CAAC,CAAC,OAAOI,CAAC,EAAE;QACR,IAAI/B,CAAC,IAAIsB,UAAU,GAAG,CAAC,EAAE,MAAMS,CAAC;QAChC,MAAMM,KAAK,GAAGd,IAAI,CAACe,GAAG,CAAC,CAAC,EAAEtC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrC,IAAIuC,OAAO,EAAE;UACTC,OAAO,CAACC,IAAI,CAAC,8BAA8BzC,CAAC,GAAG,CAAC,wBAAwBqC,KAAK,OAAO,CAAC;QACzF;QACA,MAAM,IAAIK,OAAO,CAAOC,OAAO,IAAIC,UAAU,CAACD,OAAO,EAAEN,KAAK,CAAC,CAAC;MAClE;IACJ;EACJ,CAAC,SAAS;IACNR,YAAY,CAACgB,MAAM,CAAC,CAAC;EACzB;AACJ,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAI/D,MAAiB,IAC9CD,UAAU,CAACC,MAAM,CAAC,CAACgE,aAAa,CAAChE,MAAM,CAAC;;AAE5C;;AAEA,MAAMiE,eAAe,GAAG,GAAG3E,OAAO,SAAS;;AAE3C;AACA,MAAM4E,kBAAkB,GAAIC,CAAS,IACjC,sBAAsB,CAAC7D,IAAI,CAAC6D,CAAC,CAAC,IAAI,CAACA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,IAAI,CAACD,CAAC,CAACtD,KAAK,CAAC,GAAG,CAAC,CAACwD,QAAQ,CAAC,IAAI,CAAC;;AAExF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,qBAAqB,GAAG,MAAAA,CAC1BC,gBAAwB,EACxBC,OAAe,EACfxE,MAAiB,EACjByE,GAAuC,EACvCC,QAIS,EACTpC,UAAqC,KACrB;EAChB,MAAMqC,EAAE,GAAG3F,aAAa;EACxB0F,QAAQ,CAAC7E,SAAS,CAAC+E,cAAc,EAAE,mBAAmB,CAAC;EACvD,MAAMC,UAAU,GAAG,GAAGvF,OAAO,KAAKkF,OAAO,EAAE;EAE3C,IAAIM,MAAkB,GAAG,EAAE;EAC3B,IAAI;IACA,MAAMC,QAAQ,GAAG,MAAMpF,SAAS,CAAC4E,gBAAgB,EAAE,KAAK,CAAC;IACzD;IACAO,MAAM,GAAG,CAACC,QAAQ,CAACD,MAAM,IAAI,EAAE,EAAEE,MAAM,CAClCtE,CAAM,IACH,iBAAiB,CAACJ,IAAI,CAACI,CAAC,CAACa,IAAI,CAAC,IAC9B,cAAc,CAACjB,IAAI,CAACI,CAAC,CAACuE,GAAG,CAAC,IAC1B,OAAOvE,CAAC,CAACwE,YAAY,KAAK,QAAQ,IAClChB,kBAAkB,CAACxD,CAAC,CAACwE,YAAY,CACzC,CAAC;EACL,CAAC,CAAC,OAAOlC,CAAC,EAAE;IACR;IACA,MAAM,IAAId,KAAK,CAAC,mCAAoCc,CAAC,CAAWmC,OAAO,EAAE,CAAC;EAC9E;EACA,IAAIL,MAAM,CAACM,MAAM,KAAK,CAAC,EAAE;EACzB;EACA,MAAMT,EAAE,CAACU,SAAS,CACd,GAAGR,UAAU,IAAI1F,eAAe,EAAE,EAClCoB,IAAI,CAACC,SAAS,CAACsE,MAAM,CAAChE,GAAG,CAACJ,CAAC,IAAI,GAAGA,CAAC,CAACa,IAAI,IAAIb,CAAC,CAACuE,GAAG,EAAE,CAAC,CACxD,CAAC;EAEDP,QAAQ,CAAC7E,SAAS,CAAC+E,cAAc,EAAE,WAAWE,MAAM,CAACM,MAAM,cAAc,CAAC;EAC1E;EACA,MAAME,IAAI,GAAG,IAAIC,GAAG,CAAwB,CAAC;EAC7C,MAAMC,SAAS,GAAIC,GAAW,IAAoB;IAC9C,IAAI,CAACH,IAAI,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;MAChBH,IAAI,CAACK,GAAG,CAACF,GAAG,EAAEd,EAAE,CAACiB,KAAK,CAACH,GAAG,CAAC,CAAC;IAChC;IACA,OAAOH,IAAI,CAACO,GAAG,CAACJ,GAAG,CAAC;EACxB,CAAC;EACD,MAAMD,SAAS,CAACvB,eAAe,CAAC;EAEhC,IAAI6B,SAAS,GAAG,CAAC;EACjB,IAAIC,UAAU,GAAG,CAAC;EAClB,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,KAAK,GAAG,CAAC;EAEb,MAAMC,MAAM,GAAG,MAAAA,CAAA,KAA2B;IACtC,OAAOD,KAAK,GAAGnB,MAAM,CAACM,MAAM,EAAE;MAC1B,MAAMe,KAAK,GAAGrB,MAAM,CAACmB,KAAK,EAAE,CAAC;MAC7B,MAAMG,SAAS,GAAGC,iBAAiB,CAACF,KAAK,CAAC5E,IAAI,EAAE4E,KAAK,CAAClB,GAAG,CAAC;MAC1D,IAAI;QACA,IAAI,EAAE,MAAMN,EAAE,CAAC2B,MAAM,CAACF,SAAS,CAAC,CAAC,EAAE;UAC/B,MAAMhE,GAAG,GAAG,MAAMrC,UAAU,CAACC,MAAM,CAAC,CAACuG,WAAW,CAACJ,KAAK,CAAC5E,IAAI,EAAE4E,KAAK,CAAClB,GAAG,EAAEjF,MAAM,CAAC;UAC/E,IAAI,CAACoC,GAAG,EAAE,MAAM,IAAIF,KAAK,CAAC,QAAQ,CAAC;UACnC,MAAMC,iBAAiB,CAACC,GAAG,EAAEgE,SAAS,EAAEpG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;UACzD,IAAI,EAAE,MAAMoB,UAAU,CAACgF,SAAS,EAAED,KAAK,CAAC5E,IAAI,CAAC,CAAC,EAAE;YAC5C,MAAMoD,EAAE,CAAC6B,UAAU,CAACJ,SAAS,CAAC,CAACnE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9C,MAAM,IAAIC,KAAK,CAAC,eAAe,CAAC;UACpC;UACA6D,UAAU,EAAE;QAChB;QACA,MAAMU,IAAI,GAAG,GAAG5B,UAAU,IAAIsB,KAAK,CAACjB,YAAY,EAAE;QAClD,MAAMM,SAAS,CAACiB,IAAI,CAACC,KAAK,CAAC,CAAC,EAAED,IAAI,CAACE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,MAAMhC,EAAE,CAACiC,QAAQ,CAACR,SAAS,EAAEK,IAAI,CAAC;MACtC,CAAC,CAAC,OAAOzD,CAAC,EAAE;QACR,IAAIQ,OAAO,EAAE;UACTC,OAAO,CAACC,IAAI,CAAC,mBAAmByC,KAAK,CAACjB,YAAY,UAAU,EAAElC,CAAC,CAAC;QACpE;QACAgD,MAAM,EAAE,CAAC,CAAC;MACd;MACAF,SAAS,EAAE;MACXxD,UAAU,CAACE,IAAI,CAACqE,KAAK,CAAEf,SAAS,GAAGhB,MAAM,CAACM,MAAM,GAAI,GAAG,CAAC,CAAC;IAC7D;EACJ,CAAC;;EAED;EACA,MAAMzB,OAAO,CAACmD,GAAG,CAACC,KAAK,CAACC,IAAI,CAAC;IAAE5B,MAAM,EAAE5C,IAAI,CAACU,GAAG,CAAC,CAAC,EAAE4B,MAAM,CAACM,MAAM;EAAE,CAAC,EAAEc,MAAM,CAAC,CAAC;EAE7E,IAAIF,MAAM,GAAG,CAAC,EAAE;IACZ,MAAM,IAAI9D,KAAK,CAAC,GAAG8D,MAAM,8BAA8B,CAAC;EAC5D;EACAvB,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACgI,gBAAgB,EAAE;IAChC1C,OAAO;IACPW,OAAO,EAAE,WAAWL,MAAM,CAACM,MAAM,YAAYW,UAAU;EAC3D,CAAC,CAAC;EACFrB,QAAQ,CAAC7E,SAAS,CAAC+E,cAAc,EAAE,kBAAkBmB,UAAU,OAAO,CAAC;AAC3E,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,iBAAiB,GAAGA,CAAC9E,IAAY,EAAE0D,GAAW,KACvD,GAAGhB,eAAe,IAAI1C,IAAI,IAAI0D,GAAG,EAAE;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMkC,iBAAiB,GAAGA,CAACC,KAAe,EAAEC,MAAc,KAC7D,GAAGA,MAAM,cAAcD,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACG,EAAE,QAAQ;;AAE/D;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAGA,CACxBC,SAAqB,EACrBC,MAAc,EACdC,OAAe,KACQ;EACvB,MAAMC,SAAS,GAAGH,SAAS,CAACzC,MAAM,CAACb,CAAC,IAAIA,CAAC,CAAC0D,SAAS,KAAKF,OAAO,CAAC;EAChE,OACIC,SAAS,CAACE,IAAI,CAAC3D,CAAC,IAAIA,CAAC,CAAC4D,QAAQ,IAAI5D,CAAC,CAAC6D,WAAW,KAAKN,MAAM,CAAC,IAC3DE,SAAS,CAACE,IAAI,CAAC3D,CAAC,IAAI,CAACA,CAAC,CAAC4D,QAAQ,CAAC;AAExC,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,cAAc,GAAG,KAAK;;AAE1B;AACA,OAAO,MAAMC,qBAA+C,GAAG,MAAAA,CAAO,GAAGC,IAAI,KAAK;EAC9E,IAAIF,cAAc,EAAE;IAChB,MAAM,IAAI/F,KAAK,CAAC,2CAA2C,CAAC;EAChE;EACA+F,cAAc,GAAG,IAAI;EACrB,IAAI;IACA,OAAO,MAAMG,iBAAiB,CAAC,GAAGD,IAAI,CAAC;EAC3C,CAAC,SAAS;IACNF,cAAc,GAAG,KAAK;EAC1B;AACJ,CAAC;AAED,MAAMG,iBAAiB,GAAG,MAAAA,CACtBhB,KAAe,EACfpH,MAAiB,EACjB0E,QAIS,EACTpC,UAAqC,EACrC+F,OAAiC,GAAG;EAAEC,UAAU,EAAE;AAAK,CAAC,KACvD;EACD,IAAI9E,OAAO,IAAIxD,MAAM,CAACuI,iBAAiB,KAAK,IAAI,EAAE;IAC9C7D,QAAQ,CACJ7E,SAAS,CAAC2I,UAAU,EACpB,uDACJ,CAAC;IACD,MAAM,IAAItG,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,MAAMuC,GAAG,GAAGxF,eAAe,CAACe,MAAM,CAACyI,OAAO,CAAC;EAC3C,MAAMpJ,YAAY,CAAC,CAAC;EACpB,MAAMqJ,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC7B,MAAMjE,EAAE,GAAG3F,aAAa;EAExB,MAAM6J,eAAe,GACjBtJ,aAAa,CAAC6H,KAAK,CAACS,SAAS,EAAE7H,MAAM,CAAC8I,cAAc,CAAC,IAAI,EAAE;EAC/D,MAAMC,UAAU,GAAG,GAAGF,eAAe,MAAM;EAC3C,MAAMhE,UAAU,GAAG,GAAGvF,OAAO,KAAK8H,KAAK,CAACS,SAAS,EAAE;EACnD,MAAMmB,cAAc,GAAG7B,iBAAiB,CAACC,KAAK,EAAEhI,YAAY,CAAC;;EAE7D;EACA;EACA,IAAIgI,KAAK,CAAC6B,aAAa,EAAE;IACrB,IAAIC,aAAa,GAAGlJ,MAAM,CAACsH,UAAU;IACrC,IAAI,CAAC4B,aAAa,EAAE;MAChBA,aAAa,GAAG,MAAMlK,aAAa,CAACmK,aAAa,CAAC,CAAC,CAAClH,KAAK,CAAC,MAAMmH,SAAS,CAAC;IAC9E;IACA,IAAI,CAACF,aAAa,EAAE;MAChB,MAAM,IAAIhH,KAAK,CACX,oFACJ,CAAC;IACL;IACA,IAAI,CAACzB,SAAS,CAACyI,aAAa,EAAE9B,KAAK,CAAC6B,aAAa,CAAC,EAAE;MAChDxE,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACmK,oBAAoB,EAAE;QACpClE,OAAO,EAAE,OAAO+D,aAAa,eAAe9B,KAAK,CAAC6B,aAAa,EAAE;QACjEzE,OAAO,EAAE4C,KAAK,CAACS;MACnB,CAAC,CAAC;MACF,MAAM,IAAI3F,KAAK,CACX,cAAcgH,aAAa,0BAA0B9B,KAAK,CAAC6B,aAAa,UAC5E,CAAC;IACL;EACJ;EAEA,MAAMtE,EAAE,CAACiB,KAAK,CAACf,UAAU,CAAC;EAE1B,MAAMyE,QAAQ,GAAG,MAAAA,CAAOC,UAAkB,EAAE9C,IAAY,KAAK;IACzDhC,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACsK,cAAc,EAAE;MAAEhF,OAAO,EAAE4C,KAAK,CAACS;IAAU,CAAC,CAAC;IAC/D,MAAM4B,OAAO,GAAGd,IAAI,CAACC,GAAG,CAAC,CAAC;IAC1B,IAAIc,SAAiB;IACrB,IAAI;MACA,MAAMtH,GAAG,GAAG,MAAMrC,UAAU,CAACC,MAAM,CAAC,CAAC2J,gBAAgB,CAACJ,UAAU,EAAEvJ,MAAM,CAAC;MACzE0J,SAAS,GAAG,MAAMvH,iBAAiB,CAACC,GAAG,EAAEqE,IAAI,EAAEzG,MAAM,EAAEsC,UAAU,CAAC;IACtE,CAAC,CAAC,OAAOsH,OAAO,EAAE;MACdnF,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAAC2K,aAAa,EAAE;QAC7BC,KAAK,EAAGF,OAAO,CAAWzE,OAAO;QACjCX,OAAO,EAAE4C,KAAK,CAACS;MACnB,CAAC,CAAC;MACF,MAAM+B,OAAO;IACjB;IACA,MAAMG,UAAU,GAAGpB,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGa,OAAO;IACvChF,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACgI,gBAAgB,EAAE;MAChC1C,OAAO,EAAE4C,KAAK,CAACS,SAAS;MACxBmC,UAAU,EAAED,UAAU;MACtBE,MAAM,EAAEP,SAAS,GAAG;IACxB,CAAC,CAAC;IACF,OAAO;MAAEK,UAAU;MAAEL;IAAU,CAAC;EACpC,CAAC;EAED,MAAMQ,UAAU,GAAG,MAAAA,CAAO7I,IAAY,EAAE8I,QAA4B,EAAEtI,IAAY,KAAK;IACnF,IAAI,CAACsI,QAAQ,KAAK,MAAM/I,UAAU,CAACC,IAAI,EAAE8I,QAAQ,CAAC,CAAC,EAAE;IACrD,MAAMC,MAAM,GAAG,MAAMzF,EAAE,CAACnD,QAAQ,CAACH,IAAI,CAAC,CAACY,KAAK,CAAC,MAAM,EAAE,CAAC;IACtDwC,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACmL,aAAa,EAAE;MAC7BlF,OAAO,EAAE,GAAGtD,IAAI,gBAAgB;MAChC2C,OAAO,EAAE4C,KAAK,CAACS,SAAS;MACxByC,QAAQ,EAAE;QAAEH,QAAQ;QAAEC,MAAM;QAAE/I;MAAK;IACvC,CAAC,CAAC;IACF,MAAM,IAAIa,KAAK,CAAC,GAAGL,IAAI,gBAAgB,CAAC;EAC5C,CAAC;;EAED;EACA,MAAM0I,MAAM,GAAG,MAAOC,OAAkD,IAAK;IACzE,IAAIpD,KAAK,CAAC7C,gBAAgB,EAAE;MACxB,MAAMkG,WAAW,GAAG,MAAM1K,UAAU,CAACC,MAAM,CAAC,CAAC2J,gBAAgB,CACzDvC,KAAK,CAAC7C,gBAAgB,EACtBvE,MACJ,CAAC;MACD,MAAMsE,qBAAqB,CACvBmG,WAAW,EACXrD,KAAK,CAACS,SAAS,EACf7H,MAAM,EACNyE,GAAG,EACHC,QAAQ,EACRpC,UACJ,CAAC;IACL;IAEA,MAAMqC,EAAE,CAAC+F,QAAQ,CAAC3B,UAAU,EAAEF,eAAe,CAAC;;IAE9C;IACA,MAAM8B,gBAAgB,GAAG,MAAM3L,aAAa,CAACmK,aAAa,CAAC,CAAC,CAAClH,KAAK,CAAC,MAAMjC,MAAM,CAACsH,UAAU,CAAC;IAC3F,MAAM5H,cAAc,CAACM,MAAM,CAAC8I,cAAc,EAAEwB,QAAQ,IAChD7K,kBAAkB,CAAC6K,QAAQ,EAAElD,KAAK,CAACS,SAAS,EAAE8C,gBAAgB,CAClE,CAAC;IAED,MAAMC,OAAO,GAAGjC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,UAAU;IACvCjE,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAAC2L,aAAa,EAAE;MAC7BrG,OAAO,EAAE4C,KAAK,CAACS,SAAS;MACxBmC,UAAU,EAAEY,OAAO;MACnBX,MAAM,EAAEO,OAAO,CAACM;IACpB,CAAC,CAAC;IACFpG,QAAQ,CAAC7E,SAAS,CAACkL,OAAO,EAAE,WAAW3D,KAAK,CAACS,SAAS,cAAc,EAAE;MAClE,GAAG2C,OAAO;MACVI,OAAO;MACPI,SAAS,EAAE;IACf,CAAC,CAAC;;IAEF;IACA;IACA,IAAI3C,OAAO,CAACC,UAAU,KAAK,KAAK,EAAE;MAC9BtJ,aAAa,CAACiM,YAAY,CAAC,CAAC;IAChC,CAAC,MAAM,IAAIzH,OAAO,EAAE;MAChBC,OAAO,CAACgB,GAAG,CACP,cAAc2C,KAAK,CAACS,SAAS,mDACjC,CAAC;IACL;EACJ,CAAC;EAED,MAAMqD,cAAc,GAAG,MAAOC,UAAkB,IAAK;IACjDzG,QAAQ,CAAC7E,SAAS,CAACuL,WAAW,EAAE,gBAAgBhE,KAAK,CAACS,SAAS,KAAK,CAAC;IACrE,MAAM;MAAEkC,UAAU;MAAEL;IAAU,CAAC,GAAG,MAAMJ,QAAQ,CAAClC,KAAK,CAACW,QAAQ,EAAGiB,cAAc,CAAC;;IAEjF;IACAtE,QAAQ,CAAC7E,SAAS,CAACwL,QAAQ,EAAE,cAAc,CAAC;IAC5C,IAAI;MACA,MAAM3J,YAAY,CAACsH,cAAc,EAAE5B,KAAK,CAACxF,SAAS,EAAE5B,MAAM,EAAE,OAAO,CAAC;IACxE,CAAC,CAAC,OAAOsL,QAAQ,EAAE;MACf7G,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACqM,iBAAiB,EAAE;QAAE/G,OAAO,EAAE4C,KAAK,CAACS;MAAU,CAAC,CAAC;MAClE,MAAMyD,QAAQ;IAClB;IACA,MAAMpB,UAAU,CAACiB,UAAU,EAAE/D,KAAK,CAACoE,QAAQ,EAAE,eAAe,CAAC;IAE7D/G,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACuM,WAAW,EAAE;MAAEjH,OAAO,EAAE4C,KAAK,CAACS;IAAU,CAAC,CAAC;IAC5DnD,QAAQ,CAAC7E,SAAS,CAACwL,QAAQ,EAAE,0BAA0B,CAAC;IACxD,MAAMK,UAAU,GAAG/C,IAAI,CAACC,GAAG,CAAC,CAAC;IAC7B,MAAM+C,OAAO,GAAG,MAAM3M,aAAa,CAAC4M,UAAU,CAACT,UAAU,EAAEpC,UAAU,EAAEC,cAAc,CAAC;IACtF,MAAM6C,OAAO,GAAGlD,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG8C,UAAU;IACvC,MAAM/G,EAAE,CAAC6B,UAAU,CAACwC,cAAc,CAAC,CAAC/G,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC0J,OAAO,EAAE;MACVlH,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAAC4M,UAAU,EAAE;QAC1B3G,OAAO,EAAE,wBAAwB;QACjCX,OAAO,EAAE4C,KAAK,CAACS;MACnB,CAAC,CAAC;MACF,MAAM,IAAI3F,KAAK,CAAC,4BAA4B,CAAC;IACjD;IAEA,MAAMgI,UAAU,CAACnB,UAAU,EAAE3B,KAAK,CAAC2E,UAAU,EAAE,eAAe,CAAC;IAC/D,MAAMrK,YAAY,CAACqH,UAAU,EAAE3B,KAAK,CAAC4E,eAAe,EAAEhM,MAAM,EAAE,QAAQ,CAAC;IACvE,MAAMuK,MAAM,CAAC;MAAEO,WAAW,EAAEpB,SAAS,GAAG,IAAI;MAAEK,UAAU;MAAE8B;IAAQ,CAAC,CAAC;EACxE,CAAC;EAED,MAAMI,iBAAiB,GAAG,MAAAA,CAAA,KAAY;IAClC,IAAI,CAAC7E,KAAK,CAAC8E,aAAa,EAAE;MACtB,MAAM,IAAIhK,KAAK,CAAC,uBAAuBkF,KAAK,CAACS,SAAS,EAAE,CAAC;IAC7D;IACApD,GAAG,CAACwC,IAAI,CAAC/H,QAAQ,CAACiN,oBAAoB,EAAE;MAAE3H,OAAO,EAAE4C,KAAK,CAACS;IAAU,CAAC,CAAC;IACrEnD,QAAQ,CAAC7E,SAAS,CAACuL,WAAW,EAAE,gBAAgBhE,KAAK,CAACS,SAAS,mBAAmB,CAAC;IACnF,MAAM;MAAEkC,UAAU;MAAEL;IAAU,CAAC,GAAG,MAAMJ,QAAQ,CAAClC,KAAK,CAAC8E,aAAa,EAAEnD,UAAU,CAAC;IACjF,MAAMmB,UAAU,CAACnB,UAAU,EAAE3B,KAAK,CAAC2E,UAAU,EAAE,aAAa,CAAC;IAC7D,MAAMrK,YAAY,CAACqH,UAAU,EAAE3B,KAAK,CAAC4E,eAAe,EAAEhM,MAAM,EAAE,aAAa,CAAC;IAC5E,MAAMuK,MAAM,CAAC;MAAEO,WAAW,EAAEpB,SAAS,GAAG,IAAI;MAAEK,UAAU;MAAE8B,OAAO,EAAE;IAAE,CAAC,CAAC;EAC3E,CAAC;EAED,MAAMO,OAAO,GAAG,MAAAA,CAAA,KAAY;IACxB,MAAMzH,EAAE,CAAC6B,UAAU,CAACwC,cAAc,CAAC,CAAC/G,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM0C,EAAE,CAAC6B,UAAU,CAACuC,UAAU,CAAC,CAAC9G,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACnD,CAAC;;EAED;EACA,MAAMqI,QAAQ,GAAG,MAAM9K,YAAY,CAACQ,MAAM,CAAC8I,cAAc,CAAC;EAC1D,MAAMqC,UAAU,GAAG5L,aAAa,CAAC+K,QAAQ,CAAC+B,cAAc,EAAErM,MAAM,CAAC8I,cAAc,CAAC;EAChF,MAAMwD,QAAQ,GACV,CAAC,CAAClF,KAAK,CAACW,QAAQ,IAChBX,KAAK,CAACY,WAAW,KAAKsC,QAAQ,CAAC+B,cAAc,IAC7C,CAAC,CAAClB,UAAU,KACX,MAAMxG,EAAE,CAAC2B,MAAM,CAAC6E,UAAU,CAAC,CAAC;EAEjC,IAAImB,QAAQ,EAAE;IACV,IAAI;MACA,MAAMpB,cAAc,CAACC,UAAW,CAAC;MACjC;IACJ,CAAC,CAAC,OAAOrB,KAAK,EAAE;MACZ,MAAMsC,OAAO,CAAC,CAAC;MACf,IAAI5I,OAAO,EAAE;QACTC,OAAO,CAACC,IAAI,CAAC,sDAAsD,EAAEoG,KAAK,CAAC;MAC/E;MACA,IAAI,CAAC1C,KAAK,CAAC8E,aAAa,EAAE;QACtBxH,QAAQ,CAAC7E,SAAS,CAAC0M,KAAK,EAAE,UAAWzC,KAAK,CAAW3E,OAAO,EAAE,CAAC;QAC/D,MAAM2E,KAAK;MACf;IACJ;EACJ;EAEA,IAAI;IACA,MAAMmC,iBAAiB,CAAC,CAAC;EAC7B,CAAC,CAAC,OAAOnC,KAAK,EAAE;IACZ,MAAMsC,OAAO,CAAC,CAAC;IACf1H,QAAQ,CAAC7E,SAAS,CAAC0M,KAAK,EAAE,UAAWzC,KAAK,CAAW3E,OAAO,EAAE,CAAC;IAC/D,MAAM2E,KAAK;EACf;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Platform","NativeBsPatch","entryPayload","parsePublicKeys","createOtaLogger","OtaEvent","ASSET_LIST_FILE","DOCUMENT_DIR","ensureOtaDir","OTA_DIR","getBundlePath","loadMetadata","registerNewVersion","updateMetadata","normalizeChannel","R2StorageProvider","OtaStatus","DEFAULT_STORAGE","getStorage","config","storage","validateOtaConfig","baseUrl","channel","customServer","test","JSON","stringify","semverGte","a","b","pa","split","map","Number","pb","i","va","vb","verifyHash","path","expectedHash","hash","hashFile","toLowerCase","assertSigned","filePath","signature","what","keys","publicKey","length","valid","key","verifySignature","catch","Error","assertEntrySigned","patch","mismatch","appVersion","platform","OS","flavor","assetManifestUrl","assetManifestHash","payloadPath","writeFile","entrySignature","removePath","downloadWithRetry","url","destPath","onProgress","retryLimit","Math","max","network","retry","timeout","timeoutMs","headers","subscription","onDownloadProgress","e","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","SYNCING_ASSETS","versionDir","assets","manifestPath","manifest","parse","readFile","filter","ext","originalPath","message","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","DOWNLOAD_SUCCESS","getLocalPatchPath","docDir","id","selectUpdate","patchList","localV","targetV","forTarget","toVersion","find","filename","fromVersion","updateInFlight","applyOtaPatchInternal","args","runUpdatePipeline","options","autoReload","allowDebugUpdates","UP_TO_DATE","onEvent","error","SIGNATURE_INVALID","ERROR","totalStart","Date","now","finalBundlePath","baseAppVersion","tempBundle","tempDownload","localPatchPath","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","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","currentVersion","canPatch"],"sourceRoot":"../../../src","sources":["ota/otaCore.ts"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  /**
4
- * Storage Provider for any static host with this layout: GitHub raw, a public
5
- * Cloudflare R2 bucket (r2.dev or custom domain), S3, a CDN...
4
+ * Storage Provider for the public URL of a Cloudflare R2 bucket (r2.dev or a custom
5
+ * domain): plain HTTP GETs, so any static host serving the same layout also works.
6
6
  *
7
7
  * Direct URL mapping:
8
8
  * - Manifest: `${baseUrl}/${baseFolder}/ota_registry.json`
@@ -10,22 +10,25 @@
10
10
  * - Assets: `${baseUrl}/${baseFolder}/assets/${hash}.${ext}`
11
11
  *
12
12
  * NOTE: Only the registry is mutable: it is fetched with Cache-Control: no-cache
13
- * and a timestamp query param (GitHub's CDN caches for 5 minutes). Bundles,
13
+ * and a timestamp query param (the CDN in front of the bucket may cache it). Bundles,
14
14
  * patches, manifests and assets are never overwritten, so they stay cacheable.
15
15
  */
16
16
 
17
- /** Headers to bypass GitHub CDN cache on mutable files (registry, manifests) */
17
+ /** Headers to bypass the CDN cache on mutable files (registry, manifests) */
18
18
  const NO_CACHE_HEADERS = {
19
19
  'Cache-Control': 'no-cache'
20
20
  };
21
21
 
22
22
  /** GET + JSON.parse with a timeout (fetch has none of its own); rejects on non-2xx. */
23
- export const fetchJson = async (url, timeoutMs) => {
23
+ export const fetchJson = async (url, timeoutMs, headers) => {
24
24
  const controller = new AbortController();
25
25
  const timer = setTimeout(() => controller.abort(), timeoutMs);
26
26
  try {
27
27
  const res = await fetch(url, {
28
- headers: NO_CACHE_HEADERS,
28
+ headers: {
29
+ ...NO_CACHE_HEADERS,
30
+ ...headers
31
+ },
29
32
  signal: controller.signal
30
33
  });
31
34
  if (!res.ok) {
@@ -39,37 +42,38 @@ export const fetchJson = async (url, timeoutMs) => {
39
42
 
40
43
  /** Append a timestamp query param to defeat CDN caches on mutable URLs */
41
44
  const bustCache = url => `${url}?cb=${Date.now()}`;
42
- const normalizeChannel = channel => {
45
+ export const normalizeChannel = channel => {
43
46
  const lower = channel.toLowerCase();
44
47
  if (lower === 'dev') return 'development';
45
48
  if (lower === 'prod') return 'production';
46
49
  return lower;
47
50
  };
48
- export class GitHubRawStorageProvider {
51
+ export class R2StorageProvider {
49
52
  async fetchManifest(config) {
50
53
  if (!config.customServer) {
51
- throw new Error('[GitHubRawStorage] customServer configuration missing');
54
+ throw new Error('[R2Storage] customServer configuration missing');
52
55
  }
53
56
  const {
54
57
  baseUrl,
55
58
  channel,
56
- baseFolder = 'ota'
59
+ baseFolder = 'ota',
60
+ headers
57
61
  } = config.customServer;
58
62
  const channelName = normalizeChannel(channel);
59
63
  const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
60
64
  // Cache-bust: registry is mutable; must always fetch the latest version
61
65
  const registryUrl = bustCache(`${normalizedBaseUrl}/${baseFolder}/ota_registry.json`);
62
66
  try {
63
- const registry = await fetchJson(registryUrl, 15000);
67
+ const registry = await fetchJson(registryUrl, 15000, headers);
64
68
  if (!config.appVersion) {
65
- throw new Error('[GitHubRawStorage] config.appVersion is required to query OTA registry');
69
+ throw new Error('[R2Storage] config.appVersion is required to query OTA registry');
66
70
  }
67
71
  const appGroup = registry?.apps?.[config.appVersion];
68
72
  const flavorGroup = appGroup?.flavors?.[channelName];
69
73
  return flavorGroup?.patches ?? [];
70
74
  } catch (error) {
71
75
  // Surface it: "no patches" would report a broken registry as up to date
72
- throw new Error(`[GitHubRawStorage] Manifest fetch error: ${error.message}`);
76
+ throw new Error(`[R2Storage] Manifest fetch error: ${error.message}`);
73
77
  }
74
78
  }
75
79
  async getUpdateFileUrl(filename, config) {
@@ -99,4 +103,4 @@ export class GitHubRawStorageProvider {
99
103
  return `${normalizedBaseUrl}/${baseFolder}/assets/${hash}.${ext}`;
100
104
  }
101
105
  }
102
- //# sourceMappingURL=GitHubRawStorage.js.map
106
+ //# 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","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","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;;AAwCzB;AACA;AACA;;AA6EA,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;;AAgEzB;AACA;AACA;;AA4FA,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":[]}
@@ -3,7 +3,7 @@ export type DownloadProgress = {
3
3
  /** destPath passed to downloadFile */
4
4
  path: string;
5
5
  received: number;
6
- /** -1 when the server sends no Content-Length */
6
+ /** -1 when unknown: no Content-Length, or a Content-Encoding (received counts decoded bytes) */
7
7
  total: number;
8
8
  };
9
9
  export interface Spec extends TurboModule {
@@ -40,13 +40,39 @@ export interface Spec extends TurboModule {
40
40
  getAppVersion(): Promise<string>;
41
41
  /** Directory the native resolver reads `ota/` from (filesDir on Android, Documents on iOS) */
42
42
  getDocumentDir(): string;
43
+ /**
44
+ * Public keys the CLI embedded in the app, comma-separated base64 SPKI (primary first,
45
+ * then the offline backup): Info.plist `BsPatchPublicKey` / Android string
46
+ * `bspatch_public_key`. '' when none.
47
+ */
48
+ getEmbeddedPublicKeys(): string;
49
+ /** Build number: versionCode (Android) / CFBundleVersion (iOS) */
50
+ getAppBuild(): string;
51
+ /**
52
+ * Native runtime fingerprint stamped into this binary at build time (Info.plist
53
+ * `BsPatchRuntimeFingerprint` / Android resValue `bspatch_runtime_fingerprint`);
54
+ * '' when the build hook didn't run. An OTA only installs on a matching binary.
55
+ */
56
+ getRuntimeFingerprint(): string;
57
+ /** Free bytes on the volume holding getDocumentDir() */
58
+ getFreeDiskSpace(): Promise<number>;
59
+ /** Current connection: 'wifi' | 'cellular' | 'ethernet' | 'none' | 'unknown' */
60
+ getNetworkType(): Promise<string>;
61
+ /**
62
+ * Decompresses srcPath into destPath (replacing it). format: 'gzip' | 'bz2'.
63
+ * Rejects on unknown format or corrupt input; destPath is removed on failure.
64
+ */
65
+ decompressFile(srcPath: string, destPath: string, format: string): Promise<void>;
43
66
  /**
44
67
  * Streams `url` to `destPath` (via `destPath.part`, renamed only on a 2xx response,
45
68
  * replacing any existing file). Rejects on network error or non-2xx status.
69
+ * A failed download of the same destPath is resumed (HTTP Range) on the next call
70
+ * when the server supports it; otherwise it restarts from zero.
46
71
  * @param timeoutMs Idle timeout: no bytes for this long fails the download
72
+ * @param headersJson Extra request headers as a JSON object string ('{}' for none)
47
73
  * @returns Size of the downloaded file in bytes
48
74
  */
49
- downloadFile(url: string, destPath: string, timeoutMs: number): Promise<number>;
75
+ downloadFile(url: string, destPath: string, timeoutMs: number, headersJson: string): Promise<number>;
50
76
  /** Lowercase hex SHA-256 of a file */
51
77
  hashFile(path: string): Promise<string>;
52
78
  exists(path: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,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;;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;IAIjC,8FAA8F;IAC9F,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhF,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,oDAAoD;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,iCAAiC;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;CAC1E;;AAED,wBAAiE"}
1
+ {"version":3,"file":"NativeBsPatch.d.ts","sourceRoot":"","sources":["../../src/NativeBsPatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,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;;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;IAIjC,8FAA8F;IAC9F,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC;IAEhC,kEAAkE;IAClE,WAAW,IAAI,MAAM,CAAC;IAEtB;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC;IAEhC,wDAAwD;IACxD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,gFAAgF;IAChF,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErG,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,oDAAoD;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,uEAAuE;IACvE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,iCAAiC;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;CAC1E;;AAED,wBAAiE"}
@@ -4,7 +4,9 @@ export declare function reloadBundle(): void;
4
4
  export * from './ota/otaLogger';
5
5
  export * from './ota/OtaProvider';
6
6
  export * from './ota/types';
7
- export { GitHubRawStorageProvider } from './ota/storage/GitHubRawStorage';
7
+ export { R2StorageProvider,
8
+ /** @deprecated Renamed to R2StorageProvider */
9
+ R2StorageProvider as GitHubRawStorageProvider, } from './ota/storage/R2Storage';
8
10
  declare const _default: {
9
11
  applyPatch: typeof applyPatch;
10
12
  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;AAE5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;;;;;;AAE1E,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;AAE5B,OAAO,EACL,iBAAiB;AACjB,+CAA+C;AAC/C,iBAAiB,IAAI,wBAAwB,GAC9C,MAAM,yBAAyB,CAAC;;;;;;AAEjC,wBAIE"}
@@ -1 +1 @@
1
- {"version":3,"file":"OtaProvider.d.ts","sourceRoot":"","sources":["../../../src/ota/OtaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAcf,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,qBAqaA;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;AAqBjB,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,qBA6eA;AAED,wBAAgB,MAAM,aAMrB"}
@@ -0,0 +1,19 @@
1
+ import type { OtaPatch } from './types';
2
+ /** Entry `requires` values this client understands */
3
+ export declare const SUPPORTED_FEATURES: string[];
4
+ export type EligibilityContext = {
5
+ /** Platform.OS */
6
+ platform: string;
7
+ /** Versions that crashed on boot here and were rolled back */
8
+ failedVersions: number[];
9
+ /** Fingerprint stamped into this binary ('' when the build hook didn't run) */
10
+ runtimeFingerprint: string;
11
+ /** Bytecode version of the running Hermes (undefined off Hermes) */
12
+ hermesBytecodeVersion?: number;
13
+ installId: string;
14
+ };
15
+ /** FNV-1a: stable 0-99 bucket for an install and version (a different slice of installs per version) */
16
+ export declare const rolloutBucket: (installId: string, version: number) => number;
17
+ /** Why this client must not install the entry, or null when it may */
18
+ export declare const ineligibleReason: (e: OtaPatch, ctx: EligibilityContext) => string | null;
19
+ //# sourceMappingURL=eligibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.d.ts","sourceRoot":"","sources":["../../../src/ota/eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,UAAkB,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+EAA+E;IAC/E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,MAOlE,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,GAAI,GAAG,QAAQ,EAAE,KAAK,kBAAkB,KAAG,MAAM,GAAG,IAmBhF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { OtaPatch } from './types';
2
+ /**
3
+ * What `entrySignature` signs: the fields that decide which bundle a client installs.
4
+ * Must stay byte-for-byte equal to entryPayload in tools/update_registry.js.
5
+ */
6
+ export declare const entryPayload: (p: OtaPatch) => string;
7
+ /** Public keys from config or the embedded list: PEM blocks, or base64 SPKI separated by commas/whitespace */
8
+ export declare const parsePublicKeys: (keys: string | undefined) => string[];
9
+ //# sourceMappingURL=entrySignature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrySignature.d.ts","sourceRoot":"","sources":["../../../src/ota/entrySignature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,QAAQ,KAAG,MAa3B,CAAC;AAEjB,8GAA8G;AAC9G,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,MAAM,EAQhE,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Random ID made on first use and kept for the life of the install (rollout bucket, QA lists, telemetry) */
2
+ export declare const getInstallId: () => Promise<string>;
3
+ //# sourceMappingURL=installId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installId.d.ts","sourceRoot":"","sources":["../../../src/ota/installId.ts"],"names":[],"mappings":"AAOA,6GAA6G;AAC7G,eAAO,MAAM,YAAY,QAAO,OAAO,CAAC,MAAM,CASrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"otaCore.d.ts","sourceRoot":"","sources":["../../../src/ota/otaCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,OAAO,EACH,SAAS,EAET,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EAEhB,MAAM,SAAS,CAAC;AAUjB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,KAAG,MAAM,GAAG,IAU9D,CAAC;AAIF;;;;;;;;;;;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;AA8DF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,OAAO,CAAC,QAAQ,EAAE,CAC3B,CAAC;AAmH7C;;;;;;;;;;;;;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;AAEhE;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACrB,WAAW,QAAQ,EAAE,EACrB,QAAQ,MAAM,EACd,SAAS,MAAM,KAChB,QAAQ,GAAG,SAMb,CAAC;AAkBF,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,kBAkN3D,CAAC"}
1
+ {"version":3,"file":"otaCore.d.ts","sourceRoot":"","sources":["../../../src/ota/otaCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,EACH,SAAS,EAET,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EAEhB,MAAM,SAAS,CAAC;AAUjB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,KAAG,MAAM,GAAG,IAU9D,CAAC;AAIF;;;;;;;;;;;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;AAoGF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,OAAO,CAAC,QAAQ,EAAE,CAC3B,CAAC;AA2H7C;;;;;;;;;;;;;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;AAEhE;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACrB,WAAW,QAAQ,EAAE,EACrB,QAAQ,MAAM,EACd,SAAS,MAAM,KAChB,QAAQ,GAAG,SAMb,CAAC;AAmBF,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,kBAkP3D,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import type { OtaConfig, OtaPatch, OtaStorageProvider } from '../types';
2
2
  /** GET + JSON.parse with a timeout (fetch has none of its own); rejects on non-2xx. */
3
- export declare const fetchJson: (url: string, timeoutMs: number) => Promise<any>;
4
- export declare class GitHubRawStorageProvider implements OtaStorageProvider {
3
+ export declare const fetchJson: (url: string, timeoutMs: number, headers?: Record<string, string>) => Promise<any>;
4
+ export declare const normalizeChannel: (channel: string) => string;
5
+ export declare class R2StorageProvider implements OtaStorageProvider {
5
6
  fetchManifest(config: OtaConfig): Promise<OtaPatch[]>;
6
7
  getUpdateFileUrl(filename: string, config: OtaConfig): Promise<string>;
7
8
  getAssetUrl(hash: string, ext: string, config: OtaConfig): Promise<string>;
8
9
  }
9
- //# sourceMappingURL=GitHubRawStorage.d.ts.map
10
+ //# sourceMappingURL=R2Storage.d.ts.map