@hot-updater/react-native 1.0.0-rc.3 → 1.0.0-rc.30

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 (300) hide show
  1. package/android/proguard-rules.pro +17 -2
  2. package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
  3. package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +954 -837
  4. package/android/src/main/java/com/hotupdater/BundleMetadata.kt +15 -11
  5. package/android/src/main/java/com/hotupdater/FileManagerService.kt +45 -0
  6. package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +287 -22
  7. package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +43 -31
  8. package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryManager.kt +37 -54
  9. package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryState.kt +64 -0
  10. package/android/src/main/java/com/hotupdater/InstallIdentityService.kt +37 -0
  11. package/android/src/main/java/com/hotupdater/KeyValueStorageService.kt +86 -0
  12. package/android/src/main/java/com/hotupdater/NetworkState.kt +31 -0
  13. package/android/src/main/java/com/hotupdater/NoBackupStorage.kt +17 -0
  14. package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +127 -50
  15. package/android/src/main/java/com/hotupdater/PreviousProcessExit.kt +89 -0
  16. package/android/src/main/java/com/hotupdater/ReactNativeValueConverters.kt +34 -0
  17. package/android/src/main/java/com/hotupdater/TarArchiveInputStream.kt +214 -375
  18. package/android/src/main/java/com/hotupdater/TarBrArchiveExtractor.kt +119 -0
  19. package/android/src/newarch/HotUpdater.kt +7 -9
  20. package/android/src/newarch/HotUpdaterModule.kt +109 -84
  21. package/android/src/oldarch/HotUpdater.kt +7 -9
  22. package/android/src/oldarch/HotUpdaterModule.kt +98 -74
  23. package/android/src/oldarch/HotUpdaterSpec.kt +4 -6
  24. package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
  25. package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
  26. package/ios/HotUpdater/Internal/BundleFileStorageService.swift +950 -1112
  27. package/ios/HotUpdater/Internal/BundleMetadata.swift +8 -53
  28. package/ios/HotUpdater/Internal/FileManagerService.swift +48 -0
  29. package/ios/HotUpdater/Internal/FileUtilities.swift +64 -0
  30. package/ios/HotUpdater/Internal/HotUpdater-Bridging-Header.h +0 -1
  31. package/ios/HotUpdater/Internal/HotUpdater.mm +13 -45
  32. package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +190 -73
  33. package/ios/HotUpdater/Internal/KeyValueStorageService.swift +71 -0
  34. package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
  35. package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
  36. package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +119 -71
  37. package/ios/HotUpdater/Internal/UpdateFailure.swift +390 -0
  38. package/ios/HotUpdater/Recovery/HotUpdaterRecovery.h +16 -0
  39. package/ios/HotUpdater/Recovery/HotUpdaterRecovery.mm +83 -0
  40. package/ios/HotUpdater/Recovery/HotUpdaterRecoveryHooks.mm +49 -0
  41. package/lib/commonjs/appReady.js +111 -0
  42. package/lib/commonjs/appReady.js.map +1 -0
  43. package/lib/commonjs/checkForUpdate.js +124 -69
  44. package/lib/commonjs/checkForUpdate.js.map +1 -1
  45. package/lib/commonjs/clientPlugin.js +13 -0
  46. package/lib/commonjs/clientPlugin.js.map +1 -0
  47. package/lib/commonjs/error.js +4 -13
  48. package/lib/commonjs/error.js.map +1 -1
  49. package/lib/commonjs/fetchJSON.js +16 -27
  50. package/lib/commonjs/fetchJSON.js.map +1 -1
  51. package/lib/commonjs/fetchUpdateResponse.js +54 -0
  52. package/lib/commonjs/fetchUpdateResponse.js.map +1 -0
  53. package/lib/commonjs/httpClient.js +63 -94
  54. package/lib/commonjs/httpClient.js.map +1 -1
  55. package/lib/commonjs/index.js +71 -18
  56. package/lib/commonjs/index.js.map +1 -1
  57. package/lib/commonjs/native.js +78 -60
  58. package/lib/commonjs/native.js.map +1 -1
  59. package/lib/commonjs/pluginHost.js +44 -0
  60. package/lib/commonjs/pluginHost.js.map +1 -0
  61. package/lib/commonjs/releaseCatalogCache.js +36 -87
  62. package/lib/commonjs/releaseCatalogCache.js.map +1 -1
  63. package/lib/commonjs/sdkVersion.js +1 -1
  64. package/lib/commonjs/sdkVersion.js.map +1 -1
  65. package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
  66. package/lib/commonjs/store.js +3 -10
  67. package/lib/commonjs/store.js.map +1 -1
  68. package/lib/commonjs/updateError.js +132 -0
  69. package/lib/commonjs/updateError.js.map +1 -0
  70. package/lib/commonjs/wrap.js +43 -26
  71. package/lib/commonjs/wrap.js.map +1 -1
  72. package/lib/module/appReady.js +103 -0
  73. package/lib/module/appReady.js.map +1 -0
  74. package/lib/module/checkForUpdate.js +117 -64
  75. package/lib/module/checkForUpdate.js.map +1 -1
  76. package/lib/module/clientPlugin.js +4 -0
  77. package/lib/module/clientPlugin.js.map +1 -0
  78. package/lib/module/error.js +4 -13
  79. package/lib/module/error.js.map +1 -1
  80. package/lib/module/fetchJSON.js +14 -26
  81. package/lib/module/fetchJSON.js.map +1 -1
  82. package/lib/module/fetchUpdateResponse.js +49 -0
  83. package/lib/module/fetchUpdateResponse.js.map +1 -0
  84. package/lib/module/httpClient.js +62 -93
  85. package/lib/module/httpClient.js.map +1 -1
  86. package/lib/module/index.js +58 -20
  87. package/lib/module/index.js.map +1 -1
  88. package/lib/module/native.js +71 -53
  89. package/lib/module/native.js.map +1 -1
  90. package/lib/module/pluginHost.js +35 -0
  91. package/lib/module/pluginHost.js.map +1 -0
  92. package/lib/module/releaseCatalogCache.js +32 -82
  93. package/lib/module/releaseCatalogCache.js.map +1 -1
  94. package/lib/module/sdkVersion.js +1 -1
  95. package/lib/module/sdkVersion.js.map +1 -1
  96. package/lib/module/specs/NativeHotUpdater.js.map +1 -1
  97. package/lib/module/store.js +3 -10
  98. package/lib/module/store.js.map +1 -1
  99. package/lib/module/updateError.js +126 -0
  100. package/lib/module/updateError.js.map +1 -0
  101. package/lib/module/wrap.js +43 -26
  102. package/lib/module/wrap.js.map +1 -1
  103. package/lib/typescript/commonjs/appReady.d.ts +23 -0
  104. package/lib/typescript/commonjs/appReady.d.ts.map +1 -0
  105. package/lib/typescript/commonjs/checkForUpdate.d.ts +16 -4
  106. package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
  107. package/lib/typescript/commonjs/clientPlugin.d.ts +2 -0
  108. package/lib/typescript/commonjs/clientPlugin.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/error.d.ts +4 -13
  110. package/lib/typescript/commonjs/error.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/fetchJSON.d.ts +5 -5
  112. package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/fetchUpdateResponse.d.ts +14 -0
  114. package/lib/typescript/commonjs/fetchUpdateResponse.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/httpClient.d.ts +4 -33
  116. package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/index.d.ts +4 -8
  118. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/native.d.ts +31 -22
  120. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/pluginHost.d.ts +4 -0
  122. package/lib/typescript/commonjs/pluginHost.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/releaseCatalogCache.d.ts +8 -14
  124. package/lib/typescript/commonjs/releaseCatalogCache.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
  126. package/lib/typescript/commonjs/sdkVersion.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +42 -47
  128. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/store.d.ts +1 -3
  130. package/lib/typescript/commonjs/store.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/types.d.ts +1 -1
  132. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/updateError.d.ts +26 -0
  134. package/lib/typescript/commonjs/updateError.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/wrap.types.d.ts +6 -7
  137. package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
  138. package/lib/typescript/module/appReady.d.ts +23 -0
  139. package/lib/typescript/module/appReady.d.ts.map +1 -0
  140. package/lib/typescript/module/checkForUpdate.d.ts +16 -4
  141. package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
  142. package/lib/typescript/module/clientPlugin.d.ts +2 -0
  143. package/lib/typescript/module/clientPlugin.d.ts.map +1 -0
  144. package/lib/typescript/module/error.d.ts +4 -13
  145. package/lib/typescript/module/error.d.ts.map +1 -1
  146. package/lib/typescript/module/fetchJSON.d.ts +5 -5
  147. package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
  148. package/lib/typescript/module/fetchUpdateResponse.d.ts +14 -0
  149. package/lib/typescript/module/fetchUpdateResponse.d.ts.map +1 -0
  150. package/lib/typescript/module/httpClient.d.ts +4 -33
  151. package/lib/typescript/module/httpClient.d.ts.map +1 -1
  152. package/lib/typescript/module/index.d.ts +4 -8
  153. package/lib/typescript/module/index.d.ts.map +1 -1
  154. package/lib/typescript/module/native.d.ts +31 -22
  155. package/lib/typescript/module/native.d.ts.map +1 -1
  156. package/lib/typescript/module/pluginHost.d.ts +4 -0
  157. package/lib/typescript/module/pluginHost.d.ts.map +1 -0
  158. package/lib/typescript/module/releaseCatalogCache.d.ts +8 -14
  159. package/lib/typescript/module/releaseCatalogCache.d.ts.map +1 -1
  160. package/lib/typescript/module/sdkVersion.d.ts +1 -1
  161. package/lib/typescript/module/sdkVersion.d.ts.map +1 -1
  162. package/lib/typescript/module/specs/NativeHotUpdater.d.ts +42 -47
  163. package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
  164. package/lib/typescript/module/store.d.ts +1 -3
  165. package/lib/typescript/module/store.d.ts.map +1 -1
  166. package/lib/typescript/module/types.d.ts +1 -1
  167. package/lib/typescript/module/types.d.ts.map +1 -1
  168. package/lib/typescript/module/updateError.d.ts +26 -0
  169. package/lib/typescript/module/updateError.d.ts.map +1 -0
  170. package/lib/typescript/module/wrap.d.ts.map +1 -1
  171. package/lib/typescript/module/wrap.types.d.ts +6 -7
  172. package/lib/typescript/module/wrap.types.d.ts.map +1 -1
  173. package/package.json +7 -4
  174. package/src/appReady.ts +149 -0
  175. package/src/checkForUpdate.ts +151 -88
  176. package/src/clientPlugin.ts +18 -0
  177. package/src/error.ts +4 -14
  178. package/src/fetchJSON.ts +14 -30
  179. package/src/fetchUpdateResponse.ts +54 -0
  180. package/src/httpClient.ts +88 -159
  181. package/src/index.ts +90 -24
  182. package/src/native.ts +106 -102
  183. package/src/pluginHost.ts +45 -0
  184. package/src/releaseCatalogCache.ts +43 -172
  185. package/src/sdkVersion.ts +1 -1
  186. package/src/specs/NativeHotUpdater.ts +41 -48
  187. package/src/store.ts +2 -23
  188. package/src/types.ts +1 -1
  189. package/src/updateError.ts +153 -0
  190. package/src/wrap.tsx +57 -26
  191. package/src/wrap.types.ts +6 -7
  192. package/android/src/main/java/com/hotupdater/DecompressService.kt +0 -89
  193. package/android/src/main/java/com/hotupdater/DecompressionStrategy.kt +0 -26
  194. package/android/src/main/java/com/hotupdater/TarBrDecompressionStrategy.kt +0 -117
  195. package/android/src/main/java/com/hotupdater/TarGzDecompressionStrategy.kt +0 -117
  196. package/android/src/main/java/com/hotupdater/ZipDecompressionStrategy.kt +0 -192
  197. package/android/src/test/java/com/hotupdater/BsdiffPatchTest.kt +0 -46
  198. package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +0 -799
  199. package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +0 -273
  200. package/android/src/test/java/com/hotupdater/NativeConfigUtilsTest.kt +0 -20
  201. package/android/src/test/java/com/hotupdater/OkHttpDownloadServiceTest.kt +0 -111
  202. package/android/src/test/java/com/hotupdater/RelativePathResolverTest.kt +0 -41
  203. package/android/src/test/java/com/hotupdater/ReleaseCatalogCacheServiceTest.kt +0 -118
  204. package/android/src/test/java/com/hotupdater/TarArchiveInputStreamTest.kt +0 -68
  205. package/ios/HotUpdater/Internal/ArchiveExtractionUtilities.swift +0 -178
  206. package/ios/HotUpdater/Internal/DecompressService.swift +0 -112
  207. package/ios/HotUpdater/Internal/DecompressionStrategy.swift +0 -22
  208. package/ios/HotUpdater/Internal/StreamingTarArchiveExtractor.swift +0 -370
  209. package/ios/HotUpdater/Internal/TarBrDecompressionStrategy.swift +0 -39
  210. package/ios/HotUpdater/Internal/TarGzDecompressionStrategy.swift +0 -59
  211. package/ios/HotUpdater/Internal/ZipArchiveExtractor.swift +0 -482
  212. package/ios/HotUpdater/Internal/ZipDecompressionStrategy.swift +0 -56
  213. package/lib/commonjs/catalogCacheNative.spec.js +0 -31
  214. package/lib/commonjs/catalogCacheNative.spec.js.map +0 -1
  215. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +0 -615
  216. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  217. package/lib/commonjs/httpClient.spec.js +0 -102
  218. package/lib/commonjs/httpClient.spec.js.map +0 -1
  219. package/lib/commonjs/index.spec.js +0 -302
  220. package/lib/commonjs/index.spec.js.map +0 -1
  221. package/lib/commonjs/iosInterop.spec.js +0 -18
  222. package/lib/commonjs/iosInterop.spec.js.map +0 -1
  223. package/lib/commonjs/native.spec.js +0 -883
  224. package/lib/commonjs/native.spec.js.map +0 -1
  225. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +0 -218
  226. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  227. package/lib/commonjs/notifyAppReadyInsights.js +0 -133
  228. package/lib/commonjs/notifyAppReadyInsights.js.map +0 -1
  229. package/lib/commonjs/notifyAppReadyInsights.spec.js +0 -246
  230. package/lib/commonjs/notifyAppReadyInsights.spec.js.map +0 -1
  231. package/lib/commonjs/notifyAppReadyInsights.test-utils.js +0 -24
  232. package/lib/commonjs/notifyAppReadyInsights.test-utils.js.map +0 -1
  233. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +0 -117
  234. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +0 -1
  235. package/lib/commonjs/releaseCatalogCache.spec.js +0 -195
  236. package/lib/commonjs/releaseCatalogCache.spec.js.map +0 -1
  237. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js +0 -64
  238. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  239. package/lib/commonjs/store.notification.spec.js +0 -76
  240. package/lib/commonjs/store.notification.spec.js.map +0 -1
  241. package/lib/commonjs/store.spec.js +0 -316
  242. package/lib/commonjs/store.spec.js.map +0 -1
  243. package/lib/commonjs/wrap.spec.js +0 -329
  244. package/lib/commonjs/wrap.spec.js.map +0 -1
  245. package/lib/module/catalogCacheNative.spec.js +0 -31
  246. package/lib/module/catalogCacheNative.spec.js.map +0 -1
  247. package/lib/module/checkForUpdate.releaseCatalog.spec.js +0 -614
  248. package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  249. package/lib/module/httpClient.spec.js +0 -102
  250. package/lib/module/httpClient.spec.js.map +0 -1
  251. package/lib/module/index.spec.js +0 -301
  252. package/lib/module/index.spec.js.map +0 -1
  253. package/lib/module/iosInterop.spec.js +0 -18
  254. package/lib/module/iosInterop.spec.js.map +0 -1
  255. package/lib/module/native.spec.js +0 -882
  256. package/lib/module/native.spec.js.map +0 -1
  257. package/lib/module/notifyAppReadyInsights.boundary.spec.js +0 -217
  258. package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  259. package/lib/module/notifyAppReadyInsights.js +0 -128
  260. package/lib/module/notifyAppReadyInsights.js.map +0 -1
  261. package/lib/module/notifyAppReadyInsights.spec.js +0 -245
  262. package/lib/module/notifyAppReadyInsights.spec.js.map +0 -1
  263. package/lib/module/notifyAppReadyInsights.test-utils.js +0 -18
  264. package/lib/module/notifyAppReadyInsights.test-utils.js.map +0 -1
  265. package/lib/module/notifyAppReadyInsights.transport.spec.js +0 -116
  266. package/lib/module/notifyAppReadyInsights.transport.spec.js.map +0 -1
  267. package/lib/module/releaseCatalogCache.spec.js +0 -195
  268. package/lib/module/releaseCatalogCache.spec.js.map +0 -1
  269. package/lib/module/releaseCatalogCacheNativeContract.spec.js +0 -64
  270. package/lib/module/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  271. package/lib/module/store.notification.spec.js +0 -77
  272. package/lib/module/store.notification.spec.js.map +0 -1
  273. package/lib/module/store.spec.js +0 -315
  274. package/lib/module/store.spec.js.map +0 -1
  275. package/lib/module/wrap.spec.js +0 -330
  276. package/lib/module/wrap.spec.js.map +0 -1
  277. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +0 -13
  278. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +0 -1
  279. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts +0 -8
  280. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  281. package/lib/typescript/module/notifyAppReadyInsights.d.ts +0 -13
  282. package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +0 -1
  283. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts +0 -8
  284. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  285. package/src/catalogCacheNative.spec.ts +0 -63
  286. package/src/checkForUpdate.releaseCatalog.spec.ts +0 -611
  287. package/src/httpClient.spec.ts +0 -132
  288. package/src/index.spec.ts +0 -337
  289. package/src/iosInterop.spec.ts +0 -30
  290. package/src/native.spec.ts +0 -945
  291. package/src/notifyAppReadyInsights.boundary.spec.ts +0 -234
  292. package/src/notifyAppReadyInsights.spec.ts +0 -243
  293. package/src/notifyAppReadyInsights.test-utils.ts +0 -31
  294. package/src/notifyAppReadyInsights.transport.spec.ts +0 -130
  295. package/src/notifyAppReadyInsights.ts +0 -194
  296. package/src/releaseCatalogCache.spec.ts +0 -282
  297. package/src/releaseCatalogCacheNativeContract.spec.ts +0 -80
  298. package/src/store.notification.spec.ts +0 -92
  299. package/src/store.spec.ts +0 -372
  300. package/src/wrap.spec.ts +0 -406
