@hot-updater/react-native 0.25.13 → 0.26.0
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 +42 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +25 -0
- package/android/src/newarch/HotUpdater.kt +4 -1
- package/android/src/newarch/HotUpdaterModule.kt +18 -1
- package/android/src/oldarch/HotUpdater.kt +4 -1
- package/android/src/oldarch/HotUpdaterModule.kt +19 -1
- package/android/src/oldarch/HotUpdaterSpec.kt +2 -0
- package/ios/HotUpdater/Internal/BundleFileStorageService.swift +44 -0
- package/ios/HotUpdater/Internal/HotUpdater.mm +17 -0
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +44 -2
- package/lib/commonjs/checkForUpdate.js +29 -4
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/index.js +35 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native.js +88 -21
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
- package/lib/module/checkForUpdate.js +29 -5
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/index.js +36 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/native.js +81 -16
- package/lib/module/native.js.map +1 -1
- package/lib/module/specs/NativeHotUpdater.js.map +1 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts +5 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +26 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +13 -0
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +8 -0
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/checkForUpdate.d.ts +5 -0
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +26 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +13 -0
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts +8 -0
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/checkForUpdate.ts +63 -3
- package/src/index.ts +41 -0
- package/src/native.ts +103 -16
- package/src/specs/NativeHotUpdater.ts +9 -0
package/lib/commonjs/native.js
CHANGED
|
@@ -10,14 +10,14 @@ Object.defineProperty(exports, "HotUpdaterErrorCode", {
|
|
|
10
10
|
return _error.HotUpdaterErrorCode;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
-
exports.getMinBundleId = exports.getFingerprintHash = exports.getCrashHistory = exports.getChannel = exports.getBundleId = exports.getBaseURL = exports.getAppVersion = exports.clearCrashHistory = exports.addListener = void 0;
|
|
13
|
+
exports.isChannelSwitched = exports.getMinBundleId = exports.getFingerprintHash = exports.getDefaultChannel = exports.getCrashHistory = exports.getChannel = exports.getBundleId = exports.getBaseURL = exports.getAppVersion = exports.clearCrashHistory = exports.addListener = void 0;
|
|
14
14
|
Object.defineProperty(exports, "isHotUpdaterError", {
|
|
15
15
|
enumerable: true,
|
|
16
16
|
get: function () {
|
|
17
17
|
return _error.isHotUpdaterError;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
-
exports.reload = exports.notifyAppReady = void 0;
|
|
20
|
+
exports.resetChannel = exports.reload = exports.notifyAppReady = void 0;
|
|
21
21
|
exports.updateBundle = updateBundle;
|
|
22
22
|
var _reactNative = require("react-native");
|
|
23
23
|
var _error = require("./error.js");
|
|
@@ -27,6 +27,48 @@ const NIL_UUID = "00000000-0000-0000-0000-000000000000";
|
|
|
27
27
|
const HotUpdaterConstants = exports.HotUpdaterConstants = {
|
|
28
28
|
HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID
|
|
29
29
|
};
|
|
30
|
+
class HotUpdaterSessionState {
|
|
31
|
+
inflightUpdates = new Map();
|
|
32
|
+
lastInstalledBundleId = null;
|
|
33
|
+
constructor() {
|
|
34
|
+
const constants = _NativeHotUpdater.default.getConstants();
|
|
35
|
+
this.defaultChannel = constants.DEFAULT_CHANNEL ?? constants.CHANNEL;
|
|
36
|
+
this.currentChannel = constants.CHANNEL;
|
|
37
|
+
}
|
|
38
|
+
getChannel() {
|
|
39
|
+
return this.currentChannel;
|
|
40
|
+
}
|
|
41
|
+
getDefaultChannel() {
|
|
42
|
+
return this.defaultChannel;
|
|
43
|
+
}
|
|
44
|
+
isChannelSwitched() {
|
|
45
|
+
return this.currentChannel !== this.defaultChannel;
|
|
46
|
+
}
|
|
47
|
+
hasInstalledBundle(bundleId) {
|
|
48
|
+
return this.lastInstalledBundleId === bundleId;
|
|
49
|
+
}
|
|
50
|
+
getInflightUpdate(bundleId) {
|
|
51
|
+
return this.inflightUpdates.get(bundleId);
|
|
52
|
+
}
|
|
53
|
+
trackInflightUpdate(bundleId, promise) {
|
|
54
|
+
this.inflightUpdates.set(bundleId, promise);
|
|
55
|
+
}
|
|
56
|
+
clearInflightUpdate(bundleId) {
|
|
57
|
+
this.inflightUpdates.delete(bundleId);
|
|
58
|
+
}
|
|
59
|
+
markBundleInstalled(bundleId, channel) {
|
|
60
|
+
this.lastInstalledBundleId = bundleId;
|
|
61
|
+
if (channel) {
|
|
62
|
+
this.currentChannel = channel;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
resetChannelState() {
|
|
66
|
+
this.currentChannel = this.defaultChannel;
|
|
67
|
+
this.lastInstalledBundleId = null;
|
|
68
|
+
this.inflightUpdates.clear();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const sessionState = new HotUpdaterSessionState();
|
|
30
72
|
const eventEmitter = new _reactNative.NativeEventEmitter(_NativeHotUpdater.default);
|
|
31
73
|
const addListener = (eventName, listener) => {
|
|
32
74
|
const subscription = eventEmitter.addListener(eventName, listener);
|
|
@@ -34,11 +76,6 @@ const addListener = (eventName, listener) => {
|
|
|
34
76
|
subscription.remove();
|
|
35
77
|
};
|
|
36
78
|
};
|
|
37
|
-
exports.addListener = addListener;
|
|
38
|
-
// In-flight update deduplication by bundleId (session-scoped).
|
|
39
|
-
const inflightUpdates = new Map();
|
|
40
|
-
// Tracks the last successfully installed bundleId for this session.
|
|
41
|
-
let lastInstalledBundleId = null;
|
|
42
79
|
|
|
43
80
|
/**
|
|
44
81
|
* Downloads files and applies them to the app.
|
|
@@ -51,43 +88,43 @@ let lastInstalledBundleId = null;
|
|
|
51
88
|
/**
|
|
52
89
|
* @deprecated Use updateBundle(params: UpdateBundleParamsWithStatus) instead
|
|
53
90
|
*/
|
|
54
|
-
|
|
91
|
+
exports.addListener = addListener;
|
|
55
92
|
async function updateBundle(paramsOrBundleId, fileUrl) {
|
|
56
93
|
const updateBundleId = typeof paramsOrBundleId === "string" ? paramsOrBundleId : paramsOrBundleId.bundleId;
|
|
57
94
|
const status = typeof paramsOrBundleId === "string" ? "UPDATE" : paramsOrBundleId.status;
|
|
58
95
|
|
|
59
96
|
// If we have already installed this bundle in this session, skip re-download.
|
|
60
|
-
if (status === "UPDATE" &&
|
|
97
|
+
if (status === "UPDATE" && sessionState.hasInstalledBundle(updateBundleId)) {
|
|
61
98
|
return true;
|
|
62
99
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (status === "UPDATE" && updateBundleId.localeCompare(currentBundleId) <= 0) {
|
|
67
|
-
throw new Error("Update bundle id is the same as the current bundle id. Preventing infinite update loop.");
|
|
100
|
+
const shouldSkipCurrentBundleIdCheck = typeof paramsOrBundleId === "string" ? false : paramsOrBundleId.shouldSkipCurrentBundleIdCheck === true;
|
|
101
|
+
if (!shouldSkipCurrentBundleIdCheck && status === "UPDATE" && updateBundleId.localeCompare(getBundleId()) <= 0) {
|
|
102
|
+
throw new Error("Update bundle id is not newer than the current bundle id. Preventing infinite update loop.");
|
|
68
103
|
}
|
|
69
104
|
|
|
70
105
|
// In-flight guard: return the same promise if the same bundle is already updating.
|
|
71
|
-
const existing =
|
|
106
|
+
const existing = sessionState.getInflightUpdate(updateBundleId);
|
|
72
107
|
if (existing) return existing;
|
|
73
108
|
const targetFileUrl = typeof paramsOrBundleId === "string" ? fileUrl ?? null : paramsOrBundleId.fileUrl;
|
|
74
109
|
const targetFileHash = typeof paramsOrBundleId === "string" ? undefined : paramsOrBundleId.fileHash;
|
|
110
|
+
const targetChannel = typeof paramsOrBundleId === "string" ? undefined : paramsOrBundleId.channel;
|
|
75
111
|
const promise = (async () => {
|
|
76
112
|
try {
|
|
77
113
|
const ok = await _NativeHotUpdater.default.updateBundle({
|
|
78
114
|
bundleId: updateBundleId,
|
|
115
|
+
channel: targetChannel,
|
|
79
116
|
fileUrl: targetFileUrl,
|
|
80
117
|
fileHash: targetFileHash ?? null
|
|
81
118
|
});
|
|
82
119
|
if (ok) {
|
|
83
|
-
|
|
120
|
+
sessionState.markBundleInstalled(updateBundleId, targetChannel);
|
|
84
121
|
}
|
|
85
122
|
return ok;
|
|
86
123
|
} finally {
|
|
87
|
-
|
|
124
|
+
sessionState.clearInflightUpdate(updateBundleId);
|
|
88
125
|
}
|
|
89
126
|
})();
|
|
90
|
-
|
|
127
|
+
sessionState.trackInflightUpdate(updateBundleId, promise);
|
|
91
128
|
return promise;
|
|
92
129
|
}
|
|
93
130
|
|
|
@@ -137,8 +174,23 @@ const getBundleId = () => {
|
|
|
137
174
|
*/
|
|
138
175
|
exports.getBundleId = getBundleId;
|
|
139
176
|
const getChannel = () => {
|
|
140
|
-
|
|
141
|
-
|
|
177
|
+
return sessionState.getChannel();
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Fetches the build-time default channel for the app.
|
|
182
|
+
*/
|
|
183
|
+
exports.getChannel = getChannel;
|
|
184
|
+
const getDefaultChannel = () => {
|
|
185
|
+
return sessionState.getDefaultChannel();
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Returns whether the app is currently using a runtime channel override.
|
|
190
|
+
*/
|
|
191
|
+
exports.getDefaultChannel = getDefaultChannel;
|
|
192
|
+
const isChannelSwitched = () => {
|
|
193
|
+
return sessionState.isChannelSwitched();
|
|
142
194
|
};
|
|
143
195
|
|
|
144
196
|
/**
|
|
@@ -146,7 +198,7 @@ const getChannel = () => {
|
|
|
146
198
|
*
|
|
147
199
|
* @returns {string | null} Resolves with the fingerprint hash
|
|
148
200
|
*/
|
|
149
|
-
exports.
|
|
201
|
+
exports.isChannelSwitched = isChannelSwitched;
|
|
150
202
|
const getFingerprintHash = () => {
|
|
151
203
|
const constants = _NativeHotUpdater.default.getConstants();
|
|
152
204
|
return constants.FINGERPRINT_HASH;
|
|
@@ -251,5 +303,20 @@ const getBaseURL = () => {
|
|
|
251
303
|
}
|
|
252
304
|
return null;
|
|
253
305
|
};
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Clears the runtime channel override and restores the original bundle.
|
|
309
|
+
*/
|
|
254
310
|
exports.getBaseURL = getBaseURL;
|
|
311
|
+
const resetChannel = async () => {
|
|
312
|
+
if (!sessionState.isChannelSwitched()) {
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
const ok = await _NativeHotUpdater.default.resetChannel();
|
|
316
|
+
if (ok) {
|
|
317
|
+
sessionState.resetChannelState();
|
|
318
|
+
}
|
|
319
|
+
return ok;
|
|
320
|
+
};
|
|
321
|
+
exports.resetChannel = resetChannel;
|
|
255
322
|
//# sourceMappingURL=native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_error","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_error","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","HotUpdaterNative","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","eventEmitter","NativeEventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAkHpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import { Platform } from "react-native";
|
|
4
4
|
import { HotUpdaterError } from "./error.js";
|
|
5
|
-
import { getAppVersion, getBundleId, getChannel, getFingerprintHash, getMinBundleId, updateBundle } from "./native.js";
|
|
5
|
+
import { getAppVersion, getBundleId, getChannel, getDefaultChannel, getFingerprintHash, getMinBundleId, isChannelSwitched, resetChannel, updateBundle } from "./native.js";
|
|
6
|
+
const NIL_UUID = "00000000-0000-0000-0000-000000000000";
|
|
6
7
|
|
|
7
8
|
// Internal type that includes resolver for use within index.ts
|
|
8
9
|
|
|
10
|
+
const isResetToBuiltInResponse = updateInfo => {
|
|
11
|
+
return updateInfo.status === "ROLLBACK" && updateInfo.id === NIL_UUID && updateInfo.fileUrl === null;
|
|
12
|
+
};
|
|
9
13
|
export async function checkForUpdate(options) {
|
|
10
14
|
if (__DEV__) {
|
|
11
15
|
return null;
|
|
@@ -18,11 +22,22 @@ export async function checkForUpdate(options) {
|
|
|
18
22
|
const platform = Platform.OS;
|
|
19
23
|
const currentBundleId = getBundleId();
|
|
20
24
|
const minBundleId = getMinBundleId();
|
|
21
|
-
const
|
|
25
|
+
const defaultChannel = getDefaultChannel();
|
|
26
|
+
const isSwitched = isChannelSwitched();
|
|
27
|
+
const currentChannel = isSwitched ? getChannel() : defaultChannel;
|
|
28
|
+
const explicitChannel = options.channel || undefined;
|
|
29
|
+
const targetChannel = explicitChannel || currentChannel;
|
|
30
|
+
const isFirstRuntimeChannelSwitchAttempt = !isSwitched && explicitChannel !== undefined && explicitChannel !== defaultChannel;
|
|
31
|
+
const requestBundleId = isFirstRuntimeChannelSwitchAttempt ? minBundleId : currentBundleId;
|
|
22
32
|
if (!currentAppVersion) {
|
|
23
33
|
options.onError?.(new HotUpdaterError("Failed to get app version"));
|
|
24
34
|
return null;
|
|
25
35
|
}
|
|
36
|
+
if (isSwitched && explicitChannel && explicitChannel !== currentChannel) {
|
|
37
|
+
const error = new HotUpdaterError(`Runtime channel is already switched to "${currentChannel}". Call HotUpdater.resetChannel() before checking "${explicitChannel}".`);
|
|
38
|
+
options.onError?.(error);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
26
41
|
const fingerprintHash = getFingerprintHash();
|
|
27
42
|
if (!options.resolver?.checkUpdate) {
|
|
28
43
|
options.onError?.(new HotUpdaterError("Resolver is required but not configured"));
|
|
@@ -33,9 +48,9 @@ export async function checkForUpdate(options) {
|
|
|
33
48
|
updateInfo = await options.resolver.checkUpdate({
|
|
34
49
|
platform,
|
|
35
50
|
appVersion: currentAppVersion,
|
|
36
|
-
bundleId:
|
|
51
|
+
bundleId: requestBundleId,
|
|
37
52
|
minBundleId,
|
|
38
|
-
channel,
|
|
53
|
+
channel: targetChannel,
|
|
39
54
|
updateStrategy: options.updateStrategy,
|
|
40
55
|
fingerprintHash,
|
|
41
56
|
requestHeaders: options.requestHeaders,
|
|
@@ -48,14 +63,23 @@ export async function checkForUpdate(options) {
|
|
|
48
63
|
if (!updateInfo) {
|
|
49
64
|
return null;
|
|
50
65
|
}
|
|
66
|
+
if (explicitChannel && explicitChannel !== defaultChannel && !isSwitched && updateInfo.status === "ROLLBACK") {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
51
69
|
return {
|
|
52
70
|
...updateInfo,
|
|
53
71
|
updateBundle: async () => {
|
|
72
|
+
if (explicitChannel && isSwitched && isResetToBuiltInResponse(updateInfo)) {
|
|
73
|
+
return resetChannel();
|
|
74
|
+
}
|
|
75
|
+
const runtimeChannel = updateInfo.fileUrl !== null ? targetChannel : undefined;
|
|
54
76
|
return updateBundle({
|
|
55
77
|
bundleId: updateInfo.id,
|
|
78
|
+
channel: runtimeChannel,
|
|
56
79
|
fileUrl: updateInfo.fileUrl,
|
|
57
80
|
fileHash: updateInfo.fileHash,
|
|
58
|
-
status: updateInfo.status
|
|
81
|
+
status: updateInfo.status,
|
|
82
|
+
shouldSkipCurrentBundleIdCheck: isFirstRuntimeChannelSwitchAttempt
|
|
59
83
|
});
|
|
60
84
|
}
|
|
61
85
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","HotUpdaterError","getAppVersion","getBundleId","getChannel","getFingerprintHash","getMinBundleId","updateBundle","checkForUpdate","options","__DEV__","includes","OS","onError","currentAppVersion","platform","currentBundleId","minBundleId","channel","
|
|
1
|
+
{"version":3,"names":["Platform","HotUpdaterError","getAppVersion","getBundleId","getChannel","getDefaultChannel","getFingerprintHash","getMinBundleId","isChannelSwitched","resetChannel","updateBundle","NIL_UUID","isResetToBuiltInResponse","updateInfo","status","id","fileUrl","checkForUpdate","options","__DEV__","includes","OS","onError","currentAppVersion","platform","currentBundleId","minBundleId","defaultChannel","isSwitched","currentChannel","explicitChannel","channel","undefined","targetChannel","isFirstRuntimeChannelSwitchAttempt","requestBundleId","error","fingerprintHash","resolver","checkUpdate","appVersion","bundleId","updateStrategy","requestHeaders","requestTimeout","runtimeChannel","fileHash","shouldSkipCurrentBundleIdCheck"],"sourceRoot":"../../src","sources":["checkForUpdate.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { checkForUpdate } from "./checkForUpdate.js";
|
|
4
4
|
import { createDefaultResolver } from "./DefaultResolver.js";
|
|
5
|
-
import { addListener, clearCrashHistory, getAppVersion, getBaseURL, getBundleId, getChannel, getCrashHistory, getFingerprintHash, getMinBundleId, reload, updateBundle } from "./native.js";
|
|
5
|
+
import { addListener, clearCrashHistory, getAppVersion, getBaseURL, getBundleId, getChannel, getCrashHistory, getDefaultChannel, getFingerprintHash, getMinBundleId, isChannelSwitched, reload, resetChannel, updateBundle } from "./native.js";
|
|
6
6
|
import { hotUpdaterStore } from "./store.js";
|
|
7
7
|
import { wrap } from "./wrap.js";
|
|
8
8
|
export * from "./store.js";
|
|
@@ -141,6 +141,25 @@ function createHotUpdaterClient() {
|
|
|
141
141
|
* ```
|
|
142
142
|
*/
|
|
143
143
|
getChannel,
|
|
144
|
+
/**
|
|
145
|
+
* Fetches the build-time default channel of the app.
|
|
146
|
+
*
|
|
147
|
+
* This value does not change when a runtime channel override is active.
|
|
148
|
+
*
|
|
149
|
+
* @returns {string} The default release channel embedded in the app
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* const defaultChannel = HotUpdater.getDefaultChannel();
|
|
153
|
+
* console.log(`Default channel: ${defaultChannel}`);
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
getDefaultChannel,
|
|
157
|
+
/**
|
|
158
|
+
* Returns whether the app is currently using a runtime channel override.
|
|
159
|
+
*
|
|
160
|
+
* @returns {boolean} true when a non-default channel has been applied
|
|
161
|
+
*/
|
|
162
|
+
isChannelSwitched,
|
|
144
163
|
/**
|
|
145
164
|
* Adds a listener to HotUpdater events.
|
|
146
165
|
*
|
|
@@ -164,6 +183,7 @@ function createHotUpdaterClient() {
|
|
|
164
183
|
*
|
|
165
184
|
* @param {Object} config - Update check configuration
|
|
166
185
|
* @param {string} config.source - Update server URL
|
|
186
|
+
* @param {string} [config.channel] - Optional channel override for this update check
|
|
167
187
|
* @param {Record<string, string>} [config.requestHeaders] - Request headers
|
|
168
188
|
*
|
|
169
189
|
* @returns {Promise<UpdateInfo | null>} Update information or null if up to date
|
|
@@ -238,6 +258,21 @@ function createHotUpdaterClient() {
|
|
|
238
258
|
ensureGlobalResolver("updateBundle");
|
|
239
259
|
return updateBundle(params);
|
|
240
260
|
},
|
|
261
|
+
/**
|
|
262
|
+
* Clears the runtime channel override and restores the original bundle.
|
|
263
|
+
*
|
|
264
|
+
* @returns {Promise<boolean>} Resolves with true if reset was successful
|
|
265
|
+
*/
|
|
266
|
+
resetChannel: async () => {
|
|
267
|
+
const ok = await resetChannel();
|
|
268
|
+
if (ok) {
|
|
269
|
+
hotUpdaterStore.setState({
|
|
270
|
+
isUpdateDownloaded: false,
|
|
271
|
+
progress: 0
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return ok;
|
|
275
|
+
},
|
|
241
276
|
/**
|
|
242
277
|
* Fetches the fingerprint of the app.
|
|
243
278
|
*
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkForUpdate","createDefaultResolver","addListener","clearCrashHistory","getAppVersion","getBaseURL","getBundleId","getChannel","getCrashHistory","getFingerprintHash","getMinBundleId","reload","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","options","normalizedOptions","baseURL","rest","requestHeaders","requestTimeout","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAEEA,cAAc,QAET,qBAAkB;AACzB,SAASC,qBAAqB,QAAQ,sBAAmB;AACzD,SACEC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,UAAU,EACVC,WAAW,EACXC,UAAU,EACVC,eAAe,EACfC,kBAAkB,EAClBC,cAAc,EACdC,MAAM,
|
|
1
|
+
{"version":3,"names":["checkForUpdate","createDefaultResolver","addListener","clearCrashHistory","getAppVersion","getBaseURL","getBundleId","getChannel","getCrashHistory","getDefaultChannel","getFingerprintHash","getMinBundleId","isChannelSwitched","reload","resetChannel","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","options","normalizedOptions","baseURL","rest","requestHeaders","requestTimeout","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","ok","setState","progress","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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IACIJ,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIV,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAGuC,MAA6B,IAAK;MACjD,MAAMZ,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,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,OAAOpC,cAAc,CAACwC,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;IACIzB,YAAY,EAAG0B,MAAoB,IAAK;MACtCb,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAOb,YAAY,CAAC0B,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACI3B,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAM4B,EAAE,GAAG,MAAM5B,YAAY,CAAC,CAAC;MAC/B,IAAI4B,EAAE,EAAE;QACN1B,eAAe,CAAC2B,QAAQ,CAAC;UACvBN,kBAAkB,EAAE,KAAK;UACzBO,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOF,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhC,kBAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIL;EACF,CAAC;AACH;AAEA,OAAO,MAAM0C,UAAU,GAAGpB,sBAAsB,CAAC,CAAC","ignoreList":[]}
|
package/lib/module/native.js
CHANGED
|
@@ -8,6 +8,48 @@ const NIL_UUID = "00000000-0000-0000-0000-000000000000";
|
|
|
8
8
|
export const HotUpdaterConstants = {
|
|
9
9
|
HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID
|
|
10
10
|
};
|
|
11
|
+
class HotUpdaterSessionState {
|
|
12
|
+
inflightUpdates = new Map();
|
|
13
|
+
lastInstalledBundleId = null;
|
|
14
|
+
constructor() {
|
|
15
|
+
const constants = HotUpdaterNative.getConstants();
|
|
16
|
+
this.defaultChannel = constants.DEFAULT_CHANNEL ?? constants.CHANNEL;
|
|
17
|
+
this.currentChannel = constants.CHANNEL;
|
|
18
|
+
}
|
|
19
|
+
getChannel() {
|
|
20
|
+
return this.currentChannel;
|
|
21
|
+
}
|
|
22
|
+
getDefaultChannel() {
|
|
23
|
+
return this.defaultChannel;
|
|
24
|
+
}
|
|
25
|
+
isChannelSwitched() {
|
|
26
|
+
return this.currentChannel !== this.defaultChannel;
|
|
27
|
+
}
|
|
28
|
+
hasInstalledBundle(bundleId) {
|
|
29
|
+
return this.lastInstalledBundleId === bundleId;
|
|
30
|
+
}
|
|
31
|
+
getInflightUpdate(bundleId) {
|
|
32
|
+
return this.inflightUpdates.get(bundleId);
|
|
33
|
+
}
|
|
34
|
+
trackInflightUpdate(bundleId, promise) {
|
|
35
|
+
this.inflightUpdates.set(bundleId, promise);
|
|
36
|
+
}
|
|
37
|
+
clearInflightUpdate(bundleId) {
|
|
38
|
+
this.inflightUpdates.delete(bundleId);
|
|
39
|
+
}
|
|
40
|
+
markBundleInstalled(bundleId, channel) {
|
|
41
|
+
this.lastInstalledBundleId = bundleId;
|
|
42
|
+
if (channel) {
|
|
43
|
+
this.currentChannel = channel;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
resetChannelState() {
|
|
47
|
+
this.currentChannel = this.defaultChannel;
|
|
48
|
+
this.lastInstalledBundleId = null;
|
|
49
|
+
this.inflightUpdates.clear();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const sessionState = new HotUpdaterSessionState();
|
|
11
53
|
const eventEmitter = new NativeEventEmitter(HotUpdaterNative);
|
|
12
54
|
export const addListener = (eventName, listener) => {
|
|
13
55
|
const subscription = eventEmitter.addListener(eventName, listener);
|
|
@@ -15,10 +57,6 @@ export const addListener = (eventName, listener) => {
|
|
|
15
57
|
subscription.remove();
|
|
16
58
|
};
|
|
17
59
|
};
|
|
18
|
-
// In-flight update deduplication by bundleId (session-scoped).
|
|
19
|
-
const inflightUpdates = new Map();
|
|
20
|
-
// Tracks the last successfully installed bundleId for this session.
|
|
21
|
-
let lastInstalledBundleId = null;
|
|
22
60
|
|
|
23
61
|
/**
|
|
24
62
|
* Downloads files and applies them to the app.
|
|
@@ -37,37 +75,37 @@ export async function updateBundle(paramsOrBundleId, fileUrl) {
|
|
|
37
75
|
const status = typeof paramsOrBundleId === "string" ? "UPDATE" : paramsOrBundleId.status;
|
|
38
76
|
|
|
39
77
|
// If we have already installed this bundle in this session, skip re-download.
|
|
40
|
-
if (status === "UPDATE" &&
|
|
78
|
+
if (status === "UPDATE" && sessionState.hasInstalledBundle(updateBundleId)) {
|
|
41
79
|
return true;
|
|
42
80
|
}
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (status === "UPDATE" && updateBundleId.localeCompare(currentBundleId) <= 0) {
|
|
47
|
-
throw new Error("Update bundle id is the same as the current bundle id. Preventing infinite update loop.");
|
|
81
|
+
const shouldSkipCurrentBundleIdCheck = typeof paramsOrBundleId === "string" ? false : paramsOrBundleId.shouldSkipCurrentBundleIdCheck === true;
|
|
82
|
+
if (!shouldSkipCurrentBundleIdCheck && status === "UPDATE" && updateBundleId.localeCompare(getBundleId()) <= 0) {
|
|
83
|
+
throw new Error("Update bundle id is not newer than the current bundle id. Preventing infinite update loop.");
|
|
48
84
|
}
|
|
49
85
|
|
|
50
86
|
// In-flight guard: return the same promise if the same bundle is already updating.
|
|
51
|
-
const existing =
|
|
87
|
+
const existing = sessionState.getInflightUpdate(updateBundleId);
|
|
52
88
|
if (existing) return existing;
|
|
53
89
|
const targetFileUrl = typeof paramsOrBundleId === "string" ? fileUrl ?? null : paramsOrBundleId.fileUrl;
|
|
54
90
|
const targetFileHash = typeof paramsOrBundleId === "string" ? undefined : paramsOrBundleId.fileHash;
|
|
91
|
+
const targetChannel = typeof paramsOrBundleId === "string" ? undefined : paramsOrBundleId.channel;
|
|
55
92
|
const promise = (async () => {
|
|
56
93
|
try {
|
|
57
94
|
const ok = await HotUpdaterNative.updateBundle({
|
|
58
95
|
bundleId: updateBundleId,
|
|
96
|
+
channel: targetChannel,
|
|
59
97
|
fileUrl: targetFileUrl,
|
|
60
98
|
fileHash: targetFileHash ?? null
|
|
61
99
|
});
|
|
62
100
|
if (ok) {
|
|
63
|
-
|
|
101
|
+
sessionState.markBundleInstalled(updateBundleId, targetChannel);
|
|
64
102
|
}
|
|
65
103
|
return ok;
|
|
66
104
|
} finally {
|
|
67
|
-
|
|
105
|
+
sessionState.clearInflightUpdate(updateBundleId);
|
|
68
106
|
}
|
|
69
107
|
})();
|
|
70
|
-
|
|
108
|
+
sessionState.trackInflightUpdate(updateBundleId, promise);
|
|
71
109
|
return promise;
|
|
72
110
|
}
|
|
73
111
|
|
|
@@ -113,8 +151,21 @@ export const getBundleId = () => {
|
|
|
113
151
|
* @returns {string} Resolves with the channel or null if not available.
|
|
114
152
|
*/
|
|
115
153
|
export const getChannel = () => {
|
|
116
|
-
|
|
117
|
-
|
|
154
|
+
return sessionState.getChannel();
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Fetches the build-time default channel for the app.
|
|
159
|
+
*/
|
|
160
|
+
export const getDefaultChannel = () => {
|
|
161
|
+
return sessionState.getDefaultChannel();
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Returns whether the app is currently using a runtime channel override.
|
|
166
|
+
*/
|
|
167
|
+
export const isChannelSwitched = () => {
|
|
168
|
+
return sessionState.isChannelSwitched();
|
|
118
169
|
};
|
|
119
170
|
|
|
120
171
|
/**
|
|
@@ -223,4 +274,18 @@ export const getBaseURL = () => {
|
|
|
223
274
|
}
|
|
224
275
|
return null;
|
|
225
276
|
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Clears the runtime channel override and restores the original bundle.
|
|
280
|
+
*/
|
|
281
|
+
export const resetChannel = async () => {
|
|
282
|
+
if (!sessionState.isChannelSwitched()) {
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
const ok = await HotUpdaterNative.resetChannel();
|
|
286
|
+
if (ok) {
|
|
287
|
+
sessionState.resetChannelState();
|
|
288
|
+
}
|
|
289
|
+
return ok;
|
|
290
|
+
};
|
|
226
291
|
//# sourceMappingURL=native.js.map
|
package/lib/module/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","HotUpdaterErrorCode","isHotUpdaterError","HotUpdaterNative","NIL_UUID","HotUpdaterConstants","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","HotUpdaterErrorCode","isHotUpdaterError","HotUpdaterNative","NIL_UUID","HotUpdaterConstants","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","eventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAkHlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
|
|
@@ -8,6 +8,11 @@ export interface CheckForUpdateOptions {
|
|
|
8
8
|
* - Can override the strategy set in HotUpdater.wrap()
|
|
9
9
|
*/
|
|
10
10
|
updateStrategy: "appVersion" | "fingerprint";
|
|
11
|
+
/**
|
|
12
|
+
* Override the current channel when checking for updates.
|
|
13
|
+
* The channel switch is only persisted after the returned update is applied.
|
|
14
|
+
*/
|
|
15
|
+
channel?: string;
|
|
11
16
|
requestHeaders?: Record<string, string>;
|
|
12
17
|
onError?: (error: Error) => void;
|
|
13
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkForUpdate.d.ts","sourceRoot":"","sources":["../../../src/checkForUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAcvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD,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,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;AAUD,wBAAsB,cAAc,CAClC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA2GtC"}
|