@hot-updater/react-native 1.0.0-rc.4 → 1.0.0-rc.40

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 (306) hide show
  1. package/android/build.gradle +13 -2
  2. package/android/proguard-rules.pro +8 -2
  3. package/android/src/bridge/BridgeReactInstance.kt +38 -0
  4. package/android/src/bridgeless/BridgeReactInstance.kt +24 -0
  5. package/android/src/main/java/com/hotupdater/ActivityStartGate.kt +94 -0
  6. package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
  7. package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +1064 -844
  8. package/android/src/main/java/com/hotupdater/BundleMetadata.kt +50 -11
  9. package/android/src/main/java/com/hotupdater/FileManagerService.kt +45 -0
  10. package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +287 -22
  11. package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +46 -30
  12. package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryManager.kt +75 -192
  13. package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryState.kt +64 -0
  14. package/android/src/main/java/com/hotupdater/InstallIdentityService.kt +37 -0
  15. package/android/src/main/java/com/hotupdater/KeyValueStorageService.kt +86 -0
  16. package/android/src/main/java/com/hotupdater/NetworkState.kt +31 -0
  17. package/android/src/main/java/com/hotupdater/NoBackupStorage.kt +17 -0
  18. package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +127 -50
  19. package/android/src/main/java/com/hotupdater/ReactNativeValueConverters.kt +34 -0
  20. package/android/src/main/java/com/hotupdater/TarArchiveInputStream.kt +214 -375
  21. package/android/src/main/java/com/hotupdater/TarBrArchiveExtractor.kt +119 -0
  22. package/android/src/newarch/HotUpdater.kt +7 -9
  23. package/android/src/newarch/HotUpdaterModule.kt +109 -84
  24. package/android/src/newarch/JavaScriptExceptionHooks.kt +48 -0
  25. package/android/src/newarch/ReactIntegrationManager.kt +6 -32
  26. package/android/src/oldarch/HotUpdater.kt +7 -9
  27. package/android/src/oldarch/HotUpdaterModule.kt +98 -74
  28. package/android/src/oldarch/HotUpdaterSpec.kt +4 -6
  29. package/android/src/oldarch/JavaScriptExceptionHooks.kt +71 -0
  30. package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
  31. package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
  32. package/ios/HotUpdater/Internal/BundleFileStorageService.swift +1032 -1116
  33. package/ios/HotUpdater/Internal/BundleMetadata.swift +61 -54
  34. package/ios/HotUpdater/Internal/FileManagerService.swift +48 -0
  35. package/ios/HotUpdater/Internal/FileUtilities.swift +64 -0
  36. package/ios/HotUpdater/Internal/HotUpdater-Bridging-Header.h +0 -1
  37. package/ios/HotUpdater/Internal/HotUpdater.mm +32 -67
  38. package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +229 -73
  39. package/ios/HotUpdater/Internal/KeyValueStorageService.swift +71 -0
  40. package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
  41. package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
  42. package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +119 -71
  43. package/ios/HotUpdater/Internal/UpdateFailure.swift +390 -0
  44. package/ios/HotUpdater/Recovery/HotUpdaterRecovery.h +16 -0
  45. package/ios/HotUpdater/Recovery/HotUpdaterRecovery.mm +83 -0
  46. package/ios/HotUpdater/Recovery/HotUpdaterRecoveryHooks.mm +49 -0
  47. package/lib/commonjs/appReady.js +102 -0
  48. package/lib/commonjs/appReady.js.map +1 -0
  49. package/lib/commonjs/checkForUpdate.js +120 -68
  50. package/lib/commonjs/checkForUpdate.js.map +1 -1
  51. package/lib/commonjs/clientPlugin.js +13 -0
  52. package/lib/commonjs/clientPlugin.js.map +1 -0
  53. package/lib/commonjs/error.js +4 -13
  54. package/lib/commonjs/error.js.map +1 -1
  55. package/lib/commonjs/fetchJSON.js +16 -27
  56. package/lib/commonjs/fetchJSON.js.map +1 -1
  57. package/lib/commonjs/fetchUpdateResponse.js +60 -0
  58. package/lib/commonjs/fetchUpdateResponse.js.map +1 -0
  59. package/lib/commonjs/httpClient.js +63 -94
  60. package/lib/commonjs/httpClient.js.map +1 -1
  61. package/lib/commonjs/index.js +71 -18
  62. package/lib/commonjs/index.js.map +1 -1
  63. package/lib/commonjs/native.js +74 -60
  64. package/lib/commonjs/native.js.map +1 -1
  65. package/lib/commonjs/pluginHost.js +45 -0
  66. package/lib/commonjs/pluginHost.js.map +1 -0
  67. package/lib/commonjs/releaseCatalogCache.js +36 -87
  68. package/lib/commonjs/releaseCatalogCache.js.map +1 -1
  69. package/lib/commonjs/sdkVersion.js +1 -1
  70. package/lib/commonjs/sdkVersion.js.map +1 -1
  71. package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
  72. package/lib/commonjs/store.js +3 -10
  73. package/lib/commonjs/store.js.map +1 -1
  74. package/lib/commonjs/updateError.js +145 -0
  75. package/lib/commonjs/updateError.js.map +1 -0
  76. package/lib/commonjs/wrap.js +43 -26
  77. package/lib/commonjs/wrap.js.map +1 -1
  78. package/lib/module/appReady.js +95 -0
  79. package/lib/module/appReady.js.map +1 -0
  80. package/lib/module/checkForUpdate.js +113 -63
  81. package/lib/module/checkForUpdate.js.map +1 -1
  82. package/lib/module/clientPlugin.js +4 -0
  83. package/lib/module/clientPlugin.js.map +1 -0
  84. package/lib/module/error.js +4 -13
  85. package/lib/module/error.js.map +1 -1
  86. package/lib/module/fetchJSON.js +14 -26
  87. package/lib/module/fetchJSON.js.map +1 -1
  88. package/lib/module/fetchUpdateResponse.js +55 -0
  89. package/lib/module/fetchUpdateResponse.js.map +1 -0
  90. package/lib/module/httpClient.js +62 -93
  91. package/lib/module/httpClient.js.map +1 -1
  92. package/lib/module/index.js +58 -20
  93. package/lib/module/index.js.map +1 -1
  94. package/lib/module/native.js +67 -53
  95. package/lib/module/native.js.map +1 -1
  96. package/lib/module/pluginHost.js +36 -0
  97. package/lib/module/pluginHost.js.map +1 -0
  98. package/lib/module/releaseCatalogCache.js +32 -82
  99. package/lib/module/releaseCatalogCache.js.map +1 -1
  100. package/lib/module/sdkVersion.js +1 -1
  101. package/lib/module/sdkVersion.js.map +1 -1
  102. package/lib/module/specs/NativeHotUpdater.js.map +1 -1
  103. package/lib/module/store.js +3 -10
  104. package/lib/module/store.js.map +1 -1
  105. package/lib/module/updateError.js +139 -0
  106. package/lib/module/updateError.js.map +1 -0
  107. package/lib/module/wrap.js +43 -26
  108. package/lib/module/wrap.js.map +1 -1
  109. package/lib/typescript/commonjs/appReady.d.ts +21 -0
  110. package/lib/typescript/commonjs/appReady.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/checkForUpdate.d.ts +16 -4
  112. package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/clientPlugin.d.ts +2 -0
  114. package/lib/typescript/commonjs/clientPlugin.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/error.d.ts +4 -13
  116. package/lib/typescript/commonjs/error.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/fetchJSON.d.ts +5 -5
  118. package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/fetchUpdateResponse.d.ts +14 -0
  120. package/lib/typescript/commonjs/fetchUpdateResponse.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/httpClient.d.ts +4 -33
  122. package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/index.d.ts +4 -8
  124. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/native.d.ts +29 -22
  126. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/pluginHost.d.ts +4 -0
  128. package/lib/typescript/commonjs/pluginHost.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/releaseCatalogCache.d.ts +8 -14
  130. package/lib/typescript/commonjs/releaseCatalogCache.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
  132. package/lib/typescript/commonjs/sdkVersion.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +35 -47
  134. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/store.d.ts +1 -3
  136. package/lib/typescript/commonjs/store.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/types.d.ts +1 -1
  138. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/updateError.d.ts +26 -0
  140. package/lib/typescript/commonjs/updateError.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/wrap.types.d.ts +6 -7
  143. package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
  144. package/lib/typescript/module/appReady.d.ts +21 -0
  145. package/lib/typescript/module/appReady.d.ts.map +1 -0
  146. package/lib/typescript/module/checkForUpdate.d.ts +16 -4
  147. package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
  148. package/lib/typescript/module/clientPlugin.d.ts +2 -0
  149. package/lib/typescript/module/clientPlugin.d.ts.map +1 -0
  150. package/lib/typescript/module/error.d.ts +4 -13
  151. package/lib/typescript/module/error.d.ts.map +1 -1
  152. package/lib/typescript/module/fetchJSON.d.ts +5 -5
  153. package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
  154. package/lib/typescript/module/fetchUpdateResponse.d.ts +14 -0
  155. package/lib/typescript/module/fetchUpdateResponse.d.ts.map +1 -0
  156. package/lib/typescript/module/httpClient.d.ts +4 -33
  157. package/lib/typescript/module/httpClient.d.ts.map +1 -1
  158. package/lib/typescript/module/index.d.ts +4 -8
  159. package/lib/typescript/module/index.d.ts.map +1 -1
  160. package/lib/typescript/module/native.d.ts +29 -22
  161. package/lib/typescript/module/native.d.ts.map +1 -1
  162. package/lib/typescript/module/pluginHost.d.ts +4 -0
  163. package/lib/typescript/module/pluginHost.d.ts.map +1 -0
  164. package/lib/typescript/module/releaseCatalogCache.d.ts +8 -14
  165. package/lib/typescript/module/releaseCatalogCache.d.ts.map +1 -1
  166. package/lib/typescript/module/sdkVersion.d.ts +1 -1
  167. package/lib/typescript/module/sdkVersion.d.ts.map +1 -1
  168. package/lib/typescript/module/specs/NativeHotUpdater.d.ts +35 -47
  169. package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
  170. package/lib/typescript/module/store.d.ts +1 -3
  171. package/lib/typescript/module/store.d.ts.map +1 -1
  172. package/lib/typescript/module/types.d.ts +1 -1
  173. package/lib/typescript/module/types.d.ts.map +1 -1
  174. package/lib/typescript/module/updateError.d.ts +26 -0
  175. package/lib/typescript/module/updateError.d.ts.map +1 -0
  176. package/lib/typescript/module/wrap.d.ts.map +1 -1
  177. package/lib/typescript/module/wrap.types.d.ts +6 -7
  178. package/lib/typescript/module/wrap.types.d.ts.map +1 -1
  179. package/package.json +7 -4
  180. package/src/appReady.ts +141 -0
  181. package/src/checkForUpdate.ts +145 -86
  182. package/src/clientPlugin.ts +18 -0
  183. package/src/error.ts +4 -14
  184. package/src/fetchJSON.ts +14 -30
  185. package/src/fetchUpdateResponse.ts +60 -0
  186. package/src/httpClient.ts +88 -159
  187. package/src/index.ts +90 -24
  188. package/src/native.ts +98 -102
  189. package/src/pluginHost.ts +47 -0
  190. package/src/releaseCatalogCache.ts +43 -172
  191. package/src/sdkVersion.ts +1 -1
  192. package/src/specs/NativeHotUpdater.ts +34 -48
  193. package/src/store.ts +2 -23
  194. package/src/types.ts +1 -1
  195. package/src/updateError.ts +167 -0
  196. package/src/wrap.tsx +57 -26
  197. package/src/wrap.types.ts +6 -7
  198. package/android/src/main/java/com/hotupdater/DecompressService.kt +0 -89
  199. package/android/src/main/java/com/hotupdater/DecompressionStrategy.kt +0 -26
  200. package/android/src/main/java/com/hotupdater/TarBrDecompressionStrategy.kt +0 -117
  201. package/android/src/main/java/com/hotupdater/TarGzDecompressionStrategy.kt +0 -117
  202. package/android/src/main/java/com/hotupdater/ZipDecompressionStrategy.kt +0 -192
  203. package/android/src/test/java/com/hotupdater/BsdiffPatchTest.kt +0 -46
  204. package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +0 -799
  205. package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +0 -273
  206. package/android/src/test/java/com/hotupdater/NativeConfigUtilsTest.kt +0 -20
  207. package/android/src/test/java/com/hotupdater/OkHttpDownloadServiceTest.kt +0 -111
  208. package/android/src/test/java/com/hotupdater/RelativePathResolverTest.kt +0 -41
  209. package/android/src/test/java/com/hotupdater/ReleaseCatalogCacheServiceTest.kt +0 -118
  210. package/android/src/test/java/com/hotupdater/TarArchiveInputStreamTest.kt +0 -68
  211. package/ios/HotUpdater/Internal/ArchiveExtractionUtilities.swift +0 -178
  212. package/ios/HotUpdater/Internal/DecompressService.swift +0 -112
  213. package/ios/HotUpdater/Internal/DecompressionStrategy.swift +0 -22
  214. package/ios/HotUpdater/Internal/StreamingTarArchiveExtractor.swift +0 -370
  215. package/ios/HotUpdater/Internal/TarBrDecompressionStrategy.swift +0 -39
  216. package/ios/HotUpdater/Internal/TarGzDecompressionStrategy.swift +0 -59
  217. package/ios/HotUpdater/Internal/ZipArchiveExtractor.swift +0 -482
  218. package/ios/HotUpdater/Internal/ZipDecompressionStrategy.swift +0 -56
  219. package/lib/commonjs/catalogCacheNative.spec.js +0 -31
  220. package/lib/commonjs/catalogCacheNative.spec.js.map +0 -1
  221. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +0 -616
  222. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  223. package/lib/commonjs/httpClient.spec.js +0 -102
  224. package/lib/commonjs/httpClient.spec.js.map +0 -1
  225. package/lib/commonjs/index.spec.js +0 -302
  226. package/lib/commonjs/index.spec.js.map +0 -1
  227. package/lib/commonjs/iosInterop.spec.js +0 -18
  228. package/lib/commonjs/iosInterop.spec.js.map +0 -1
  229. package/lib/commonjs/native.spec.js +0 -883
  230. package/lib/commonjs/native.spec.js.map +0 -1
  231. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +0 -218
  232. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  233. package/lib/commonjs/notifyAppReadyInsights.js +0 -133
  234. package/lib/commonjs/notifyAppReadyInsights.js.map +0 -1
  235. package/lib/commonjs/notifyAppReadyInsights.spec.js +0 -246
  236. package/lib/commonjs/notifyAppReadyInsights.spec.js.map +0 -1
  237. package/lib/commonjs/notifyAppReadyInsights.test-utils.js +0 -24
  238. package/lib/commonjs/notifyAppReadyInsights.test-utils.js.map +0 -1
  239. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +0 -117
  240. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +0 -1
  241. package/lib/commonjs/releaseCatalogCache.spec.js +0 -195
  242. package/lib/commonjs/releaseCatalogCache.spec.js.map +0 -1
  243. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js +0 -64
  244. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  245. package/lib/commonjs/store.notification.spec.js +0 -76
  246. package/lib/commonjs/store.notification.spec.js.map +0 -1
  247. package/lib/commonjs/store.spec.js +0 -316
  248. package/lib/commonjs/store.spec.js.map +0 -1
  249. package/lib/commonjs/wrap.spec.js +0 -329
  250. package/lib/commonjs/wrap.spec.js.map +0 -1
  251. package/lib/module/catalogCacheNative.spec.js +0 -31
  252. package/lib/module/catalogCacheNative.spec.js.map +0 -1
  253. package/lib/module/checkForUpdate.releaseCatalog.spec.js +0 -615
  254. package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  255. package/lib/module/httpClient.spec.js +0 -102
  256. package/lib/module/httpClient.spec.js.map +0 -1
  257. package/lib/module/index.spec.js +0 -301
  258. package/lib/module/index.spec.js.map +0 -1
  259. package/lib/module/iosInterop.spec.js +0 -18
  260. package/lib/module/iosInterop.spec.js.map +0 -1
  261. package/lib/module/native.spec.js +0 -882
  262. package/lib/module/native.spec.js.map +0 -1
  263. package/lib/module/notifyAppReadyInsights.boundary.spec.js +0 -217
  264. package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  265. package/lib/module/notifyAppReadyInsights.js +0 -128
  266. package/lib/module/notifyAppReadyInsights.js.map +0 -1
  267. package/lib/module/notifyAppReadyInsights.spec.js +0 -245
  268. package/lib/module/notifyAppReadyInsights.spec.js.map +0 -1
  269. package/lib/module/notifyAppReadyInsights.test-utils.js +0 -18
  270. package/lib/module/notifyAppReadyInsights.test-utils.js.map +0 -1
  271. package/lib/module/notifyAppReadyInsights.transport.spec.js +0 -116
  272. package/lib/module/notifyAppReadyInsights.transport.spec.js.map +0 -1
  273. package/lib/module/releaseCatalogCache.spec.js +0 -195
  274. package/lib/module/releaseCatalogCache.spec.js.map +0 -1
  275. package/lib/module/releaseCatalogCacheNativeContract.spec.js +0 -64
  276. package/lib/module/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  277. package/lib/module/store.notification.spec.js +0 -77
  278. package/lib/module/store.notification.spec.js.map +0 -1
  279. package/lib/module/store.spec.js +0 -315
  280. package/lib/module/store.spec.js.map +0 -1
  281. package/lib/module/wrap.spec.js +0 -330
  282. package/lib/module/wrap.spec.js.map +0 -1
  283. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +0 -13
  284. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +0 -1
  285. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts +0 -8
  286. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  287. package/lib/typescript/module/notifyAppReadyInsights.d.ts +0 -13
  288. package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +0 -1
  289. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts +0 -8
  290. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  291. package/src/catalogCacheNative.spec.ts +0 -63
  292. package/src/checkForUpdate.releaseCatalog.spec.ts +0 -612
  293. package/src/httpClient.spec.ts +0 -132
  294. package/src/index.spec.ts +0 -337
  295. package/src/iosInterop.spec.ts +0 -30
  296. package/src/native.spec.ts +0 -945
  297. package/src/notifyAppReadyInsights.boundary.spec.ts +0 -234
  298. package/src/notifyAppReadyInsights.spec.ts +0 -243
  299. package/src/notifyAppReadyInsights.test-utils.ts +0 -31
  300. package/src/notifyAppReadyInsights.transport.spec.ts +0 -130
  301. package/src/notifyAppReadyInsights.ts +0 -194
  302. package/src/releaseCatalogCache.spec.ts +0 -282
  303. package/src/releaseCatalogCacheNativeContract.spec.ts +0 -80
  304. package/src/store.notification.spec.ts +0 -92
  305. package/src/store.spec.ts +0 -372
  306. 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;AACA;AACA;AACA;AACA;AACA;AACA;IACIH,cAAc,EAAGyE,MAA6B,IAAK;MACjD,MAAM/B,MAAM,GAAG2B,kBAAkB,CAAC,gBAAgB,CAAC;MAEnD,MAAMK,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACT/B,MAAM;QACNoB,cAAc,EAAE;UACd,GAAGrB,YAAY,CAACqB,cAAc;UAC9B,GAAGW,MAAM,CAACX;QACZ,CAAC;QACDC,cAAc,EAAEU,MAAM,CAACV,cAAc,IAAItB,YAAY,CAACsB,cAAc;QACpEC,OAAO,EAAES,MAAM,CAACT,OAAO,IAAIvB,YAAY,CAACuB;MAC1C,CAAC;MAED,OAAOhE,cAAc,CAAC0E,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;IACIC,YAAY,EAAE,MAAOC,MAAoB,IAAK;MAC5CP,kBAAkB,CAAC,cAAc,CAAC;MAClC,MAAMQ,YAAY,GAAGvE,WAAW,CAAC,CAAC;MAClC,MAAMwE,KAAK,GAAGzE,oBAAoB,CAAC,CAAC;MACpC,MAAM0E,MAAM,GAAGD,KAAK,CAACE,eAAe;MACpC,MAAMC,aAAa,GACjBF,MAAM,EAAEG,QAAQ,KAAKL,YAAY,GAC7BE,MAAM,CAACI,SAAS,GAChBL,KAAK,CAACM,eAAe,EAAEF,QAAQ,KAAKL,YAAY,GAC9CC,KAAK,CAACM,eAAe,CAACD,SAAS,GAC/B,IAAI;MACZ,MAAME,OAAO,GAAGT,MAAM,CAACS,OAAO,IAAI1E,UAAU,CAAC,CAAC;MAC9C,MAAM2E,UAAU,GAAIC,QAAmC,IACrDA,QAAQ,EAAEC,UAAU,CAAC,iBAAiB,CAAC,GAAG,aAAa,GAAG,YAAY;MACxE,IAAIC,QAAiD;MACrD,IAAI;QACFA,QAAQ,GAAG,MAAMhE,WAAW,CAACmD,MAAM,CAAC;MACtC,CAAC,CAAC,OAAOR,KAAK,EAAE;QACdnE,iBAAiB,CAACmE,KAAK,EAAE,UAAU,EAAEsB,SAAS,EAAE;UAC9CR,QAAQ,EAAEL,YAAY;UACtBQ,OAAO;UACPM,cAAc,EAAEf,MAAM,CAACM,QAAQ;UAC/BU,eAAe,EACZhB,MAAM,CAACiB,SAAS,EACbV,SAAS,IAAI,IAAI;UACvBW,cAAc,EAAER,UAAU,CACvBV,MAAM,CAACiB,SAAS,EACbN,QACN;QACF,CAAC,CAAC;QACF,MAAMnB,KAAK;MACb;MACA,IAAIqB,QAAQ,KAAK,IAAI,IAAIb,MAAM,CAACM,QAAQ,KAAKL,YAAY,EAAE;QACzD9E,iBAAiB,CAAC,oBAAoB,EAAE,MAAM;UAC5C,MAAM8F,SAAS,GAAGxF,oBAAoB,CAAC,CAAC,CAAC2E,eAAe;UACxD,OAAO;YACLK,OAAO;YACPR,YAAY;YACZI,aAAa;YACbc,UAAU,EAAEnB,MAAM,CAACM,QAAQ;YAC3Bc,WAAW,EAAEH,SAAS,EAAEV,SAAS,IAAI,IAAI;YACzCW,cAAc,EAAER,UAAU,CAACO,SAAS,EAAEN,QAAQ,CAAC;YAC/C,GAAGE;UACL,CAAC;QACH,CAAC,CAAC;MACJ;MACA,OAAO,IAAI;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;IACInE,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAM2E,EAAE,GAAG,MAAM3E,YAAY,CAAC,CAAC;MAC/B,IAAI2E,EAAE,EAAE;QACNtE,eAAe,CAACuE,QAAQ,CAAC;UACvBC,YAAY,EAAE,IAAI;UAClBC,OAAO,EAAE,IAAI;UACb7B,kBAAkB,EAAE,KAAK;UACzB8B,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOJ,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIlF,kBAAkB;IAElB;AACJ;AACA;IACIC,YAAY;IAEZ;AACJ;AACA;IACII,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,MAAM+F,UAA4B,GAAGhE,sBAAsB,CAAC,CAAC","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
  };
@@ -558,7 +572,7 @@ export const readNotifyAppReady = () => {
558
572
  const rawResult = readRawNotifyAppReadyResult();
559
573
  return {
560
574
  result: normalizeNotifyAppReadyResult(rawResult),
561
- insightsEvent: getNotifyAppReadyInsightsEvent(rawResult),
575
+ transition: getLaunchTransition(rawResult),
562
576
  pending: rawResult.status === "PENDING"
563
577
  };
564
578
  };