@onekeyfe/hd-core 1.1.26-alpha.12 → 1.1.26-alpha.30

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.
Files changed (145) hide show
  1. package/__tests__/protocol-v2.test.ts +912 -0
  2. package/dist/api/DirList.d.ts +10 -0
  3. package/dist/api/DirList.d.ts.map +1 -0
  4. package/dist/api/DirMake.d.ts +9 -0
  5. package/dist/api/DirMake.d.ts.map +1 -0
  6. package/dist/api/DirRemove.d.ts +9 -0
  7. package/dist/api/DirRemove.d.ts.map +1 -0
  8. package/dist/api/FileDelete.d.ts +9 -0
  9. package/dist/api/FileDelete.d.ts.map +1 -0
  10. package/dist/api/FileRead.d.ts +19 -0
  11. package/dist/api/FileRead.d.ts.map +1 -0
  12. package/dist/api/FileWrite.d.ts +23 -0
  13. package/dist/api/FileWrite.d.ts.map +1 -0
  14. package/dist/api/FirmwareUpdateV3.d.ts +1 -0
  15. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  16. package/dist/api/FirmwareUpdateV4.d.ts +32 -0
  17. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -0
  18. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  19. package/dist/api/PathInfo.d.ts +9 -0
  20. package/dist/api/PathInfo.d.ts.map +1 -0
  21. package/dist/api/SearchDevices.d.ts +2 -1
  22. package/dist/api/SearchDevices.d.ts.map +1 -1
  23. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -1
  24. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  25. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  26. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +10 -2
  27. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  28. package/dist/api/index.d.ts +26 -0
  29. package/dist/api/index.d.ts.map +1 -1
  30. package/dist/api/protocol-v2/DevFirmwareUpdate.d.ts +7 -0
  31. package/dist/api/protocol-v2/DevFirmwareUpdate.d.ts.map +1 -0
  32. package/dist/api/protocol-v2/DevGetDeviceInfo.d.ts +7 -0
  33. package/dist/api/protocol-v2/DevGetDeviceInfo.d.ts.map +1 -0
  34. package/dist/api/protocol-v2/DevGetFirmwareUpdateStatus.d.ts +6 -0
  35. package/dist/api/protocol-v2/DevGetFirmwareUpdateStatus.d.ts.map +1 -0
  36. package/dist/api/protocol-v2/DevGetOnboardingStatus.d.ts +6 -0
  37. package/dist/api/protocol-v2/DevGetOnboardingStatus.d.ts.map +1 -0
  38. package/dist/api/protocol-v2/DevReboot.d.ts +7 -0
  39. package/dist/api/protocol-v2/DevReboot.d.ts.map +1 -0
  40. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +7 -0
  41. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +1 -0
  42. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +6 -0
  43. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +1 -0
  44. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts +6 -0
  45. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +1 -0
  46. package/dist/api/protocol-v2/FilesystemFormat.d.ts +6 -0
  47. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -0
  48. package/dist/api/protocol-v2/GetProtoVersion.d.ts +6 -0
  49. package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +1 -0
  50. package/dist/api/protocol-v2/Ping.d.ts +8 -0
  51. package/dist/api/protocol-v2/Ping.d.ts.map +1 -0
  52. package/dist/api/protocol-v2/helpers.d.ts +49 -0
  53. package/dist/api/protocol-v2/helpers.d.ts.map +1 -0
  54. package/dist/core/index.d.ts.map +1 -1
  55. package/dist/data-manager/DataManager.d.ts +4 -2
  56. package/dist/data-manager/DataManager.d.ts.map +1 -1
  57. package/dist/data-manager/TransportManager.d.ts +2 -1
  58. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  59. package/dist/device/Device.d.ts +5 -3
  60. package/dist/device/Device.d.ts.map +1 -1
  61. package/dist/device/DeviceCommands.d.ts +8 -8
  62. package/dist/device/DeviceCommands.d.ts.map +1 -1
  63. package/dist/device/DeviceConnector.d.ts +2 -1
  64. package/dist/device/DeviceConnector.d.ts.map +1 -1
  65. package/dist/events/ui-request.d.ts +8 -0
  66. package/dist/events/ui-request.d.ts.map +1 -1
  67. package/dist/index.d.ts +187 -20
  68. package/dist/index.js +2664 -182
  69. package/dist/inject.d.ts.map +1 -1
  70. package/dist/protocols/protocol-v2/features.d.ts +56 -0
  71. package/dist/protocols/protocol-v2/features.d.ts.map +1 -0
  72. package/dist/protocols/protocol-v2/firmware.d.ts +12 -0
  73. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -0
  74. package/dist/protocols/protocol-v2/index.d.ts +3 -0
  75. package/dist/protocols/protocol-v2/index.d.ts.map +1 -0
  76. package/dist/types/api/export.d.ts +1 -1
  77. package/dist/types/api/export.d.ts.map +1 -1
  78. package/dist/types/api/firmwareUpdate.d.ts +7 -0
  79. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  80. package/dist/types/api/index.d.ts +28 -1
  81. package/dist/types/api/index.d.ts.map +1 -1
  82. package/dist/types/api/protocolV2.d.ts +123 -0
  83. package/dist/types/api/protocolV2.d.ts.map +1 -0
  84. package/dist/types/api/searchDevices.d.ts +2 -2
  85. package/dist/types/api/searchDevices.d.ts.map +1 -1
  86. package/dist/types/device.d.ts +1 -1
  87. package/dist/types/device.d.ts.map +1 -1
  88. package/dist/types/params.d.ts +2 -0
  89. package/dist/types/params.d.ts.map +1 -1
  90. package/dist/types/settings.d.ts +1 -1
  91. package/dist/types/settings.d.ts.map +1 -1
  92. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  93. package/dist/utils/patch.d.ts +1 -1
  94. package/dist/utils/patch.d.ts.map +1 -1
  95. package/dist/utils/versionUtils.d.ts +1 -1
  96. package/package.json +4 -4
  97. package/src/api/DirList.ts +25 -0
  98. package/src/api/DirMake.ts +20 -0
  99. package/src/api/DirRemove.ts +20 -0
  100. package/src/api/FileDelete.ts +20 -0
  101. package/src/api/FileRead.ts +161 -0
  102. package/src/api/FileWrite.ts +191 -0
  103. package/src/api/FirmwareUpdateV3.ts +21 -4
  104. package/src/api/FirmwareUpdateV4.ts +810 -0
  105. package/src/api/GetOnekeyFeatures.ts +75 -3
  106. package/src/api/PathInfo.ts +24 -0
  107. package/src/api/SearchDevices.ts +7 -2
  108. package/src/api/device/DeviceRebootToBoardloader.ts +10 -1
  109. package/src/api/device/DeviceRebootToBootloader.ts +10 -1
  110. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +27 -4
  111. package/src/api/index.ts +28 -0
  112. package/src/api/protocol-v2/DevFirmwareUpdate.ts +33 -0
  113. package/src/api/protocol-v2/DevGetDeviceInfo.ts +35 -0
  114. package/src/api/protocol-v2/DevGetFirmwareUpdateStatus.ts +18 -0
  115. package/src/api/protocol-v2/DevGetOnboardingStatus.ts +18 -0
  116. package/src/api/protocol-v2/DevReboot.ts +22 -0
  117. package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +27 -0
  118. package/src/api/protocol-v2/FactoryGetDeviceInfo.ts +18 -0
  119. package/src/api/protocol-v2/FilesystemFixPermission.ts +14 -0
  120. package/src/api/protocol-v2/FilesystemFormat.ts +14 -0
  121. package/src/api/protocol-v2/GetProtoVersion.ts +14 -0
  122. package/src/api/protocol-v2/Ping.ts +16 -0
  123. package/src/api/protocol-v2/helpers.ts +140 -0
  124. package/src/core/index.ts +19 -2
  125. package/src/data/messages/messages-pro2.json +733 -0
  126. package/src/data-manager/DataManager.ts +6 -2
  127. package/src/data-manager/TransportManager.ts +29 -3
  128. package/src/device/Device.ts +66 -8
  129. package/src/device/DeviceCommands.ts +156 -26
  130. package/src/device/DeviceConnector.ts +29 -4
  131. package/src/device/DevicePool.ts +1 -1
  132. package/src/events/ui-request.ts +8 -0
  133. package/src/inject.ts +43 -1
  134. package/src/protocols/protocol-v2/features.ts +259 -0
  135. package/src/protocols/protocol-v2/firmware.ts +26 -0
  136. package/src/protocols/protocol-v2/index.ts +2 -0
  137. package/src/types/api/export.ts +1 -0
  138. package/src/types/api/firmwareUpdate.ts +12 -0
  139. package/src/types/api/index.ts +63 -1
  140. package/src/types/api/protocolV2.ts +221 -0
  141. package/src/types/api/searchDevices.ts +2 -2
  142. package/src/types/device.ts +3 -1
  143. package/src/types/params.ts +7 -0
  144. package/src/types/settings.ts +1 -1
  145. package/src/utils/deviceInfoUtils.ts +9 -5
