@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.
- package/android/proguard-rules.pro +2 -2
- package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
- package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +650 -636
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +3 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +0 -13
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +10 -14
- package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +19 -0
- package/android/src/main/java/com/hotupdater/TarArchiveInputStream.kt +214 -375
- package/android/src/main/java/com/hotupdater/TarBrArchiveExtractor.kt +119 -0
- package/android/src/newarch/HotUpdater.kt +7 -9
- package/android/src/newarch/HotUpdaterModule.kt +40 -20
- package/android/src/oldarch/HotUpdater.kt +7 -9
- package/android/src/oldarch/HotUpdaterModule.kt +40 -20
- package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +1126 -74
- package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +4 -5
- package/android/src/test/java/com/hotupdater/TarBrArchiveExtractorTest.kt +206 -0
- package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
- package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +773 -1016
- package/ios/HotUpdater/Internal/BundleMetadata.swift +5 -0
- package/ios/HotUpdater/Internal/FileUtilities.swift +64 -0
- package/ios/HotUpdater/Internal/HotUpdater-Bridging-Header.h +0 -1
- package/ios/HotUpdater/Internal/HotUpdater.mm +5 -27
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +47 -31
- package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
- package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
- package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +13 -72
- package/lib/commonjs/checkForUpdate.js +7 -10
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +9 -4
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +1 -1
- package/lib/commonjs/error.js +4 -13
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/fetchJSON.js +9 -2
- package/lib/commonjs/fetchJSON.js.map +1 -1
- package/lib/commonjs/httpClient.js +151 -39
- package/lib/commonjs/httpClient.js.map +1 -1
- package/lib/commonjs/httpClient.spec.js +247 -5
- package/lib/commonjs/httpClient.spec.js.map +1 -1
- package/lib/commonjs/index.js +15 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.spec.js +101 -0
- package/lib/commonjs/index.spec.js.map +1 -1
- package/lib/commonjs/native.js +7 -8
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.spec.js +21 -16
- package/lib/commonjs/native.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +7 -0
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.js +4 -1
- package/lib/commonjs/notifyAppReadyInsights.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.spec.js +59 -0
- package/lib/commonjs/notifyAppReadyInsights.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +55 -1
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +1 -1
- package/lib/commonjs/sdkVersion.js +1 -1
- package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
- package/lib/commonjs/store.js +3 -10
- package/lib/commonjs/store.js.map +1 -1
- package/lib/commonjs/store.notification.spec.js +12 -4
- package/lib/commonjs/store.notification.spec.js.map +1 -1
- package/lib/commonjs/store.spec.js +2 -136
- package/lib/commonjs/store.spec.js.map +1 -1
- package/lib/commonjs/uuidv7.js +41 -0
- package/lib/commonjs/uuidv7.js.map +1 -0
- package/lib/commonjs/uuidv7.spec.js +30 -0
- package/lib/commonjs/uuidv7.spec.js.map +1 -0
- package/lib/commonjs/wrap.js +1 -3
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/commonjs/wrap.spec.js +7 -0
- package/lib/commonjs/wrap.spec.js.map +1 -1
- package/lib/module/checkForUpdate.js +7 -10
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/checkForUpdate.releaseCatalog.spec.js +9 -4
- package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +1 -1
- package/lib/module/error.js +4 -13
- package/lib/module/error.js.map +1 -1
- package/lib/module/fetchJSON.js +7 -1
- package/lib/module/fetchJSON.js.map +1 -1
- package/lib/module/httpClient.js +153 -41
- package/lib/module/httpClient.js.map +1 -1
- package/lib/module/httpClient.spec.js +248 -6
- package/lib/module/httpClient.spec.js.map +1 -1
- package/lib/module/index.js +15 -8
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.spec.js +102 -1
- package/lib/module/index.spec.js.map +1 -1
- package/lib/module/native.js +7 -8
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.spec.js +21 -16
- package/lib/module/native.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.boundary.spec.js +7 -0
- package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.js +5 -2
- package/lib/module/notifyAppReadyInsights.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.spec.js +59 -0
- package/lib/module/notifyAppReadyInsights.spec.js.map +1 -1
- package/lib/module/notifyAppReadyInsights.transport.spec.js +55 -1
- package/lib/module/notifyAppReadyInsights.transport.spec.js.map +1 -1
- package/lib/module/sdkVersion.js +1 -1
- package/lib/module/specs/NativeHotUpdater.js.map +1 -1
- package/lib/module/store.js +3 -10
- package/lib/module/store.js.map +1 -1
- package/lib/module/store.notification.spec.js +12 -4
- package/lib/module/store.notification.spec.js.map +1 -1
- package/lib/module/store.spec.js +2 -136
- package/lib/module/store.spec.js.map +1 -1
- package/lib/module/uuidv7.js +36 -0
- package/lib/module/uuidv7.js.map +1 -0
- package/lib/module/uuidv7.spec.js +30 -0
- package/lib/module/uuidv7.spec.js.map +1 -0
- package/lib/module/wrap.js +1 -3
- package/lib/module/wrap.js.map +1 -1
- package/lib/module/wrap.spec.js +7 -0
- package/lib/module/wrap.spec.js.map +1 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts +1 -2
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/error.d.ts +4 -13
- package/lib/typescript/commonjs/error.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchJSON.d.ts +4 -0
- package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/commonjs/httpClient.d.ts +6 -0
- package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +0 -2
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +1 -6
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +1 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +1 -1
- package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +8 -35
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/commonjs/store.d.ts +1 -3
- package/lib/typescript/commonjs/store.d.ts.map +1 -1
- package/lib/typescript/commonjs/uuidv7.d.ts +10 -0
- package/lib/typescript/commonjs/uuidv7.d.ts.map +1 -0
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.types.d.ts +7 -4
- package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
- package/lib/typescript/module/checkForUpdate.d.ts +1 -2
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/error.d.ts +4 -13
- package/lib/typescript/module/error.d.ts.map +1 -1
- package/lib/typescript/module/fetchJSON.d.ts +4 -0
- package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/module/httpClient.d.ts +6 -0
- package/lib/typescript/module/httpClient.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +0 -2
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +1 -6
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts +1 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +1 -1
- package/lib/typescript/module/sdkVersion.d.ts +1 -1
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts +8 -35
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/store.d.ts +1 -3
- package/lib/typescript/module/store.d.ts.map +1 -1
- package/lib/typescript/module/uuidv7.d.ts +10 -0
- package/lib/typescript/module/uuidv7.d.ts.map +1 -0
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/lib/typescript/module/wrap.types.d.ts +7 -4
- package/lib/typescript/module/wrap.types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/checkForUpdate.releaseCatalog.spec.ts +10 -4
- package/src/checkForUpdate.ts +5 -11
- package/src/error.ts +4 -14
- package/src/fetchJSON.ts +12 -1
- package/src/httpClient.spec.ts +289 -8
- package/src/httpClient.ts +224 -67
- package/src/index.spec.ts +70 -1
- package/src/index.ts +18 -7
- package/src/native.spec.ts +23 -16
- package/src/native.ts +12 -24
- package/src/notifyAppReadyInsights.boundary.spec.ts +8 -0
- package/src/notifyAppReadyInsights.spec.ts +60 -0
- package/src/notifyAppReadyInsights.transport.spec.ts +66 -0
- package/src/notifyAppReadyInsights.ts +13 -1
- package/src/sdkVersion.ts +1 -1
- package/src/specs/NativeHotUpdater.ts +8 -36
- package/src/store.notification.spec.ts +13 -3
- package/src/store.spec.ts +0 -157
- package/src/store.ts +2 -23
- package/src/uuidv7.spec.ts +25 -0
- package/src/uuidv7.ts +38 -0
- package/src/wrap.spec.ts +8 -0
- package/src/wrap.tsx +0 -2
- package/src/wrap.types.ts +9 -4
- package/android/src/main/java/com/hotupdater/DecompressService.kt +0 -89
- package/android/src/main/java/com/hotupdater/DecompressionStrategy.kt +0 -26
- package/android/src/main/java/com/hotupdater/TarBrDecompressionStrategy.kt +0 -117
- package/android/src/main/java/com/hotupdater/TarGzDecompressionStrategy.kt +0 -117
- package/android/src/main/java/com/hotupdater/ZipDecompressionStrategy.kt +0 -192
- package/android/src/test/java/com/hotupdater/TarArchiveInputStreamTest.kt +0 -68
- package/ios/HotUpdater/Internal/ArchiveExtractionUtilities.swift +0 -178
- package/ios/HotUpdater/Internal/DecompressService.swift +0 -112
- package/ios/HotUpdater/Internal/DecompressionStrategy.swift +0 -22
- package/ios/HotUpdater/Internal/StreamingTarArchiveExtractor.swift +0 -370
- package/ios/HotUpdater/Internal/TarBrDecompressionStrategy.swift +0 -39
- package/ios/HotUpdater/Internal/TarGzDecompressionStrategy.swift +0 -59
- package/ios/HotUpdater/Internal/ZipArchiveExtractor.swift +0 -482
- 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
|
-
|
|
32
|
-
...(info.
|
|
33
|
-
|
|
34
|
-
}),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
...
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
|
93
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
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":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAMA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AAsEA,MAAMM,cAAc,GAAG,MAAOC,OAA0B,IAAsB;EAC5E,MAAMC,eAAe,GACnB,OAAOD,OAAO,KAAK,UAAU,GAAG,MAAMA,OAAO,CAAC,CAAC,GAAGA,OAAO;EAE3D,IAAI,CAACC,eAAe,EAAE;IACpB,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EAEA,OAAOD,eAAe,CAACE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED,MAAMC,kBAAkB,GAAGA,CAACJ,OAAe,EAAEK,KAAa,KAAa;EACrE,IAAI,eAAe,CAACC,IAAI,CAACD,KAAK,CAAC,EAAE;IAC/B,IAAIE,GAAG,CAACF,KAAK,CAAC;IACd,OAAOA,KAAK;EACd;EACA,IAAI,CAACA,KAAK,CAACG,UAAU,CAAC,WAAW,CAAC,EAAE;IAClC,MAAM,IAAIN,KAAK,CACb,+EACF,CAAC;EACH;EACA,OAAO,GAAGF,OAAO,IAAIK,KAAK,CAACI,KAAK,CAAC,CAAC,CAAC,EAAE;AACvC,CAAC;AAED,MAAMC,mBAAmB,GAAGA,CAC1BV,OAAe,EACfW,IAAkB,MACA;EAClB,GAAGA,IAAI;EACPC,WAAW,EAAER,kBAAkB,CAACJ,OAAO,EAAEW,IAAI,CAACC,WAAW,CAAC;EAC1D,IAAID,IAAI,CAACE,UAAU,GACf;IAAEA,UAAU,EAAET,kBAAkB,CAACJ,OAAO,EAAEW,IAAI,CAACE,UAAU;EAAE,CAAC,GAC5D,CAAC,CAAC,CAAC;EACPC,MAAM,EAAEC,MAAM,CAACC,WAAW,CACxBD,MAAM,CAACE,OAAO,CAACN,IAAI,CAACG,MAAM,CAAC,CAACI,GAAG,CAAC,CAAC,CAACC,IAAI,EAAEC,KAAK,CAAC,KAAK,CACjDD,IAAI,EACJ;IACE,GAAGC,KAAK;IACRC,IAAI,EAAE;MACJ,GAAGD,KAAK,CAACC,IAAI;MACbC,GAAG,EAAElB,kBAAkB,CAACJ,OAAO,EAAEoB,KAAK,CAACC,IAAI,CAACC,GAAG;IACjD,CAAC;IACD,IAAIF,KAAK,CAACG,KAAK,GACX;MACEA,KAAK,EAAE;QACL,GAAGH,KAAK,CAACG,KAAK;QACdC,QAAQ,EAAEpB,kBAAkB,CAACJ,OAAO,EAAEoB,KAAK,CAACG,KAAK,CAACC,QAAQ;MAC5D;IACF,CAAC,GACD,CAAC,CAAC;EACR,CAAC,CACF,CACH;AACF,CAAC,CAAC;AAEF,MAAMC,yBAAyB,GAAId,IAAkB,IAAmB;EACtE,IACEA,IAAI,CAACe,uBAAuB,KAAKC,+BAAyB,IAC1D,CAAChB,IAAI,CAACG,MAAM,IACZ,CAACH,IAAI,CAACC,WAAW,IACjB,CAACD,IAAI,CAACiB,gBAAgB,IACrBjB,IAAI,CAACE,UAAU,KAAKgB,SAAS,IAAI,OAAOlB,IAAI,CAACE,UAAU,KAAK,QAAS,EACtE;IACA,MAAM,IAAIX,KAAK,CACb,6CAA6CyB,+BAAyB,GACxE,CAAC;EACH;EACA,KAAK,MAAMP,KAAK,IAAIL,MAAM,CAACe,MAAM,CAACnB,IAAI,CAACG,MAAM,CAAC,EAAE;IAC9C,IAAI,CAACM,KAAK,CAACC,IAAI,EAAEC,GAAG,IAAI,CAACF,KAAK,CAACW,QAAQ,EAAE;MACvC,MAAM,IAAI7B,KAAK,CACb,gEACF,CAAC;IACH;EACF;EACA,OAAOS,IAAI;AACb,CAAC;;AAED;AACA,MAAMqB,qBAAqB,GAAG,CAAC;AAC/B;AACA,MAAMC,4BAA4B,GAAG,IAAI;AACzC;AACA,MAAMC,2BAA2B,GAAG,KAAK;AASzC;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAI9B,KAAoB,IAAoB;EACjE,MAAM+B,OAAO,GAAG/B,KAAK,EAAEgC,IAAI,CAAC,CAAC;EAC7B,OAAOD,OAAO,IAAI,OAAO,CAAC9B,IAAI,CAAC8B,OAAO,CAAC,GAAGE,MAAM,CAACF,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI;AACzE,CAAC;AAED,MAAMG,eAAe,GAAGA,CACtBC,aAAqB,EACrBC,YAA2B,KAE3BC,IAAI,CAACC,GAAG,CACNF,YAAY;AACV;AACAR,4BAA4B,GAC1B,CAAC,KAAKO,aAAa,GAAG,CAAC,CAAC,IACvB,GAAG,GAAGE,IAAI,CAACE,MAAM,CAAC,CAAC,CAAC,EACzBV,2BACF,CAAC;AAEH,MAAMW,IAAI,GAAIC,EAAU,IACtB,IAAIC,OAAO,CAAQC,OAAO,IAAK;EAC7BC,UAAU,CAACD,OAAO,EAAEF,EAAE,CAAC;AACzB,CAAC,CAAC;;AAEJ;AACA,MAAMI,iBAAiB,GAAG,MAAAA,CACxBlD,OAAe,EACfmD,MAA2B,EAC3BC,OAAe,KAC4B;EAC3C,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGN,UAAU,CAAC,MAAM;IACjCI,UAAU,CAACG,KAAK,CAAC,CAAC;EACpB,CAAC,EAAEL,MAAM,CAACM,cAAc,IAAI,IAAI,CAAC;EAEjC,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAAC,GAAG3D,OAAO,SAAS,EAAE;MAChD4D,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QACnBC,UAAU,EAAEZ,MAAM,CAACY,UAAU;QAC7BC,OAAO,EAAEb,MAAM,CAACa,OAAO;QACvBC,MAAM,EAAEd,MAAM,CAACc,MAAM;QACrBb,OAAO;QACPc,eAAe,EAAEf,MAAM,CAACe,eAAe;QACvCC,YAAY,EAAEhB,MAAM,CAACgB,YAAY;QACjC,IAAIhB,MAAM,CAACiB,aAAa,KAAKvC,SAAS,GAClC,CAAC,CAAC,GACF;UAAEuC,aAAa,EAAEjB,MAAM,CAACiB;QAAc,CAAC,CAAC;QAC5CC,SAAS,EAAElB,MAAM,CAACkB,SAAS;QAC3BC,QAAQ,EAAEnB,MAAM,CAACmB,QAAQ;QACzBC,UAAU,EAAEC,mCAAuB;QACnCC,UAAU,EAAEtB,MAAM,CAACsB,UAAU;QAC7B,IAAItB,MAAM,CAACuB,WAAW,KAAK7C,SAAS,GAChC,CAAC,CAAC,GACF;UAAE6C,WAAW,EAAEvB,MAAM,CAACuB;QAAY,CAAC,CAAC;QACxCC,IAAI,EAAExB,MAAM,CAACwB,IAAI;QACjBC,cAAc,EAAEzB,MAAM,CAACyB,cAAc;QACrC,IAAIzB,MAAM,CAAC0B,MAAM,IAAI,IAAI,GAAG;UAAEA,MAAM,EAAE1B,MAAM,CAAC0B;QAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI1B,MAAM,CAAC2B,QAAQ,IAAI,IAAI,GAAG;UAAEA,QAAQ,EAAE3B,MAAM,CAAC2B;QAAS,CAAC,GAAG,CAAC,CAAC;MAClE,CAAC,CAAC;MACFC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClC,GAAG5B,MAAM,CAAC6B;MACZ,CAAC;MACDC,MAAM,EAAE,MAAM;MACdC,MAAM,EAAE7B,UAAU,CAAC6B;IACrB,CAAC,CAAC;IAEF,IAAIxB,QAAQ,CAACyB,MAAM,KAAK,GAAG,EAAE,OAAO,IAAI;IACxC,OAAO;MACLC,KAAK,EAAE,IAAIlF,KAAK,CACd,4CAA4CwD,QAAQ,CAACyB,MAAM,EAC7D,CAAC;MACDE,SAAS,EAAE3B,QAAQ,CAACyB,MAAM,KAAK,GAAG,IAAIzB,QAAQ,CAACyB,MAAM,IAAI,GAAG;MAC5D1C,YAAY,EAAEN,iBAAiB,CAACuB,QAAQ,CAACqB,OAAO,CAACO,GAAG,CAAC,aAAa,CAAC;IACrE,CAAC;EACH,CAAC,CAAC,OAAOF,KAAc,EAAE;IACvB;IACA;IACA,OAAO;MACLA,KAAK,EACHA,KAAK,YAAYlF,KAAK,IAAIkF,KAAK,CAACG,IAAI,KAAK,YAAY,GACjD,IAAIrF,KAAK,CAAC,mBAAmB,CAAC,GAC9BkF,KAAK,YAAYlF,KAAK,GACpBkF,KAAK,GACL,IAAIlF,KAAK,CAACsF,MAAM,CAACJ,KAAK,CAAC,CAAC;MAChCC,SAAS,EAAE,IAAI;MACf5C,YAAY,EAAE;IAChB,CAAC;EACH,CAAC,SAAS;IACRgD,YAAY,CAAClC,SAAS,CAAC;EACzB;AACF,CAAC;AAOD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMmC,yBAAyB,GAAGA,CAAA,KAA2B;EAC3D,IAAIC,KAAK,GAAG5C,OAAO,CAACC,OAAO,CAAC,CAAC;EAC7B,IAAI4C,QAAQ,GAAG,KAAK;EACpB,MAAMC,OAAO,GAAG,IAAIC,GAAG,CAAa,CAAC;EAErC,OAAO,CAAC9F,OAAO,EAAEmD,MAAM,KAAK;IAC1B;IACA,MAAMC,OAAO,GAAG,IAAA2C,mBAAY,EAAC,CAAC;IAE9B,OAAO,IAAIhD,OAAO,CAAO,CAACC,OAAO,EAAEgD,MAAM,KAAK;MAC5C,IAAIC,QAAQ,GAAG,KAAK;MACpB,MAAMC,OAAO,GAAGA,CAAA,KAAM;QACpBD,QAAQ,GAAG,IAAI;QACfJ,OAAO,CAACM,MAAM,CAACD,OAAO,CAAC;QACvBlD,OAAO,CAAC,CAAC;MACX,CAAC;MACD,IAAI4C,QAAQ,EAAEM,OAAO,CAAC,CAAC,CAAC,KACnBL,OAAO,CAACO,GAAG,CAACF,OAAO,CAAC;MAEzBP,KAAK,GAAGA,KAAK,CAACU,IAAI,CAAC,YAAY;QAC7B,IAAI;UACF,KAAK,IAAIC,OAAO,GAAG,CAAC,GAAIA,OAAO,IAAI,CAAC,EAAE;YACpC,MAAMC,OAAO,GAAG,MAAMrD,iBAAiB,CAAClD,OAAO,EAAEmD,MAAM,EAAEC,OAAO,CAAC;YACjE,IAAImD,OAAO,KAAK,IAAI,EAAE;cACpBL,OAAO,CAAC,CAAC;cACT;YACF;YACA,IAAI,CAACK,OAAO,CAAClB,SAAS,IAAIiB,OAAO,KAAKtE,qBAAqB,EAAE;cAC3D6D,OAAO,CAACM,MAAM,CAACD,OAAO,CAAC;cACvB,IAAID,QAAQ,EAAE;gBACZO,OAAO,CAACC,IAAI,CACV,yBAAyBtD,MAAM,CAACwB,IAAI,2BAA2B,EAC/D4B,OAAO,CAACnB,KACV,CAAC;cACH,CAAC,MAAM;gBACLY,MAAM,CAACO,OAAO,CAACnB,KAAK,CAAC;cACvB;cACA;YACF;YACAQ,QAAQ,GAAG,IAAI;YACf,KAAK,MAAMc,cAAc,IAAIb,OAAO,EAAEa,cAAc,CAAC,CAAC;YACtD,MAAM7D,IAAI,CAACN,eAAe,CAAC+D,OAAO,EAAEC,OAAO,CAAC9D,YAAY,CAAC,CAAC;UAC5D;QACF,CAAC,CAAC,OAAO2C,KAAc,EAAE;UACvB;UACA;UACA;UACAS,OAAO,CAACM,MAAM,CAACD,OAAO,CAAC;UACvB,IAAI,CAACD,QAAQ,EAAED,MAAM,CAACZ,KAAK,CAAC;QAC9B,CAAC,SAAS;UACRQ,QAAQ,GAAG,KAAK;QAClB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC;AACH,CAAC;AAED,MAAMe,aAAa,GAAGA,CACpB3G,OAAe,EACf4G,iBAAsC,MACX;EAC3BC,mBAAmB,EAAE,MAAO1D,MAAM,IAA8B;IAC9D,MAAM2D,UAAU,GAAG,IAAAC,sBAAgB,EAAC5D,MAAM,CAACa,OAAO,CAAC;IACnD,IAAIgD,aAAqB;IACzB,IAAI7D,MAAM,CAACyB,cAAc,KAAK,aAAa,EAAE;MAC3C,IAAI,CAACzB,MAAM,CAACe,eAAe,EAAE;QAC3B,MAAM,IAAIhE,KAAK,CAAC,8BAA8B,CAAC;MACjD;MACA8G,aAAa,GAAG7D,MAAM,CAACe,eAAe;IACxC,CAAC,MAAM;MACL,MAAMH,UAAU,GAAG,IAAAkD,kCAAsB,EAAC9D,MAAM,CAACY,UAAU,CAAC;MAC5D,IAAIA,UAAU,KAAK,IAAI,EAAE,MAAM,IAAI7D,KAAK,CAAC,qBAAqB,CAAC;MAC/D8G,aAAa,GAAGjD,UAAU;IAC5B;IACA,MAAMmD,YAAY,GAChB/D,MAAM,CAACyB,cAAc,KAAK,aAAa,GAAG,aAAa,GAAG,aAAa;IACzE,MAAMtD,GAAG,GAAG,GAAGtB,OAAO,qBAAqBkH,YAAY,IAAI/D,MAAM,CAACmB,QAAQ,IAAIwC,UAAU,IAAIK,kBAAkB,CAACH,aAAa,CAAC,EAAE;IAE/H,OAAO,IAAAI,iDAA4B,EAAC;MAClCpH,OAAO;MACPqH,aAAa,EACXlE,MAAM,CAACyB,cAAc,KAAK,aAAa,GACnC;QACEkC,UAAU;QACV5C,eAAe,EAAE8C,aAAa;QAC9B1C,QAAQ,EAAEnB,MAAM,CAACmB,QAAQ;QACzBgD,QAAQ,EAAE;MACZ,CAAC,GACD;QACER,UAAU;QACVxC,QAAQ,EAAEnB,MAAM,CAACmB,QAAQ;QACzBgD,QAAQ,EAAE;MACZ,CAAC;MACPtC,cAAc,EAAE7B,MAAM,CAAC6B,cAAc;MACrCvB,cAAc,EAAEN,MAAM,CAACM,cAAc;MACrCnC;IACF,CAAC,CAAC;EACJ,CAAC;EACDiG,eAAe,EAAE,MAAOpE,MAAM,IAA4B;IACxD,IAAIxC,IAAkB;IACtB,IAAI;MACFA,IAAI,GAAG,MAAM,IAAA6G,oBAAS,EAAe;QACnCxC,cAAc,EAAE7B,MAAM,CAAC6B,cAAc;QACrCvB,cAAc,EAAEN,MAAM,CAACM,cAAc;QACrCnC,GAAG,EAAE,GAAGtB,OAAO,iBAAiBmH,kBAAkB,CAChDhE,MAAM,CAACsE,cACT,CAAC,SAASN,kBAAkB,CAAChE,MAAM,CAACuE,eAAe,CAAC;MACtD,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOtC,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYuC,iCAAsB,IAAIvC,KAAK,CAACD,MAAM,KAAK,GAAG,EAAE;QACnE,MAAM,IAAIjF,KAAK,CACb,6CAA6CyB,+BAAyB,GAAG,EACzE;UAAEiG,KAAK,EAAExC;QAAM,CACjB,CAAC;MACH;MACA,MAAMA,KAAK;IACb;IACA,OAAO1E,mBAAmB,CAACV,OAAO,EAAEyB,yBAAyB,CAACd,IAAI,CAAC,CAAC;EACtE,CAAC;EACDiG,iBAAiB,EAAGzD,MAAM,IAAKyD,iBAAiB,CAAC5G,OAAO,EAAEmD,MAAM;AAClE,CAAC,CAAC;;AAEF;AACO,MAAM0E,gBAAgB,GAC3B7H,OAA0B,IACD;EACzB;EACA,MAAM4G,iBAAiB,GAAGlB,yBAAyB,CAAC,CAAC;EACrD,OAAO;IACLiB,aAAa,EAAE,MAAAA,CAAA,KACbA,aAAa,CAAC,MAAM5G,cAAc,CAACC,OAAO,CAAC,EAAE4G,iBAAiB;EAClE,CAAC;AACH,CAAC;AAACkB,OAAA,CAAAD,gBAAA,GAAAA,gBAAA","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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"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","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":[]}
|