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

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 (202) hide show
  1. package/android/proguard-rules.pro +2 -2
  2. package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
  3. package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +650 -636
  4. package/android/src/main/java/com/hotupdater/BundleMetadata.kt +3 -0
  5. package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +0 -13
  6. package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +10 -14
  7. package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +19 -0
  8. package/android/src/main/java/com/hotupdater/TarArchiveInputStream.kt +214 -375
  9. package/android/src/main/java/com/hotupdater/TarBrArchiveExtractor.kt +119 -0
  10. package/android/src/newarch/HotUpdater.kt +7 -9
  11. package/android/src/newarch/HotUpdaterModule.kt +40 -20
  12. package/android/src/oldarch/HotUpdater.kt +7 -9
  13. package/android/src/oldarch/HotUpdaterModule.kt +40 -20
  14. package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +1126 -74
  15. package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +4 -5
  16. package/android/src/test/java/com/hotupdater/TarBrArchiveExtractorTest.kt +206 -0
  17. package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
  18. package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
  19. package/ios/HotUpdater/Internal/BundleFileStorageService.swift +773 -1016
  20. package/ios/HotUpdater/Internal/BundleMetadata.swift +5 -0
  21. package/ios/HotUpdater/Internal/FileUtilities.swift +64 -0
  22. package/ios/HotUpdater/Internal/HotUpdater-Bridging-Header.h +0 -1
  23. package/ios/HotUpdater/Internal/HotUpdater.mm +5 -27
  24. package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +47 -31
  25. package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
  26. package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
  27. package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +13 -72
  28. package/lib/commonjs/checkForUpdate.js +7 -10
  29. package/lib/commonjs/checkForUpdate.js.map +1 -1
  30. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +9 -4
  31. package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +1 -1
  32. package/lib/commonjs/error.js +4 -13
  33. package/lib/commonjs/error.js.map +1 -1
  34. package/lib/commonjs/fetchJSON.js +9 -2
  35. package/lib/commonjs/fetchJSON.js.map +1 -1
  36. package/lib/commonjs/httpClient.js +151 -39
  37. package/lib/commonjs/httpClient.js.map +1 -1
  38. package/lib/commonjs/httpClient.spec.js +247 -5
  39. package/lib/commonjs/httpClient.spec.js.map +1 -1
  40. package/lib/commonjs/index.js +15 -8
  41. package/lib/commonjs/index.js.map +1 -1
  42. package/lib/commonjs/index.spec.js +101 -0
  43. package/lib/commonjs/index.spec.js.map +1 -1
  44. package/lib/commonjs/native.js +7 -8
  45. package/lib/commonjs/native.js.map +1 -1
  46. package/lib/commonjs/native.spec.js +21 -16
  47. package/lib/commonjs/native.spec.js.map +1 -1
  48. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +7 -0
  49. package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +1 -1
  50. package/lib/commonjs/notifyAppReadyInsights.js +4 -1
  51. package/lib/commonjs/notifyAppReadyInsights.js.map +1 -1
  52. package/lib/commonjs/notifyAppReadyInsights.spec.js +59 -0
  53. package/lib/commonjs/notifyAppReadyInsights.spec.js.map +1 -1
  54. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +55 -1
  55. package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +1 -1
  56. package/lib/commonjs/sdkVersion.js +1 -1
  57. package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
  58. package/lib/commonjs/store.js +3 -10
  59. package/lib/commonjs/store.js.map +1 -1
  60. package/lib/commonjs/store.notification.spec.js +12 -4
  61. package/lib/commonjs/store.notification.spec.js.map +1 -1
  62. package/lib/commonjs/store.spec.js +2 -136
  63. package/lib/commonjs/store.spec.js.map +1 -1
  64. package/lib/commonjs/uuidv7.js +41 -0
  65. package/lib/commonjs/uuidv7.js.map +1 -0
  66. package/lib/commonjs/uuidv7.spec.js +30 -0
  67. package/lib/commonjs/uuidv7.spec.js.map +1 -0
  68. package/lib/commonjs/wrap.js +1 -3
  69. package/lib/commonjs/wrap.js.map +1 -1
  70. package/lib/commonjs/wrap.spec.js +7 -0
  71. package/lib/commonjs/wrap.spec.js.map +1 -1
  72. package/lib/module/checkForUpdate.js +7 -10
  73. package/lib/module/checkForUpdate.js.map +1 -1
  74. package/lib/module/checkForUpdate.releaseCatalog.spec.js +9 -4
  75. package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +1 -1
  76. package/lib/module/error.js +4 -13
  77. package/lib/module/error.js.map +1 -1
  78. package/lib/module/fetchJSON.js +7 -1
  79. package/lib/module/fetchJSON.js.map +1 -1
  80. package/lib/module/httpClient.js +153 -41
  81. package/lib/module/httpClient.js.map +1 -1
  82. package/lib/module/httpClient.spec.js +248 -6
  83. package/lib/module/httpClient.spec.js.map +1 -1
  84. package/lib/module/index.js +15 -8
  85. package/lib/module/index.js.map +1 -1
  86. package/lib/module/index.spec.js +102 -1
  87. package/lib/module/index.spec.js.map +1 -1
  88. package/lib/module/native.js +7 -8
  89. package/lib/module/native.js.map +1 -1
  90. package/lib/module/native.spec.js +21 -16
  91. package/lib/module/native.spec.js.map +1 -1
  92. package/lib/module/notifyAppReadyInsights.boundary.spec.js +7 -0
  93. package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +1 -1
  94. package/lib/module/notifyAppReadyInsights.js +5 -2
  95. package/lib/module/notifyAppReadyInsights.js.map +1 -1
  96. package/lib/module/notifyAppReadyInsights.spec.js +59 -0
  97. package/lib/module/notifyAppReadyInsights.spec.js.map +1 -1
  98. package/lib/module/notifyAppReadyInsights.transport.spec.js +55 -1
  99. package/lib/module/notifyAppReadyInsights.transport.spec.js.map +1 -1
  100. package/lib/module/sdkVersion.js +1 -1
  101. package/lib/module/specs/NativeHotUpdater.js.map +1 -1
  102. package/lib/module/store.js +3 -10
  103. package/lib/module/store.js.map +1 -1
  104. package/lib/module/store.notification.spec.js +12 -4
  105. package/lib/module/store.notification.spec.js.map +1 -1
  106. package/lib/module/store.spec.js +2 -136
  107. package/lib/module/store.spec.js.map +1 -1
  108. package/lib/module/uuidv7.js +36 -0
  109. package/lib/module/uuidv7.js.map +1 -0
  110. package/lib/module/uuidv7.spec.js +30 -0
  111. package/lib/module/uuidv7.spec.js.map +1 -0
  112. package/lib/module/wrap.js +1 -3
  113. package/lib/module/wrap.js.map +1 -1
  114. package/lib/module/wrap.spec.js +7 -0
  115. package/lib/module/wrap.spec.js.map +1 -1
  116. package/lib/typescript/commonjs/checkForUpdate.d.ts +1 -2
  117. package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/error.d.ts +4 -13
  119. package/lib/typescript/commonjs/error.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/fetchJSON.d.ts +4 -0
  121. package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/httpClient.d.ts +6 -0
  123. package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/index.d.ts +0 -2
  125. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/native.d.ts +1 -6
  127. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +1 -1
  129. package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
  131. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +8 -35
  132. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/store.d.ts +1 -3
  134. package/lib/typescript/commonjs/store.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/uuidv7.d.ts +10 -0
  136. package/lib/typescript/commonjs/uuidv7.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/wrap.types.d.ts +7 -4
  139. package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
  140. package/lib/typescript/module/checkForUpdate.d.ts +1 -2
  141. package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
  142. package/lib/typescript/module/error.d.ts +4 -13
  143. package/lib/typescript/module/error.d.ts.map +1 -1
  144. package/lib/typescript/module/fetchJSON.d.ts +4 -0
  145. package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
  146. package/lib/typescript/module/httpClient.d.ts +6 -0
  147. package/lib/typescript/module/httpClient.d.ts.map +1 -1
  148. package/lib/typescript/module/index.d.ts +0 -2
  149. package/lib/typescript/module/index.d.ts.map +1 -1
  150. package/lib/typescript/module/native.d.ts +1 -6
  151. package/lib/typescript/module/native.d.ts.map +1 -1
  152. package/lib/typescript/module/notifyAppReadyInsights.d.ts +1 -1
  153. package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +1 -1
  154. package/lib/typescript/module/sdkVersion.d.ts +1 -1
  155. package/lib/typescript/module/specs/NativeHotUpdater.d.ts +8 -35
  156. package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
  157. package/lib/typescript/module/store.d.ts +1 -3
  158. package/lib/typescript/module/store.d.ts.map +1 -1
  159. package/lib/typescript/module/uuidv7.d.ts +10 -0
  160. package/lib/typescript/module/uuidv7.d.ts.map +1 -0
  161. package/lib/typescript/module/wrap.d.ts.map +1 -1
  162. package/lib/typescript/module/wrap.types.d.ts +7 -4
  163. package/lib/typescript/module/wrap.types.d.ts.map +1 -1
  164. package/package.json +3 -3
  165. package/src/checkForUpdate.releaseCatalog.spec.ts +10 -4
  166. package/src/checkForUpdate.ts +5 -11
  167. package/src/error.ts +4 -14
  168. package/src/fetchJSON.ts +12 -1
  169. package/src/httpClient.spec.ts +289 -8
  170. package/src/httpClient.ts +224 -67
  171. package/src/index.spec.ts +70 -1
  172. package/src/index.ts +18 -7
  173. package/src/native.spec.ts +23 -16
  174. package/src/native.ts +12 -24
  175. package/src/notifyAppReadyInsights.boundary.spec.ts +8 -0
  176. package/src/notifyAppReadyInsights.spec.ts +60 -0
  177. package/src/notifyAppReadyInsights.transport.spec.ts +66 -0
  178. package/src/notifyAppReadyInsights.ts +13 -1
  179. package/src/sdkVersion.ts +1 -1
  180. package/src/specs/NativeHotUpdater.ts +8 -36
  181. package/src/store.notification.spec.ts +13 -3
  182. package/src/store.spec.ts +0 -157
  183. package/src/store.ts +2 -23
  184. package/src/uuidv7.spec.ts +25 -0
  185. package/src/uuidv7.ts +38 -0
  186. package/src/wrap.spec.ts +8 -0
  187. package/src/wrap.tsx +0 -2
  188. package/src/wrap.types.ts +9 -4
  189. package/android/src/main/java/com/hotupdater/DecompressService.kt +0 -89
  190. package/android/src/main/java/com/hotupdater/DecompressionStrategy.kt +0 -26
  191. package/android/src/main/java/com/hotupdater/TarBrDecompressionStrategy.kt +0 -117
  192. package/android/src/main/java/com/hotupdater/TarGzDecompressionStrategy.kt +0 -117
  193. package/android/src/main/java/com/hotupdater/ZipDecompressionStrategy.kt +0 -192
  194. package/android/src/test/java/com/hotupdater/TarArchiveInputStreamTest.kt +0 -68
  195. package/ios/HotUpdater/Internal/ArchiveExtractionUtilities.swift +0 -178
  196. package/ios/HotUpdater/Internal/DecompressService.swift +0 -112
  197. package/ios/HotUpdater/Internal/DecompressionStrategy.swift +0 -22
  198. package/ios/HotUpdater/Internal/StreamingTarArchiveExtractor.swift +0 -370
  199. package/ios/HotUpdater/Internal/TarBrDecompressionStrategy.swift +0 -39
  200. package/ios/HotUpdater/Internal/TarGzDecompressionStrategy.swift +0 -59
  201. package/ios/HotUpdater/Internal/ZipArchiveExtractor.swift +0 -482
  202. package/ios/HotUpdater/Internal/ZipDecompressionStrategy.swift +0 -56