@@ -0,0 +1,140 @@
1
+ import { DevRebootType } from '@onekeyfe/hd-transport';
2
+
3
+ import type {
4
+ DevFirmwareTarget,
5
+ DevFirmwareTargetType,
6
+ DevInfoTargets,
7
+ DevInfoTypes,
8
+ TransportCallOptions,
9
+ } from '@onekeyfe/hd-transport';
10
+
11
+ export type RebootTypeInput = DevRebootType | keyof typeof DevRebootType | string | number;
12
+
13
+ export type DevRebootParams = {
14
+ rebootType?: RebootTypeInput;
15
+ reboot_type?: RebootTypeInput;
16
+ };
17
+
18
+ export type DevGetDeviceInfoParams = {
19
+ targets?: DevInfoTargets;
20
+ types?: DevInfoTypes;
21
+ targetHw?: boolean;
22
+ targetFw?: boolean;
23
+ targetBt?: boolean;
24
+ targetSe1?: boolean;
25
+ targetSe2?: boolean;
26
+ targetSe3?: boolean;
27
+ targetSe4?: boolean;
28
+ targetStatus?: boolean;
29
+ includeVersion?: boolean;
30
+ includeBuildId?: boolean;
31
+ includeHash?: boolean;
32
+ includeSpecific?: boolean;
33
+ };
34
+
35
+ export type DevFirmwareTargetInput =
36
+ | DevFirmwareTarget
37
+ | {
38
+ targetId?: DevFirmwareTargetType | string | number;
39
+ target_id?: DevFirmwareTargetType | string | number;
40
+ path: string;
41
+ };
42
+
43
+ export type DevFirmwareUpdateParams = {
44
+ targets?: DevFirmwareTargetInput[];
45
+ targetId?: DevFirmwareTargetType | string | number;
46
+ target_id?: DevFirmwareTargetType | string | number;
47
+ path?: string;
48
+ };
49
+
50
+ export type FactoryDeviceInfoSettingsParams = {
51
+ serial_no?: string;
52
+ serialNo?: string;
53
+ cpu_info?: string;
54
+ cpuInfo?: string;
55
+ pre_firmware?: string;
56
+ preFirmware?: string;
57
+ };
58
+
59
+ const DEV_REBOOT_TYPES: Record<string, DevRebootType> = {
60
+ Normal: DevRebootType.Normal,
61
+ normal: DevRebootType.Normal,
62
+ Boardloader: DevRebootType.Boardloader,
63
+ boardloader: DevRebootType.Boardloader,
64
+ Bootloader: DevRebootType.Bootloader,
65
+ bootloader: DevRebootType.Bootloader,
66
+ };
67
+
68
+ export const PROTOCOL_V2_FIRMWARE_UPDATE_OPTIONS: TransportCallOptions = {
69
+ intermediateTypes: ['DevFirmwareInstallProgress'],
70
+ };
71
+
72
+ export const PROTOCOL_V2_FIRMWARE_UPDATE_RESPONSE_TYPES: (
73
+ | 'Success'
74
+ | 'DevFirmwareUpdateStatus'
75
+ )[] = ['Success', 'DevFirmwareUpdateStatus'];
76
+
77
+ export function normalizeRebootType(value: RebootTypeInput | undefined): DevRebootType {
78
+ if (typeof value === 'number') return value;
79
+ if (typeof value === 'string') {
80
+ const numeric = Number(value);
81
+ if (Number.isFinite(numeric)) return numeric;
82
+ if (value in DEV_REBOOT_TYPES) return DEV_REBOOT_TYPES[value];
83
+ }
84
+ return DevRebootType.Normal;
85
+ }
86
+
87
+ function normalizeTargetId(
88
+ value: DevFirmwareTargetType | string | number | undefined
89
+ ): DevFirmwareTargetType {
90
+ if (typeof value === 'number') return value;
91
+ const numeric = Number(value);
92
+ if (Number.isFinite(numeric)) return numeric;
93
+ return 0;
94
+ }
95
+
96
+ export function normalizeFirmwareTargets(params: DevFirmwareUpdateParams): DevFirmwareTarget[] {
97
+ const targets =
98
+ params.targets ??
99
+ (params.path
100
+ ? [
101
+ {
102
+ target_id: params.target_id ?? params.targetId ?? 0,
103
+ path: params.path,
104
+ },
105
+ ]
106
+ : []);
107
+
108
+ return targets.map(target => ({
109
+ target_id: normalizeTargetId('target_id' in target ? target.target_id : target.targetId),
110
+ path: target.path,
111
+ }));
112
+ }
113
+
114
+ export function buildTargets(params: DevGetDeviceInfoParams): DevInfoTargets | undefined {
115
+ if (params.targets) return params.targets;
116
+
117
+ const targets: DevInfoTargets = {
118
+ hw: params.targetHw,
119
+ fw: params.targetFw,
120
+ bt: params.targetBt,
121
+ se1: params.targetSe1,
122
+ se2: params.targetSe2,
123
+ se3: params.targetSe3,
124
+ se4: params.targetSe4,
125
+ status: params.targetStatus,
126
+ };
127
+ return Object.values(targets).some(value => value !== undefined) ? targets : undefined;
128
+ }
129
+
130
+ export function buildTypes(params: DevGetDeviceInfoParams): DevInfoTypes | undefined {
131
+ if (params.types) return params.types;
132
+
133
+ const types: DevInfoTypes = {
134
+ version: params.includeVersion,
135
+ build_id: params.includeBuildId,
136
+ hash: params.includeHash,
137
+ specific: params.includeSpecific,
138
+ };
139
+ return Object.values(types).some(value => value !== undefined) ? types : undefined;
140
+ }
package/src/core/index.ts CHANGED
@@ -95,6 +95,7 @@ const parseInitOptions = (method?: BaseMethod): InitOptions => ({
95
95
  passphraseState: method?.payload.passphraseState,
96
96
  deviceId: method?.payload.deviceId,
97
97
  deriveCardano: method && hasDeriveCardano(method),
98
+ connectProtocol: method?.payload.connectProtocol,
98
99
  });
