@hot-updater/react-native 1.0.0-rc.1 → 1.0.0-rc.15
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 +17 -2
- package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
- package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +651 -637
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +10 -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/HotUpdaterRecoveryManager.kt +37 -54
- package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryState.kt +64 -0
- 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/HotUpdaterRecoveryStateTest.kt +97 -0
- package/android/src/test/java/com/hotupdater/PendingCrashRecoveryTest.kt +44 -0
- 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 +149 -51
- 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/ios/HotUpdater/Recovery/HotUpdaterRecovery.h +16 -0
- package/ios/HotUpdater/Recovery/HotUpdaterRecovery.mm +83 -0
- package/ios/HotUpdater/Recovery/HotUpdaterRecoveryHooks.mm +49 -0
- package/lib/commonjs/checkForUpdate.js +32 -23
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +97 -28
- 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 +46 -29
- package/lib/commonjs/httpClient.js.map +1 -1
- package/lib/commonjs/httpClient.spec.js +57 -5
- package/lib/commonjs/httpClient.spec.js.map +1 -1
- package/lib/commonjs/index.js +31 -14
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.spec.js +56 -11
- package/lib/commonjs/index.spec.js.map +1 -1
- package/lib/commonjs/native.js +15 -14
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.spec.js +128 -22
- package/lib/commonjs/native.spec.js.map +1 -1
- package/lib/commonjs/{notifyAppReadyAnalytics.boundary.spec.js → notifyAppReadyInsights.boundary.spec.js} +28 -21
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +1 -0
- package/lib/commonjs/notifyAppReadyInsights.js +188 -0
- package/lib/commonjs/notifyAppReadyInsights.js.map +1 -0
- package/lib/commonjs/{notifyAppReadyAnalytics.spec.js → notifyAppReadyInsights.spec.js} +161 -29
- package/lib/commonjs/notifyAppReadyInsights.spec.js.map +1 -0
- package/lib/commonjs/{notifyAppReadyAnalytics.test-utils.js → notifyAppReadyInsights.test-utils.js} +3 -3
- package/lib/commonjs/notifyAppReadyInsights.test-utils.js.map +1 -0
- package/lib/commonjs/{notifyAppReadyAnalytics.transport.spec.js → notifyAppReadyInsights.transport.spec.js} +14 -7
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +1 -0
- package/lib/commonjs/sdkVersion.js +1 -1
- package/lib/commonjs/sdkVersion.js.map +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/wrap.js +11 -12
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/commonjs/wrap.spec.js +97 -25
- package/lib/commonjs/wrap.spec.js.map +1 -1
- package/lib/module/checkForUpdate.js +32 -23
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/checkForUpdate.releaseCatalog.spec.js +97 -28
- 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 +48 -31
- package/lib/module/httpClient.js.map +1 -1
- package/lib/module/httpClient.spec.js +57 -5
- package/lib/module/httpClient.spec.js.map +1 -1
- package/lib/module/index.js +32 -15
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.spec.js +56 -11
- package/lib/module/index.spec.js.map +1 -1
- package/lib/module/native.js +13 -12
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.spec.js +128 -22
- package/lib/module/native.spec.js.map +1 -1
- package/lib/module/{notifyAppReadyAnalytics.boundary.spec.js → notifyAppReadyInsights.boundary.spec.js} +23 -16
- package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +1 -0
- package/lib/module/notifyAppReadyInsights.js +181 -0
- package/lib/module/notifyAppReadyInsights.js.map +1 -0
- package/lib/module/{notifyAppReadyAnalytics.spec.js → notifyAppReadyInsights.spec.js} +153 -21
- package/lib/module/notifyAppReadyInsights.spec.js.map +1 -0
- package/lib/module/{notifyAppReadyAnalytics.test-utils.js → notifyAppReadyInsights.test-utils.js} +3 -3
- package/lib/module/notifyAppReadyInsights.test-utils.js.map +1 -0
- package/lib/module/{notifyAppReadyAnalytics.transport.spec.js → notifyAppReadyInsights.transport.spec.js} +11 -4
- package/lib/module/notifyAppReadyInsights.transport.spec.js.map +1 -0
- package/lib/module/sdkVersion.js +1 -1
- package/lib/module/sdkVersion.js.map +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/wrap.js +11 -12
- package/lib/module/wrap.js.map +1 -1
- package/lib/module/wrap.spec.js +99 -25
- package/lib/module/wrap.spec.js.map +1 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts +2 -3
- 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 -6
- package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -7
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +5 -9
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +25 -0
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +1 -0
- package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts +8 -0
- package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts.map +1 -0
- package/lib/typescript/commonjs/sdkVersion.d.ts +1 -1
- package/lib/typescript/commonjs/sdkVersion.d.ts.map +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/wrap.types.d.ts +5 -8
- package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
- package/lib/typescript/module/checkForUpdate.d.ts +2 -3
- 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 -6
- package/lib/typescript/module/httpClient.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -7
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +5 -9
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts +25 -0
- package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +1 -0
- package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts +8 -0
- package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts.map +1 -0
- package/lib/typescript/module/sdkVersion.d.ts +1 -1
- package/lib/typescript/module/sdkVersion.d.ts.map +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/wrap.types.d.ts +5 -8
- package/lib/typescript/module/wrap.types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/checkForUpdate.releaseCatalog.spec.ts +137 -61
- package/src/checkForUpdate.ts +35 -29
- package/src/error.ts +4 -14
- package/src/fetchJSON.ts +12 -1
- package/src/httpClient.spec.ts +70 -5
- package/src/httpClient.ts +78 -64
- package/src/index.spec.ts +59 -11
- package/src/index.ts +41 -17
- package/src/native.spec.ts +133 -22
- package/src/native.ts +21 -32
- package/src/{notifyAppReadyAnalytics.boundary.spec.ts → notifyAppReadyInsights.boundary.spec.ts} +25 -17
- package/src/{notifyAppReadyAnalytics.spec.ts → notifyAppReadyInsights.spec.ts} +141 -22
- package/src/{notifyAppReadyAnalytics.test-utils.ts → notifyAppReadyInsights.test-utils.ts} +4 -4
- package/src/{notifyAppReadyAnalytics.transport.spec.ts → notifyAppReadyInsights.transport.spec.ts} +13 -5
- package/src/notifyAppReadyInsights.ts +293 -0
- 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/wrap.spec.ts +109 -31
- package/src/wrap.tsx +11 -11
- package/src/wrap.types.ts +5 -8
- 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
- package/lib/commonjs/notifyAppReadyAnalytics.boundary.spec.js.map +0 -1
- package/lib/commonjs/notifyAppReadyAnalytics.js +0 -133
- package/lib/commonjs/notifyAppReadyAnalytics.js.map +0 -1
- package/lib/commonjs/notifyAppReadyAnalytics.spec.js.map +0 -1
- package/lib/commonjs/notifyAppReadyAnalytics.test-utils.js.map +0 -1
- package/lib/commonjs/notifyAppReadyAnalytics.transport.spec.js.map +0 -1
- package/lib/module/notifyAppReadyAnalytics.boundary.spec.js.map +0 -1
- package/lib/module/notifyAppReadyAnalytics.js +0 -128
- package/lib/module/notifyAppReadyAnalytics.js.map +0 -1
- package/lib/module/notifyAppReadyAnalytics.spec.js.map +0 -1
- package/lib/module/notifyAppReadyAnalytics.test-utils.js.map +0 -1
- package/lib/module/notifyAppReadyAnalytics.transport.spec.js.map +0 -1
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.d.ts +0 -13
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.d.ts.map +0 -1
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.test-utils.d.ts +0 -8
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.test-utils.d.ts.map +0 -1
- package/lib/typescript/module/notifyAppReadyAnalytics.d.ts +0 -13
- package/lib/typescript/module/notifyAppReadyAnalytics.d.ts.map +0 -1
- package/lib/typescript/module/notifyAppReadyAnalytics.test-utils.d.ts +0 -8
- package/lib/typescript/module/notifyAppReadyAnalytics.test-utils.d.ts.map +0 -1
- package/src/notifyAppReadyAnalytics.ts +0 -194
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fetchJSON","url","requestHeaders","requestTimeout","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","headers","Accept","signal","
|
|
1
|
+
{"version":3,"names":["FetchJSONResponseError","Error","constructor","status","statusText","fetchJSON","url","requestHeaders","requestTimeout","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","headers","Accept","signal","json","error","name","clearTimeout"],"sourceRoot":"../../src","sources":["fetchJSON.ts"],"mappings":";;AAAA,OAAO,MAAMA,sBAAsB,SAASC,KAAK,CAAC;EAChDC,WAAWA,CACAC,MAAc,EACvBC,UAAkB,EAClB;IACA,KAAK,CACH,4BAA4BD,MAAM,GAAGC,UAAU,GAAG,IAAIA,UAAU,EAAE,GAAG,EAAE,EACzE,CAAC;IAAC,KALOD,MAAc,GAAdA,MAAc;EAMzB;AACF;AAEA,OAAO,MAAME,SAAS,GAAG,MAAAA,CAAU;EACjCC,GAAG;EACHC,cAAc;EACdC,cAAc,GAAG;AAKnB,CAAC,KAAiB;EAChB,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAEL,cAAc,CAAC;EAEtE,IAAI;IACF,MAAMM,QAAQ,GAAG,MAAMC,KAAK,CAACT,GAAG,EAAE;MAChCU,OAAO,EAAE;QACPC,MAAM,EAAE,kBAAkB;QAC1B,GAAGV;MACL,CAAC;MACDW,MAAM,EAAET,UAAU,CAACS;IACrB,CAAC,CAAC;IACF,IAAIJ,QAAQ,CAACX,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAM,IAAIH,sBAAsB,CAACc,QAAQ,CAACX,MAAM,EAAEW,QAAQ,CAACV,UAAU,CAAC;IACxE;IACA,OAAQ,MAAMU,QAAQ,CAACK,IAAI,CAAC,CAAC;EAC/B,CAAC,CAAC,OAAOC,KAAc,EAAE;IACvB,IAAIA,KAAK,YAAYnB,KAAK,IAAImB,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;MACzD,MAAM,IAAIpB,KAAK,CAAC,mBAAmB,CAAC;IACtC;IACA,MAAMmB,KAAK;EACb,CAAC,SAAS;IACRE,YAAY,CAACX,SAAS,CAAC;EACzB;AACF,CAAC","ignoreList":[]}
|
package/lib/module/httpClient.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { encodeChannelKey } from "@hot-updater/core";
|
|
3
|
+
import { ARTIFACT_PROTOCOL_VERSION, encodeChannelKey } from "@hot-updater/core";
|
|
4
4
|
import { canonicalizeAppVersion } from "@hot-updater/plugin-core";
|
|
5
|
-
import { fetchJSON } from "./fetchJSON.js";
|
|
5
|
+
import { fetchJSON, FetchJSONResponseError } from "./fetchJSON.js";
|
|
6
6
|
import { fetchReleaseCatalogWithCache } from "./releaseCatalogCache.js";
|
|
7
7
|
import { HOT_UPDATER_SDK_VERSION } from "./sdkVersion.js";
|
|
8
8
|
const resolveBaseURL = async baseURL => {
|
|
@@ -24,29 +24,36 @@ const resolveArtifactUrl = (baseURL, value) => {
|
|
|
24
24
|
};
|
|
25
25
|
const resolveArtifactUrls = (baseURL, info) => ({
|
|
26
26
|
...info,
|
|
27
|
-
|
|
28
|
-
...(info.
|
|
29
|
-
|
|
30
|
-
}),
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
...
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
} : {})
|
|
46
|
-
}]))
|
|
47
|
-
})
|
|
27
|
+
manifestUrl: resolveArtifactUrl(baseURL, info.manifestUrl),
|
|
28
|
+
...(info.archiveUrl ? {
|
|
29
|
+
archiveUrl: resolveArtifactUrl(baseURL, info.archiveUrl)
|
|
30
|
+
} : {}),
|
|
31
|
+
assets: Object.fromEntries(Object.entries(info.assets).map(([path, asset]) => [path, {
|
|
32
|
+
...asset,
|
|
33
|
+
file: {
|
|
34
|
+
...asset.file,
|
|
35
|
+
url: resolveArtifactUrl(baseURL, asset.file.url)
|
|
36
|
+
},
|
|
37
|
+
...(asset.patch ? {
|
|
38
|
+
patch: {
|
|
39
|
+
...asset.patch,
|
|
40
|
+
patchUrl: resolveArtifactUrl(baseURL, asset.patch.patchUrl)
|
|
41
|
+
}
|
|
42
|
+
} : {})
|
|
43
|
+
}]))
|
|
48
44
|
});
|
|
49
|
-
const
|
|
45
|
+
const requireArtifactProtocolV1 = info => {
|
|
46
|
+
if (info.artifactProtocolVersion !== ARTIFACT_PROTOCOL_VERSION || !info.assets || !info.manifestUrl || !info.manifestFileHash || info.archiveUrl !== undefined && typeof info.archiveUrl !== "string") {
|
|
47
|
+
throw new Error(`Server does not support artifact protocol ${ARTIFACT_PROTOCOL_VERSION}.`);
|
|
48
|
+
}
|
|
49
|
+
for (const asset of Object.values(info.assets)) {
|
|
50
|
+
if (!asset.file?.url || !asset.fileHash) {
|
|
51
|
+
throw new Error("Artifact protocol 1 requires an original file for every asset.");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return info;
|
|
55
|
+
};
|
|
56
|
+
const sendInsightsEvent = async (baseURL, params) => {
|
|
50
57
|
const controller = new AbortController();
|
|
51
58
|
const timeoutId = setTimeout(() => {
|
|
52
59
|
controller.abort();
|
|
@@ -131,14 +138,24 @@ const createSession = baseURL => ({
|
|
|
131
138
|
});
|
|
132
139
|
},
|
|
133
140
|
resolveArtifact: async params => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
let info;
|
|
142
|
+
try {
|
|
143
|
+
info = await fetchJSON({
|
|
144
|
+
requestHeaders: params.requestHeaders,
|
|
145
|
+
requestTimeout: params.requestTimeout,
|
|
146
|
+
url: `${baseURL}/artifacts/v1/${encodeURIComponent(params.targetBundleId)}/from/${encodeURIComponent(params.currentBundleId)}`
|
|
147
|
+
});
|
|
148
|
+
} catch (error) {
|
|
149
|
+
if (error instanceof FetchJSONResponseError && error.status === 404) {
|
|
150
|
+
throw new Error(`Server does not support artifact protocol ${ARTIFACT_PROTOCOL_VERSION}.`, {
|
|
151
|
+
cause: error
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
return resolveArtifactUrls(baseURL, requireArtifactProtocolV1(info));
|
|
140
157
|
},
|
|
141
|
-
|
|
158
|
+
sendInsightsEvent: params => sendInsightsEvent(baseURL, params)
|
|
142
159
|
});
|
|
143
160
|
|
|
144
161
|
/** Creates the private HTTP client used by HotUpdater.init and HotUpdater.wrap. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["encodeChannelKey","canonicalizeAppVersion","fetchJSON","fetchReleaseCatalogWithCache","HOT_UPDATER_SDK_VERSION","resolveBaseURL","baseURL","resolvedBaseURL","Error","replace","resolveArtifactUrl","value","test","URL","startsWith","slice","resolveArtifactUrls","info","
|
|
1
|
+
{"version":3,"names":["ARTIFACT_PROTOCOL_VERSION","encodeChannelKey","canonicalizeAppVersion","fetchJSON","FetchJSONResponseError","fetchReleaseCatalogWithCache","HOT_UPDATER_SDK_VERSION","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","manifestFileHash","undefined","values","fileHash","sendInsightsEvent","params","controller","AbortController","timeoutId","setTimeout","abort","requestTimeout","response","fetch","body","JSON","stringify","appVersion","channel","cohort","fingerprintHash","fromBundleId","fromReleaseId","installId","platform","sdkVersion","toBundleId","toReleaseId","type","updateStrategy","userId","username","headers","requestHeaders","method","signal","status","error","name","clearTimeout","createSession","fetchReleaseCatalog","channelKey","strategyValue","strategyPath","encodeURIComponent","expectedScope","strategy","resolveArtifact","targetBundleId","currentBundleId","cause","createHttpClient"],"sourceRoot":"../../src","sources":["httpClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { FetchJSONResponseError } from "./fetchJSON.js";
|
|
4
5
|
import { createHttpClient } from "./httpClient.js";
|
|
5
6
|
const mocks = vi.hoisted(() => {
|
|
6
7
|
Reflect.set(globalThis, "HotUpdater", {
|
|
@@ -15,11 +16,27 @@ vi.mock("./releaseCatalogCache", () => ({
|
|
|
15
16
|
fetchReleaseCatalogWithCache: mocks.fetchCatalog
|
|
16
17
|
}));
|
|
17
18
|
vi.mock("./fetchJSON", () => ({
|
|
19
|
+
FetchJSONResponseError: class FetchJSONResponseError extends Error {
|
|
20
|
+
constructor(status, statusText) {
|
|
21
|
+
super(statusText);
|
|
22
|
+
this.status = status;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
18
25
|
fetchJSON: mocks.fetchJSON
|
|
19
26
|
}));
|
|
20
27
|
const artifact = {
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
artifactProtocolVersion: 1,
|
|
29
|
+
assets: {
|
|
30
|
+
"index.ios.bundle": {
|
|
31
|
+
file: {
|
|
32
|
+
url: "/storage/index.bundle.br"
|
|
33
|
+
},
|
|
34
|
+
fileHash: "bundle-hash"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
manifestFileHash: "manifest-hash",
|
|
38
|
+
manifestUrl: "/storage/manifest.json",
|
|
39
|
+
archiveUrl: "/storage/bundle.tar.br"
|
|
23
40
|
};
|
|
24
41
|
const catalog = {
|
|
25
42
|
catalogId: "server-owned-project",
|
|
@@ -73,13 +90,22 @@ describe("private HotUpdater HTTP client", () => {
|
|
|
73
90
|
targetBundleId: "target"
|
|
74
91
|
})).resolves.toEqual({
|
|
75
92
|
...artifact,
|
|
76
|
-
|
|
93
|
+
assets: {
|
|
94
|
+
"index.ios.bundle": {
|
|
95
|
+
file: {
|
|
96
|
+
url: "https://first.example.com/hot-updater/storage/index.bundle.br"
|
|
97
|
+
},
|
|
98
|
+
fileHash: "bundle-hash"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
manifestUrl: "https://first.example.com/hot-updater/storage/manifest.json",
|
|
102
|
+
archiveUrl: "https://first.example.com/hot-updater/storage/bundle.tar.br"
|
|
77
103
|
});
|
|
78
104
|
expect(resolveBaseURL).toHaveBeenCalledOnce();
|
|
79
105
|
expect(mocks.fetchJSON).toHaveBeenCalledWith({
|
|
80
106
|
requestHeaders: undefined,
|
|
81
107
|
requestTimeout: undefined,
|
|
82
|
-
url: "https://first.example.com/hot-updater/artifacts/target/from/current"
|
|
108
|
+
url: "https://first.example.com/hot-updater/artifacts/v1/target/from/current"
|
|
83
109
|
});
|
|
84
110
|
await client.createSession();
|
|
85
111
|
expect(resolveBaseURL).toHaveBeenCalledTimes(2);
|
|
@@ -87,7 +113,14 @@ describe("private HotUpdater HTTP client", () => {
|
|
|
87
113
|
it("rejects non-storage relative artifact URLs", async () => {
|
|
88
114
|
mocks.fetchJSON.mockResolvedValue({
|
|
89
115
|
...artifact,
|
|
90
|
-
|
|
116
|
+
assets: {
|
|
117
|
+
"index.ios.bundle": {
|
|
118
|
+
file: {
|
|
119
|
+
url: "/private/index.bundle.br"
|
|
120
|
+
},
|
|
121
|
+
fileHash: "bundle-hash"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
91
124
|
});
|
|
92
125
|
const session = await createHttpClient("https://updates.example.com").createSession();
|
|
93
126
|
await expect(session.resolveArtifact({
|
|
@@ -95,6 +128,25 @@ describe("private HotUpdater HTTP client", () => {
|
|
|
95
128
|
targetBundleId: "target"
|
|
96
129
|
})).rejects.toThrow("client-relative storage paths");
|
|
97
130
|
});
|
|
131
|
+
it("rejects a legacy artifact response", async () => {
|
|
132
|
+
mocks.fetchJSON.mockResolvedValue({
|
|
133
|
+
fileHash: "archive-hash",
|
|
134
|
+
fileUrl: "/storage/bundle.zip"
|
|
135
|
+
});
|
|
136
|
+
const session = await createHttpClient("https://updates.example.com").createSession();
|
|
137
|
+
await expect(session.resolveArtifact({
|
|
138
|
+
currentBundleId: "current",
|
|
139
|
+
targetBundleId: "target"
|
|
140
|
+
})).rejects.toThrow("does not support artifact protocol 1");
|
|
141
|
+
});
|
|
142
|
+
it("reports an old server without the v1 endpoint explicitly", async () => {
|
|
143
|
+
mocks.fetchJSON.mockRejectedValue(new FetchJSONResponseError(404, "Not Found"));
|
|
144
|
+
const session = await createHttpClient("https://updates.example.com").createSession();
|
|
145
|
+
await expect(session.resolveArtifact({
|
|
146
|
+
currentBundleId: "current",
|
|
147
|
+
targetBundleId: "target"
|
|
148
|
+
})).rejects.toThrow("does not support artifact protocol 1");
|
|
149
|
+
});
|
|
98
150
|
it("requires a functional baseURL to resolve to a non-empty string", async () => {
|
|
99
151
|
await expect(createHttpClient(() => "").createSession()).rejects.toThrow("baseURL function must return a non-empty string");
|
|
100
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["beforeEach","describe","expect","it","vi","createHttpClient","mocks","hoisted","Reflect","set","globalThis","SDK_VERSION","fetchCatalog","fn","fetchJSON","mock","fetchReleaseCatalogWithCache","artifact","fileHash","
|
|
1
|
+
{"version":3,"names":["beforeEach","describe","expect","it","vi","FetchJSONResponseError","createHttpClient","mocks","hoisted","Reflect","set","globalThis","SDK_VERSION","fetchCatalog","fn","fetchJSON","mock","fetchReleaseCatalogWithCache","Error","constructor","status","statusText","artifact","artifactProtocolVersion","assets","file","url","fileHash","manifestFileHash","manifestUrl","archiveUrl","catalog","catalogId","catalogHash","repeat","fallbackPolicy","generation","releases","schemaVersion","scopeKey","clearAllMocks","mockResolvedValue","session","createSession","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"],"sourceRoot":"../../src","sources":["httpClient.spec.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { checkForUpdate } from "./checkForUpdate.js";
|
|
4
4
|
import { createHttpClient } from "./httpClient.js";
|
|
5
|
-
import { addListener, getPublicActiveUpdateState, clearCrashHistory, getAppVersion, getBaseURL,
|
|
5
|
+
import { addListener, getPublicActiveUpdateState, getActiveUpdateState, getBundleId, clearCrashHistory, getAppVersion, getBaseURL, getUpdateId, getChannel, getCohort, getCrashHistory, getDefaultChannel, getFingerprintHash, getInstallId, getManifest, getMinBundleId, isChannelSwitched, notifyAppReady, reload, resetChannel, setCohort, setReloadBehavior, setUser, updateBundle } from "./native.js";
|
|
6
|
+
import { reportBundleDownloaded } from "./notifyAppReadyInsights.js";
|
|
6
7
|
import { hotUpdaterStore } from "./store.js";
|
|
7
8
|
import { init, wrap } from "./wrap.js";
|
|
8
9
|
export * from "./store.js";
|
|
@@ -34,6 +35,7 @@ function createHotUpdaterClient() {
|
|
|
34
35
|
|
|
35
36
|
// Global configuration stored from wrap
|
|
36
37
|
const globalConfig = {
|
|
38
|
+
insights: true,
|
|
37
39
|
client: null
|
|
38
40
|
};
|
|
39
41
|
const createMissingNetworkConfigError = apiName => {
|
|
@@ -56,6 +58,7 @@ function createHotUpdaterClient() {
|
|
|
56
58
|
} = autoOptions;
|
|
57
59
|
return {
|
|
58
60
|
...rest,
|
|
61
|
+
insights: rest.insights ?? true,
|
|
59
62
|
client: createHttpClient(baseURL)
|
|
60
63
|
};
|
|
61
64
|
}
|
|
@@ -73,13 +76,14 @@ function createHotUpdaterClient() {
|
|
|
73
76
|
} = rest;
|
|
74
77
|
return {
|
|
75
78
|
...baseURLRest,
|
|
79
|
+
insights: baseURLRest.insights ?? true,
|
|
76
80
|
client: createHttpClient(baseURL)
|
|
77
81
|
};
|
|
78
82
|
}
|
|
79
83
|
throw createMissingNetworkConfigError("init");
|
|
80
84
|
};
|
|
81
85
|
const configureGlobal = (normalizedOptions, options) => {
|
|
82
|
-
globalConfig.
|
|
86
|
+
globalConfig.insights = normalizedOptions.insights ?? true;
|
|
83
87
|
globalConfig.client = normalizedOptions.client;
|
|
84
88
|
globalConfig.requestHeaders = options.requestHeaders;
|
|
85
89
|
globalConfig.requestTimeout = options.requestTimeout;
|
|
@@ -189,13 +193,12 @@ function createHotUpdaterClient() {
|
|
|
189
193
|
/** Reads the active and stable Release/Bundle state. */
|
|
190
194
|
getActiveUpdateState: async () => getPublicActiveUpdateState(),
|
|
191
195
|
/**
|
|
192
|
-
*
|
|
196
|
+
* Returns the selected update ID, matching the ID shown in the console.
|
|
197
|
+
* A staged update can change this ID before the app reloads.
|
|
193
198
|
*/
|
|
194
|
-
getBundleId,
|
|
199
|
+
getBundleId: getUpdateId,
|
|
195
200
|
/** Returns the minimum bundle ID based on the native app build time. */
|
|
196
201
|
getMinBundleId,
|
|
197
|
-
/** Returns the active Release identity, or null for BUILTIN/legacy state. */
|
|
198
|
-
getReleaseId,
|
|
199
202
|
/**
|
|
200
203
|
* Fetches the current manifest for the active bundle.
|
|
201
204
|
*/
|
|
@@ -293,7 +296,7 @@ function createHotUpdaterClient() {
|
|
|
293
296
|
const client = ensureGlobalClient("checkForUpdate");
|
|
294
297
|
const mergedConfig = {
|
|
295
298
|
...config,
|
|
296
|
-
|
|
299
|
+
insights: globalConfig.insights,
|
|
297
300
|
client,
|
|
298
301
|
requestHeaders: {
|
|
299
302
|
...globalConfig.requestHeaders,
|
|
@@ -309,8 +312,6 @@ function createHotUpdaterClient() {
|
|
|
309
312
|
*
|
|
310
313
|
* @param {UpdateBundleParams} params - Parameters object required for bundle update
|
|
311
314
|
* @param {string} params.bundleId - The bundle ID of the app
|
|
312
|
-
* @param {string|null} params.fileUrl - The URL of the zip file
|
|
313
|
-
*
|
|
314
315
|
* @returns {Promise<boolean>} Whether the update was successful
|
|
315
316
|
*
|
|
316
317
|
* @example
|
|
@@ -334,9 +335,27 @@ function createHotUpdaterClient() {
|
|
|
334
335
|
* }
|
|
335
336
|
* ```
|
|
336
337
|
*/
|
|
337
|
-
updateBundle: params => {
|
|
338
|
-
ensureGlobalClient("updateBundle");
|
|
339
|
-
|
|
338
|
+
updateBundle: async params => {
|
|
339
|
+
const client = ensureGlobalClient("updateBundle");
|
|
340
|
+
const fromBundleId = getBundleId();
|
|
341
|
+
const state = getActiveUpdateState();
|
|
342
|
+
const active = state.activeSelection;
|
|
343
|
+
const downloaded = await updateBundle(params);
|
|
344
|
+
if (downloaded) {
|
|
345
|
+
const selection = getActiveUpdateState().activeSelection;
|
|
346
|
+
await reportBundleDownloaded({
|
|
347
|
+
...globalConfig,
|
|
348
|
+
client
|
|
349
|
+
}, {
|
|
350
|
+
fromBundleId,
|
|
351
|
+
fromReleaseId: active?.bundleId === fromBundleId ? active.releaseId : state.stableSelection?.bundleId === fromBundleId ? state.stableSelection.releaseId : null,
|
|
352
|
+
toBundleId: params.bundleId,
|
|
353
|
+
toReleaseId: selection?.releaseId ?? null,
|
|
354
|
+
channel: params.channel ?? getChannel(),
|
|
355
|
+
updateStrategy: selection?.scopeKey?.startsWith("v1:fingerprint:") ? "fingerprint" : "appVersion"
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
return downloaded;
|
|
340
359
|
},
|
|
341
360
|
/**
|
|
342
361
|
* Clears the runtime channel override and restores the original bundle.
|
|
@@ -349,10 +368,8 @@ function createHotUpdaterClient() {
|
|
|
349
368
|
hotUpdaterStore.setState({
|
|
350
369
|
artifactType: null,
|
|
351
370
|
details: null,
|
|
352
|
-
downloadedBytes: undefined,
|
|
353
371
|
isUpdateDownloaded: false,
|
|
354
|
-
progress: 0
|
|
355
|
-
totalBytes: undefined
|
|
372
|
+
progress: 0
|
|
356
373
|
});
|
|
357
374
|
}
|
|
358
375
|
return ok;
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkForUpdate","createHttpClient","addListener","getPublicActiveUpdateState","clearCrashHistory","getAppVersion","getBaseURL","
|
|
1
|
+
{"version":3,"names":["checkForUpdate","createHttpClient","addListener","getPublicActiveUpdateState","getActiveUpdateState","getBundleId","clearCrashHistory","getAppVersion","getBaseURL","getUpdateId","getChannel","getCohort","getCrashHistory","getDefaultChannel","getFingerprintHash","getInstallId","getManifest","getMinBundleId","isChannelSwitched","notifyAppReady","reload","resetChannel","setCohort","setReloadBehavior","setUser","updateBundle","reportBundleDownloaded","hotUpdaterStore","init","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","createHotUpdaterClient","configurationAPI","mixedConfigurationReported","globalConfig","insights","client","createMissingNetworkConfigError","apiName","Error","baseURLExample","normalizeOptions","options","incoming","updateMode","autoOptions","baseURL","rest","normalizeInitOptions","_updateMode","baseURLRest","configureGlobal","normalizedOptions","requestHeaders","requestTimeout","onError","reportMixedConfiguration","nextAPI","console","error","ensureGlobalClient","methodName","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","fromBundleId","state","active","activeSelection","downloaded","selection","fromReleaseId","bundleId","releaseId","stableSelection","toBundleId","toReleaseId","channel","updateStrategy","scopeKey","startsWith","ok","setState","artifactType","details","progress","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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;IAED;AACJ;AACA;IACIrC,MAAM;IAEN;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4C,kBAAkB,EAAEA,CAAA,KAAMxC,eAAe,CAACyC,WAAW,CAAC,CAAC,CAACD,kBAAkB;IAE1E;AACJ;AACA;IACI5D,aAAa;IAEb;IACAH,oBAAoB,EAAE,MAAAA,CAAA,KAAYD,0BAA0B,CAAC,CAAC;IAE9D;AACJ;AACA;AACA;IACIE,WAAW,EAAEI,WAAW;IAExB;IACAQ,cAAc;IAEd;AACJ;AACA;IACID,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIK,iBAAiB;IAEjB;AACJ;AACA;AACA;IACII,SAAS;IAET;AACJ;AACA;IACIX,SAAS;IAET;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIT,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAGqE,MAA6B,IAAK;MACjD,MAAM5B,MAAM,GAAGwB,kBAAkB,CAAC,gBAAgB,CAAC;MAEnD,MAAMK,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACT7B,QAAQ,EAAED,YAAY,CAACC,QAAQ;QAC/BC,MAAM;QACNiB,cAAc,EAAE;UACd,GAAGnB,YAAY,CAACmB,cAAc;UAC9B,GAAGW,MAAM,CAACX;QACZ,CAAC;QACDC,cAAc,EAAEU,MAAM,CAACV,cAAc,IAAIpB,YAAY,CAACoB,cAAc;QACpEC,OAAO,EAAES,MAAM,CAACT,OAAO,IAAIrB,YAAY,CAACqB;MAC1C,CAAC;MAED,OAAO5D,cAAc,CAACsE,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI7C,YAAY,EAAE,MAAO8C,MAAoB,IAAK;MAC5C,MAAM9B,MAAM,GAAGwB,kBAAkB,CAAC,cAAc,CAAC;MACjD,MAAMO,YAAY,GAAGnE,WAAW,CAAC,CAAC;MAClC,MAAMoE,KAAK,GAAGrE,oBAAoB,CAAC,CAAC;MACpC,MAAMsE,MAAM,GAAGD,KAAK,CAACE,eAAe;MACpC,MAAMC,UAAU,GAAG,MAAMnD,YAAY,CAAC8C,MAAM,CAAC;MAC7C,IAAIK,UAAU,EAAE;QACd,MAAMC,SAAS,GAAGzE,oBAAoB,CAAC,CAAC,CAACuE,eAAe;QACxD,MAAMjD,sBAAsB,CAC1B;UAAE,GAAGa,YAAY;UAAEE;QAAO,CAAC,EAC3B;UACE+B,YAAY;UACZM,aAAa,EACXJ,MAAM,EAAEK,QAAQ,KAAKP,YAAY,GAC7BE,MAAM,CAACM,SAAS,GAChBP,KAAK,CAACQ,eAAe,EAAEF,QAAQ,KAAKP,YAAY,GAC9CC,KAAK,CAACQ,eAAe,CAACD,SAAS,GAC/B,IAAI;UACZE,UAAU,EAAEX,MAAM,CAACQ,QAAQ;UAC3BI,WAAW,EAAEN,SAAS,EAAEG,SAAS,IAAI,IAAI;UACzCI,OAAO,EAAEb,MAAM,CAACa,OAAO,IAAI1E,UAAU,CAAC,CAAC;UACvC2E,cAAc,EAAER,SAAS,EAAES,QAAQ,EAAEC,UAAU,CAAC,iBAAiB,CAAC,GAC9D,aAAa,GACb;QACN,CACF,CAAC;MACH;MACA,OAAOX,UAAU;IACnB,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIvD,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAMmE,EAAE,GAAG,MAAMnE,YAAY,CAAC,CAAC;MAC/B,IAAImE,EAAE,EAAE;QACN7D,eAAe,CAAC8D,QAAQ,CAAC;UACvBC,YAAY,EAAE,IAAI;UAClBC,OAAO,EAAE,IAAI;UACbxB,kBAAkB,EAAE,KAAK;UACzByB,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOJ,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI1E,kBAAkB;IAElB;AACJ;AACA;IACIC,YAAY;IAEZ;AACJ;AACA;IACIS,OAAO;IAEP;AACJ;AACA;IACIL,cAAc;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIP,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN;EACF,CAAC;AACH;AASA,OAAO,MAAMuF,UAA4B,GAAGzD,sBAAsB,CAAC,CAAC","ignoreList":[]}
|
package/lib/module/index.spec.js
CHANGED
|
@@ -20,7 +20,7 @@ const mocks = vi.hoisted(() => {
|
|
|
20
20
|
})),
|
|
21
21
|
getAppVersion: vi.fn(() => "1.0.0"),
|
|
22
22
|
getBaseURL: vi.fn(() => null),
|
|
23
|
-
|
|
23
|
+
getUpdateId: vi.fn(() => "release-id"),
|
|
24
24
|
getChannel: vi.fn(() => "production"),
|
|
25
25
|
getCohort: vi.fn(() => "123"),
|
|
26
26
|
getCrashHistory: vi.fn(() => []),
|
|
@@ -29,7 +29,6 @@ const mocks = vi.hoisted(() => {
|
|
|
29
29
|
getInstallId: vi.fn(() => "install-id"),
|
|
30
30
|
getManifest: vi.fn(() => null),
|
|
31
31
|
getMinBundleId: vi.fn(() => "min-bundle-id"),
|
|
32
|
-
getReleaseId: vi.fn(async () => null),
|
|
33
32
|
init: vi.fn(),
|
|
34
33
|
isChannelSwitched: vi.fn(() => false),
|
|
35
34
|
notifyAppReady: vi.fn(() => ({
|
|
@@ -44,6 +43,11 @@ const mocks = vi.hoisted(() => {
|
|
|
44
43
|
wrap: vi.fn(Component => Component)
|
|
45
44
|
};
|
|
46
45
|
});
|
|
46
|
+
vi.mock("react-native", () => ({
|
|
47
|
+
Platform: {
|
|
48
|
+
OS: "ios"
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
47
51
|
vi.mock("./httpClient", () => ({
|
|
48
52
|
createHttpClient: mocks.createHttpClient
|
|
49
53
|
}));
|
|
@@ -54,9 +58,11 @@ vi.mock("./native", () => ({
|
|
|
54
58
|
addListener: mocks.addListener,
|
|
55
59
|
clearCrashHistory: mocks.clearCrashHistory,
|
|
56
60
|
getPublicActiveUpdateState: mocks.getActiveUpdateState,
|
|
61
|
+
getActiveUpdateState: mocks.getActiveUpdateState,
|
|
62
|
+
getBundleId: () => "bundle-id",
|
|
57
63
|
getAppVersion: mocks.getAppVersion,
|
|
58
64
|
getBaseURL: mocks.getBaseURL,
|
|
59
|
-
|
|
65
|
+
getUpdateId: mocks.getUpdateId,
|
|
60
66
|
getChannel: mocks.getChannel,
|
|
61
67
|
getCohort: mocks.getCohort,
|
|
62
68
|
getCrashHistory: mocks.getCrashHistory,
|
|
@@ -65,7 +71,6 @@ vi.mock("./native", () => ({
|
|
|
65
71
|
getInstallId: mocks.getInstallId,
|
|
66
72
|
getManifest: mocks.getManifest,
|
|
67
73
|
getMinBundleId: mocks.getMinBundleId,
|
|
68
|
-
getReleaseId: mocks.getReleaseId,
|
|
69
74
|
isChannelSwitched: mocks.isChannelSwitched,
|
|
70
75
|
notifyAppReady: mocks.notifyAppReady,
|
|
71
76
|
reload: mocks.reload,
|
|
@@ -90,6 +95,12 @@ describe("HotUpdater client initialization", () => {
|
|
|
90
95
|
mocks.checkForUpdate.mockResolvedValue(null);
|
|
91
96
|
mocks.wrap.mockImplementation(Component => Component);
|
|
92
97
|
});
|
|
98
|
+
it("exposes the console ID through the existing getter only", async () => {
|
|
99
|
+
const HotUpdater = await importHotUpdater();
|
|
100
|
+
expect(HotUpdater.getBundleId()).toBe("release-id");
|
|
101
|
+
expect(HotUpdater).not.toHaveProperty("getReleaseId");
|
|
102
|
+
expect(HotUpdater).not.toHaveProperty("getUpdateId");
|
|
103
|
+
});
|
|
93
104
|
it("initializes a private HTTP client from the required baseURL", async () => {
|
|
94
105
|
const client = {
|
|
95
106
|
createSession: vi.fn()
|
|
@@ -97,7 +108,7 @@ describe("HotUpdater client initialization", () => {
|
|
|
97
108
|
mocks.createHttpClient.mockReturnValue(client);
|
|
98
109
|
const HotUpdater = await importHotUpdater();
|
|
99
110
|
HotUpdater.init({
|
|
100
|
-
|
|
111
|
+
insights: true,
|
|
101
112
|
baseURL: "https://updates.example.com",
|
|
102
113
|
requestHeaders: {
|
|
103
114
|
Authorization: "Bearer token"
|
|
@@ -106,7 +117,7 @@ describe("HotUpdater client initialization", () => {
|
|
|
106
117
|
});
|
|
107
118
|
expect(mocks.createHttpClient).toHaveBeenCalledWith("https://updates.example.com");
|
|
108
119
|
expect(mocks.init).toHaveBeenCalledWith({
|
|
109
|
-
|
|
120
|
+
insights: true,
|
|
110
121
|
client,
|
|
111
122
|
requestHeaders: {
|
|
112
123
|
Authorization: "Bearer token"
|
|
@@ -123,6 +134,40 @@ describe("HotUpdater client initialization", () => {
|
|
|
123
134
|
expect(mocks.createHttpClient).toHaveBeenCalledWith(resolveBaseURL);
|
|
124
135
|
expect(resolveBaseURL).not.toHaveBeenCalled();
|
|
125
136
|
});
|
|
137
|
+
it("enables insights by default for init and wrap", async () => {
|
|
138
|
+
const HotUpdater = await importHotUpdater();
|
|
139
|
+
HotUpdater.init({
|
|
140
|
+
baseURL: "https://updates.example.com"
|
|
141
|
+
});
|
|
142
|
+
HotUpdater.wrap({
|
|
143
|
+
baseURL: "https://updates.example.com",
|
|
144
|
+
updateStrategy: "appVersion"
|
|
145
|
+
});
|
|
146
|
+
expect(mocks.init).toHaveBeenCalledWith(expect.objectContaining({
|
|
147
|
+
insights: true
|
|
148
|
+
}));
|
|
149
|
+
expect(mocks.wrap).toHaveBeenCalledWith(expect.objectContaining({
|
|
150
|
+
insights: true
|
|
151
|
+
}));
|
|
152
|
+
});
|
|
153
|
+
it("preserves an explicit insights opt-out", async () => {
|
|
154
|
+
const HotUpdater = await importHotUpdater();
|
|
155
|
+
HotUpdater.init({
|
|
156
|
+
baseURL: "https://updates.example.com",
|
|
157
|
+
insights: false
|
|
158
|
+
});
|
|
159
|
+
HotUpdater.wrap({
|
|
160
|
+
baseURL: "https://updates.example.com",
|
|
161
|
+
insights: false,
|
|
162
|
+
updateStrategy: "appVersion"
|
|
163
|
+
});
|
|
164
|
+
expect(mocks.init).toHaveBeenCalledWith(expect.objectContaining({
|
|
165
|
+
insights: false
|
|
166
|
+
}));
|
|
167
|
+
expect(mocks.wrap).toHaveBeenCalledWith(expect.objectContaining({
|
|
168
|
+
insights: false
|
|
169
|
+
}));
|
|
170
|
+
});
|
|
126
171
|
it("requires baseURL and rejects the removed resolver shape", async () => {
|
|
127
172
|
const HotUpdater = await importHotUpdater();
|
|
128
173
|
expect(() => HotUpdater.init({})).toThrow("baseURL must be provided");
|
|
@@ -159,7 +204,7 @@ describe("HotUpdater client initialization", () => {
|
|
|
159
204
|
expect(initOptions.baseURL).toBe("https://updates.example.com");
|
|
160
205
|
expect(wrapOptions.updateStrategy).toBe("appVersion");
|
|
161
206
|
});
|
|
162
|
-
it("merges settings and carries the
|
|
207
|
+
it("merges settings and carries the insights gate to checks", async () => {
|
|
163
208
|
const client = {
|
|
164
209
|
createSession: vi.fn()
|
|
165
210
|
};
|
|
@@ -167,7 +212,7 @@ describe("HotUpdater client initialization", () => {
|
|
|
167
212
|
const checkOnError = vi.fn();
|
|
168
213
|
const HotUpdater = await importHotUpdater();
|
|
169
214
|
HotUpdater.init({
|
|
170
|
-
|
|
215
|
+
insights: true,
|
|
171
216
|
baseURL: "https://updates.example.com",
|
|
172
217
|
requestHeaders: {
|
|
173
218
|
Authorization: "Bearer token"
|
|
@@ -182,7 +227,7 @@ describe("HotUpdater client initialization", () => {
|
|
|
182
227
|
updateStrategy: "appVersion"
|
|
183
228
|
});
|
|
184
229
|
expect(mocks.checkForUpdate).toHaveBeenCalledWith({
|
|
185
|
-
|
|
230
|
+
insights: true,
|
|
186
231
|
client,
|
|
187
232
|
onError: checkOnError,
|
|
188
233
|
requestHeaders: {
|
|
@@ -200,12 +245,12 @@ describe("HotUpdater client initialization", () => {
|
|
|
200
245
|
mocks.createHttpClient.mockReturnValue(client);
|
|
201
246
|
const HotUpdater = await importHotUpdater();
|
|
202
247
|
HotUpdater.wrap({
|
|
203
|
-
|
|
248
|
+
insights: true,
|
|
204
249
|
baseURL: "https://updates.example.com",
|
|
205
250
|
updateStrategy: "appVersion"
|
|
206
251
|
});
|
|
207
252
|
expect(mocks.wrap).toHaveBeenCalledWith({
|
|
208
|
-
|
|
253
|
+
insights: true,
|
|
209
254
|
client,
|
|
210
255
|
updateStrategy: "appVersion"
|
|
211
256
|
});
|