@hot-updater/react-native 1.0.0-rc.16 → 1.0.0-rc.17

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 (316) hide show
  1. package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +491 -388
  2. package/android/src/main/java/com/hotupdater/BundleMetadata.kt +5 -11
  3. package/android/src/main/java/com/hotupdater/FileManagerService.kt +45 -0
  4. package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +290 -12
  5. package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +35 -19
  6. package/android/src/main/java/com/hotupdater/InstallIdentityService.kt +37 -0
  7. package/android/src/main/java/com/hotupdater/KeyValueStorageService.kt +86 -0
  8. package/android/src/main/java/com/hotupdater/NetworkState.kt +31 -0
  9. package/android/src/main/java/com/hotupdater/NoBackupStorage.kt +17 -0
  10. package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +110 -52
  11. package/android/src/main/java/com/hotupdater/PreviousProcessExit.kt +89 -0
  12. package/android/src/main/java/com/hotupdater/ReactNativeValueConverters.kt +34 -0
  13. package/android/src/newarch/HotUpdaterModule.kt +74 -69
  14. package/android/src/oldarch/HotUpdaterModule.kt +63 -59
  15. package/android/src/oldarch/HotUpdaterSpec.kt +4 -6
  16. package/android/src/test/java/com/hotupdater/BsdiffPatchTest.kt +1 -1
  17. package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +446 -61
  18. package/android/src/test/java/com/hotupdater/HotUpdaterExceptionTest.kt +220 -0
  19. package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +19 -27
  20. package/android/src/test/java/com/hotupdater/InstallIdentityServiceTest.kt +71 -0
  21. package/android/src/test/java/com/hotupdater/KeyValueStorageServiceTest.kt +106 -0
  22. package/android/src/test/java/com/hotupdater/NoBackupContext.kt +11 -0
  23. package/android/src/test/java/com/hotupdater/OkHttpDownloadServiceTest.kt +309 -23
  24. package/android/src/test/java/com/hotupdater/PreviousProcessExitTest.kt +57 -0
  25. package/ios/HotUpdater/Internal/BundleFileStorageService.swift +238 -157
  26. package/ios/HotUpdater/Internal/BundleMetadata.swift +3 -53
  27. package/ios/HotUpdater/Internal/FileManagerService.swift +48 -0
  28. package/ios/HotUpdater/Internal/HotUpdater.mm +8 -18
  29. package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +48 -29
  30. package/ios/HotUpdater/Internal/KeyValueStorageService.swift +71 -0
  31. package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +108 -1
  32. package/ios/HotUpdater/Internal/UpdateFailure.swift +390 -0
  33. package/lib/commonjs/appReady.js +111 -0
  34. package/lib/commonjs/appReady.js.map +1 -0
  35. package/lib/commonjs/appReady.spec.js +360 -0
  36. package/lib/commonjs/appReady.spec.js.map +1 -0
  37. package/lib/commonjs/{notifyAppReadyInsights.test-utils.js → appReady.test-utils.js} +4 -3
  38. package/lib/commonjs/appReady.test-utils.js.map +1 -0
  39. package/lib/commonjs/baseURL.js +16 -0
  40. package/lib/commonjs/baseURL.js.map +1 -0
  41. package/lib/commonjs/checkForUpdate.js +104 -56
  42. package/lib/commonjs/checkForUpdate.js.map +1 -1
  43. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +337 -74
  44. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +1 -1
  45. package/lib/commonjs/clientPlugin.js +49 -0
  46. package/lib/commonjs/clientPlugin.js.map +1 -0
  47. package/lib/commonjs/entryImportGraph.spec.js +50 -0
  48. package/lib/commonjs/entryImportGraph.spec.js.map +1 -0
  49. package/lib/commonjs/fetchJSON.js +2 -6
  50. package/lib/commonjs/fetchJSON.js.map +1 -1
  51. package/lib/commonjs/httpClient.js +18 -165
  52. package/lib/commonjs/httpClient.js.map +1 -1
  53. package/lib/commonjs/httpClient.spec.js +26 -199
  54. package/lib/commonjs/httpClient.spec.js.map +1 -1
  55. package/lib/commonjs/index.js +49 -36
  56. package/lib/commonjs/index.js.map +1 -1
  57. package/lib/commonjs/index.spec.js +108 -123
  58. package/lib/commonjs/index.spec.js.map +1 -1
  59. package/lib/commonjs/native.js +67 -48
  60. package/lib/commonjs/native.js.map +1 -1
  61. package/lib/commonjs/native.spec.js +80 -58
  62. package/lib/commonjs/native.spec.js.map +1 -1
  63. package/lib/commonjs/pluginHost.js +208 -0
  64. package/lib/commonjs/pluginHost.js.map +1 -0
  65. package/lib/commonjs/pluginHost.spec.js +292 -0
  66. package/lib/commonjs/pluginHost.spec.js.map +1 -0
  67. package/lib/commonjs/plugins/insights/eventId.js +129 -0
  68. package/lib/commonjs/plugins/insights/eventId.js.map +1 -0
  69. package/lib/commonjs/plugins/insights/eventId.spec.js +47 -0
  70. package/lib/commonjs/plugins/insights/eventId.spec.js.map +1 -0
  71. package/lib/commonjs/plugins/insights/index.js +272 -0
  72. package/lib/commonjs/plugins/insights/index.js.map +1 -0
  73. package/lib/commonjs/plugins/insights/insights.spec.js +640 -0
  74. package/lib/commonjs/plugins/insights/insights.spec.js.map +1 -0
  75. package/lib/commonjs/plugins/insights/sender.js +128 -0
  76. package/lib/commonjs/plugins/insights/sender.js.map +1 -0
  77. package/lib/commonjs/plugins/insights/sender.spec.js +265 -0
  78. package/lib/commonjs/plugins/insights/sender.spec.js.map +1 -0
  79. package/lib/commonjs/plugins/insights/state.js +145 -0
  80. package/lib/commonjs/plugins/insights/state.js.map +1 -0
  81. package/lib/commonjs/releaseCatalogCache.js +13 -2
  82. package/lib/commonjs/releaseCatalogCache.js.map +1 -1
  83. package/lib/commonjs/releaseCatalogCache.spec.js +18 -0
  84. package/lib/commonjs/releaseCatalogCache.spec.js.map +1 -1
  85. package/lib/commonjs/sdkVersion.js +1 -1
  86. package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
  87. package/lib/commonjs/updateError.js +132 -0
  88. package/lib/commonjs/updateError.js.map +1 -0
  89. package/lib/commonjs/updateError.spec.js +149 -0
  90. package/lib/commonjs/updateError.spec.js.map +1 -0
  91. package/lib/commonjs/wrap.js +43 -25
  92. package/lib/commonjs/wrap.js.map +1 -1
  93. package/lib/commonjs/wrap.progress.spec.js +195 -0
  94. package/lib/commonjs/wrap.progress.spec.js.map +1 -0
  95. package/lib/commonjs/wrap.spec.js +94 -230
  96. package/lib/commonjs/wrap.spec.js.map +1 -1
  97. package/lib/module/appReady.js +103 -0
  98. package/lib/module/appReady.js.map +1 -0
  99. package/lib/module/appReady.spec.js +359 -0
  100. package/lib/module/appReady.spec.js.map +1 -0
  101. package/lib/module/{notifyAppReadyInsights.test-utils.js → appReady.test-utils.js} +4 -3
  102. package/lib/module/appReady.test-utils.js.map +1 -0
  103. package/lib/module/baseURL.js +11 -0
  104. package/lib/module/baseURL.js.map +1 -0
  105. package/lib/module/checkForUpdate.js +103 -57
  106. package/lib/module/checkForUpdate.js.map +1 -1
  107. package/lib/module/checkForUpdate.releaseCatalog.spec.js +337 -74
  108. package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +1 -1
  109. package/lib/module/clientPlugin.js +44 -0
  110. package/lib/module/clientPlugin.js.map +1 -0
  111. package/lib/module/entryImportGraph.spec.js +50 -0
  112. package/lib/module/entryImportGraph.spec.js.map +1 -0
  113. package/lib/module/fetchJSON.js +2 -6
  114. package/lib/module/fetchJSON.js.map +1 -1
  115. package/lib/module/httpClient.js +18 -165
  116. package/lib/module/httpClient.js.map +1 -1
  117. package/lib/module/httpClient.spec.js +27 -200
  118. package/lib/module/httpClient.spec.js.map +1 -1
  119. package/lib/module/index.js +44 -38
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/index.spec.js +108 -123
  122. package/lib/module/index.spec.js.map +1 -1
  123. package/lib/module/native.js +63 -44
  124. package/lib/module/native.js.map +1 -1
  125. package/lib/module/native.spec.js +80 -58
  126. package/lib/module/native.spec.js.map +1 -1
  127. package/lib/module/pluginHost.js +200 -0
  128. package/lib/module/pluginHost.js.map +1 -0
  129. package/lib/module/pluginHost.spec.js +291 -0
  130. package/lib/module/pluginHost.spec.js.map +1 -0
  131. package/lib/module/plugins/insights/eventId.js +122 -0
  132. package/lib/module/plugins/insights/eventId.js.map +1 -0
  133. package/lib/module/plugins/insights/eventId.spec.js +47 -0
  134. package/lib/module/plugins/insights/eventId.spec.js.map +1 -0
  135. package/lib/module/plugins/insights/index.js +268 -0
  136. package/lib/module/plugins/insights/index.js.map +1 -0
  137. package/lib/module/plugins/insights/insights.spec.js +639 -0
  138. package/lib/module/plugins/insights/insights.spec.js.map +1 -0
  139. package/lib/module/plugins/insights/sender.js +123 -0
  140. package/lib/module/plugins/insights/sender.js.map +1 -0
  141. package/lib/module/plugins/insights/sender.spec.js +265 -0
  142. package/lib/module/plugins/insights/sender.spec.js.map +1 -0
  143. package/lib/module/plugins/insights/state.js +139 -0
  144. package/lib/module/plugins/insights/state.js.map +1 -0
  145. package/lib/module/releaseCatalogCache.js +13 -2
  146. package/lib/module/releaseCatalogCache.js.map +1 -1
  147. package/lib/module/releaseCatalogCache.spec.js +18 -0
  148. package/lib/module/releaseCatalogCache.spec.js.map +1 -1
  149. package/lib/module/sdkVersion.js +1 -1
  150. package/lib/module/specs/NativeHotUpdater.js.map +1 -1
  151. package/lib/module/updateError.js +126 -0
  152. package/lib/module/updateError.js.map +1 -0
  153. package/lib/module/updateError.spec.js +149 -0
  154. package/lib/module/updateError.spec.js.map +1 -0
  155. package/lib/module/wrap.js +43 -25
  156. package/lib/module/wrap.js.map +1 -1
  157. package/lib/module/wrap.progress.spec.js +196 -0
  158. package/lib/module/wrap.progress.spec.js.map +1 -0
  159. package/lib/module/wrap.spec.js +93 -229
  160. package/lib/module/wrap.spec.js.map +1 -1
  161. package/lib/typescript/commonjs/appReady.d.ts +23 -0
  162. package/lib/typescript/commonjs/appReady.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/appReady.test-utils.d.ts +9 -0
  164. package/lib/typescript/commonjs/appReady.test-utils.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/baseURL.d.ts +4 -0
  166. package/lib/typescript/commonjs/baseURL.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/checkForUpdate.d.ts +15 -2
  168. package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/clientPlugin.d.ts +185 -0
  170. package/lib/typescript/commonjs/clientPlugin.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/fetchJSON.d.ts +2 -3
  172. package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/httpClient.d.ts +2 -36
  174. package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/index.d.ts +3 -6
  176. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/native.d.ts +29 -15
  178. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/pluginHost.d.ts +29 -0
  180. package/lib/typescript/commonjs/pluginHost.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/plugins/insights/eventId.d.ts +18 -0
  182. package/lib/typescript/commonjs/plugins/insights/eventId.d.ts.map +1 -0
  183. package/lib/typescript/commonjs/plugins/insights/index.d.ts +40 -0
  184. package/lib/typescript/commonjs/plugins/insights/index.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/plugins/insights/sender.d.ts +74 -0
  186. package/lib/typescript/commonjs/plugins/insights/sender.d.ts.map +1 -0
  187. package/lib/typescript/commonjs/plugins/insights/state.d.ts +46 -0
  188. package/lib/typescript/commonjs/plugins/insights/state.d.ts.map +1 -0
  189. package/lib/typescript/commonjs/releaseCatalogCache.d.ts +5 -1
  190. package/lib/typescript/commonjs/releaseCatalogCache.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
  192. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +34 -12
  193. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
  194. package/lib/typescript/commonjs/updateError.d.ts +26 -0
  195. package/lib/typescript/commonjs/updateError.d.ts.map +1 -0
  196. package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
  197. package/lib/typescript/commonjs/wrap.types.d.ts +6 -10
  198. package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
  199. package/lib/typescript/module/appReady.d.ts +23 -0
  200. package/lib/typescript/module/appReady.d.ts.map +1 -0
  201. package/lib/typescript/module/appReady.test-utils.d.ts +9 -0
  202. package/lib/typescript/module/appReady.test-utils.d.ts.map +1 -0
  203. package/lib/typescript/module/baseURL.d.ts +4 -0
  204. package/lib/typescript/module/baseURL.d.ts.map +1 -0
  205. package/lib/typescript/module/checkForUpdate.d.ts +15 -2
  206. package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
  207. package/lib/typescript/module/clientPlugin.d.ts +185 -0
  208. package/lib/typescript/module/clientPlugin.d.ts.map +1 -0
  209. package/lib/typescript/module/fetchJSON.d.ts +2 -3
  210. package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
  211. package/lib/typescript/module/httpClient.d.ts +2 -36
  212. package/lib/typescript/module/httpClient.d.ts.map +1 -1
  213. package/lib/typescript/module/index.d.ts +3 -6
  214. package/lib/typescript/module/index.d.ts.map +1 -1
  215. package/lib/typescript/module/native.d.ts +29 -15
  216. package/lib/typescript/module/native.d.ts.map +1 -1
  217. package/lib/typescript/module/pluginHost.d.ts +29 -0
  218. package/lib/typescript/module/pluginHost.d.ts.map +1 -0
  219. package/lib/typescript/module/plugins/insights/eventId.d.ts +18 -0
  220. package/lib/typescript/module/plugins/insights/eventId.d.ts.map +1 -0
  221. package/lib/typescript/module/plugins/insights/index.d.ts +40 -0
  222. package/lib/typescript/module/plugins/insights/index.d.ts.map +1 -0
  223. package/lib/typescript/module/plugins/insights/sender.d.ts +74 -0
  224. package/lib/typescript/module/plugins/insights/sender.d.ts.map +1 -0
  225. package/lib/typescript/module/plugins/insights/state.d.ts +46 -0
  226. package/lib/typescript/module/plugins/insights/state.d.ts.map +1 -0
  227. package/lib/typescript/module/releaseCatalogCache.d.ts +5 -1
  228. package/lib/typescript/module/releaseCatalogCache.d.ts.map +1 -1
  229. package/lib/typescript/module/sdkVersion.d.ts +1 -1
  230. package/lib/typescript/module/specs/NativeHotUpdater.d.ts +34 -12
  231. package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
  232. package/lib/typescript/module/updateError.d.ts +26 -0
  233. package/lib/typescript/module/updateError.d.ts.map +1 -0
  234. package/lib/typescript/module/wrap.d.ts.map +1 -1
  235. package/lib/typescript/module/wrap.types.d.ts +6 -10
  236. package/lib/typescript/module/wrap.types.d.ts.map +1 -1
  237. package/package.json +14 -2
  238. package/plugins/insights/package.json +8 -0
  239. package/src/appReady.spec.ts +393 -0
  240. package/src/{notifyAppReadyInsights.test-utils.ts → appReady.test-utils.ts} +7 -7
  241. package/src/appReady.ts +149 -0
  242. package/src/baseURL.ts +15 -0
  243. package/src/checkForUpdate.releaseCatalog.spec.ts +370 -76
  244. package/src/checkForUpdate.ts +135 -80
  245. package/src/clientPlugin.ts +231 -0
  246. package/src/entryImportGraph.spec.ts +65 -0
  247. package/src/fetchJSON.ts +3 -10
  248. package/src/httpClient.spec.ts +30 -227
  249. package/src/httpClient.ts +20 -256
  250. package/src/index.spec.ts +117 -93
  251. package/src/index.ts +67 -52
  252. package/src/native.spec.ts +98 -72
  253. package/src/native.ts +93 -77
  254. package/src/pluginHost.spec.ts +297 -0
  255. package/src/pluginHost.ts +262 -0
  256. package/src/plugins/insights/eventId.spec.ts +60 -0
  257. package/src/plugins/insights/eventId.ts +171 -0
  258. package/src/plugins/insights/index.ts +367 -0
  259. package/src/plugins/insights/insights.spec.ts +732 -0
  260. package/src/plugins/insights/sender.spec.ts +287 -0
  261. package/src/plugins/insights/sender.ts +221 -0
  262. package/src/plugins/insights/state.ts +184 -0
  263. package/src/releaseCatalogCache.spec.ts +22 -0
  264. package/src/releaseCatalogCache.ts +19 -4
  265. package/src/sdkVersion.ts +1 -1
  266. package/src/specs/NativeHotUpdater.ts +34 -13
  267. package/src/updateError.spec.ts +144 -0
  268. package/src/updateError.ts +153 -0
  269. package/src/wrap.progress.spec.ts +232 -0
  270. package/src/wrap.spec.ts +100 -283
  271. package/src/wrap.tsx +57 -26
  272. package/src/wrap.types.ts +6 -12
  273. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +0 -225
  274. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  275. package/lib/commonjs/notifyAppReadyInsights.js +0 -188
  276. package/lib/commonjs/notifyAppReadyInsights.js.map +0 -1
  277. package/lib/commonjs/notifyAppReadyInsights.spec.js +0 -378
  278. package/lib/commonjs/notifyAppReadyInsights.spec.js.map +0 -1
  279. package/lib/commonjs/notifyAppReadyInsights.test-utils.js.map +0 -1
  280. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +0 -171
  281. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +0 -1
  282. package/lib/commonjs/uuidv7.js +0 -41
  283. package/lib/commonjs/uuidv7.js.map +0 -1
  284. package/lib/commonjs/uuidv7.spec.js +0 -30
  285. package/lib/commonjs/uuidv7.spec.js.map +0 -1
  286. package/lib/module/notifyAppReadyInsights.boundary.spec.js +0 -224
  287. package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +0 -1
  288. package/lib/module/notifyAppReadyInsights.js +0 -181
  289. package/lib/module/notifyAppReadyInsights.js.map +0 -1
  290. package/lib/module/notifyAppReadyInsights.spec.js +0 -377
  291. package/lib/module/notifyAppReadyInsights.spec.js.map +0 -1
  292. package/lib/module/notifyAppReadyInsights.test-utils.js.map +0 -1
  293. package/lib/module/notifyAppReadyInsights.transport.spec.js +0 -170
  294. package/lib/module/notifyAppReadyInsights.transport.spec.js.map +0 -1
  295. package/lib/module/uuidv7.js +0 -36
  296. package/lib/module/uuidv7.js.map +0 -1
  297. package/lib/module/uuidv7.spec.js +0 -30
  298. package/lib/module/uuidv7.spec.js.map +0 -1
  299. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +0 -25
  300. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +0 -1
  301. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts +0 -8
  302. package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  303. package/lib/typescript/commonjs/uuidv7.d.ts +0 -10
  304. package/lib/typescript/commonjs/uuidv7.d.ts.map +0 -1
  305. package/lib/typescript/module/notifyAppReadyInsights.d.ts +0 -25
  306. package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +0 -1
  307. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts +0 -8
  308. package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
  309. package/lib/typescript/module/uuidv7.d.ts +0 -10
  310. package/lib/typescript/module/uuidv7.d.ts.map +0 -1
  311. package/src/notifyAppReadyInsights.boundary.spec.ts +0 -242
  312. package/src/notifyAppReadyInsights.spec.ts +0 -362
  313. package/src/notifyAppReadyInsights.transport.spec.ts +0 -196
  314. package/src/notifyAppReadyInsights.ts +0 -293
  315. package/src/uuidv7.spec.ts +0 -25
  316. package/src/uuidv7.ts +0 -38
