@hot-updater/react-native 0.24.0 → 0.24.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/lib/commonjs/DefaultResolver.js +38 -0
- package/lib/commonjs/DefaultResolver.js.map +1 -0
- package/lib/commonjs/checkForUpdate.js +35 -50
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/index.js +26 -14
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +12 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/wrap.js +44 -13
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/module/DefaultResolver.js +34 -0
- package/lib/module/DefaultResolver.js.map +1 -0
- package/lib/module/checkForUpdate.js +35 -50
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/index.js +26 -14
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +12 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/wrap.js +44 -13
- package/lib/module/wrap.js.map +1 -1
- package/lib/typescript/commonjs/DefaultResolver.d.ts +10 -0
- package/lib/typescript/commonjs/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts +2 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +3 -3
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +115 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.d.ts +64 -10
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/module/DefaultResolver.d.ts +10 -0
- package/lib/typescript/module/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/module/checkForUpdate.d.ts +2 -1
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +3 -3
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +115 -0
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/wrap.d.ts +64 -10
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/DefaultResolver.ts +36 -0
- package/src/checkForUpdate.ts +43 -59
- package/src/index.ts +51 -19
- package/src/types.ts +135 -0
- package/src/wrap.tsx +161 -72
package/lib/module/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { checkForUpdate } from "./checkForUpdate.js";
|
|
4
|
+
import { createDefaultResolver } from "./DefaultResolver.js";
|
|
4
5
|
import { addListener, clearCrashHistory, getAppVersion, getBundleId, getChannel, getCrashHistory, getFingerprintHash, getMinBundleId, reload, updateBundle } from "./native.js";
|
|
5
6
|
import { hotUpdaterStore } from "./store.js";
|
|
6
7
|
import { wrap } from "./wrap.js";
|
|
@@ -21,14 +22,14 @@ addListener("onProgress", ({
|
|
|
21
22
|
function createHotUpdaterClient() {
|
|
22
23
|
// Global configuration stored from wrap
|
|
23
24
|
const globalConfig = {
|
|
24
|
-
|
|
25
|
+
resolver: null
|
|
25
26
|
};
|
|
26
|
-
|
|
27
|
-
if (globalConfig.
|
|
27
|
+
const ensureGlobalResolver = methodName => {
|
|
28
|
+
if (!globalConfig.resolver) {
|
|
28
29
|
throw new Error(`[HotUpdater] ${methodName} requires HotUpdater.wrap() to be used.\n\n` + `To fix this issue, wrap your root component with HotUpdater.wrap():\n\n` + `Option 1: With automatic updates\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateStrategy: "appVersion",\n` + ` updateMode: "auto"\n` + ` })(App);\n\n` + `Option 2: Manual updates only (custom flow)\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateMode: "manual"\n` + ` })(App);\n\n` + `For more information, visit: https://hot-updater.dev/docs/react-native-api/wrap`);
|
|
29
30
|
}
|
|
30
|
-
return globalConfig.
|
|
31
|
-
}
|
|
31
|
+
return globalConfig.resolver;
|
|
32
|
+
};
|
|
32
33
|
return {
|
|
33
34
|
/**
|
|
34
35
|
* `HotUpdater.wrap` checks for updates at the entry point, and if there is a bundle to update, it downloads the bundle and applies the update strategy.
|
|
@@ -55,10 +56,25 @@ function createHotUpdaterClient() {
|
|
|
55
56
|
* ```
|
|
56
57
|
*/
|
|
57
58
|
wrap: options => {
|
|
58
|
-
|
|
59
|
+
let normalizedOptions;
|
|
60
|
+
if ("baseURL" in options && options.baseURL) {
|
|
61
|
+
const {
|
|
62
|
+
baseURL,
|
|
63
|
+
...rest
|
|
64
|
+
} = options;
|
|
65
|
+
normalizedOptions = {
|
|
66
|
+
...rest,
|
|
67
|
+
resolver: createDefaultResolver(baseURL)
|
|
68
|
+
};
|
|
69
|
+
} else if ("resolver" in options && options.resolver) {
|
|
70
|
+
normalizedOptions = options;
|
|
71
|
+
} else {
|
|
72
|
+
throw new Error(`[HotUpdater] Either baseURL or resolver must be provided.\n\n` + `Option 1: Using baseURL (recommended for most cases)\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateStrategy: "appVersion",\n` + ` updateMode: "auto"\n` + ` })(App);\n\n` + `Option 2: Using custom resolver (advanced)\n` + ` export default HotUpdater.wrap({\n` + ` resolver: {\n` + ` checkUpdate: async (params) => { /* custom logic */ },\n` + ` notifyAppReady: async (params) => { /* custom logic */ }\n` + ` },\n` + ` updateMode: "manual"\n` + ` })(App);\n\n` + `For more information, visit: https://hot-updater.dev/docs/react-native-api/wrap`);
|
|
73
|
+
}
|
|
74
|
+
globalConfig.resolver = normalizedOptions.resolver;
|
|
59
75
|
globalConfig.requestHeaders = options.requestHeaders;
|
|
60
76
|
globalConfig.requestTimeout = options.requestTimeout;
|
|
61
|
-
return wrap(
|
|
77
|
+
return wrap(normalizedOptions);
|
|
62
78
|
},
|
|
63
79
|
/**
|
|
64
80
|
* Reloads the app.
|
|
@@ -156,14 +172,10 @@ function createHotUpdaterClient() {
|
|
|
156
172
|
* ```
|
|
157
173
|
*/
|
|
158
174
|
checkForUpdate: config => {
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
// Merge globalConfig with provided config
|
|
162
|
-
// baseURL is always from wrap (globalConfig)
|
|
163
|
-
// requestHeaders/requestTimeout from wrap are used as defaults, but can be overridden
|
|
175
|
+
const resolver = ensureGlobalResolver("checkForUpdate");
|
|
164
176
|
const mergedConfig = {
|
|
165
177
|
...config,
|
|
166
|
-
|
|
178
|
+
resolver,
|
|
167
179
|
requestHeaders: {
|
|
168
180
|
...globalConfig.requestHeaders,
|
|
169
181
|
...config.requestHeaders
|
|
@@ -206,7 +218,7 @@ function createHotUpdaterClient() {
|
|
|
206
218
|
* ```
|
|
207
219
|
*/
|
|
208
220
|
updateBundle: params => {
|
|
209
|
-
|
|
221
|
+
ensureGlobalResolver("updateBundle");
|
|
210
222
|
return updateBundle(params);
|
|
211
223
|
},
|
|
212
224
|
/**
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkForUpdate","addListener","clearCrashHistory","getAppVersion","getBundleId","getChannel","getCrashHistory","getFingerprintHash","getMinBundleId","reload","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","progress","setState","createHotUpdaterClient","globalConfig","
|
|
1
|
+
{"version":3,"names":["checkForUpdate","createDefaultResolver","addListener","clearCrashHistory","getAppVersion","getBundleId","getChannel","getCrashHistory","getFingerprintHash","getMinBundleId","reload","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","progress","setState","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","options","normalizedOptions","baseURL","rest","requestHeaders","requestTimeout","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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BAAgB,CAAC;MAEvD,MAAMY,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTZ,QAAQ;QACRQ,cAAc,EAAE;UACd,GAAGT,YAAY,CAACS,cAAc;UAC9B,GAAGI,MAAM,CAACJ;QACZ,CAAC;QACDC,cAAc,EAAEG,MAAM,CAACH,cAAc,IAAIV,YAAY,CAACU;MACxD,CAAC;MAED,OAAO7B,cAAc,CAACiC,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACItB,YAAY,EAAGuB,MAAoB,IAAK;MACtCb,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAOV,YAAY,CAACuB,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI1B,kBAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACID,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIJ;EACF,CAAC;AACH;AAEA,OAAO,MAAMgC,UAAU,GAAGjB,sBAAsB,CAAC,CAAC","ignoreList":[]}
|
package/lib/module/types.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Parameters passed to resolver.checkUpdate method
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Parameters passed to resolver.notifyAppReady method
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Resolver interface for custom network operations
|
|
13
|
+
*/
|
|
14
|
+
|
|
3
15
|
/**
|
|
4
16
|
* Information about a signature verification failure.
|
|
5
17
|
* This is a security-critical event that indicates the bundle
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isSignatureVerificationError","error","Error","message","toLowerCase","includes","extractSignatureFailure","bundleId","normalizedError","String"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["isSignatureVerificationError","error","Error","message","toLowerCase","includes","extractSignatureFailure","bundleId","normalizedError","String"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAGA;AACA;AACA;;AAgDA;AACA;AACA;;AA0BA;AACA;AACA;;AAoDA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,4BAA4BA,CAACC,KAAc,EAAW;EACpE,IAAI,EAAEA,KAAK,YAAYC,KAAK,CAAC,EAAE;IAC7B,OAAO,KAAK;EACd;EAEA,MAAMC,OAAO,GAAGF,KAAK,CAACE,OAAO,CAACC,WAAW,CAAC,CAAC;;EAE3C;EACA;EACA,OACED,OAAO,CAACE,QAAQ,CAAC,wBAAwB,CAAC,IAC1CF,OAAO,CAACE,QAAQ,CAAC,2BAA2B,CAAC,IAC7CF,OAAO,CAACE,QAAQ,CAAC,8BAA8B,CAAC,IAChDF,OAAO,CAACE,QAAQ,CAAC,6BAA6B,CAAC,IAC/CF,OAAO,CAACE,QAAQ,CAAC,qCAAqC,CAAC;AAE3D;;AAEA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CACrCL,KAAc,EACdM,QAAgB,EACc;EAC9B,MAAMC,eAAe,GACnBP,KAAK,YAAYC,KAAK,GAAGD,KAAK,GAAG,IAAIC,KAAK,CAACO,MAAM,CAACR,KAAK,CAAC,CAAC;EAE3D,OAAO;IACLM,QAAQ;IACRJ,OAAO,EAAEK,eAAe,CAACL,OAAO;IAChCF,KAAK,EAAEO;EACT,CAAC;AACH","ignoreList":[]}
|
package/lib/module/wrap.js
CHANGED
|
@@ -9,18 +9,54 @@ import { useHotUpdaterStore } from "./store.js";
|
|
|
9
9
|
/**
|
|
10
10
|
* Common options shared between auto and manual update modes
|
|
11
11
|
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Configuration with baseURL for standard server-based updates
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Configuration with resolver for custom network operations
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Union type ensuring baseURL and resolver are mutually exclusive
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Internal options after normalization in index.ts
|
|
27
|
+
* Always has resolver (never baseURL)
|
|
28
|
+
*/
|
|
12
29
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
30
|
+
/**
|
|
31
|
+
* Helper function to handle notifyAppReady flow
|
|
32
|
+
*/
|
|
33
|
+
const handleNotifyAppReady = async options => {
|
|
34
|
+
try {
|
|
35
|
+
// Always call native notifyAppReady for bundle promotion
|
|
36
|
+
const nativeResult = nativeNotifyAppReady();
|
|
37
|
+
|
|
38
|
+
// If resolver.notifyAppReady exists, call it with simplified params
|
|
39
|
+
if (options.resolver?.notifyAppReady) {
|
|
40
|
+
await options.resolver.notifyAppReady({
|
|
41
|
+
status: nativeResult.status,
|
|
42
|
+
crashedBundleId: nativeResult.crashedBundleId,
|
|
43
|
+
requestHeaders: options.requestHeaders,
|
|
44
|
+
requestTimeout: options.requestTimeout
|
|
45
|
+
}).catch(e => {
|
|
46
|
+
console.warn("[HotUpdater] Resolver notifyAppReady failed:", e);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
options.onNotifyAppReady?.(nativeResult);
|
|
50
|
+
} catch (e) {
|
|
51
|
+
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
13
54
|
export function wrap(options) {
|
|
14
55
|
if (options.updateMode === "manual") {
|
|
15
56
|
return WrappedComponent => {
|
|
16
57
|
const ManualHOC = props => {
|
|
17
58
|
useLayoutEffect(() => {
|
|
18
|
-
|
|
19
|
-
const result = nativeNotifyAppReady();
|
|
20
|
-
options.onNotifyAppReady?.(result);
|
|
21
|
-
} catch (e) {
|
|
22
|
-
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
23
|
-
}
|
|
59
|
+
void handleNotifyAppReady(options);
|
|
24
60
|
}, []);
|
|
25
61
|
return /*#__PURE__*/_jsx(WrappedComponent, {
|
|
26
62
|
...props
|
|
@@ -44,7 +80,7 @@ export function wrap(options) {
|
|
|
44
80
|
try {
|
|
45
81
|
setUpdateStatus("CHECK_FOR_UPDATE");
|
|
46
82
|
const updateInfo = await checkForUpdate({
|
|
47
|
-
|
|
83
|
+
resolver: restOptions.resolver,
|
|
48
84
|
updateStrategy: restOptions.updateStrategy,
|
|
49
85
|
requestHeaders: restOptions.requestHeaders,
|
|
50
86
|
requestTimeout: restOptions.requestTimeout,
|
|
@@ -101,12 +137,7 @@ export function wrap(options) {
|
|
|
101
137
|
|
|
102
138
|
// Notify native side that app is ready (JS bundle fully loaded)
|
|
103
139
|
useLayoutEffect(() => {
|
|
104
|
-
|
|
105
|
-
const result = nativeNotifyAppReady();
|
|
106
|
-
restOptions.onNotifyAppReady?.(result);
|
|
107
|
-
} catch (e) {
|
|
108
|
-
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
109
|
-
}
|
|
140
|
+
void handleNotifyAppReady(restOptions);
|
|
110
141
|
}, []);
|
|
111
142
|
|
|
112
143
|
// Start update check
|
package/lib/module/wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useLayoutEffect","useState","checkForUpdate","useEventCallback","getBundleId","notifyAppReady","nativeNotifyAppReady","reload","useHotUpdaterStore","jsx","_jsx","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useLayoutEffect","useState","checkForUpdate","useEventCallback","getBundleId","notifyAppReady","nativeNotifyAppReady","reload","useHotUpdaterStore","jsx","_jsx","handleNotifyAppReady","options","nativeResult","resolver","status","crashedBundleId","requestHeaders","requestTimeout","catch","e","console","warn","onNotifyAppReady","wrap","updateMode","WrappedComponent","ManualHOC","props","reloadOnForceUpdate","restOptions","HotUpdaterHOC","progress","state","message","setMessage","updateStatus","setUpdateStatus","initHotUpdater","updateInfo","updateStrategy","onError","onUpdateProcessCompleted","shouldForceUpdate","id","updateBundle","error","isSuccess","Error","onProgress","fallbackComponent","Fallback"],"sourceRoot":"../../src","sources":["wrap.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { HotUpdaterResolver } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a default resolver that uses baseURL for network operations.
|
|
4
|
+
* This encapsulates the existing baseURL logic into a resolver.
|
|
5
|
+
*
|
|
6
|
+
* @param baseURL - The base URL for the update server
|
|
7
|
+
* @returns A HotUpdaterResolver that uses the baseURL
|
|
8
|
+
*/
|
|
9
|
+
export declare function createDefaultResolver(baseURL: string): HotUpdaterResolver;
|
|
10
|
+
//# sourceMappingURL=DefaultResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultResolver.d.ts","sourceRoot":"","sources":["../../../src/DefaultResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAA6B,MAAM,SAAS,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAwBzE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AppUpdateInfo } from "@hot-updater/core";
|
|
2
|
+
import type { HotUpdaterResolver } from "./types";
|
|
2
3
|
export interface CheckForUpdateOptions {
|
|
3
4
|
/**
|
|
4
5
|
* Update strategy
|
|
@@ -23,7 +24,7 @@ export type CheckForUpdateResult = AppUpdateInfo & {
|
|
|
23
24
|
updateBundle: () => Promise<boolean>;
|
|
24
25
|
};
|
|
25
26
|
export interface InternalCheckForUpdateOptions extends CheckForUpdateOptions {
|
|
26
|
-
|
|
27
|
+
resolver: HotUpdaterResolver;
|
|
27
28
|
}
|
|
28
29
|
export declare function checkForUpdate(options: InternalCheckForUpdateOptions): Promise<CheckForUpdateResult | null>;
|
|
29
30
|
//# sourceMappingURL=checkForUpdate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,cAAc,EAAE,YAAY,GAAG,aAAa,CAAC;IAE7C,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,aAAa,GAAG;IACjD;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;AAGF,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkEtC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type CheckForUpdateOptions } from "./checkForUpdate";
|
|
2
2
|
import { type UpdateParams } from "./native";
|
|
3
|
-
import {
|
|
3
|
+
import { type HotUpdaterOptions } from "./wrap";
|
|
4
4
|
export type { HotUpdaterEvent, NotifyAppReadyResult } from "./native";
|
|
5
5
|
export * from "./store";
|
|
6
|
-
export { extractSignatureFailure, isSignatureVerificationError, type SignatureVerificationFailure, } from "./types";
|
|
6
|
+
export { extractSignatureFailure, type HotUpdaterResolver, isSignatureVerificationError, type ResolverCheckUpdateParams, type ResolverNotifyAppReadyParams, type SignatureVerificationFailure, } from "./types";
|
|
7
7
|
export type { HotUpdaterOptions, RunUpdateProcessResponse } from "./wrap";
|
|
8
8
|
export declare const HotUpdater: {
|
|
9
9
|
/**
|
|
@@ -30,7 +30,7 @@ export declare const HotUpdater: {
|
|
|
30
30
|
* })(App);
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
|
-
wrap:
|
|
33
|
+
wrap: (options: HotUpdaterOptions) => (WrappedComponent: import("react").ComponentType<object>) => import("react").ComponentType<object>;
|
|
34
34
|
/**
|
|
35
35
|
* Reloads the app.
|
|
36
36
|
*/
|
|
@@ -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;
|
|
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,EAUL,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAmT1E,eAAO,MAAM,UAAU;IAtQnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
|
|
@@ -1,3 +1,118 @@
|
|
|
1
|
+
import type { AppUpdateInfo } from "@hot-updater/core";
|
|
2
|
+
import type { NotifyAppReadyResult } from "./native";
|
|
3
|
+
/**
|
|
4
|
+
* Parameters passed to resolver.checkUpdate method
|
|
5
|
+
*/
|
|
6
|
+
export interface ResolverCheckUpdateParams {
|
|
7
|
+
/**
|
|
8
|
+
* The platform the app is running on
|
|
9
|
+
*/
|
|
10
|
+
platform: "ios" | "android";
|
|
11
|
+
/**
|
|
12
|
+
* The current app version
|
|
13
|
+
*/
|
|
14
|
+
appVersion: string;
|
|
15
|
+
/**
|
|
16
|
+
* The current bundle ID
|
|
17
|
+
*/
|
|
18
|
+
bundleId: string;
|
|
19
|
+
/**
|
|
20
|
+
* Minimum bundle ID from build time
|
|
21
|
+
*/
|
|
22
|
+
minBundleId: string;
|
|
23
|
+
/**
|
|
24
|
+
* The channel name (e.g., "production", "staging")
|
|
25
|
+
*/
|
|
26
|
+
channel: string;
|
|
27
|
+
/**
|
|
28
|
+
* Update strategy being used
|
|
29
|
+
*/
|
|
30
|
+
updateStrategy: "fingerprint" | "appVersion";
|
|
31
|
+
/**
|
|
32
|
+
* The fingerprint hash (only present when using fingerprint strategy)
|
|
33
|
+
*/
|
|
34
|
+
fingerprintHash: string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Request headers from global config (for optional use)
|
|
37
|
+
*/
|
|
38
|
+
requestHeaders?: Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Request timeout from global config (for optional use)
|
|
41
|
+
*/
|
|
42
|
+
requestTimeout?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parameters passed to resolver.notifyAppReady method
|
|
46
|
+
*/
|
|
47
|
+
export interface ResolverNotifyAppReadyParams {
|
|
48
|
+
/**
|
|
49
|
+
* The bundle state from native notifyAppReady
|
|
50
|
+
* - "PROMOTED": Staging bundle was promoted to stable
|
|
51
|
+
* - "RECOVERED": App recovered from crash, rollback occurred
|
|
52
|
+
* - "STABLE": No changes, bundle is stable
|
|
53
|
+
*/
|
|
54
|
+
status: "PROMOTED" | "RECOVERED" | "STABLE";
|
|
55
|
+
/**
|
|
56
|
+
* Present only when status is "RECOVERED"
|
|
57
|
+
*/
|
|
58
|
+
crashedBundleId?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Request headers from global config (for optional use)
|
|
61
|
+
*/
|
|
62
|
+
requestHeaders?: Record<string, string>;
|
|
63
|
+
/**
|
|
64
|
+
* Request timeout from global config (for optional use)
|
|
65
|
+
*/
|
|
66
|
+
requestTimeout?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolver interface for custom network operations
|
|
70
|
+
*/
|
|
71
|
+
export interface HotUpdaterResolver {
|
|
72
|
+
/**
|
|
73
|
+
* Custom implementation for checking updates.
|
|
74
|
+
* When provided, this completely replaces the default fetchUpdateInfo flow.
|
|
75
|
+
*
|
|
76
|
+
* @param params - All parameters needed to check for updates
|
|
77
|
+
* @returns Update information or null if up to date
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* checkUpdate: async (params) => {
|
|
82
|
+
* const response = await fetch(`https://api.custom.com/check`, {
|
|
83
|
+
* method: 'POST',
|
|
84
|
+
* body: JSON.stringify(params),
|
|
85
|
+
* headers: params.requestHeaders,
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* if (!response.ok) return null;
|
|
89
|
+
* return response.json();
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
checkUpdate?: (params: ResolverCheckUpdateParams) => Promise<AppUpdateInfo | null>;
|
|
94
|
+
/**
|
|
95
|
+
* Custom implementation for notifying app ready.
|
|
96
|
+
* When provided, this completely replaces the default notifyAppReady network flow.
|
|
97
|
+
* Note: The native notifyAppReady for bundle promotion still happens automatically.
|
|
98
|
+
*
|
|
99
|
+
* @param params - All parameters about the current app state
|
|
100
|
+
* @returns Notification result
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* notifyAppReady: async (params) => {
|
|
105
|
+
* await fetch(`https://api.custom.com/notify`, {
|
|
106
|
+
* method: 'POST',
|
|
107
|
+
* body: JSON.stringify(params),
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* return { status: "STABLE" };
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
notifyAppReady?: (params: ResolverNotifyAppReadyParams) => Promise<NotifyAppReadyResult | undefined>;
|
|
115
|
+
}
|
|
1
116
|
/**
|
|
2
117
|
* Information about a signature verification failure.
|
|
3
118
|
* This is a security-critical event that indicates the bundle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA;;;;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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,cAAc,EAAE,aAAa,GAAG,YAAY,CAAC;IAE7C;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAE5C;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,EAAE,CACZ,MAAM,EAAE,yBAAyB,KAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEnC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,4BAA4B,KACjC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CAChD;AAED;;;;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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { HotUpdaterError } from "./error";
|
|
3
3
|
import { type NotifyAppReadyResult } from "./native";
|
|
4
|
+
import type { HotUpdaterResolver } from "./types";
|
|
4
5
|
export interface RunUpdateProcessResponse {
|
|
5
6
|
status: "ROLLBACK" | "UPDATE" | "UP_TO_DATE";
|
|
6
7
|
shouldForceUpdate: boolean;
|
|
@@ -12,11 +13,6 @@ type UpdateStatus = "CHECK_FOR_UPDATE" | "UPDATING" | "UPDATE_PROCESS_COMPLETED"
|
|
|
12
13
|
* Common options shared between auto and manual update modes
|
|
13
14
|
*/
|
|
14
15
|
interface CommonHotUpdaterOptions {
|
|
15
|
-
/**
|
|
16
|
-
* Base URL for update server
|
|
17
|
-
* @example "https://update.example.com"
|
|
18
|
-
*/
|
|
19
|
-
baseURL: string;
|
|
20
16
|
/**
|
|
21
17
|
* Custom request headers for update checks
|
|
22
18
|
*/
|
|
@@ -54,7 +50,38 @@ interface CommonHotUpdaterOptions {
|
|
|
54
50
|
*/
|
|
55
51
|
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
56
52
|
}
|
|
57
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Configuration with baseURL for standard server-based updates
|
|
55
|
+
*/
|
|
56
|
+
interface BaseURLConfig {
|
|
57
|
+
/**
|
|
58
|
+
* Base URL for update server
|
|
59
|
+
* @example "https://update.example.com"
|
|
60
|
+
*/
|
|
61
|
+
baseURL: string;
|
|
62
|
+
/**
|
|
63
|
+
* Resolver is not allowed when using baseURL
|
|
64
|
+
*/
|
|
65
|
+
resolver?: never;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configuration with resolver for custom network operations
|
|
69
|
+
*/
|
|
70
|
+
interface ResolverConfig {
|
|
71
|
+
/**
|
|
72
|
+
* Custom resolver for network operations
|
|
73
|
+
*/
|
|
74
|
+
resolver: HotUpdaterResolver;
|
|
75
|
+
/**
|
|
76
|
+
* baseURL is not allowed when using resolver
|
|
77
|
+
*/
|
|
78
|
+
baseURL?: never;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Union type ensuring baseURL and resolver are mutually exclusive
|
|
82
|
+
*/
|
|
83
|
+
type NetworkConfig = BaseURLConfig | ResolverConfig;
|
|
84
|
+
export type AutoUpdateOptions = CommonHotUpdaterOptions & NetworkConfig & {
|
|
58
85
|
/**
|
|
59
86
|
* Update strategy
|
|
60
87
|
* - "fingerprint": Use fingerprint hash to check for updates
|
|
@@ -108,15 +135,42 @@ export interface AutoUpdateOptions extends CommonHotUpdaterOptions {
|
|
|
108
135
|
* @see {@link https://hot-updater.dev/docs/react-native-api/wrap#onupdateprocesscompleted}
|
|
109
136
|
*/
|
|
110
137
|
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
111
|
-
}
|
|
112
|
-
export
|
|
138
|
+
};
|
|
139
|
+
export type ManualUpdateOptions = CommonHotUpdaterOptions & NetworkConfig & {
|
|
113
140
|
/**
|
|
114
141
|
* Update mode
|
|
115
142
|
* - "manual": Only notify app ready, user manually calls checkForUpdate()
|
|
116
143
|
*/
|
|
117
144
|
updateMode: "manual";
|
|
118
|
-
}
|
|
145
|
+
};
|
|
119
146
|
export type HotUpdaterOptions = AutoUpdateOptions | ManualUpdateOptions;
|
|
120
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Internal options after normalization in index.ts
|
|
149
|
+
* Always has resolver (never baseURL)
|
|
150
|
+
*/
|
|
151
|
+
type InternalCommonOptions = {
|
|
152
|
+
resolver: HotUpdaterResolver;
|
|
153
|
+
requestHeaders?: Record<string, string>;
|
|
154
|
+
requestTimeout?: number;
|
|
155
|
+
onNotifyAppReady?: (result: NotifyAppReadyResult) => void;
|
|
156
|
+
};
|
|
157
|
+
type InternalAutoUpdateOptions = InternalCommonOptions & {
|
|
158
|
+
updateStrategy: "fingerprint" | "appVersion";
|
|
159
|
+
updateMode: "auto";
|
|
160
|
+
onError?: (error: HotUpdaterError | Error | unknown) => void;
|
|
161
|
+
fallbackComponent?: React.FC<{
|
|
162
|
+
status: Exclude<UpdateStatus, "UPDATE_PROCESS_COMPLETED">;
|
|
163
|
+
progress: number;
|
|
164
|
+
message: string | null;
|
|
165
|
+
}>;
|
|
166
|
+
onProgress?: (progress: number) => void;
|
|
167
|
+
reloadOnForceUpdate?: boolean;
|
|
168
|
+
onUpdateProcessCompleted?: (response: RunUpdateProcessResponse) => void;
|
|
169
|
+
};
|
|
170
|
+
type InternalManualUpdateOptions = InternalCommonOptions & {
|
|
171
|
+
updateMode: "manual";
|
|
172
|
+
};
|
|
173
|
+
export type InternalWrapOptions = InternalAutoUpdateOptions | InternalManualUpdateOptions;
|
|
174
|
+
export declare function wrap<P extends React.JSX.IntrinsicAttributes = object>(options: InternalWrapOptions): (WrappedComponent: React.ComponentType<P>) => React.ComponentType<P>;
|
|
121
175
|
export {};
|
|
122
176
|
//# sourceMappingURL=wrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/wrap.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { HotUpdaterResolver } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a default resolver that uses baseURL for network operations.
|
|
4
|
+
* This encapsulates the existing baseURL logic into a resolver.
|
|
5
|
+
*
|
|
6
|
+
* @param baseURL - The base URL for the update server
|
|
7
|
+
* @returns A HotUpdaterResolver that uses the baseURL
|
|
8
|
+
*/
|
|
9
|
+
export declare function createDefaultResolver(baseURL: string): HotUpdaterResolver;
|
|
10
|
+
//# sourceMappingURL=DefaultResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultResolver.d.ts","sourceRoot":"","sources":["../../../src/DefaultResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAA6B,MAAM,SAAS,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAwBzE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AppUpdateInfo } from "@hot-updater/core";
|
|
2
|
+
import type { HotUpdaterResolver } from "./types";
|
|
2
3
|
export interface CheckForUpdateOptions {
|
|
3
4
|
/**
|
|
4
5
|
* Update strategy
|
|
@@ -23,7 +24,7 @@ export type CheckForUpdateResult = AppUpdateInfo & {
|
|
|
23
24
|
updateBundle: () => Promise<boolean>;
|
|
24
25
|
};
|
|
25
26
|
export interface InternalCheckForUpdateOptions extends CheckForUpdateOptions {
|
|
26
|
-
|
|
27
|
+
resolver: HotUpdaterResolver;
|
|
27
28
|
}
|
|
28
29
|
export declare function checkForUpdate(options: InternalCheckForUpdateOptions): Promise<CheckForUpdateResult | null>;
|
|
29
30
|
//# sourceMappingURL=checkForUpdate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,cAAc,EAAE,YAAY,GAAG,aAAa,CAAC;IAE7C,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,aAAa,GAAG;IACjD;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;AAGF,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkEtC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type CheckForUpdateOptions } from "./checkForUpdate";
|
|
2
2
|
import { type UpdateParams } from "./native";
|
|
3
|
-
import {
|
|
3
|
+
import { type HotUpdaterOptions } from "./wrap";
|
|
4
4
|
export type { HotUpdaterEvent, NotifyAppReadyResult } from "./native";
|
|
5
5
|
export * from "./store";
|
|
6
|
-
export { extractSignatureFailure, isSignatureVerificationError, type SignatureVerificationFailure, } from "./types";
|
|
6
|
+
export { extractSignatureFailure, type HotUpdaterResolver, isSignatureVerificationError, type ResolverCheckUpdateParams, type ResolverNotifyAppReadyParams, type SignatureVerificationFailure, } from "./types";
|
|
7
7
|
export type { HotUpdaterOptions, RunUpdateProcessResponse } from "./wrap";
|
|
8
8
|
export declare const HotUpdater: {
|
|
9
9
|
/**
|
|
@@ -30,7 +30,7 @@ export declare const HotUpdater: {
|
|
|
30
30
|
* })(App);
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
|
-
wrap:
|
|
33
|
+
wrap: (options: HotUpdaterOptions) => (WrappedComponent: import("react").ComponentType<object>) => import("react").ComponentType<object>;
|
|
34
34
|
/**
|
|
35
35
|
* Reloads the app.
|
|
36
36
|
*/
|
|
@@ -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;
|
|
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,EAUL,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAmT1E,eAAO,MAAM,UAAU;IAtQnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
|