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

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 (240) hide show
  1. package/lib/commonjs/checkForUpdate.js +7 -9
  2. package/lib/commonjs/checkForUpdate.js.map +1 -1
  3. package/lib/commonjs/clientPlugin.js +7 -43
  4. package/lib/commonjs/clientPlugin.js.map +1 -1
  5. package/lib/commonjs/httpClient.js +7 -9
  6. package/lib/commonjs/httpClient.js.map +1 -1
  7. package/lib/commonjs/index.js +10 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/native.js +4 -4
  10. package/lib/commonjs/native.js.map +1 -1
  11. package/lib/commonjs/pluginHost.js +26 -190
  12. package/lib/commonjs/pluginHost.js.map +1 -1
  13. package/lib/commonjs/releaseCatalogCache.js +7 -59
  14. package/lib/commonjs/releaseCatalogCache.js.map +1 -1
  15. package/lib/commonjs/sdkVersion.js +1 -1
  16. package/lib/module/checkForUpdate.js +1 -3
  17. package/lib/module/checkForUpdate.js.map +1 -1
  18. package/lib/module/clientPlugin.js +1 -41
  19. package/lib/module/clientPlugin.js.map +1 -1
  20. package/lib/module/httpClient.js +1 -3
  21. package/lib/module/httpClient.js.map +1 -1
  22. package/lib/module/index.js +2 -0
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/native.js +1 -1
  25. package/lib/module/native.js.map +1 -1
  26. package/lib/module/pluginHost.js +22 -187
  27. package/lib/module/pluginHost.js.map +1 -1
  28. package/lib/module/releaseCatalogCache.js +3 -54
  29. package/lib/module/releaseCatalogCache.js.map +1 -1
  30. package/lib/module/sdkVersion.js +1 -1
  31. package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/clientPlugin.d.ts +1 -184
  33. package/lib/typescript/commonjs/clientPlugin.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/httpClient.d.ts +1 -2
  35. package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/index.d.ts +1 -0
  37. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/native.d.ts +1 -1
  39. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  40. package/lib/typescript/commonjs/pluginHost.d.ts +3 -28
  41. package/lib/typescript/commonjs/pluginHost.d.ts.map +1 -1
  42. package/lib/typescript/commonjs/releaseCatalogCache.d.ts +1 -13
  43. package/lib/typescript/commonjs/releaseCatalogCache.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
  45. package/lib/typescript/commonjs/types.d.ts +1 -1
  46. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/wrap.types.d.ts +2 -2
  48. package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
  49. package/lib/typescript/module/clientPlugin.d.ts +1 -184
  50. package/lib/typescript/module/clientPlugin.d.ts.map +1 -1
  51. package/lib/typescript/module/httpClient.d.ts +1 -2
  52. package/lib/typescript/module/httpClient.d.ts.map +1 -1
  53. package/lib/typescript/module/index.d.ts +1 -0
  54. package/lib/typescript/module/index.d.ts.map +1 -1
  55. package/lib/typescript/module/native.d.ts +1 -1
  56. package/lib/typescript/module/native.d.ts.map +1 -1
  57. package/lib/typescript/module/pluginHost.d.ts +3 -28
  58. package/lib/typescript/module/pluginHost.d.ts.map +1 -1
  59. package/lib/typescript/module/releaseCatalogCache.d.ts +1 -13
  60. package/lib/typescript/module/releaseCatalogCache.d.ts.map +1 -1
  61. package/lib/typescript/module/sdkVersion.d.ts +1 -1
  62. package/lib/typescript/module/types.d.ts +1 -1
  63. package/lib/typescript/module/types.d.ts.map +1 -1
  64. package/lib/typescript/module/wrap.types.d.ts +2 -2
  65. package/package.json +7 -16
  66. package/src/checkForUpdate.ts +4 -6
  67. package/src/clientPlugin.ts +17 -231
  68. package/src/httpClient.ts +4 -4
  69. package/src/index.ts +7 -0
  70. package/src/native.ts +1 -1
  71. package/src/pluginHost.ts +24 -241
  72. package/src/releaseCatalogCache.ts +7 -136
  73. package/src/sdkVersion.ts +1 -1
  74. package/src/types.ts +1 -1
  75. package/src/wrap.types.ts +2 -2
  76. package/android/src/test/java/com/hotupdater/BsdiffPatchTest.kt +0 -46
  77. package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +0 -2236
  78. package/android/src/test/java/com/hotupdater/HotUpdaterExceptionTest.kt +0 -220
  79. package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +0 -264
  80. package/android/src/test/java/com/hotupdater/HotUpdaterRecoveryStateTest.kt +0 -97
  81. package/android/src/test/java/com/hotupdater/InstallIdentityServiceTest.kt +0 -71
  82. package/android/src/test/java/com/hotupdater/KeyValueStorageServiceTest.kt +0 -106
  83. package/android/src/test/java/com/hotupdater/NativeConfigUtilsTest.kt +0 -20
  84. package/android/src/test/java/com/hotupdater/NoBackupContext.kt +0 -11
  85. package/android/src/test/java/com/hotupdater/OkHttpDownloadServiceTest.kt +0 -397
  86. package/android/src/test/java/com/hotupdater/PendingCrashRecoveryTest.kt +0 -44
  87. package/android/src/test/java/com/hotupdater/PreviousProcessExitTest.kt +0 -57
  88. package/android/src/test/java/com/hotupdater/RelativePathResolverTest.kt +0 -41
  89. package/android/src/test/java/com/hotupdater/ReleaseCatalogCacheServiceTest.kt +0 -118
  90. package/android/src/test/java/com/hotupdater/TarBrArchiveExtractorTest.kt +0 -206
  91. package/lib/commonjs/appReady.spec.js +0 -360
  92. package/lib/commonjs/appReady.spec.js.map +0 -1
  93. package/lib/commonjs/appReady.test-utils.js +0 -25
  94. package/lib/commonjs/appReady.test-utils.js.map +0 -1
  95. package/lib/commonjs/baseURL.js +0 -16
  96. package/lib/commonjs/baseURL.js.map +0 -1
  97. package/lib/commonjs/catalogCacheNative.spec.js +0 -31
  98. package/lib/commonjs/catalogCacheNative.spec.js.map +0 -1
  99. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +0 -936
  100. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  101. package/lib/commonjs/entryImportGraph.spec.js +0 -50
  102. package/lib/commonjs/entryImportGraph.spec.js.map +0 -1
  103. package/lib/commonjs/httpClient.spec.js +0 -171
  104. package/lib/commonjs/httpClient.spec.js.map +0 -1
  105. package/lib/commonjs/index.spec.js +0 -395
  106. package/lib/commonjs/index.spec.js.map +0 -1
  107. package/lib/commonjs/iosInterop.spec.js +0 -18
  108. package/lib/commonjs/iosInterop.spec.js.map +0 -1
  109. package/lib/commonjs/native.spec.js +0 -910
  110. package/lib/commonjs/native.spec.js.map +0 -1
  111. package/lib/commonjs/pluginHost.spec.js +0 -292
  112. package/lib/commonjs/pluginHost.spec.js.map +0 -1
  113. package/lib/commonjs/plugins/insights/eventId.js +0 -129
  114. package/lib/commonjs/plugins/insights/eventId.js.map +0 -1
  115. package/lib/commonjs/plugins/insights/eventId.spec.js +0 -47
  116. package/lib/commonjs/plugins/insights/eventId.spec.js.map +0 -1
  117. package/lib/commonjs/plugins/insights/index.js +0 -272
  118. package/lib/commonjs/plugins/insights/index.js.map +0 -1
  119. package/lib/commonjs/plugins/insights/insights.spec.js +0 -640
  120. package/lib/commonjs/plugins/insights/insights.spec.js.map +0 -1
  121. package/lib/commonjs/plugins/insights/sender.js +0 -128
  122. package/lib/commonjs/plugins/insights/sender.js.map +0 -1
  123. package/lib/commonjs/plugins/insights/sender.spec.js +0 -265
  124. package/lib/commonjs/plugins/insights/sender.spec.js.map +0 -1
  125. package/lib/commonjs/plugins/insights/state.js +0 -145
  126. package/lib/commonjs/plugins/insights/state.js.map +0 -1
  127. package/lib/commonjs/releaseCatalogCache.spec.js +0 -213
  128. package/lib/commonjs/releaseCatalogCache.spec.js.map +0 -1
  129. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js +0 -64
  130. package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  131. package/lib/commonjs/store.notification.spec.js +0 -84
  132. package/lib/commonjs/store.notification.spec.js.map +0 -1
  133. package/lib/commonjs/store.spec.js +0 -182
  134. package/lib/commonjs/store.spec.js.map +0 -1
  135. package/lib/commonjs/updateError.spec.js +0 -149
  136. package/lib/commonjs/updateError.spec.js.map +0 -1
  137. package/lib/commonjs/wrap.progress.spec.js +0 -195
  138. package/lib/commonjs/wrap.progress.spec.js.map +0 -1
  139. package/lib/commonjs/wrap.spec.js +0 -232
  140. package/lib/commonjs/wrap.spec.js.map +0 -1
  141. package/lib/module/appReady.spec.js +0 -359
  142. package/lib/module/appReady.spec.js.map +0 -1
  143. package/lib/module/appReady.test-utils.js +0 -19
  144. package/lib/module/appReady.test-utils.js.map +0 -1
  145. package/lib/module/baseURL.js +0 -11
  146. package/lib/module/baseURL.js.map +0 -1
  147. package/lib/module/catalogCacheNative.spec.js +0 -31
  148. package/lib/module/catalogCacheNative.spec.js.map +0 -1
  149. package/lib/module/checkForUpdate.releaseCatalog.spec.js +0 -935
  150. package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +0 -1
  151. package/lib/module/entryImportGraph.spec.js +0 -50
  152. package/lib/module/entryImportGraph.spec.js.map +0 -1
  153. package/lib/module/httpClient.spec.js +0 -171
  154. package/lib/module/httpClient.spec.js.map +0 -1
  155. package/lib/module/index.spec.js +0 -394
  156. package/lib/module/index.spec.js.map +0 -1
  157. package/lib/module/iosInterop.spec.js +0 -18
  158. package/lib/module/iosInterop.spec.js.map +0 -1
  159. package/lib/module/native.spec.js +0 -909
  160. package/lib/module/native.spec.js.map +0 -1
  161. package/lib/module/pluginHost.spec.js +0 -291
  162. package/lib/module/pluginHost.spec.js.map +0 -1
  163. package/lib/module/plugins/insights/eventId.js +0 -122
  164. package/lib/module/plugins/insights/eventId.js.map +0 -1
  165. package/lib/module/plugins/insights/eventId.spec.js +0 -47
  166. package/lib/module/plugins/insights/eventId.spec.js.map +0 -1
  167. package/lib/module/plugins/insights/index.js +0 -268
  168. package/lib/module/plugins/insights/index.js.map +0 -1
  169. package/lib/module/plugins/insights/insights.spec.js +0 -639
  170. package/lib/module/plugins/insights/insights.spec.js.map +0 -1
  171. package/lib/module/plugins/insights/sender.js +0 -123
  172. package/lib/module/plugins/insights/sender.js.map +0 -1
  173. package/lib/module/plugins/insights/sender.spec.js +0 -265
  174. package/lib/module/plugins/insights/sender.spec.js.map +0 -1
  175. package/lib/module/plugins/insights/state.js +0 -139
  176. package/lib/module/plugins/insights/state.js.map +0 -1
  177. package/lib/module/releaseCatalogCache.spec.js +0 -213
  178. package/lib/module/releaseCatalogCache.spec.js.map +0 -1
  179. package/lib/module/releaseCatalogCacheNativeContract.spec.js +0 -64
  180. package/lib/module/releaseCatalogCacheNativeContract.spec.js.map +0 -1
  181. package/lib/module/store.notification.spec.js +0 -85
  182. package/lib/module/store.notification.spec.js.map +0 -1
  183. package/lib/module/store.spec.js +0 -181
  184. package/lib/module/store.spec.js.map +0 -1
  185. package/lib/module/updateError.spec.js +0 -149
  186. package/lib/module/updateError.spec.js.map +0 -1
  187. package/lib/module/wrap.progress.spec.js +0 -196
  188. package/lib/module/wrap.progress.spec.js.map +0 -1
  189. package/lib/module/wrap.spec.js +0 -233
  190. package/lib/module/wrap.spec.js.map +0 -1
  191. package/lib/typescript/commonjs/appReady.test-utils.d.ts +0 -9
  192. package/lib/typescript/commonjs/appReady.test-utils.d.ts.map +0 -1
  193. package/lib/typescript/commonjs/baseURL.d.ts +0 -4
  194. package/lib/typescript/commonjs/baseURL.d.ts.map +0 -1
  195. package/lib/typescript/commonjs/plugins/insights/eventId.d.ts +0 -18
  196. package/lib/typescript/commonjs/plugins/insights/eventId.d.ts.map +0 -1
  197. package/lib/typescript/commonjs/plugins/insights/index.d.ts +0 -40
  198. package/lib/typescript/commonjs/plugins/insights/index.d.ts.map +0 -1
  199. package/lib/typescript/commonjs/plugins/insights/sender.d.ts +0 -74
  200. package/lib/typescript/commonjs/plugins/insights/sender.d.ts.map +0 -1
  201. package/lib/typescript/commonjs/plugins/insights/state.d.ts +0 -46
  202. package/lib/typescript/commonjs/plugins/insights/state.d.ts.map +0 -1
  203. package/lib/typescript/module/appReady.test-utils.d.ts +0 -9
  204. package/lib/typescript/module/appReady.test-utils.d.ts.map +0 -1
  205. package/lib/typescript/module/baseURL.d.ts +0 -4
  206. package/lib/typescript/module/baseURL.d.ts.map +0 -1
  207. package/lib/typescript/module/plugins/insights/eventId.d.ts +0 -18
  208. package/lib/typescript/module/plugins/insights/eventId.d.ts.map +0 -1
  209. package/lib/typescript/module/plugins/insights/index.d.ts +0 -40
  210. package/lib/typescript/module/plugins/insights/index.d.ts.map +0 -1
  211. package/lib/typescript/module/plugins/insights/sender.d.ts +0 -74
  212. package/lib/typescript/module/plugins/insights/sender.d.ts.map +0 -1
  213. package/lib/typescript/module/plugins/insights/state.d.ts +0 -46
  214. package/lib/typescript/module/plugins/insights/state.d.ts.map +0 -1
  215. package/plugins/insights/package.json +0 -8
  216. package/src/appReady.spec.ts +0 -393
  217. package/src/appReady.test-utils.ts +0 -31
  218. package/src/baseURL.ts +0 -15
  219. package/src/catalogCacheNative.spec.ts +0 -63
  220. package/src/checkForUpdate.releaseCatalog.spec.ts +0 -966
  221. package/src/entryImportGraph.spec.ts +0 -65
  222. package/src/httpClient.spec.ts +0 -216
  223. package/src/index.spec.ts +0 -434
  224. package/src/iosInterop.spec.ts +0 -30
  225. package/src/native.spec.ts +0 -978
  226. package/src/pluginHost.spec.ts +0 -297
  227. package/src/plugins/insights/eventId.spec.ts +0 -60
  228. package/src/plugins/insights/eventId.ts +0 -171
  229. package/src/plugins/insights/index.ts +0 -367
  230. package/src/plugins/insights/insights.spec.ts +0 -732
  231. package/src/plugins/insights/sender.spec.ts +0 -287
  232. package/src/plugins/insights/sender.ts +0 -221
  233. package/src/plugins/insights/state.ts +0 -184
  234. package/src/releaseCatalogCache.spec.ts +0 -304
  235. package/src/releaseCatalogCacheNativeContract.spec.ts +0 -80
  236. package/src/store.notification.spec.ts +0 -102
  237. package/src/store.spec.ts +0 -215
  238. package/src/updateError.spec.ts +0 -144
  239. package/src/wrap.progress.spec.ts +0 -232
  240. package/src/wrap.spec.ts +0 -262