@@ -174,7 +174,7 @@ class HotUpdaterModule internal constructor(
174
174
  try {
175
175
  val bundleId = params.getString("bundleId")
176
176
  if (bundleId == null || bundleId.isEmpty()) {
177
- promise.reject("MISSING_BUNDLE_ID", "Missing or empty 'bundleId'")
177
+ promise.rejectUpdateBundle(HotUpdaterException.missingBundleId())
178
178
  return@launch
179
179
  }
180
180
 
@@ -182,13 +182,15 @@ class HotUpdaterModule internal constructor(
182
182
  val manifestFileHash = params.getString("manifestFileHash")
183
183
  val assets = parseAssets(params)
184
184
  if (manifestUrl.isNullOrEmpty() || manifestFileHash.isNullOrEmpty() || assets == null) {
185
- promise.reject("INVALID_MANIFEST", "Manifest URL, hash, and assets are required")
185
+ promise.rejectUpdateBundle(HotUpdaterException.invalidManifestParams())
186
186
  return@launch
187
187
  }
188
188
  try {
189
189
  java.net.URL(manifestUrl)
190
190
  } catch (e: java.net.MalformedURLException) {
191
- promise.reject("INVALID_FILE_URL", "Invalid 'manifestUrl' provided: $manifestUrl")
191
+ promise.rejectUpdateBundle(
192
+ HotUpdaterException.invalidFileUrl("manifestUrl", manifestUrl, UpdateFailureResource.MANIFEST),
193
+ )
192
194
  return@launch
193
195
  }
194
196
  val channel = params.getString("channel")
@@ -202,7 +204,9 @@ class HotUpdaterModule internal constructor(
202
204
  try {
203
205
  java.net.URL(archiveUrl)
204
206
  } catch (e: java.net.MalformedURLException) {
205
- promise.reject("INVALID_FILE_URL", "Invalid 'archiveUrl' provided: $archiveUrl")
207
+ promise.rejectUpdateBundle(
208
+ HotUpdaterException.invalidFileUrl("archiveUrl", archiveUrl, UpdateFailureResource.ARCHIVE),
209
+ )
206
210
  return@launch
207
211
  }
208
212
  }
@@ -210,69 +214,72 @@ class HotUpdaterModule internal constructor(
210
214
 
211
215
  val impl = getInstance()
212
216
 
213
- impl.updateBundle(
214
- bundleId,
215
- manifestUrl,
216
- manifestFileHash,
217
- assets,
218
- channel,
219
- selection,
220
- archiveUrl,
221
- ) { progress ->
222
- // Post to Main thread for React Native event emission
223
- Handler(Looper.getMainLooper()).post {
224
- try {
225
- val progressParams =
226
- WritableNativeMap().apply {
227
- putDouble("progress", progress.progress)
228
- putString("artifactType", progress.artifactType)
229
- progress.details?.let { details ->
230
- putMap(
231
- "details",
232
- WritableNativeMap().apply {
233
- putInt("totalFilesCount", details.totalFilesCount)
234
- putInt("completedFilesCount", details.completedFilesCount)
235
- putArray(
236
- "files",
237
- WritableNativeArray().apply {
238
- details.files.forEach { file ->
239
- pushMap(
240
- WritableNativeMap().apply {
241
- putString("path", file.path)
242
- putString("downloadPath", file.downloadPath)
243
- putString("status", file.status)
244
- putDouble("progress", file.progress)
245
- putInt("order", file.order)
246
- file.downloadedBytes?.let {
247
- putDouble(
248
- "downloadedBytes",
249
- it.toDouble(),
250
- )
251
- }
252
- file.totalBytes?.let { putDouble("totalBytes", it.toDouble()) }
253
- },
254
- )
255
- }
256
- },
257
- )
258
- },
259
- )
217
+ val result =
218
+ impl.updateBundle(
219
+ bundleId,
220
+ manifestUrl,
221
+ manifestFileHash,
222
+ assets,
223
+ channel,
224
+ selection,
225
+ archiveUrl,
226
+ ) { progress ->
227
+ // Post to Main thread for React Native event emission
228
+ Handler(Looper.getMainLooper()).post {
229
+ try {
230
+ val progressParams =
231
+ WritableNativeMap().apply {
232
+ putDouble("progress", progress.progress)
233
+ putString("artifactType", progress.artifactType)
234
+ progress.details?.let { details ->
235
+ putMap(
236
+ "details",
237
+ WritableNativeMap().apply {
238
+ putInt("totalFilesCount", details.totalFilesCount)
239
+ putInt("completedFilesCount", details.completedFilesCount)
240
+ putArray(
241
+ "files",
242
+ WritableNativeArray().apply {
243
+ details.files.forEach { file ->
244
+ pushMap(
245
+ WritableNativeMap().apply {
246
+ putString("path", file.path)
247
+ putString("downloadPath", file.downloadPath)
248
+ putString("status", file.status)
249
+ putDouble("progress", file.progress)
250
+ putInt("order", file.order)
251
+ file.downloadedBytes?.let {
252
+ putDouble(
253
+ "downloadedBytes",
254
+ it.toDouble(),
255
+ )
256
+ }
257
+ file.totalBytes?.let { putDouble("totalBytes", it.toDouble()) }
258
+ },
259
+ )
260
+ }
261
+ },
262
+ )
263
+ },
264
+ )
265
+ }
260
266
  }
261
- }
262
-
263
- this@HotUpdaterModule
264
- .mReactApplicationContext
265
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
266
- ?.emit("onProgress", progressParams)
267
- } catch (e: Exception) {
268
- Log.w("HotUpdater", "Failed to emit progress (bridge may be unavailable): ${e.message}")
267
+
268
+ this@HotUpdaterModule
269
+ .mReactApplicationContext
270
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
271
+ ?.emit("onProgress", progressParams)
272
+ } catch (e: Exception) {
273
+ Log.w("HotUpdater", "Failed to emit progress (bridge may be unavailable): ${e.message}")
274
+ }
269
275
  }
270
276
  }
271
- }
272
- promise.resolve(true)
277
+ promise.resolve(result.toWritableMap())
273
278
  } catch (e: HotUpdaterException) {
274
- promise.reject(e.code, e.message)
279
+ promise.rejectUpdateBundle(e)
275
280
  } catch (e: Exception) {
281
+ // Not an update failure (a stale Release selection, for example),
282
+ // so the rejection carries no classification.
276
283
  promise.reject("UNKNOWN_ERROR", e.message ?: "An unknown error occurred")
277
284
  }
278
285
  }
@@ -409,15 +416,13 @@ class HotUpdaterModule internal constructor(
409
416
 
410
417
  override fun getInstallId(): String = getInstance().getInstallId()
411
418
 
412
- override fun getUserId(): String? = getInstance().getUserId()
413
-
414
- override fun getUsername(): String? = getInstance().getUsername()
419
+ override fun getStorageItem(key: String): String? = getInstance().getStorageItem(key)
415
420
 
416
- override fun setUser(
417
- userId: String?,
418
- username: String?,
421
+ override fun setStorageItem(
422
+ key: String,
423
+ value: String?,
419
424
  ) {
420
- getInstance().setUser(userId, username)
425
+ getInstance().setStorageItem(key, value)
421
426
  }
422
427
 
423
428
  override fun resetChannel(promise: Promise) {
@@ -178,7 +178,7 @@ class HotUpdaterModule internal constructor(
178
178
  try {
179
179
  val bundleId = params.getString("bundleId")
180
180
  if (bundleId == null || bundleId.isEmpty()) {
181
- promise.reject("MISSING_BUNDLE_ID", "Missing or empty 'bundleId'")
181
+ promise.rejectUpdateBundle(HotUpdaterException.missingBundleId())
182
182
  return@launch
183
183
  }
184
184
 
@@ -186,13 +186,15 @@ class HotUpdaterModule internal constructor(
186
186
  val manifestFileHash = params.getString("manifestFileHash")
187
187
  val assets = parseAssets(params)
188
188
  if (manifestUrl.isNullOrEmpty() || manifestFileHash.isNullOrEmpty() || assets == null) {
189
- promise.reject("INVALID_MANIFEST", "Manifest URL, hash, and assets are required")
189
+ promise.rejectUpdateBundle(HotUpdaterException.invalidManifestParams())
190
190
  return@launch
191
191
  }
192
192
  try {
193
193
  java.net.URL(manifestUrl)
194
194
  } catch (e: java.net.MalformedURLException) {
195
- promise.reject("INVALID_FILE_URL", "Invalid 'manifestUrl' provided: $manifestUrl")
195
+ promise.rejectUpdateBundle(
196
+ HotUpdaterException.invalidFileUrl("manifestUrl", manifestUrl, UpdateFailureResource.MANIFEST),
197
+ )
196
198
  return@launch
197
199
  }
198
200
  val channel = params.getString("channel")
@@ -206,7 +208,9 @@ class HotUpdaterModule internal constructor(
206
208
  try {
207
209
  java.net.URL(archiveUrl)
208
210
  } catch (e: java.net.MalformedURLException) {
209
- promise.reject("INVALID_FILE_URL", "Invalid 'archiveUrl' provided: $archiveUrl")
211
+ promise.rejectUpdateBundle(
212
+ HotUpdaterException.invalidFileUrl("archiveUrl", archiveUrl, UpdateFailureResource.ARCHIVE),
213
+ )
210
214
  return@launch
211
215
  }
212
216
  }
@@ -214,62 +218,65 @@ class HotUpdaterModule internal constructor(
214
218
 
215
219
  val impl = getInstance()
216
220
 
217
- impl.updateBundle(
218
- bundleId,
219
- manifestUrl,
220
- manifestFileHash,
221
- assets,
222
- channel,
223
- selection,
224
- archiveUrl,
225
- ) { progress ->
226
- // Post to Main thread for React Native event emission
227
- Handler(Looper.getMainLooper()).post {
228
- try {
229
- val progressParams =
230
- Arguments.createMap().apply {
231
- putDouble("progress", progress.progress)
232
- putString("artifactType", progress.artifactType)
233
- progress.details?.let { details ->
234
- val files = Arguments.createArray()
235
- details.files.forEach { file ->
236
- files.pushMap(
221
+ val result =
222
+ impl.updateBundle(
223
+ bundleId,
224
+ manifestUrl,
225
+ manifestFileHash,
226
+ assets,
227
+ channel,
228
+ selection,
229
+ archiveUrl,
230
+ ) { progress ->
231
+ // Post to Main thread for React Native event emission
232
+ Handler(Looper.getMainLooper()).post {
233
+ try {
234
+ val progressParams =
235
+ Arguments.createMap().apply {
236
+ putDouble("progress", progress.progress)
237
+ putString("artifactType", progress.artifactType)
238
+ progress.details?.let { details ->
239
+ val files = Arguments.createArray()
240
+ details.files.forEach { file ->
241
+ files.pushMap(
242
+ Arguments.createMap().apply {
243
+ putString("path", file.path)
244
+ putString("downloadPath", file.downloadPath)
245
+ putString("status", file.status)
246
+ putDouble("progress", file.progress)
247
+ putInt("order", file.order)
248
+ file.downloadedBytes?.let { putDouble("downloadedBytes", it.toDouble()) }
249
+ file.totalBytes?.let { putDouble("totalBytes", it.toDouble()) }
250
+ },
251
+ )
252
+ }
253
+
254
+ putMap(
255
+ "details",
237
256
  Arguments.createMap().apply {
238
- putString("path", file.path)
239
- putString("downloadPath", file.downloadPath)
240
- putString("status", file.status)
241
- putDouble("progress", file.progress)
242
- putInt("order", file.order)
243
- file.downloadedBytes?.let { putDouble("downloadedBytes", it.toDouble()) }
244
- file.totalBytes?.let { putDouble("totalBytes", it.toDouble()) }
257
+ putInt("totalFilesCount", details.totalFilesCount)
258
+ putInt("completedFilesCount", details.completedFilesCount)
259
+ putArray("files", files)
245
260
  },
246
261
  )
247
262
  }
248
-
249
- putMap(
250
- "details",
251
- Arguments.createMap().apply {
252
- putInt("totalFilesCount", details.totalFilesCount)
253
- putInt("completedFilesCount", details.completedFilesCount)
254
- putArray("files", files)
255
- },
256
- )
257
263
  }
258
- }
259
-
260
- this@HotUpdaterModule
261
- .mReactApplicationContext
262
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
263
- ?.emit("onProgress", progressParams)
264
- } catch (e: Exception) {
265
- Log.w("HotUpdater", "Failed to emit progress (bridge may be unavailable): ${e.message}")
264
+
265
+ this@HotUpdaterModule
266
+ .mReactApplicationContext
267
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
268
+ ?.emit("onProgress", progressParams)
269
+ } catch (e: Exception) {
270
+ Log.w("HotUpdater", "Failed to emit progress (bridge may be unavailable): ${e.message}")
271
+ }
266
272
  }
267
273
  }
268
- }
269
- promise.resolve(true)
274
+ promise.resolve(result.toWritableMap())
270
275
  } catch (e: HotUpdaterException) {
271
- promise.reject(e.code, e.message)
276
+ promise.rejectUpdateBundle(e)
272
277
  } catch (e: Exception) {
278
+ // Not an update failure (a stale Release selection, for example),
279
+ // so the rejection carries no classification.
273
280
  promise.reject("UNKNOWN_ERROR", e.message ?: "An unknown error occurred")
274
281
  }
275
282
  }
@@ -434,17 +441,14 @@ class HotUpdaterModule internal constructor(
434
441
  override fun getInstallId(): String = getInstance().getInstallId()
435
442
 
436
443
  @ReactMethod(isBlockingSynchronousMethod = true)
437
- override fun getUserId(): String? = getInstance().getUserId()
438
-
439
- @ReactMethod(isBlockingSynchronousMethod = true)
440
- override fun getUsername(): String? = getInstance().getUsername()
444
+ override fun getStorageItem(key: String): String? = getInstance().getStorageItem(key)
441
445
 
442
446
  @ReactMethod
443
- override fun setUser(
444
- userId: String?,
445
- username: String?,
447
+ override fun setStorageItem(
448
+ key: String,
449
+ value: String?,
446
450
  ) {
447
- getInstance().setUser(userId, username)
451
+ getInstance().setStorageItem(key, value)
448
452
  }
449
453
 
450
454
  @ReactMethod
@@ -62,13 +62,11 @@ abstract class HotUpdaterSpec internal constructor(
62
62
 
63
63
  abstract fun getInstallId(): String
64
64
 
65
- abstract fun getUserId(): String?
65
+ abstract fun getStorageItem(key: String): String?
66
66
 
67
- abstract fun getUsername(): String?
68
-
69
- abstract fun setUser(
70
- userId: String?,
71
- username: String?,
67
+ abstract fun setStorageItem(
68
+ key: String,
69
+ value: String?,
72
70
  )
73
71
 
74
72
  abstract fun resetChannel(promise: Promise)
@@ -40,7 +40,7 @@ class BsdiffPatchTest {
40
40
  }
41
41
 
42
42
  companion object {
43
- private const val BSDIFF_PATCH_FIXTURE_BASE64 =
43
+ const val BSDIFF_PATCH_FIXTURE_BASE64 =
44
44
  "RU5EU0xFWS9CU0RJRkY0Mx8AAAAAAAAAQlpoOTFBWSZTWb12MIEAAAB5gEQYAADQYQAIPsXOACAAIo0A0NAaNCgAGgZMgHAtYscVxxRtTt4nmaj70g4gQSF5+T4u5IpwoSF67GEC"
45
45
  }
46
46
  }