@hot-updater/react-native 0.36.7 → 1.0.0-rc.1
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/src/main/java/com/hotupdater/BundleFileStorageService.kt +357 -6
- package/android/src/main/java/com/hotupdater/BundleMetadata.kt +268 -34
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +75 -9
- package/android/src/main/java/com/hotupdater/NativeConfigUtils.kt +2 -16
- package/android/src/main/java/com/hotupdater/ReleaseCatalogCacheService.kt +166 -0
- package/android/src/main/java/com/hotupdater/SignatureVerifier.kt +1 -2
- package/android/src/newarch/HotUpdater.kt +1 -1
- package/android/src/newarch/HotUpdaterModule.kt +116 -0
- package/android/src/oldarch/HotUpdater.kt +1 -1
- package/android/src/oldarch/HotUpdaterModule.kt +128 -0
- package/android/src/oldarch/HotUpdaterSpec.kt +38 -0
- package/android/src/test/java/com/hotupdater/BundleFileStorageServiceTest.kt +280 -2
- package/android/src/test/java/com/hotupdater/HotUpdaterImplTest.kt +57 -2
- package/android/src/test/java/com/hotupdater/ReleaseCatalogCacheServiceTest.kt +118 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +491 -30
- package/ios/HotUpdater/Internal/BundleMetadata.swift +229 -6
- package/ios/HotUpdater/Internal/HotUpdater.mm +122 -0
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +176 -7
- package/ios/HotUpdater/Internal/ReleaseCatalogCacheService.swift +213 -0
- package/lib/commonjs/catalogCacheNative.js +44 -0
- package/lib/commonjs/catalogCacheNative.js.map +1 -0
- package/lib/commonjs/catalogCacheNative.spec.js +31 -0
- package/lib/commonjs/catalogCacheNative.spec.js.map +1 -0
- package/lib/commonjs/checkForUpdate.js +231 -60
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js +604 -0
- package/lib/commonjs/checkForUpdate.releaseCatalog.spec.js.map +1 -0
- package/lib/commonjs/error.js +8 -1
- package/lib/commonjs/error.js.map +1 -1
- package/lib/commonjs/{fetchUpdateInfo.js → fetchJSON.js} +11 -14
- package/lib/commonjs/fetchJSON.js.map +1 -0
- package/lib/commonjs/httpClient.js +153 -0
- package/lib/commonjs/httpClient.js.map +1 -0
- package/lib/commonjs/httpClient.spec.js +102 -0
- package/lib/commonjs/httpClient.spec.js.map +1 -0
- package/lib/commonjs/index.js +47 -70
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.spec.js +115 -159
- package/lib/commonjs/index.spec.js.map +1 -1
- package/lib/commonjs/iosInterop.spec.js +18 -0
- package/lib/commonjs/iosInterop.spec.js.map +1 -0
- package/lib/commonjs/native.js +222 -53
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.spec.js +226 -12
- package/lib/commonjs/native.spec.js.map +1 -1
- package/lib/commonjs/notifyAppReadyAnalytics.boundary.spec.js +218 -0
- package/lib/commonjs/notifyAppReadyAnalytics.boundary.spec.js.map +1 -0
- package/lib/commonjs/notifyAppReadyAnalytics.js +133 -0
- package/lib/commonjs/notifyAppReadyAnalytics.js.map +1 -0
- package/lib/commonjs/notifyAppReadyAnalytics.spec.js +246 -0
- package/lib/commonjs/notifyAppReadyAnalytics.spec.js.map +1 -0
- package/lib/commonjs/notifyAppReadyAnalytics.test-utils.js +24 -0
- package/lib/commonjs/notifyAppReadyAnalytics.test-utils.js.map +1 -0
- package/lib/commonjs/notifyAppReadyAnalytics.transport.spec.js +117 -0
- package/lib/commonjs/notifyAppReadyAnalytics.transport.spec.js.map +1 -0
- package/lib/commonjs/releaseCatalogCache.js +179 -0
- package/lib/commonjs/releaseCatalogCache.js.map +1 -0
- package/lib/commonjs/releaseCatalogCache.spec.js +195 -0
- package/lib/commonjs/releaseCatalogCache.spec.js.map +1 -0
- package/lib/commonjs/releaseCatalogCacheNativeContract.spec.js +64 -0
- package/lib/commonjs/releaseCatalogCacheNativeContract.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/types.js +0 -12
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/wrap.js +7 -82
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/commonjs/wrap.spec.js +203 -56
- package/lib/commonjs/wrap.spec.js.map +1 -1
- package/lib/commonjs/wrap.types.js +6 -0
- package/lib/commonjs/wrap.types.js.map +1 -0
- package/lib/module/catalogCacheNative.js +36 -0
- package/lib/module/catalogCacheNative.js.map +1 -0
- package/lib/module/catalogCacheNative.spec.js +31 -0
- package/lib/module/catalogCacheNative.spec.js.map +1 -0
- package/lib/module/checkForUpdate.js +233 -62
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/checkForUpdate.releaseCatalog.spec.js +603 -0
- package/lib/module/checkForUpdate.releaseCatalog.spec.js.map +1 -0
- package/lib/module/error.js +6 -0
- package/lib/module/error.js.map +1 -1
- package/lib/module/{fetchUpdateInfo.js → fetchJSON.js} +9 -12
- package/lib/module/fetchJSON.js.map +1 -0
- package/lib/module/httpClient.js +148 -0
- package/lib/module/httpClient.js.map +1 -0
- package/lib/module/httpClient.spec.js +102 -0
- package/lib/module/httpClient.spec.js.map +1 -0
- package/lib/module/index.js +48 -65
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.spec.js +115 -159
- package/lib/module/index.spec.js.map +1 -1
- package/lib/module/iosInterop.spec.js +18 -0
- package/lib/module/iosInterop.spec.js.map +1 -0
- package/lib/module/native.js +206 -49
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.spec.js +226 -12
- package/lib/module/native.spec.js.map +1 -1
- package/lib/module/notifyAppReadyAnalytics.boundary.spec.js +217 -0
- package/lib/module/notifyAppReadyAnalytics.boundary.spec.js.map +1 -0
- package/lib/module/notifyAppReadyAnalytics.js +128 -0
- package/lib/module/notifyAppReadyAnalytics.js.map +1 -0
- package/lib/module/notifyAppReadyAnalytics.spec.js +245 -0
- package/lib/module/notifyAppReadyAnalytics.spec.js.map +1 -0
- package/lib/module/notifyAppReadyAnalytics.test-utils.js +18 -0
- package/lib/module/notifyAppReadyAnalytics.test-utils.js.map +1 -0
- package/lib/module/notifyAppReadyAnalytics.transport.spec.js +116 -0
- package/lib/module/notifyAppReadyAnalytics.transport.spec.js.map +1 -0
- package/lib/module/releaseCatalogCache.js +171 -0
- package/lib/module/releaseCatalogCache.js.map +1 -0
- package/lib/module/releaseCatalogCache.spec.js +195 -0
- package/lib/module/releaseCatalogCache.spec.js.map +1 -0
- package/lib/module/releaseCatalogCacheNativeContract.spec.js +64 -0
- package/lib/module/releaseCatalogCacheNativeContract.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/types.js +0 -12
- package/lib/module/types.js.map +1 -1
- package/lib/module/wrap.js +6 -81
- package/lib/module/wrap.js.map +1 -1
- package/lib/module/wrap.spec.js +203 -56
- package/lib/module/wrap.spec.js.map +1 -1
- package/lib/module/wrap.types.js +4 -0
- package/lib/module/wrap.types.js.map +1 -0
- package/lib/typescript/commonjs/catalogCacheNative.d.ts +4 -0
- package/lib/typescript/commonjs/catalogCacheNative.d.ts.map +1 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts +14 -4
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/error.d.ts +3 -0
- package/lib/typescript/commonjs/error.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchJSON.d.ts +6 -0
- package/lib/typescript/commonjs/fetchJSON.d.ts.map +1 -0
- package/lib/typescript/commonjs/httpClient.d.ts +56 -0
- package/lib/typescript/commonjs/httpClient.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +31 -40
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +84 -17
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.d.ts +13 -0
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.d.ts.map +1 -0
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.test-utils.d.ts +8 -0
- package/lib/typescript/commonjs/notifyAppReadyAnalytics.test-utils.d.ts.map +1 -0
- package/lib/typescript/commonjs/releaseCatalogCache.d.ts +25 -0
- package/lib/typescript/commonjs/releaseCatalogCache.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 +40 -5
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +0 -118
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.d.ts +2 -191
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.types.d.ts +65 -0
- package/lib/typescript/commonjs/wrap.types.d.ts.map +1 -0
- package/lib/typescript/module/catalogCacheNative.d.ts +4 -0
- package/lib/typescript/module/catalogCacheNative.d.ts.map +1 -0
- package/lib/typescript/module/checkForUpdate.d.ts +14 -4
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/error.d.ts +3 -0
- package/lib/typescript/module/error.d.ts.map +1 -1
- package/lib/typescript/module/fetchJSON.d.ts +6 -0
- package/lib/typescript/module/fetchJSON.d.ts.map +1 -0
- package/lib/typescript/module/httpClient.d.ts +56 -0
- package/lib/typescript/module/httpClient.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +31 -40
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +84 -17
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/notifyAppReadyAnalytics.d.ts +13 -0
- package/lib/typescript/module/notifyAppReadyAnalytics.d.ts.map +1 -0
- package/lib/typescript/module/notifyAppReadyAnalytics.test-utils.d.ts +8 -0
- package/lib/typescript/module/notifyAppReadyAnalytics.test-utils.d.ts.map +1 -0
- package/lib/typescript/module/releaseCatalogCache.d.ts +25 -0
- package/lib/typescript/module/releaseCatalogCache.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 +40 -5
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +0 -118
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/wrap.d.ts +2 -191
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/lib/typescript/module/wrap.types.d.ts +65 -0
- package/lib/typescript/module/wrap.types.d.ts.map +1 -0
- package/package.json +6 -24
- package/src/catalogCacheNative.spec.ts +63 -0
- package/src/catalogCacheNative.ts +74 -0
- package/src/checkForUpdate.releaseCatalog.spec.ts +596 -0
- package/src/checkForUpdate.ts +367 -96
- package/src/error.ts +7 -0
- package/src/{fetchUpdateInfo.ts → fetchJSON.ts} +8 -15
- package/src/httpClient.spec.ts +132 -0
- package/src/httpClient.ts +261 -0
- package/src/index.spec.ts +108 -201
- package/src/index.ts +68 -91
- package/src/iosInterop.spec.ts +30 -0
- package/src/native.spec.ts +226 -10
- package/src/native.ts +385 -81
- package/src/notifyAppReadyAnalytics.boundary.spec.ts +234 -0
- package/src/notifyAppReadyAnalytics.spec.ts +243 -0
- package/src/notifyAppReadyAnalytics.test-utils.ts +31 -0
- package/src/notifyAppReadyAnalytics.transport.spec.ts +130 -0
- package/src/notifyAppReadyAnalytics.ts +194 -0
- package/src/releaseCatalogCache.spec.ts +282 -0
- package/src/releaseCatalogCache.ts +341 -0
- package/src/releaseCatalogCacheNativeContract.spec.ts +80 -0
- package/src/sdkVersion.ts +1 -1
- package/src/specs/NativeHotUpdater.ts +51 -5
- package/src/types.ts +0 -140
- package/src/wrap.spec.ts +251 -56
- package/src/wrap.tsx +23 -318
- package/src/wrap.types.ts +78 -0
- package/android/src/main/java/com/hotupdater/StringResourceUtils.kt +0 -45
- package/app.plugin.js +0 -1
- package/ios/HotUpdater/Internal/HotUpdaterCrashHandler.h +0 -7
- package/ios/HotUpdater/Internal/HotUpdaterCrashHandler.mm +0 -4
- package/lib/commonjs/DefaultResolver.js +0 -50
- package/lib/commonjs/DefaultResolver.js.map +0 -1
- package/lib/commonjs/DefaultResolver.spec.js +0 -144
- package/lib/commonjs/DefaultResolver.spec.js.map +0 -1
- package/lib/commonjs/fetchUpdateInfo.js.map +0 -1
- package/lib/module/DefaultResolver.js +0 -46
- package/lib/module/DefaultResolver.js.map +0 -1
- package/lib/module/DefaultResolver.spec.js +0 -144
- package/lib/module/DefaultResolver.spec.js.map +0 -1
- package/lib/module/fetchUpdateInfo.js.map +0 -1
- package/lib/typescript/commonjs/DefaultResolver.d.ts +0 -11
- package/lib/typescript/commonjs/DefaultResolver.d.ts.map +0 -1
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts +0 -7
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts.map +0 -1
- package/lib/typescript/module/DefaultResolver.d.ts +0 -11
- package/lib/typescript/module/DefaultResolver.d.ts.map +0 -1
- package/lib/typescript/module/fetchUpdateInfo.d.ts +0 -7
- package/lib/typescript/module/fetchUpdateInfo.d.ts.map +0 -1
- package/plugin/build/transformers.js +0 -314
- package/plugin/build/withHotUpdater.js +0 -228
- package/src/DefaultResolver.spec.ts +0 -193
- package/src/DefaultResolver.ts +0 -63
|
@@ -1,195 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
import { type HotUpdaterState } from "./store";
|
|
5
|
-
import type { HotUpdaterBaseURL, HotUpdaterResolver } from "./types";
|
|
6
|
-
export interface RunUpdateProcessResponse {
|
|
7
|
-
status: "ROLLBACK" | "UPDATE" | "UP_TO_DATE";
|
|
8
|
-
shouldForceUpdate: boolean;
|
|
9
|
-
message: string | null;
|
|
10
|
-
id: string;
|
|
11
|
-
}
|
|
12
|
-
type UpdateStatus = "CHECK_FOR_UPDATE" | "UPDATING" | "UPDATE_PROCESS_COMPLETED";
|
|
13
|
-
export type HotUpdaterFallbackComponentProps = {
|
|
14
|
-
status: Exclude<UpdateStatus, "UPDATE_PROCESS_COMPLETED">;
|
|
15
|
-
progress: number;
|
|
16
|
-
downloadedBytes: HotUpdaterState["downloadedBytes"];
|
|
17
|
-
totalBytes: HotUpdaterState["totalBytes"];
|
|
18
|
-
message: string | null;
|
|
19
|
-
artifactType: HotUpdaterState["artifactType"];
|
|
20
|
-
details: HotUpdaterState["details"];
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Common options shared by HotUpdater initialization APIs.
|
|
24
|
-
*/
|
|
25
|
-
interface CommonHotUpdaterOptions {
|
|
26
|
-
/**
|
|
27
|
-
* Custom request headers for update checks
|
|
28
|
-
*/
|
|
29
|
-
requestHeaders?: Record<string, string>;
|
|
30
|
-
/**
|
|
31
|
-
* Request timeout in milliseconds
|
|
32
|
-
* @default 5000
|
|
33
|
-
*/
|
|
34
|
-
requestTimeout?: number;
|
|
35
|
-
/**
|
|
36
|
-
* Callback invoked when the app is ready and the native launch report is available.
|
|
37
|
-
* Provides information about rollback recovery or stable state.
|
|
38
|
-
*
|
|
39
|
-
* @param result - Bundle state information
|
|
40
|
-
* @param result.status - Current bundle state:
|
|
41
|
-
* - "RECOVERED": App recovered from a crash, rollback occurred
|
|
42
|
-
* - "STABLE": No changes, bundle is stable
|
|
43
|
-
* @param result.crashedBundleId - Present only when status is "RECOVERED"
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* ```tsx
|
|
47
|
-
* HotUpdater.init({
|
|
48
|
-
* baseURL: "https://api.example.com",
|
|
49
|
-
* onNotifyAppReady: ({ status, crashedBundleId }) => {
|
|
50
|
-
* if (status === "RECOVERED") {
|
|
51
|
-
* analytics.track("bundle_rollback", { crashedBundleId });
|
|
52
|
-
* }
|
|
53
|
-
* },
|
|
54
|
-
* });
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
58
|
-
/**
|
|
59
|
-
* Default callback invoked when Hot Updater initialization or update checks
|
|
60
|
-
* fail. Per-call `HotUpdater.checkForUpdate({ onError })` handlers override
|
|
61
|
-
* this callback for that check.
|
|
62
|
-
*/
|
|
63
|
-
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Configuration with baseURL for standard server-based updates
|
|
67
|
-
*/
|
|
68
|
-
interface BaseURLConfig {
|
|
69
|
-
/**
|
|
70
|
-
* Base URL for update server. Use a function to resolve it dynamically
|
|
71
|
-
* before each update check.
|
|
72
|
-
* @example "https://update.example.com"
|
|
73
|
-
* @example () => getUpdateServerURL()
|
|
74
|
-
*/
|
|
75
|
-
baseURL: HotUpdaterBaseURL;
|
|
76
|
-
/**
|
|
77
|
-
* Resolver is not allowed when using baseURL
|
|
78
|
-
*/
|
|
79
|
-
resolver?: never;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Configuration with resolver for custom network operations
|
|
83
|
-
*/
|
|
84
|
-
interface ResolverConfig {
|
|
85
|
-
/**
|
|
86
|
-
* Custom resolver for network operations
|
|
87
|
-
*/
|
|
88
|
-
resolver: HotUpdaterResolver;
|
|
89
|
-
/**
|
|
90
|
-
* baseURL is not allowed when using resolver
|
|
91
|
-
*/
|
|
92
|
-
baseURL?: never;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Union type ensuring baseURL and resolver are mutually exclusive
|
|
96
|
-
*/
|
|
97
|
-
type NetworkConfig = BaseURLConfig | ResolverConfig;
|
|
98
|
-
export type AutoUpdateOptions = CommonHotUpdaterOptions & NetworkConfig & {
|
|
99
|
-
/**
|
|
100
|
-
* Automatic update mode. This is the default and can be omitted.
|
|
101
|
-
*/
|
|
102
|
-
updateMode?: "auto";
|
|
103
|
-
/**
|
|
104
|
-
* Update strategy
|
|
105
|
-
* - "fingerprint": Use fingerprint hash to check for updates
|
|
106
|
-
* - "appVersion": Use app version to check for updates
|
|
107
|
-
*/
|
|
108
|
-
updateStrategy: "fingerprint" | "appVersion";
|
|
109
|
-
/**
|
|
110
|
-
* Component to show while downloading a new bundle update.
|
|
111
|
-
*
|
|
112
|
-
* When an update exists and the bundle is being downloaded, this component will block access
|
|
113
|
-
* to the entry point and show download progress.
|
|
114
|
-
*
|
|
115
|
-
* @see {@link https://hot-updater.dev/docs/react-native-api/wrap#fallback-component}
|
|
116
|
-
*
|
|
117
|
-
* ```tsx
|
|
118
|
-
* HotUpdater.wrap({
|
|
119
|
-
* baseURL: "<update-server-url>",
|
|
120
|
-
* updateStrategy: "appVersion",
|
|
121
|
-
* fallbackComponent: ({ progress = 0 }) => (
|
|
122
|
-
* <View style={styles.container}>
|
|
123
|
-
* <Text style={styles.text}>Updating... {progress}%</Text>
|
|
124
|
-
* </View>
|
|
125
|
-
* )
|
|
126
|
-
* })(App)
|
|
127
|
-
* ```
|
|
128
|
-
*
|
|
129
|
-
* If not defined, the bundle will download in the background without blocking the screen.
|
|
130
|
-
*/
|
|
131
|
-
fallbackComponent?: React.FC<HotUpdaterFallbackComponentProps>;
|
|
132
|
-
onProgress?: (progress: number) => void;
|
|
133
|
-
/**
|
|
134
|
-
* When a force update exists, the app will automatically reload.
|
|
135
|
-
* If `false`, When a force update exists, the app will not reload. `shouldForceUpdate` will be returned as `true` in `onUpdateProcessCompleted`.
|
|
136
|
-
* If `true`, When a force update exists, the app will automatically reload.
|
|
137
|
-
* @default true
|
|
138
|
-
*/
|
|
139
|
-
reloadOnForceUpdate?: boolean;
|
|
140
|
-
/**
|
|
141
|
-
* Callback function that is called when the update process is completed.
|
|
142
|
-
*
|
|
143
|
-
* @see {@link https://hot-updater.dev/docs/react-native-api/wrap#onupdateprocesscompleted}
|
|
144
|
-
*/
|
|
145
|
-
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
146
|
-
};
|
|
147
|
-
export type ManualUpdateOptions = CommonHotUpdaterOptions & NetworkConfig & {
|
|
148
|
-
/**
|
|
149
|
-
* @deprecated Replace manual `HotUpdater.wrap` with `HotUpdater.init`.
|
|
150
|
-
*
|
|
151
|
-
* ```tsx
|
|
152
|
-
* import { HotUpdater } from "@hot-updater/react-native";
|
|
153
|
-
*
|
|
154
|
-
* HotUpdater.init({
|
|
155
|
-
* baseURL: "<your-update-server-url>",
|
|
156
|
-
* });
|
|
157
|
-
*
|
|
158
|
-
* export default App;
|
|
159
|
-
* ```
|
|
160
|
-
*
|
|
161
|
-
* Then call `HotUpdater.checkForUpdate(...)` from your manual update flow.
|
|
162
|
-
* See https://hot-updater.dev/docs/guides/custom-update
|
|
163
|
-
*/
|
|
164
|
-
updateMode: "manual";
|
|
165
|
-
};
|
|
166
|
-
export type HotUpdaterInitOptions = CommonHotUpdaterOptions & NetworkConfig;
|
|
167
|
-
export type HotUpdaterOptions = AutoUpdateOptions | ManualUpdateOptions;
|
|
168
|
-
/**
|
|
169
|
-
* Internal options after normalization in index.ts
|
|
170
|
-
* Always has resolver (never baseURL)
|
|
171
|
-
*/
|
|
172
|
-
type InternalCommonOptions = {
|
|
173
|
-
resolver: HotUpdaterResolver;
|
|
174
|
-
requestHeaders?: Record<string, string>;
|
|
175
|
-
requestTimeout?: number;
|
|
176
|
-
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
177
|
-
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
178
|
-
};
|
|
179
|
-
type InternalAutoUpdateOptions = InternalCommonOptions & {
|
|
180
|
-
updateStrategy: "fingerprint" | "appVersion";
|
|
181
|
-
updateMode: "auto";
|
|
182
|
-
fallbackComponent?: React.FC<HotUpdaterFallbackComponentProps>;
|
|
183
|
-
onProgress?: (progress: number) => void;
|
|
184
|
-
reloadOnForceUpdate?: boolean;
|
|
185
|
-
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
186
|
-
};
|
|
187
|
-
type InternalManualUpdateOptions = InternalCommonOptions & {
|
|
188
|
-
updateMode: "manual";
|
|
189
|
-
};
|
|
190
|
-
export type InternalInitOptions = InternalCommonOptions;
|
|
191
|
-
export type InternalWrapOptions = InternalAutoUpdateOptions | InternalManualUpdateOptions;
|
|
2
|
+
import type { InternalInitOptions, InternalWrapOptions } from "./wrap.types";
|
|
3
|
+
export type { AutoUpdateOptions, HotUpdaterFallbackComponentProps, HotUpdaterInitOptions, HotUpdaterOptions, InternalInitOptions, InternalWrapOptions, RunUpdateProcessResponse, } from "./wrap.types";
|
|
192
4
|
export declare function init(options: InternalInitOptions): void;
|
|
193
5
|
export declare function wrap(options: InternalWrapOptions): <P extends object>(WrappedComponent: React.ComponentType<P>) => React.ComponentType<P>;
|
|
194
|
-
export {};
|
|
195
6
|
//# sourceMappingURL=wrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,EACV,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,CAuH1B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { HotUpdaterError } from "./error";
|
|
3
|
+
import type { HotUpdaterHttpClient } from "./httpClient";
|
|
4
|
+
import type { NotifyAppReadyResult } from "./native";
|
|
5
|
+
import type { HotUpdaterState } from "./store";
|
|
6
|
+
import type { HotUpdaterBaseURL } from "./types";
|
|
7
|
+
export interface RunUpdateProcessResponse {
|
|
8
|
+
status: "ROLLBACK" | "UPDATE" | "UP_TO_DATE";
|
|
9
|
+
shouldForceUpdate: boolean;
|
|
10
|
+
message: string | null;
|
|
11
|
+
id: string;
|
|
12
|
+
}
|
|
13
|
+
export type UpdateStatus = "CHECK_FOR_UPDATE" | "UPDATING" | "UPDATE_PROCESS_COMPLETED";
|
|
14
|
+
export type HotUpdaterFallbackComponentProps = {
|
|
15
|
+
status: Exclude<UpdateStatus, "UPDATE_PROCESS_COMPLETED">;
|
|
16
|
+
progress: number;
|
|
17
|
+
downloadedBytes: HotUpdaterState["downloadedBytes"];
|
|
18
|
+
totalBytes: HotUpdaterState["totalBytes"];
|
|
19
|
+
message: string | null;
|
|
20
|
+
artifactType: HotUpdaterState["artifactType"];
|
|
21
|
+
details: HotUpdaterState["details"];
|
|
22
|
+
};
|
|
23
|
+
interface CommonHotUpdaterOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Sends app-ready transitions and same-Bundle Release adoptions to the
|
|
26
|
+
* configured server. Omit or set to `false` to disable client reporting.
|
|
27
|
+
*/
|
|
28
|
+
analytics?: boolean;
|
|
29
|
+
/** Base URL of a server exposing the Hot Updater v1 client HTTP protocol. */
|
|
30
|
+
baseURL: HotUpdaterBaseURL;
|
|
31
|
+
requestHeaders?: Record<string, string>;
|
|
32
|
+
requestTimeout?: number;
|
|
33
|
+
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
34
|
+
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
35
|
+
}
|
|
36
|
+
export type AutoUpdateOptions = CommonHotUpdaterOptions & {
|
|
37
|
+
updateStrategy: "fingerprint" | "appVersion";
|
|
38
|
+
fallbackComponent?: React.FC<HotUpdaterFallbackComponentProps>;
|
|
39
|
+
onProgress?: (progress: number) => void;
|
|
40
|
+
reloadOnForceUpdate?: boolean;
|
|
41
|
+
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
42
|
+
};
|
|
43
|
+
export type HotUpdaterInitOptions = CommonHotUpdaterOptions;
|
|
44
|
+
export type HotUpdaterOptions = AutoUpdateOptions;
|
|
45
|
+
type InternalCommonOptions = {
|
|
46
|
+
analytics?: boolean;
|
|
47
|
+
client: HotUpdaterHttpClient;
|
|
48
|
+
requestHeaders?: Record<string, string>;
|
|
49
|
+
requestTimeout?: number;
|
|
50
|
+
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
51
|
+
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
52
|
+
};
|
|
53
|
+
type InternalAutoUpdateOptions = InternalCommonOptions & {
|
|
54
|
+
updateStrategy: "fingerprint" | "appVersion";
|
|
55
|
+
fallbackComponent?: React.FC<HotUpdaterFallbackComponentProps>;
|
|
56
|
+
onProgress?: (progress: number) => void;
|
|
57
|
+
reloadOnForceUpdate?: boolean;
|
|
58
|
+
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
59
|
+
};
|
|
60
|
+
export type InternalInitOptions = InternalCommonOptions & {
|
|
61
|
+
analytics?: boolean;
|
|
62
|
+
};
|
|
63
|
+
export type InternalWrapOptions = InternalAutoUpdateOptions;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=wrap.types.d.ts.map
|
|
@@ -0,0 +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,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACpD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C,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;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,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,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,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,GAAG;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const readNativeReleaseCatalogCache: (partition: string) => Promise<string | null>;
|
|
2
|
+
export declare const writeNativeReleaseCatalogCache: (partition: string, payload: string) => Promise<boolean>;
|
|
3
|
+
export declare const removeNativeReleaseCatalogCache: (partition: string) => Promise<void>;
|
|
4
|
+
//# sourceMappingURL=catalogCacheNative.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogCacheNative.d.ts","sourceRoot":"","sources":["../../../src/catalogCacheNative.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,6BAA6B,cAC7B,MAAM,KAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAYvB,CAAC;AAEF,eAAO,MAAM,8BAA8B,cAC9B,MAAM,WACR,MAAM,KACd,OAAO,CAAC,OAAO,CAWjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,cAC/B,MAAM,KAChB,OAAO,CAAC,IAAI,CAWd,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
1
|
+
import { type ArtifactInfo } from "@hot-updater/core";
|
|
2
|
+
import type { HotUpdaterHttpClient } from "./httpClient";
|
|
3
3
|
export interface CheckForUpdateOptions {
|
|
4
4
|
/**
|
|
5
5
|
* Update strategy
|
|
@@ -21,15 +21,25 @@ export interface CheckForUpdateOptions {
|
|
|
21
21
|
*/
|
|
22
22
|
requestTimeout?: number;
|
|
23
23
|
}
|
|
24
|
-
export type CheckForUpdateResult =
|
|
24
|
+
export type CheckForUpdateResult = ArtifactInfo & {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly message: string | null;
|
|
27
|
+
readonly rolloutCohortCount: number;
|
|
28
|
+
readonly shouldForceUpdate: boolean;
|
|
29
|
+
readonly status: "ROLLBACK" | "UPDATE";
|
|
30
|
+
readonly targetCohorts: string[];
|
|
31
|
+
readonly releaseId?: string | null;
|
|
32
|
+
readonly transitionKind?: ReleaseTransitionKind;
|
|
25
33
|
/**
|
|
26
34
|
* Updates the bundle.
|
|
27
35
|
* This method is equivalent to `HotUpdater.updateBundle()` but with all required arguments pre-filled.
|
|
28
36
|
*/
|
|
29
37
|
updateBundle: () => Promise<boolean>;
|
|
30
38
|
};
|
|
39
|
+
export type ReleaseTransitionKind = "INSTALL" | "ADOPT_RELEASE" | "USE_EMBEDDED" | "USE_BUILTIN";
|
|
31
40
|
export interface InternalCheckForUpdateOptions extends CheckForUpdateOptions {
|
|
32
|
-
|
|
41
|
+
analytics?: boolean;
|
|
42
|
+
client: HotUpdaterHttpClient;
|
|
33
43
|
}
|
|
34
44
|
export declare function checkForUpdate(options: InternalCheckForUpdateOptions): Promise<CheckForUpdateResult | null>;
|
|
35
45
|
//# sourceMappingURL=checkForUpdate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,oBAAoB,EAAyB,MAAM,cAAc,CAAC;AAyBhF,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,cAAc,EAAE,YAAY,GAAG,aAAa,CAAC;IAE7C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAChD;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,SAAS,GACT,eAAe,GACf,cAAc,GACd,aAAa,CAAC;AAElB,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AA+TD,wBAAsB,cAAc,CAClC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyDtC"}
|
|
@@ -121,4 +121,7 @@ export declare function isHotUpdaterError(error: unknown): error is {
|
|
|
121
121
|
export declare class HotUpdaterError extends Error {
|
|
122
122
|
constructor(message: string);
|
|
123
123
|
}
|
|
124
|
+
export declare class StaleReleaseCatalogError extends HotUpdaterError {
|
|
125
|
+
constructor();
|
|
126
|
+
}
|
|
124
127
|
//# sourceMappingURL=error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,oBAAY,mBAAmB;IAG7B;;;;OAIG;IACH,iBAAiB,sBAAsB;IAEvC;;;;OAIG;IACH,gBAAgB,qBAAqB;IAIrC;;;;OAIG;IACH,yBAAyB,8BAA8B;IAEvD;;;;;OAKG;IACH,eAAe,oBAAoB;IAEnC;;;;;OAKG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;OAKG;IACH,cAAc,mBAAmB;IAEjC;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;OAKG;IACH,6BAA6B,kCAAkC;IAE/D;;;;;;OAMG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;OAKG;IACH,yBAAyB,8BAA8B;IAOvD;;;;;;;OAOG;IACH,gBAAgB,qBAAqB;IAErC;;;;;OAKG;IACH,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUzD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,oBAAY,mBAAmB;IAG7B;;;;OAIG;IACH,iBAAiB,sBAAsB;IAEvC;;;;OAIG;IACH,gBAAgB,qBAAqB;IAIrC;;;;OAIG;IACH,yBAAyB,8BAA8B;IAEvD;;;;;OAKG;IACH,eAAe,oBAAoB;IAEnC;;;;;OAKG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;OAKG;IACH,cAAc,mBAAmB;IAEjC;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;OAKG;IACH,6BAA6B,kCAAkC;IAE/D;;;;;;OAMG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;OAKG;IACH,yBAAyB,8BAA8B;IAOvD;;;;;;;OAOG;IACH,gBAAgB,qBAAqB;IAErC;;;;;OAKG;IACH,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUzD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,cAGC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchJSON.d.ts","sourceRoot":"","sources":["../../../src/fetchJSON.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAU,CAAC,4CAI9B;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,OAAO,CAAC,CAAC,CAwBZ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type ArtifactInfo, type ReleaseCatalog } from "@hot-updater/core";
|
|
2
|
+
import type { HotUpdaterBaseURL } from "./types";
|
|
3
|
+
export interface ReleaseCatalogRequest {
|
|
4
|
+
readonly platform: "ios" | "android";
|
|
5
|
+
readonly channel: string;
|
|
6
|
+
readonly updateStrategy: "fingerprint" | "appVersion";
|
|
7
|
+
readonly appVersion: string;
|
|
8
|
+
readonly fingerprintHash: string | null;
|
|
9
|
+
readonly requestHeaders?: Record<string, string>;
|
|
10
|
+
readonly requestTimeout?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ArtifactRequest {
|
|
13
|
+
readonly targetBundleId: string;
|
|
14
|
+
readonly currentBundleId: string;
|
|
15
|
+
readonly requestHeaders?: Record<string, string>;
|
|
16
|
+
readonly requestTimeout?: number;
|
|
17
|
+
}
|
|
18
|
+
interface AnalyticsEventCommonParams {
|
|
19
|
+
readonly installId: string;
|
|
20
|
+
readonly userId?: string;
|
|
21
|
+
readonly username?: string;
|
|
22
|
+
readonly platform: "ios" | "android";
|
|
23
|
+
readonly appVersion: string;
|
|
24
|
+
readonly channel: string;
|
|
25
|
+
readonly cohort: string;
|
|
26
|
+
readonly fingerprintHash: string | null;
|
|
27
|
+
readonly fromReleaseId?: string | null;
|
|
28
|
+
readonly toReleaseId?: string | null;
|
|
29
|
+
readonly requestHeaders?: Record<string, string>;
|
|
30
|
+
readonly requestTimeout?: number;
|
|
31
|
+
}
|
|
32
|
+
type AnalyticsTransitionEventParams = AnalyticsEventCommonParams & {
|
|
33
|
+
readonly type: "UPDATE_APPLIED" | "RECOVERED" | "RELEASE_ADOPTED";
|
|
34
|
+
readonly fromBundleId: string;
|
|
35
|
+
readonly toBundleId: string;
|
|
36
|
+
readonly updateStrategy: "fingerprint" | "appVersion";
|
|
37
|
+
};
|
|
38
|
+
type AnalyticsUnchangedEventParams = AnalyticsEventCommonParams & {
|
|
39
|
+
readonly type: "UNCHANGED";
|
|
40
|
+
readonly fromBundleId: null;
|
|
41
|
+
readonly toBundleId: string;
|
|
42
|
+
readonly updateStrategy: null;
|
|
43
|
+
};
|
|
44
|
+
export type AnalyticsEventParams = AnalyticsTransitionEventParams | AnalyticsUnchangedEventParams;
|
|
45
|
+
export interface HotUpdaterHttpSession {
|
|
46
|
+
fetchReleaseCatalog: (params: ReleaseCatalogRequest) => Promise<ReleaseCatalog>;
|
|
47
|
+
resolveArtifact: (params: ArtifactRequest) => Promise<ArtifactInfo>;
|
|
48
|
+
sendAnalyticsEvent: (params: AnalyticsEventParams) => Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
export interface HotUpdaterHttpClient {
|
|
51
|
+
createSession: () => Promise<HotUpdaterHttpSession>;
|
|
52
|
+
}
|
|
53
|
+
/** Creates the private HTTP client used by HotUpdater.init and HotUpdater.wrap. */
|
|
54
|
+
export declare const createHttpClient: (baseURL: HotUpdaterBaseURL) => HotUpdaterHttpClient;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=httpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../../src/httpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,12 @@
|
|
|
1
1
|
import { type CheckForUpdateOptions } from "./checkForUpdate";
|
|
2
|
-
import { addListener, clearCrashHistory, getAppVersion, getBundleId, getChannel, getCohort, getCrashHistory, getDefaultChannel, getFingerprintHash, getManifest, getMinBundleId, isChannelSwitched, reload, setCohort, setReloadBehavior, type UpdateParams } from "./native";
|
|
3
|
-
import { type AutoUpdateOptions, type HotUpdaterInitOptions, type HotUpdaterOptions,
|
|
4
|
-
export type { CustomReloadHandler, HotUpdaterEvent, HotUpdaterProgressArtifactType, HotUpdaterProgressEvent, Manifest, ManifestAsset, NotifyAppReadyResult, ReloadBehavior, ReloadBehaviorSetting, } from "./native";
|
|
2
|
+
import { addListener, clearCrashHistory, getAppVersion, getBundleId, getChannel, getCohort, getCrashHistory, getDefaultChannel, getFingerprintHash, getInstallId, getManifest, getMinBundleId, getReleaseId, isChannelSwitched, notifyAppReady, reload, setCohort, setReloadBehavior, setUser, type UpdateParams } from "./native";
|
|
3
|
+
import { type AutoUpdateOptions, type HotUpdaterInitOptions, type HotUpdaterOptions, wrap } from "./wrap";
|
|
4
|
+
export type { CustomReloadHandler, HotUpdaterEvent, HotUpdaterProgressArtifactType, HotUpdaterProgressEvent, Manifest, ManifestAsset, NotifyAppReadyResult, ActiveUpdateState, ReloadBehavior, ReloadBehaviorSetting, SetUserParams, } from "./native";
|
|
5
5
|
export * from "./store";
|
|
6
|
-
export {
|
|
7
|
-
export
|
|
8
|
-
export type { HotUpdaterFallbackComponentProps, HotUpdaterInitOptions, HotUpdaterOptions, ManualUpdateOptions, RunUpdateProcessResponse, } from "./wrap";
|
|
6
|
+
export { extractSignatureFailure, type HotUpdaterBaseURL, isSignatureVerificationError, type SignatureVerificationFailure, } from "./types";
|
|
7
|
+
export type { HotUpdaterFallbackComponentProps, HotUpdaterInitOptions, HotUpdaterOptions, RunUpdateProcessResponse, } from "./wrap";
|
|
9
8
|
type HotUpdaterWrap = {
|
|
10
9
|
(options: AutoUpdateOptions): ReturnType<typeof wrap>;
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated Replace manual `HotUpdater.wrap` with `HotUpdater.init`.
|
|
13
|
-
*
|
|
14
|
-
* ```tsx
|
|
15
|
-
* import { HotUpdater } from "@hot-updater/react-native";
|
|
16
|
-
*
|
|
17
|
-
* HotUpdater.init({
|
|
18
|
-
* baseURL: "<your-update-server-url>",
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* export default App;
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* Then call `HotUpdater.checkForUpdate(...)` from your manual update flow.
|
|
25
|
-
* See https://hot-updater.dev/docs/guides/custom-update
|
|
26
|
-
*/
|
|
27
|
-
(options: ManualUpdateOptions): ReturnType<typeof wrap>;
|
|
28
10
|
(options: HotUpdaterOptions): ReturnType<typeof wrap>;
|
|
29
11
|
};
|
|
30
12
|
/**
|
|
@@ -50,7 +32,7 @@ declare function createHotUpdaterClient(): {
|
|
|
50
32
|
* baseURL: "<your-update-server-url>",
|
|
51
33
|
* updateStrategy: "appVersion",
|
|
52
34
|
* requestHeaders: {
|
|
53
|
-
* "
|
|
35
|
+
* "x-api-key": "<your-api-key>",
|
|
54
36
|
* },
|
|
55
37
|
* })(App);
|
|
56
38
|
* ```
|
|
@@ -60,8 +42,7 @@ declare function createHotUpdaterClient(): {
|
|
|
60
42
|
* Initializes HotUpdater without wrapping a React component.
|
|
61
43
|
*
|
|
62
44
|
* Use this for manual update flows in runtimes where a root component HOC
|
|
63
|
-
* is not convenient.
|
|
64
|
-
* `HotUpdater.wrap({ updateMode: "manual" })(App)` usage with this API.
|
|
45
|
+
* is not convenient. Use this instead of wrapping the root component.
|
|
65
46
|
*
|
|
66
47
|
* @example
|
|
67
48
|
* ```tsx
|
|
@@ -110,14 +91,16 @@ declare function createHotUpdaterClient(): {
|
|
|
110
91
|
* Fetches the current app version.
|
|
111
92
|
*/
|
|
112
93
|
getAppVersion: typeof getAppVersion;
|
|
94
|
+
/** Reads the active and stable Release/Bundle state. */
|
|
95
|
+
getActiveUpdateState: () => Promise<import("./native").ActiveUpdateState>;
|
|
113
96
|
/**
|
|
114
97
|
* Fetches the current bundle ID of the app.
|
|
115
98
|
*/
|
|
116
99
|
getBundleId: typeof getBundleId;
|
|
117
|
-
/**
|
|
118
|
-
* Retrieves the initial bundle ID based on the build time of the native app.
|
|
119
|
-
*/
|
|
100
|
+
/** Returns the minimum bundle ID based on the native app build time. */
|
|
120
101
|
getMinBundleId: typeof getMinBundleId;
|
|
102
|
+
/** Returns the active Release identity, or null for BUILTIN/legacy state. */
|
|
103
|
+
getReleaseId: typeof getReleaseId;
|
|
121
104
|
/**
|
|
122
105
|
* Fetches the current manifest for the active bundle.
|
|
123
106
|
*/
|
|
@@ -186,18 +169,17 @@ declare function createHotUpdaterClient(): {
|
|
|
186
169
|
* Manually checks for updates.
|
|
187
170
|
*
|
|
188
171
|
* @param {Object} config - Update check configuration
|
|
189
|
-
* @param {string} config.source - Update server URL
|
|
190
172
|
* @param {string} [config.channel] - Optional channel override for this update check
|
|
191
173
|
* @param {Record<string, string>} [config.requestHeaders] - Request headers
|
|
192
174
|
*
|
|
193
|
-
* @returns {Promise<
|
|
175
|
+
* @returns {Promise<CheckForUpdateResult | null>} Update information or null if up to date
|
|
194
176
|
*
|
|
195
177
|
* @example
|
|
196
178
|
* ```ts
|
|
197
179
|
* const updateInfo = await HotUpdater.checkForUpdate({
|
|
198
|
-
*
|
|
180
|
+
* updateStrategy: "appVersion",
|
|
199
181
|
* requestHeaders: {
|
|
200
|
-
*
|
|
182
|
+
* "x-api-key": "<your-api-key>",
|
|
201
183
|
* },
|
|
202
184
|
* });
|
|
203
185
|
*
|
|
@@ -206,7 +188,7 @@ declare function createHotUpdaterClient(): {
|
|
|
206
188
|
* return;
|
|
207
189
|
* }
|
|
208
190
|
*
|
|
209
|
-
* await
|
|
191
|
+
* await updateInfo.updateBundle();
|
|
210
192
|
* if (updateInfo.shouldForceUpdate) {
|
|
211
193
|
* await HotUpdater.reload();
|
|
212
194
|
* }
|
|
@@ -225,9 +207,9 @@ declare function createHotUpdaterClient(): {
|
|
|
225
207
|
* @example
|
|
226
208
|
* ```ts
|
|
227
209
|
* const updateInfo = await HotUpdater.checkForUpdate({
|
|
228
|
-
*
|
|
210
|
+
* updateStrategy: "appVersion",
|
|
229
211
|
* requestHeaders: {
|
|
230
|
-
*
|
|
212
|
+
* "x-api-key": "<your-api-key>",
|
|
231
213
|
* },
|
|
232
214
|
* });
|
|
233
215
|
*
|
|
@@ -237,10 +219,7 @@ declare function createHotUpdaterClient(): {
|
|
|
237
219
|
* };
|
|
238
220
|
* }
|
|
239
221
|
*
|
|
240
|
-
* await
|
|
241
|
-
* bundleId: updateInfo.id,
|
|
242
|
-
* fileUrl: updateInfo.fileUrl
|
|
243
|
-
* });
|
|
222
|
+
* await updateInfo.updateBundle();
|
|
244
223
|
* if (updateInfo.shouldForceUpdate) {
|
|
245
224
|
* await HotUpdater.reload();
|
|
246
225
|
* }
|
|
@@ -265,6 +244,18 @@ declare function createHotUpdaterClient(): {
|
|
|
265
244
|
* ```
|
|
266
245
|
*/
|
|
267
246
|
getFingerprintHash: typeof getFingerprintHash;
|
|
247
|
+
/**
|
|
248
|
+
* Fetches the persisted install id for this app installation.
|
|
249
|
+
*/
|
|
250
|
+
getInstallId: typeof getInstallId;
|
|
251
|
+
/**
|
|
252
|
+
* Persists nullable user identity fields associated with this installation.
|
|
253
|
+
*/
|
|
254
|
+
setUser: typeof setUser;
|
|
255
|
+
/**
|
|
256
|
+
* Reads the native launch report for the current process.
|
|
257
|
+
*/
|
|
258
|
+
notifyAppReady: typeof notifyAppReady;
|
|
268
259
|
/**
|
|
269
260
|
* Gets the list of bundle IDs that have been marked as crashed.
|
|
270
261
|
* These bundles will be rejected if attempted to install again.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EAEX,iBAAiB,EACjB,aAAa,EAEb,WAAW,EACX,UAAU,EACV,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,MAAM,EAEN,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAItB,IAAI,EACL,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,8BAA8B,EAC9B,uBAAuB,EACvB,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gCAAgC,EAChC,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAoBhB,KAAK,cAAc,GAAG;IACpB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;IACtD,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,iBAAS,sBAAsB;IA0I3B;;;;;;;;;;;;;;;;;;;;;;OAsBG;oBACa,iBAAiB;IAQjC;;;;;;;;;;;;;;OAcG;oBACa,qBAAqB,KAAG,IAAI;IAS5C;;OAEG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH,wDAAwD;;IAGxD;;OAEG;;IAGH,wEAAwE;;IAGxE,6EAA6E;;IAG7E;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;6BACsB,qBAAqB;IAkB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;2BACoB,YAAY;IAKnC;;;;OAIG;;IAgBH;;;;;;;;;;OAUG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;EAGN;AAED,KAAK,gBAAgB,GAAG,IAAI,CAC1B,UAAU,CAAC,OAAO,sBAAsB,CAAC,EACzC,MAAM,CACP,GAAG;IACF,IAAI,EAAE,cAAc,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,gBAA2C,CAAC"}
|