react-native-bspatch 4.1.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +84 -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 +165 -35
  14. package/lib/commonjs/ota/OtaProvider.js.map +1 -1
  15. package/lib/commonjs/ota/eligibility.js +47 -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 +165 -35
  30. package/lib/module/ota/OtaProvider.js.map +1 -1
  31. package/lib/module/ota/eligibility.js +41 -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 +25 -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 +58 -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 +167 -42
  63. package/src/ota/eligibility.ts +57 -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 +55 -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
@@ -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":[]}
@@ -3,12 +3,30 @@
3
3
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { ActivityIndicator, AppState, Platform, StyleSheet, Text, View } from 'react-native';
5
5
  import NativeBsPatch from '../NativeBsPatch';
6
+ import { ineligibleReason } from './eligibility';
7
+ import { getInstallId } from './installId';
6
8
  import { applyOtaPatchInternal, fetchOtaManifest, selectUpdate, validateOtaConfig } from './otaCore';
7
9
  import { createOtaLogger, OtaEvent } from './otaLogger';
8
10
  import { DOCUMENT_DIR, loadMetadata, markHealthy, OTA_DIR } from './otaMetadata';
9
11
  import { OtaStatus, OtaUpdateMode } from './types';
10
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
13
  const OtaContext = /*#__PURE__*/createContext(undefined);