@@ -9,6 +9,7 @@ var _pluginCore = require("@hot-updater/plugin-core");
9
9
  var _fetchJSON = require("./fetchJSON.js");
10
10
  var _releaseCatalogCache = require("./releaseCatalogCache.js");
11
11
  var _sdkVersion = require("./sdkVersion.js");
12
+ var _uuidv = require("./uuidv7.js");
12
13
  const resolveBaseURL = async baseURL => {
13
14
  const resolvedBaseURL = typeof baseURL === "function" ? await baseURL() : baseURL;
14
15
  if (!resolvedBaseURL) {
@@ -28,29 +29,59 @@ const resolveArtifactUrl = (baseURL, value) => {
28
29
  };
29
30
  const resolveArtifactUrls = (baseURL, info) => ({
30
31
  ...info,
31
- fileUrl: info.fileUrl === null ? null : resolveArtifactUrl(baseURL, info.fileUrl),
32
- ...(info.manifestUrl === undefined ? {} : {
33
- manifestUrl: info.manifestUrl === null ? null : resolveArtifactUrl(baseURL, info.manifestUrl)
34
- }),
35
- ...(info.changedAssets === undefined ? {} : {
36
- changedAssets: info.changedAssets === null ? null : Object.fromEntries(Object.entries(info.changedAssets).map(([path, asset]) => [path, {
37
- ...asset,
38
- ...(asset.file ? {
39
- file: {
40
- ...asset.file,
41
- url: resolveArtifactUrl(baseURL, asset.file.url)
42
- }
43
- } : {}),
44
- ...(asset.patch ? {
45
- patch: {
46
- ...asset.patch,
47
- patchUrl: resolveArtifactUrl(baseURL, asset.patch.patchUrl)
48
- }
49
- } : {})
50
- }]))
51
- })
32
+ manifestUrl: resolveArtifactUrl(baseURL, info.manifestUrl),
33
+ ...(info.archiveUrl ? {
34
+ archiveUrl: resolveArtifactUrl(baseURL, info.archiveUrl)
35
+ } : {}),
36
+ assets: Object.fromEntries(Object.entries(info.assets).map(([path, asset]) => [path, {
37
+ ...asset,
38
+ file: {
39
+ ...asset.file,
40
+ url: resolveArtifactUrl(baseURL, asset.file.url)
41
+ },
42
+ ...(asset.patch ? {
43
+ patch: {
44
+ ...asset.patch,
45
+ patchUrl: resolveArtifactUrl(baseURL, asset.patch.patchUrl)
46
+ }
47
+ } : {})
48
+ }]))
49
+ });
50
+ const requireArtifactProtocolV1 = info => {
51
+ if (info.artifactProtocolVersion !== _core.ARTIFACT_PROTOCOL_VERSION || !info.assets || !info.manifestUrl || !info.manifestFileHash || info.archiveUrl !== undefined && typeof info.archiveUrl !== "string") {
52
+ throw new Error(`Server does not support artifact protocol ${_core.ARTIFACT_PROTOCOL_VERSION}.`);
53
+ }
54
+ for (const asset of Object.values(info.assets)) {
55
+ if (!asset.file?.url || !asset.fileHash) {
56
+ throw new Error("Artifact protocol 1 requires an original file for every asset.");
57
+ }
58
+ }
59
+ return info;
60
+ };
61
+
62
+ /** Attempts per Insights event, the first one included. */
63
+ const INSIGHTS_MAX_ATTEMPTS = 3;
64
+ /** Wait before the second attempt; it doubles for each later attempt. */
65
+ const INSIGHTS_RETRY_BASE_DELAY_MS = 1000;
66
+ /** Longest wait between attempts, a server's `Retry-After` included. */
67
+ const INSIGHTS_RETRY_MAX_DELAY_MS = 30000;
68
+ /**
69
+ * Reads `Retry-After` as delay-seconds, the form a server under load sends;
70
+ * an HTTP-date falls back to the backoff.
71
+ */
72
+ const parseRetryAfterMs = value => {
73
+ const seconds = value?.trim();
74
+ return seconds && /^\d+$/.test(seconds) ? Number(seconds) * 1000 : null;
75
+ };
76
+ const getRetryDelayMs = (failedAttempt, retryAfterMs) => Math.min(retryAfterMs ??
77
+ // Jitter spreads the retries of installations that failed together.
78
+ INSIGHTS_RETRY_BASE_DELAY_MS * 2 ** (failedAttempt - 1) * (0.5 + Math.random()), INSIGHTS_RETRY_MAX_DELAY_MS);
79
+ const wait = ms => new Promise(resolve => {
80
+ setTimeout(resolve, ms);
52
81
  });
53
- const sendInsightsEvent = async (baseURL, params) => {
82
+
83
+ /** Makes one POST, with its own timeout, and settles with its failure. */
84
+ const postInsightsEvent = async (baseURL, params, eventId) => {
54
85
  const controller = new AbortController();
55
86
  const timeoutId = setTimeout(() => {
56
87
  controller.abort();
@@ -61,6 +92,7 @@ const sendInsightsEvent = async (baseURL, params) => {
61
92
  appVersion: params.appVersion,
62
93
  channel: params.channel,
63
94
  cohort: params.cohort,
95
+ eventId,
64
96
  fingerprintHash: params.fingerprintHash,
65
97
  fromBundleId: params.fromBundleId,
66
98
  ...(params.fromReleaseId === undefined ? {} : {
@@ -89,19 +121,85 @@ const sendInsightsEvent = async (baseURL, params) => {
89
121
  method: "POST",
90
122
  signal: controller.signal
91
123
  });
92
- if (response.status !== 204) {
93
- throw new Error(`Expected HTTP 204 from /events, received ${response.status}`);
94
- }
124
+ if (response.status === 204) return null;
125
+ return {
126
+ error: new Error(`Expected HTTP 204 from /events, received ${response.status}`),
127
+ retryable: response.status === 429 || response.status >= 500,
128
+ retryAfterMs: parseRetryAfterMs(response.headers.get("Retry-After"))
129
+ };
95
130
  } catch (error) {
96
- if (error instanceof Error && error.name === "AbortError") {
97
- throw new Error("Request timed out");
98
- }
99
- throw error;
131
+ // fetch rejects only when no response arrived (a timeout or a network
132
+ // error), so a later attempt may still get through.
133
+ return {
134
+ error: error instanceof Error && error.name === "AbortError" ? new Error("Request timed out") : error instanceof Error ? error : new Error(String(error)),
135
+ retryable: true,
136
+ retryAfterMs: null
137
+ };
100
138
  } finally {
101
139
  clearTimeout(timeoutId);
102
140
  }
103
141
  };
104
- const createSession = baseURL => ({
142
+ /**
143
+ * Sends Insights events one at a time and retries each in the background.
144
+ *
145
+ * The server keeps an installation's latest report by arrival, so a later
146
+ * event waits behind an earlier one's retries; otherwise a retried
147
+ * UPDATE_APPLIED could land after the UPDATE_DOWNLOADED that followed it.
148
+ * Callers still wait only for first attempts, as they did before retries, so
149
+ * startup, readiness and `updateBundle()` never wait out a backoff: once an
150
+ * event backs off, every waiting caller is released, and a failure after that
151
+ * only warns.
152
+ */
153
+ const createInsightsEventSender = () => {
154
+ let queue = Promise.resolve();
155
+ let retrying = false;
156
+ const waiting = new Set();
157
+ return (baseURL, params) => {
158
+ // One ID for every attempt, so the server counts a retried POST once.
159
+ const eventId = (0, _uuidv.createUUIDv7)();
160
+ return new Promise((resolve, reject) => {
161
+ let released = false;
162
+ const release = () => {
163
+ released = true;
164
+ waiting.delete(release);
165
+ resolve();
166
+ };
167
+ if (retrying) release();else waiting.add(release);
168
+ queue = queue.then(async () => {
169
+ try {
170
+ for (let attempt = 1;; attempt += 1) {
171
+ const failure = await postInsightsEvent(baseURL, params, eventId);
172
+ if (failure === null) {
173
+ release();
174
+ break;
175
+ }
176
+ if (!failure.retryable || attempt === INSIGHTS_MAX_ATTEMPTS) {
177
+ waiting.delete(release);
178
+ if (released) {
179
+ console.warn(`[HotUpdater] Insights ${params.type} event was not delivered:`, failure.error);
180
+ } else {
181
+ reject(failure.error);
182
+ }
183
+ break;
184
+ }
185
+ retrying = true;
186
+ for (const releaseWaiting of waiting) releaseWaiting();
187
+ await wait(getRetryDelayMs(attempt, failure.retryAfterMs));
188
+ }
189
+ } catch (error) {
190
+ // A failed request settles in postInsightsEvent, so only a bug gets
191
+ // here. A rejected queue would leave every later event, and a caller
192
+ // such as `updateBundle()` waiting on one, pending forever.
193
+ waiting.delete(release);
194
+ if (!released) reject(error);
195
+ } finally {
196
+ retrying = false;
197
+ }
198
+ });
199
+ });
200
+ };
201
+ };
202
+ const createSession = (baseURL, sendInsightsEvent) => ({
105
203
  fetchReleaseCatalog: async params => {
106
204
  const channelKey = (0, _core.encodeChannelKey)(params.channel);
107
205
  let strategyValue;
@@ -135,19 +233,33 @@ const createSession = baseURL => ({
135
233
  });
136
234
  },
137
235
  resolveArtifact: async params => {
138
- const info = await (0, _fetchJSON.fetchJSON)({
139
- requestHeaders: params.requestHeaders,
140
- requestTimeout: params.requestTimeout,
141
- url: `${baseURL}/artifacts/${encodeURIComponent(params.targetBundleId)}/from/${encodeURIComponent(params.currentBundleId)}`
142
- });
143
- return resolveArtifactUrls(baseURL, info);
236
+ let info;
237
+ try {
238
+ info = await (0, _fetchJSON.fetchJSON)({
239
+ requestHeaders: params.requestHeaders,
240
+ requestTimeout: params.requestTimeout,
241
+ url: `${baseURL}/artifacts/v1/${encodeURIComponent(params.targetBundleId)}/from/${encodeURIComponent(params.currentBundleId)}`
242
+ });
243
+ } catch (error) {
244
+ if (error instanceof _fetchJSON.FetchJSONResponseError && error.status === 404) {
245
+ throw new Error(`Server does not support artifact protocol ${_core.ARTIFACT_PROTOCOL_VERSION}.`, {
246
+ cause: error
247
+ });
248
+ }
249
+ throw error;
250
+ }
251
+ return resolveArtifactUrls(baseURL, requireArtifactProtocolV1(info));
144
252
  },
145
253
  sendInsightsEvent: params => sendInsightsEvent(baseURL, params)
146
254
  });
147
255
 
148
256
  /** Creates the private HTTP client used by HotUpdater.init and HotUpdater.wrap. */
149
- const createHttpClient = baseURL => ({
150
- createSession: async () => createSession(await resolveBaseURL(baseURL))
151
- });
257
+ const createHttpClient = baseURL => {
258
+ // Shared by every session, since each report opens its own session.
259
+ const sendInsightsEvent = createInsightsEventSender();
260
+ return {
261
+ createSession: async () => createSession(await resolveBaseURL(baseURL), sendInsightsEvent)
262
+ };
263
+ };
152
264
  exports.createHttpClient = createHttpClient;
153
265
  //# sourceMappingURL=httpClient.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_pluginCore","_fetchJSON","_releaseCatalogCache","_sdkVersion","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","HOT_UPDATER_SDK_VERSION","toBundleId","toReleaseId","type","updateStrategy","userId","username","headers","requestHeaders","method","signal","status","error","name","clearTimeout","createSession","fetchReleaseCatalog","channelKey","encodeChannelKey","strategyValue","canonicalizeAppVersion","strategyPath","encodeURIComponent","fetchReleaseCatalogWithCache","expectedScope","strategy","resolveArtifact","fetchJSON","targetBundleId","currentBundleId","createHttpClient","exports"],"sourceRoot":"../../src","sources":["httpClient.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_pluginCore","_fetchJSON","_releaseCatalogCache","_sdkVersion","_uuidv","resolveBaseURL","baseURL","resolvedBaseURL","Error","replace","resolveArtifactUrl","value","test","URL","startsWith","slice","resolveArtifactUrls","info","manifestUrl","archiveUrl","assets","Object","fromEntries","entries","map","path","asset","file","url","patch","patchUrl","requireArtifactProtocolV1","artifactProtocolVersion","ARTIFACT_PROTOCOL_VERSION","manifestFileHash","undefined","values","fileHash","INSIGHTS_MAX_ATTEMPTS","INSIGHTS_RETRY_BASE_DELAY_MS","INSIGHTS_RETRY_MAX_DELAY_MS","parseRetryAfterMs","seconds","trim","Number","getRetryDelayMs","failedAttempt","retryAfterMs","Math","min","random","wait","ms","Promise","resolve","setTimeout","postInsightsEvent","params","eventId","controller","AbortController","timeoutId","abort","requestTimeout","response","fetch","body","JSON","stringify","appVersion","channel","cohort","fingerprintHash","fromBundleId","fromReleaseId","installId","platform","sdkVersion","HOT_UPDATER_SDK_VERSION","toBundleId","toReleaseId","type","updateStrategy","userId","username","headers","requestHeaders","method","signal","status","error","retryable","get","name","String","clearTimeout","createInsightsEventSender","queue","retrying","waiting","Set","createUUIDv7","reject","released","release","delete","add","then","attempt","failure","console","warn","releaseWaiting","createSession","sendInsightsEvent","fetchReleaseCatalog","channelKey","encodeChannelKey","strategyValue","canonicalizeAppVersion","strategyPath","encodeURIComponent","fetchReleaseCatalogWithCache","expectedScope","strategy","resolveArtifact","fetchJSON","targetBundleId","currentBundleId","FetchJSONResponseError","cause","createHttpClient","exports"],"sourceRoot":"../../src","sources":["httpClient.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ var _core = require("@hot-updater/core");
3
4
  var _vitest = require("vitest");
5
+ var _fetchJSON = require("./fetchJSON.js");
4
6
  var _httpClient = require("./httpClient.js");
5
7
  const mocks = _vitest.vi.hoisted(() => {
6
8
  Reflect.set(globalThis, "HotUpdater", {
@@ -15,11 +17,27 @@ _vitest.vi.mock("./releaseCatalogCache", () => ({
15
17
  fetchReleaseCatalogWithCache: mocks.fetchCatalog
16
18
  }));
17
19
  _vitest.vi.mock("./fetchJSON", () => ({
20
+ FetchJSONResponseError: class FetchJSONResponseError extends Error {
21
+ constructor(status, statusText) {
22
+ super(statusText);
23
+ this.status = status;
24
+ }
25
+ },
18
26
  fetchJSON: mocks.fetchJSON
19
27
  }));
20
28
  const artifact = {
21
- fileHash: "bundle-hash",
22
- fileUrl: "/storage/bundle.zip"
29
+ artifactProtocolVersion: 1,
30
+ assets: {
31
+ "index.ios.bundle": {
32
+ file: {
33
+ url: "/storage/index.bundle.br"
34
+ },
35
+ fileHash: "bundle-hash"
36
+ }
37
+ },
38
+ manifestFileHash: "manifest-hash",
39
+ manifestUrl: "/storage/manifest.json",
40
+ archiveUrl: "/storage/bundle.tar.br"
23
41
  };
24
42
  const catalog = {
25
43
  catalogId: "server-owned-project",
@@ -73,13 +91,22 @@ const catalog = {
73
91
  targetBundleId: "target"
74
92
  })).resolves.toEqual({
75
93
  ...artifact,
76
- fileUrl: "https://first.example.com/hot-updater/storage/bundle.zip"
94
+ assets: {
95
+ "index.ios.bundle": {
96
+ file: {
97
+ url: "https://first.example.com/hot-updater/storage/index.bundle.br"
98
+ },
99
+ fileHash: "bundle-hash"
100
+ }
101
+ },
102
+ manifestUrl: "https://first.example.com/hot-updater/storage/manifest.json",
103
+ archiveUrl: "https://first.example.com/hot-updater/storage/bundle.tar.br"
77
104
  });
78
105
  (0, _vitest.expect)(resolveBaseURL).toHaveBeenCalledOnce();
79
106
  (0, _vitest.expect)(mocks.fetchJSON).toHaveBeenCalledWith({
80
107
  requestHeaders: undefined,
81
108
  requestTimeout: undefined,
82
- url: "https://first.example.com/hot-updater/artifacts/target/from/current"
109
+ url: "https://first.example.com/hot-updater/artifacts/v1/target/from/current"
83
110
  });
84
111
  await client.createSession();
85
112
  (0, _vitest.expect)(resolveBaseURL).toHaveBeenCalledTimes(2);
@@ -87,7 +114,14 @@ const catalog = {
87
114
  (0, _vitest.it)("rejects non-storage relative artifact URLs", async () => {
88
115
  mocks.fetchJSON.mockResolvedValue({
89
116
  ...artifact,
90
- fileUrl: "/private/bundle.zip"
117
+ assets: {
118
+ "index.ios.bundle": {
119
+ file: {
120
+ url: "/private/index.bundle.br"
121
+ },
122
+ fileHash: "bundle-hash"
123
+ }
124
+ }
91
125
  });
92
126
  const session = await (0, _httpClient.createHttpClient)("https://updates.example.com").createSession();
93
127
  await (0, _vitest.expect)(session.resolveArtifact({
@@ -95,8 +129,216 @@ const catalog = {
95
129
  targetBundleId: "target"
96
130
  })).rejects.toThrow("client-relative storage paths");
97
131
  });
132
+ (0, _vitest.it)("rejects a legacy artifact response", async () => {
133
+ mocks.fetchJSON.mockResolvedValue({
134
+ fileHash: "archive-hash",
135
+ fileUrl: "/storage/bundle.zip"
136
+ });
137
+ const session = await (0, _httpClient.createHttpClient)("https://updates.example.com").createSession();
138
+ await (0, _vitest.expect)(session.resolveArtifact({
139
+ currentBundleId: "current",
140
+ targetBundleId: "target"
141
+ })).rejects.toThrow("does not support artifact protocol 1");
142
+ });
143
+ (0, _vitest.it)("reports an old server without the v1 endpoint explicitly", async () => {
144
+ mocks.fetchJSON.mockRejectedValue(new _fetchJSON.FetchJSONResponseError(404, "Not Found"));
145
+ const session = await (0, _httpClient.createHttpClient)("https://updates.example.com").createSession();
146
+ await (0, _vitest.expect)(session.resolveArtifact({
147
+ currentBundleId: "current",
148
+ targetBundleId: "target"
149
+ })).rejects.toThrow("does not support artifact protocol 1");
150
+ });
98
151
  (0, _vitest.it)("requires a functional baseURL to resolve to a non-empty string", async () => {
99
152
  await (0, _vitest.expect)((0, _httpClient.createHttpClient)(() => "").createSession()).rejects.toThrow("baseURL function must return a non-empty string");
100
153
  });
101
154
  });
155
+ const unchangedEvent = {
156
+ appVersion: "1.0.0",
157
+ channel: "production",
158
+ cohort: "123",
159
+ fingerprintHash: null,
160
+ fromBundleId: null,
161
+ installId: "install-id",
162
+ platform: "ios",
163
+ toBundleId: "bundle-id",
164
+ type: "UNCHANGED",
165
+ updateStrategy: null
166
+ };
167
+
168
+ /** Answers each POST /events with the next response, then 204. */
169
+ const stubEventsEndpoint = (...responses) => {
170
+ const fetchMock = _vitest.vi.fn(async () => {
171
+ const next = responses.shift() ?? 204;
172
+ if (next instanceof Error) throw next;
173
+ return typeof next === "number" ? new Response(null, {
174
+ status: next
175
+ }) : next;
176
+ });
177
+ _vitest.vi.stubGlobal("fetch", fetchMock);
178
+ const sentEvents = () => fetchMock.mock.calls.map(([, request]) => JSON.parse(String(request?.body)));
179
+ return {
180
+ fetchMock,
181
+ sentEvents
182
+ };
183
+ };
184
+ (0, _vitest.describe)("Insights event delivery", () => {
185
+ (0, _vitest.beforeEach)(() => {
186
+ _vitest.vi.useFakeTimers();
187
+ // No jitter: the first retry waits exactly 1 s and the second 2 s.
188
+ _vitest.vi.spyOn(Math, "random").mockReturnValue(0.5);
189
+ });
190
+ (0, _vitest.afterEach)(() => {
191
+ _vitest.vi.useRealTimers();
192
+ _vitest.vi.unstubAllGlobals();
193
+ _vitest.vi.restoreAllMocks();
194
+ });
195
+ const createSession = () => (0, _httpClient.createHttpClient)("https://updates.example.com").createSession();
196
+ (0, _vitest.it)("retries a 503 in the background under the same UUIDv7 eventId", async () => {
197
+ const {
198
+ fetchMock,
199
+ sentEvents
200
+ } = stubEventsEndpoint(503, 204);
201
+ const session = await createSession();
202
+
203
+ // Settles after the failed first attempt, without waiting for the retry.
204
+ await session.sendInsightsEvent(unchangedEvent);
205
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledOnce();
206
+ await _vitest.vi.advanceTimersByTimeAsync(1_000);
207
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(2);
208
+ const [first, second] = sentEvents();
209
+ (0, _vitest.expect)((0, _core.isUUIDv7)(first?.eventId)).toBe(true);
210
+ (0, _vitest.expect)(second?.eventId).toBe(first?.eventId);
211
+ });
212
+ (0, _vitest.it)("waits for a 429's Retry-After before the next attempt", async () => {
213
+ const {
214
+ fetchMock
215
+ } = stubEventsEndpoint(new Response(null, {
216
+ headers: {
217
+ "Retry-After": "7"
218
+ },
219
+ status: 429
220
+ }));
221
+ const session = await createSession();
222
+ await session.sendInsightsEvent(unchangedEvent);
223
+ await _vitest.vi.advanceTimersByTimeAsync(6_999);
224
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledOnce();
225
+ await _vitest.vi.advanceTimersByTimeAsync(1);
226
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(2);
227
+ });
228
+ (0, _vitest.it)("caps a server's Retry-After at 30 seconds", async () => {
229
+ const {
230
+ fetchMock
231
+ } = stubEventsEndpoint(new Response(null, {
232
+ headers: {
233
+ "Retry-After": "3600"
234
+ },
235
+ status: 503
236
+ }));
237
+ const session = await createSession();
238
+ await session.sendInsightsEvent(unchangedEvent);
239
+ await _vitest.vi.advanceTimersByTimeAsync(29_999);
240
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledOnce();
241
+ await _vitest.vi.advanceTimersByTimeAsync(1);
242
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(2);
243
+ });
244
+ (0, _vitest.it)("does not retry a 400", async () => {
245
+ const {
246
+ fetchMock
247
+ } = stubEventsEndpoint(400);
248
+ const session = await createSession();
249
+ await (0, _vitest.expect)(session.sendInsightsEvent(unchangedEvent)).rejects.toThrow("Expected HTTP 204 from /events, received 400");
250
+ await _vitest.vi.runAllTimersAsync();
251
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledOnce();
252
+ });
253
+ (0, _vitest.it)("stops after three attempts and warns once", async () => {
254
+ const warn = _vitest.vi.spyOn(console, "warn").mockImplementation(() => {});
255
+ const {
256
+ fetchMock
257
+ } = stubEventsEndpoint(500, new Error("network unavailable"), 503);
258
+ const session = await createSession();
259
+ await session.sendInsightsEvent(unchangedEvent);
260
+ await _vitest.vi.runAllTimersAsync();
261
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(3);
262
+ (0, _vitest.expect)(warn).toHaveBeenCalledExactlyOnceWith("[HotUpdater] Insights UNCHANGED event was not delivered:", _vitest.expect.objectContaining({
263
+ message: "Expected HTTP 204 from /events, received 503"
264
+ }));
265
+ });
266
+ (0, _vitest.it)("gives each attempt its own timeout", async () => {
267
+ const warn = _vitest.vi.spyOn(console, "warn").mockImplementation(() => {});
268
+ const fetchMock = _vitest.vi.fn((_input, request) => new Promise((_resolve, reject) => {
269
+ request?.signal?.addEventListener("abort", () => {
270
+ reject(Object.assign(new Error("aborted"), {
271
+ name: "AbortError"
272
+ }));
273
+ });
274
+ }));
275
+ _vitest.vi.stubGlobal("fetch", fetchMock);
276
+ const session = await createSession();
277
+ const sent = session.sendInsightsEvent({
278
+ ...unchangedEvent,
279
+ requestTimeout: 2_000
280
+ });
281
+ await _vitest.vi.advanceTimersByTimeAsync(2_000);
282
+ await sent;
283
+ // The second attempt starts after a 1 s backoff and gets a full 2 s.
284
+ await _vitest.vi.advanceTimersByTimeAsync(1_000);
285
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(2);
286
+ const secondSignal = fetchMock.mock.calls[1]?.[1]?.signal;
287
+ await _vitest.vi.advanceTimersByTimeAsync(1_999);
288
+ (0, _vitest.expect)(secondSignal?.aborted).toBe(false);
289
+ await _vitest.vi.advanceTimersByTimeAsync(1);
290
+ (0, _vitest.expect)(secondSignal?.aborted).toBe(true);
291
+ await _vitest.vi.runAllTimersAsync();
292
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(3);
293
+ (0, _vitest.expect)(warn).toHaveBeenCalledExactlyOnceWith("[HotUpdater] Insights UNCHANGED event was not delivered:", _vitest.expect.objectContaining({
294
+ message: "Request timed out"
295
+ }));
296
+ });
297
+ (0, _vitest.it)("sends a later event after an earlier event's retries without holding its caller", async () => {
298
+ const {
299
+ fetchMock,
300
+ sentEvents
301
+ } = stubEventsEndpoint(503);
302
+ const session = await createSession();
303
+ await session.sendInsightsEvent(unchangedEvent);
304
+ await session.sendInsightsEvent({
305
+ ...unchangedEvent,
306
+ fromBundleId: "bundle-id",
307
+ toBundleId: "next-bundle-id",
308
+ type: "UPDATE_DOWNLOADED",
309
+ updateStrategy: "appVersion"
310
+ });
311
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledOnce();
312
+ await _vitest.vi.runAllTimersAsync();
313
+ const [first, retry, later] = sentEvents();
314
+ (0, _vitest.expect)([first?.type, retry?.type, later?.type]).toEqual(["UNCHANGED", "UNCHANGED", "UPDATE_DOWNLOADED"]);
315
+ (0, _vitest.expect)(retry?.eventId).toBe(first?.eventId);
316
+ (0, _vitest.expect)(later?.eventId).not.toBe(first?.eventId);
317
+ });
318
+ (0, _vitest.it)("keeps sending events after one fails outside its requests", async () => {
319
+ _vitest.vi.spyOn(console, "warn").mockImplementation(() => {
320
+ throw new Error("console unavailable");
321
+ });
322
+ const {
323
+ fetchMock,
324
+ sentEvents
325
+ } = stubEventsEndpoint(500, 500, 500);
326
+ const session = await createSession();
327
+ await session.sendInsightsEvent(unchangedEvent);
328
+ await _vitest.vi.runAllTimersAsync();
329
+ (0, _vitest.expect)(fetchMock).toHaveBeenCalledTimes(3);
330
+
331
+ // A queue left rejected would never send this event or settle its caller.
332
+ await session.sendInsightsEvent({
333
+ ...unchangedEvent,
334
+ fromBundleId: "bundle-id",
335
+ toBundleId: "next-bundle-id",
336
+ type: "UPDATE_DOWNLOADED",
337
+ updateStrategy: "appVersion"
338
+ });
339
+ (0, _vitest.expect)(sentEvents().map(({
340
+ type
341
+ }) => type)).toEqual(["UNCHANGED", "UNCHANGED", "UNCHANGED", "UPDATE_DOWNLOADED"]);
342
+ });
343
+ });
102
344
  //# sourceMappingURL=httpClient.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_vitest","require","_httpClient","mocks","vi","hoisted","Reflect","set","globalThis","SDK_VERSION","fetchCatalog","fn","fetchJSON","mock","fetchReleaseCatalogWithCache","artifact","fileHash","fileUrl","catalog","catalogId","catalogHash","repeat","fallbackPolicy","generation","releases","schemaVersion","scopeKey","describe","beforeEach","clearAllMocks","mockResolvedValue","it","session","createHttpClient","createSession","expect","fetchReleaseCatalog","appVersion","channel","fingerprintHash","platform","updateStrategy","resolves","toBe","toHaveBeenCalledWith","baseURL","expectedScope","channelKey","strategy","requestHeaders","undefined","requestTimeout","url","resolveBaseURL","mockResolvedValueOnce","client","firstSession","resolveArtifact","currentBundleId","targetBundleId","toEqual","toHaveBeenCalledOnce","toHaveBeenCalledTimes","rejects","toThrow"],"sourceRoot":"../../src","sources":["httpClient.spec.ts"],"mappings":";;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,MAAME,KAAK,GAAGC,UAAE,CAACC,OAAO,CAAC,MAAM;EAC7BC,OAAO,CAACC,GAAG,CAACC,UAAU,EAAE,YAAY,EAAE;IACpCC,WAAW,EAAE;EACf,CAAC,CAAC;EACF,OAAO;IACLC,YAAY,EAAEN,UAAE,CAACO,EAAE,CAAC,CAAC;IACrBC,SAAS,EAAER,UAAE,CAACO,EAAE,CAAC;EACnB,CAAC;AACH,CAAC,CAAC;AAEFP,UAAE,CAACS,IAAI,CAAC,uBAAuB,EAAE,OAAO;EACtCC,4BAA4B,EAAEX,KAAK,CAACO;AACtC,CAAC,CAAC,CAAC;AAEHN,UAAE,CAACS,IAAI,CAAC,aAAa,EAAE,OAAO;EAC5BD,SAAS,EAAET,KAAK,CAACS;AACnB,CAAC,CAAC,CAAC;AAEH,MAAMG,QAAsB,GAAG;EAC7BC,QAAQ,EAAE,aAAa;EACvBC,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,OAAuB,GAAG;EAC9BC,SAAS,EAAE,sBAAsB;EACjCC,WAAW,EAAE,UAAU,GAAG,CAACC,MAAM,CAAC,EAAE,CAAC,EAAE;EACvCC,cAAc,EAAE,8BAA8B;EAC9CC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE,EAAE;EACZC,aAAa,EAAE,CAAC;EAChBC,QAAQ,EAAE;AACZ,CAAC;AAED,IAAAC,gBAAQ,EAAC,gCAAgC,EAAE,MAAM;EAC/C,IAAAC,kBAAU,EAAC,MAAM;IACfxB,UAAE,CAACyB,aAAa,CAAC,CAAC;IAClB1B,KAAK,CAACO,YAAY,CAACoB,iBAAiB,CAACZ,OAAO,CAAC;IAC7Cf,KAAK,CAACS,SAAS,CAACkB,iBAAiB,CAACf,QAAQ,CAAC;EAC7C,CAAC,CAAC;EAEF,IAAAgB,UAAE,EAAC,sEAAsE,EAAE,YAAY;IACrF,MAAMC,OAAO,GAAG,MAAM,IAAAC,4BAAgB,EACpC,0CACF,CAAC,CAACC,aAAa,CAAC,CAAC;IAEjB,MAAM,IAAAC,cAAM,EACVH,OAAO,CAACI,mBAAmB,CAAC;MAC1BC,UAAU,EAAE,OAAO;MACnBC,OAAO,EAAE,YAAY;MACrBC,eAAe,EAAE,IAAI;MACrBC,QAAQ,EAAE,KAAK;MACfC,cAAc,EAAE;IAClB,CAAC,CACH,CAAC,CAACC,QAAQ,CAACC,IAAI,CAACzB,OAAO,CAAC;IAExB,IAAAiB,cAAM,EAAChC,KAAK,CAACO,YAAY,CAAC,CAACkC,oBAAoB,CAAC;MAC9CC,OAAO,EAAE,yCAAyC;MAClDC,aAAa,EAAE;QACbC,UAAU,EAAE,gBAAgB;QAC5BP,QAAQ,EAAE,KAAK;QACfQ,QAAQ,EAAE;MACZ,CAAC;MACDC,cAAc,EAAEC,SAAS;MACzBC,cAAc,EAAED,SAAS;MACzBE,GAAG,EAAE;IACP,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAArB,UAAE,EAAC,wFAAwF,EAAE,YAAY;IACvG,MAAMsB,cAAc,GAAGjD,UAAE,CACtBO,EAAE,CAAC,CAAC,CACJ2C,qBAAqB,CAAC,uCAAuC,CAAC,CAC9DA,qBAAqB,CAAC,wCAAwC,CAAC;IAClE,MAAMC,MAAM,GAAG,IAAAtB,4BAAgB,EAACoB,cAAc,CAAC;IAC/C,MAAMG,YAAY,GAAG,MAAMD,MAAM,CAACrB,aAAa,CAAC,CAAC;IAEjD,MAAMsB,YAAY,CAACpB,mBAAmB,CAAC;MACrCC,UAAU,EAAE,OAAO;MACnBC,OAAO,EAAE,YAAY;MACrBC,eAAe,EAAE,IAAI;MACrBC,QAAQ,EAAE,KAAK;MACfC,cAAc,EAAE;IAClB,CAAC,CAAC;IACF,MAAM,IAAAN,cAAM,EACVqB,YAAY,CAACC,eAAe,CAAC;MAC3BC,eAAe,EAAE,SAAS;MAC1BC,cAAc,EAAE;IAClB,CAAC,CACH,CAAC,CAACjB,QAAQ,CAACkB,OAAO,CAAC;MACjB,GAAG7C,QAAQ;MACXE,OAAO,EAAE;IACX,CAAC,CAAC;IAEF,IAAAkB,cAAM,EAACkB,cAAc,CAAC,CAACQ,oBAAoB,CAAC,CAAC;IAC7C,IAAA1B,cAAM,EAAChC,KAAK,CAACS,SAAS,CAAC,CAACgC,oBAAoB,CAAC;MAC3CK,cAAc,EAAEC,SAAS;MACzBC,cAAc,EAAED,SAAS;MACzBE,GAAG,EAAE;IACP,CAAC,CAAC;IAEF,MAAMG,MAAM,CAACrB,aAAa,CAAC,CAAC;IAC5B,IAAAC,cAAM,EAACkB,cAAc,CAAC,CAACS,qBAAqB,CAAC,CAAC,CAAC;EACjD,CAAC,CAAC;EAEF,IAAA/B,UAAE,EAAC,4CAA4C,EAAE,YAAY;IAC3D5B,KAAK,CAACS,SAAS,CAACkB,iBAAiB,CAAC;MAChC,GAAGf,QAAQ;MACXE,OAAO,EAAE;IACX,CAAC,CAAC;IACF,MAAMe,OAAO,GAAG,MAAM,IAAAC,4BAAgB,EACpC,6BACF,CAAC,CAACC,aAAa,CAAC,CAAC;IAEjB,MAAM,IAAAC,cAAM,EACVH,OAAO,CAACyB,eAAe,CAAC;MACtBC,eAAe,EAAE,SAAS;MAC1BC,cAAc,EAAE;IAClB,CAAC,CACH,CAAC,CAACI,OAAO,CAACC,OAAO,CAAC,+BAA+B,CAAC;EACpD,CAAC,CAAC;EAEF,IAAAjC,UAAE,EAAC,gEAAgE,EAAE,YAAY;IAC/E,MAAM,IAAAI,cAAM,EAAC,IAAAF,4BAAgB,EAAC,MAAM,EAAE,CAAC,CAACC,aAAa,CAAC,CAAC,CAAC,CAAC6B,OAAO,CAACC,OAAO,CACtE,iDACF,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_vitest","_fetchJSON","_httpClient","mocks","vi","hoisted","Reflect","set","globalThis","SDK_VERSION","fetchCatalog","fn","fetchJSON","mock","fetchReleaseCatalogWithCache","FetchJSONResponseError","Error","constructor","status","statusText","artifact","artifactProtocolVersion","assets","file","url","fileHash","manifestFileHash","manifestUrl","archiveUrl","catalog","catalogId","catalogHash","repeat","fallbackPolicy","generation","releases","schemaVersion","scopeKey","describe","beforeEach","clearAllMocks","mockResolvedValue","it","session","createHttpClient","createSession","expect","fetchReleaseCatalog","appVersion","channel","fingerprintHash","platform","updateStrategy","resolves","toBe","toHaveBeenCalledWith","baseURL","expectedScope","channelKey","strategy","requestHeaders","undefined","requestTimeout","resolveBaseURL","mockResolvedValueOnce","client","firstSession","resolveArtifact","currentBundleId","targetBundleId","toEqual","toHaveBeenCalledOnce","toHaveBeenCalledTimes","rejects","toThrow","fileUrl","mockRejectedValue","unchangedEvent","cohort","fromBundleId","installId","toBundleId","type","stubEventsEndpoint","responses","fetchMock","next","shift","Response","stubGlobal","sentEvents","calls","map","request","JSON","parse","String","body","useFakeTimers","spyOn","Math","mockReturnValue","afterEach","useRealTimers","unstubAllGlobals","restoreAllMocks","sendInsightsEvent","advanceTimersByTimeAsync","first","second","isUUIDv7","eventId","headers","runAllTimersAsync","warn","console","mockImplementation","toHaveBeenCalledExactlyOnceWith","objectContaining","message","_input","Promise","_resolve","reject","signal","addEventListener","Object","assign","name","sent","secondSignal","aborted","retry","later","not"],"sourceRoot":"../../src","sources":["httpClient.spec.ts"],"mappings":"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","ignoreList":[]}