@hot-updater/react-native 0.18.5 → 0.19.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/HotUpdater.kt +7 -0
- package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +13 -0
- package/android/src/newarch/HotUpdaterModule.kt +1 -0
- package/android/src/oldarch/HotUpdaterModule.kt +1 -0
- package/ios/HotUpdater/Internal/HotUpdater.mm +2 -1
- package/ios/HotUpdater/Internal/HotUpdaterImpl.swift +8 -2
- package/lib/commonjs/checkForUpdate.js +27 -20
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/fetchUpdateInfo.js +53 -48
- package/lib/commonjs/fetchUpdateInfo.js.map +1 -1
- package/lib/commonjs/index.js +0 -12
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native.js +5 -19
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
- package/lib/module/checkForUpdate.js +28 -21
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/fetchUpdateInfo.js +53 -48
- package/lib/module/fetchUpdateInfo.js.map +1 -1
- package/lib/module/index.js +1 -13
- package/lib/module/index.js.map +1 -1
- package/lib/module/native.js +4 -17
- package/lib/module/native.js.map +1 -1
- package/lib/module/specs/NativeHotUpdater.js.map +1 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts +11 -2
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts +9 -3
- package/lib/typescript/commonjs/fetchUpdateInfo.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +0 -12
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/native.d.ts +1 -5
- package/lib/typescript/commonjs/native.d.ts.map +1 -1
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +1 -0
- package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
- package/lib/typescript/module/checkForUpdate.d.ts +11 -2
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/fetchUpdateInfo.d.ts +9 -3
- package/lib/typescript/module/fetchUpdateInfo.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +0 -12
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/native.d.ts +1 -5
- package/lib/typescript/module/native.d.ts.map +1 -1
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts +1 -0
- package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
- package/package.json +10 -5
- package/plugin/build/withHotUpdater.js +138 -7
- package/src/checkForUpdate.ts +44 -35
- package/src/fetchUpdateInfo.ts +65 -51
- package/src/index.ts +0 -13
- package/src/native.ts +4 -22
- package/src/specs/NativeHotUpdater.ts +1 -0
|
@@ -33,6 +33,13 @@ class HotUpdater : ReactPackage {
|
|
|
33
33
|
*/
|
|
34
34
|
fun getMinBundleId(context: Context): String = HotUpdaterFactory.getInstance(context).getMinBundleId()
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Gets the current fingerprint hash
|
|
38
|
+
* @param context Application context
|
|
39
|
+
* @return The fingerprint hash or null if not set
|
|
40
|
+
*/
|
|
41
|
+
fun getFingerprintHash(context: Context): String? = HotUpdaterFactory.getInstance(context).getFingerprintHash()
|
|
42
|
+
|
|
36
43
|
/**
|
|
37
44
|
* Gets the current update channel
|
|
38
45
|
* @param context Application context
|
|
@@ -117,6 +117,19 @@ class HotUpdaterImpl(
|
|
|
117
117
|
"00000000-0000-0000-0000-000000000000"
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Gets the current fingerprint hash
|
|
122
|
+
* @return The fingerprint hash or null if not set
|
|
123
|
+
*/
|
|
124
|
+
fun getFingerprintHash(): String? {
|
|
125
|
+
val id = context.resources.getIdentifier("hot_updater_fingerprint_hash", "string", context.packageName)
|
|
126
|
+
return if (id != 0) {
|
|
127
|
+
context.getString(id).takeIf { it.isNotEmpty() }
|
|
128
|
+
} else {
|
|
129
|
+
null
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
120
133
|
/**
|
|
121
134
|
* Gets the current update channel
|
|
122
135
|
* @return The channel name or null if not set
|
|
@@ -65,6 +65,7 @@ class HotUpdaterModule internal constructor(
|
|
|
65
65
|
constants["MIN_BUNDLE_ID"] = HotUpdater.getMinBundleId(mReactApplicationContext)
|
|
66
66
|
constants["APP_VERSION"] = HotUpdater.getAppVersion(mReactApplicationContext)
|
|
67
67
|
constants["CHANNEL"] = HotUpdater.getChannel(mReactApplicationContext)
|
|
68
|
+
constants["FINGERPRINT_HASH"] = HotUpdater.getFingerprintHash(mReactApplicationContext)
|
|
68
69
|
return constants
|
|
69
70
|
}
|
|
70
71
|
|
|
@@ -80,6 +80,7 @@ class HotUpdaterModule internal constructor(
|
|
|
80
80
|
constants["MIN_BUNDLE_ID"] = HotUpdater.getMinBundleId(mReactApplicationContext)
|
|
81
81
|
constants["APP_VERSION"] = HotUpdater.getAppVersion(mReactApplicationContext)
|
|
82
82
|
constants["CHANNEL"] = HotUpdater.getChannel(mReactApplicationContext)
|
|
83
|
+
constants["FINGERPRINT_HASH"] = HotUpdater.getFingerprintHash(mReactApplicationContext)
|
|
83
84
|
return constants
|
|
84
85
|
}
|
|
85
86
|
|
|
@@ -108,7 +108,8 @@ RCT_EXPORT_MODULE();
|
|
|
108
108
|
return @{
|
|
109
109
|
@"MIN_BUNDLE_ID": [self getMinBundleId] ?: [NSNull null], // Local
|
|
110
110
|
@"APP_VERSION": [HotUpdaterImpl appVersion] ?: [NSNull null], // Swift
|
|
111
|
-
@"CHANNEL": [_hotUpdaterImpl getChannel] ?: [NSNull null]
|
|
111
|
+
@"CHANNEL": [_hotUpdaterImpl getChannel] ?: [NSNull null], // Swift
|
|
112
|
+
@"FINGERPRINT_HASH": [_hotUpdaterImpl getFingerprintHash] ?: [NSNull null] // Swift
|
|
112
113
|
};
|
|
113
114
|
}
|
|
114
115
|
|
|
@@ -69,12 +69,18 @@ import React
|
|
|
69
69
|
* Gets the current update channel.
|
|
70
70
|
* @return The channel name or nil if not set
|
|
71
71
|
*/
|
|
72
|
-
|
|
73
72
|
public func getChannel() -> String {
|
|
74
73
|
return Bundle.main.object(forInfoDictionaryKey: "HOT_UPDATER_CHANNEL") as? String ?? Self.DEFAULT_CHANNEL
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Gets the current fingerprint hash.
|
|
78
|
+
* @return The fingerprint hash or nil if not set
|
|
79
|
+
*/
|
|
80
|
+
public func getFingerprintHash() -> String? {
|
|
81
|
+
return Bundle.main.object(forInfoDictionaryKey: "HOT_UPDATER_FINGERPRINT_HASH") as? String
|
|
82
|
+
}
|
|
83
|
+
|
|
78
84
|
// MARK: - Bundle URL Management
|
|
79
85
|
|
|
80
86
|
/**
|
|
@@ -26,21 +26,21 @@ async function checkForUpdate(options) {
|
|
|
26
26
|
options.onError?.(new _error.HotUpdaterError("Failed to get app version"));
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
29
|
+
const fingerprintHash = (0, _native.getFingerprintHash)();
|
|
30
|
+
return (0, _fetchUpdateInfo.fetchUpdateInfo)({
|
|
31
|
+
source: options.source,
|
|
32
|
+
params: {
|
|
33
|
+
bundleId: currentBundleId,
|
|
34
|
+
appVersion: currentAppVersion,
|
|
35
|
+
platform,
|
|
36
|
+
minBundleId,
|
|
37
|
+
channel,
|
|
38
|
+
fingerprintHash
|
|
39
|
+
},
|
|
40
|
+
requestHeaders: options.requestHeaders,
|
|
41
|
+
onError: options.onError,
|
|
42
|
+
requestTimeout: options.requestTimeout
|
|
43
|
+
}).then(updateInfo => {
|
|
44
44
|
if (!updateInfo) {
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
@@ -56,12 +56,19 @@ async function checkForUpdate(options) {
|
|
|
56
56
|
};
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
const getUpdateSource = baseUrl =>
|
|
60
|
-
switch (
|
|
61
|
-
case "appVersion":
|
|
62
|
-
return `${baseUrl}/app-version/${args.platform}/${args.appVersion}/${args.channel}/${args.minBundleId}/${args.bundleId}`;
|
|
59
|
+
const getUpdateSource = (baseUrl, options) => params => {
|
|
60
|
+
switch (options.updateStrategy) {
|
|
63
61
|
case "fingerprint":
|
|
64
|
-
|
|
62
|
+
{
|
|
63
|
+
if (!params.fingerprintHash) {
|
|
64
|
+
throw new _error.HotUpdaterError("Fingerprint hash is required");
|
|
65
|
+
}
|
|
66
|
+
return `${baseUrl}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
67
|
+
}
|
|
68
|
+
case "appVersion":
|
|
69
|
+
{
|
|
70
|
+
return `${baseUrl}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
71
|
+
}
|
|
65
72
|
default:
|
|
66
73
|
return baseUrl;
|
|
67
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_error","_fetchUpdateInfo","_native","checkForUpdate","options","__DEV__","includes","Platform","OS","onError","HotUpdaterError","currentAppVersion","getAppVersion","platform","currentBundleId","getBundleId","minBundleId","getMinBundleId","channel","getChannel","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_error","_fetchUpdateInfo","_native","checkForUpdate","options","__DEV__","includes","Platform","OS","onError","HotUpdaterError","currentAppVersion","getAppVersion","platform","currentBundleId","getBundleId","minBundleId","getMinBundleId","channel","getChannel","fingerprintHash","getFingerprintHash","fetchUpdateInfo","source","params","bundleId","appVersion","requestHeaders","requestTimeout","then","updateInfo","updateBundle","id","fileUrl","status","getUpdateSource","baseUrl","updateStrategy","exports"],"sourceRoot":"../../src","sources":["checkForUpdate.ts"],"mappings":";;;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AA4BO,eAAeI,cAAcA,CAClCC,OAA8B,EACQ;EACtC,IAAIC,OAAO,EAAE;IACX,OAAO,IAAI;EACb;EAEA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAACC,QAAQ,CAACC,qBAAQ,CAACC,EAAE,CAAC,EAAE;IAC7CJ,OAAO,CAACK,OAAO,GACb,IAAIC,sBAAe,CAAC,iDAAiD,CACvE,CAAC;IACD,OAAO,IAAI;EACb;EAEA,MAAMC,iBAAiB,GAAG,IAAAC,qBAAa,EAAC,CAAC;EACzC,MAAMC,QAAQ,GAAGN,qBAAQ,CAACC,EAAuB;EACjD,MAAMM,eAAe,GAAG,IAAAC,mBAAW,EAAC,CAAC;EACrC,MAAMC,WAAW,GAAG,IAAAC,sBAAc,EAAC,CAAC;EACpC,MAAMC,OAAO,GAAG,IAAAC,kBAAU,EAAC,CAAC;EAE5B,IAAI,CAACR,iBAAiB,EAAE;IACtBP,OAAO,CAACK,OAAO,GAAG,IAAIC,sBAAe,CAAC,2BAA2B,CAAC,CAAC;IACnE,OAAO,IAAI;EACb;EAEA,MAAMU,eAAe,GAAG,IAAAC,0BAAkB,EAAC,CAAC;EAE5C,OAAO,IAAAC,gCAAe,EAAC;IACrBC,MAAM,EAAEnB,OAAO,CAACmB,MAAM;IACtBC,MAAM,EAAE;MACNC,QAAQ,EAAEX,eAAe;MACzBY,UAAU,EAAEf,iBAAiB;MAC7BE,QAAQ;MACRG,WAAW;MACXE,OAAO;MACPE;IACF,CAAC;IACDO,cAAc,EAAEvB,OAAO,CAACuB,cAAc;IACtClB,OAAO,EAAEL,OAAO,CAACK,OAAO;IACxBmB,cAAc,EAAExB,OAAO,CAACwB;EAC1B,CAAC,CAAC,CAACC,IAAI,CAAEC,UAAU,IAAK;IACtB,IAAI,CAACA,UAAU,EAAE;MACf,OAAO,IAAI;IACb;IAEA,OAAO;MACL,GAAGA,UAAU;MACbC,YAAY,EAAE,MAAAA,CAAA,KAAY;QACxB,OAAO,IAAAA,oBAAY,EAAC;UAClBN,QAAQ,EAAEK,UAAU,CAACE,EAAE;UACvBC,OAAO,EAAEH,UAAU,CAACG,OAAO;UAC3BC,MAAM,EAAEJ,UAAU,CAACI;QACrB,CAAC,CAAC;MACJ;IACF,CAAC;EACH,CAAC,CAAC;AACJ;AAYO,MAAMC,eAAe,GAC1BA,CAACC,OAAe,EAAEhC,OAA+B,KAChDoB,MAA0B,IAAK;EAC9B,QAAQpB,OAAO,CAACiC,cAAc;IAC5B,KAAK,aAAa;MAAE;QAClB,IAAI,CAACb,MAAM,CAACJ,eAAe,EAAE;UAC3B,MAAM,IAAIV,sBAAe,CAAC,8BAA8B,CAAC;QAC3D;QACA,OAAO,GAAG0B,OAAO,gBAAgBZ,MAAM,CAACX,QAAQ,IAAIW,MAAM,CAACJ,eAAe,IAAII,MAAM,CAACN,OAAO,IAAIM,MAAM,CAACR,WAAW,IAAIQ,MAAM,CAACC,QAAQ,EAAE;MACzI;IACA,KAAK,YAAY;MAAE;QACjB,OAAO,GAAGW,OAAO,gBAAgBZ,MAAM,CAACX,QAAQ,IAAIW,MAAM,CAACE,UAAU,IAAIF,MAAM,CAACN,OAAO,IAAIM,MAAM,CAACR,WAAW,IAAIQ,MAAM,CAACC,QAAQ,EAAE;MACpI;IACA;MACE,OAAOW,OAAO;EAClB;AACF,CAAC;AAACE,OAAA,CAAAH,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -4,55 +4,60 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.fetchUpdateInfo = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
function buildRequestHeaders(params, requestHeaders) {
|
|
8
|
+
const updateStrategy = params.fingerprintHash ? "fingerprint" : "appVersion";
|
|
9
|
+
return {
|
|
10
|
+
"Content-Type": "application/json",
|
|
11
|
+
"x-app-platform": params.platform,
|
|
12
|
+
"x-bundle-id": params.bundleId,
|
|
13
|
+
...(updateStrategy === "fingerprint" ? {
|
|
14
|
+
"x-fingerprint-hash": params.fingerprintHash
|
|
15
|
+
} : {
|
|
16
|
+
"x-app-version": params.appVersion
|
|
17
|
+
}),
|
|
18
|
+
...(params.minBundleId && {
|
|
19
|
+
"x-min-bundle-id": params.minBundleId
|
|
20
|
+
}),
|
|
21
|
+
...(params.channel && {
|
|
22
|
+
"x-channel": params.channel
|
|
23
|
+
}),
|
|
24
|
+
...(requestHeaders ?? {})
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function resolveSource(source, params) {
|
|
28
|
+
if (typeof source !== "function") {
|
|
29
|
+
return {
|
|
30
|
+
url: source
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const result = source(params);
|
|
34
|
+
if (typeof result === "string") {
|
|
35
|
+
return {
|
|
36
|
+
url: result
|
|
37
|
+
};
|
|
14
38
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
39
|
+
return {
|
|
40
|
+
info: await result
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const fetchUpdateInfo = async ({
|
|
44
|
+
source,
|
|
45
|
+
params,
|
|
46
|
+
requestHeaders,
|
|
47
|
+
onError,
|
|
48
|
+
requestTimeout = 5000
|
|
49
|
+
}) => {
|
|
19
50
|
try {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
headers = {
|
|
24
|
-
"Content-Type": "application/json",
|
|
25
|
-
"x-app-platform": args.platform,
|
|
26
|
-
"x-bundle-id": args.bundleId,
|
|
27
|
-
"x-fingerprint-hash": args.fingerprintHash,
|
|
28
|
-
...(args.minBundleId ? {
|
|
29
|
-
"x-min-bundle-id": args.minBundleId
|
|
30
|
-
} : {}),
|
|
31
|
-
...(args.channel ? {
|
|
32
|
-
"x-channel": args.channel
|
|
33
|
-
} : {}),
|
|
34
|
-
...requestHeaders
|
|
35
|
-
};
|
|
36
|
-
break;
|
|
37
|
-
case "appVersion":
|
|
38
|
-
headers = {
|
|
39
|
-
"Content-Type": "application/json",
|
|
40
|
-
"x-app-platform": args.platform,
|
|
41
|
-
"x-bundle-id": args.bundleId,
|
|
42
|
-
"x-app-version": args.appVersion,
|
|
43
|
-
...(args.minBundleId ? {
|
|
44
|
-
"x-min-bundle-id": args.minBundleId
|
|
45
|
-
} : {}),
|
|
46
|
-
...(args.channel ? {
|
|
47
|
-
"x-channel": args.channel
|
|
48
|
-
} : {}),
|
|
49
|
-
...requestHeaders
|
|
50
|
-
};
|
|
51
|
-
break;
|
|
52
|
-
default:
|
|
53
|
-
throw new Error("Invalid update strategy");
|
|
51
|
+
const resolvedSource = await resolveSource(source, params);
|
|
52
|
+
if ("info" in resolvedSource) {
|
|
53
|
+
return resolvedSource.info;
|
|
54
54
|
}
|
|
55
|
-
const
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
const timeoutId = setTimeout(() => {
|
|
57
|
+
controller.abort();
|
|
58
|
+
}, requestTimeout);
|
|
59
|
+
const headers = buildRequestHeaders(params, requestHeaders);
|
|
60
|
+
const response = await fetch(resolvedSource.url, {
|
|
56
61
|
signal: controller.signal,
|
|
57
62
|
headers
|
|
58
63
|
});
|
|
@@ -64,9 +69,9 @@ const fetchUpdateInfo = async (source, args, requestHeaders, onError, requestTim
|
|
|
64
69
|
} catch (error) {
|
|
65
70
|
if (error.name === "AbortError") {
|
|
66
71
|
onError?.(new Error("Request timed out"));
|
|
67
|
-
|
|
72
|
+
} else {
|
|
73
|
+
onError?.(error);
|
|
68
74
|
}
|
|
69
|
-
onError?.(error);
|
|
70
75
|
return null;
|
|
71
76
|
}
|
|
72
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["buildRequestHeaders","params","requestHeaders","updateStrategy","fingerprintHash","platform","bundleId","appVersion","minBundleId","channel","resolveSource","source","url","result","info","fetchUpdateInfo","onError","requestTimeout","resolvedSource","controller","AbortController","timeoutId","setTimeout","abort","headers","response","fetch","signal","clearTimeout","status","Error","statusText","json","error","name","exports"],"sourceRoot":"../../src","sources":["fetchUpdateInfo.ts"],"mappings":";;;;;;AAWA,SAASA,mBAAmBA,CAC1BC,MAA0B,EAC1BC,cAAuC,EACf;EACxB,MAAMC,cAA8B,GAAGF,MAAM,CAACG,eAAe,GACzD,aAAa,GACb,YAAY;EAEhB,OAAO;IACL,cAAc,EAAE,kBAAkB;IAClC,gBAAgB,EAAEH,MAAM,CAACI,QAAQ;IACjC,aAAa,EAAEJ,MAAM,CAACK,QAAQ;IAC9B,IAAIH,cAAc,KAAK,aAAa,GAChC;MAAE,oBAAoB,EAAEF,MAAM,CAACG;IAAiB,CAAC,GACjD;MAAE,eAAe,EAAEH,MAAM,CAACM;IAAW,CAAC,CAAC;IAC3C,IAAIN,MAAM,CAACO,WAAW,IAAI;MAAE,iBAAiB,EAAEP,MAAM,CAACO;IAAY,CAAC,CAAC;IACpE,IAAIP,MAAM,CAACQ,OAAO,IAAI;MAAE,WAAW,EAAER,MAAM,CAACQ;IAAQ,CAAC,CAAC;IACtD,IAAIP,cAAc,IAAI,CAAC,CAAC;EAC1B,CAAC;AACH;AAEA,eAAeQ,aAAaA,CAC1BC,MAAoB,EACpBV,MAA0B,EACiC;EAC3D,IAAI,OAAOU,MAAM,KAAK,UAAU,EAAE;IAChC,OAAO;MAAEC,GAAG,EAAED;IAAO,CAAC;EACxB;EACA,MAAME,MAAM,GAAGF,MAAM,CAACV,MAAM,CAAC;EAC7B,IAAI,OAAOY,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAO;MAAED,GAAG,EAAEC;IAAO,CAAC;EACxB;EACA,OAAO;IAAEC,IAAI,EAAE,MAAMD;EAAO,CAAC;AAC/B;AAEO,MAAME,eAAe,GAAG,MAAAA,CAAO;EACpCJ,MAAM;EACNV,MAAM;EACNC,cAAc;EACdc,OAAO;EACPC,cAAc,GAAG;AAOnB,CAAC,KAAoC;EACnC,IAAI;IACF,MAAMC,cAAc,GAAG,MAAMR,aAAa,CAACC,MAAM,EAAEV,MAAM,CAAC;IAC1D,IAAI,MAAM,IAAIiB,cAAc,EAAE;MAC5B,OAAOA,cAAc,CAACJ,IAAI;IAC5B;IAEA,MAAMK,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;IACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAM;MACjCH,UAAU,CAACI,KAAK,CAAC,CAAC;IACpB,CAAC,EAAEN,cAAc,CAAC;IAElB,MAAMO,OAAO,GAAGxB,mBAAmB,CAACC,MAAM,EAAEC,cAAc,CAAC;IAE3D,MAAMuB,QAAQ,GAAG,MAAMC,KAAK,CAACR,cAAc,CAACN,GAAG,EAAE;MAC/Ce,MAAM,EAAER,UAAU,CAACQ,MAAM;MACzBH;IACF,CAAC,CAAC;IACFI,YAAY,CAACP,SAAS,CAAC;IAEvB,IAAII,QAAQ,CAACI,MAAM,KAAK,GAAG,EAAE;MAC3B,MAAM,IAAIC,KAAK,CAACL,QAAQ,CAACM,UAAU,CAAC;IACtC;IACA,OAAON,QAAQ,CAACO,IAAI,CAAC,CAAC;EACxB,CAAC,CAAC,OAAOC,KAAU,EAAE;IACnB,IAAIA,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;MAC/BlB,OAAO,GAAG,IAAIc,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC,MAAM;MACLd,OAAO,GAAGiB,KAAc,CAAC;IAC3B;IACA,OAAO,IAAI;EACb;AACF,CAAC;AAACE,OAAA,CAAApB,eAAA,GAAAA,eAAA","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -91,18 +91,6 @@ const HotUpdater = exports.HotUpdater = {
|
|
|
91
91
|
* ```
|
|
92
92
|
*/
|
|
93
93
|
getChannel: _native.getChannel,
|
|
94
|
-
/**
|
|
95
|
-
* The initial channel of the native app.
|
|
96
|
-
*
|
|
97
|
-
* @returns {string} The current release channel of the app
|
|
98
|
-
* @default "production"
|
|
99
|
-
* @example
|
|
100
|
-
* ```ts
|
|
101
|
-
* const channel = HotUpdater.getReleaseChannel();
|
|
102
|
-
* console.log(`Current release channel: ${channel}`);
|
|
103
|
-
* ```
|
|
104
|
-
*/
|
|
105
|
-
getReleaseChannel: _native.getReleaseChannel,
|
|
106
94
|
/**
|
|
107
95
|
* Adds a listener to HotUpdater events.
|
|
108
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_checkForUpdate","require","_native","_runUpdateProcess","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","addListener","progress","hotUpdaterStore","setState","HotUpdater","wrap","reload","getAppVersion","getBundleId","getMinBundleId","getChannel","
|
|
1
|
+
{"version":3,"names":["_checkForUpdate","require","_native","_runUpdateProcess","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","addListener","progress","hotUpdaterStore","setState","HotUpdater","wrap","reload","getAppVersion","getBundleId","getMinBundleId","getChannel","checkForUpdate","runUpdateProcess","updateBundle","getFingerprintHash"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAUA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAMAI,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AALA,IAAAS,KAAA,GAAAhB,OAAA;AAOA,IAAAiB,mBAAW,EAAC,YAAY,EAAE,CAAC;EAAEC;AAAS,CAAC,KAAK;EAC1CC,sBAAe,CAACC,QAAQ,CAAC;IACvBF;EACF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAMG,UAAU,GAAAT,OAAA,CAAAS,UAAA,GAAG;EACxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,IAAI,EAAJA,UAAI;EACJ;AACF;AACA;EACEC,MAAM,EAANA,cAAM;EACN;AACF;AACA;EACEC,aAAa,EAAbA,qBAAa;EACb;AACF;AACA;EACEC,WAAW,EAAXA,mBAAW;EACX;AACF;AACA;EACEC,cAAc,EAAdA,sBAAc;EACd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAAU,EAAVA,kBAAU;EACV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEV,WAAW,EAAXA,mBAAW;EACX;AACF;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;EACEW,cAAc,EAAdA,8BAAc;EACd;AACF;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;EACEC,gBAAgB,EAAhBA,kCAAgB;EAChB;AACF;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;EACEC,YAAY,EAAZA,oBAAY;EACZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAlBA;AACF,CAAC","ignoreList":[]}
|
package/lib/commonjs/native.js
CHANGED
|
@@ -3,21 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.reload = exports.
|
|
6
|
+
exports.reload = exports.getMinBundleId = exports.getFingerprintHash = exports.getChannel = exports.getBundleId = exports.getAppVersion = exports.addListener = exports.HotUpdaterConstants = void 0;
|
|
7
7
|
exports.updateBundle = updateBundle;
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var _NativeHotUpdater = _interopRequireDefault(require("./specs/NativeHotUpdater.js"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
const NIL_UUID = "00000000-0000-0000-0000-000000000000";
|
|
12
12
|
const HotUpdaterConstants = exports.HotUpdaterConstants = {
|
|
13
|
-
|
|
14
|
-
HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID,
|
|
15
|
-
FINGERPRINT_HASH: _reactNative.Platform.select({
|
|
16
|
-
ios: __HOT_UPDATER_FINGERPRINT_HASH_IOS,
|
|
17
|
-
android: __HOT_UPDATER_FINGERPRINT_HASH_ANDROID,
|
|
18
|
-
default: null
|
|
19
|
-
}),
|
|
20
|
-
UPDATE_STRATEGY: __HOT_UPDATER_UPDATE_STRATEGY
|
|
13
|
+
HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID
|
|
21
14
|
};
|
|
22
15
|
const addListener = (eventName, listener) => {
|
|
23
16
|
const eventEmitter = new _reactNative.NativeEventEmitter(_NativeHotUpdater.default);
|
|
@@ -107,14 +100,6 @@ const getBundleId = () => {
|
|
|
107
100
|
*/
|
|
108
101
|
exports.getBundleId = getBundleId;
|
|
109
102
|
const getChannel = () => {
|
|
110
|
-
if (HotUpdaterConstants.OVER_THE_AIR_CHANNEL) {
|
|
111
|
-
return HotUpdaterConstants.OVER_THE_AIR_CHANNEL;
|
|
112
|
-
}
|
|
113
|
-
const constants = _NativeHotUpdater.default.getConstants();
|
|
114
|
-
return constants.CHANNEL;
|
|
115
|
-
};
|
|
116
|
-
exports.getChannel = getChannel;
|
|
117
|
-
const getReleaseChannel = () => {
|
|
118
103
|
const constants = _NativeHotUpdater.default.getConstants();
|
|
119
104
|
return constants.CHANNEL;
|
|
120
105
|
};
|
|
@@ -124,9 +109,10 @@ const getReleaseChannel = () => {
|
|
|
124
109
|
*
|
|
125
110
|
* @returns {string | null} Resolves with the fingerprint hash
|
|
126
111
|
*/
|
|
127
|
-
exports.
|
|
112
|
+
exports.getChannel = getChannel;
|
|
128
113
|
const getFingerprintHash = () => {
|
|
129
|
-
|
|
114
|
+
const constants = _NativeHotUpdater.default.getConstants();
|
|
115
|
+
return constants.FINGERPRINT_HASH;
|
|
130
116
|
};
|
|
131
117
|
exports.getFingerprintHash = getFingerprintHash;
|
|
132
118
|
//# sourceMappingURL=native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","addListener","eventName","listener","eventEmitter","NativeEventEmitter","HotUpdaterNative","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","bundleId","status","currentBundleId","getBundleId","localeCompare","Error","getAppVersion","constants","getConstants","APP_VERSION","reload","requestAnimationFrame","getMinBundleId","MIN_BUNDLE_ID","getChannel","CHANNEL","getFingerprintHash","FINGERPRINT_HASH"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":";;;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEkC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC,MAAMG,QAAQ,GAAG,sCAAsC;AAIhD,MAAMC,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG;EACjCE,qBAAqB,EAAEC,uBAAuB,IAAIJ;AACpD,CAAC;AAQM,MAAMK,WAAW,GAAGA,CACzBC,SAAY,EACZC,QAA6C,KAC1C;EACH,MAAMC,YAAY,GAAG,IAAIC,+BAAkB,CAACC,yBAAgB,CAAC;EAC7D,MAAMC,YAAY,GAAGH,YAAY,CAACH,WAAW,CAACC,SAAS,EAAEC,QAAQ,CAAC;EAElE,OAAO,MAAM;IACXI,YAAY,CAACC,MAAM,CAAC,CAAC;EACvB,CAAC;AACH,CAAC;;AAMD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAFAV,OAAA,CAAAG,WAAA,GAAAA,WAAA;AAOO,eAAeQ,YAAYA,CAChCC,gBAAuC,EACvCC,OAAuB,EACL;EAClB,MAAMC,cAAc,GAClB,OAAOF,gBAAgB,KAAK,QAAQ,GAChCA,gBAAgB,GAChBA,gBAAgB,CAACG,QAAQ;EAE/B,MAAMC,MAAM,GACV,OAAOJ,gBAAgB,KAAK,QAAQ,GAAG,QAAQ,GAAGA,gBAAgB,CAACI,MAAM;EAE3E,MAAMC,eAAe,GAAGC,WAAW,CAAC,CAAC;;EAErC;EACA,IACEF,MAAM,KAAK,QAAQ,IACnBF,cAAc,CAACK,aAAa,CAACF,eAAe,CAAC,IAAI,CAAC,EAClD;IACA,MAAM,IAAIG,KAAK,CACb,yFACF,CAAC;EACH;EAEA,IAAI,OAAOR,gBAAgB,KAAK,QAAQ,EAAE;IACxC,OAAOJ,yBAAgB,CAACG,YAAY,CAAC;MACnCI,QAAQ,EAAED,cAAc;MACxBD,OAAO,EAAEA,OAAO,IAAI;IACtB,CAAC,CAAC;EACJ;EACA,OAAOL,yBAAgB,CAACG,YAAY,CAAC;IACnCI,QAAQ,EAAED,cAAc;IACxBD,OAAO,EAAED,gBAAgB,CAACC;EAC5B,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,MAAMQ,aAAa,GAAGA,CAAA,KAAqB;EAChD,MAAMC,SAAS,GAAGd,yBAAgB,CAACe,YAAY,CAAC,CAAC;EACjD,OAAOD,SAAS,EAAEE,WAAW,IAAI,IAAI;AACvC,CAAC;;AAED;AACA;AACA;AAFAxB,OAAA,CAAAqB,aAAA,GAAAA,aAAA;AAGO,MAAMI,MAAM,GAAGA,CAAA,KAAM;EAC1BC,qBAAqB,CAAC,MAAM;IAC1BlB,yBAAgB,CAACiB,MAAM,CAAC,CAAC;EAC3B,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALAzB,OAAA,CAAAyB,MAAA,GAAAA,MAAA;AAMO,MAAME,cAAc,GAAGA,CAAA,KAAc;EAC1C,MAAML,SAAS,GAAGd,yBAAgB,CAACe,YAAY,CAAC,CAAC;EACjD,OAAOD,SAAS,CAACM,aAAa;AAChC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALA5B,OAAA,CAAA2B,cAAA,GAAAA,cAAA;AAMO,MAAMT,WAAW,GAAGA,CAAA,KAAc;EACvC,OAAOnB,mBAAmB,CAACE,qBAAqB,KAAKH,QAAQ,GACzD6B,cAAc,CAAC,CAAC,GAChB5B,mBAAmB,CAACE,qBAAqB;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAD,OAAA,CAAAkB,WAAA,GAAAA,WAAA;AAKO,MAAMW,UAAU,GAAGA,CAAA,KAAc;EACtC,MAAMP,SAAS,GAAGd,yBAAgB,CAACe,YAAY,CAAC,CAAC;EACjD,OAAOD,SAAS,CAACQ,OAAO;AAC1B,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJA9B,OAAA,CAAA6B,UAAA,GAAAA,UAAA;AAKO,MAAME,kBAAkB,GAAGA,CAAA,KAAqB;EACrD,MAAMT,SAAS,GAAGd,yBAAgB,CAACe,YAAY,CAAC,CAAC;EACjD,OAAOD,SAAS,CAACU,gBAAgB;AACnC,CAAC;AAAChC,OAAA,CAAA+B,kBAAA,GAAAA,kBAAA","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,GAuBpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { Platform } from "react-native";
|
|
4
4
|
import { HotUpdaterError } from "./error.js";
|
|
5
5
|
import { fetchUpdateInfo } from "./fetchUpdateInfo.js";
|
|
6
|
-
import {
|
|
6
|
+
import { getAppVersion, getBundleId, getChannel, getFingerprintHash, getMinBundleId, updateBundle } from "./native.js";
|
|
7
7
|
export async function checkForUpdate(options) {
|
|
8
8
|
if (__DEV__) {
|
|
9
9
|
return null;
|
|
@@ -21,21 +21,21 @@ export async function checkForUpdate(options) {
|
|
|
21
21
|
options.onError?.(new HotUpdaterError("Failed to get app version"));
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
24
|
+
const fingerprintHash = getFingerprintHash();
|
|
25
|
+
return fetchUpdateInfo({
|
|
26
|
+
source: options.source,
|
|
27
|
+
params: {
|
|
28
|
+
bundleId: currentBundleId,
|
|
29
|
+
appVersion: currentAppVersion,
|
|
30
|
+
platform,
|
|
31
|
+
minBundleId,
|
|
32
|
+
channel,
|
|
33
|
+
fingerprintHash
|
|
34
|
+
},
|
|
35
|
+
requestHeaders: options.requestHeaders,
|
|
36
|
+
onError: options.onError,
|
|
37
|
+
requestTimeout: options.requestTimeout
|
|
38
|
+
}).then(updateInfo => {
|
|
39
39
|
if (!updateInfo) {
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
@@ -51,12 +51,19 @@ export async function checkForUpdate(options) {
|
|
|
51
51
|
};
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
-
export const getUpdateSource = baseUrl =>
|
|
55
|
-
switch (
|
|
56
|
-
case "appVersion":
|
|
57
|
-
return `${baseUrl}/app-version/${args.platform}/${args.appVersion}/${args.channel}/${args.minBundleId}/${args.bundleId}`;
|
|
54
|
+
export const getUpdateSource = (baseUrl, options) => params => {
|
|
55
|
+
switch (options.updateStrategy) {
|
|
58
56
|
case "fingerprint":
|
|
59
|
-
|
|
57
|
+
{
|
|
58
|
+
if (!params.fingerprintHash) {
|
|
59
|
+
throw new HotUpdaterError("Fingerprint hash is required");
|
|
60
|
+
}
|
|
61
|
+
return `${baseUrl}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
62
|
+
}
|
|
63
|
+
case "appVersion":
|
|
64
|
+
{
|
|
65
|
+
return `${baseUrl}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
66
|
+
}
|
|
60
67
|
default:
|
|
61
68
|
return baseUrl;
|
|
62
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","HotUpdaterError","fetchUpdateInfo","
|
|
1
|
+
{"version":3,"names":["Platform","HotUpdaterError","fetchUpdateInfo","getAppVersion","getBundleId","getChannel","getFingerprintHash","getMinBundleId","updateBundle","checkForUpdate","options","__DEV__","includes","OS","onError","currentAppVersion","platform","currentBundleId","minBundleId","channel","fingerprintHash","source","params","bundleId","appVersion","requestHeaders","requestTimeout","then","updateInfo","id","fileUrl","status","getUpdateSource","baseUrl","updateStrategy"],"sourceRoot":"../../src","sources":["checkForUpdate.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,eAAe,QAAQ,YAAS;AACzC,SAA4BC,eAAe,QAAQ,sBAAmB;AACtE,SACEC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,kBAAkB,EAClBC,cAAc,EACdC,YAAY,QACP,aAAU;AAqBjB,OAAO,eAAeC,cAAcA,CAClCC,OAA8B,EACQ;EACtC,IAAIC,OAAO,EAAE;IACX,OAAO,IAAI;EACb;EAEA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAACC,QAAQ,CAACZ,QAAQ,CAACa,EAAE,CAAC,EAAE;IAC7CH,OAAO,CAACI,OAAO,GACb,IAAIb,eAAe,CAAC,iDAAiD,CACvE,CAAC;IACD,OAAO,IAAI;EACb;EAEA,MAAMc,iBAAiB,GAAGZ,aAAa,CAAC,CAAC;EACzC,MAAMa,QAAQ,GAAGhB,QAAQ,CAACa,EAAuB;EACjD,MAAMI,eAAe,GAAGb,WAAW,CAAC,CAAC;EACrC,MAAMc,WAAW,GAAGX,cAAc,CAAC,CAAC;EACpC,MAAMY,OAAO,GAAGd,UAAU,CAAC,CAAC;EAE5B,IAAI,CAACU,iBAAiB,EAAE;IACtBL,OAAO,CAACI,OAAO,GAAG,IAAIb,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACnE,OAAO,IAAI;EACb;EAEA,MAAMmB,eAAe,GAAGd,kBAAkB,CAAC,CAAC;EAE5C,OAAOJ,eAAe,CAAC;IACrBmB,MAAM,EAAEX,OAAO,CAACW,MAAM;IACtBC,MAAM,EAAE;MACNC,QAAQ,EAAEN,eAAe;MACzBO,UAAU,EAAET,iBAAiB;MAC7BC,QAAQ;MACRE,WAAW;MACXC,OAAO;MACPC;IACF,CAAC;IACDK,cAAc,EAAEf,OAAO,CAACe,cAAc;IACtCX,OAAO,EAAEJ,OAAO,CAACI,OAAO;IACxBY,cAAc,EAAEhB,OAAO,CAACgB;EAC1B,CAAC,CAAC,CAACC,IAAI,CAAEC,UAAU,IAAK;IACtB,IAAI,CAACA,UAAU,EAAE;MACf,OAAO,IAAI;IACb;IAEA,OAAO;MACL,GAAGA,UAAU;MACbpB,YAAY,EAAE,MAAAA,CAAA,KAAY;QACxB,OAAOA,YAAY,CAAC;UAClBe,QAAQ,EAAEK,UAAU,CAACC,EAAE;UACvBC,OAAO,EAAEF,UAAU,CAACE,OAAO;UAC3BC,MAAM,EAAEH,UAAU,CAACG;QACrB,CAAC,CAAC;MACJ;IACF,CAAC;EACH,CAAC,CAAC;AACJ;AAYA,OAAO,MAAMC,eAAe,GAC1BA,CAACC,OAAe,EAAEvB,OAA+B,KAChDY,MAA0B,IAAK;EAC9B,QAAQZ,OAAO,CAACwB,cAAc;IAC5B,KAAK,aAAa;MAAE;QAClB,IAAI,CAACZ,MAAM,CAACF,eAAe,EAAE;UAC3B,MAAM,IAAInB,eAAe,CAAC,8BAA8B,CAAC;QAC3D;QACA,OAAO,GAAGgC,OAAO,gBAAgBX,MAAM,CAACN,QAAQ,IAAIM,MAAM,CAACF,eAAe,IAAIE,MAAM,CAACH,OAAO,IAAIG,MAAM,CAACJ,WAAW,IAAII,MAAM,CAACC,QAAQ,EAAE;MACzI;IACA,KAAK,YAAY;MAAE;QACjB,OAAO,GAAGU,OAAO,gBAAgBX,MAAM,CAACN,QAAQ,IAAIM,MAAM,CAACE,UAAU,IAAIF,MAAM,CAACH,OAAO,IAAIG,MAAM,CAACJ,WAAW,IAAII,MAAM,CAACC,QAAQ,EAAE;MACpI;IACA;MACE,OAAOU,OAAO;EAClB;AACF,CAAC","ignoreList":[]}
|
|
@@ -1,54 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
function buildRequestHeaders(params, requestHeaders) {
|
|
4
|
+
const updateStrategy = params.fingerprintHash ? "fingerprint" : "appVersion";
|
|
5
|
+
return {
|
|
6
|
+
"Content-Type": "application/json",
|
|
7
|
+
"x-app-platform": params.platform,
|
|
8
|
+
"x-bundle-id": params.bundleId,
|
|
9
|
+
...(updateStrategy === "fingerprint" ? {
|
|
10
|
+
"x-fingerprint-hash": params.fingerprintHash
|
|
11
|
+
} : {
|
|
12
|
+
"x-app-version": params.appVersion
|
|
13
|
+
}),
|
|
14
|
+
...(params.minBundleId && {
|
|
15
|
+
"x-min-bundle-id": params.minBundleId
|
|
16
|
+
}),
|
|
17
|
+
...(params.channel && {
|
|
18
|
+
"x-channel": params.channel
|
|
19
|
+
}),
|
|
20
|
+
...(requestHeaders ?? {})
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async function resolveSource(source, params) {
|
|
24
|
+
if (typeof source !== "function") {
|
|
25
|
+
return {
|
|
26
|
+
url: source
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const result = source(params);
|
|
30
|
+
if (typeof result === "string") {
|
|
31
|
+
return {
|
|
32
|
+
url: result
|
|
33
|
+
};
|
|
10
34
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
35
|
+
return {
|
|
36
|
+
info: await result
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export const fetchUpdateInfo = async ({
|
|
40
|
+
source,
|
|
41
|
+
params,
|
|
42
|
+
requestHeaders,
|
|
43
|
+
onError,
|
|
44
|
+
requestTimeout = 5000
|
|
45
|
+
}) => {
|
|
15
46
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
headers = {
|
|
20
|
-
"Content-Type": "application/json",
|
|
21
|
-
"x-app-platform": args.platform,
|
|
22
|
-
"x-bundle-id": args.bundleId,
|
|
23
|
-
"x-fingerprint-hash": args.fingerprintHash,
|
|
24
|
-
...(args.minBundleId ? {
|
|
25
|
-
"x-min-bundle-id": args.minBundleId
|
|
26
|
-
} : {}),
|
|
27
|
-
...(args.channel ? {
|
|
28
|
-
"x-channel": args.channel
|
|
29
|
-
} : {}),
|
|
30
|
-
...requestHeaders
|
|
31
|
-
};
|
|
32
|
-
break;
|
|
33
|
-
case "appVersion":
|
|
34
|
-
headers = {
|
|
35
|
-
"Content-Type": "application/json",
|
|
36
|
-
"x-app-platform": args.platform,
|
|
37
|
-
"x-bundle-id": args.bundleId,
|
|
38
|
-
"x-app-version": args.appVersion,
|
|
39
|
-
...(args.minBundleId ? {
|
|
40
|
-
"x-min-bundle-id": args.minBundleId
|
|
41
|
-
} : {}),
|
|
42
|
-
...(args.channel ? {
|
|
43
|
-
"x-channel": args.channel
|
|
44
|
-
} : {}),
|
|
45
|
-
...requestHeaders
|
|
46
|
-
};
|
|
47
|
-
break;
|
|
48
|
-
default:
|
|
49
|
-
throw new Error("Invalid update strategy");
|
|
47
|
+
const resolvedSource = await resolveSource(source, params);
|
|
48
|
+
if ("info" in resolvedSource) {
|
|
49
|
+
return resolvedSource.info;
|
|
50
50
|
}
|
|
51
|
-
const
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const timeoutId = setTimeout(() => {
|
|
53
|
+
controller.abort();
|
|
54
|
+
}, requestTimeout);
|
|
55
|
+
const headers = buildRequestHeaders(params, requestHeaders);
|
|
56
|
+
const response = await fetch(resolvedSource.url, {
|
|
52
57
|
signal: controller.signal,
|
|
53
58
|
headers
|
|
54
59
|
});
|
|
@@ -60,9 +65,9 @@ export const fetchUpdateInfo = async (source, args, requestHeaders, onError, req
|
|
|
60
65
|
} catch (error) {
|
|
61
66
|
if (error.name === "AbortError") {
|
|
62
67
|
onError?.(new Error("Request timed out"));
|
|
63
|
-
|
|
68
|
+
} else {
|
|
69
|
+
onError?.(error);
|
|
64
70
|
}
|
|
65
|
-
onError?.(error);
|
|
66
71
|
return null;
|
|
67
72
|
}
|
|
68
73
|
};
|