14
+ const DEFAULT_MIN_CHECK_INTERVAL_MS = 10 * 60 * 1000;
15
+
16
+ /** Sync native getter, '' if it throws */
17
+ const nativeString = get => {
18
+ try {
19
+ return get() ?? '';
20
+ } catch {
21
+ return '';
22
+ }
23
+ };
24
+
25
+ /** Bytecode version the running Hermes reads (undefined off Hermes) */
26
+ const hermesBytecodeVersion = () => {
27
+ const v = globalThis.HermesInternal?.getRuntimeProperties?.()?.['Bytecode Version'];
28
+ return v ? Number(v) : undefined;
29
+ };
12
30
  export function OtaProvider({
13
31
  children,
14
32
  config,
@@ -26,12 +44,17 @@ export function OtaProvider({
26
44
  const [patches, setPatches] = useState([]);
27
45
  const [isInitialized, setIsInitialized] = useState(false);
28
46
  const [isUpdateReady, setIsUpdateReady] = useState(false);
47
+ const [isMandatory, setIsMandatory] = useState(false);
48
+ const [installId, setInstallId] = useState('');
29
49
  const appState = useRef(AppState.currentState);
30
50
  const isCheckingRef = useRef(false);
31
51
  const bootstrapDone = useRef(false);
32
52
  /** Version the native resolver loaded for this JS session */
33
53
  const runningVersionRef = useRef(config.baseAppVersion);
34
54
  const progressRef = useRef(0);
55
+ const lastCheckRef = useRef(0);
56
+ const appVersionRef = useRef(config.appVersion ?? '');
57
+ const installIdRef = useRef('');
35
58
  const isDebugUpdateEnabled = !__DEV__ || config.allowDebugUpdates === true;
36
59
 
37
60
  // No fallbacks: a missing env value disables OTA instead of silently pointing elsewhere.
@@ -50,36 +73,68 @@ export function OtaProvider({
50
73
  progressRef.current = nextProgress;
51
74
  setProgress(nextProgress);
52
75
  }, []);
76
+
77
+ /** config.onEvent, plus a fire-and-forget POST to config.telemetry.url */
78
+ const onEvent = useCallback(entry => {
79
+ config.onEvent?.(entry);
80
+ const telemetry = config.telemetry;
81
+ if (!telemetry) return;
82
+ fetch(telemetry.url, {
83
+ method: 'POST',
84
+ headers: {
85
+ 'Content-Type': 'application/json',
86
+ ...telemetry.headers
87
+ },
88
+ body: JSON.stringify({
89
+ ...entry,
90
+ installId: installIdRef.current,
91
+ platform: Platform.OS,
92
+ appVersion: appVersionRef.current,
93
+ appBuild: nativeString(() => NativeBsPatch.getAppBuild()),
94
+ runtimeFingerprint: nativeString(() => NativeBsPatch.getRuntimeFingerprint()),
95
+ flavor: config.customServer?.channel,
96
+ otaVersion: runningVersionRef.current
97
+ })
98
+ }).catch(() => {});
99
+ }, [config]);
53
100
  const getEffectiveConfig = useCallback(async () => {
54
- if (config.appVersion) return config;
101
+ // The keys `patch` embedded in the app (primary + backup), unless the app passes its own
102
+ const publicKey = config.publicKey || nativeString(() => NativeBsPatch.getEmbeddedPublicKeys()) || undefined;
103
+ const base = {
104
+ ...config,
105
+ publicKey,
106
+ onEvent
107
+ };
108
+ if (config.appVersion) return base;
55
109
  try {
56
110
  const nativeVer = await NativeBsPatch.getAppVersion();
57
111
  if (!nativeVer) {
58
112
  throw new Error('Native appVersion is empty');
59
113
  }
114
+ appVersionRef.current = nativeVer;
60
115
  return {
61
- ...config,
116
+ ...base,
62
117
  appVersion: nativeVer
63
118
  };
64
119
  } catch (e) {
65
120
  throw new Error(`[OtaProvider] Failed to auto-detect appVersion from native: ${e.message}. ` + `Please set versionName (Android) / CFBundleShortVersionString (iOS), or provide config.appVersion explicitly.`);
66
121
  }
67
- }, [config]);
122
+ }, [config, onEvent]);
68
123
 
69
- /**
70
- * Core apply update logic — separated so it can be mapped to button clicks
71
- * OR called automatically by checkUpdates()
72
- */
73
- const executeApplyUpdate = useCallback(async (patchList, currentVer, targetVer) => {
74
- const directPatch = selectUpdate(patchList, currentVer, targetVer);
75
- if (!directPatch) {
76
- if (__DEV__) {
77
- console.warn('[OtaProvider] No update entry found for', currentVer, '->', targetVer);
78
- }
79
- setStatus(OtaStatus.ERROR);
80
- setMessage('No upgrade path found.');
81
- return;
82
- }
124
+ /** What decides which registry entries this install may take */
125
+ const eligibilityContext = useCallback(async () => {
126
+ const metadata = await loadMetadata(config.baseAppVersion);
127
+ return {
128
+ platform: Platform.OS,
129
+ failedVersions: metadata.failedVersions ?? [],
130
+ runtimeFingerprint: nativeString(() => NativeBsPatch.getRuntimeFingerprint()),
131
+ hermesBytecodeVersion: hermesBytecodeVersion(),
132
+ installId: await getInstallId()
133
+ };
134
+ }, [config.baseAppVersion]);
135
+
136
+ /** Installs one registry entry in the foreground (status + progress), then reloads */
137
+ const installEntry = useCallback(async directPatch => {
83
138
  try {
84
139
  const effectiveConfig = await getEffectiveConfig();
85
140
  setStatus(OtaStatus.DOWNLOADING);
@@ -101,6 +156,45 @@ export function OtaProvider({
101
156
  }
102
157
  }, [getEffectiveConfig, setProgressIfChanged]);
103
158
 
159
+ /**
160
+ * Core apply update logic — separated so it can be mapped to button clicks
161
+ * OR called automatically by checkUpdates()
162
+ */
163
+ const executeApplyUpdate = useCallback(async (patchList, currentVer, targetVer) => {
164
+ const directPatch = selectUpdate(patchList, currentVer, targetVer);
165
+ if (!directPatch) {
166
+ if (__DEV__) {
167
+ console.warn('[OtaProvider] No update entry found for', currentVer, '->', targetVer);
168
+ }
169
+ setStatus(OtaStatus.ERROR);
170
+ setMessage('No upgrade path found.');
171
+ return;
172
+ }
173
+ await installEntry(directPatch);
174
+ }, [installEntry]);
175
+
176
+ /**
177
+ * Installs exactly this registry entry (a version list in a debug/QA screen): the patch
178
+ * when it starts from the running version, else its full bundle. Ignores the kill switch,
179
+ * rollout and QA list; still refuses what would break the app (native code, Hermes, …).
180
+ */
181
+ const applyEntry = useCallback(async entry => {
182
+ if (!isDebugUpdateEnabled) {
183
+ setStatus(OtaStatus.UP_TO_DATE);
184
+ setMessage('OTA updates are disabled while running a debug build.');
185
+ return;
186
+ }
187
+ const reason = ineligibleReason(entry, await eligibilityContext(), {
188
+ ignoreControls: true
189
+ });
190
+ if (reason) {
191
+ setStatus(OtaStatus.ERROR);
192
+ setMessage(`Can't install V${entry.toVersion}: ${reason}`);
193
+ return;
194
+ }
195
+ await installEntry(entry);
196
+ }, [eligibilityContext, installEntry, isDebugUpdateEnabled]);
197
+
104
198
  /**
105
199
  * Exposed method for manual trigger
106
200
  */
@@ -125,6 +219,12 @@ export function OtaProvider({
125
219
  setStatus(OtaStatus.UP_TO_DATE);
126
220
  setMessage(`Update V${targetV} ready for next launch`);
127
221
  if (m) setMetrics(m);
222
+ if (directPatch.mandatory) {
223
+ setIsMandatory(true);
224
+ // Only in the foreground: a reload in the background is rolled back (see the
225
+ // AppState effect); the effect reloads once the app comes back
226
+ if (AppState.currentState === 'active') NativeBsPatch.reloadBundle();
227
+ }
128
228
  }
129
229
  }, () => {},
130
230
  // silent: background doesn't spam progress
@@ -142,8 +242,9 @@ export function OtaProvider({
142
242
  /**
143
243
  * Check for updates from the manifest.
144
244
  * Uses a ref to guard against concurrent calls (avoids stale closure).
245
+ * Automatic calls are throttled by minCheckIntervalMs; { force: true } always checks.
145
246
  */
146
- const checkUpdates = useCallback(async () => {
247
+ const checkUpdates = useCallback(async options => {
147
248
  if (isCheckingRef.current || configError) return;
148
249
  if (!isDebugUpdateEnabled) {
149
250
  setPendingCount(0);
@@ -152,6 +253,9 @@ export function OtaProvider({
152
253
  setMessage('OTA updates are disabled while running a debug build.');
153
254
  return;
154
255
  }
256
+ const minInterval = config.minCheckIntervalMs ?? DEFAULT_MIN_CHECK_INTERVAL_MS;
257
+ if (!options?.force && Date.now() - lastCheckRef.current < minInterval) return;
258
+ lastCheckRef.current = Date.now();
155
259
  isCheckingRef.current = true;
156
260
  setIsChecking(true);
157
261
  setStatus(OtaStatus.CHECKING);
@@ -163,10 +267,16 @@ export function OtaProvider({
163
267
  const metadata = await loadMetadata(config.baseAppVersion);
164
268
  const localV = metadata.currentVersion;
165
269
 
166
- // The one platform filter (storage providers return every platform).
167
- // Also skips versions that crashed on boot and were rolled back natively.
168
- const failed = metadata.failedVersions ?? [];
169
- const platformPatches = remotePatches.filter(p => (!p.platform || p.platform.toLowerCase() === Platform.OS) && !failed.includes(p.toVersion));
270
+ // Storage providers return every platform: keep what this install may take (platform,
271
+ // native fingerprint, Hermes, rollout/QA lists, kill switch, versions that crashed here)
272
+ const context = await eligibilityContext();
273
+ const platformPatches = remotePatches.filter(p => {
274
+ const reason = ineligibleReason(p, context);
275
+ if (reason && __DEV__ && p.toVersion > localV) {
276
+ console.log(`[OtaProvider] Skipping V${p.toVersion} (${p.id}): ${reason}`);
277
+ }
278
+ return !reason;
279
+ });
170
280
  const maxV = platformPatches.length > 0 ? Math.max(...platformPatches.map(p => p.toVersion)) : localV;
171
281
  setPatches(platformPatches);
172
282
  setCurrentVersion(localV);
@@ -177,7 +287,10 @@ export function OtaProvider({
177
287
  setStatus(OtaStatus.UPDATE_AVAILABLE);
178
288
 
179
289
  // Trigger behaviors based on mode
180
- if (config.updateMode === OtaUpdateMode.BACKGROUND_DOWNLOAD) {
290
+ const network = config.network?.wifiOnly ? await NativeBsPatch.getNetworkType().catch(() => 'unknown') : 'wifi';
291
+ if (network !== 'wifi' && network !== 'ethernet') {
292
+ setMessage(`Update available: V${localV} → V${maxV} (waiting for Wi-Fi)`);
293
+ } else if (config.updateMode === OtaUpdateMode.BACKGROUND_DOWNLOAD) {
181
294
  downloadBackgroundUpdate(platformPatches, localV, maxV);
182
295
  } else if (config.updateMode === OtaUpdateMode.ON_APP_START || config.updateMode === OtaUpdateMode.ON_APP_FOREGROUND) {
183
296
  // Auto-apply immediately!
@@ -195,7 +308,7 @@ export function OtaProvider({
195
308
  isCheckingRef.current = false;
196
309
  setIsChecking(false);
197
310
  }
198
- }, [config, configError, executeApplyUpdate, isDebugUpdateEnabled, downloadBackgroundUpdate, getEffectiveConfig]);
311
+ }, [config, configError, eligibilityContext, executeApplyUpdate, isDebugUpdateEnabled, downloadBackgroundUpdate, getEffectiveConfig]);
199
312
 
200
313
  /**
201
314
  * Bootstrap: runs once on mount.
@@ -210,6 +323,11 @@ export function OtaProvider({
210
323
  */
211
324
  useEffect(() => {
212
325
  const bootstrap = async () => {
326
+ getInstallId().then(id => {
327
+ installIdRef.current = id;
328
+ setInstallId(id);
329
+ }).catch(() => {});
330
+
213
331
  // Clean up any pending trash directories from previous resets (non-blocking)
214
332
  NativeBsPatch.readDir(DOCUMENT_DIR).then(dirs => {
215
333
  for (const dir of dirs) {
@@ -242,23 +360,32 @@ export function OtaProvider({
242
360
  setStatus(OtaStatus.UP_TO_DATE);
243
361
  }
244
362
  };
245
- bootstrap().then(() => setIsInitialized(true)).catch(() => {
246
- // Bootstrap failed: keep UI blocked so user sees the error state.
247
- // setIsInitialized stays false → isBlocking remains true → the error
248
- // message is shown via loadingView instead of a silent blank screen.
249
- });
363
+
364
+ // OTA must never take the app down: if bootstrap fails, render the app with OTA idle
365
+ bootstrap().catch(error => {
366
+ console.warn('[OtaProvider] Bootstrap failed, OTA disabled for this session:', error);
367
+ setMessage(`OTA disabled: ${error.message}`);
368
+ setStatus(OtaStatus.ERROR);
369
+ }).finally(() => setIsInitialized(true));
250
370
  // eslint-disable-next-line react-hooks/exhaustive-deps
251
371
  }, []);
252
372
 
253
373
  /**
254
- * AppState listener for ON_APP_FOREGROUND mode.
374
+ * AppState listener for ON_APP_FOREGROUND mode, and for a mandatory update that got
375
+ * ready while in the background.
255
376
  * A downloaded update is not reloaded on background: iOS suspends JS before the
256
377
  * first render, so the native resolver counts the launch as failed and rolls it back.
257
378
  * metadata already points at the new version, so the next cold start applies it
258
379
  */
380
+ const isMandatoryRef = useRef(false);
381
+ isMandatoryRef.current = isMandatory && isUpdateReady;
259
382
  useEffect(() => {
260
383
  const subscription = AppState.addEventListener('change', nextAppState => {
261
384
  if (appState.current.match(/inactive|background/) && nextAppState === 'active' && bootstrapDone.current) {
385
+ if (isMandatoryRef.current) {
386
+ NativeBsPatch.reloadBundle();
387
+ return;
388
+ }
262
389
  const mode = config.updateMode ?? OtaUpdateMode.MANUAL;
263
390
  if (mode === OtaUpdateMode.ON_APP_FOREGROUND) {
264
391
  checkUpdates();
@@ -271,13 +398,13 @@ export function OtaProvider({
271
398
  };
272
399
  }, [config.updateMode, checkUpdates]);
273
400
  const markAsHealthy = useCallback(async () => {
274
- const log = createOtaLogger(config.onEvent);
401
+ const log = createOtaLogger(onEvent);
275
402
  log.emit(OtaEvent.MARK_HEALTHY);
276
403
  const appVersion = await NativeBsPatch.getAppVersion().catch(() => config.appVersion);
277
404
  await markHealthy(config.baseAppVersion, runningVersionRef.current, appVersion);
278
- }, [config]);
405
+ }, [config, onEvent]);
279
406
  const resetToFactory = useCallback(async () => {
280
- const log = createOtaLogger(config.onEvent);
407
+ const log = createOtaLogger(onEvent);
281
408
  try {
282
409
  setStatus(OtaStatus.APPLYING);
283
410
  setMessage('Executing system wipe...');
@@ -293,7 +420,7 @@ export function OtaProvider({
293
420
  setStatus(OtaStatus.ERROR);
294
421
  setMessage(`Reset failed: ${error.message}`);
295
422
  }
296
- }, [config]);
423
+ }, [onEvent]);
297
424
 
298
425
  // Memoized: consumers re-render only when something they can see changes
299
426
  const value = useMemo(() => ({
@@ -306,13 +433,16 @@ export function OtaProvider({
306
433
  isChecking,
307
434
  metrics,
308
435
  isUpdateReady,
436
+ isMandatory,
437
+ installId,
309
438
  applyUpdate,
310
439
  applyVersion,
440
+ applyEntry,
311
441
  resetToFactory,
312
442
  markAsHealthy,
313
443
  checkUpdate: checkUpdates,
314
444
  reloadBundle: () => NativeBsPatch.reloadBundle()
315
- }), [status, message, progress, currentVersion, latestVersion, pendingCount, isChecking, metrics, isUpdateReady, applyUpdate, applyVersion, resetToFactory, markAsHealthy, checkUpdates]);
445
+ }), [status, message, progress, currentVersion, latestVersion, pendingCount, isChecking, metrics, isUpdateReady, isMandatory, installId, applyUpdate, applyVersion, applyEntry, resetToFactory, markAsHealthy, checkUpdates]);
316
446
 
317
447
  // Logic to determine if we should block the UI
318
448
  const isBlocking = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","ActivityIndicator","AppState","Platform","StyleSheet","Text","View","NativeBsPatch","applyOtaPatchInternal","fetchOtaManifest","selectUpdate","validateOtaConfig","createOtaLogger","OtaEvent","DOCUMENT_DIR","loadMetadata","markHealthy","OTA_DIR","OtaStatus","OtaUpdateMode","jsx","_jsx","jsxs","_jsxs","OtaContext","undefined","OtaProvider","children","config","loadingView","useLoadingView","status","setStatus","IDLE","message","setMessage","progress","setProgress","currentVersion","setCurrentVersion","baseAppVersion","latestVersion","setLatestVersion","pendingCount","setPendingCount","isChecking","setIsChecking","metrics","setMetrics","patches","setPatches","isInitialized","setIsInitialized","isUpdateReady","setIsUpdateReady","appState","currentState","isCheckingRef","bootstrapDone","runningVersionRef","progressRef","isDebugUpdateEnabled","__DEV__","allowDebugUpdates","configError","e","Error","setProgressIfChanged","nextProgress","current","getEffectiveConfig","appVersion","nativeVer","getAppVersion","executeApplyUpdate","patchList","currentVer","targetVer","directPatch","console","warn","ERROR","effectiveConfig","DOWNLOADING","s","msg","m","percent","error","applyVersion","targetVersion","UP_TO_DATE","applyUpdate","downloadBackgroundUpdate","localV","targetV","SUCCESS","autoReload","checkUpdates","CHECKING","onEvent","emit","CHECK_UPDATE","remotePatches","metadata","failed","failedVersions","platformPatches","filter","p","platform","toLowerCase","OS","includes","toVersion","maxV","length","Math","max","map","UPDATE_AVAILABLE","updateMode","BACKGROUND_DOWNLOAD","ON_APP_START","ON_APP_FOREGROUND","bootstrap","readDir","then","dirs","dir","startsWith","removePath","catch","mode","MANUAL","subscription","addEventListener","nextAppState","match","remove","markAsHealthy","log","MARK_HEALTHY","resetToFactory","APPLYING","RESET_FACTORY","exists","moveFile","Date","now","reloadBundle","value","checkUpdate","isBlocking","healthyMarkedRef","Provider","style","styles","loadingContainer","loadingCard","size","color","loadingTitle","loadingText","progressText","toFixed","useOta","context","create","flex","justifyContent","alignItems","backgroundColor","paddingHorizontal","width","maxWidth","borderRadius","paddingVertical","borderWidth","borderColor","marginTop","fontSize","fontWeight","lineHeight","textAlign"],"sourceRoot":"../../../src","sources":["ota/OtaProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IACVC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,iBAAiB,EACjBC,QAAQ,EAERC,QAAQ,EACRC,UAAU,EACVC,IAAI,EACJC,IAAI,QACC,cAAc;AACrB,OAAOC,aAAa,MAAM,kBAAkB;AAC5C,SAASC,qBAAqB,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,iBAAiB,QAAQ,WAAW;AACpG,SAASC,eAAe,EAAEC,QAAQ,QAAQ,aAAa;AACvD,SAASC,YAAY,EAAEC,YAAY,EAAEC,WAAW,EAAEC,OAAO,QAAQ,eAAe;AAChF,SAKEC,SAAS,EACTC,aAAa,QACR,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEjB,MAAMC,UAAU,gBAAG9B,aAAa,CAAuB+B,SAAS,CAAC;AAEjE,OAAO,SAASC,WAAWA,CAAC;EAC1BC,QAAQ;EACRC,MAAM;EACNC,WAAW;EACXC,cAAc,GAAG;AAMnB,CAAC,EAAE;EACD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGhC,QAAQ,CAAYkB,SAAS,CAACe,IAAI,CAAC;EAC/D,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGnC,QAAQ,CAAS,iBAAiB,CAAC;EACjE,MAAM,CAACoC,QAAQ,EAAEC,WAAW,CAAC,GAAGrC,QAAQ,CAAS,CAAC,CAAC;EAEnD,MAAM,CAACsC,cAAc,EAAEC,iBAAiB,CAAC,GAAGvC,QAAQ,CAClD4B,MAAM,CAACY,cACT,CAAC;EACD,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG1C,QAAQ,CAChD4B,MAAM,CAACY,cACT,CAAC;EACD,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAG5C,QAAQ,CAAS,CAAC,CAAC;EAC3D,MAAM,CAAC6C,UAAU,EAAEC,aAAa,CAAC,GAAG9C,QAAQ,CAAU,KAAK,CAAC;EAC5D,MAAM,CAAC+C,OAAO,EAAEC,UAAU,CAAC,GAAGhD,QAAQ,CAAoB,IAAI,CAAC;EAC/D,MAAM,CAACiD,OAAO,EAAEC,UAAU,CAAC,GAAGlD,QAAQ,CAAa,EAAE,CAAC;EACtD,MAAM,CAACmD,aAAa,EAAEC,gBAAgB,CAAC,GAAGpD,QAAQ,CAAU,KAAK,CAAC;EAClE,MAAM,CAACqD,aAAa,EAAEC,gBAAgB,CAAC,GAAGtD,QAAQ,CAAU,KAAK,CAAC;EAElE,MAAMuD,QAAQ,GAAGxD,MAAM,CAACG,QAAQ,CAACsD,YAAY,CAAC;EAC9C,MAAMC,aAAa,GAAG1D,MAAM,CAAC,KAAK,CAAC;EACnC,MAAM2D,aAAa,GAAG3D,MAAM,CAAC,KAAK,CAAC;EACnC;EACA,MAAM4D,iBAAiB,GAAG5D,MAAM,CAAC6B,MAAM,CAACY,cAAc,CAAC;EACvD,MAAMoB,WAAW,GAAG7D,MAAM,CAAC,CAAC,CAAC;EAC7B,MAAM8D,oBAAoB,GAAG,CAACC,OAAO,IAAIlC,MAAM,CAACmC,iBAAiB,KAAK,IAAI;;EAE1E;EACA;EACA,MAAMC,WAAW,GAAGlE,OAAO,CAAC,MAAM;IAChC,MAAMmE,CAAC,GAAGtD,iBAAiB,CAACiB,MAAM,CAAC;IACnC,OAAOqC,CAAC,IAAI,wCAAwCA,CAAC,EAAE;EACzD,CAAC,EAAE,CAACrC,MAAM,CAAC,CAAC;EACZ,IAAIkC,OAAO,IAAIE,WAAW,EAAE;IAC1B,MAAM,IAAIE,KAAK,CAACF,WAAW,CAAC;EAC9B;EAEA,MAAMG,oBAAoB,GAAGxE,WAAW,CAAEyE,YAAoB,IAAK;IACjE,IAAIR,WAAW,CAACS,OAAO,KAAKD,YAAY,EAAE;MACxC;IACF;IACAR,WAAW,CAACS,OAAO,GAAGD,YAAY;IAClC/B,WAAW,CAAC+B,YAAY,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,kBAAkB,GAAG3E,WAAW,CAAC,YAAgC;IACrE,IAAIiC,MAAM,CAAC2C,UAAU,EAAE,OAAO3C,MAAM;IACpC,IAAI;MACF,MAAM4C,SAAS,GAAG,MAAMjE,aAAa,CAACkE,aAAa,CAAC,CAAC;MACrD,IAAI,CAACD,SAAS,EAAE;QACd,MAAM,IAAIN,KAAK,CAAC,4BAA4B,CAAC;MAC/C;MACA,OAAO;QAAE,GAAGtC,MAAM;QAAE2C,UAAU,EAAEC;MAAU,CAAC;IAC7C,CAAC,CAAC,OAAOP,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CACb,+DAAgED,CAAC,CAAW/B,OAAO,IAAI,GACvF,+GACF,CAAC;IACH;EACF,CAAC,EAAE,CAACN,MAAM,CAAC,CAAC;;EAEZ;AACF;AACA;AACA;EACE,MAAM8C,kBAAkB,GAAG/E,WAAW,CACpC,OAAOgF,SAAqB,EAAEC,UAAkB,EAAEC,SAAiB,KAAK;IACtE,MAAMC,WAAW,GAAGpE,YAAY,CAACiE,SAAS,EAAEC,UAAU,EAAEC,SAAS,CAAC;IAElE,IAAI,CAACC,WAAW,EAAE;MAChB,IAAIhB,OAAO,EAAE;QACXiB,OAAO,CAACC,IAAI,CAAC,yCAAyC,EAAEJ,UAAU,EAAE,IAAI,EAAEC,SAAS,CAAC;MACtF;MACA7C,SAAS,CAACd,SAAS,CAAC+D,KAAK,CAAC;MAC1B9C,UAAU,CAAC,wBAAwB,CAAC;MACpC;IACF;IAEA,IAAI;MACF,MAAM+C,eAAe,GAAG,MAAMZ,kBAAkB,CAAC,CAAC;MAClDtC,SAAS,CAACd,SAAS,CAACiE,WAAW,CAAC;MAChCvB,WAAW,CAACS,OAAO,GAAG,CAAC;MACvBhC,WAAW,CAAC,CAAC,CAAC;MACd,MAAM7B,qBAAqB,CACzBsE,WAAW,EACXI,eAAe,EACf,CAACE,CAAY,EAAEC,GAAW,EAAEC,CAAc,KAAK;QAC7CnD,UAAU,CAACkD,GAAG,CAAC;QACfrD,SAAS,CAACoD,CAAC,CAAC;QACZ,IAAIE,CAAC,EAAEtC,UAAU,CAACsC,CAAC,CAAC;MACtB,CAAC,EACAC,OAAe,IAAK;QACnBpB,oBAAoB,CAACoB,OAAO,CAAC;MAC/B,CACF,CAAC;IACH,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAI1B,OAAO,EAAE;QACXiB,OAAO,CAACS,KAAK,CAAC,6BAA6B,EAAEA,KAAK,CAAC;MACrD;MACAxD,SAAS,CAACd,SAAS,CAAC+D,KAAK,CAAC;MAC1B9C,UAAU,CAAC,kBAAmBqD,KAAK,CAAWtD,OAAO,EAAE,CAAC;IAC1D;EACF,CAAC,EACD,CAACoC,kBAAkB,EAAEH,oBAAoB,CAC3C,CAAC;;EAED;AACF;AACA;EACE,MAAMsB,YAAY,GAAG9F,WAAW,CAAC,MAAO+F,aAAqB,IAAK;IAChE,IAAI,CAAC7B,oBAAoB,EAAE;MACzBjB,eAAe,CAAC,CAAC,CAAC;MAClBZ,SAAS,CAACd,SAAS,CAACyE,UAAU,CAAC;MAC/BxD,UAAU,CAAC,uDAAuD,CAAC;MACnE;IACF;IACA,MAAMuC,kBAAkB,CAACzB,OAAO,EAAEX,cAAc,EAAEoD,aAAa,CAAC;EAClE,CAAC,EAAE,CAACpD,cAAc,EAAEoC,kBAAkB,EAAEb,oBAAoB,EAAEZ,OAAO,CAAC,CAAC;EAEvE,MAAM2C,WAAW,GAAGjG,WAAW,CAC7B,MAAM8F,YAAY,CAAChD,aAAa,CAAC,EACjC,CAACgD,YAAY,EAAEhD,aAAa,CAC9B,CAAC;EAED,MAAMoD,wBAAwB,GAAGlG,WAAW,CAC1C,OACEgF,SAAqB,EACrBmB,MAAc,EACdC,OAAe,KACZ;IACH,MAAMjB,WAAW,GAAGpE,YAAY,CAACiE,SAAS,EAAEmB,MAAM,EAAEC,OAAO,CAAC;IAC5D,IAAI,CAACjB,WAAW,EAAE;IAElB,IAAI;MACF,MAAMI,eAAe,GAAG,MAAMZ,kBAAkB,CAAC,CAAC;MAClD,MAAM9D,qBAAqB,CACzBsE,WAAW,EACXI,eAAe,EACf,CAACE,CAAY,EAAEC,GAAW,EAAEC,CAAc,KAAK;QAC7C,IAAIF,CAAC,KAAKlE,SAAS,CAAC8E,OAAO,EAAE;UAC3B1C,gBAAgB,CAAC,IAAI,CAAC;UACtBtB,SAAS,CAACd,SAAS,CAACyE,UAAU,CAAC;UAC/BxD,UAAU,CAAC,WAAW4D,OAAO,wBAAwB,CAAC;UACtD,IAAIT,CAAC,EAAEtC,UAAU,CAACsC,CAAC,CAAC;QACtB;MACF,CAAC,EACD,MAAM,CAAC,CAAC;MAAE;MACV;QAAEW,UAAU,EAAE;MAAM,CAAC,CAAE;MACzB,CAAC;IACH,CAAC,CAAC,OAAOhC,CAAC,EAAE;MACV,IAAIH,OAAO,EAAE;QACXiB,OAAO,CAACC,IAAI,CAAC,gDAAgD,EAAEf,CAAC,CAAC;MACnE;IACF;EACF,CAAC,EACD,CAACK,kBAAkB,CACrB,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAM4B,YAAY,GAAGvG,WAAW,CAAC,YAAY;IAC3C,IAAI8D,aAAa,CAACY,OAAO,IAAIL,WAAW,EAAE;IAC1C,IAAI,CAACH,oBAAoB,EAAE;MACzBjB,eAAe,CAAC,CAAC,CAAC;MAClBE,aAAa,CAAC,KAAK,CAAC;MACpBd,SAAS,CAACd,SAAS,CAACyE,UAAU,CAAC;MAC/BxD,UAAU,CAAC,uDAAuD,CAAC;MACnE;IACF;IACAsB,aAAa,CAACY,OAAO,GAAG,IAAI;IAC5BvB,aAAa,CAAC,IAAI,CAAC;IACnBd,SAAS,CAACd,SAAS,CAACiF,QAAQ,CAAC;IAC7BhE,UAAU,CAAC,yBAAyB,CAAC;IAErC,IAAI;MACF,MAAM+C,eAAe,GAAG,MAAMZ,kBAAkB,CAAC,CAAC;MAClD1D,eAAe,CAACsE,eAAe,CAACkB,OAAO,CAAC,CAACC,IAAI,CAACxF,QAAQ,CAACyF,YAAY,CAAC;MACpE,MAAMC,aAAa,GAAG,MAAM9F,gBAAgB,CAACyE,eAAe,CAAC;MAC7D,MAAMsB,QAAQ,GAAG,MAAMzF,YAAY,CAACa,MAAM,CAACY,cAAc,CAAC;MAC1D,MAAMsD,MAAM,GAAGU,QAAQ,CAAClE,cAAc;;MAEtC;MACA;MACA,MAAMmE,MAAM,GAAGD,QAAQ,CAACE,cAAc,IAAI,EAAE;MAC5C,MAAMC,eAAe,GAAGJ,aAAa,CAACK,MAAM,CAC1CC,CAAC,IACC,CAAC,CAACA,CAAC,CAACC,QAAQ,IAAID,CAAC,CAACC,QAAQ,CAACC,WAAW,CAAC,CAAC,KAAK5G,QAAQ,CAAC6G,EAAE,KACxD,CAACP,MAAM,CAACQ,QAAQ,CAACJ,CAAC,CAACK,SAAS,CAChC,CAAC;MAED,MAAMC,IAAI,GACRR,eAAe,CAACS,MAAM,GAAG,CAAC,GACtBC,IAAI,CAACC,GAAG,CAAC,GAAGX,eAAe,CAACY,GAAG,CAACV,CAAC,IAAIA,CAAC,CAACK,SAAS,CAAC,CAAC,GAClDpB,MAAM;MAEZ5C,UAAU,CAACyD,eAAe,CAAC;MAC3BpE,iBAAiB,CAACuD,MAAM,CAAC;MACzBpD,gBAAgB,CAACyE,IAAI,CAAC;MAEtB,IAAIA,IAAI,GAAGrB,MAAM,EAAE;QACjBlD,eAAe,CAAC,CAAC,CAAC;QAClBT,UAAU,CAAC,sBAAsB2D,MAAM,OAAOqB,IAAI,EAAE,CAAC;QACrDnF,SAAS,CAACd,SAAS,CAACsG,gBAAgB,CAAC;;QAErC;QACA,IAAI5F,MAAM,CAAC6F,UAAU,KAAKtG,aAAa,CAACuG,mBAAmB,EAAE;UAC3D7B,wBAAwB,CAACc,eAAe,EAAEb,MAAM,EAAEqB,IAAI,CAAC;QACzD,CAAC,MAAM,IACLvF,MAAM,CAAC6F,UAAU,KAAKtG,aAAa,CAACwG,YAAY,IAChD/F,MAAM,CAAC6F,UAAU,KAAKtG,aAAa,CAACyG,iBAAiB,EACrD;UACA;UACA,MAAMlD,kBAAkB,CAACiC,eAAe,EAAEb,MAAM,EAAEqB,IAAI,CAAC;QACzD;MACF,CAAC,MAAM;QACLvE,eAAe,CAAC,CAAC,CAAC;QAClBT,UAAU,CAAC,yBAAyB2D,MAAM,GAAG,CAAC;QAC9C9D,SAAS,CAACd,SAAS,CAACyE,UAAU,CAAC;MACjC;IACF,CAAC,CAAC,OAAOH,KAAK,EAAE;MACdrD,UAAU,CAAC,iBAAkBqD,KAAK,CAAWtD,OAAO,EAAE,CAAC;MACvDF,SAAS,CAACd,SAAS,CAAC+D,KAAK,CAAC;IAC5B,CAAC,SAAS;MACRxB,aAAa,CAACY,OAAO,GAAG,KAAK;MAC7BvB,aAAa,CAAC,KAAK,CAAC;IACtB;EACF,CAAC,EAAE,CAAClB,MAAM,EAAEoC,WAAW,EAAEU,kBAAkB,EAAEb,oBAAoB,EAAEgC,wBAAwB,EAAEvB,kBAAkB,CAAC,CAAC;;EAEjH;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEzE,SAAS,CAAC,MAAM;IACd,MAAMgI,SAAS,GAAG,MAAAA,CAAA,KAAY;MAC5B;MACAtH,aAAa,CAACuH,OAAO,CAAChH,YAAY,CAAC,CAACiH,IAAI,CAACC,IAAI,IAAI;QAC/C,KAAK,MAAMC,GAAG,IAAID,IAAI,EAAE;UACtB,IAAIC,GAAG,CAACC,UAAU,CAAC,YAAY,CAAC,EAAE;YAChC3H,aAAa,CAAC4H,UAAU,CAAC,GAAGrH,YAAY,IAAImH,GAAG,EAAE,CAAC,CAACG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;UACpE;QACF;MACF,CAAC,CAAC,CAACA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;MAElB,MAAM5B,QAAQ,GAAG,MAAMzF,YAAY,CAACa,MAAM,CAACY,cAAc,CAAC;MAC1DmB,iBAAiB,CAACU,OAAO,GAAGmC,QAAQ,CAAClE,cAAc;;MAEnD;MACAC,iBAAiB,CAACiE,QAAQ,CAAClE,cAAc,CAAC;;MAE1C;MACA,IAAI0B,WAAW,EAAE;QACfe,OAAO,CAACS,KAAK,CAACxB,WAAW,CAAC;QAC1B7B,UAAU,CAAC6B,WAAW,CAAC;QACvBhC,SAAS,CAACd,SAAS,CAAC+D,KAAK,CAAC;QAC1B;MACF;MACAvB,aAAa,CAACW,OAAO,GAAG,IAAI;;MAE5B;MACA,MAAMgE,IAAI,GAAGzG,MAAM,CAAC6F,UAAU,IAAItG,aAAa,CAACmH,MAAM;MACtD,IACED,IAAI,KAAKlH,aAAa,CAACwG,YAAY,IACnCU,IAAI,KAAKlH,aAAa,CAACuG,mBAAmB,EAC1C;QACAxB,YAAY,CAAC,CAAC;MAChB,CAAC,MAAM;QACL/D,UAAU,CAAC,WAAWqE,QAAQ,CAAClE,cAAc,GAAG,CAAC;QACjDN,SAAS,CAACd,SAAS,CAACyE,UAAU,CAAC;MACjC;IACF,CAAC;IAEDkC,SAAS,CAAC,CAAC,CAACE,IAAI,CAAC,MAAM3E,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAACgF,KAAK,CAAC,MAAM;MACzD;MACA;MACA;IAAA,CACD,CAAC;IACF;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;AACF;AACA;AACA;AACA;AACA;EACEvI,SAAS,CAAC,MAAM;IACd,MAAM0I,YAAY,GAAGrI,QAAQ,CAACsI,gBAAgB,CAC5C,QAAQ,EACPC,YAA4B,IAAK;MAChC,IACElF,QAAQ,CAACc,OAAO,CAACqE,KAAK,CAAC,qBAAqB,CAAC,IAC7CD,YAAY,KAAK,QAAQ,IACzB/E,aAAa,CAACW,OAAO,EACrB;QACA,MAAMgE,IAAI,GAAGzG,MAAM,CAAC6F,UAAU,IAAItG,aAAa,CAACmH,MAAM;QACtD,IAAID,IAAI,KAAKlH,aAAa,CAACyG,iBAAiB,EAAE;UAC5C1B,YAAY,CAAC,CAAC;QAChB;MACF;MACA3C,QAAQ,CAACc,OAAO,GAAGoE,YAAY;IACjC,CACF,CAAC;IAED,OAAO,MAAM;MACXF,YAAY,CAACI,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAAC/G,MAAM,CAAC6F,UAAU,EAAEvB,YAAY,CAAC,CAAC;EAErC,MAAM0C,aAAa,GAAGjJ,WAAW,CAAC,YAAY;IAC5C,MAAMkJ,GAAG,GAAGjI,eAAe,CAACgB,MAAM,CAACwE,OAAO,CAAC;IAC3CyC,GAAG,CAACxC,IAAI,CAACxF,QAAQ,CAACiI,YAAY,CAAC;IAC/B,MAAMvE,UAAU,GAAG,MAAMhE,aAAa,CAACkE,aAAa,CAAC,CAAC,CAAC2D,KAAK,CAAC,MAAMxG,MAAM,CAAC2C,UAAU,CAAC;IACrF,MAAMvD,WAAW,CAACY,MAAM,CAACY,cAAc,EAAEmB,iBAAiB,CAACU,OAAO,EAAEE,UAAU,CAAC;EACjF,CAAC,EAAE,CAAC3C,MAAM,CAAC,CAAC;EAEZ,MAAMmH,cAAc,GAAGpJ,WAAW,CAAC,YAAY;IAC7C,MAAMkJ,GAAG,GAAGjI,eAAe,CAACgB,MAAM,CAACwE,OAAO,CAAC;IAC3C,IAAI;MACFpE,SAAS,CAACd,SAAS,CAAC8H,QAAQ,CAAC;MAC7B7G,UAAU,CAAC,0BAA0B,CAAC;MACtC0G,GAAG,CAACxC,IAAI,CAACxF,QAAQ,CAACoI,aAAa,CAAC;MAChC,IAAI,MAAM1I,aAAa,CAAC2I,MAAM,CAACjI,OAAO,CAAC,EAAE;QACvC;QACA,MAAMV,aAAa,CAAC4I,QAAQ,CAAClI,OAAO,EAAE,GAAGH,YAAY,cAAcsI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChF;MACF;MACAlH,UAAU,CAAC,0CAA0C,CAAC;MACtD5B,aAAa,CAAC+I,YAAY,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAO9D,KAAK,EAAE;MACdxD,SAAS,CAACd,SAAS,CAAC+D,KAAK,CAAC;MAC1B9C,UAAU,CAAC,iBAAkBqD,KAAK,CAAWtD,OAAO,EAAE,CAAC;IACzD;EACF,CAAC,EAAE,CAACN,MAAM,CAAC,CAAC;;EAEZ;EACA,MAAM2H,KAAK,GAAGzJ,OAAO,CAAW,OAAO;IACrCiC,MAAM;IACNG,OAAO;IACPE,QAAQ;IACRE,cAAc;IACdG,aAAa;IACbE,YAAY;IACZE,UAAU;IACVE,OAAO;IACPM,aAAa;IACbuC,WAAW;IACXH,YAAY;IACZsD,cAAc;IACdH,aAAa;IACbY,WAAW,EAAEtD,YAAY;IACzBoD,YAAY,EAAEA,CAAA,KAAM/I,aAAa,CAAC+I,YAAY,CAAC;EACjD,CAAC,CAAC,EAAE,CACFvH,MAAM,EACNG,OAAO,EACPE,QAAQ,EACRE,cAAc,EACdG,aAAa,EACbE,YAAY,EACZE,UAAU,EACVE,OAAO,EACPM,aAAa,EACbuC,WAAW,EACXH,YAAY,EACZsD,cAAc,EACdH,aAAa,EACb1C,YAAY,CACb,CAAC;;EAEF;EACA,MAAMuD,UAAU,GAAG3J,OAAO,CAAC,MAAM;IAC/B,OACEgC,cAAc,KACb,CAACqB,aAAa,IACZvB,MAAM,CAAC6F,UAAU,KAAKtG,aAAa,CAACwG,YAAY,KAC9C5F,MAAM,KAAKb,SAAS,CAACe,IAAI,IACxBF,MAAM,KAAKb,SAAS,CAACiF,QAAQ,IAC7BpE,MAAM,KAAKb,SAAS,CAACiE,WAAW,IAChCpD,MAAM,KAAKb,SAAS,CAAC8H,QAAQ,IAC7BjH,MAAM,KAAKb,SAAS,CAACsG,gBAAgB,CAAE,CAAC;EAElD,CAAC,EAAE,CAAC1F,cAAc,EAAEqB,aAAa,EAAEvB,MAAM,CAAC6F,UAAU,EAAE1F,MAAM,CAAC,CAAC;;EAE9D;EACA;EACA;EACA,MAAM2H,gBAAgB,GAAG3J,MAAM,CAAC,KAAK,CAAC;EACtCF,SAAS,CAAC,MAAM;IACd,IAAI4J,UAAU,IAAI,CAACtG,aAAa,IAAIuG,gBAAgB,CAACrF,OAAO,EAAE;IAC9DqF,gBAAgB,CAACrF,OAAO,GAAG,IAAI;IAC/BuE,aAAa,CAAC,CAAC,CAACR,KAAK,CAACnE,CAAC,IAAIc,OAAO,CAACC,IAAI,CAAC,qCAAqC,EAAEf,CAAC,CAAC,CAAC;IAClF;EACF,CAAC,EAAE,CAACwF,UAAU,EAAEtG,aAAa,CAAC,CAAC;EAE/B,oBACE9B,IAAA,CAACG,UAAU,CAACmI,QAAQ;IAACJ,KAAK,EAAEA,KAAM;IAAA5H,QAAA,EAC/B,CAAC8H,UAAU,GACV9H,QAAQ,GACNE,WAAW,KAAKJ,SAAS,GAC3BI,WAAW,gBAEXR,IAAA,CAACf,IAAI;MAACsJ,KAAK,EAAEC,MAAM,CAACC,gBAAiB;MAAAnI,QAAA,eACnCJ,KAAA,CAACjB,IAAI;QAACsJ,KAAK,EAAEC,MAAM,CAACE,WAAY;QAAApI,QAAA,gBAC9BN,IAAA,CAACpB,iBAAiB;UAAC+J,IAAI,EAAC,OAAO;UAACC,KAAK,EAAC;QAAS,CAAE,CAAC,eAClD5I,IAAA,CAAChB,IAAI;UAACuJ,KAAK,EAAEC,MAAM,CAACK,YAAa;UAAAvI,QAAA,EAAC;QAAW,CAAM,CAAC,eACpDN,IAAA,CAAChB,IAAI;UAACuJ,KAAK,EAAEC,MAAM,CAACM,WAAY;UAAAxI,QAAA,EAAEO;QAAO,CAAO,CAAC,EAChDH,MAAM,KAAKb,SAAS,CAACiE,WAAW,IAAIpD,MAAM,KAAKb,SAAS,CAAC8H,QAAQ,gBAChEzH,KAAA,CAAClB,IAAI;UAACuJ,KAAK,EAAEC,MAAM,CAACO,YAAa;UAAAzI,QAAA,GAAES,QAAQ,CAACiI,OAAO,CAAC,CAAC,CAAC,EAAC,GAAC;QAAA,CAAM,CAAC,GAC7D,IAAI;MAAA,CACJ;IAAC,CACH;EACP,CACkB,CAAC;AAE1B;AAEA,OAAO,SAASC,MAAMA,CAAA,EAAG;EACvB,MAAMC,OAAO,GAAG3K,UAAU,CAAC4B,UAAU,CAAC;EACtC,IAAI+I,OAAO,KAAK9I,SAAS,EAAE;IACzB,MAAM,IAAIyC,KAAK,CAAC,2CAA2C,CAAC;EAC9D;EACA,OAAOqG,OAAO;AAChB;AAEA,MAAMV,MAAM,GAAGzJ,UAAU,CAACoK,MAAM,CAAC;EAC/BV,gBAAgB,EAAE;IAChBW,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,eAAe,EAAE,SAAS;IAC1BC,iBAAiB,EAAE;EACrB,CAAC;EACDd,WAAW,EAAE;IACXe,KAAK,EAAE,MAAM;IACbC,QAAQ,EAAE,GAAG;IACbH,eAAe,EAAE,SAAS;IAC1BI,YAAY,EAAE,EAAE;IAChBH,iBAAiB,EAAE,EAAE;IACrBI,eAAe,EAAE,EAAE;IACnBN,UAAU,EAAE,QAAQ;IACpBO,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE;EACf,CAAC;EACDjB,YAAY,EAAE;IACZkB,SAAS,EAAE,EAAE;IACbnB,KAAK,EAAE,SAAS;IAChBoB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd,CAAC;EACDnB,WAAW,EAAE;IACXiB,SAAS,EAAE,CAAC;IACZnB,KAAK,EAAE,SAAS;IAChBoB,QAAQ,EAAE,EAAE;IACZE,UAAU,EAAE,EAAE;IACdC,SAAS,EAAE;EACb,CAAC;EACDpB,YAAY,EAAE;IACZgB,SAAS,EAAE,EAAE;IACbnB,KAAK,EAAE,SAAS;IAChBoB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","ActivityIndicator","AppState","Platform","StyleSheet","Text","View","NativeBsPatch","ineligibleReason","getInstallId","applyOtaPatchInternal","fetchOtaManifest","selectUpdate","validateOtaConfig","createOtaLogger","OtaEvent","DOCUMENT_DIR","loadMetadata","markHealthy","OTA_DIR","OtaStatus","OtaUpdateMode","jsx","_jsx","jsxs","_jsxs","OtaContext","undefined","DEFAULT_MIN_CHECK_INTERVAL_MS","nativeString","get","hermesBytecodeVersion","v","globalThis","HermesInternal","getRuntimeProperties","Number","OtaProvider","children","config","loadingView","useLoadingView","status","setStatus","IDLE","message","setMessage","progress","setProgress","currentVersion","setCurrentVersion","baseAppVersion","latestVersion","setLatestVersion","pendingCount","setPendingCount","isChecking","setIsChecking","metrics","setMetrics","patches","setPatches","isInitialized","setIsInitialized","isUpdateReady","setIsUpdateReady","isMandatory","setIsMandatory","installId","setInstallId","appState","currentState","isCheckingRef","bootstrapDone","runningVersionRef","progressRef","lastCheckRef","appVersionRef","appVersion","installIdRef","isDebugUpdateEnabled","__DEV__","allowDebugUpdates","configError","e","Error","setProgressIfChanged","nextProgress","current","onEvent","entry","telemetry","fetch","url","method","headers","body","JSON","stringify","platform","OS","appBuild","getAppBuild","runtimeFingerprint","getRuntimeFingerprint","flavor","customServer","channel","otaVersion","catch","getEffectiveConfig","publicKey","getEmbeddedPublicKeys","base","nativeVer","getAppVersion","eligibilityContext","metadata","failedVersions","installEntry","directPatch","effectiveConfig","DOWNLOADING","s","msg","m","percent","error","console","ERROR","executeApplyUpdate","patchList","currentVer","targetVer","warn","applyEntry","UP_TO_DATE","reason","ignoreControls","toVersion","applyVersion","targetVersion","applyUpdate","downloadBackgroundUpdate","localV","targetV","SUCCESS","mandatory","reloadBundle","autoReload","checkUpdates","options","minInterval","minCheckIntervalMs","force","Date","now","CHECKING","emit","CHECK_UPDATE","remotePatches","context","platformPatches","filter","p","log","id","maxV","length","Math","max","map","UPDATE_AVAILABLE","network","wifiOnly","getNetworkType","updateMode","BACKGROUND_DOWNLOAD","ON_APP_START","ON_APP_FOREGROUND","bootstrap","then","readDir","dirs","dir","startsWith","removePath","mode","MANUAL","finally","isMandatoryRef","subscription","addEventListener","nextAppState","match","remove","markAsHealthy","MARK_HEALTHY","resetToFactory","APPLYING","RESET_FACTORY","exists","moveFile","value","checkUpdate","isBlocking","healthyMarkedRef","Provider","style","styles","loadingContainer","loadingCard","size","color","loadingTitle","loadingText","progressText","toFixed","useOta","create","flex","justifyContent","alignItems","backgroundColor","paddingHorizontal","width","maxWidth","borderRadius","paddingVertical","borderWidth","borderColor","marginTop","fontSize","fontWeight","lineHeight","textAlign"],"sourceRoot":"../../../src","sources":["ota/OtaProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ /** Entry `requires` values this client understands */
4
+ export const SUPPORTED_FEATURES = ['gzip', 'bz2'];
5
+ /** FNV-1a: stable 0-99 bucket for an install and version (a different slice of installs per version) */
6
+ export const rolloutBucket = (installId, version) => {
7
+ let h = 0x811c9dc5;
8
+ for (const c of `${installId}:${version}`) {
9
+ h ^= c.charCodeAt(0);
10
+ h = Math.imul(h, 0x01000193) >>> 0;
11
+ }
12
+ return h % 100;
13
+ };
14
+
15
+ /**
16
+ * Why this client must not install the entry, or null when it may.
17
+ * ignoreControls (installing a chosen entry by hand, e.g. QA): skip the kill switch,
18
+ * rollout and QA list, keep every check that protects the app.
19
+ */
20
+ export const ineligibleReason = (e, ctx, {
21
+ ignoreControls = false
22
+ } = {}) => {
23
+ if (e.platform && e.platform.toLowerCase() !== ctx.platform) return 'other platform';
24
+ if (ctx.failedVersions.includes(e.toVersion)) return 'crashed on boot here before';
25
+ if (e.disabled && !ignoreControls) return 'disabled';
26
+ const missing = (e.requires ?? []).filter(f => !SUPPORTED_FEATURES.includes(f));
27
+ if (missing.length) return `needs a newer client (${missing.join(', ')})`;
28
+ if (e.runtimeFingerprint && e.runtimeFingerprint !== ctx.runtimeFingerprint) {
29
+ 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)';
30
+ }
31
+ if (e.hermesBytecodeVersion && ctx.hermesBytecodeVersion && e.hermesBytecodeVersion !== ctx.hermesBytecodeVersion) {
32
+ return `Hermes bytecode ${e.hermesBytecodeVersion}, runtime reads ${ctx.hermesBytecodeVersion}`;
33
+ }
34
+ if (ignoreControls) return null;
35
+ if (e.allowInstallIds?.length && !e.allowInstallIds.includes(ctx.installId)) return 'not in the QA list';
36
+ if (e.rolloutPercent !== undefined && rolloutBucket(ctx.installId, e.toVersion) >= e.rolloutPercent) {
37
+ return `outside the ${e.rolloutPercent}% rollout`;
38
+ }
39
+ return null;
40
+ };
41
+ //# sourceMappingURL=eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SUPPORTED_FEATURES","rolloutBucket","installId","version","h","c","charCodeAt","Math","imul","ineligibleReason","e","ctx","ignoreControls","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;AACA,OAAO,MAAMA,kBAAkB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AAcjD;AACA,OAAO,MAAMC,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;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,gBAAgB,GAAGA,CAC5BC,CAAW,EACXC,GAAuB,EACvB;EAAEC,cAAc,GAAG;AAAoC,CAAC,GAAG,CAAC,CAAC,KAC7C;EAChB,IAAIF,CAAC,CAACG,QAAQ,IAAIH,CAAC,CAACG,QAAQ,CAACC,WAAW,CAAC,CAAC,KAAKH,GAAG,CAACE,QAAQ,EAAE,OAAO,gBAAgB;EACpF,IAAIF,GAAG,CAACI,cAAc,CAACC,QAAQ,CAACN,CAAC,CAACO,SAAS,CAAC,EAAE,OAAO,6BAA6B;EAClF,IAAIP,CAAC,CAACQ,QAAQ,IAAI,CAACN,cAAc,EAAE,OAAO,UAAU;EACpD,MAAMO,OAAO,GAAG,CAACT,CAAC,CAACU,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,IAAId,CAAC,CAACe,kBAAkB,IAAIf,CAAC,CAACe,kBAAkB,KAAKd,GAAG,CAACc,kBAAkB,EAAE;IACzE,OAAOd,GAAG,CAACc,kBAAkB,GACvB,uDAAuD,GACvD,uFAAuF;EACjG;EACA,IAAIf,CAAC,CAACgB,qBAAqB,IAAIf,GAAG,CAACe,qBAAqB,IAAIhB,CAAC,CAACgB,qBAAqB,KAAKf,GAAG,CAACe,qBAAqB,EAAE;IAC/G,OAAO,mBAAmBhB,CAAC,CAACgB,qBAAqB,mBAAmBf,GAAG,CAACe,qBAAqB,EAAE;EACnG;EACA,IAAId,cAAc,EAAE,OAAO,IAAI;EAC/B,IAAIF,CAAC,CAACiB,eAAe,EAAEJ,MAAM,IAAI,CAACb,CAAC,CAACiB,eAAe,CAACX,QAAQ,CAACL,GAAG,CAACT,SAAS,CAAC,EAAE,OAAO,oBAAoB;EACxG,IAAIQ,CAAC,CAACkB,cAAc,KAAKC,SAAS,IAAI5B,aAAa,CAACU,GAAG,CAACT,SAAS,EAAEQ,CAAC,CAACO,SAAS,CAAC,IAAIP,CAAC,CAACkB,cAAc,EAAE;IACjG,OAAO,eAAelB,CAAC,CAACkB,cAAc,WAAW;EACrD;EACA,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * What `entrySignature` signs: the fields that decide which bundle a client installs.
5
+ * Must stay byte-for-byte equal to entryPayload in tools/update_registry.js.
6
+ */
7
+ export 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');
8
+
9
+ /** Public keys from config or the embedded list: PEM blocks, or base64 SPKI separated by commas/whitespace */
10
+ export const parsePublicKeys = keys => {
11
+ if (!keys) return [];
12
+ if (keys.includes('-----BEGIN')) {
13
+ return (keys.match(/-----BEGIN PUBLIC KEY-----[\s\S]*?-----END PUBLIC KEY-----/g) ?? []).map(block => block.replace(/-----[A-Z ]+-----|\s+/g, ''));
14
+ }
15
+ return keys.split(/[\s,]+/).filter(Boolean);
16
+ };
17
+ //# sourceMappingURL=entrySignature.js.map