@@ -1,103 +1,57 @@
1
1
  "use strict";
2
2
 
3
- import { encodeChannelKey } from "@hot-updater/core";
4
- import { canonicalizeAppVersion } from "@hot-updater/plugin-core";
5
- import { fetchJSON } from "./fetchJSON.js";
3
+ import { ARTIFACT_PROTOCOL_VERSION, canonicalizeAppVersion, encodeChannelKey, resolveBaseURL } from "@hot-updater/protocol";
4
+ import { fetchJSON, FetchJSONResponseError } from "./fetchJSON.js";
6
5
  import { fetchReleaseCatalogWithCache } from "./releaseCatalogCache.js";
7
- import { HOT_UPDATER_SDK_VERSION } from "./sdkVersion.js";
8
- const resolveBaseURL = async baseURL => {
9
- const resolvedBaseURL = typeof baseURL === "function" ? await baseURL() : baseURL;
10
- if (!resolvedBaseURL) {
11
- throw new Error("baseURL function must return a non-empty string");
12
- }
13
- return resolvedBaseURL.replace(/\/+$/, "");
14
- };
6
+ import { InvalidUpdateResponseError } from "./updateError.js";
15
7
  const resolveArtifactUrl = (baseURL, value) => {
16
8
  if (/^https?:\/\//i.test(value)) {
17
- new URL(value);
9
+ try {
10
+ new URL(value);
11
+ } catch (error) {
12
+ throw new InvalidUpdateResponseError(`Invalid artifact URL: ${value}`, {
13
+ cause: error
14
+ });
15
+ }
18
16
  return value;
19
17
  }
20
18
  if (!value.startsWith("/storage/")) {
21
- throw new Error("Artifact URLs must be absolute HTTP(S) URLs or client-relative storage paths.");
19
+ throw new InvalidUpdateResponseError("Artifact URLs must be absolute HTTP(S) URLs or client-relative storage paths.");
22
20
  }
23
21
  return `${baseURL}/${value.slice(1)}`;
24
22
  };
