@onekeyfe/hd-core 1.1.18-alpha.1 → 1.1.18
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/dist/api/BaseMethod.d.ts +4 -4
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.d.ts +1 -1
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +2 -3
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +2 -2
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +2 -2
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -6
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +3 -6
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/releaseHelper.d.ts +2 -7
- package/dist/api/firmware/releaseHelper.d.ts.map +1 -1
- package/dist/api/firmware/updateBootloader.d.ts +2 -7
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +9 -16
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/index.d.ts +21 -43
- package/dist/index.js +75 -200
- package/dist/types/api/checkAllFirmwareRelease.d.ts +1 -3
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts +2 -5
- package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts +2 -6
- package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceFullyUploadResource.d.ts +1 -6
- package/dist/types/api/deviceFullyUploadResource.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +3 -6
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +1 -3
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/settings.d.ts +0 -3
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +5 -7
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/release.d.ts +1 -1
- package/dist/utils/release.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +7 -17
- package/src/api/CheckAllFirmwareRelease.ts +6 -13
- package/src/api/CheckBootloaderRelease.ts +2 -13
- package/src/api/CheckFirmwareRelease.ts +2 -9
- package/src/api/FirmwareUpdate.ts +5 -7
- package/src/api/FirmwareUpdateV2.ts +14 -26
- package/src/api/FirmwareUpdateV3.ts +18 -29
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +11 -10
- package/src/api/device/DeviceFullyUploadResource.ts +2 -8
- package/src/api/device/DeviceUpdateBootloader.ts +5 -21
- package/src/api/evm/EVMSignTypedData.ts +8 -2
- package/src/api/firmware/getBinary.ts +4 -15
- package/src/api/firmware/releaseHelper.ts +11 -22
- package/src/api/firmware/updateBootloader.ts +9 -17
- package/src/api/sui/SuiSignTransaction.ts +1 -7
- package/src/core/index.ts +1 -3
- package/src/data-manager/DataManager.ts +22 -126
- package/src/types/api/checkAllFirmwareRelease.ts +1 -3
- package/src/types/api/checkBootloaderRelease.ts +3 -7
- package/src/types/api/checkFirmwareRelease.ts +2 -10
- package/src/types/api/deviceFullyUploadResource.ts +1 -7
- package/src/types/api/deviceUpdateBootloader.ts +4 -8
- package/src/types/api/firmwareUpdate.ts +1 -4
- package/src/types/settings.ts +0 -37
- package/src/utils/deviceFeaturesUtils.ts +10 -22
- package/src/utils/release.ts +1 -2
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import semver from 'semver';
|
|
3
|
-
import { EDeviceType
|
|
4
|
-
|
|
3
|
+
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
5
4
|
import MessagesJSON from '../data/messages/messages.json';
|
|
6
5
|
import MessagesLegacyV1JSON from '../data/messages/messages_legacy_v1.json';
|
|
7
6
|
import {
|
|
7
|
+
getTimeStamp,
|
|
8
8
|
getDeviceBLEFirmwareVersion,
|
|
9
9
|
getDeviceFirmwareVersion,
|
|
10
10
|
getDeviceType,
|
|
11
|
-
getFirmwareType,
|
|
12
11
|
getFirmwareUpdateField,
|
|
13
|
-
getTimeStamp,
|
|
14
12
|
} from '../utils';
|
|
15
|
-
import { DeviceModelToTypes } from '../types';
|
|
16
|
-
import { findLatestRelease, getReleaseChangelog, getReleaseStatus } from '../utils/release';
|
|
17
13
|
|
|
18
14
|
import type {
|
|
19
15
|
AssetsMap,
|
|
@@ -26,37 +22,13 @@ import type {
|
|
|
26
22
|
IVersionArray,
|
|
27
23
|
RemoteConfigResponse,
|
|
28
24
|
} from '../types';
|
|
25
|
+
import { DeviceModelToTypes } from '../types';
|
|
26
|
+
import { findLatestRelease, getReleaseChangelog, getReleaseStatus } from '../utils/release';
|
|
29
27
|
|
|
30
|
-
export
|
|
31
|
-
'firmware',
|
|
32
|
-
'firmware-v2',
|
|
33
|
-
'firmware-v7',
|
|
34
|
-
'firmware-btc-v7',
|
|
35
|
-
] as const;
|
|
36
|
-
|
|
37
|
-
export type IFirmwareField = (typeof FIRMWARE_FIELDS)[number];
|
|
28
|
+
export type IFirmwareField = 'firmware' | 'firmware-v2' | 'firmware-v7';
|
|
38
29
|
|
|
39
30
|
export type MessageVersion = 'latest' | 'v1';
|
|
40
31
|
|
|
41
|
-
const FIRMWARE_FIELD_TYPE_MAP: Readonly<Record<IFirmwareField, EFirmwareType>> = {
|
|
42
|
-
firmware: EFirmwareType.Universal,
|
|
43
|
-
'firmware-v2': EFirmwareType.Universal,
|
|
44
|
-
'firmware-v7': EFirmwareType.Universal,
|
|
45
|
-
'firmware-btc-v7': EFirmwareType.BitcoinOnly,
|
|
46
|
-
} as const;
|
|
47
|
-
|
|
48
|
-
function getFirmwareTypeFromField(firmwareField: IFirmwareField): EFirmwareType {
|
|
49
|
-
const firmwareType = FIRMWARE_FIELD_TYPE_MAP[firmwareField];
|
|
50
|
-
|
|
51
|
-
// Explicit check for type safety
|
|
52
|
-
if (firmwareType === undefined) {
|
|
53
|
-
// Fallback to Universal for safety
|
|
54
|
-
return EFirmwareType.Universal;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return firmwareType;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
32
|
export default class DataManager {
|
|
61
33
|
static deviceMap: DeviceTypeMap = {
|
|
62
34
|
[EDeviceType.Classic]: {
|
|
@@ -96,14 +68,10 @@ export default class DataManager {
|
|
|
96
68
|
|
|
97
69
|
static lastCheckTimestamp = 0;
|
|
98
70
|
|
|
99
|
-
static getFirmwareStatus = (
|
|
100
|
-
features: Features,
|
|
101
|
-
firmwareType: EFirmwareType
|
|
102
|
-
): IDeviceFirmwareStatus => {
|
|
71
|
+
static getFirmwareStatus = (features: Features): IDeviceFirmwareStatus => {
|
|
103
72
|
const deviceType = getDeviceType(features);
|
|
104
73
|
if (deviceType === EDeviceType.Unknown) return 'unknown';
|
|
105
74
|
|
|
106
|
-
const deviceFirmwareType = getFirmwareType(features);
|
|
107
75
|
const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
|
|
108
76
|
if (features.firmware_present === false) {
|
|
109
77
|
return 'none';
|
|
@@ -113,16 +81,9 @@ export default class DataManager {
|
|
|
113
81
|
return 'unknown';
|
|
114
82
|
}
|
|
115
83
|
|
|
116
|
-
const firmwareUpdateField = getFirmwareUpdateField({
|
|
117
|
-
features,
|
|
118
|
-
updateType: 'firmware',
|
|
119
|
-
firmwareType,
|
|
120
|
-
});
|
|
84
|
+
const firmwareUpdateField = getFirmwareUpdateField({ features, updateType: 'firmware' });
|
|
121
85
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
122
|
-
|
|
123
|
-
if (targetDeviceConfigList.length > 0 && deviceFirmwareType !== firmwareType) {
|
|
124
|
-
currentVersion = '0.0.0';
|
|
125
|
-
}
|
|
86
|
+
const currentVersion = deviceFirmwareVersion.join('.');
|
|
126
87
|
return getReleaseStatus(targetDeviceConfigList, currentVersion);
|
|
127
88
|
};
|
|
128
89
|
|
|
@@ -130,15 +91,7 @@ export default class DataManager {
|
|
|
130
91
|
* Touch、Pro System UI Resource Update
|
|
131
92
|
* ** Interval upgrade is not considered **
|
|
132
93
|
*/
|
|
133
|
-
static getSysResourcesLatestRelease = ({
|
|
134
|
-
features,
|
|
135
|
-
forcedUpdateRes,
|
|
136
|
-
firmwareType,
|
|
137
|
-
}: {
|
|
138
|
-
features: Features;
|
|
139
|
-
forcedUpdateRes?: boolean;
|
|
140
|
-
firmwareType: EFirmwareType;
|
|
141
|
-
}) => {
|
|
94
|
+
static getSysResourcesLatestRelease = (features: Features, forcedUpdateRes?: boolean) => {
|
|
142
95
|
const deviceType = getDeviceType(features);
|
|
143
96
|
const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
|
|
144
97
|
|
|
@@ -147,7 +100,6 @@ export default class DataManager {
|
|
|
147
100
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
148
101
|
features,
|
|
149
102
|
updateType: 'firmware',
|
|
150
|
-
firmwareType,
|
|
151
103
|
}) as IFirmwareField;
|
|
152
104
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
153
105
|
const currentVersion = deviceFirmwareVersion.join('.');
|
|
@@ -164,7 +116,7 @@ export default class DataManager {
|
|
|
164
116
|
* Touch、Pro System full UI Resource Update
|
|
165
117
|
* ** Interval upgrade is not considered **
|
|
166
118
|
*/
|
|
167
|
-
static getSysFullResource = (features: Features
|
|
119
|
+
static getSysFullResource = (features: Features) => {
|
|
168
120
|
const deviceType = getDeviceType(features);
|
|
169
121
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
170
122
|
|
|
@@ -173,7 +125,6 @@ export default class DataManager {
|
|
|
173
125
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
174
126
|
features,
|
|
175
127
|
updateType: 'firmware',
|
|
176
|
-
firmwareType,
|
|
177
128
|
}) as IFirmwareField;
|
|
178
129
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
179
130
|
const targetDeviceConfig = targetDeviceConfigList.filter(item => !!item.fullResource);
|
|
@@ -181,7 +132,7 @@ export default class DataManager {
|
|
|
181
132
|
return findLatestRelease(targetDeviceConfig)?.fullResource;
|
|
182
133
|
};
|
|
183
134
|
|
|
184
|
-
static getBootloaderResource = (features: Features
|
|
135
|
+
static getBootloaderResource = (features: Features) => {
|
|
185
136
|
const deviceType = getDeviceType(features);
|
|
186
137
|
if (deviceType === EDeviceType.Unknown) throw new Error('Device type is unknown');
|
|
187
138
|
|
|
@@ -189,7 +140,6 @@ export default class DataManager {
|
|
|
189
140
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
190
141
|
features,
|
|
191
142
|
updateType: 'firmware',
|
|
192
|
-
firmwareType,
|
|
193
143
|
}) as IFirmwareField;
|
|
194
144
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
195
145
|
if (targetDeviceConfigList.length === 0) {
|
|
@@ -202,17 +152,13 @@ export default class DataManager {
|
|
|
202
152
|
return findLatestRelease(targetDeviceConfig)?.bootloaderResource;
|
|
203
153
|
};
|
|
204
154
|
|
|
205
|
-
static getBootloaderTargetVersion = (
|
|
206
|
-
features: Features,
|
|
207
|
-
firmwareType: EFirmwareType
|
|
208
|
-
): IVersionArray | undefined => {
|
|
155
|
+
static getBootloaderTargetVersion = (features: Features): IVersionArray | undefined => {
|
|
209
156
|
const deviceType = getDeviceType(features);
|
|
210
157
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
211
158
|
|
|
212
159
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
213
160
|
features,
|
|
214
161
|
updateType: 'firmware',
|
|
215
|
-
firmwareType,
|
|
216
162
|
}) as IFirmwareField;
|
|
217
163
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
218
164
|
const targetDeviceConfig = targetDeviceConfigList.filter(item => !!item.bootloaderResource);
|
|
@@ -220,10 +166,7 @@ export default class DataManager {
|
|
|
220
166
|
return targetDeviceConfig?.[0]?.bootloaderVersion ?? undefined;
|
|
221
167
|
};
|
|
222
168
|
|
|
223
|
-
static getBootloaderRelatedFirmwareVersion = (
|
|
224
|
-
features: Features,
|
|
225
|
-
firmwareType: EFirmwareType
|
|
226
|
-
): IVersionArray | undefined => {
|
|
169
|
+
static getBootloaderRelatedFirmwareVersion = (features: Features): IVersionArray | undefined => {
|
|
227
170
|
const deviceType = getDeviceType(features);
|
|
228
171
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
229
172
|
|
|
@@ -231,7 +174,6 @@ export default class DataManager {
|
|
|
231
174
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
232
175
|
features,
|
|
233
176
|
updateType: 'firmware',
|
|
234
|
-
firmwareType,
|
|
235
177
|
}) as IFirmwareField;
|
|
236
178
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
237
179
|
const targetDeviceConfig = targetDeviceConfigList.filter(
|
|
@@ -241,7 +183,7 @@ export default class DataManager {
|
|
|
241
183
|
return targetDeviceConfig?.[0]?.bootloaderRelatedFirmwareVersion ?? undefined;
|
|
242
184
|
};
|
|
243
185
|
|
|
244
|
-
static getFirmwareChangelog = (features: Features
|
|
186
|
+
static getFirmwareChangelog = (features: Features) => {
|
|
245
187
|
const deviceType = getDeviceType(features);
|
|
246
188
|
if (deviceType === EDeviceType.Unknown) return [];
|
|
247
189
|
|
|
@@ -250,7 +192,6 @@ export default class DataManager {
|
|
|
250
192
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
251
193
|
features,
|
|
252
194
|
updateType: 'firmware',
|
|
253
|
-
firmwareType,
|
|
254
195
|
}) as IFirmwareField;
|
|
255
196
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
256
197
|
|
|
@@ -266,14 +207,13 @@ export default class DataManager {
|
|
|
266
207
|
return getReleaseChangelog(targetDeviceConfigList, currentVersion);
|
|
267
208
|
};
|
|
268
209
|
|
|
269
|
-
static getFirmwareLatestRelease = (features: Features
|
|
210
|
+
static getFirmwareLatestRelease = (features: Features) => {
|
|
270
211
|
const deviceType = getDeviceType(features);
|
|
271
212
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
272
213
|
|
|
273
214
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
274
215
|
features,
|
|
275
216
|
updateType: 'firmware',
|
|
276
|
-
firmwareType,
|
|
277
217
|
}) as IFirmwareField;
|
|
278
218
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
279
219
|
|
|
@@ -281,7 +221,7 @@ export default class DataManager {
|
|
|
281
221
|
if (!target) return target;
|
|
282
222
|
|
|
283
223
|
if (!target.resource) {
|
|
284
|
-
const resource = this.getSysResourcesLatestRelease(
|
|
224
|
+
const resource = this.getSysResourcesLatestRelease(features);
|
|
285
225
|
return {
|
|
286
226
|
...target,
|
|
287
227
|
resource,
|
|
@@ -338,50 +278,6 @@ export default class DataManager {
|
|
|
338
278
|
|
|
339
279
|
static getBridgeChangelog = () => this.assets?.bridge.changelog;
|
|
340
280
|
|
|
341
|
-
private static enrichFirmwareReleaseInfo(
|
|
342
|
-
deviceData: DeviceTypeMap[keyof DeviceTypeMap] | undefined
|
|
343
|
-
): DeviceTypeMap[keyof DeviceTypeMap] {
|
|
344
|
-
// Safety check: return default structure if input is undefined/null
|
|
345
|
-
if (!deviceData || typeof deviceData !== 'object') {
|
|
346
|
-
return {
|
|
347
|
-
firmware: [],
|
|
348
|
-
ble: [],
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Create a shallow copy to avoid mutating original data
|
|
353
|
-
const enrichedData = { ...deviceData };
|
|
354
|
-
|
|
355
|
-
FIRMWARE_FIELDS.forEach(field => {
|
|
356
|
-
const releases = enrichedData[field];
|
|
357
|
-
|
|
358
|
-
if (!releases || !Array.isArray(releases) || releases.length === 0) {
|
|
359
|
-
return; // Skip this field
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// Add firmwareType to each release in this field
|
|
363
|
-
try {
|
|
364
|
-
enrichedData[field] = releases.map(release => {
|
|
365
|
-
// Safety checks:
|
|
366
|
-
if (!release || typeof release !== 'object' || !!release.firmwareType) {
|
|
367
|
-
return release; // Return as-is if invalid or already has firmwareType
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
const firmwareType = getFirmwareTypeFromField(field);
|
|
371
|
-
|
|
372
|
-
return {
|
|
373
|
-
...release,
|
|
374
|
-
firmwareType,
|
|
375
|
-
};
|
|
376
|
-
});
|
|
377
|
-
} catch (error) {
|
|
378
|
-
console.error(`Error enriching firmware field "${field}":`, error);
|
|
379
|
-
}
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
return enrichedData;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
281
|
static async load(settings: ConnectSettings) {
|
|
386
282
|
this.settings = settings;
|
|
387
283
|
if (!settings.fetchConfig) {
|
|
@@ -400,12 +296,12 @@ export default class DataManager {
|
|
|
400
296
|
}
|
|
401
297
|
);
|
|
402
298
|
this.deviceMap = {
|
|
403
|
-
[EDeviceType.Classic]:
|
|
404
|
-
[EDeviceType.Classic1s]:
|
|
405
|
-
[EDeviceType.ClassicPure]:
|
|
406
|
-
[EDeviceType.Mini]:
|
|
407
|
-
[EDeviceType.Touch]:
|
|
408
|
-
[EDeviceType.Pro]:
|
|
299
|
+
[EDeviceType.Classic]: data.classic,
|
|
300
|
+
[EDeviceType.Classic1s]: data.classic1s,
|
|
301
|
+
[EDeviceType.ClassicPure]: data.classicpure,
|
|
302
|
+
[EDeviceType.Mini]: data.mini,
|
|
303
|
+
[EDeviceType.Touch]: data.touch,
|
|
304
|
+
[EDeviceType.Pro]: data.pro,
|
|
409
305
|
};
|
|
410
306
|
this.assets = {
|
|
411
307
|
bridge: data.bridge,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { IBLEFirmwareReleaseInfo } from '../settings';
|
|
2
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
3
1
|
import type { CommonParams, Response } from '../params';
|
|
4
2
|
import type { IDeviceBLEFirmwareStatus, IDeviceFirmwareStatus } from '../device';
|
|
3
|
+
import { IBLEFirmwareReleaseInfo } from '../settings';
|
|
5
4
|
|
|
6
5
|
export type FirmwareRelease = {
|
|
7
6
|
shouldUpdate?: boolean;
|
|
@@ -23,7 +22,6 @@ export type AllFirmwareRelease = {
|
|
|
23
22
|
|
|
24
23
|
export type CheckAllFirmwareReleaseParams = {
|
|
25
24
|
checkBridgeRelease?: boolean;
|
|
26
|
-
firmwareType?: EFirmwareType;
|
|
27
25
|
};
|
|
28
26
|
|
|
29
27
|
export declare function checkAllFirmwareRelease(
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
1
|
import type { CommonParams, Response } from '../params';
|
|
3
2
|
|
|
4
3
|
export type CheckBootloaderReleaseResponse = {
|
|
@@ -8,12 +7,9 @@ export type CheckBootloaderReleaseResponse = {
|
|
|
8
7
|
bootloaderMode: boolean;
|
|
9
8
|
} | null;
|
|
10
9
|
|
|
11
|
-
export type CheckBootloaderReleaseParams = {
|
|
12
|
-
willUpdateFirmwareVersion?: string;
|
|
13
|
-
firmwareType?: EFirmwareType;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
10
|
export declare function checkBootloaderRelease(
|
|
17
11
|
connectId?: string,
|
|
18
|
-
params?: CommonParams &
|
|
12
|
+
params?: CommonParams & {
|
|
13
|
+
willUpdateFirmwareVersion?: string;
|
|
14
|
+
}
|
|
19
15
|
): Response<CheckBootloaderReleaseResponse>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { IFirmwareReleaseInfo } from '../settings';
|
|
2
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
3
1
|
import type { Response } from '../params';
|
|
4
2
|
import type { IDeviceFirmwareStatus } from '../device';
|
|
3
|
+
import { IFirmwareReleaseInfo } from '../settings';
|
|
5
4
|
|
|
6
5
|
type FirmwareRelease = {
|
|
7
6
|
status: IDeviceFirmwareStatus;
|
|
@@ -13,11 +12,4 @@ type FirmwareRelease = {
|
|
|
13
12
|
bootloaderMode: boolean;
|
|
14
13
|
};
|
|
15
14
|
|
|
16
|
-
export
|
|
17
|
-
firmwareType?: EFirmwareType;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export declare function checkFirmwareRelease(
|
|
21
|
-
connectId?: string,
|
|
22
|
-
params?: CheckFirmwareReleaseParams
|
|
23
|
-
): Response<FirmwareRelease>;
|
|
15
|
+
export declare function checkFirmwareRelease(connectId?: string): Response<FirmwareRelease>;
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
1
|
+
import { Success } from '@onekeyfe/hd-transport';
|
|
3
2
|
import type { CommonParams, Response } from '../params';
|
|
4
3
|
|
|
5
|
-
export type DeviceFullyUploadResourceParams = {
|
|
6
|
-
binary?: ArrayBuffer;
|
|
7
|
-
firmwareType?: EFirmwareType;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
4
|
export declare function deviceFullyUploadResource(
|
|
11
5
|
connectId: string,
|
|
12
6
|
params: CommonParams & {
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
1
|
+
import { Success } from '@onekeyfe/hd-transport';
|
|
3
2
|
import type { Response } from '../params';
|
|
4
3
|
|
|
5
|
-
export type DeviceUpdateBootloaderParams = {
|
|
6
|
-
binary?: ArrayBuffer;
|
|
7
|
-
firmwareType?: EFirmwareType;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
4
|
export declare function deviceUpdateBootloader(
|
|
11
5
|
connectId: string,
|
|
12
|
-
params?:
|
|
6
|
+
params?: {
|
|
7
|
+
binary?: ArrayBuffer;
|
|
8
|
+
}
|
|
13
9
|
): Response<Success>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
1
|
import type { PROTO } from '../../constants';
|
|
3
2
|
import type { Params, Response } from '../params';
|
|
4
3
|
|
|
@@ -11,10 +10,10 @@ export interface FirmwareUpdateBinaryParams {
|
|
|
11
10
|
|
|
12
11
|
export interface FirmwareUpdateParams {
|
|
13
12
|
version?: number[];
|
|
13
|
+
btcOnly?: boolean;
|
|
14
14
|
updateType: IUpdateType;
|
|
15
15
|
forcedUpdateRes?: boolean;
|
|
16
16
|
isUpdateBootloader?: boolean;
|
|
17
|
-
firmwareType?: EFirmwareType;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
export declare function firmwareUpdate(
|
|
@@ -51,8 +50,6 @@ export interface FirmwareUpdateV3Params {
|
|
|
51
50
|
resourceBinary?: ArrayBuffer;
|
|
52
51
|
forcedUpdateRes?: boolean;
|
|
53
52
|
|
|
54
|
-
firmwareType?: EFirmwareType;
|
|
55
|
-
|
|
56
53
|
platform: IPlatform;
|
|
57
54
|
}
|
|
58
55
|
|
package/src/types/settings.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
1
|
import type { IDeviceType } from './device';
|
|
3
2
|
|
|
4
3
|
export type transportEnv =
|
|
@@ -41,11 +40,6 @@ export type ILocale = 'zh-CN' | 'en-US';
|
|
|
41
40
|
export type IFirmwareReleaseInfo = {
|
|
42
41
|
required: boolean;
|
|
43
42
|
url: string;
|
|
44
|
-
/**
|
|
45
|
-
* Firmware type (bitcoinonly or universal)
|
|
46
|
-
* This field is not present in the remote config, but will be inferred from the firmware field name
|
|
47
|
-
*/
|
|
48
|
-
firmwareType?: EFirmwareType;
|
|
49
43
|
/** Firmware UI resource */
|
|
50
44
|
resource?: string;
|
|
51
45
|
/** Firmware full UI resource */
|
|
@@ -81,42 +75,11 @@ export type IBLEFirmwareReleaseInfo = {
|
|
|
81
75
|
};
|
|
82
76
|
|
|
83
77
|
type IKnownDevice = Exclude<IDeviceType, 'unknown'>;
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Device firmware configuration map
|
|
87
|
-
*
|
|
88
|
-
* IMPORTANT: This type is used for firmware update logic.
|
|
89
|
-
* - DO NOT remove existing firmware fields
|
|
90
|
-
* - Only ADD new optional firmware fields for new versions
|
|
91
|
-
* - 'firmware' field is required for backward compatibility
|
|
92
|
-
* - 'ble' field is required for BLE firmware updates
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* // When adding firmware-v8:
|
|
96
|
-
* // {
|
|
97
|
-
* // firmware: IFirmwareReleaseInfo[];
|
|
98
|
-
* // 'firmware-v2'?: IFirmwareReleaseInfo[];
|
|
99
|
-
* // 'firmware-v7'?: IFirmwareReleaseInfo[];
|
|
100
|
-
* // 'firmware-v8'?: IFirmwareReleaseInfo[]; // New
|
|
101
|
-
* // 'firmware-btc-v7'?: IFirmwareReleaseInfo[];
|
|
102
|
-
* // 'firmware-btc-v8'?: IFirmwareReleaseInfo[]; // New
|
|
103
|
-
* // ble: IBLEFirmwareReleaseInfo[];
|
|
104
|
-
* // }
|
|
105
|
-
*/
|
|
106
78
|
export type DeviceTypeMap = {
|
|
107
79
|
[k in IKnownDevice]: {
|
|
108
|
-
/** Base firmware field (required for backward compatibility) */
|
|
109
80
|
firmware: IFirmwareReleaseInfo[];
|
|
110
|
-
/** Firmware v2 (Touch/Pro specific) */
|
|
111
81
|
'firmware-v2'?: IFirmwareReleaseInfo[];
|
|
112
|
-
/** Universal firmware v7 */
|
|
113
82
|
'firmware-v7'?: IFirmwareReleaseInfo[];
|
|
114
|
-
/** Bitcoin-only firmware v7 */
|
|
115
|
-
'firmware-btc-v7'?: IFirmwareReleaseInfo[];
|
|
116
|
-
// Future firmware versions should be added here as optional fields:
|
|
117
|
-
// 'firmware-v8'?: IFirmwareReleaseInfo[];
|
|
118
|
-
// 'firmware-btc-v8'?: IFirmwareReleaseInfo[];
|
|
119
|
-
/** BLE firmware (required) */
|
|
120
83
|
ble: IBLEFirmwareReleaseInfo[];
|
|
121
84
|
};
|
|
122
85
|
};
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import { isNaN } from 'lodash';
|
|
3
|
-
import { EDeviceType,
|
|
3
|
+
import { EDeviceType, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
4
4
|
import { Enum_Capability } from '@onekeyfe/hd-transport';
|
|
5
|
-
|
|
6
5
|
import { toHardened } from '../api/helpers/pathUtils';
|
|
6
|
+
import { DeviceCommands } from '../device/DeviceCommands';
|
|
7
|
+
import type { Features, SupportFeatureType } from '../types';
|
|
7
8
|
import { DeviceModelToTypes, DeviceTypeToModels } from '../types';
|
|
8
|
-
import DataManager, {
|
|
9
|
+
import DataManager, { IFirmwareField, MessageVersion } from '../data-manager/DataManager';
|
|
9
10
|
import { PROTOBUF_MESSAGE_CONFIG } from '../data-manager/MessagesConfig';
|
|
11
|
+
import { Device } from '../device/Device';
|
|
10
12
|
import { getDeviceType } from './deviceInfoUtils';
|
|
11
13
|
import { getDeviceFirmwareVersion } from './deviceVersionUtils';
|
|
12
14
|
import { existCapability } from './capabilitieUtils';
|
|
13
15
|
|
|
14
|
-
import type { Device } from '../device/Device';
|
|
15
|
-
import type { DeviceCommands } from '../device/DeviceCommands';
|
|
16
|
-
import type { Features, SupportFeatureType } from '../types';
|
|
17
|
-
|
|
18
16
|
export const getSupportMessageVersion = (
|
|
19
17
|
features: Features | undefined
|
|
20
18
|
): { messages: JSON; messageVersion: MessageVersion } => {
|
|
@@ -233,13 +231,6 @@ export const supportModifyHomescreen = (features?: Features): SupportFeatureType
|
|
|
233
231
|
return { support: semver.gte(currentVersion, '3.4.0') };
|
|
234
232
|
};
|
|
235
233
|
|
|
236
|
-
const getLatestFirmwareField = (firmwareType?: EFirmwareType): IFirmwareField => {
|
|
237
|
-
if (firmwareType === 'bitcoinonly') {
|
|
238
|
-
return `firmware-btc-v7`;
|
|
239
|
-
}
|
|
240
|
-
return `firmware-v7`;
|
|
241
|
-
};
|
|
242
|
-
|
|
243
234
|
/**
|
|
244
235
|
* Since 3.5.0, Touch uses the firmware-v3 field to get firmware release info
|
|
245
236
|
*/
|
|
@@ -247,36 +238,33 @@ export const getFirmwareUpdateField = ({
|
|
|
247
238
|
features,
|
|
248
239
|
updateType,
|
|
249
240
|
targetVersion,
|
|
250
|
-
firmwareType,
|
|
251
241
|
}: {
|
|
252
242
|
features: Features;
|
|
253
243
|
updateType: 'firmware' | 'ble';
|
|
254
244
|
targetVersion?: string;
|
|
255
|
-
firmwareType: EFirmwareType;
|
|
256
245
|
}): 'ble' | IFirmwareField => {
|
|
257
246
|
const deviceType = getDeviceType(features);
|
|
258
247
|
const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
|
|
259
248
|
if (updateType === 'ble') {
|
|
260
249
|
return 'ble';
|
|
261
250
|
}
|
|
262
|
-
const latestFirmwareField = getLatestFirmwareField(firmwareType);
|
|
263
251
|
|
|
264
252
|
if (DeviceModelToTypes.model_mini.includes(deviceType)) {
|
|
265
|
-
return
|
|
253
|
+
return 'firmware-v7';
|
|
266
254
|
}
|
|
267
255
|
|
|
268
256
|
if (deviceType === EDeviceType.Touch) {
|
|
269
257
|
if (targetVersion) {
|
|
270
258
|
if (semver.eq(targetVersion, '4.0.0')) return 'firmware-v2';
|
|
271
|
-
if (semver.gt(targetVersion, '4.0.0')) return
|
|
259
|
+
if (semver.gt(targetVersion, '4.0.0')) return 'firmware-v7';
|
|
272
260
|
}
|
|
273
261
|
|
|
274
262
|
if (semver.lt(deviceFirmwareVersion.join('.'), '3.4.0')) return 'firmware';
|
|
275
263
|
|
|
276
|
-
return
|
|
264
|
+
return 'firmware-v7';
|
|
277
265
|
}
|
|
278
266
|
if (deviceType === EDeviceType.Pro) {
|
|
279
|
-
return
|
|
267
|
+
return 'firmware-v7';
|
|
280
268
|
}
|
|
281
269
|
return 'firmware';
|
|
282
270
|
};
|
|
@@ -288,7 +276,7 @@ export const getFirmwareUpdateField = ({
|
|
|
288
276
|
export const getFirmwareUpdateFieldArray = (
|
|
289
277
|
features: Features,
|
|
290
278
|
updateType: 'firmware' | 'ble' | 'bootloader'
|
|
291
|
-
): ('ble' |
|
|
279
|
+
): ('firmware' | 'ble' | 'firmware-v2' | 'firmware-v7')[] => {
|
|
292
280
|
const deviceType = getDeviceType(features);
|
|
293
281
|
if (updateType === 'ble') {
|
|
294
282
|
return ['ble'];
|