@hot-updater/react-native 1.0.0-rc.4 → 1.0.0-rc.40
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/build.gradle +13 -2
- package/android/proguard-rules.pro +8 -2
- package/android/src/bridge/BridgeReactInstance.kt +38 -0
- package/android/src/bridgeless/BridgeReactInstance.kt +24 -0
- package/android/src/main/java/com/hotupdater/ActivityStartGate.kt +94 -0
- package/android/src/main/java/com/hotupdater/BuiltInAssetResolver.kt +286 -0
- package/android/src/main/java/com/hotupdater/BundleFileStorageService.kt +1064 -844
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +50 -11
- package/android/src/main/java/com/hotupdater/FileManagerService.kt +45 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterException.kt +287 -22
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +46 -30
- package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryManager.kt +75 -192
- package/android/src/main/java/com/hotupdater/HotUpdaterRecoveryState.kt +64 -0
- package/android/src/main/java/com/hotupdater/InstallIdentityService.kt +37 -0
- package/android/src/main/java/com/hotupdater/KeyValueStorageService.kt +86 -0
- package/android/src/main/java/com/hotupdater/NetworkState.kt +31 -0
- package/android/src/main/java/com/hotupdater/NoBackupStorage.kt +17 -0
- package/android/src/main/java/com/hotupdater/OkHttpDownloadService.kt +127 -50
- package/android/src/main/java/com/hotupdater/ReactNativeValueConverters.kt +34 -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 +109 -84
- package/android/src/newarch/JavaScriptExceptionHooks.kt +48 -0
- package/android/src/newarch/ReactIntegrationManager.kt +6 -32
- package/android/src/oldarch/HotUpdater.kt +7 -9
- package/android/src/oldarch/HotUpdaterModule.kt +98 -74
- package/android/src/oldarch/HotUpdaterSpec.kt +4 -6
- package/android/src/oldarch/JavaScriptExceptionHooks.kt +71 -0
- package/ios/HotUpdater/Internal/BrotliFileDecompressor.swift +167 -0
- package/ios/HotUpdater/Internal/BuiltInAssetResolver.swift +196 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +1032 -1116
- package/ios/HotUpdater/Internal/BundleMetadata.swift +61 -54
- package/ios/HotUpdater/Internal/FileManagerService.swift +48 -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 +32 -67
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +229 -73
- package/ios/HotUpdater/Internal/KeyValueStorageService.swift +71 -0
- package/ios/HotUpdater/Internal/NotificationExtension.swift +0 -2
- package/ios/HotUpdater/Internal/TarArchiveExtractor.swift +182 -311
- package/ios/HotUpdater/Internal/URLSessionDownloadService.swift +119 -71
- package/ios/HotUpdater/Internal/UpdateFailure.swift +390 -0
- 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/appReady.js +102 -0
- package/lib/commonjs/appReady.js.map +1 -0
- package/lib/commonjs/checkForUpdate.js +120 -68
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/clientPlugin.js +13 -0
- package/lib/commonjs/clientPlugin.js.map +1 -0
- package/lib/commonjs/error.js +4 -13
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/fetchJSON.js +16 -27
- package/lib/commonjs/fetchJSON.js.map +1 -1
- package/lib/commonjs/fetchUpdateResponse.js +60 -0
- package/lib/commonjs/fetchUpdateResponse.js.map +1 -0
- package/lib/commonjs/httpClient.js +63 -94
- package/lib/commonjs/httpClient.js.map +1 -1
- package/lib/commonjs/index.js +71 -18
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native.js +74 -60
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/pluginHost.js +45 -0
- package/lib/commonjs/pluginHost.js.map +1 -0
- package/lib/commonjs/releaseCatalogCache.js +36 -87
- package/lib/commonjs/releaseCatalogCache.js.map +1 -1
- 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/updateError.js +145 -0
- package/lib/commonjs/updateError.js.map +1 -0
- package/lib/commonjs/wrap.js +43 -26
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/module/appReady.js +95 -0
- package/lib/module/appReady.js.map +1 -0
- package/lib/module/checkForUpdate.js +113 -63
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/clientPlugin.js +4 -0
- package/lib/module/clientPlugin.js.map +1 -0
- package/lib/module/error.js +4 -13
- package/lib/module/error.js.map +1 -1
- package/lib/module/fetchJSON.js +14 -26
- package/lib/module/fetchJSON.js.map +1 -1
- package/lib/module/fetchUpdateResponse.js +55 -0
- package/lib/module/fetchUpdateResponse.js.map +1 -0
- package/lib/module/httpClient.js +62 -93
- package/lib/module/httpClient.js.map +1 -1
- package/lib/module/index.js +58 -20
- package/lib/module/index.js.map +1 -1
- package/lib/module/native.js +67 -53
- package/lib/module/native.js.map +1 -1
- package/lib/module/pluginHost.js +36 -0
- package/lib/module/pluginHost.js.map +1 -0
- package/lib/module/releaseCatalogCache.js +32 -82
- package/lib/module/releaseCatalogCache.js.map +1 -1
- 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/updateError.js +139 -0
- package/lib/module/updateError.js.map +1 -0
- package/lib/module/wrap.js +43 -26
- package/lib/module/wrap.js.map +1 -1
- package/lib/typescript/commonjs/appReady.d.ts +21 -0
- package/lib/typescript/commonjs/appReady.d.ts.map +1 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts +16 -4
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/clientPlugin.d.ts +2 -0
- package/lib/typescript/commonjs/clientPlugin.d.ts.map +1 -0
- 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 +5 -5
- package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchUpdateResponse.d.ts +14 -0
- package/lib/typescript/commonjs/fetchUpdateResponse.d.ts.map +1 -0
- package/lib/typescript/commonjs/httpClient.d.ts +4 -33
- package/lib/typescript/commonjs/httpClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -8
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +29 -22
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/pluginHost.d.ts +4 -0
- package/lib/typescript/commonjs/pluginHost.d.ts.map +1 -0
- package/lib/typescript/commonjs/releaseCatalogCache.d.ts +8 -14
- package/lib/typescript/commonjs/releaseCatalogCache.d.ts.map +1 -1
- 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 +35 -47
- 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/types.d.ts +1 -1
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/updateError.d.ts +26 -0
- package/lib/typescript/commonjs/updateError.d.ts.map +1 -0
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.types.d.ts +6 -7
- package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -1
- package/lib/typescript/module/appReady.d.ts +21 -0
- package/lib/typescript/module/appReady.d.ts.map +1 -0
- package/lib/typescript/module/checkForUpdate.d.ts +16 -4
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/clientPlugin.d.ts +2 -0
- package/lib/typescript/module/clientPlugin.d.ts.map +1 -0
- 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 +5 -5
- package/lib/typescript/module/fetchJSON.d.ts.map +1 -1
- package/lib/typescript/module/fetchUpdateResponse.d.ts +14 -0
- package/lib/typescript/module/fetchUpdateResponse.d.ts.map +1 -0
- package/lib/typescript/module/httpClient.d.ts +4 -33
- package/lib/typescript/module/httpClient.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -8
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +29 -22
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/pluginHost.d.ts +4 -0
- package/lib/typescript/module/pluginHost.d.ts.map +1 -0
- package/lib/typescript/module/releaseCatalogCache.d.ts +8 -14
- package/lib/typescript/module/releaseCatalogCache.d.ts.map +1 -1
- 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 +35 -47
- 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/types.d.ts +1 -1
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/updateError.d.ts +26 -0
- package/lib/typescript/module/updateError.d.ts.map +1 -0
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/lib/typescript/module/wrap.types.d.ts +6 -7
- package/lib/typescript/module/wrap.types.d.ts.map +1 -1
- package/package.json +7 -4
- package/src/appReady.ts +141 -0
- package/src/checkForUpdate.ts +145 -86
- package/src/clientPlugin.ts +18 -0
- package/src/error.ts +4 -14
- package/src/fetchJSON.ts +14 -30
- package/src/fetchUpdateResponse.ts +60 -0
- package/src/httpClient.ts +88 -159
- package/src/index.ts +90 -24
- package/src/native.ts +98 -102
- package/src/pluginHost.ts +47 -0
- package/src/releaseCatalogCache.ts +43 -172
- package/src/sdkVersion.ts +1 -1
- package/src/specs/NativeHotUpdater.ts +34 -48
- package/src/store.ts +2 -23
- package/src/types.ts +1 -1
- package/src/updateError.ts +167 -0
- package/src/wrap.tsx +57 -26
- package/src/wrap.types.ts +6 -7
- 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/BsdiffPatchTest.kt +0 -46
- package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +0 -799
- package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +0 -273
- package/android/src/test/java/com/hotupdater/NativeConfigUtilsTest.kt +0 -20
- package/android/src/test/java/com/hotupdater/OkHttpDownloadServiceTest.kt +0 -111
- package/android/src/test/java/com/hotupdater/RelativePathResolverTest.kt +0 -41
- package/android/src/test/java/com/hotupdater/ReleaseCatalogCacheServiceTest.kt +0 -118
- 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/catalogCacheNative.spec.js +0 -31
- package/lib/commonjs/catalogCacheNative.spec.js.map +0 -1
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +0 -616
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +0 -1
- package/lib/commonjs/httpClient.spec.js +0 -102
- package/lib/commonjs/httpClient.spec.js.map +0 -1
- package/lib/commonjs/index.spec.js +0 -302
- package/lib/commonjs/index.spec.js.map +0 -1
- package/lib/commonjs/iosInterop.spec.js +0 -18
- package/lib/commonjs/iosInterop.spec.js.map +0 -1
- package/lib/commonjs/native.spec.js +0 -883
- package/lib/commonjs/native.spec.js.map +0 -1
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js +0 -218
- package/lib/commonjs/notifyAppReadyInsights.boundary.spec.js.map +0 -1
- package/lib/commonjs/notifyAppReadyInsights.js +0 -133
- package/lib/commonjs/notifyAppReadyInsights.js.map +0 -1
- package/lib/commonjs/notifyAppReadyInsights.spec.js +0 -246
- package/lib/commonjs/notifyAppReadyInsights.spec.js.map +0 -1
- package/lib/commonjs/notifyAppReadyInsights.test-utils.js +0 -24
- package/lib/commonjs/notifyAppReadyInsights.test-utils.js.map +0 -1
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js +0 -117
- package/lib/commonjs/notifyAppReadyInsights.transport.spec.js.map +0 -1
- package/lib/commonjs/releaseCatalogCache.spec.js +0 -195
- package/lib/commonjs/releaseCatalogCache.spec.js.map +0 -1
- package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js +0 -64
- package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js.map +0 -1
- package/lib/commonjs/store.notification.spec.js +0 -76
- package/lib/commonjs/store.notification.spec.js.map +0 -1
- package/lib/commonjs/store.spec.js +0 -316
- package/lib/commonjs/store.spec.js.map +0 -1
- package/lib/commonjs/wrap.spec.js +0 -329
- package/lib/commonjs/wrap.spec.js.map +0 -1
- package/lib/module/catalogCacheNative.spec.js +0 -31
- package/lib/module/catalogCacheNative.spec.js.map +0 -1
- package/lib/module/checkForUpdate.releaseCatalog.spec.js +0 -615
- package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +0 -1
- package/lib/module/httpClient.spec.js +0 -102
- package/lib/module/httpClient.spec.js.map +0 -1
- package/lib/module/index.spec.js +0 -301
- package/lib/module/index.spec.js.map +0 -1
- package/lib/module/iosInterop.spec.js +0 -18
- package/lib/module/iosInterop.spec.js.map +0 -1
- package/lib/module/native.spec.js +0 -882
- package/lib/module/native.spec.js.map +0 -1
- package/lib/module/notifyAppReadyInsights.boundary.spec.js +0 -217
- package/lib/module/notifyAppReadyInsights.boundary.spec.js.map +0 -1
- package/lib/module/notifyAppReadyInsights.js +0 -128
- package/lib/module/notifyAppReadyInsights.js.map +0 -1
- package/lib/module/notifyAppReadyInsights.spec.js +0 -245
- package/lib/module/notifyAppReadyInsights.spec.js.map +0 -1
- package/lib/module/notifyAppReadyInsights.test-utils.js +0 -18
- package/lib/module/notifyAppReadyInsights.test-utils.js.map +0 -1
- package/lib/module/notifyAppReadyInsights.transport.spec.js +0 -116
- package/lib/module/notifyAppReadyInsights.transport.spec.js.map +0 -1
- package/lib/module/releaseCatalogCache.spec.js +0 -195
- package/lib/module/releaseCatalogCache.spec.js.map +0 -1
- package/lib/module/releaseCatalogCacheNativeContract.spec.js +0 -64
- package/lib/module/releaseCatalogCacheNativeContract.spec.js.map +0 -1
- package/lib/module/store.notification.spec.js +0 -77
- package/lib/module/store.notification.spec.js.map +0 -1
- package/lib/module/store.spec.js +0 -315
- package/lib/module/store.spec.js.map +0 -1
- package/lib/module/wrap.spec.js +0 -330
- package/lib/module/wrap.spec.js.map +0 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts +0 -13
- package/lib/typescript/commonjs/notifyAppReadyInsights.d.ts.map +0 -1
- package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts +0 -8
- package/lib/typescript/commonjs/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
- package/lib/typescript/module/notifyAppReadyInsights.d.ts +0 -13
- package/lib/typescript/module/notifyAppReadyInsights.d.ts.map +0 -1
- package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts +0 -8
- package/lib/typescript/module/notifyAppReadyInsights.test-utils.d.ts.map +0 -1
- package/src/catalogCacheNative.spec.ts +0 -63
- package/src/checkForUpdate.releaseCatalog.spec.ts +0 -612
- package/src/httpClient.spec.ts +0 -132
- package/src/index.spec.ts +0 -337
- package/src/iosInterop.spec.ts +0 -30
- package/src/native.spec.ts +0 -945
- package/src/notifyAppReadyInsights.boundary.spec.ts +0 -234
- package/src/notifyAppReadyInsights.spec.ts +0 -243
- package/src/notifyAppReadyInsights.test-utils.ts +0 -31
- package/src/notifyAppReadyInsights.transport.spec.ts +0 -130
- package/src/notifyAppReadyInsights.ts +0 -194
- package/src/releaseCatalogCache.spec.ts +0 -282
- package/src/releaseCatalogCacheNativeContract.spec.ts +0 -80
- package/src/store.notification.spec.ts +0 -92
- package/src/store.spec.ts +0 -372
- package/src/wrap.spec.ts +0 -406
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CatalogHighWater, type UpdateStatus, type PersistedSelectionReceipt } from "@hot-updater/
|
|
1
|
+
import { type CatalogHighWater, type UpdateStatus, type PersistedSelectionReceipt } from "@hot-updater/protocol";
|
|
2
2
|
import { HotUpdaterErrorCode, isHotUpdaterError } from "./error";
|
|
3
3
|
import { type UpdateBundleParams } from "./specs/NativeHotUpdater";
|
|
4
4
|
export { HotUpdaterErrorCode, isHotUpdaterError };
|
|
@@ -33,7 +33,7 @@ export type CustomReloadHandler = () => void | Promise<void>;
|
|
|
33
33
|
* - `custom`: Run a user-provided JS handler on both platforms
|
|
34
34
|
*/
|
|
35
35
|
export type ReloadBehaviorSetting = ReloadBehavior | "custom";
|
|
36
|
-
export type HotUpdaterProgressArtifactType = "
|
|
36
|
+
export type HotUpdaterProgressArtifactType = "diff";
|
|
37
37
|
export type HotUpdaterDiffFileStatus = "pending" | "downloading" | "downloaded" | "failed";
|
|
38
38
|
export interface HotUpdaterDiffFileSnapshot {
|
|
39
39
|
/**
|
|
@@ -78,11 +78,6 @@ export interface HotUpdaterDiffProgressDetails {
|
|
|
78
78
|
files: HotUpdaterDiffFileSnapshot[];
|
|
79
79
|
}
|
|
80
80
|
export type HotUpdaterProgressEvent = {
|
|
81
|
-
progress: number;
|
|
82
|
-
artifactType: "archive";
|
|
83
|
-
downloadedBytes?: number;
|
|
84
|
-
totalBytes?: number;
|
|
85
|
-
} | {
|
|
86
81
|
progress: number;
|
|
87
82
|
artifactType: "diff";
|
|
88
83
|
details: HotUpdaterDiffProgressDetails;
|
|
@@ -130,6 +125,24 @@ export declare const commitReleaseSelection: (input: {
|
|
|
130
125
|
readonly selection: PersistedSelectionReceipt;
|
|
131
126
|
readonly guard: ReleaseSelectionGuard;
|
|
132
127
|
}) => Promise<boolean>;
|
|
128
|
+
/** How native delivered a staged bundle. */
|
|
129
|
+
export type BundleDelivery = {
|
|
130
|
+
/**
|
|
131
|
+
* "patch" when a bsdiff patch produced a file, "manifest" when only the
|
|
132
|
+
* changed files were downloaded, "archive" for the full archive.
|
|
133
|
+
*/
|
|
134
|
+
readonly delivery: "patch" | "manifest" | "archive";
|
|
135
|
+
/** A patch was tried, but the file or the archive was downloaded instead. */
|
|
136
|
+
readonly patchFallback: boolean;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Stages a bundle for the next launch. Resolves with how native delivered
|
|
140
|
+
* it, or with null when this runtime had already staged it and nothing was
|
|
141
|
+
* downloaded; rejects when the download or install fails.
|
|
142
|
+
*
|
|
143
|
+
* @throws {Error} Rejects with error.code from HotUpdaterErrorCode enum and error.message
|
|
144
|
+
*/
|
|
145
|
+
export declare function stageBundle(params: UpdateParams): Promise<BundleDelivery | null>;
|
|
133
146
|
/**
|
|
134
147
|
* Downloads files and applies them to the app.
|
|
135
148
|
*
|
|
@@ -220,17 +233,10 @@ export declare const isChannelSwitched: () => boolean;
|
|
|
220
233
|
*/
|
|
221
234
|
export declare const getFingerprintHash: () => string | null;
|
|
222
235
|
export declare const getInstallId: () => string;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
export declare const getPersistedUserIdentity: () => PersistedUserIdentity;
|
|
228
|
-
export type SetUserParams = {
|
|
229
|
-
userId?: string | number | null;
|
|
230
|
-
username?: string | null;
|
|
231
|
-
};
|
|
232
|
-
export declare function setUser(params: SetUserParams): void;
|
|
233
|
-
export declare function setUser(params: null): void;
|
|
236
|
+
/** Reads a value from the SDK's native key-value store. */
|
|
237
|
+
export declare const getStorageItem: (key: string) => string | null;
|
|
238
|
+
/** Writes a value to the SDK's native key-value store; null removes it. */
|
|
239
|
+
export declare const setStorageItem: (key: string, value: string | null) => void;
|
|
234
240
|
/**
|
|
235
241
|
* Result returned by notifyAppReady()
|
|
236
242
|
*/
|
|
@@ -249,17 +255,18 @@ export type NotifyAppReadyResult = {
|
|
|
249
255
|
fromReleaseId?: string;
|
|
250
256
|
toReleaseId?: string;
|
|
251
257
|
};
|
|
252
|
-
|
|
258
|
+
/** An update applied or recovered at this launch, as native persisted it. */
|
|
259
|
+
export type LaunchTransition = {
|
|
253
260
|
type: "UPDATE_APPLIED" | "RECOVERED";
|
|
254
261
|
fromBundleId: string;
|
|
255
262
|
toBundleId: string;
|
|
256
|
-
fromReleaseId
|
|
257
|
-
toReleaseId
|
|
263
|
+
fromReleaseId: string | null;
|
|
264
|
+
toReleaseId: string | null;
|
|
258
265
|
updateStrategy: PersistedUpdateStrategy;
|
|
259
266
|
};
|
|
260
267
|
export declare const readNotifyAppReady: () => {
|
|
261
268
|
result: NotifyAppReadyResult;
|
|
262
|
-
|
|
269
|
+
transition: LaunchTransition | null;
|
|
263
270
|
pending: boolean;
|
|
264
271
|
};
|
|
265
272
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAyB,EACvB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAGlD,KAAK,uBAAuB,GAAG,aAAa,GAAG,YAAY,CAAC;AAU5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAUD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,QAAQ,CAAC;AA8K9D,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,wBAAwB,GAChC,SAAS,GACT,aAAa,GACb,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,wBAAwB,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,0BAA0B,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,6BAA6B,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,uBAAuB,CAAC;CACrC,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,eAAe,aAC9C,CAAC,YACF,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,eAO9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAC/B,yBAAyB,EACzB,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAC9C,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,eAAe,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,eAAe,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAcD,eAAO,MAAM,oBAAoB,UAAW;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC,KAAG,OAGM,CAAC;AAEX,eAAO,MAAM,oBAAoB,QAAO,yBAQvC,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,iBAkB7C,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAC7B,qBAAqB,KAC3B,OAGO,CAAC;AAEX,eAAO,MAAM,sBAAsB,UAAiB;IAClD,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;CACvC,KAAG,OAAO,CAAC,OAAO,CAUlB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAeF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4DhC;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,IAGzC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,qBAqBlB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,IAAI,EACH,CAAC,QAAQ,EAAE,cAAc,CAAC,GAC1B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,GACrD,IAAI,CAuBN;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,WAAW,QAAO,MACqC,CAAC;AAErE;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,QAAO,MAO9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,QA4B9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAG9C,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,MAY/B,CAAC;AAcF,2DAA2D;AAC3D,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAAM,GAAG,IAIrD,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,MAAM,SAAS,MAAM,GAAG,IAAI,KAAG,IAIlE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IACE,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,uBAAuB,CAAC;CACzC,CAAC;AA8IF,eAAO,MAAM,kBAAkB,QAAO;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;CASlB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,cAAc,QAAO,oBAEjC,CAAC;AA0EF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,EAWxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,IAUtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAMpD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,IAI1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAO,MAS5B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { PluginHostConfig } from "@hot-updater/protocol";
|
|
2
|
+
/** The app's plugin host: plugins read the native module and fetch the configured server. */
|
|
3
|
+
export declare const configurePlugins: (plugins: readonly import("@hot-updater/protocol").HotUpdaterClientPlugin[] | undefined, config: import("@hot-updater/protocol").PluginHostConfig) => void, hasPluginHook: (name: import("@hot-updater/protocol").PluginHookName) => boolean, buildPluginEvent: <K extends import("@hot-updater/protocol").PluginHookName>(name: K, createPayload: () => import("@hot-updater/protocol").PluginHookPayload<K> | null) => import("@hot-updater/protocol").PluginHookPayload<K> | null, dispatchPluginHook: <K extends import("@hot-updater/protocol").PluginHookName>(name: K, payload: import("@hot-updater/protocol").PluginHookPayload<K>) => readonly Promise<void>[], emitPluginHook: <K extends import("@hot-updater/protocol").PluginHookName>(name: K, createPayload: () => import("@hot-updater/protocol").PluginHookPayload<K> | null) => void;
|
|
4
|
+
//# sourceMappingURL=pluginHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginHost.d.ts","sourceRoot":"","sources":["../../../src/pluginHost.ts"],"names":[],"mappings":"AAgBA,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,6FAA6F;AAC7F,eAAO,MACL,gBAAgB,8JAChB,aAAa,qEACb,gBAAgB,wNAChB,kBAAkB,kKAClB,cAAc,+JAsBd,CAAC"}
|
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
import { type ReleaseCatalog } from "@hot-updater/
|
|
2
|
-
|
|
1
|
+
import { type ExpectedReleaseCatalogScope, type ReleaseCatalog } from "@hot-updater/protocol";
|
|
2
|
+
import { type UpdateRequest } from "./fetchUpdateResponse";
|
|
3
3
|
export declare const MAX_RELEASE_CATALOG_CACHE_ENTRY_BYTES: number;
|
|
4
|
-
export type ExpectedReleaseCatalogScope = {
|
|
5
|
-
readonly channelKey: string;
|
|
6
|
-
readonly platform: "ios" | "android";
|
|
7
|
-
} & ({
|
|
8
|
-
readonly strategy: "APP_VERSION";
|
|
9
|
-
readonly fingerprintHash?: never;
|
|
10
|
-
} | {
|
|
11
|
-
readonly strategy: "FINGERPRINT";
|
|
12
|
-
readonly fingerprintHash: string;
|
|
13
|
-
});
|
|
14
4
|
type FetchReleaseCatalogInput = {
|
|
15
5
|
readonly baseURL: string;
|
|
16
6
|
readonly expectedScope: ExpectedReleaseCatalogScope;
|
|
17
7
|
readonly requestHeaders?: Record<string, string>;
|
|
18
8
|
readonly requestTimeout?: number;
|
|
19
9
|
readonly url: string;
|
|
10
|
+
readonly onResponse?: UpdateRequest["onResponse"];
|
|
20
11
|
};
|
|
21
|
-
export declare const hasExpectedReleaseCatalogScope: (catalog: ReleaseCatalog, expected: ExpectedReleaseCatalogScope) => boolean;
|
|
22
12
|
export declare const createReleaseCatalogCachePartition: (input: Pick<FetchReleaseCatalogInput, "baseURL" | "requestHeaders" | "url">) => string;
|
|
23
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Fetches a scope's catalog, or null when the server answers that the scope
|
|
15
|
+
* has none (a 404 with `x-hot-updater-catalog: none`).
|
|
16
|
+
*/
|
|
17
|
+
export declare const fetchReleaseCatalogWithCache: (input: FetchReleaseCatalogInput) => Promise<ReleaseCatalog | null>;
|
|
24
18
|
export {};
|
|
25
19
|
//# sourceMappingURL=releaseCatalogCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"releaseCatalogCache.d.ts","sourceRoot":"","sources":["../../../src/releaseCatalogCache.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"releaseCatalogCache.d.ts","sourceRoot":"","sources":["../../../src/releaseCatalogCache.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKhF,eAAO,MAAM,qCAAqC,QACG,CAAC;AAiCtD,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACnD,CAAC;AAqDF,eAAO,MAAM,kCAAkC,UACtC,IAAI,CAAC,wBAAwB,EAAE,SAAS,GAAG,gBAAgB,GAAG,KAAK,CAAC,KAC1E,MAMC,CAAC;AA6EL;;;GAGG;AACH,eAAO,MAAM,4BAA4B,UAChC,wBAAwB,KAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAa/B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.
|
|
1
|
+
export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.40";
|
|
2
2
|
//# sourceMappingURL=sdkVersion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkVersion.d.ts","sourceRoot":"","sources":["../../../src/sdkVersion.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"sdkVersion.d.ts","sourceRoot":"","sources":["../../../src/sdkVersion.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,gBAAgB,CAAC"}
|
|
@@ -1,46 +1,20 @@
|
|
|
1
1
|
import type { TurboModule } from "react-native";
|
|
2
2
|
import type { UnsafeObject } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
|
-
export interface ChangedAsset {
|
|
4
|
-
file?: {
|
|
5
|
-
compression?: "br" | null;
|
|
6
|
-
url: string;
|
|
7
|
-
} | null;
|
|
8
|
-
fileHash: string;
|
|
9
|
-
patch?: {
|
|
10
|
-
algorithm: "bsdiff";
|
|
11
|
-
baseBundleId: string;
|
|
12
|
-
baseFileHash: string;
|
|
13
|
-
patchFileHash: string;
|
|
14
|
-
patchUrl: string;
|
|
15
|
-
} | null;
|
|
16
|
-
}
|
|
17
3
|
export interface UpdateBundleParams {
|
|
18
4
|
bundleId: string;
|
|
19
5
|
channel?: string;
|
|
20
|
-
fileUrl: string | null;
|
|
21
|
-
/**
|
|
22
|
-
* File hash for integrity/signature verification.
|
|
23
|
-
*
|
|
24
|
-
* Format depends on signing configuration:
|
|
25
|
-
* - Signed: `sig:<base64_signature>` - Native will verify signature (and implicitly hash)
|
|
26
|
-
* - Unsigned: `<hex_hash>` - Native will verify SHA256 hash only
|
|
27
|
-
*
|
|
28
|
-
* Native determines verification mode by checking for "sig:" prefix.
|
|
29
|
-
*/
|
|
30
|
-
fileHash: string | null;
|
|
31
6
|
/**
|
|
32
|
-
*
|
|
7
|
+
* Signed manifest URL for installation.
|
|
33
8
|
*/
|
|
34
|
-
manifestUrl
|
|
9
|
+
manifestUrl: string;
|
|
35
10
|
/**
|
|
36
11
|
* File hash/signature for the manifest file itself.
|
|
37
12
|
*/
|
|
38
|
-
manifestFileHash
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
changedAssets?: UnsafeObject | null;
|
|
13
|
+
manifestFileHash: string;
|
|
14
|
+
/** Optional tar.br URL; integrity and sizes come from the verified manifest. */
|
|
15
|
+
archiveUrl?: string | null;
|
|
16
|
+
/** Full protocol v1 target file descriptor map. */
|
|
17
|
+
assets: UnsafeObject;
|
|
44
18
|
/** Full Release Catalog selection receipt committed with the staged Bundle. */
|
|
45
19
|
selection?: UnsafeObject | null;
|
|
46
20
|
}
|
|
@@ -56,18 +30,21 @@ export interface Spec extends TurboModule {
|
|
|
56
30
|
* Downloads and applies a bundle update.
|
|
57
31
|
*
|
|
58
32
|
* @param params - Update bundle parameters
|
|
59
|
-
* @returns Promise that resolves to
|
|
33
|
+
* @returns Promise that resolves, once the bundle is staged, to how it
|
|
34
|
+
* arrived: `{ delivery, patchFallback }`. `delivery` is "patch" when a
|
|
35
|
+
* bsdiff patch produced a file, "manifest" when only changed files were
|
|
36
|
+
* downloaded, or "archive" for the full archive; `patchFallback` is true
|
|
37
|
+
* when a patch was tried but the file or archive was downloaded instead.
|
|
60
38
|
* @throws {HotUpdaterErrorCode} Rejects with one of the following error codes:
|
|
61
39
|
*
|
|
62
40
|
* Parameter validation:
|
|
63
41
|
* - MISSING_BUNDLE_ID: Missing or empty bundleId
|
|
64
|
-
* - INVALID_FILE_URL: Invalid
|
|
42
|
+
* - INVALID_FILE_URL: Invalid manifest or asset URL provided
|
|
65
43
|
*
|
|
66
44
|
* Bundle storage:
|
|
67
45
|
* - DIRECTORY_CREATION_FAILED: Failed to create bundle directory
|
|
68
46
|
* - DOWNLOAD_FAILED: Failed to download bundle
|
|
69
47
|
* - INCOMPLETE_DOWNLOAD: Download incomplete (size mismatch)
|
|
70
|
-
* - EXTRACTION_FORMAT_ERROR: Invalid or corrupted archive format
|
|
71
48
|
* - INVALID_BUNDLE: Bundle missing required platform files
|
|
72
49
|
* - INSUFFICIENT_DISK_SPACE: Insufficient disk space
|
|
73
50
|
* - MOVE_OPERATION_FAILED: Failed to move bundle files
|
|
@@ -82,8 +59,20 @@ export interface Spec extends TurboModule {
|
|
|
82
59
|
*
|
|
83
60
|
* Note: iOS normalizes rare signature/storage errors to SIGNATURE_VERIFICATION_FAILED
|
|
84
61
|
* or UNKNOWN_ERROR to keep the JS error surface small.
|
|
85
|
-
|
|
86
|
-
|
|
62
|
+
*
|
|
63
|
+
* A rejection from the download or install also carries `userInfo`
|
|
64
|
+
* `{ stage, reason, resource?, httpStatus?, transport?, originCode? }`:
|
|
65
|
+
* `stage` is "download" (transfer and verification) or "install" (patch,
|
|
66
|
+
* extract, move into place); `reason` is one of "network", "http",
|
|
67
|
+
* "invalid_response", "hash_mismatch", "signature", "patch", "extract",
|
|
68
|
+
* "storage", or "unknown"; `resource` is what was being fetched or
|
|
69
|
+
* applied: "manifest", "file", "patch", or "archive". `httpStatus` is
|
|
70
|
+
* present when `reason` is "http", with `originCode`, the storage
|
|
71
|
+
* origin's XML error `<Code>` when the body names one. `transport` is
|
|
72
|
+
* present when no response arrived: "timeout", "dns", "tls",
|
|
73
|
+
* "connection", "offline", or "cancelled".
|
|
74
|
+
*/
|
|
75
|
+
updateBundle(params: UpdateBundleParams): Promise<UnsafeObject>;
|
|
87
76
|
/** Accepts and durably advances the catalog high-water for a scope. */
|
|
88
77
|
acceptReleaseCatalog(params: UnsafeObject): boolean;
|
|
89
78
|
/** Reads active/stable selection receipts and catalog high-water state. */
|
|
@@ -170,21 +159,20 @@ export interface Spec extends TurboModule {
|
|
|
170
159
|
*/
|
|
171
160
|
getCohort: () => string;
|
|
172
161
|
/**
|
|
173
|
-
* Gets the
|
|
162
|
+
* Gets the install id: a random id native creates once per app
|
|
163
|
+
* installation and keeps out of device backups.
|
|
174
164
|
*/
|
|
175
165
|
getInstallId: () => string;
|
|
176
166
|
/**
|
|
177
|
-
*
|
|
178
|
-
|
|
179
|
-
getUserId: () => string | null;
|
|
180
|
-
/**
|
|
181
|
-
* Gets the persisted nullable username associated with this installation.
|
|
167
|
+
* Reads a value from the SDK's persistent key-value store, which native
|
|
168
|
+
* keeps out of device backups. Returns null when the key has no value.
|
|
182
169
|
*/
|
|
183
|
-
|
|
170
|
+
getStorageItem: (key: string) => string | null;
|
|
184
171
|
/**
|
|
185
|
-
*
|
|
172
|
+
* Writes a value to the SDK's persistent key-value store; null removes the
|
|
173
|
+
* key.
|
|
186
174
|
*/
|
|
187
|
-
|
|
175
|
+
setStorageItem: (key: string, value: string | null) => void;
|
|
188
176
|
addListener(eventName: string): void;
|
|
189
177
|
removeListeners(count: number): void;
|
|
190
178
|
readonly getConstants: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAE9E,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { HotUpdaterDiffProgressDetails } from "./native";
|
|
2
2
|
export type HotUpdaterState = {
|
|
3
3
|
progress: number;
|
|
4
|
-
downloadedBytes: number | undefined;
|
|
5
|
-
totalBytes: number | undefined;
|
|
6
4
|
isUpdateDownloaded: boolean;
|
|
7
|
-
artifactType: "
|
|
5
|
+
artifactType: "diff" | null;
|
|
8
6
|
details: HotUpdaterDiffProgressDetails | null;
|
|
9
7
|
};
|
|
10
8
|
export declare const hotUpdaterStore: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/C,CAAC;AA+KF,eAAO,MAAM,eAAe;;yBApDE,OAAO,CAAC,eAAe,CAAC;0BAwCvB,MAAM,IAAI;CAYa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,eAAe,aAC1C,CAAC,QAAQ,EAAE,eAAe,KAAK,CAAC,MAQ3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBpE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,4BAA4B,CAS9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { UpdateError, UpdateErrorResource, UpdateErrorStage } from "./clientPlugin";
|
|
2
|
+
import { HotUpdaterError } from "./error";
|
|
3
|
+
/**
|
|
4
|
+
* A response the SDK cannot use: a malformed or stale catalog, an artifact
|
|
5
|
+
* in another protocol, or an invalid URL.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InvalidUpdateResponseError extends HotUpdaterError {
|
|
8
|
+
constructor(message: string, options?: {
|
|
9
|
+
cause?: unknown;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** A request the server answered with a status the SDK does not accept. */
|
|
13
|
+
export declare class UpdateHttpError extends HotUpdaterError {
|
|
14
|
+
readonly status: number;
|
|
15
|
+
constructor(status: number, statusText: string);
|
|
16
|
+
}
|
|
17
|
+
type Classification = Pick<UpdateError, "stage" | "reason" | "resource" | "httpStatus" | "originCode" | "transport">;
|
|
18
|
+
/**
|
|
19
|
+
* Where and why an update failed, or null when the error is not an update
|
|
20
|
+
* failure. Native rejections carry their own classification; an error the
|
|
21
|
+
* SDK's JavaScript raised happened in `stage`, fetching `resource` when one
|
|
22
|
+
* is given.
|
|
23
|
+
*/
|
|
24
|
+
export declare const classifyUpdateError: (error: unknown, stage: UpdateErrorStage, resource?: UpdateErrorResource) => Classification | null;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=updateError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateError.d.ts","sourceRoot":"","sources":["../../../src/updateError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIzD;CACF;AAED,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,eAAe;IAEhD,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAMnB;CACF;AAoCD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACX,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAC5E,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,OAAO,SACP,gBAAgB,aACZ,mBAAmB,KAC7B,cAAc,GAAG,IA+CnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,EAEV,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,wBAAgB,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAEvD;AAED,wBAAgB,IAAI,CAClB,OAAO,EAAE,mBAAmB,GAC3B,CAAC,CAAC,SAAS,MAAM,EAClB,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KACrC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAqJ1B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
|
+
import type { HotUpdaterClientPlugin } from "./clientPlugin";
|
|
2
3
|
import type { HotUpdaterError } from "./error";
|
|
3
4
|
import type { HotUpdaterHttpClient } from "./httpClient";
|
|
4
5
|
import type { NotifyAppReadyResult } from "./native";
|
|
@@ -14,19 +15,18 @@ export type UpdateStatus = "CHECK_FOR_UPDATE" | "UPDATING" | "UPDATE_PROCESS_COM
|
|
|
14
15
|
export type HotUpdaterFallbackComponentProps = {
|
|
15
16
|
status: Exclude<UpdateStatus, "UPDATE_PROCESS_COMPLETED">;
|
|
16
17
|
progress: number;
|
|
17
|
-
downloadedBytes: HotUpdaterState["downloadedBytes"];
|
|
18
|
-
totalBytes: HotUpdaterState["totalBytes"];
|
|
19
18
|
message: string | null;
|
|
20
19
|
artifactType: HotUpdaterState["artifactType"];
|
|
21
20
|
details: HotUpdaterState["details"];
|
|
22
21
|
};
|
|
23
22
|
interface CommonHotUpdaterOptions {
|
|
24
23
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* Client plugins, such as `insights()` from `@hot-updater/react-native`.
|
|
25
|
+
* Each plugin's `setup` runs
|
|
26
|
+
* once, and its hooks observe launches, update checks, downloads, and
|
|
27
|
+
* update failures. Plugin ids must be unique.
|
|
28
28
|
*/
|
|
29
|
-
|
|
29
|
+
plugins?: readonly HotUpdaterClientPlugin[];
|
|
30
30
|
/** Base URL of a server exposing the Hot Updater v1 client HTTP protocol. */
|
|
31
31
|
baseURL: HotUpdaterBaseURL;
|
|
32
32
|
requestHeaders?: Record<string, string>;
|
|
@@ -44,7 +44,6 @@ export type AutoUpdateOptions = CommonHotUpdaterOptions & {
|
|
|
44
44
|
export type HotUpdaterInitOptions = CommonHotUpdaterOptions;
|
|
45
45
|
export type HotUpdaterOptions = AutoUpdateOptions;
|
|
46
46
|
type InternalCommonOptions = {
|
|
47
|
-
insights?: boolean;
|
|
48
47
|
client: HotUpdaterHttpClient;
|
|
49
48
|
requestHeaders?: Record<string, string>;
|
|
50
49
|
requestTimeout?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.types.d.ts","sourceRoot":"","sources":["../../../src/wrap.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,UAAU,GACV,0BAA0B,CAAC;AAE/B,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"wrap.types.d.ts","sourceRoot":"","sources":["../../../src/wrap.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,UAAU,GACV,0BAA0B,CAAC;AAE/B,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;IAC9C,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC;AAEF,UAAU,uBAAuB;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC5C,6EAA6E;IAC7E,OAAO,EAAE,iBAAiB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG;IACxD,cAAc,EAAE,aAAa,GAAG,YAAY,CAAC;IAC7C,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAElD,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF,KAAK,yBAAyB,GAAG,qBAAqB,GAAG;IACvD,cAAc,EAAE,aAAa,GAAG,YAAY,CAAC;IAC7C,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG,yBAAyB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/react-native",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.40",
|
|
4
4
|
"description": "React Native OTA solution for self-hosted",
|
|
5
5
|
"source": "./src/index.ts",
|
|
6
6
|
"main": "./lib/commonjs/index.js",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"!ios/build",
|
|
32
32
|
"!ios/HotUpdater/Test",
|
|
33
33
|
"!ios/HotUpdater/Package.swift",
|
|
34
|
+
"!android/src/test",
|
|
34
35
|
"!android/build",
|
|
35
36
|
"!android/gradle",
|
|
36
37
|
"!android/gradlew",
|
|
@@ -39,7 +40,9 @@
|
|
|
39
40
|
"!**/__tests__",
|
|
40
41
|
"!**/__fixtures__",
|
|
41
42
|
"!**/__mocks__",
|
|
42
|
-
"!**/.*"
|
|
43
|
+
"!**/.*",
|
|
44
|
+
"!**/*.spec.*",
|
|
45
|
+
"!**/*.test-utils.*"
|
|
43
46
|
],
|
|
44
47
|
"keywords": [
|
|
45
48
|
"react-native",
|
|
@@ -120,8 +123,8 @@
|
|
|
120
123
|
},
|
|
121
124
|
"dependencies": {
|
|
122
125
|
"use-sync-external-store": "1.5.0",
|
|
123
|
-
"@hot-updater/
|
|
124
|
-
"@hot-updater/plugin-
|
|
126
|
+
"@hot-updater/protocol": "1.0.0-rc.40",
|
|
127
|
+
"@hot-updater/plugin-insights": "1.0.0-rc.40"
|
|
125
128
|
},
|
|
126
129
|
"scripts": {
|
|
127
130
|
"build": "node ./scripts/sync-sdk-version.mjs run -- bob build",
|
package/src/appReady.ts
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { AppReadyResult } from "./clientPlugin";
|
|
2
|
+
import type { HotUpdaterError } from "./error";
|
|
3
|
+
import {
|
|
4
|
+
getActiveUpdateState,
|
|
5
|
+
getBundleId,
|
|
6
|
+
getChannel,
|
|
7
|
+
type LaunchTransition,
|
|
8
|
+
type NotifyAppReadyResult,
|
|
9
|
+
readNotifyAppReady,
|
|
10
|
+
} from "./native";
|
|
11
|
+
import {
|
|
12
|
+
buildPluginEvent,
|
|
13
|
+
dispatchPluginHook,
|
|
14
|
+
emitPluginHook,
|
|
15
|
+
} from "./pluginHost";
|
|
16
|
+
|
|
17
|
+
export type NotifyAppReadyOptions = {
|
|
18
|
+
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
19
|
+
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type RequestAnimationFrame = (callback: (timestamp: number) => void) => number;
|
|
23
|
+
|
|
24
|
+
let didEmitAppReady = false;
|
|
25
|
+
/** Settles once this runtime's launch was read, whether it was reported or failed. */
|
|
26
|
+
let appReadyRead: Promise<unknown> | null = null;
|
|
27
|
+
|
|
28
|
+
const waitForNextFrame = () =>
|
|
29
|
+
new Promise<void>((resolve) => {
|
|
30
|
+
const requestAnimationFrame = (
|
|
31
|
+
globalThis as typeof globalThis & {
|
|
32
|
+
requestAnimationFrame?: RequestAnimationFrame;
|
|
33
|
+
}
|
|
34
|
+
)?.requestAnimationFrame;
|
|
35
|
+
|
|
36
|
+
if (requestAnimationFrame) {
|
|
37
|
+
requestAnimationFrame(() => resolve());
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void Promise.resolve().then(resolve);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The Release the running bundle was selected as: the active or stable
|
|
46
|
+
* selection that names it on the current channel.
|
|
47
|
+
*/
|
|
48
|
+
export const getRunningReleaseId = (
|
|
49
|
+
bundleId: string,
|
|
50
|
+
channel: string,
|
|
51
|
+
): string | null => {
|
|
52
|
+
const state = getActiveUpdateState();
|
|
53
|
+
return (
|
|
54
|
+
[state.activeSelection, state.stableSelection].find(
|
|
55
|
+
(selection) =>
|
|
56
|
+
selection?.bundleId === bundleId && selection.channel === channel,
|
|
57
|
+
)?.releaseId ?? null
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const toAppReadyResult = (
|
|
62
|
+
result: NotifyAppReadyResult,
|
|
63
|
+
transition: LaunchTransition | null,
|
|
64
|
+
): AppReadyResult | null => {
|
|
65
|
+
const channel = getChannel();
|
|
66
|
+
if (result.status === "UNCHANGED") {
|
|
67
|
+
const bundleId = getBundleId();
|
|
68
|
+
return {
|
|
69
|
+
status: "UNCHANGED",
|
|
70
|
+
channel,
|
|
71
|
+
bundleId,
|
|
72
|
+
releaseId: getRunningReleaseId(bundleId, channel),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Native persists the transition with every applied or recovered launch;
|
|
76
|
+
// a report without it cannot say what moved.
|
|
77
|
+
if (transition === null) return null;
|
|
78
|
+
return {
|
|
79
|
+
status: transition.type,
|
|
80
|
+
channel,
|
|
81
|
+
fromBundleId: transition.fromBundleId,
|
|
82
|
+
fromReleaseId: transition.fromReleaseId,
|
|
83
|
+
toBundleId: transition.toBundleId,
|
|
84
|
+
toReleaseId: transition.toReleaseId,
|
|
85
|
+
updateStrategy: transition.updateStrategy,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const notifyAppReady = async (
|
|
90
|
+
options: NotifyAppReadyOptions,
|
|
91
|
+
): Promise<NotifyAppReadyResult | undefined> => {
|
|
92
|
+
try {
|
|
93
|
+
let nativeReadResult: ReturnType<typeof readNotifyAppReady>;
|
|
94
|
+
do {
|
|
95
|
+
await waitForNextFrame();
|
|
96
|
+
nativeReadResult = readNotifyAppReady();
|
|
97
|
+
} while (nativeReadResult.pending);
|
|
98
|
+
|
|
99
|
+
const { result, transition } = nativeReadResult;
|
|
100
|
+
if (!didEmitAppReady) {
|
|
101
|
+
didEmitAppReady = true;
|
|
102
|
+
emitPluginHook("onAppReady", () => toAppReadyResult(result, transition));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
options.onNotifyAppReady?.(result);
|
|
106
|
+
return result;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
const normalizedError =
|
|
109
|
+
error instanceof Error ? error : new Error(String(error));
|
|
110
|
+
options.onError?.(error);
|
|
111
|
+
console.warn("[HotUpdater] Failed to notify app ready:", normalizedError);
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/** Reads this runtime's launch once native finalizes it and reports it to plugins. */
|
|
117
|
+
export const handleNotifyAppReady = (
|
|
118
|
+
options: NotifyAppReadyOptions,
|
|
119
|
+
): Promise<NotifyAppReadyResult | undefined> => {
|
|
120
|
+
const readiness = notifyAppReady(options);
|
|
121
|
+
appReadyRead ??= readiness;
|
|
122
|
+
return readiness;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Calls a plugin hook after this runtime's `onAppReady`, so plugins see the
|
|
127
|
+
* launch before anything that followed it. The event is built now, from the
|
|
128
|
+
* state it describes, and only when a plugin listens.
|
|
129
|
+
*/
|
|
130
|
+
export const emitAfterAppReady: typeof emitPluginHook = (
|
|
131
|
+
name,
|
|
132
|
+
createPayload,
|
|
133
|
+
) => {
|
|
134
|
+
const payload = buildPluginEvent(name, createPayload);
|
|
135
|
+
if (payload === null) return;
|
|
136
|
+
if (appReadyRead === null) {
|
|
137
|
+
dispatchPluginHook(name, payload);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
void appReadyRead.then(() => dispatchPluginHook(name, payload));
|
|
141
|
+
};
|