@@ -1,213 +0,0 @@
1
- "use strict";
2
-
3
- import { createReleaseCatalogScopeKey, encodeChannelKey, MAX_COMPILED_CATALOG_BYTES } from "@hot-updater/core";
4
- import { beforeEach, describe, expect, it, vi } from "vitest";
5
- import { createReleaseCatalogCachePartition, fetchReleaseCatalogWithCache, MAX_RELEASE_CATALOG_CACHE_ENTRY_BYTES, MAX_RELEASE_CATALOG_WIRE_BYTES } from "./releaseCatalogCache.js";
6
- const cache = vi.hoisted(() => new Map());
7
- const nativeMocks = vi.hoisted(() => ({
8
- read: vi.fn(async partition => cache.get(partition) ?? null),
9
- remove: vi.fn(async partition => {
10
- cache.delete(partition);
11
- }),
12
- write: vi.fn(async (partition, payload) => {
13
- cache.set(partition, payload);
14
- return true;
15
- })
16
- }));
17
- vi.mock("./catalogCacheNative", () => ({
18
- readNativeReleaseCatalogCache: nativeMocks.read,
19
- removeNativeReleaseCatalogCache: nativeMocks.remove,
20
- writeNativeReleaseCatalogCache: nativeMocks.write
21
- }));
22
- const CATALOG_ID = "project-a";
23
- const CHANNEL_KEY = encodeChannelKey("production");
24
- const SCOPE_KEY = createReleaseCatalogScopeKey({
25
- channelKey: CHANNEL_KEY,
26
- platform: "ios",
27
- strategy: "APP_VERSION"
28
- });
29
- const URL = `https://updates.example.com/release-catalogs/app-version/ios/${CHANNEL_KEY}/1.0.0`;
30
- const EXPECTED_SCOPE = {
31
- channelKey: CHANNEL_KEY,
32
- platform: "ios",
33
- strategy: "APP_VERSION"
34
- };
35
- const catalog = {
36
- catalogId: CATALOG_ID,
37
- catalogHash: `sha256:${"a".repeat(64)}`,
38
- fallbackPolicy: "BUILTIN_IF_ACTIVE_INELIGIBLE",
39
- generation: 1,
40
- releases: [{
41
- bundleId: "00000000-0000-7000-8000-000000000002",
42
- kind: "BUNDLE",
43
- message: null,
44
- releaseId: "00000000-0000-7000-8000-000000000001",
45
- rolloutCohortCount: 1000,
46
- shouldForceUpdate: false,
47
- targetCohorts: []
48
- }],
49
- schemaVersion: 1,
50
- scopeKey: SCOPE_KEY
51
- };
52
- const input = (overrides = {}) => ({
53
- baseURL: "https://updates.example.com",
54
- expectedScope: EXPECTED_SCOPE,
55
- requestHeaders: {
56
- "X-API-Key": "api-key-a"
57
- },
58
- url: URL,
59
- ...overrides
60
- });
61
- const response = (status, body, etag) => new Response(body, {
62
- headers: etag === undefined ? undefined : {
63
- ETag: etag
64
- },
65
- status,
66
- statusText: status === 200 ? "OK" : "Request failed"
67
- });
68
- const requestHeadersAt = (fetchMock, index) => {
69
- const request = fetchMock.mock.calls[index]?.[1];
70
- return new Headers(request?.headers);
71
- };
72
- describe("Release Catalog persistent cache", () => {
73
- beforeEach(() => {
74
- cache.clear();
75
- vi.clearAllMocks();
76
- });
77
- it("persists a validated 200 and reuses it across resolver instances on 304", async () => {
78
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"v1"')).mockResolvedValueOnce(response(304));
79
- vi.stubGlobal("fetch", fetchMock);
80
- await expect(fetchReleaseCatalogWithCache(input())).resolves.toEqual(catalog);
81
- expect(nativeMocks.write).toHaveBeenCalledOnce();
82
- const parseSpy = vi.spyOn(JSON, "parse");
83
- await expect(fetchReleaseCatalogWithCache(input())).resolves.toEqual(catalog);
84
- expect(requestHeadersAt(fetchMock, 1).get("if-none-match")).toBe('"v1"');
85
- expect(parseSpy).not.toHaveBeenCalled();
86
- expect(fetchMock).toHaveBeenCalledTimes(2);
87
- });
88
- it("repairs an invalid cache after an unsatisfiable 304 with one unconditional request", async () => {
89
- const partition = createReleaseCatalogCachePartition(input());
90
- cache.set(partition, "invalid-envelope");
91
- const fetchMock = vi.fn().mockResolvedValueOnce(response(304)).mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"v2"'));
92
- vi.stubGlobal("fetch", fetchMock);
93
- await expect(fetchReleaseCatalogWithCache(input())).resolves.toEqual(catalog);
94
- expect(nativeMocks.remove).toHaveBeenCalledWith(partition);
95
- expect(fetchMock).toHaveBeenCalledTimes(2);
96
- expect(requestHeadersAt(fetchMock, 0).has("if-none-match")).toBe(false);
97
- expect(requestHeadersAt(fetchMock, 1).has("if-none-match")).toBe(false);
98
- expect(cache.get(partition)).toContain('"v2"');
99
- });
100
- it("isolates base URL, scope, and case-insensitive API-key partitions", async () => {
101
- const betaScope = createReleaseCatalogScopeKey({
102
- channelKey: encodeChannelKey("beta"),
103
- platform: "ios",
104
- strategy: "APP_VERSION"
105
- });
106
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"v1"')).mockResolvedValueOnce(response(304)).mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"key-b"')).mockResolvedValueOnce(response(200, JSON.stringify({
107
- ...catalog,
108
- scopeKey: betaScope
109
- }), '"beta"'));
110
- vi.stubGlobal("fetch", fetchMock);
111
- await fetchReleaseCatalogWithCache(input());
112
- await fetchReleaseCatalogWithCache(input({
113
- requestHeaders: {
114
- "x-api-key": "api-key-a"
115
- }
116
- }));
117
- await fetchReleaseCatalogWithCache(input({
118
- requestHeaders: {
119
- "x-api-key": "api-key-b"
120
- }
121
- }));
122
- await fetchReleaseCatalogWithCache(input({
123
- baseURL: "https://other.example.com",
124
- expectedScope: {
125
- channelKey: encodeChannelKey("beta"),
126
- platform: "ios",
127
- strategy: "APP_VERSION"
128
- },
129
- url: "https://other.example.com/release-catalogs/app-version/ios/YmV0YQ/1.0.0"
130
- }));
131
- expect(requestHeadersAt(fetchMock, 1).get("if-none-match")).toBe('"v1"');
132
- expect(requestHeadersAt(fetchMock, 2).has("if-none-match")).toBe(false);
133
- expect(requestHeadersAt(fetchMock, 3).has("if-none-match")).toBe(false);
134
- expect(cache.size).toBe(3);
135
- });
136
- it.each([401, 403, 500])("does not use or repair cached data after HTTP %s", async status => {
137
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"v1"')).mockResolvedValueOnce(response(status));
138
- vi.stubGlobal("fetch", fetchMock);
139
- await fetchReleaseCatalogWithCache(input());
140
- await expect(fetchReleaseCatalogWithCache(input())).rejects.toThrow("Request failed");
141
- expect(fetchMock).toHaveBeenCalledTimes(2);
142
- });
143
- it("reads a 404 the server marks x-hot-updater-catalog: none as no catalog", async () => {
144
- const fetchMock = vi.fn().mockResolvedValueOnce(new Response(null, {
145
- headers: {
146
- "x-hot-updater-catalog": "none"
147
- },
148
- status: 404
149
- }));
150
- vi.stubGlobal("fetch", fetchMock);
151
- await expect(fetchReleaseCatalogWithCache(input())).resolves.toBeNull();
152
- expect(nativeMocks.write).not.toHaveBeenCalled();
153
- });
154
- it("throws the HTTP status of any other 404", async () => {
155
- vi.stubGlobal("fetch", vi.fn().mockResolvedValueOnce(response(404)));
156
- await expect(fetchReleaseCatalogWithCache(input())).rejects.toMatchObject({
157
- name: "UpdateHttpError",
158
- status: 404
159
- });
160
- });
161
- it("does not use cached data as a fallback on network failure", async () => {
162
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify(catalog), '"v1"')).mockRejectedValueOnce(new Error("offline"));
163
- vi.stubGlobal("fetch", fetchMock);
164
- await fetchReleaseCatalogWithCache(input());
165
- await expect(fetchReleaseCatalogWithCache(input())).rejects.toThrow("offline");
166
- expect(fetchMock).toHaveBeenCalledTimes(2);
167
- });
168
- it("rejects and never persists a catalog with the wrong canonical scope", async () => {
169
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify({
170
- ...catalog,
171
- scopeKey: "wrong-scope"
172
- }), '"wrong"'));
173
- vi.stubGlobal("fetch", fetchMock);
174
- await expect(fetchReleaseCatalogWithCache(input())).rejects.toThrow("invalid Release catalog");
175
- expect(nativeMocks.write).not.toHaveBeenCalled();
176
- });
177
- it("rejects a catalog with no persisted identity", async () => {
178
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, JSON.stringify({
179
- ...catalog,
180
- catalogId: ""
181
- }), '"missing-identity"'));
182
- vi.stubGlobal("fetch", fetchMock);
183
- await expect(fetchReleaseCatalogWithCache(input())).rejects.toThrow("invalid Release catalog");
184
- expect(nativeMocks.write).not.toHaveBeenCalled();
185
- });
186
- it("accepts a legal compiled-boundary catalog plus its wire envelope", async () => {
187
- const template = {
188
- ...catalog,
189
- releases: [{
190
- ...catalog.releases[0],
191
- message: ""
192
- }]
193
- };
194
- const templateBody = JSON.stringify(template);
195
- const padding = "x".repeat(MAX_COMPILED_CATALOG_BYTES + 1 - templateBody.length);
196
- const body = JSON.stringify({
197
- ...template,
198
- releases: [{
199
- ...template.releases[0],
200
- message: padding
201
- }]
202
- });
203
- expect(body.length).toBe(MAX_COMPILED_CATALOG_BYTES + 1);
204
- expect(body.length).toBeLessThanOrEqual(MAX_RELEASE_CATALOG_WIRE_BYTES);
205
- const fetchMock = vi.fn().mockResolvedValueOnce(response(200, body, '"boundary"'));
206
- vi.stubGlobal("fetch", fetchMock);
207
- await expect(fetchReleaseCatalogWithCache(input())).resolves.toEqual(JSON.parse(body));
208
- const persisted = nativeMocks.write.mock.calls[0]?.[1];
209
- expect(persisted).toBeDefined();
210
- expect(new TextEncoder().encode(persisted).byteLength).toBeLessThanOrEqual(MAX_RELEASE_CATALOG_CACHE_ENTRY_BYTES);
211
- });
212
- });
213
- //# sourceMappingURL=releaseCatalogCache.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createReleaseCatalogScopeKey","encodeChannelKey","MAX_COMPILED_CATALOG_BYTES","beforeEach","describe","expect","it","vi","createReleaseCatalogCachePartition","fetchReleaseCatalogWithCache","MAX_RELEASE_CATALOG_CACHE_ENTRY_BYTES","MAX_RELEASE_CATALOG_WIRE_BYTES","cache","hoisted","Map","nativeMocks","read","fn","partition","get","remove","delete","write","payload","set","mock","readNativeReleaseCatalogCache","removeNativeReleaseCatalogCache","writeNativeReleaseCatalogCache","CATALOG_ID","CHANNEL_KEY","SCOPE_KEY","channelKey","platform","strategy","URL","EXPECTED_SCOPE","catalog","catalogId","catalogHash","repeat","fallbackPolicy","generation","releases","bundleId","kind","message","releaseId","rolloutCohortCount","shouldForceUpdate","targetCohorts","schemaVersion","scopeKey","input","overrides","baseURL","expectedScope","requestHeaders","url","response","status","body","etag","Response","headers","undefined","ETag","statusText","requestHeadersAt","fetchMock","index","request","calls","Headers","clear","clearAllMocks","mockResolvedValueOnce","JSON","stringify","stubGlobal","resolves","toEqual","toHaveBeenCalledOnce","parseSpy","spyOn","toBe","not","toHaveBeenCalled","toHaveBeenCalledTimes","toHaveBeenCalledWith","has","toContain","betaScope","size","each","rejects","toThrow","toBeNull","toMatchObject","name","mockRejectedValueOnce","Error","template","templateBody","padding","length","toBeLessThanOrEqual","parse","persisted","toBeDefined","TextEncoder","encode","byteLength"],"sourceRoot":"../../src","sources":["releaseCatalogCache.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,64 +0,0 @@
1
- "use strict";
2
-
3
- import { createReleaseCatalogScopeKey, encodeChannelKey } from "@hot-updater/core";
4
- import { beforeEach, describe, expect, it, vi } from "vitest";
5
- const nativeModule = vi.hoisted(() => ({}));
6
- vi.mock("./specs/NativeHotUpdater", () => ({
7
- default: nativeModule
8
- }));
9
- import { fetchReleaseCatalogWithCache } from "./releaseCatalogCache.js";
10
- const catalogId = "project-a";
11
- const scopeKey = createReleaseCatalogScopeKey({
12
- channelKey: encodeChannelKey("production"),
13
- platform: "ios",
14
- strategy: "APP_VERSION"
15
- });
16
- const input = {
17
- baseURL: "https://updates.example.com",
18
- expectedScope: {
19
- channelKey: encodeChannelKey("production"),
20
- platform: "ios",
21
- strategy: "APP_VERSION"
22
- },
23
- requestHeaders: {
24
- "x-api-key": "key"
25
- },
26
- url: "https://updates.example.com/catalog"
27
- };
28
- const catalog = {
29
- catalogId,
30
- catalogHash: `sha256:${"a".repeat(64)}`,
31
- fallbackPolicy: "BUILTIN_IF_ACTIVE_INELIGIBLE",
32
- generation: 1,
33
- releases: [],
34
- schemaVersion: 1,
35
- scopeKey
36
- };
37
- describe("Release Catalog native cache contract", () => {
38
- beforeEach(() => {
39
- for (const key of Object.keys(nativeModule)) delete nativeModule[key];
40
- });
41
- it("fails before fetching when the v1 native cache API is missing", async () => {
42
- const fetchMock = vi.fn();
43
- vi.stubGlobal("fetch", fetchMock);
44
- await expect(fetchReleaseCatalogWithCache(input)).rejects.toThrow("Native module is missing 'getReleaseCatalogCache()'. Rebuild the native app before using Release catalogs.");
45
- expect(fetchMock).not.toHaveBeenCalled();
46
- });
47
- it("uses the network when native cache I/O fails", async () => {
48
- nativeModule.getReleaseCatalogCache = vi.fn().mockRejectedValue(new Error("read"));
49
- nativeModule.setReleaseCatalogCache = vi.fn().mockRejectedValue(new Error("write"));
50
- nativeModule.removeReleaseCatalogCache = vi.fn().mockRejectedValue(new Error("remove"));
51
- const fetchMock = vi.fn().mockResolvedValue(new Response(JSON.stringify(catalog), {
52
- headers: {
53
- ETag: '"v1"'
54
- },
55
- status: 200
56
- }));
57
- vi.stubGlobal("fetch", fetchMock);
58
- await expect(fetchReleaseCatalogWithCache(input)).resolves.toEqual(catalog);
59
- expect(fetchMock).toHaveBeenCalledOnce();
60
- expect(nativeModule.getReleaseCatalogCache).toHaveBeenCalledOnce();
61
- expect(nativeModule.setReleaseCatalogCache).toHaveBeenCalledOnce();
62
- });
63
- });
64
- //# sourceMappingURL=releaseCatalogCacheNativeContract.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createReleaseCatalogScopeKey","encodeChannelKey","beforeEach","describe","expect","it","vi","nativeModule","hoisted","mock","default","fetchReleaseCatalogWithCache","catalogId","scopeKey","channelKey","platform","strategy","input","baseURL","expectedScope","requestHeaders","url","catalog","catalogHash","repeat","fallbackPolicy","generation","releases","schemaVersion","key","Object","keys","fetchMock","fn","stubGlobal","rejects","toThrow","not","toHaveBeenCalled","getReleaseCatalogCache","mockRejectedValue","Error","setReleaseCatalogCache","removeReleaseCatalogCache","mockResolvedValue","Response","JSON","stringify","headers","ETag","status","resolves","toEqual","toHaveBeenCalledOnce"],"sourceRoot":"../../src","sources":["releaseCatalogCacheNativeContract.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,85 +0,0 @@
1
- "use strict";
2
-
3
- // @vitest-environment jsdom
4
-
5
- import { cleanup, render } from "@testing-library/react";
6
- import { act, createElement, useLayoutEffect, useState } from "react";
7
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
8
- const listeners = vi.hoisted(() => new Map());
9
- vi.mock("./native", () => ({
10
- addListener: vi.fn((eventName, listener) => {
11
- listeners.set(eventName, listener);
12
- return () => {
13
- listeners.delete(eventName);
14
- };
15
- })
16
- }));
17
- describe("hotUpdaterStore notification scheduling", () => {
18
- beforeEach(() => {
19
- listeners.clear();
20
- vi.resetModules();
21
- });
22
- afterEach(() => {
23
- cleanup();
24
- vi.unstubAllGlobals();
25
- });
26
- it("keeps progress notifications from exceeding React's maximum update depth", async () => {
27
- // Given
28
- const frameCallbacks = [];
29
- vi.stubGlobal("requestAnimationFrame", callback => {
30
- frameCallbacks.push(callback);
31
- return frameCallbacks.length;
32
- });
33
- const {
34
- hotUpdaterStore
35
- } = await import("./store");
36
- const emitProgress = listeners.get("onProgress");
37
- const Consumer = () => {
38
- const [progress, setProgress] = useState(0);
39
- useLayoutEffect(() => {
40
- const unsubscribe = hotUpdaterStore.subscribe(() => {
41
- setProgress(hotUpdaterStore.getSnapshot().progress);
42
- });
43
- return () => {
44
- unsubscribe();
45
- };
46
- }, []);
47
- useLayoutEffect(() => {
48
- if (progress >= 1) {
49
- return;
50
- }
51
- const nextProgress = Math.min(1, progress + 0.01);
52
- emitProgress?.({
53
- artifactType: "diff",
54
- details: {
55
- completedFilesCount: nextProgress === 1 ? 1 : 0,
56
- files: [{
57
- order: 0,
58
- path: "index.ios.bundle",
59
- progress: nextProgress,
60
- status: nextProgress === 1 ? "downloaded" : "downloading"
61
- }],
62
- totalFilesCount: 1
63
- },
64
- progress: nextProgress
65
- });
66
- }, [progress]);
67
- return null;
68
- };
69
-
70
- // When
71
- render(/*#__PURE__*/createElement(Consumer));
72
- for (let frame = 0; frame < 200 && hotUpdaterStore.getSnapshot().progress < 1; frame++) {
73
- const frameCallback = frameCallbacks.shift();
74
- expect(frameCallback).toBeTypeOf("function");
75
- await new Promise(resolve => setImmediate(resolve));
76
- await act(async () => {
77
- frameCallback?.(0);
78
- });
79
- }
80
-
81
- // Then
82
- expect(hotUpdaterStore.getSnapshot().progress).toBe(1);
83
- });
84
- });
85
- //# sourceMappingURL=store.notification.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["cleanup","render","act","createElement","useLayoutEffect","useState","afterEach","beforeEach","describe","expect","it","vi","listeners","hoisted","Map","mock","addListener","fn","eventName","listener","set","delete","clear","resetModules","unstubAllGlobals","frameCallbacks","stubGlobal","callback","push","length","hotUpdaterStore","emitProgress","get","Consumer","progress","setProgress","unsubscribe","subscribe","getSnapshot","nextProgress","Math","min","artifactType","details","completedFilesCount","files","order","path","status","totalFilesCount","frame","frameCallback","shift","toBeTypeOf","Promise","resolve","setImmediate","toBe"],"sourceRoot":"../../src","sources":["store.notification.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,181 +0,0 @@
1
- "use strict";
2
-
3
- import { beforeEach, describe, expect, it, vi } from "vitest";
4
- const listeners = vi.hoisted(() => new Map());
5
- vi.mock("./native", () => ({
6
- addListener: vi.fn((eventName, listener) => {
7
- listeners.set(eventName, listener);
8
- return () => {
9
- listeners.delete(eventName);
10
- };
11
- })
12
- }));
13
- const importStore = async () => {
14
- const {
15
- hotUpdaterStore
16
- } = await import("./store");
17
- return hotUpdaterStore;
18
- };
19
- describe("hotUpdaterStore", () => {
20
- beforeEach(() => {
21
- listeners.clear();
22
- vi.resetModules();
23
- });
24
- it("does not notify subscribers when state values are unchanged", async () => {
25
- const store = await importStore();
26
- const listener = vi.fn();
27
- const unsubscribe = store.subscribe(listener);
28
- store.setState({});
29
- store.setState({
30
- progress: 0
31
- });
32
- store.setState({
33
- isUpdateDownloaded: false
34
- });
35
- expect(listener).not.toHaveBeenCalled();
36
- unsubscribe();
37
- });
38
- it("stores manifest progress metadata while keeping overall progress", async () => {
39
- const store = await importStore();
40
- const emitProgress = listeners.get("onProgress");
41
- expect(emitProgress).toBeTypeOf("function");
42
- emitProgress?.({
43
- artifactType: "diff",
44
- details: {
45
- completedFilesCount: 1,
46
- files: [{
47
- downloadPath: "index.ios.bundle",
48
- order: 0,
49
- path: "index.ios.bundle",
50
- progress: 1,
51
- status: "downloaded"
52
- }, {
53
- downloadPath: "assets/logo.png",
54
- order: 1,
55
- path: "assets/logo.png",
56
- progress: 0.5,
57
- status: "downloading"
58
- }],
59
- totalFilesCount: 2
60
- },
61
- progress: 0.42
62
- });
63
- expect(store.getSnapshot()).toEqual({
64
- artifactType: "diff",
65
- details: {
66
- completedFilesCount: 1,
67
- files: [{
68
- downloadPath: "index.ios.bundle",
69
- order: 0,
70
- path: "index.ios.bundle",
71
- progress: 1,
72
- status: "downloaded"
73
- }, {
74
- downloadPath: "assets/logo.png",
75
- order: 1,
76
- path: "assets/logo.png",
77
- progress: 0.5,
78
- status: "downloading"
79
- }],
80
- totalFilesCount: 2
81
- },
82
- isUpdateDownloaded: false,
83
- progress: 0.42
84
- });
85
- });
86
- it("preserves patch download metadata for manifest diff files", async () => {
87
- const store = await importStore();
88
- const emitProgress = listeners.get("onProgress");
89
- emitProgress?.({
90
- artifactType: "diff",
91
- details: {
92
- completedFilesCount: 0,
93
- files: [{
94
- downloadPath: "index.ios.bundle.bsdiff",
95
- order: 0,
96
- path: "index.ios.bundle",
97
- progress: 0.4,
98
- status: "downloading"
99
- }],
100
- totalFilesCount: 1
101
- },
102
- progress: 0.32
103
- });
104
- expect(store.getSnapshot().details?.files).toEqual([{
105
- downloadPath: "index.ios.bundle.bsdiff",
106
- downloadedBytes: undefined,
107
- order: 0,
108
- path: "index.ios.bundle",
109
- progress: 0.4,
110
- status: "downloading",
111
- totalBytes: undefined
112
- }]);
113
- });
114
- it("stores diff snapshot transitions from downloading to downloaded", async () => {
115
- const store = await importStore();
116
- const emitProgress = listeners.get("onProgress");
117
- emitProgress?.({
118
- artifactType: "diff",
119
- details: {
120
- completedFilesCount: 0,
121
- files: [{
122
- order: 0,
123
- path: "index.ios.bundle",
124
- progress: 0.6,
125
- status: "downloading"
126
- }, {
127
- order: 1,
128
- path: "assets/logo.png",
129
- progress: 0,
130
- status: "pending"
131
- }],
132
- totalFilesCount: 2
133
- },
134
- progress: 0.4
135
- });
136
- emitProgress?.({
137
- artifactType: "diff",
138
- details: {
139
- completedFilesCount: 1,
140
- files: [{
141
- downloadPath: "index.ios.bundle",
142
- order: 0,
143
- path: "index.ios.bundle",
144
- progress: 1,
145
- status: "downloaded"
146
- }, {
147
- downloadPath: "assets/logo.png",
148
- order: 1,
149
- path: "assets/logo.png",
150
- progress: 0,
151
- status: "pending"
152
- }],
153
- totalFilesCount: 2
154
- },
155
- progress: 0.6
156
- });
157
- expect(store.getSnapshot()).toEqual({
158
- artifactType: "diff",
159
- details: {
160
- completedFilesCount: 1,
161
- files: [{
162
- downloadPath: "index.ios.bundle",
163
- order: 0,
164
- path: "index.ios.bundle",
165
- progress: 1,
166
- status: "downloaded"
167
- }, {
168
- downloadPath: "assets/logo.png",
169
- order: 1,
170
- path: "assets/logo.png",
171
- progress: 0,
172
- status: "pending"
173
- }],
174
- totalFilesCount: 2
175
- },
176
- isUpdateDownloaded: false,
177
- progress: 0.6
178
- });
179
- });
180
- });
181
- //# sourceMappingURL=store.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["beforeEach","describe","expect","it","vi","listeners","hoisted","Map","mock","addListener","fn","eventName","listener","set","delete","importStore","hotUpdaterStore","clear","resetModules","store","unsubscribe","subscribe","setState","progress","isUpdateDownloaded","not","toHaveBeenCalled","emitProgress","get","toBeTypeOf","artifactType","details","completedFilesCount","files","downloadPath","order","path","status","totalFilesCount","getSnapshot","toEqual","downloadedBytes","undefined","totalBytes"],"sourceRoot":"../../src","sources":["store.spec.ts"],"mappings":"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","ignoreList":[]}