@take-out/native-hot-update 0.0.38 → 0.0.39
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/README.md +23 -2
- package/dist/cjs/createHotUpdater.cjs +37 -17
- package/dist/cjs/createHotUpdater.js +30 -4
- package/dist/cjs/createHotUpdater.js.map +1 -1
- package/dist/cjs/createHotUpdater.native.js +35 -15
- package/dist/cjs/createHotUpdater.native.js.map +1 -1
- package/dist/esm/createHotUpdater.js +30 -5
- package/dist/esm/createHotUpdater.js.map +1 -1
- package/dist/esm/createHotUpdater.mjs +38 -18
- package/dist/esm/createHotUpdater.mjs.map +1 -1
- package/dist/esm/createHotUpdater.native.js +36 -16
- package/dist/esm/createHotUpdater.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createHotUpdater.ts +41 -9
- package/src/types.ts +5 -0
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ bun add @take-out/native-hot-update react-native-mmkv
|
|
|
26
26
|
import { MMKV } from 'react-native-mmkv'
|
|
27
27
|
import { createHotUpdater } from '@take-out/native-hot-update'
|
|
28
28
|
import { createMMKVStorage } from '@take-out/native-hot-update/mmkv'
|
|
29
|
+
import { HotUpdater } from '@hot-updater/react-native'
|
|
29
30
|
|
|
30
31
|
const mmkv = new MMKV({ id: 'hot-updater' })
|
|
31
32
|
|
|
@@ -35,12 +36,32 @@ const hotUpdaterInstance = createHotUpdater({
|
|
|
35
36
|
updateStrategy: 'appVersion',
|
|
36
37
|
})
|
|
37
38
|
|
|
38
|
-
// Export the hook
|
|
39
|
+
// Export the hook and resolver
|
|
39
40
|
export const useOtaUpdater = hotUpdaterInstance.useOtaUpdater
|
|
41
|
+
export const hotUpdaterResolver = hotUpdaterInstance.createResolver()
|
|
40
42
|
export const hotUpdater = hotUpdaterInstance
|
|
41
43
|
```
|
|
42
44
|
|
|
43
|
-
### 2.
|
|
45
|
+
### 2. Wrap Your App
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
// app/index.tsx or App.tsx
|
|
49
|
+
import { HotUpdater } from '@hot-updater/react-native'
|
|
50
|
+
import { hotUpdaterResolver } from './hotUpdater'
|
|
51
|
+
|
|
52
|
+
function App() {
|
|
53
|
+
// Your app component
|
|
54
|
+
return <YourApp />
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// IMPORTANT: You must wrap your app with HotUpdater.wrap
|
|
58
|
+
export default HotUpdater.wrap({
|
|
59
|
+
resolver: hotUpdaterResolver,
|
|
60
|
+
updateMode: 'manual', // Use manual mode with custom hooks
|
|
61
|
+
})(App)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Use in Your App
|
|
44
65
|
|
|
45
66
|
```tsx
|
|
46
67
|
// app/_layout.tsx
|
|
@@ -43,10 +43,32 @@ const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000",
|
|
|
43
43
|
PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
|
|
44
44
|
function createHotUpdater(config) {
|
|
45
45
|
const {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
serverUrl,
|
|
47
|
+
storage,
|
|
48
|
+
updateStrategy = "appVersion"
|
|
49
|
+
} = config,
|
|
50
|
+
createResolver = () => ({
|
|
51
|
+
checkUpdate: async params => {
|
|
52
|
+
const response = await fetch(`${serverUrl}/check`, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: {
|
|
55
|
+
"Content-Type": "application/json",
|
|
56
|
+
...params.requestHeaders
|
|
57
|
+
},
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
platform: params.platform,
|
|
60
|
+
appVersion: params.appVersion,
|
|
61
|
+
bundleId: params.bundleId,
|
|
62
|
+
minBundleId: params.minBundleId,
|
|
63
|
+
channel: params.channel,
|
|
64
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
65
|
+
fingerprintHash: params.fingerprintHash
|
|
66
|
+
}),
|
|
67
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
68
|
+
});
|
|
69
|
+
return response.ok ? response.json() : null;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
50
72
|
let isUpdatePending = !1;
|
|
51
73
|
const getAppliedOta = () => {
|
|
52
74
|
const id = import_react_native.HotUpdater.getBundleId();
|
|
@@ -63,6 +85,8 @@ function createHotUpdater(config) {
|
|
|
63
85
|
appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
|
|
64
86
|
};
|
|
65
87
|
return {
|
|
88
|
+
createResolver,
|
|
89
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
66
90
|
useOtaUpdater: (options = {}) => {
|
|
67
91
|
const {
|
|
68
92
|
enabled = !0,
|
|
@@ -95,9 +119,7 @@ function createHotUpdater(config) {
|
|
|
95
119
|
}
|
|
96
120
|
if (!shouldContinue) return;
|
|
97
121
|
const updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
98
|
-
|
|
99
|
-
updateStrategy
|
|
100
|
-
})
|
|
122
|
+
updateStrategy
|
|
101
123
|
});
|
|
102
124
|
if (!updateInfo) {
|
|
103
125
|
setIsUserClearedForAccess(!0);
|
|
@@ -153,16 +175,14 @@ function createHotUpdater(config) {
|
|
|
153
175
|
channel,
|
|
154
176
|
isPreRelease = !1
|
|
155
177
|
} = options,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
source: finalSource
|
|
165
|
-
});
|
|
178
|
+
requestHeaders = {};
|
|
179
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
180
|
+
const updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
181
|
+
updateStrategy,
|
|
182
|
+
...(Object.keys(requestHeaders).length > 0 && {
|
|
183
|
+
requestHeaders
|
|
184
|
+
})
|
|
185
|
+
});
|
|
166
186
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
|
|
167
187
|
isPreRelease
|
|
168
188
|
}), {
|
|
@@ -28,7 +28,28 @@ module.exports = __toCommonJS(createHotUpdater_exports);
|
|
|
28
28
|
var import_react_native = require("@hot-updater/react-native"), Application = __toESM(require("expo-application"), 1), import_react = require("react"), import_react_native2 = require("react-native-web");
|
|
29
29
|
const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000", BUNDLE_ID_KEY_PREFIX = "hotUpdater.bundleId", PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
|
|
30
30
|
function createHotUpdater(config) {
|
|
31
|
-
const { serverUrl, storage, updateStrategy = "appVersion" } = config
|
|
31
|
+
const { serverUrl, storage, updateStrategy = "appVersion" } = config, createResolver = () => ({
|
|
32
|
+
checkUpdate: async (params) => {
|
|
33
|
+
const response = await fetch(`${serverUrl}/check`, {
|
|
34
|
+
method: "POST",
|
|
35
|
+
headers: {
|
|
36
|
+
"Content-Type": "application/json",
|
|
37
|
+
...params.requestHeaders
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
platform: params.platform,
|
|
41
|
+
appVersion: params.appVersion,
|
|
42
|
+
bundleId: params.bundleId,
|
|
43
|
+
minBundleId: params.minBundleId,
|
|
44
|
+
channel: params.channel,
|
|
45
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
46
|
+
fingerprintHash: params.fingerprintHash
|
|
47
|
+
}),
|
|
48
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
49
|
+
});
|
|
50
|
+
return response.ok ? response.json() : null;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
32
53
|
let isUpdatePending = !1;
|
|
33
54
|
const getAppliedOta = () => {
|
|
34
55
|
const id = import_react_native.HotUpdater.getBundleId();
|
|
@@ -41,6 +62,8 @@ function createHotUpdater(config) {
|
|
|
41
62
|
appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
|
|
42
63
|
};
|
|
43
64
|
return {
|
|
65
|
+
createResolver,
|
|
66
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
44
67
|
useOtaUpdater: (options = {}) => {
|
|
45
68
|
const {
|
|
46
69
|
enabled = !0,
|
|
@@ -69,7 +92,7 @@ function createHotUpdater(config) {
|
|
|
69
92
|
}
|
|
70
93
|
if (!shouldContinue) return;
|
|
71
94
|
const updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
72
|
-
|
|
95
|
+
updateStrategy
|
|
73
96
|
});
|
|
74
97
|
if (!updateInfo) {
|
|
75
98
|
setIsUserClearedForAccess(!0);
|
|
@@ -124,8 +147,11 @@ function createHotUpdater(config) {
|
|
|
124
147
|
};
|
|
125
148
|
},
|
|
126
149
|
checkForUpdate: async (options = {}) => {
|
|
127
|
-
const { channel, isPreRelease = !1 } = options,
|
|
128
|
-
|
|
150
|
+
const { channel, isPreRelease = !1 } = options, requestHeaders = {};
|
|
151
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
152
|
+
const updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
153
|
+
updateStrategy,
|
|
154
|
+
...Object.keys(requestHeaders).length > 0 && { requestHeaders }
|
|
129
155
|
});
|
|
130
156
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, { isPreRelease }), {
|
|
131
157
|
id: updateInfo.id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createHotUpdater.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAIO,sCACP,cAA6B,yCAC7B,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["import_react_native"]
|
|
6
6
|
}
|
|
@@ -49,6 +49,30 @@ function createHotUpdater(config) {
|
|
|
49
49
|
storage,
|
|
50
50
|
updateStrategy = "appVersion"
|
|
51
51
|
} = config,
|
|
52
|
+
createResolver = function () {
|
|
53
|
+
return {
|
|
54
|
+
checkUpdate: async function (params) {
|
|
55
|
+
var response = await fetch(`${serverUrl}/check`, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: {
|
|
58
|
+
"Content-Type": "application/json",
|
|
59
|
+
...params.requestHeaders
|
|
60
|
+
},
|
|
61
|
+
body: JSON.stringify({
|
|
62
|
+
platform: params.platform,
|
|
63
|
+
appVersion: params.appVersion,
|
|
64
|
+
bundleId: params.bundleId,
|
|
65
|
+
minBundleId: params.minBundleId,
|
|
66
|
+
channel: params.channel,
|
|
67
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
68
|
+
fingerprintHash: params.fingerprintHash
|
|
69
|
+
}),
|
|
70
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
71
|
+
});
|
|
72
|
+
return response.ok ? response.json() : null;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
},
|
|
52
76
|
isUpdatePending = !1,
|
|
53
77
|
getAppliedOta = function () {
|
|
54
78
|
var id = import_react_native.HotUpdater.getBundleId();
|
|
@@ -108,9 +132,7 @@ function createHotUpdater(config) {
|
|
|
108
132
|
}
|
|
109
133
|
if (!shouldContinue) return;
|
|
110
134
|
var updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
111
|
-
|
|
112
|
-
updateStrategy
|
|
113
|
-
})
|
|
135
|
+
updateStrategy
|
|
114
136
|
});
|
|
115
137
|
if (!updateInfo) {
|
|
116
138
|
setIsUserClearedForAccess(!0);
|
|
@@ -169,18 +191,14 @@ function createHotUpdater(config) {
|
|
|
169
191
|
channel,
|
|
170
192
|
isPreRelease = !1
|
|
171
193
|
} = options,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
} : updateSource,
|
|
181
|
-
updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
182
|
-
source: finalSource
|
|
183
|
-
});
|
|
194
|
+
requestHeaders = {};
|
|
195
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
196
|
+
var updateInfo = await import_react_native.HotUpdater.checkForUpdate({
|
|
197
|
+
updateStrategy,
|
|
198
|
+
...(Object.keys(requestHeaders).length > 0 && {
|
|
199
|
+
requestHeaders
|
|
200
|
+
})
|
|
201
|
+
});
|
|
184
202
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
|
|
185
203
|
isPreRelease
|
|
186
204
|
}), {
|
|
@@ -191,6 +209,8 @@ function createHotUpdater(config) {
|
|
|
191
209
|
}) : null;
|
|
192
210
|
};
|
|
193
211
|
return {
|
|
212
|
+
createResolver,
|
|
213
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
194
214
|
useOtaUpdater,
|
|
195
215
|
checkForUpdate,
|
|
196
216
|
getAppliedOta,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createHotUpdater_exports","__export","createHotUpdater","module","exports","import_react_native","require","Application","__toESM","import_react","import_react_native2","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","config","serverUrl","storage","updateStrategy","isUpdatePending","getAppliedOta","id","HotUpdater","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","arguments","length","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","createHotUpdater_exports","__export","createHotUpdater","module","exports","import_react_native","require","Application","__toESM","import_react","import_react_native2","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","config","serverUrl","storage","updateStrategy","createResolver","checkUpdate","params","response","fetch","method","headers","requestHeaders","body","JSON","stringify","platform","appVersion","bundleId","minBundleId","channel","fingerprintHash","signal","requestTimeout","AbortSignal","timeout","ok","json","isUpdatePending","getAppliedOta","id","HotUpdater","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","arguments","length","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","useHotUpdaterStore","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","useState","isUserClearedForAccessRef","useRef","current","useEffect","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","status","preReleaseBundleId","currentBundleId","Alert","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","Object","keys"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
getUpdateSource,
|
|
3
2
|
HotUpdater,
|
|
4
3
|
useHotUpdaterStore
|
|
5
4
|
} from "@hot-updater/react-native";
|
|
@@ -8,7 +7,28 @@ import { useEffect, useRef, useState } from "react";
|
|
|
8
7
|
import { Alert } from "react-native-web";
|
|
9
8
|
const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000", BUNDLE_ID_KEY_PREFIX = "hotUpdater.bundleId", PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
|
|
10
9
|
function createHotUpdater(config) {
|
|
11
|
-
const { serverUrl, storage, updateStrategy = "appVersion" } = config
|
|
10
|
+
const { serverUrl, storage, updateStrategy = "appVersion" } = config, createResolver = () => ({
|
|
11
|
+
checkUpdate: async (params) => {
|
|
12
|
+
const response = await fetch(`${serverUrl}/check`, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
"Content-Type": "application/json",
|
|
16
|
+
...params.requestHeaders
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
platform: params.platform,
|
|
20
|
+
appVersion: params.appVersion,
|
|
21
|
+
bundleId: params.bundleId,
|
|
22
|
+
minBundleId: params.minBundleId,
|
|
23
|
+
channel: params.channel,
|
|
24
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
25
|
+
fingerprintHash: params.fingerprintHash
|
|
26
|
+
}),
|
|
27
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
28
|
+
});
|
|
29
|
+
return response.ok ? response.json() : null;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
12
32
|
let isUpdatePending = !1;
|
|
13
33
|
const getAppliedOta = () => {
|
|
14
34
|
const id = HotUpdater.getBundleId();
|
|
@@ -21,6 +41,8 @@ function createHotUpdater(config) {
|
|
|
21
41
|
appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
|
|
22
42
|
};
|
|
23
43
|
return {
|
|
44
|
+
createResolver,
|
|
45
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
24
46
|
useOtaUpdater: (options = {}) => {
|
|
25
47
|
const {
|
|
26
48
|
enabled = !0,
|
|
@@ -49,7 +71,7 @@ function createHotUpdater(config) {
|
|
|
49
71
|
}
|
|
50
72
|
if (!shouldContinue) return;
|
|
51
73
|
const updateInfo = await HotUpdater.checkForUpdate({
|
|
52
|
-
|
|
74
|
+
updateStrategy
|
|
53
75
|
});
|
|
54
76
|
if (!updateInfo) {
|
|
55
77
|
setIsUserClearedForAccess(!0);
|
|
@@ -104,8 +126,11 @@ function createHotUpdater(config) {
|
|
|
104
126
|
};
|
|
105
127
|
},
|
|
106
128
|
checkForUpdate: async (options = {}) => {
|
|
107
|
-
const { channel, isPreRelease = !1 } = options,
|
|
108
|
-
|
|
129
|
+
const { channel, isPreRelease = !1 } = options, requestHeaders = {};
|
|
130
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
131
|
+
const updateInfo = await HotUpdater.checkForUpdate({
|
|
132
|
+
updateStrategy,
|
|
133
|
+
...Object.keys(requestHeaders).length > 0 && { requestHeaders }
|
|
109
134
|
});
|
|
110
135
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, { isPreRelease }), {
|
|
111
136
|
id: updateInfo.id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createHotUpdater.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HotUpdater, useHotUpdaterStore } from "@hot-updater/react-native";
|
|
2
2
|
import * as Application from "expo-application";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { Alert } from "react-native-web";
|
|
@@ -7,10 +7,32 @@ const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000",
|
|
|
7
7
|
PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
|
|
8
8
|
function createHotUpdater(config) {
|
|
9
9
|
const {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
serverUrl,
|
|
11
|
+
storage,
|
|
12
|
+
updateStrategy = "appVersion"
|
|
13
|
+
} = config,
|
|
14
|
+
createResolver = () => ({
|
|
15
|
+
checkUpdate: async params => {
|
|
16
|
+
const response = await fetch(`${serverUrl}/check`, {
|
|
17
|
+
method: "POST",
|
|
18
|
+
headers: {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
...params.requestHeaders
|
|
21
|
+
},
|
|
22
|
+
body: JSON.stringify({
|
|
23
|
+
platform: params.platform,
|
|
24
|
+
appVersion: params.appVersion,
|
|
25
|
+
bundleId: params.bundleId,
|
|
26
|
+
minBundleId: params.minBundleId,
|
|
27
|
+
channel: params.channel,
|
|
28
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
29
|
+
fingerprintHash: params.fingerprintHash
|
|
30
|
+
}),
|
|
31
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
32
|
+
});
|
|
33
|
+
return response.ok ? response.json() : null;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
14
36
|
let isUpdatePending = !1;
|
|
15
37
|
const getAppliedOta = () => {
|
|
16
38
|
const id = HotUpdater.getBundleId();
|
|
@@ -27,6 +49,8 @@ function createHotUpdater(config) {
|
|
|
27
49
|
appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
|
|
28
50
|
};
|
|
29
51
|
return {
|
|
52
|
+
createResolver,
|
|
53
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
30
54
|
useOtaUpdater: (options = {}) => {
|
|
31
55
|
const {
|
|
32
56
|
enabled = !0,
|
|
@@ -59,9 +83,7 @@ function createHotUpdater(config) {
|
|
|
59
83
|
}
|
|
60
84
|
if (!shouldContinue) return;
|
|
61
85
|
const updateInfo = await HotUpdater.checkForUpdate({
|
|
62
|
-
|
|
63
|
-
updateStrategy
|
|
64
|
-
})
|
|
86
|
+
updateStrategy
|
|
65
87
|
});
|
|
66
88
|
if (!updateInfo) {
|
|
67
89
|
setIsUserClearedForAccess(!0);
|
|
@@ -117,16 +139,14 @@ function createHotUpdater(config) {
|
|
|
117
139
|
channel,
|
|
118
140
|
isPreRelease = !1
|
|
119
141
|
} = options,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
source: finalSource
|
|
129
|
-
});
|
|
142
|
+
requestHeaders = {};
|
|
143
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
144
|
+
const updateInfo = await HotUpdater.checkForUpdate({
|
|
145
|
+
updateStrategy,
|
|
146
|
+
...(Object.keys(requestHeaders).length > 0 && {
|
|
147
|
+
requestHeaders
|
|
148
|
+
})
|
|
149
|
+
});
|
|
130
150
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
|
|
131
151
|
isPreRelease
|
|
132
152
|
}), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","serverUrl","storage","updateStrategy","createResolver","checkUpdate","params","response","fetch","method","headers","requestHeaders","body","JSON","stringify","platform","appVersion","bundleId","minBundleId","channel","fingerprintHash","signal","requestTimeout","AbortSignal","timeout","ok","json","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","Object","keys","length","getChannel"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HotUpdater, useHotUpdaterStore } from "@hot-updater/react-native";
|
|
2
2
|
import * as Application from "expo-application";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { Alert } from "react-native";
|
|
@@ -11,6 +11,30 @@ function createHotUpdater(config) {
|
|
|
11
11
|
storage,
|
|
12
12
|
updateStrategy = "appVersion"
|
|
13
13
|
} = config,
|
|
14
|
+
createResolver = function () {
|
|
15
|
+
return {
|
|
16
|
+
checkUpdate: async function (params) {
|
|
17
|
+
var response = await fetch(`${serverUrl}/check`, {
|
|
18
|
+
method: "POST",
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
...params.requestHeaders
|
|
22
|
+
},
|
|
23
|
+
body: JSON.stringify({
|
|
24
|
+
platform: params.platform,
|
|
25
|
+
appVersion: params.appVersion,
|
|
26
|
+
bundleId: params.bundleId,
|
|
27
|
+
minBundleId: params.minBundleId,
|
|
28
|
+
channel: params.channel,
|
|
29
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
30
|
+
fingerprintHash: params.fingerprintHash
|
|
31
|
+
}),
|
|
32
|
+
signal: params.requestTimeout ? AbortSignal.timeout(params.requestTimeout) : void 0
|
|
33
|
+
});
|
|
34
|
+
return response.ok ? response.json() : null;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
},
|
|
14
38
|
isUpdatePending = !1,
|
|
15
39
|
getAppliedOta = function () {
|
|
16
40
|
var id = HotUpdater.getBundleId();
|
|
@@ -70,9 +94,7 @@ function createHotUpdater(config) {
|
|
|
70
94
|
}
|
|
71
95
|
if (!shouldContinue) return;
|
|
72
96
|
var updateInfo = await HotUpdater.checkForUpdate({
|
|
73
|
-
|
|
74
|
-
updateStrategy
|
|
75
|
-
})
|
|
97
|
+
updateStrategy
|
|
76
98
|
});
|
|
77
99
|
if (!updateInfo) {
|
|
78
100
|
setIsUserClearedForAccess(!0);
|
|
@@ -131,18 +153,14 @@ function createHotUpdater(config) {
|
|
|
131
153
|
channel,
|
|
132
154
|
isPreRelease = !1
|
|
133
155
|
} = options,
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
} : updateSource,
|
|
143
|
-
updateInfo = await HotUpdater.checkForUpdate({
|
|
144
|
-
source: finalSource
|
|
145
|
-
});
|
|
156
|
+
requestHeaders = {};
|
|
157
|
+
channel && (requestHeaders["X-Channel"] = channel);
|
|
158
|
+
var updateInfo = await HotUpdater.checkForUpdate({
|
|
159
|
+
updateStrategy,
|
|
160
|
+
...(Object.keys(requestHeaders).length > 0 && {
|
|
161
|
+
requestHeaders
|
|
162
|
+
})
|
|
163
|
+
});
|
|
146
164
|
return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
|
|
147
165
|
isPreRelease
|
|
148
166
|
}), {
|
|
@@ -153,6 +171,8 @@ function createHotUpdater(config) {
|
|
|
153
171
|
}) : null;
|
|
154
172
|
};
|
|
155
173
|
return {
|
|
174
|
+
createResolver,
|
|
175
|
+
// Export resolver for use with HotUpdater.wrap()
|
|
156
176
|
useOtaUpdater,
|
|
157
177
|
checkForUpdate,
|
|
158
178
|
getAppliedOta,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","serverUrl","storage","updateStrategy","createResolver","checkUpdate","params","response","fetch","method","headers","requestHeaders","body","JSON","stringify","platform","appVersion","bundleId","minBundleId","channel","fingerprintHash","signal","requestTimeout","AbortSignal","timeout","ok","json","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","arguments","length","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","Object","keys"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/native-hot-update",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.39",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"check": "tsc --noEmit"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@hot-updater/react-native": "
|
|
43
|
+
"@hot-updater/react-native": "0.25.6"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"expo-application": "*",
|
package/src/createHotUpdater.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
getUpdateSource,
|
|
3
2
|
HotUpdater,
|
|
4
3
|
useHotUpdaterStore,
|
|
4
|
+
type HotUpdaterResolver,
|
|
5
5
|
} from '@hot-updater/react-native'
|
|
6
6
|
import * as Application from 'expo-application'
|
|
7
|
-
import { useEffect, useRef, useState } from 'react'
|
|
7
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
8
8
|
import { Alert } from 'react-native'
|
|
9
9
|
|
|
10
10
|
import type { HotUpdaterConfig, HotUpdaterInstance, UpdateInfo } from './types'
|
|
@@ -16,6 +16,35 @@ const PRE_RELEASE_BUNDLE_ID_KEY = 'hotUpdater.preReleaseBundleId'
|
|
|
16
16
|
export function createHotUpdater(config: HotUpdaterConfig): HotUpdaterInstance {
|
|
17
17
|
const { serverUrl, storage, updateStrategy = 'appVersion' } = config
|
|
18
18
|
|
|
19
|
+
// Create a resolver that uses the configured serverUrl
|
|
20
|
+
const createResolver = (): HotUpdaterResolver => ({
|
|
21
|
+
checkUpdate: async (params) => {
|
|
22
|
+
// Use POST request with all params in body (more flexible than URL path)
|
|
23
|
+
const response = await fetch(`${serverUrl}/check`, {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: {
|
|
26
|
+
'Content-Type': 'application/json',
|
|
27
|
+
...params.requestHeaders,
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
platform: params.platform,
|
|
31
|
+
appVersion: params.appVersion,
|
|
32
|
+
bundleId: params.bundleId,
|
|
33
|
+
minBundleId: params.minBundleId,
|
|
34
|
+
channel: params.channel,
|
|
35
|
+
updateStrategy: params.updateStrategy || updateStrategy,
|
|
36
|
+
fingerprintHash: params.fingerprintHash,
|
|
37
|
+
}),
|
|
38
|
+
signal: params.requestTimeout
|
|
39
|
+
? AbortSignal.timeout(params.requestTimeout)
|
|
40
|
+
: undefined,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
if (!response.ok) return null
|
|
44
|
+
return response.json()
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
19
48
|
let isUpdatePending = false
|
|
20
49
|
|
|
21
50
|
const getAppliedOta = (): string | null => {
|
|
@@ -111,8 +140,9 @@ export function createHotUpdater(config: HotUpdaterConfig): HotUpdaterInstance {
|
|
|
111
140
|
|
|
112
141
|
if (!shouldContinue) return
|
|
113
142
|
|
|
143
|
+
// Check for update using the configured strategy
|
|
114
144
|
const updateInfo = await HotUpdater.checkForUpdate({
|
|
115
|
-
|
|
145
|
+
updateStrategy,
|
|
116
146
|
})
|
|
117
147
|
|
|
118
148
|
if (!updateInfo) {
|
|
@@ -201,14 +231,15 @@ export function createHotUpdater(config: HotUpdaterConfig): HotUpdaterInstance {
|
|
|
201
231
|
) => {
|
|
202
232
|
const { channel, isPreRelease = false } = options
|
|
203
233
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
234
|
+
// Check for update with optional request headers for channel
|
|
235
|
+
const requestHeaders: Record<string, string> = {}
|
|
236
|
+
if (channel) {
|
|
237
|
+
requestHeaders['X-Channel'] = channel
|
|
238
|
+
}
|
|
209
239
|
|
|
210
240
|
const updateInfo = await HotUpdater.checkForUpdate({
|
|
211
|
-
|
|
241
|
+
updateStrategy,
|
|
242
|
+
...(Object.keys(requestHeaders).length > 0 && { requestHeaders }),
|
|
212
243
|
})
|
|
213
244
|
|
|
214
245
|
if (updateInfo) {
|
|
@@ -227,6 +258,7 @@ export function createHotUpdater(config: HotUpdaterConfig): HotUpdaterInstance {
|
|
|
227
258
|
}
|
|
228
259
|
|
|
229
260
|
return {
|
|
261
|
+
createResolver, // Export resolver for use with HotUpdater.wrap()
|
|
230
262
|
useOtaUpdater,
|
|
231
263
|
checkForUpdate,
|
|
232
264
|
getAppliedOta,
|
package/src/types.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { HotUpdaterResolver } from '@hot-updater/react-native'
|
|
2
|
+
|
|
1
3
|
/** Simple key-value storage interface */
|
|
2
4
|
export interface HotUpdateStorage {
|
|
3
5
|
get(key: string): string | undefined
|
|
@@ -22,6 +24,9 @@ export interface UpdateInfo {
|
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export interface HotUpdaterInstance {
|
|
27
|
+
/** Creates a resolver for use with HotUpdater.wrap() */
|
|
28
|
+
createResolver: () => HotUpdaterResolver
|
|
29
|
+
|
|
25
30
|
/** React hook for automatic update checking */
|
|
26
31
|
useOtaUpdater: (options?: {
|
|
27
32
|
enabled?: boolean
|