@onekeyfe/hd-core 1.1.18-alpha.0 → 1.1.19-alpha.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/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 +3 -2
- 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 +6 -1
- 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 +6 -3
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/releaseHelper.d.ts +7 -2
- package/dist/api/firmware/releaseHelper.d.ts.map +1 -1
- package/dist/api/firmware/updateBootloader.d.ts +7 -2
- 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 +16 -9
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/events/device.d.ts +2 -2
- package/dist/events/device.d.ts.map +1 -1
- package/dist/index.d.ts +45 -22
- package/dist/index.js +201 -75
- package/dist/types/api/checkAllFirmwareRelease.d.ts +5 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts +5 -2
- package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts +6 -2
- package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceFullyUploadResource.d.ts +6 -1
- package/dist/types/api/deviceFullyUploadResource.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -3
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +3 -1
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +128 -128
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/device.d.ts +1 -1
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/settings.d.ts +3 -0
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +7 -5
- 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 +17 -7
- package/src/api/CheckAllFirmwareRelease.ts +14 -6
- package/src/api/CheckBootloaderRelease.ts +13 -2
- package/src/api/CheckFirmwareRelease.ts +9 -2
- package/src/api/FirmwareUpdate.ts +7 -5
- package/src/api/FirmwareUpdateV2.ts +26 -14
- package/src/api/FirmwareUpdateV3.ts +29 -18
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +10 -11
- package/src/api/device/DeviceFullyUploadResource.ts +8 -2
- package/src/api/device/DeviceUpdateBootloader.ts +21 -5
- package/src/api/evm/EVMSignTypedData.ts +2 -8
- package/src/api/firmware/getBinary.ts +15 -4
- package/src/api/firmware/releaseHelper.ts +22 -11
- package/src/api/firmware/updateBootloader.ts +17 -9
- package/src/api/sui/SuiSignTransaction.ts +7 -1
- package/src/core/index.ts +3 -1
- package/src/data-manager/DataManager.ts +126 -22
- package/src/events/device.ts +2 -2
- package/src/types/api/checkAllFirmwareRelease.ts +5 -1
- package/src/types/api/checkBootloaderRelease.ts +7 -3
- package/src/types/api/checkFirmwareRelease.ts +10 -2
- package/src/types/api/deviceFullyUploadResource.ts +7 -1
- package/src/types/api/deviceUpdateBootloader.ts +8 -4
- package/src/types/api/firmwareUpdate.ts +4 -1
- package/src/types/api/index.ts +128 -161
- package/src/types/device.ts +2 -1
- package/src/types/settings.ts +37 -0
- package/src/utils/deviceFeaturesUtils.ts +22 -10
- package/src/utils/release.ts +2 -1
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
import { getDeviceType, httpRequest } from '../../utils';
|
|
5
5
|
import { DataManager } from '../../data-manager';
|
|
6
6
|
import { findLatestRelease } from '../../utils/release';
|
|
7
7
|
import { getFirmwareUpdateField } from '../../utils/deviceFeaturesUtils';
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
import type { Features } from '../../types';
|
|
10
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
11
|
+
import type { IFirmwareField } from '../../data-manager/DataManager';
|
|
9
12
|
|
|
10
13
|
export interface GetInfoProps {
|
|
11
14
|
features: Features;
|
|
12
15
|
updateType: 'firmware' | 'ble';
|
|
13
16
|
isUpdateBootloader?: boolean;
|
|
14
17
|
targetVersion?: string;
|
|
18
|
+
firmwareType: EFirmwareType;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
interface GetBinaryProps extends GetInfoProps {
|
|
@@ -23,8 +27,14 @@ export const getBinary = async ({
|
|
|
23
27
|
updateType,
|
|
24
28
|
version,
|
|
25
29
|
isUpdateBootloader,
|
|
30
|
+
firmwareType,
|
|
26
31
|
}: GetBinaryProps) => {
|
|
27
|
-
const releaseInfo = getInfo({
|
|
32
|
+
const releaseInfo = getInfo({
|
|
33
|
+
features,
|
|
34
|
+
updateType,
|
|
35
|
+
targetVersion: version?.join('.'),
|
|
36
|
+
firmwareType,
|
|
37
|
+
});
|
|
28
38
|
|
|
29
39
|
if (!releaseInfo) {
|
|
30
40
|
throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'no firmware found for this device');
|
|
@@ -71,7 +81,7 @@ export const getSysResourceBinary = async (url: string) => {
|
|
|
71
81
|
};
|
|
72
82
|
};
|
|
73
83
|
|
|
74
|
-
export const getInfo = ({ features, updateType, targetVersion }: GetInfoProps) => {
|
|
84
|
+
export const getInfo = ({ features, updateType, targetVersion, firmwareType }: GetInfoProps) => {
|
|
75
85
|
const deviceType = getDeviceType(features);
|
|
76
86
|
if (deviceType === 'unknown') {
|
|
77
87
|
return null;
|
|
@@ -82,6 +92,7 @@ export const getInfo = ({ features, updateType, targetVersion }: GetInfoProps) =
|
|
|
82
92
|
features,
|
|
83
93
|
updateType,
|
|
84
94
|
targetVersion,
|
|
95
|
+
firmwareType,
|
|
85
96
|
});
|
|
86
97
|
const releaseInfo = deviceMap?.[deviceType]?.[firmwareUpdateField] ?? [];
|
|
87
98
|
return findLatestRelease(releaseInfo);
|
|
@@ -6,10 +6,12 @@ import {
|
|
|
6
6
|
getDeviceType,
|
|
7
7
|
} from '../../utils';
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
9
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
10
|
+
|
|
11
|
+
export const getFirmwareReleaseInfo = (features: Features, firmwareType: EFirmwareType) => {
|
|
12
|
+
const firmwareStatus = DataManager.getFirmwareStatus(features, firmwareType);
|
|
13
|
+
const changelog = DataManager.getFirmwareChangelog(features, firmwareType);
|
|
14
|
+
const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
|
|
13
15
|
const bootloaderMode = !!features.bootloader_mode;
|
|
14
16
|
return {
|
|
15
17
|
status: firmwareStatus,
|
|
@@ -32,11 +34,16 @@ export const getBleFirmwareReleaseInfo = (features: Features) => {
|
|
|
32
34
|
};
|
|
33
35
|
};
|
|
34
36
|
|
|
35
|
-
export const getBootloaderReleaseInfo = (
|
|
36
|
-
features
|
|
37
|
-
willUpdateFirmwareVersion
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
export const getBootloaderReleaseInfo = ({
|
|
38
|
+
features,
|
|
39
|
+
willUpdateFirmwareVersion,
|
|
40
|
+
firmwareType,
|
|
41
|
+
}: {
|
|
42
|
+
features: Features;
|
|
43
|
+
willUpdateFirmwareVersion?: string;
|
|
44
|
+
firmwareType: EFirmwareType;
|
|
45
|
+
}) => {
|
|
46
|
+
const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
|
|
40
47
|
const changelog = [release?.bootloaderChangelog].filter(
|
|
41
48
|
item =>
|
|
42
49
|
item != null &&
|
|
@@ -52,9 +59,13 @@ export const getBootloaderReleaseInfo = (
|
|
|
52
59
|
const deviceType = getDeviceType(features);
|
|
53
60
|
// classic mini classic1s
|
|
54
61
|
if (DeviceModelToTypes.model_mini.includes(deviceType)) {
|
|
55
|
-
shouldUpdate = !!checkNeedUpdateBootForClassicAndMini(
|
|
62
|
+
shouldUpdate = !!checkNeedUpdateBootForClassicAndMini({
|
|
63
|
+
features,
|
|
64
|
+
willUpdateFirmware: willUpdateFirmwareVersion,
|
|
65
|
+
firmwareType,
|
|
66
|
+
});
|
|
56
67
|
} else if (DeviceModelToTypes.model_touch.includes(deviceType)) {
|
|
57
|
-
shouldUpdate = checkNeedUpdateBootForTouch(features);
|
|
68
|
+
shouldUpdate = checkNeedUpdateBootForTouch(features, firmwareType);
|
|
58
69
|
}
|
|
59
70
|
|
|
60
71
|
return {
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import ByteBuffer from 'bytebuffer';
|
|
2
2
|
import semver from 'semver';
|
|
3
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
3
4
|
import { DeviceModelToTypes, Features } from '../../types';
|
|
4
5
|
import { getDeviceType, getDeviceBootloaderVersion, getDeviceFirmwareVersion } from '../../utils';
|
|
5
6
|
import { DataManager } from '../../data-manager';
|
|
6
7
|
import { shouldUpdateBootloaderForClassicAndMini } from './bootloaderHelper';
|
|
7
8
|
|
|
8
|
-
export function checkNeedUpdateBootForTouch(features: Features) {
|
|
9
|
+
export function checkNeedUpdateBootForTouch(features: Features, firmwareType: EFirmwareType) {
|
|
9
10
|
const deviceType = getDeviceType(features);
|
|
10
11
|
if (!DeviceModelToTypes.model_touch.includes(deviceType)) return false;
|
|
11
12
|
const currentVersion = getDeviceFirmwareVersion(features).join('.');
|
|
12
13
|
const bootloaderVersion = getDeviceBootloaderVersion(features).join('.');
|
|
13
|
-
const targetBootloaderVersion = DataManager.getBootloaderTargetVersion(features);
|
|
14
|
+
const targetBootloaderVersion = DataManager.getBootloaderTargetVersion(features, firmwareType);
|
|
14
15
|
if (!targetBootloaderVersion) return false;
|
|
15
16
|
|
|
16
17
|
return (
|
|
@@ -23,22 +24,29 @@ export function checkNeedUpdateBootForTouch(features: Features) {
|
|
|
23
24
|
);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
export function checkNeedUpdateBootForClassicAndMini(
|
|
27
|
-
features
|
|
28
|
-
willUpdateFirmware
|
|
29
|
-
|
|
27
|
+
export function checkNeedUpdateBootForClassicAndMini({
|
|
28
|
+
features,
|
|
29
|
+
willUpdateFirmware,
|
|
30
|
+
firmwareType,
|
|
31
|
+
}: {
|
|
32
|
+
features: Features;
|
|
33
|
+
willUpdateFirmware?: string;
|
|
34
|
+
firmwareType: EFirmwareType;
|
|
35
|
+
}) {
|
|
30
36
|
const deviceType = getDeviceType(features);
|
|
31
37
|
if (!DeviceModelToTypes.model_mini.includes(deviceType)) return false;
|
|
32
38
|
if (!willUpdateFirmware) return false;
|
|
33
39
|
const currentVersion = getDeviceFirmwareVersion(features).join('.');
|
|
34
40
|
const bootloaderVersion = getDeviceBootloaderVersion(features).join('.');
|
|
35
|
-
const targetBootloaderVersion = DataManager.getBootloaderTargetVersion(features);
|
|
41
|
+
const targetBootloaderVersion = DataManager.getBootloaderTargetVersion(features, firmwareType);
|
|
36
42
|
if (targetBootloaderVersion && semver.gte(bootloaderVersion, targetBootloaderVersion.join('.'))) {
|
|
37
43
|
return false;
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
const bootloaderRelatedFirmwareVersion =
|
|
41
|
-
|
|
46
|
+
const bootloaderRelatedFirmwareVersion = DataManager.getBootloaderRelatedFirmwareVersion(
|
|
47
|
+
features,
|
|
48
|
+
firmwareType
|
|
49
|
+
);
|
|
42
50
|
if (!bootloaderRelatedFirmwareVersion) return false;
|
|
43
51
|
|
|
44
52
|
return shouldUpdateBootloaderForClassicAndMini({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SuiSignTx as HardwareSuiSignTx, TypedCall, SuiSignedTx } from '@onekeyfe/hd-transport';
|
|
2
1
|
import semver from 'semver';
|
|
3
2
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
3
|
+
|
|
4
4
|
import { UI_REQUEST } from '../../constants/ui-request';
|
|
5
5
|
import { validatePath } from '../helpers/pathUtils';
|
|
6
6
|
import { BaseMethod } from '../BaseMethod';
|
|
@@ -8,6 +8,12 @@ import { validateParams } from '../helpers/paramsValidator';
|
|
|
8
8
|
import { formatAnyHex } from '../helpers/hexUtils';
|
|
9
9
|
import { getDeviceFirmwareVersion, getDeviceType } from '../../utils';
|
|
10
10
|
import { DeviceModelToTypes } from '../../types';
|
|
11
|
+
|
|
12
|
+
import type {
|
|
13
|
+
SuiSignTx as HardwareSuiSignTx,
|
|
14
|
+
SuiSignedTx,
|
|
15
|
+
TypedCall,
|
|
16
|
+
} from '@onekeyfe/hd-transport';
|
|
11
17
|
import type { TypedResponseMessage } from '../../device/DeviceCommands';
|
|
12
18
|
|
|
13
19
|
type SuiSignTx = Omit<HardwareSuiSignTx, 'data_initial_chunk' | 'data_length'> & HardwareSuiSignTx;
|
package/src/core/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
setLoggerPostMessage,
|
|
23
23
|
wait,
|
|
24
24
|
getMethodVersionRange,
|
|
25
|
+
getFirmwareType,
|
|
25
26
|
} from '../utils';
|
|
26
27
|
import {
|
|
27
28
|
findDefectiveBatchDevice,
|
|
@@ -282,7 +283,8 @@ const onCallDevice = async (
|
|
|
282
283
|
}
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
const
|
|
286
|
+
const deviceFirmwareType = getFirmwareType(device.features);
|
|
287
|
+
const newVersionStatus = DataManager.getFirmwareStatus(device.features, deviceFirmwareType);
|
|
286
288
|
const bleVersionStatus = DataManager.getBLEFirmwareStatus(device.features);
|
|
287
289
|
|
|
288
290
|
const currentFirmwareVersion = getDeviceFirmwareVersion(device.features).join('.');
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import semver from 'semver';
|
|
3
|
-
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
3
|
+
import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
|
|
4
|
+
|
|
4
5
|
import MessagesJSON from '../data/messages/messages.json';
|
|
5
6
|
import MessagesLegacyV1JSON from '../data/messages/messages_legacy_v1.json';
|
|
6
7
|
import {
|
|
7
|
-
getTimeStamp,
|
|
8
8
|
getDeviceBLEFirmwareVersion,
|
|
9
9
|
getDeviceFirmwareVersion,
|
|
10
10
|
getDeviceType,
|
|
11
|
+
getFirmwareType,
|
|
11
12
|
getFirmwareUpdateField,
|
|
13
|
+
getTimeStamp,
|
|
12
14
|
} from '../utils';
|
|
15
|
+
import { DeviceModelToTypes } from '../types';
|
|
16
|
+
import { findLatestRelease, getReleaseChangelog, getReleaseStatus } from '../utils/release';
|
|
13
17
|
|
|
14
18
|
import type {
|
|
15
19
|
AssetsMap,
|
|
@@ -22,13 +26,37 @@ import type {
|
|
|
22
26
|
IVersionArray,
|
|
23
27
|
RemoteConfigResponse,
|
|
24
28
|
} from '../types';
|
|
25
|
-
import { DeviceModelToTypes } from '../types';
|
|
26
|
-
import { findLatestRelease, getReleaseChangelog, getReleaseStatus } from '../utils/release';
|
|
27
29
|
|
|
28
|
-
export
|
|
30
|
+
export const FIRMWARE_FIELDS = [
|
|
31
|
+
'firmware',
|
|
32
|
+
'firmware-v2',
|
|
33
|
+
'firmware-v7',
|
|
34
|
+
'firmware-btc-v7',
|
|
35
|
+
] as const;
|
|
36
|
+
|
|
37
|
+
export type IFirmwareField = (typeof FIRMWARE_FIELDS)[number];
|
|
29
38
|
|
|
30
39
|
export type MessageVersion = 'latest' | 'v1';
|
|
31
40
|
|
|
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
|
+
|
|
32
60
|
export default class DataManager {
|
|
33
61
|
static deviceMap: DeviceTypeMap = {
|
|
34
62
|
[EDeviceType.Classic]: {
|
|
@@ -68,10 +96,14 @@ export default class DataManager {
|
|
|
68
96
|
|
|
69
97
|
static lastCheckTimestamp = 0;
|
|
70
98
|
|
|
71
|
-
static getFirmwareStatus = (
|
|
99
|
+
static getFirmwareStatus = (
|
|
100
|
+
features: Features,
|
|
101
|
+
firmwareType: EFirmwareType
|
|
102
|
+
): IDeviceFirmwareStatus => {
|
|
72
103
|
const deviceType = getDeviceType(features);
|
|
73
104
|
if (deviceType === EDeviceType.Unknown) return 'unknown';
|
|
74
105
|
|
|
106
|
+
const deviceFirmwareType = getFirmwareType(features);
|
|
75
107
|
const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
|
|
76
108
|
if (features.firmware_present === false) {
|
|
77
109
|
return 'none';
|
|
@@ -81,9 +113,16 @@ export default class DataManager {
|
|
|
81
113
|
return 'unknown';
|
|
82
114
|
}
|
|
83
115
|
|
|
84
|
-
const firmwareUpdateField = getFirmwareUpdateField({
|
|
116
|
+
const firmwareUpdateField = getFirmwareUpdateField({
|
|
117
|
+
features,
|
|
118
|
+
updateType: 'firmware',
|
|
119
|
+
firmwareType,
|
|
120
|
+
});
|
|
85
121
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
86
|
-
|
|
122
|
+
let currentVersion = deviceFirmwareVersion.join('.');
|
|
123
|
+
if (targetDeviceConfigList.length > 0 && deviceFirmwareType !== firmwareType) {
|
|
124
|
+
currentVersion = '0.0.0';
|
|
125
|
+
}
|
|
87
126
|
return getReleaseStatus(targetDeviceConfigList, currentVersion);
|
|
88
127
|
};
|
|
89
128
|
|
|
@@ -91,7 +130,15 @@ export default class DataManager {
|
|
|
91
130
|
* Touch、Pro System UI Resource Update
|
|
92
131
|
* ** Interval upgrade is not considered **
|
|
93
132
|
*/
|
|
94
|
-
static getSysResourcesLatestRelease = (
|
|
133
|
+
static getSysResourcesLatestRelease = ({
|
|
134
|
+
features,
|
|
135
|
+
forcedUpdateRes,
|
|
136
|
+
firmwareType,
|
|
137
|
+
}: {
|
|
138
|
+
features: Features;
|
|
139
|
+
forcedUpdateRes?: boolean;
|
|
140
|
+
firmwareType: EFirmwareType;
|
|
141
|
+
}) => {
|
|
95
142
|
const deviceType = getDeviceType(features);
|
|
96
143
|
const deviceFirmwareVersion = getDeviceFirmwareVersion(features);
|
|
97
144
|
|
|
@@ -100,6 +147,7 @@ export default class DataManager {
|
|
|
100
147
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
101
148
|
features,
|
|
102
149
|
updateType: 'firmware',
|
|
150
|
+
firmwareType,
|
|
103
151
|
}) as IFirmwareField;
|
|
104
152
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
105
153
|
const currentVersion = deviceFirmwareVersion.join('.');
|
|
@@ -116,7 +164,7 @@ export default class DataManager {
|
|
|
116
164
|
* Touch、Pro System full UI Resource Update
|
|
117
165
|
* ** Interval upgrade is not considered **
|
|
118
166
|
*/
|
|
119
|
-
static getSysFullResource = (features: Features) => {
|
|
167
|
+
static getSysFullResource = (features: Features, firmwareType: EFirmwareType) => {
|
|
120
168
|
const deviceType = getDeviceType(features);
|
|
121
169
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
122
170
|
|
|
@@ -125,6 +173,7 @@ export default class DataManager {
|
|
|
125
173
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
126
174
|
features,
|
|
127
175
|
updateType: 'firmware',
|
|
176
|
+
firmwareType,
|
|
128
177
|
}) as IFirmwareField;
|
|
129
178
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
130
179
|
const targetDeviceConfig = targetDeviceConfigList.filter(item => !!item.fullResource);
|
|
@@ -132,7 +181,7 @@ export default class DataManager {
|
|
|
132
181
|
return findLatestRelease(targetDeviceConfig)?.fullResource;
|
|
133
182
|
};
|
|
134
183
|
|
|
135
|
-
static getBootloaderResource = (features: Features) => {
|
|
184
|
+
static getBootloaderResource = (features: Features, firmwareType: EFirmwareType) => {
|
|
136
185
|
const deviceType = getDeviceType(features);
|
|
137
186
|
if (deviceType === EDeviceType.Unknown) throw new Error('Device type is unknown');
|
|
138
187
|
|
|
@@ -140,6 +189,7 @@ export default class DataManager {
|
|
|
140
189
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
141
190
|
features,
|
|
142
191
|
updateType: 'firmware',
|
|
192
|
+
firmwareType,
|
|
143
193
|
}) as IFirmwareField;
|
|
144
194
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
145
195
|
if (targetDeviceConfigList.length === 0) {
|
|
@@ -152,13 +202,17 @@ export default class DataManager {
|
|
|
152
202
|
return findLatestRelease(targetDeviceConfig)?.bootloaderResource;
|
|
153
203
|
};
|
|
154
204
|
|
|
155
|
-
static getBootloaderTargetVersion = (
|
|
205
|
+
static getBootloaderTargetVersion = (
|
|
206
|
+
features: Features,
|
|
207
|
+
firmwareType: EFirmwareType
|
|
208
|
+
): IVersionArray | undefined => {
|
|
156
209
|
const deviceType = getDeviceType(features);
|
|
157
210
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
158
211
|
|
|
159
212
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
160
213
|
features,
|
|
161
214
|
updateType: 'firmware',
|
|
215
|
+
firmwareType,
|
|
162
216
|
}) as IFirmwareField;
|
|
163
217
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
164
218
|
const targetDeviceConfig = targetDeviceConfigList.filter(item => !!item.bootloaderResource);
|
|
@@ -166,7 +220,10 @@ export default class DataManager {
|
|
|
166
220
|
return targetDeviceConfig?.[0]?.bootloaderVersion ?? undefined;
|
|
167
221
|
};
|
|
168
222
|
|
|
169
|
-
static getBootloaderRelatedFirmwareVersion = (
|
|
223
|
+
static getBootloaderRelatedFirmwareVersion = (
|
|
224
|
+
features: Features,
|
|
225
|
+
firmwareType: EFirmwareType
|
|
226
|
+
): IVersionArray | undefined => {
|
|
170
227
|
const deviceType = getDeviceType(features);
|
|
171
228
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
172
229
|
|
|
@@ -174,6 +231,7 @@ export default class DataManager {
|
|
|
174
231
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
175
232
|
features,
|
|
176
233
|
updateType: 'firmware',
|
|
234
|
+
firmwareType,
|
|
177
235
|
}) as IFirmwareField;
|
|
178
236
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
179
237
|
const targetDeviceConfig = targetDeviceConfigList.filter(
|
|
@@ -183,7 +241,7 @@ export default class DataManager {
|
|
|
183
241
|
return targetDeviceConfig?.[0]?.bootloaderRelatedFirmwareVersion ?? undefined;
|
|
184
242
|
};
|
|
185
243
|
|
|
186
|
-
static getFirmwareChangelog = (features: Features) => {
|
|
244
|
+
static getFirmwareChangelog = (features: Features, firmwareType: EFirmwareType) => {
|
|
187
245
|
const deviceType = getDeviceType(features);
|
|
188
246
|
if (deviceType === EDeviceType.Unknown) return [];
|
|
189
247
|
|
|
@@ -192,6 +250,7 @@ export default class DataManager {
|
|
|
192
250
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
193
251
|
features,
|
|
194
252
|
updateType: 'firmware',
|
|
253
|
+
firmwareType,
|
|
195
254
|
}) as IFirmwareField;
|
|
196
255
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
197
256
|
|
|
@@ -207,13 +266,14 @@ export default class DataManager {
|
|
|
207
266
|
return getReleaseChangelog(targetDeviceConfigList, currentVersion);
|
|
208
267
|
};
|
|
209
268
|
|
|
210
|
-
static getFirmwareLatestRelease = (features: Features) => {
|
|
269
|
+
static getFirmwareLatestRelease = (features: Features, firmwareType: EFirmwareType) => {
|
|
211
270
|
const deviceType = getDeviceType(features);
|
|
212
271
|
if (deviceType === EDeviceType.Unknown) return undefined;
|
|
213
272
|
|
|
214
273
|
const firmwareUpdateField = getFirmwareUpdateField({
|
|
215
274
|
features,
|
|
216
275
|
updateType: 'firmware',
|
|
276
|
+
firmwareType,
|
|
217
277
|
}) as IFirmwareField;
|
|
218
278
|
const targetDeviceConfigList = this.deviceMap[deviceType]?.[firmwareUpdateField] ?? [];
|
|
219
279
|
|
|
@@ -221,7 +281,7 @@ export default class DataManager {
|
|
|
221
281
|
if (!target) return target;
|
|
222
282
|
|
|
223
283
|
if (!target.resource) {
|
|
224
|
-
const resource = this.getSysResourcesLatestRelease(features);
|
|
284
|
+
const resource = this.getSysResourcesLatestRelease({ features, firmwareType });
|
|
225
285
|
return {
|
|
226
286
|
...target,
|
|
227
287
|
resource,
|
|
@@ -278,6 +338,50 @@ export default class DataManager {
|
|
|
278
338
|
|
|
279
339
|
static getBridgeChangelog = () => this.assets?.bridge.changelog;
|
|
280
340
|
|
|
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
|
+
|
|
281
385
|
static async load(settings: ConnectSettings) {
|
|
282
386
|
this.settings = settings;
|
|
283
387
|
if (!settings.fetchConfig) {
|
|
@@ -296,12 +400,12 @@ export default class DataManager {
|
|
|
296
400
|
}
|
|
297
401
|
);
|
|
298
402
|
this.deviceMap = {
|
|
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,
|
|
403
|
+
[EDeviceType.Classic]: this.enrichFirmwareReleaseInfo(data.classic),
|
|
404
|
+
[EDeviceType.Classic1s]: this.enrichFirmwareReleaseInfo(data.classic1s),
|
|
405
|
+
[EDeviceType.ClassicPure]: this.enrichFirmwareReleaseInfo(data.classicpure),
|
|
406
|
+
[EDeviceType.Mini]: this.enrichFirmwareReleaseInfo(data.mini),
|
|
407
|
+
[EDeviceType.Touch]: this.enrichFirmwareReleaseInfo(data.touch),
|
|
408
|
+
[EDeviceType.Pro]: this.enrichFirmwareReleaseInfo(data.pro),
|
|
305
409
|
};
|
|
306
410
|
this.assets = {
|
|
307
411
|
bridge: data.bridge,
|
package/src/events/device.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { MessageFactoryFn } from './utils';
|
|
1
2
|
import type { PROTO } from '../constants';
|
|
2
|
-
import type {
|
|
3
|
-
import { MessageFactoryFn } from './utils';
|
|
3
|
+
import type { KnownDevice as Device, Features, SupportFeatures } from '../types/device';
|
|
4
4
|
|
|
5
5
|
export const DEVICE_EVENT = 'DEVICE_EVENT';
|
|
6
6
|
export const DEVICE = {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { IBLEFirmwareReleaseInfo } from '../settings';
|
|
2
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
3
|
+
import type { Features } from '@onekeyfe/hd-transport';
|
|
1
4
|
import type { CommonParams, Response } from '../params';
|
|
2
5
|
import type { IDeviceBLEFirmwareStatus, IDeviceFirmwareStatus } from '../device';
|
|
3
|
-
import { IBLEFirmwareReleaseInfo } from '../settings';
|
|
4
6
|
|
|
5
7
|
export type FirmwareRelease = {
|
|
6
8
|
shouldUpdate?: boolean;
|
|
@@ -18,10 +20,12 @@ export type AllFirmwareRelease = {
|
|
|
18
20
|
ble: FirmwareRelease;
|
|
19
21
|
bootloader?: FirmwareRelease;
|
|
20
22
|
bridge?: FirmwareRelease;
|
|
23
|
+
features?: Features;
|
|
21
24
|
};
|
|
22
25
|
|
|
23
26
|
export type CheckAllFirmwareReleaseParams = {
|
|
24
27
|
checkBridgeRelease?: boolean;
|
|
28
|
+
firmwareType?: EFirmwareType;
|
|
25
29
|
};
|
|
26
30
|
|
|
27
31
|
export declare function checkAllFirmwareRelease(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
1
2
|
import type { CommonParams, Response } from '../params';
|
|
2
3
|
|
|
3
4
|
export type CheckBootloaderReleaseResponse = {
|
|
@@ -7,9 +8,12 @@ export type CheckBootloaderReleaseResponse = {
|
|
|
7
8
|
bootloaderMode: boolean;
|
|
8
9
|
} | null;
|
|
9
10
|
|
|
11
|
+
export type CheckBootloaderReleaseParams = {
|
|
12
|
+
willUpdateFirmwareVersion?: string;
|
|
13
|
+
firmwareType?: EFirmwareType;
|
|
14
|
+
};
|
|
15
|
+
|
|
10
16
|
export declare function checkBootloaderRelease(
|
|
11
17
|
connectId?: string,
|
|
12
|
-
params?: CommonParams &
|
|
13
|
-
willUpdateFirmwareVersion?: string;
|
|
14
|
-
}
|
|
18
|
+
params?: CommonParams & CheckBootloaderReleaseParams
|
|
15
19
|
): Response<CheckBootloaderReleaseResponse>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { IFirmwareReleaseInfo } from '../settings';
|
|
2
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
1
3
|
import type { Response } from '../params';
|
|
2
4
|
import type { IDeviceFirmwareStatus } from '../device';
|
|
3
|
-
import { IFirmwareReleaseInfo } from '../settings';
|
|
4
5
|
|
|
5
6
|
type FirmwareRelease = {
|
|
6
7
|
status: IDeviceFirmwareStatus;
|
|
@@ -12,4 +13,11 @@ type FirmwareRelease = {
|
|
|
12
13
|
bootloaderMode: boolean;
|
|
13
14
|
};
|
|
14
15
|
|
|
15
|
-
export
|
|
16
|
+
export type CheckFirmwareReleaseParams = {
|
|
17
|
+
firmwareType?: EFirmwareType;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export declare function checkFirmwareRelease(
|
|
21
|
+
connectId?: string,
|
|
22
|
+
params?: CheckFirmwareReleaseParams
|
|
23
|
+
): Response<FirmwareRelease>;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { Success } from '@onekeyfe/hd-transport';
|
|
1
|
+
import type { Success } from '@onekeyfe/hd-transport';
|
|
2
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
3
|
import type { CommonParams, Response } from '../params';
|
|
3
4
|
|
|
5
|
+
export type DeviceFullyUploadResourceParams = {
|
|
6
|
+
binary?: ArrayBuffer;
|
|
7
|
+
firmwareType?: EFirmwareType;
|
|
8
|
+
};
|
|
9
|
+
|
|
4
10
|
export declare function deviceFullyUploadResource(
|
|
5
11
|
connectId: string,
|
|
6
12
|
params: CommonParams & {
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { Success } from '@onekeyfe/hd-transport';
|
|
1
|
+
import type { Success } from '@onekeyfe/hd-transport';
|
|
2
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
3
|
import type { Response } from '../params';
|
|
3
4
|
|
|
5
|
+
export type DeviceUpdateBootloaderParams = {
|
|
6
|
+
binary?: ArrayBuffer;
|
|
7
|
+
firmwareType?: EFirmwareType;
|
|
8
|
+
};
|
|
9
|
+
|
|
4
10
|
export declare function deviceUpdateBootloader(
|
|
5
11
|
connectId: string,
|
|
6
|
-
params?:
|
|
7
|
-
binary?: ArrayBuffer;
|
|
8
|
-
}
|
|
12
|
+
params?: DeviceUpdateBootloaderParams
|
|
9
13
|
): Response<Success>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
1
2
|
import type { PROTO } from '../../constants';
|
|
2
3
|
import type { Params, Response } from '../params';
|
|
3
4
|
|
|
@@ -10,10 +11,10 @@ export interface FirmwareUpdateBinaryParams {
|
|
|
10
11
|
|
|
11
12
|
export interface FirmwareUpdateParams {
|
|
12
13
|
version?: number[];
|
|
13
|
-
btcOnly?: boolean;
|
|
14
14
|
updateType: IUpdateType;
|
|
15
15
|
forcedUpdateRes?: boolean;
|
|
16
16
|
isUpdateBootloader?: boolean;
|
|
17
|
+
firmwareType?: EFirmwareType;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export declare function firmwareUpdate(
|
|
@@ -50,6 +51,8 @@ export interface FirmwareUpdateV3Params {
|
|
|
50
51
|
resourceBinary?: ArrayBuffer;
|
|
51
52
|
forcedUpdateRes?: boolean;
|
|
52
53
|
|
|
54
|
+
firmwareType?: EFirmwareType;
|
|
55
|
+
|
|
53
56
|
platform: IPlatform;
|
|
54
57
|
}
|
|
55
58
|
|