99
100
 
100
101
  let _core: Core;
@@ -648,6 +649,7 @@ function initDevice(method: BaseMethod) {
648
649
  } else if (allDevices.length > 1) {
649
650
  throw ERRORS.TypedError(
650
651
  [
652
+ 'firmwareUpdateV4',
651
653
  'firmwareUpdateV3',
652
654
  'firmwareUpdateV2',
653
655
  'checkFirmwareRelease',
@@ -702,15 +704,30 @@ function initDeviceForBle(method: BaseMethod) {
702
704
  */
703
705
  let bleTimeoutRetry = 0;
704
706
 
707
+ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown) {
708
+ const message = error instanceof Error ? error.message : String(error ?? '');
709
+ return (
710
+ method.payload.connectProtocol === 'V2' &&
711
+ message.includes('Device protocol mismatch') &&
712
+ message.includes('expected V2') &&
713
+ message.includes('did not respond to expected protocol')
714
+ );
715
+ }
716
+
705
717
  async function connectDeviceForBle(method: BaseMethod, device: Device) {
706
718
  try {
707
- await device.acquire();
719
+ await device.acquire(method.payload.connectProtocol);
708
720
  if (method.payload?.onlyConnectBleDevice) {
709
721
  return;
710
722
  }
711
723
  await device.initialize(parseInitOptions(method));
712
724
  } catch (err) {
713
- if (err.errorCode === HardwareErrorCode.BleTimeoutError && bleTimeoutRetry <= 5) {
725
+ if (
726
+ (err.errorCode === HardwareErrorCode.BleTimeoutError ||
727
+ err.errorCode === HardwareErrorCode.BleConnectedError ||
728
+ isRetryableBleProtocolV2ProbeError(method, err)) &&
729
+ bleTimeoutRetry <= 5
730
+ ) {
714
731
  bleTimeoutRetry += 1;
715
732
  Log.debug(`Bletooth connect timeout and will retry, retry count: ${bleTimeoutRetry}`);
716
733
  await wait(3000);