25
23
  const resolveArtifactUrls = (baseURL, info) => ({
26
24
  ...info,
27
- fileUrl: info.fileUrl === null ? null : resolveArtifactUrl(baseURL, info.fileUrl),
28
- ...(info.manifestUrl === undefined ? {} : {
29
- manifestUrl: info.manifestUrl === null ? null : resolveArtifactUrl(baseURL, info.manifestUrl)
30
- }),
31
- ...(info.changedAssets === undefined ? {} : {
32
- changedAssets: info.changedAssets === null ? null : Object.fromEntries(Object.entries(info.changedAssets).map(([path, asset]) => [path, {
33
- ...asset,
34
- ...(asset.file ? {
35
- file: {
36
- ...asset.file,
37
- url: resolveArtifactUrl(baseURL, asset.file.url)
38
- }
39
- } : {}),
40
- ...(asset.patch ? {
41
- patch: {
42
- ...asset.patch,
43
- patchUrl: resolveArtifactUrl(baseURL, asset.patch.patchUrl)
44
- }
45
- } : {})
46
- }]))
47
- })
25
+ manifestUrl: resolveArtifactUrl(baseURL, info.manifestUrl),
26
+ ...(info.archiveUrl ? {
27
+ archiveUrl: resolveArtifactUrl(baseURL, info.archiveUrl)
28
+ } : {}),
29
+ assets: Object.fromEntries(Object.entries(info.assets).map(([path, asset]) => [path, {
30
+ ...asset,
31
+ file: {
32
+ ...asset.file,
33
+ url: resolveArtifactUrl(baseURL, asset.file.url)
34
+ },
35
+ ...(asset.patch ? {
36
+ patch: {
37
+ ...asset.patch,
38
+ patchUrl: resolveArtifactUrl(baseURL, asset.patch.patchUrl)
39
+ }
40
+ } : {})
41
+ }]))
48
42
  });
49
- const sendInsightsEvent = async (baseURL, params) => {
50
- const controller = new AbortController();
51
- const timeoutId = setTimeout(() => {
52
- controller.abort();
53
- }, params.requestTimeout ?? 5000);
54
- try {
55
- const response = await fetch(`${baseURL}/events`, {
56
- body: JSON.stringify({
57
- appVersion: params.appVersion,
58
- channel: params.channel,
59
- cohort: params.cohort,
60
- fingerprintHash: params.fingerprintHash,
61
- fromBundleId: params.fromBundleId,
62
- ...(params.fromReleaseId === undefined ? {} : {
63
- fromReleaseId: params.fromReleaseId
64
- }),
65
- installId: params.installId,
66
- platform: params.platform,
67
- sdkVersion: HOT_UPDATER_SDK_VERSION,
68
- toBundleId: params.toBundleId,
69
- ...(params.toReleaseId === undefined ? {} : {
70
- toReleaseId: params.toReleaseId
71
- }),
72
- type: params.type,
73
- updateStrategy: params.updateStrategy,
74
- ...(params.userId != null ? {
75
- userId: params.userId
76
- } : {}),
77
- ...(params.username != null ? {
78
- username: params.username
79
- } : {})
80
- }),
81
- headers: {
82
- "Content-Type": "application/json",
83
- ...params.requestHeaders
84
- },
85
- method: "POST",
86
- signal: controller.signal
87
- });
88
- if (response.status !== 204) {
89
- throw new Error(`Expected HTTP 204 from /events, received ${response.status}`);
90
- }
91
- } catch (error) {
92
- if (error instanceof Error && error.name === "AbortError") {
93
- throw new Error("Request timed out");
43
+ const requireArtifactProtocolV1 = info => {
44
+ if (info.artifactProtocolVersion !== ARTIFACT_PROTOCOL_VERSION || !info.assets || !info.manifestUrl || !info.manifestFileHash || info.archiveUrl !== undefined && typeof info.archiveUrl !== "string") {
45
+ throw new InvalidUpdateResponseError(`Server does not support artifact protocol ${ARTIFACT_PROTOCOL_VERSION}.`);
46
+ }
47
+ for (const asset of Object.values(info.assets)) {
48
+ if (!asset.file?.url || !asset.fileHash) {
49
+ throw new InvalidUpdateResponseError("Artifact protocol 1 requires an original file for every asset.");
94
50
  }
95
- throw error;
96
- } finally {
97
- clearTimeout(timeoutId);
98
51
  }
52
+ return info;
99
53
  };
100
- const createSession = baseURL => ({
54
+ const createSession = (baseURL, onResponse) => ({
101
55
  fetchReleaseCatalog: async params => {
102
56
  const channelKey = encodeChannelKey(params.channel);
103
57
  let strategyValue;
@@ -115,6 +69,9 @@ const createSession = baseURL => ({
115
69
  const url = `${baseURL}/release-catalogs/${strategyPath}/${params.platform}/${channelKey}/${encodeURIComponent(strategyValue)}`;
116
70
  return fetchReleaseCatalogWithCache({
117
71
  baseURL,
72
+ ...(onResponse ? {
73
+ onResponse
74
+ } : {}),
118
75
  expectedScope: params.updateStrategy === "fingerprint" ? {
119
76
  channelKey,
120
77
  fingerprintHash: strategyValue,
@@ -131,18 +88,30 @@ const createSession = baseURL => ({
131
88
  });
132
89
  },
133
90
  resolveArtifact: async params => {
134
- const info = await fetchJSON({
135
- requestHeaders: params.requestHeaders,
136
- requestTimeout: params.requestTimeout,
137
- url: `${baseURL}/artifacts/${encodeURIComponent(params.targetBundleId)}/from/${encodeURIComponent(params.currentBundleId)}`
138
- });
139
- return resolveArtifactUrls(baseURL, info);
140
- },
141
- sendInsightsEvent: params => sendInsightsEvent(baseURL, params)
91
+ let info;
92
+ try {
93
+ info = await fetchJSON({
94
+ ...(onResponse ? {
95
+ onResponse
96
+ } : {}),
97
+ requestHeaders: params.requestHeaders,
98
+ requestTimeout: params.requestTimeout,
99
+ url: `${baseURL}/artifacts/v1/${encodeURIComponent(params.targetBundleId)}/from/${encodeURIComponent(params.currentBundleId)}`
100
+ });
101
+ } catch (error) {
102
+ if (error instanceof FetchJSONResponseError && error.status === 404) {
103
+ throw new InvalidUpdateResponseError(`Server does not support artifact protocol ${ARTIFACT_PROTOCOL_VERSION}.`, {
104
+ cause: error
105
+ });
106
+ }
107
+ throw error;
108
+ }
109
+ return resolveArtifactUrls(baseURL, requireArtifactProtocolV1(info));
110
+ }
142
111
  });
143
112
 
144
113
  /** Creates the private HTTP client used by HotUpdater.init and HotUpdater.wrap. */
145
- export const createHttpClient = baseURL => ({
146
- createSession: async () => createSession(await resolveBaseURL(baseURL))
114
+ export const createHttpClient = (baseURL, onResponse) => ({
115
+ createSession: async () => createSession(await resolveBaseURL(baseURL), onResponse)
147
116
  });
148
117
  //# sourceMappingURL=httpClient.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["encodeChannelKey","canonicalizeAppVersion","fetchJSON","fetchReleaseCatalogWithCache","HOT_UPDATER_SDK_VERSION","resolveBaseURL","baseURL","resolvedBaseURL","Error","replace","resolveArtifactUrl","value","test","URL","startsWith","slice","resolveArtifactUrls","info","fileUrl","manifestUrl","undefined","changedAssets","Object","fromEntries","entries","map","path","asset","file","url","patch","patchUrl","sendInsightsEvent","params","controller","AbortController","timeoutId","setTimeout","abort","requestTimeout","response","fetch","body","JSON","stringify","appVersion","channel","cohort","fingerprintHash","fromBundleId","fromReleaseId","installId","platform","sdkVersion","toBundleId","toReleaseId","type","updateStrategy","userId","username","headers","requestHeaders","method","signal","status","error","name","clearTimeout","createSession","fetchReleaseCatalog","channelKey","strategyValue","strategyPath","encodeURIComponent","expectedScope","strategy","resolveArtifact","targetBundleId","currentBundleId","createHttpClient"],"sourceRoot":"../../src","sources":["httpClient.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ARTIFACT_PROTOCOL_VERSION","canonicalizeAppVersion","encodeChannelKey","resolveBaseURL","fetchJSON","FetchJSONResponseError","fetchReleaseCatalogWithCache","InvalidUpdateResponseError","resolveArtifactUrl","baseURL","value","test","URL","error","cause","startsWith","slice","resolveArtifactUrls","info","manifestUrl","archiveUrl","assets","Object","fromEntries","entries","map","path","asset","file","url","patch","patchUrl","requireArtifactProtocolV1","artifactProtocolVersion","manifestFileHash","undefined","values","fileHash","createSession","onResponse","fetchReleaseCatalog","params","channelKey","channel","strategyValue","updateStrategy","fingerprintHash","Error","appVersion","strategyPath","platform","encodeURIComponent","expectedScope","strategy","requestHeaders","requestTimeout","resolveArtifact","targetBundleId","currentBundleId","status","createHttpClient"],"sourceRoot":"../../src","sources":["httpClient.ts"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
 
3
- import { checkForUpdate } from "./checkForUpdate.js";
3
+ import { emitAfterAppReady } from "./appReady.js";
4
+ import { checkForUpdate, reportUpdateError } from "./checkForUpdate.js";
4
5
  import { createHttpClient } from "./httpClient.js";
5
- import { addListener, getPublicActiveUpdateState, clearCrashHistory, getAppVersion, getBaseURL, getUpdateId, getChannel, getCohort, getCrashHistory, getDefaultChannel, getFingerprintHash, getInstallId, getManifest, getMinBundleId, isChannelSwitched, notifyAppReady, reload, resetChannel, setCohort, setReloadBehavior, setUser, updateBundle } from "./native.js";
6
+ import { addListener, getPublicActiveUpdateState, getActiveUpdateState, getBundleId, clearCrashHistory, getAppVersion, getBaseURL, getUpdateId, getChannel, getCohort, getCrashHistory, getDefaultChannel, getFingerprintHash, getInstallId, getManifest, getMinBundleId, isChannelSwitched, notifyAppReady, reload, resetChannel, setCohort, setReloadBehavior, stageBundle } from "./native.js";
7
+ import { configurePlugins } from "./pluginHost.js";
6
8
  import { hotUpdaterStore } from "./store.js";
7
9
  import { init, wrap } from "./wrap.js";
10
+ export { defineClientPlugin } from "./clientPlugin.js";
11
+ // The built-in Insights client plugin, for HotUpdater.init({ plugins }).
12
+ export { insights } from "@hot-updater/plugin-insights/client";
8
13
  export * from "./store.js";
9
14
  export { extractSignatureFailure, isSignatureVerificationError } from "./types.js";
10
15
  /**
@@ -34,7 +39,6 @@ function createHotUpdaterClient() {
34
39
 
35
40
  // Global configuration stored from wrap
36
41
  const globalConfig = {
37
- insights: true,
38
42
  client: null
39
43
  };
40
44
  const createMissingNetworkConfigError = apiName => {
@@ -53,12 +57,14 @@ function createHotUpdaterClient() {
53
57
  if (autoOptions.baseURL) {
54
58
  const {
55
59
  baseURL,
60
+ plugins: _plugins,
56
61
  ...rest
57
62
  } = autoOptions;
58
63
  return {
59
64
  ...rest,
60
- insights: rest.insights ?? true,
61
- client: createHttpClient(baseURL)
65
+ client: createHttpClient(baseURL, response => {
66
+ emitAfterAppReady("onHttpResponse", () => response);
67
+ })
62
68
  };
63
69
  }
64
70
  throw createMissingNetworkConfigError("wrap");
@@ -71,18 +77,26 @@ function createHotUpdaterClient() {
71
77
  if (rest.baseURL) {
72
78
  const {
73
79
  baseURL,
80
+ plugins: _plugins,
74
81
  ...baseURLRest
75
82
  } = rest;
76
83
  return {
77
84
  ...baseURLRest,
78
- insights: baseURLRest.insights ?? true,
79
- client: createHttpClient(baseURL)
85
+ client: createHttpClient(baseURL, response => {
86
+ emitAfterAppReady("onHttpResponse", () => response);
87
+ })
80
88
  };
81
89
  }
82
90
  throw createMissingNetworkConfigError("init");
83
91
  };
84
92
  const configureGlobal = (normalizedOptions, options) => {
85
- globalConfig.insights = normalizedOptions.insights ?? true;
93
+ // Plugins are set up before init or wrap reads the launch they observe.
94
+ configurePlugins(options.plugins, {
95
+ baseURL: options.baseURL,
96
+ requestHeaders: options.requestHeaders,
97
+ requestTimeout: options.requestTimeout,
98
+ onError: options.onError
99
+ });
86
100
  globalConfig.client = normalizedOptions.client;
87
101
  globalConfig.requestHeaders = options.requestHeaders;
88
102
  globalConfig.requestTimeout = options.requestTimeout;
@@ -295,7 +309,6 @@ function createHotUpdaterClient() {
295
309
  const client = ensureGlobalClient("checkForUpdate");
296
310
  const mergedConfig = {
297
311
  ...config,
298
- insights: globalConfig.insights,
299
312
  client,
300
313
  requestHeaders: {
301
314
  ...globalConfig.requestHeaders,
@@ -311,8 +324,6 @@ function createHotUpdaterClient() {
311
324
  *
312
325
  * @param {UpdateBundleParams} params - Parameters object required for bundle update
313
326
  * @param {string} params.bundleId - The bundle ID of the app
314
- * @param {string|null} params.fileUrl - The URL of the zip file
315
- *
316
327
  * @returns {Promise<boolean>} Whether the update was successful
317
328
  *
318
329
  * @example
@@ -336,9 +347,42 @@ function createHotUpdaterClient() {
336
347
  * }
337
348
  * ```
338
349
  */
339
- updateBundle: params => {
350
+ updateBundle: async params => {
340
351
  ensureGlobalClient("updateBundle");
341
- return updateBundle(params);
352
+ const fromBundleId = getBundleId();
353
+ const state = getActiveUpdateState();
354
+ const active = state.activeSelection;
355
+ const fromReleaseId = active?.bundleId === fromBundleId ? active.releaseId : state.stableSelection?.bundleId === fromBundleId ? state.stableSelection.releaseId : null;
356
+ const channel = params.channel ?? getChannel();
357
+ const strategyOf = scopeKey => scopeKey?.startsWith("v1:fingerprint:") ? "fingerprint" : "appVersion";
358
+ let delivery;
359
+ try {
360
+ delivery = await stageBundle(params);
361
+ } catch (error) {
362
+ reportUpdateError(error, "download", undefined, {
363
+ bundleId: fromBundleId,
364
+ channel,
365
+ targetBundleId: params.bundleId,
366
+ targetReleaseId: params.selection?.releaseId ?? null,
367
+ updateStrategy: strategyOf(params.selection?.scopeKey)
368
+ });
369
+ throw error;
370
+ }
371
+ if (delivery !== null && params.bundleId !== fromBundleId) {
372
+ emitAfterAppReady("onBundleDownloaded", () => {
373
+ const selection = getActiveUpdateState().activeSelection;
374
+ return {
375
+ channel,
376
+ fromBundleId,
377
+ fromReleaseId,
378
+ toBundleId: params.bundleId,
379
+ toReleaseId: selection?.releaseId ?? null,
380
+ updateStrategy: strategyOf(selection?.scopeKey),
381
+ ...delivery
382
+ };
383
+ });
384
+ }
385
+ return true;
342
386
  },
343
387
  /**
344
388
  * Clears the runtime channel override and restores the original bundle.
@@ -351,10 +395,8 @@ function createHotUpdaterClient() {
351
395
  hotUpdaterStore.setState({
352
396
  artifactType: null,
353
397
  details: null,
354
- downloadedBytes: undefined,
355
398
  isUpdateDownloaded: false,
356
- progress: 0,
357
- totalBytes: undefined
399
+ progress: 0
358
400
  });
359
401
  }
360
402
  return ok;
@@ -375,10 +417,6 @@ function createHotUpdaterClient() {
375
417
  * Fetches the persisted install id for this app installation.
376
418
  */
377
419
  getInstallId,
378
- /**
379
- * Persists nullable user identity fields associated with this installation.
380
- */
381
- setUser,
382
420
  /**
383
421
  * Reads the native launch report for the current process.
384
422
  */
@@ -1 +1 @@
1
- {"version":3,"names":["checkForUpdate","createHttpClient","addListener","getPublicActiveUpdateState","clearCrashHistory","getAppVersion","getBaseURL","getUpdateId","getChannel","getCohort","getCrashHistory","getDefaultChannel","getFingerprintHash","getInstallId","getManifest","getMinBundleId","isChannelSwitched","notifyAppReady","reload","resetChannel","setCohort","setReloadBehavior","setUser","updateBundle","hotUpdaterStore","init","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","createHotUpdaterClient","configurationAPI","mixedConfigurationReported","globalConfig","insights","client","createMissingNetworkConfigError","apiName","Error","baseURLExample","normalizeOptions","options","incoming","updateMode","autoOptions","baseURL","rest","normalizeInitOptions","_updateMode","baseURLRest","configureGlobal","normalizedOptions","requestHeaders","requestTimeout","onError","reportMixedConfiguration","nextAPI","console","error","ensureGlobalClient","methodName","isUpdateDownloaded","getSnapshot","getActiveUpdateState","getBundleId","config","mergedConfig","params","ok","setState","artifactType","details","downloadedBytes","undefined","progress","totalBytes","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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A;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2C,kBAAkB,EAAEA,CAAA,KAAMxC,eAAe,CAACyC,WAAW,CAAC,CAAC,CAACD,kBAAkB;IAE1E;AACJ;AACA;IACI3D,aAAa;IAEb;IACA6D,oBAAoB,EAAE,MAAAA,CAAA,KAAY/D,0BAA0B,CAAC,CAAC;IAE9D;AACJ;AACA;AACA;IACIgE,WAAW,EAAE5D,WAAW;IAExB;IACAQ,cAAc;IAEd;AACJ;AACA;IACID,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIK,iBAAiB;IAEjB;AACJ;AACA;AACA;IACII,SAAS;IAET;AACJ;AACA;IACIX,SAAS;IAET;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIP,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAGoE,MAA6B,IAAK;MACjD,MAAM9B,MAAM,GAAGwB,kBAAkB,CAAC,gBAAgB,CAAC;MAEnD,MAAMO,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACT/B,QAAQ,EAAED,YAAY,CAACC,QAAQ;QAC/BC,MAAM;QACNiB,cAAc,EAAE;UACd,GAAGnB,YAAY,CAACmB,cAAc;UAC9B,GAAGa,MAAM,CAACb;QACZ,CAAC;QACDC,cAAc,EAAEY,MAAM,CAACZ,cAAc,IAAIpB,YAAY,CAACoB,cAAc;QACpEC,OAAO,EAAEW,MAAM,CAACX,OAAO,IAAIrB,YAAY,CAACqB;MAC1C,CAAC;MAED,OAAOzD,cAAc,CAACqE,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI9C,YAAY,EAAG+C,MAAoB,IAAK;MACtCR,kBAAkB,CAAC,cAAc,CAAC;MAClC,OAAOvC,YAAY,CAAC+C,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACInD,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAMoD,EAAE,GAAG,MAAMpD,YAAY,CAAC,CAAC;MAC/B,IAAIoD,EAAE,EAAE;QACN/C,eAAe,CAACgD,QAAQ,CAAC;UACvBC,YAAY,EAAE,IAAI;UAClBC,OAAO,EAAE,IAAI;UACbC,eAAe,EAAEC,SAAS;UAC1BZ,kBAAkB,EAAE,KAAK;UACzBa,QAAQ,EAAE,CAAC;UACXC,UAAU,EAAEF;QACd,CAAC,CAAC;MACJ;MACA,OAAOL,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI3D,kBAAkB;IAElB;AACJ;AACA;IACIC,YAAY;IAEZ;AACJ;AACA;IACIS,OAAO;IAEP;AACJ;AACA;IACIL,cAAc;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIP,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN;EACF,CAAC;AACH;AASA,OAAO,MAAM2E,UAA4B,GAAG9C,sBAAsB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["emitAfterAppReady","checkForUpdate","reportUpdateError","createHttpClient","addListener","getPublicActiveUpdateState","getActiveUpdateState","getBundleId","clearCrashHistory","getAppVersion","getBaseURL","getUpdateId","getChannel","getCohort","getCrashHistory","getDefaultChannel","getFingerprintHash","getInstallId","getManifest","getMinBundleId","isChannelSwitched","notifyAppReady","reload","resetChannel","setCohort","setReloadBehavior","stageBundle","configurePlugins","hotUpdaterStore","init","wrap","defineClientPlugin","insights","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","createHotUpdaterClient","configurationAPI","mixedConfigurationReported","globalConfig","client","createMissingNetworkConfigError","apiName","Error","baseURLExample","normalizeOptions","options","incoming","updateMode","autoOptions","baseURL","plugins","_plugins","rest","response","normalizeInitOptions","_updateMode","baseURLRest","configureGlobal","normalizedOptions","requestHeaders","requestTimeout","onError","reportMixedConfiguration","nextAPI","console","error","ensureGlobalClient","methodName","isUpdateDownloaded","getSnapshot","config","mergedConfig","updateBundle","params","fromBundleId","state","active","activeSelection","fromReleaseId","bundleId","releaseId","stableSelection","channel","strategyOf","scopeKey","startsWith","delivery","undefined","targetBundleId","targetReleaseId","selection","updateStrategy","toBundleId","toReleaseId","ok","setState","artifactType","details","progress","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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OAAO,CAAC;MAE3C,OAAOnB,IAAI,CAACgC,iBAAiB,CAAC;IAChC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjC,IAAI,EAAGoB,OAA8B,IAAW;MAC9C,MAAMa,iBAAiB,GAAGJ,oBAAoB,CAACT,OAAO,CAAC;MAEvDiB,wBAAwB,CAAC,MAAM,CAAC;MAChCL,eAAe,CAACC,iBAAiB,EAAEb,OAAO,CAAC;MAE3CpB,IAAI,CAACiC,iBAAiB,CAAC;IACzB,CAAC;IAED;AACJ;AACA;IACIxC,MAAM;IAEN;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+C,kBAAkB,EAAEA,CAAA,KAAM5C,eAAe,CAAC6C,WAAW,CAAC,CAAC,CAACD,kBAAkB;IAE1E;AACJ;AACA;IACI/D,aAAa;IAEb;IACAH,oBAAoB,EAAE,MAAAA,CAAA,KAAYD,0BAA0B,CAAC,CAAC;IAE9D;AACJ;AACA;AACA;IACIE,WAAW,EAAEI,WAAW;IAExB;IACAQ,cAAc;IAEd;AACJ;AACA;IACID,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIK,iBAAiB;IAEjB;AACJ;AACA;AACA;IACII,SAAS;IAET;AACJ;AACA;IACIX,SAAS;IAET;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIT,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { INVALID_COHORT_ERROR_MESSAGE, isValidCohort, normalizeCohortValue } from "@hot-updater/core";
3
+ import { INVALID_COHORT_ERROR_MESSAGE, isValidCohort, normalizeCohortValue } from "@hot-updater/protocol";
4
4
  import { NativeEventEmitter, Platform } from "react-native";
5
5
  import { HotUpdaterErrorCode, isHotUpdaterError } from "./error.js";
6
6
  import HotUpdaterNative from "./specs/NativeHotUpdater.js";
@@ -188,24 +188,40 @@ export const commitReleaseSelection = async input => {
188
188
  return ok;
189
189
  };
190
190
 
191
+ /** How native delivered a staged bundle. */
192
+
193
+ const readBundleDelivery = value => {
194
+ if (typeof value !== "object" || value === null) return null;
195
+ const {
196
+ delivery,
197
+ patchFallback
198
+ } = value;
199
+ if (delivery !== "patch" && delivery !== "manifest" && delivery !== "archive") {
200
+ return null;
201
+ }
202
+ return {
203
+ delivery,
204
+ patchFallback: patchFallback === true
205
+ };
206
+ };
207
+
191
208
  /**
192
- * Downloads files and applies them to the app.
209
+ * Stages a bundle for the next launch. Resolves with how native delivered
210
+ * it, or with null when this runtime had already staged it and nothing was
211
+ * downloaded; rejects when the download or install fails.
193
212
  *
194
- * @param {UpdateParams} params - Parameters object required for bundle update
195
- * @returns {Promise<boolean>} Resolves with true if download was successful
196
213
  * @throws {Error} Rejects with error.code from HotUpdaterErrorCode enum and error.message
197
214
  */
198
- export async function updateBundle(params) {
215
+ export async function stageBundle(params) {
199
216
  const updateBundleId = params.bundleId;
200
217
  const status = params.status;
201
- const targetFileUrl = params.fileUrl;
202
218
  const currentBundleId = status === "UPDATE" ? getFreshBundleId() : undefined;
203
219
 
204
220
  // If native is still on the same bundle we installed in this session,
205
221
  // skip re-download. Native state can move back to the built-in bundle after
206
222
  // rollback/reset, so check a fresh native bundle id before using this guard.
207
223
  if (status === "UPDATE" && sessionState.hasInstalledBundle(updateBundleId) && currentBundleId === updateBundleId) {
208
- return true;
224
+ return null;
209
225
  }
210
226
  const shouldSkipCurrentBundleIdCheck = params.shouldSkipCurrentBundleIdCheck === true;
211
227
  if (!shouldSkipCurrentBundleIdCheck && status === "UPDATE" && currentBundleId !== undefined && updateBundleId.localeCompare(currentBundleId) <= 0) {
@@ -215,30 +231,28 @@ export async function updateBundle(params) {
215
231
  // In-flight guard: return the same promise if the same bundle is already updating.
216
232
  const existing = sessionState.getInflightUpdate(updateBundleId);
217
233
  if (existing) return existing;
218
- const targetFileHash = params.fileHash;
219
234
  const targetChannel = params.channel;
220
235
  const targetManifestUrl = params.manifestUrl;
221
236
  const targetManifestFileHash = params.manifestFileHash;
222
- const targetChangedAssets = params.changedAssets;
237
+ const targetAssets = params.assets;
223
238
  const promise = (async () => {
224
239
  try {
225
240
  const selection = params.selection;
226
- const ok = await HotUpdaterNative.updateBundle({
241
+ const staged = await HotUpdaterNative.updateBundle({
227
242
  bundleId: updateBundleId,
228
243
  channel: targetChannel,
229
- changedAssets: targetChangedAssets ?? null,
230
- fileUrl: targetFileUrl,
231
- fileHash: targetFileHash ?? null,
232
- manifestFileHash: targetManifestFileHash ?? null,
233
- manifestUrl: targetManifestUrl ?? null,
244
+ assets: targetAssets,
245
+ manifestFileHash: targetManifestFileHash,
246
+ manifestUrl: targetManifestUrl,
247
+ ...(params.archiveUrl ? {
248
+ archiveUrl: params.archiveUrl
249
+ } : {}),
234
250
  ...(selection === undefined ? {} : {
235
251
  selection
236
252
  })
237
253
  });
238
- if (ok) {
239
- sessionState.markBundleInstalled(updateBundleId, targetChannel);
240
- }
241
- return ok;
254
+ sessionState.markBundleInstalled(updateBundleId, targetChannel);
255
+ return readBundleDelivery(staged);
242
256
  } finally {
243
257
  sessionState.clearInflightUpdate(updateBundleId);
244
258
  }
@@ -247,6 +261,18 @@ export async function updateBundle(params) {
247
261
  return promise;
248
262
  }
249
263
 
264
+ /**
265
+ * Downloads files and applies them to the app.
266
+ *
267
+ * @param {UpdateParams} params - Parameters object required for bundle update
268
+ * @returns {Promise<boolean>} Resolves with true if download was successful
269
+ * @throws {Error} Rejects with error.code from HotUpdaterErrorCode enum and error.message
270
+ */
271
+ export async function updateBundle(params) {
272
+ await stageBundle(params);
273
+ return true;
274
+ }
275
+
250
276
  /**
251
277
  * Fetches the current app version.
252
278
  */
@@ -419,39 +445,31 @@ export const getInstallId = () => {
419
445
  }
420
446
  return nativeModule.getInstallId();
421
447
  };
422
- export const getPersistedUserIdentity = () => {
423
- const nativeModule = HotUpdaterNative;
424
- if (typeof nativeModule.getUserId !== "function" || typeof nativeModule.getUsername !== "function") {
425
- throw new Error("[HotUpdater] Native module is missing 'getUserId()' or 'getUsername()'. This JS bundle requires a newer native @hot-updater/react-native SDK. Rebuild and release a new app version before delivering this OTA update.");
448
+ const requireStorageNativeMethod = name => {
449
+ const method = HotUpdaterNative[name];
450
+ if (typeof method !== "function") {
451
+ throw new Error(`[HotUpdater] Native module is missing '${name}()'. This JS bundle requires a newer native @hot-updater/react-native SDK. Rebuild and release a new app version before delivering this OTA update.`);
426
452
  }
427
- const userId = nativeModule.getUserId();
428
- const username = nativeModule.getUsername();
429
- return {
430
- ...(userId != null ? {
431
- userId
432
- } : {}),
433
- ...(username != null ? {
434
- username
435
- } : {})
436
- };
453
+ return method.bind(HotUpdaterNative);
454
+ };
455
+
456
+ /** Reads a value from the SDK's native key-value store. */
457
+ export const getStorageItem = key => {
458
+ const value = requireStorageNativeMethod("getStorageItem")(key);
459
+ return typeof value === "string" ? value : null;
460
+ };
461
+
462
+ /** Writes a value to the SDK's native key-value store; null removes it. */
463
+ export const setStorageItem = (key, value) => {
464
+ requireStorageNativeMethod("setStorageItem")(key, value);
437
465
  };
438
- export function setUser(params) {
439
- const nativeModule = HotUpdaterNative;
440
- if (typeof nativeModule.setUser !== "function") {
441
- throw new Error("[HotUpdater] Native module is missing 'setUser()'. This JS bundle requires a newer native @hot-updater/react-native SDK. Rebuild and release a new app version before delivering this OTA update.");
442
- }
443
- if (params === null) {
444
- nativeModule.setUser(null, null);
445
- return;
446
- }
447
- const normalizedUserId = params.userId === null || params.userId === undefined ? null : String(params.userId);
448
- nativeModule.setUser(normalizedUserId, params.username ?? null);
449
- }
450
466
 
451
467
  /**
452
468
  * Result returned by notifyAppReady()
453
469
  */
454
470
 
471
+ /** An update applied or recovered at this launch, as native persisted it. */
472
+
455
473
  const isPersistedUpdateStrategy = value => {
456
474
  return value === "appVersion" || value === "fingerprint";
457
475
  };
@@ -517,7 +535,7 @@ const getNotifyAppReadyTransition = result => {
517
535
  }
518
536
  return null;
519
537
  };
520
- const getNotifyAppReadyInsightsEvent = result => {
538
+ const getLaunchTransition = result => {
521
539
  const transition = getNotifyAppReadyTransition(result);
522
540
  if (!transition || !isPersistedUpdateStrategy(result.updateStrategy)) {
523
541
  return null;
@@ -526,12 +544,8 @@ const getNotifyAppReadyInsightsEvent = result => {
526
544
  type: transition.status,
527
545
  fromBundleId: transition.fromBundleId,
528
546
  toBundleId: transition.toBundleId,
529
- ...(transition.fromReleaseId === null ? {} : {
530
- fromReleaseId: transition.fromReleaseId
531
- }),
532
- ...(transition.toReleaseId === null ? {} : {
533
- toReleaseId: transition.toReleaseId
534
- }),
547
+ fromReleaseId: transition.fromReleaseId,
548
+ toReleaseId: transition.toReleaseId,
535
549
  updateStrategy: result.updateStrategy
536
550
  };
537
551
  };
@@ -556,9 +570,13 @@ const normalizeNotifyAppReadyResult = result => {
556
570
  };
557
571
  export const readNotifyAppReady = () => {
558
572
  const rawResult = readRawNotifyAppReadyResult();
573
+ const {
574
+ previousProcessExit
575
+ } = rawResult;
559
576
  return {
560
577
  result: normalizeNotifyAppReadyResult(rawResult),
561
- insightsEvent: getNotifyAppReadyInsightsEvent(rawResult),
578
+ transition: getLaunchTransition(rawResult),
579
+ previousProcessExit: typeof previousProcessExit === "string" && previousProcessExit !== "" ? previousProcessExit : null,
562
580
  pending: rawResult.status === "PENDING"
563
581
  };
564
582
  };