@onekeyfe/hd-core 1.2.0-alpha.67 → 1.2.0-alpha.68

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 (254) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +313 -0
  2. package/__tests__/DeviceCommands.test.ts +59 -13
  3. package/__tests__/DeviceEventRegistration.test.ts +6 -0
  4. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +198 -3
  5. package/__tests__/core-initialization.test.ts +23 -0
  6. package/__tests__/device-connector-protocol.test.ts +81 -0
  7. package/__tests__/device-lifecycle-events.test.ts +105 -3
  8. package/__tests__/device-pool-state.test.ts +22 -0
  9. package/__tests__/device-settings.test.ts +39 -18
  10. package/__tests__/device-state-contract.test.ts +1 -0
  11. package/__tests__/device-state-mapper.test.ts +13 -1
  12. package/__tests__/device-utils.test.ts +48 -1
  13. package/__tests__/deviceSettings.test.ts +11 -1
  14. package/__tests__/deviceUploadNft.test.ts +316 -0
  15. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +5 -0
  16. package/__tests__/get-device-state.test.ts +132 -12
  17. package/__tests__/homescreen.test.ts +41 -1
  18. package/__tests__/kaspa-use-tweak-pro2.test.ts +2 -2
  19. package/__tests__/kaspaSignTransaction.test.ts +3 -26
  20. package/__tests__/logBlockEvent.test.ts +1 -1
  21. package/__tests__/method-protocol-support.test.ts +19 -0
  22. package/__tests__/open-wallet-session.test.ts +568 -37
  23. package/__tests__/pro2Nft.test.ts +108 -0
  24. package/__tests__/protocol-binding.test.ts +89 -0
  25. package/__tests__/protocol-v2-resources.test.ts +340 -0
  26. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  27. package/__tests__/protocol-v2-unlock-policy.test.ts +300 -37
  28. package/__tests__/protocol-v2.test.ts +1449 -867
  29. package/__tests__/protocolV2FileWrite.test.ts +152 -0
  30. package/__tests__/protocolV2UiInteraction.test.ts +63 -0
  31. package/__tests__/public-pro2-api-boundary.test.ts +1 -0
  32. package/__tests__/search-devices.test.ts +12 -3
  33. package/__tests__/tron-sign-message-init.test.ts +2 -2
  34. package/__tests__/uiProgressThrottle.test.ts +74 -0
  35. package/__tests__/uiPromiseRegistry.test.ts +115 -0
  36. package/dist/api/BaseMethod.d.ts +3 -1
  37. package/dist/api/BaseMethod.d.ts.map +1 -1
  38. package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
  39. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  40. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  41. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  42. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  43. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  44. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  45. package/dist/api/FirmwareUpdateV4.d.ts +11 -4
  46. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  47. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  48. package/dist/api/OpenWalletSession.d.ts.map +1 -1
  49. package/dist/api/SearchDevices.d.ts.map +1 -1
  50. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  51. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  52. package/dist/api/device/DeviceUnlock.d.ts +2 -2
  53. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  54. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +4 -3
  55. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  56. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  57. package/dist/api/helpers/protocolV2FileWrite.d.ts +9 -0
  58. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  59. package/dist/api/index.d.ts +2 -0
  60. package/dist/api/index.d.ts.map +1 -1
  61. package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -1
  62. package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -1
  63. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  64. package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -1
  65. package/dist/api/polkadot/networks.d.ts +1 -1
  66. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +31 -0
  67. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  68. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  69. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  70. package/dist/api/solana/SolSignMessage.d.ts +1 -1
  71. package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -1
  72. package/dist/api/solana/SolSignTransaction.d.ts +2 -2
  73. package/dist/api/sui/SuiGetAddress.d.ts +1 -1
  74. package/dist/api/sui/SuiGetPublicKey.d.ts +1 -1
  75. package/dist/api/sui/SuiSignMessage.d.ts +1 -1
  76. package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
  77. package/dist/api/ton/TonGetAddress.d.ts +1 -1
  78. package/dist/api/ton/TonSignMessage.d.ts +1 -1
  79. package/dist/api/ton/TonSignProof.d.ts +1 -1
  80. package/dist/api/tron/TronSignMessage.d.ts +2 -2
  81. package/dist/api/tron/TronSignTransaction.d.ts +1 -1
  82. package/dist/core/deviceEventRegistration.d.ts +2 -0
  83. package/dist/core/deviceEventRegistration.d.ts.map +1 -1
  84. package/dist/core/index.d.ts.map +1 -1
  85. package/dist/core/uiPromiseRegistry.d.ts +6 -0
  86. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  87. package/dist/data-manager/DataManager.d.ts +9 -3
  88. package/dist/data-manager/DataManager.d.ts.map +1 -1
  89. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  90. package/dist/device/Device.d.ts +29 -5
  91. package/dist/device/Device.d.ts.map +1 -1
  92. package/dist/device/DeviceCommands.d.ts +4 -4
  93. package/dist/device/DeviceCommands.d.ts.map +1 -1
  94. package/dist/device/DeviceConnector.d.ts +2 -1
  95. package/dist/device/DeviceConnector.d.ts.map +1 -1
  96. package/dist/device/DevicePool.d.ts.map +1 -1
  97. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -1
  98. package/dist/events/device.d.ts +4 -0
  99. package/dist/events/device.d.ts.map +1 -1
  100. package/dist/events/logBlockEvent.d.ts.map +1 -1
  101. package/dist/events/ui-promise.d.ts +4 -2
  102. package/dist/events/ui-promise.d.ts.map +1 -1
  103. package/dist/events/ui-request.d.ts +31 -2
  104. package/dist/events/ui-request.d.ts.map +1 -1
  105. package/dist/events/ui-response.d.ts +10 -2
  106. package/dist/events/ui-response.d.ts.map +1 -1
  107. package/dist/index.d.ts +243 -69
  108. package/dist/index.js +2563 -1217
  109. package/dist/inject.d.ts +6 -1
  110. package/dist/inject.d.ts.map +1 -1
  111. package/dist/lowLevelInject.d.ts.map +1 -1
  112. package/dist/protocols/protocol-v2/features.d.ts +0 -4
  113. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  114. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  115. package/dist/protocols/protocol-v2/resources.d.ts +30 -0
  116. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  117. package/dist/protocols/protocol-v2/uiInteraction.d.ts +7 -4
  118. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
  119. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +1 -3
  120. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
  121. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  122. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  123. package/dist/protocols/protocol-v2/walletSession.d.ts +6 -1
  124. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  125. package/dist/topLevelInject.d.ts.map +1 -1
  126. package/dist/types/api/checkAllFirmwareRelease.d.ts +3 -1
  127. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  128. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  129. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  130. package/dist/types/api/deviceUnlock.d.ts +5 -1
  131. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  132. package/dist/types/api/export.d.ts +1 -0
  133. package/dist/types/api/export.d.ts.map +1 -1
  134. package/dist/types/api/firmwareUpdate.d.ts +4 -2
  135. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  136. package/dist/types/api/index.d.ts +6 -1
  137. package/dist/types/api/index.d.ts.map +1 -1
  138. package/dist/types/api/protocolV2.d.ts +3 -0
  139. package/dist/types/api/protocolV2.d.ts.map +1 -1
  140. package/dist/types/device.d.ts +2 -2
  141. package/dist/types/device.d.ts.map +1 -1
  142. package/dist/types/params.d.ts +1 -0
  143. package/dist/types/params.d.ts.map +1 -1
  144. package/dist/types/settings.d.ts +38 -8
  145. package/dist/types/settings.d.ts.map +1 -1
  146. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
  147. package/dist/utils/deviceFeaturesUtils.d.ts +4 -0
  148. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  149. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  150. package/dist/utils/deviceSettings.d.ts.map +1 -1
  151. package/dist/utils/homescreen.d.ts +4 -0
  152. package/dist/utils/homescreen.d.ts.map +1 -1
  153. package/dist/utils/index.d.ts +1 -1
  154. package/dist/utils/index.d.ts.map +1 -1
  155. package/dist/utils/patch.d.ts +1 -1
  156. package/dist/utils/patch.d.ts.map +1 -1
  157. package/dist/utils/pro2Nft.d.ts +31 -0
  158. package/dist/utils/pro2Nft.d.ts.map +1 -0
  159. package/dist/utils/pro2Wallpaper.d.ts +10 -0
  160. package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
  161. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  162. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  163. package/package.json +4 -4
  164. package/src/api/BaseMethod.ts +8 -10
  165. package/src/api/CheckAllFirmwareRelease.ts +61 -11
  166. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  167. package/src/api/FirmwareUpdate.ts +6 -2
  168. package/src/api/FirmwareUpdateV2.ts +5 -2
  169. package/src/api/FirmwareUpdateV3.ts +6 -2
  170. package/src/api/FirmwareUpdateV4.ts +463 -258
  171. package/src/api/GetPassphraseState.ts +7 -1
  172. package/src/api/OpenWalletSession.ts +71 -17
  173. package/src/api/SearchDevices.ts +3 -1
  174. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  175. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +36 -11
  176. package/src/api/device/DeviceSettings.ts +5 -4
  177. package/src/api/device/DeviceUnlock.ts +8 -3
  178. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +27 -12
  179. package/src/api/firmware/uploadFirmware.ts +17 -4
  180. package/src/api/helpers/protocolV2FileWrite.ts +202 -63
  181. package/src/api/index.ts +2 -0
  182. package/src/api/kaspa/KaspaGetAddress.ts +1 -1
  183. package/src/api/kaspa/KaspaSignTransaction.ts +2 -13
  184. package/src/api/polkadot/networks.ts +3 -3
  185. package/src/api/protocol-v2/DeviceUploadNft.ts +197 -0
  186. package/src/api/protocol-v2/ProtocolInfoRequest.ts +3 -1
  187. package/src/api/protocol-v2/helpers.ts +1 -1
  188. package/src/api/solana/SolSignMessage.ts +1 -1
  189. package/src/api/solana/SolSignOffchainMessage.ts +1 -1
  190. package/src/api/solana/SolSignTransaction.ts +2 -2
  191. package/src/api/sui/SuiGetAddress.ts +1 -1
  192. package/src/api/sui/SuiGetPublicKey.ts +1 -1
  193. package/src/api/sui/SuiSignMessage.ts +1 -1
  194. package/src/api/sui/SuiSignTransaction.ts +1 -1
  195. package/src/api/ton/TonGetAddress.ts +1 -1
  196. package/src/api/ton/TonSignMessage.ts +1 -1
  197. package/src/api/ton/TonSignProof.ts +1 -1
  198. package/src/api/tron/TronSignMessage.ts +2 -2
  199. package/src/api/tron/TronSignTransaction.ts +1 -1
  200. package/src/core/deviceEventRegistration.ts +4 -0
  201. package/src/core/index.ts +213 -111
  202. package/src/core/uiPromiseRegistry.ts +63 -0
  203. package/src/data/messages/messages-protocol-v2.json +25 -0
  204. package/src/data-manager/DataManager.ts +88 -11
  205. package/src/data-manager/TransportManager.ts +6 -0
  206. package/src/device/Device.ts +273 -43
  207. package/src/device/DeviceCommands.ts +31 -4
  208. package/src/device/DeviceConnector.ts +33 -13
  209. package/src/device/DevicePool.ts +21 -7
  210. package/src/deviceProfile/buildDeviceFeatures.ts +2 -2
  211. package/src/deviceProfile/protocolV2DeviceIdentity.ts +3 -0
  212. package/src/events/device.ts +4 -0
  213. package/src/events/logBlockEvent.ts +1 -0
  214. package/src/events/ui-promise.ts +4 -2
  215. package/src/events/ui-request.ts +36 -2
  216. package/src/events/ui-response.ts +12 -2
  217. package/src/inject.ts +58 -2
  218. package/src/lowLevelInject.ts +6 -3
  219. package/src/protocols/protocol-v2/features.ts +10 -7
  220. package/src/protocols/protocol-v2/firmware.ts +2 -0
  221. package/src/protocols/protocol-v2/resources.ts +390 -0
  222. package/src/protocols/protocol-v2/uiInteraction.ts +46 -6
  223. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -105
  224. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +131 -0
  225. package/src/protocols/protocol-v2/walletSession.ts +214 -36
  226. package/src/topLevelInject.ts +6 -3
  227. package/src/types/api/checkAllFirmwareRelease.ts +3 -1
  228. package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
  229. package/src/types/api/deviceUnlock.ts +12 -1
  230. package/src/types/api/export.ts +1 -0
  231. package/src/types/api/firmwareUpdate.ts +6 -3
  232. package/src/types/api/index.ts +13 -0
  233. package/src/types/api/protocolV2.ts +13 -0
  234. package/src/types/device.ts +15 -3
  235. package/src/types/params.ts +7 -1
  236. package/src/types/settings.ts +60 -9
  237. package/src/utils/deviceFeaturesCompat.ts +5 -0
  238. package/src/utils/deviceFeaturesUtils.ts +14 -3
  239. package/src/utils/deviceInfoUtils.ts +2 -0
  240. package/src/utils/deviceSettings.ts +3 -0
  241. package/src/utils/homescreen.ts +32 -6
  242. package/src/utils/index.ts +6 -1
  243. package/src/utils/pro2Nft.ts +142 -0
  244. package/src/utils/pro2Wallpaper.ts +35 -8
  245. package/src/utils/uiProgressThrottle.ts +63 -0
  246. package/dist/api/firmware/progressThrottle.d.ts +0 -3
  247. package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
  248. package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
  249. package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
  250. package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -10
  251. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
  252. package/src/api/firmware/progressThrottle.ts +0 -44
  253. package/src/protocols/protocol-v2/lockedError.ts +0 -10
  254. package/src/protocols/protocol-v2/unlockRetry.ts +0 -109
@@ -1,6 +1,8 @@
1
1
  import { HardwareErrorCode } from '@onekeyfe/hd-shared';
2
2
 
3
3
  import { writeProtocolV2File } from '../src/api/helpers/protocolV2FileWrite';
4
+ import { DataManager } from '../src/data-manager';
5
+ import { LoggerNames, getLogger } from '../src/utils/logger';
4
6
 
5
7
  jest.mock('../src/data/config', () => ({
6
8
  getSDKVersion: jest.fn(() => '1.0.0'),
@@ -65,6 +67,24 @@ describe('writeProtocolV2File', () => {
65
67
  ).rejects.toMatchObject({ errorCode: HardwareErrorCode.RuntimeError });
66
68
  });
67
69
 
70
+ test('拒绝非 FilesystemFile 响应', async () => {
71
+ const typedCall = jest.fn().mockResolvedValue({
72
+ type: 'CallMethodError',
73
+ message: { error: 'unexpected response' },
74
+ });
75
+
76
+ await expect(
77
+ writeProtocolV2File({
78
+ commands: { typedCall } as any,
79
+ path: 'vol1:/wallpapers/test.bin',
80
+ data: new Uint8Array([1]),
81
+ })
82
+ ).rejects.toMatchObject({
83
+ errorCode: HardwareErrorCode.RuntimeError,
84
+ message: 'FilesystemFileWrite received unexpected response CallMethodError',
85
+ });
86
+ });
87
+
68
88
  test('BLE 响应超时时原偏移重试且不重复上报进度', async () => {
69
89
  const timeoutError = Object.assign(new Error('Lowlevel response timeout'), {
70
90
  errorCode: HardwareErrorCode.BleTimeoutError,
@@ -89,4 +109,136 @@ describe('writeProtocolV2File', () => {
89
109
  expect(typedCall.mock.calls[1][2]).toEqual(typedCall.mock.calls[0][2]);
90
110
  expect(onProgress).toHaveBeenCalledTimes(1);
91
111
  });
112
+
113
+ test('支持固件上传的响应写入选项和全局设备进度', async () => {
114
+ const typedCall = jest.fn().mockResolvedValue({ message: { processed_byte: 3 } });
115
+ const getUiPercentage = jest.fn().mockReturnValue(42);
116
+
117
+ await writeProtocolV2File({
118
+ commands: { typedCall } as any,
119
+ path: 'vol0:/firmware.bin',
120
+ data: new Uint8Array([1, 2, 3]),
121
+ writeWithResponse: true,
122
+ getUiPercentage,
123
+ });
124
+
125
+ expect(getUiPercentage).toHaveBeenCalledWith({
126
+ offset: 0,
127
+ chunkLength: 3,
128
+ totalSize: 3,
129
+ });
130
+ expect(typedCall).toHaveBeenCalledWith(
131
+ 'FilesystemFileWrite',
132
+ 'FilesystemFile',
133
+ expect.objectContaining({ ui_percentage: 42 }),
134
+ { writeWithResponse: true }
135
+ );
136
+ });
137
+
138
+ test('按确认分片的时间窗口记录实时传输速率', async () => {
139
+ const data = new Uint8Array(4097);
140
+ const typedCall = jest.fn().mockResolvedValue({ message: {} });
141
+ const onProgress = jest.fn();
142
+ const dateNowSpy = jest
143
+ .spyOn(Date, 'now')
144
+ .mockReturnValueOnce(1_000)
145
+ .mockReturnValueOnce(2_000)
146
+ .mockReturnValueOnce(3_000);
147
+
148
+ try {
149
+ await writeProtocolV2File({
150
+ commands: { typedCall } as any,
151
+ path: 'vol1:/wallpapers/test.bin',
152
+ data,
153
+ onProgress,
154
+ });
155
+ } finally {
156
+ dateNowSpy.mockRestore();
157
+ }
158
+
159
+ expect(onProgress).toHaveBeenNthCalledWith(
160
+ 1,
161
+ expect.objectContaining({
162
+ transferredBytes: 4000,
163
+ rateBytesPerSecond: 4000,
164
+ elapsedMs: 1000,
165
+ })
166
+ );
167
+ expect(onProgress).toHaveBeenNthCalledWith(
168
+ 2,
169
+ expect.objectContaining({
170
+ transferredBytes: 4097,
171
+ rateBytesPerSecond: 97,
172
+ elapsedMs: 2000,
173
+ })
174
+ );
175
+ });
176
+
177
+ test('通过 Core Log 每十秒输出一次 BLE 传输关键指标', async () => {
178
+ const log = getLogger(LoggerNames.Method);
179
+ const logSpy = jest.spyOn(log, 'log').mockImplementation(() => undefined);
180
+ const getSettingsSpy = jest
181
+ .spyOn(DataManager, 'getSettings')
182
+ .mockReturnValue('react-native' as any);
183
+ const isBleConnectSpy = jest.spyOn(DataManager, 'isBleConnect').mockReturnValue(true);
184
+ const data = new Uint8Array(5400);
185
+ const typedCall = jest.fn().mockResolvedValue({ message: {} });
186
+ const dateNowSpy = jest
187
+ .spyOn(Date, 'now')
188
+ .mockReturnValueOnce(1_000)
189
+ .mockReturnValueOnce(5_000)
190
+ .mockReturnValueOnce(11_000)
191
+ .mockReturnValueOnce(15_000);
192
+
193
+ try {
194
+ await writeProtocolV2File({
195
+ commands: { typedCall } as any,
196
+ path: 'vol1:/wallpapers/test.bin',
197
+ data,
198
+ });
199
+
200
+ expect(logSpy).toHaveBeenCalledTimes(2);
201
+ expect(logSpy).toHaveBeenNthCalledWith(
202
+ 1,
203
+ '[FileWrite] metrics transport=BLE status=progress bytes=3600/5400 elapsed=10.00s speed=0.35 KiB/s'
204
+ );
205
+ expect(logSpy).toHaveBeenNthCalledWith(
206
+ 2,
207
+ '[FileWrite] metrics transport=BLE status=completed bytes=5400/5400 elapsed=14.00s speed=0.44 KiB/s'
208
+ );
209
+ } finally {
210
+ dateNowSpy.mockRestore();
211
+ getSettingsSpy.mockRestore();
212
+ isBleConnectSpy.mockRestore();
213
+ logSpy.mockRestore();
214
+ }
215
+ });
216
+
217
+ test('写入失败时通过 Core Log 输出已传输字节和平均速率', async () => {
218
+ const log = getLogger(LoggerNames.Method);
219
+ const logSpy = jest.spyOn(log, 'log').mockImplementation(() => undefined);
220
+ const typedCall = jest.fn().mockRejectedValue(new Error('write failed'));
221
+ const dateNowSpy = jest
222
+ .spyOn(Date, 'now')
223
+ .mockReturnValueOnce(1_000)
224
+ .mockReturnValueOnce(2_000);
225
+
226
+ try {
227
+ await expect(
228
+ writeProtocolV2File({
229
+ commands: { typedCall } as any,
230
+ path: 'vol1:/wallpapers/test.bin',
231
+ data: new Uint8Array(4000),
232
+ })
233
+ ).rejects.toThrow('write failed');
234
+
235
+ expect(logSpy).toHaveBeenNthCalledWith(
236
+ 1,
237
+ '[FileWrite] metrics transport=unknown status=failed bytes=0/4000 elapsed=1.00s speed=0.00 KiB/s'
238
+ );
239
+ } finally {
240
+ dateNowSpy.mockRestore();
241
+ logSpy.mockRestore();
242
+ }
243
+ });
92
244
  });
@@ -120,6 +120,69 @@ describe('ProtocolV2UiInteractionCoordinator', () => {
120
120
  ]);
121
121
  });
122
122
 
123
+ test('emits a routable close for a progress-only Protocol V2 operation', () => {
124
+ const postMessage = jest.fn();
125
+ const interaction = {
126
+ interactionId: 'interaction-progress',
127
+ phaseId: 'interaction-progress:phase-1',
128
+ sequence: 1,
129
+ phase: 'processing',
130
+ transition: 'finish',
131
+ outcome: 'succeeded',
132
+ protocol: 'V2',
133
+ } as const;
134
+ const device = {
135
+ ...createDevice(),
136
+ finishProtocolV2UiInteraction: jest.fn(() => interaction),
137
+ };
138
+ const coordinator = new ProtocolV2UiInteractionCoordinator(device as any, postMessage);
139
+
140
+ const emitted = coordinator.close({ ensureOperationClose: true });
141
+
142
+ expect(emitted).toBe(true);
143
+ expect(postMessage).toHaveBeenCalledWith({
144
+ event: 'UI_EVENT',
145
+ type: UI_REQUEST.CLOSE_UI_WINDOW,
146
+ payload: {
147
+ ...interaction,
148
+ device: { connectId: 'pro2-test', deviceType: 'pro2' },
149
+ },
150
+ });
151
+ });
152
+
153
+ test('closes a known Protocol V2 operation after transport state is released', () => {
154
+ const postMessage = jest.fn();
155
+ const interaction = {
156
+ interactionId: 'interaction-released',
157
+ phaseId: 'interaction-released:phase-1',
158
+ sequence: 2,
159
+ phase: 'processing',
160
+ transition: 'finish',
161
+ outcome: 'succeeded',
162
+ protocol: 'V2',
163
+ } as const;
164
+ const device = {
165
+ ...createDevice(false),
166
+ finishProtocolV2UiInteraction: jest.fn(() => interaction),
167
+ };
168
+ const coordinator = new ProtocolV2UiInteractionCoordinator(device as any, postMessage);
169
+
170
+ const emitted = coordinator.close({
171
+ ensureOperationClose: true,
172
+ protocolV2Operation: true,
173
+ });
174
+
175
+ expect(emitted).toBe(true);
176
+ expect(postMessage).toHaveBeenCalledWith({
177
+ event: 'UI_EVENT',
178
+ type: UI_REQUEST.CLOSE_UI_WINDOW,
179
+ payload: {
180
+ ...interaction,
181
+ device: { connectId: 'pro2-test', deviceType: 'pro2' },
182
+ },
183
+ });
184
+ });
185
+
123
186
  test('does not emit interaction events for methods without metadata such as Portfolio', () => {
124
187
  const postMessage = jest.fn();
125
188
  const coordinator = new ProtocolV2UiInteractionCoordinator(createDevice() as any, postMessage);
@@ -48,6 +48,7 @@ describe('public Pro2 API boundary', () => {
48
48
  const api = createCoreApi(jest.fn() as CoreApi['call']) as Record<string, unknown>;
49
49
 
50
50
  expect(api.deviceGetOnboardingStatus).toBeInstanceOf(Function);
51
+ expect(api.deviceUploadNft).toBeInstanceOf(Function);
51
52
  expect(api.uploadPortfolio).toBeInstanceOf(Function);
52
53
  expect(api.testProtocolV2Ping).toBeInstanceOf(Function);
53
54
  expect(publicMethods.testProtocolV2Ping).toBeInstanceOf(Function);
@@ -42,7 +42,7 @@ describe('SearchDevices', () => {
42
42
  mockIsBleConnect.mockReturnValue(false);
43
43
  });
44
44
 
45
- test('单个 USB 描述符无响应时跳过该设备并继续搜索', async () => {
45
+ test('搜索忽略调用方协议并主动探测,单个无响应设备不阻断后续结果', async () => {
46
46
  const unresponsiveDescriptor = {
47
47
  path: 'stale-usb-device',
48
48
  id: 'stale-usb-device',
@@ -74,6 +74,7 @@ describe('SearchDevices', () => {
74
74
  id: 1,
75
75
  payload: {
76
76
  method: 'searchDevices',
77
+ connectProtocol: 'V2',
77
78
  },
78
79
  } as any);
79
80
  method.init();
@@ -89,13 +90,21 @@ describe('SearchDevices', () => {
89
90
  1,
90
91
  [unresponsiveDescriptor],
91
92
  unresponsiveDescriptor.path,
92
- { connectProtocol: undefined, refreshRuntimeState: true }
93
+ {
94
+ connectProtocol: undefined,
95
+ forceProtocolDetection: true,
96
+ refreshRuntimeState: true,
97
+ }
93
98
  );
94
99
  expect(mockGetDevices).toHaveBeenNthCalledWith(
95
100
  2,
96
101
  [availableDescriptor],
97
102
  availableDescriptor.path,
98
- { connectProtocol: undefined, refreshRuntimeState: true }
103
+ {
104
+ connectProtocol: undefined,
105
+ forceProtocolDetection: true,
106
+ refreshRuntimeState: true,
107
+ }
99
108
  );
100
109
  });
101
110
 
@@ -44,7 +44,7 @@ describe('TronSignMessage legacy message validation', () => {
44
44
  }
45
45
  );
46
46
 
47
- test('allows Protocol V2 message signing on Pro2', async () => {
47
+ test('allows Protocol V2 message signing on the Pro2 product family', async () => {
48
48
  const method = new TronSignMessage({
49
49
  id: 1,
50
50
  payload: {
@@ -60,7 +60,7 @@ describe('TronSignMessage legacy message validation', () => {
60
60
  method.device = {
61
61
  commands: { typedCall },
62
62
  getCurrentFirmwareVersionString: jest.fn(() => '0.0.0'),
63
- getCurrentMethodVersionRange: jest.fn(selector => selector('pro2')),
63
+ getCurrentMethodVersionRange: jest.fn(selector => selector('model_pro2')),
64
64
  getCurrentFirmwareType: jest.fn(() => EFirmwareType.Universal),
65
65
  } as unknown as Device;
66
66
 
@@ -0,0 +1,74 @@
1
+ import { createUiMessage } from '../src/events';
2
+ import { UI_REQUEST } from '../src/events/ui-request';
3
+ import { createUiProgressMessageFilter } from '../src/utils/uiProgressThrottle';
4
+
5
+ import type { KnownDevice } from '../src/types';
6
+
7
+ describe('createUiProgressMessageFilter', () => {
8
+ let currentTime: number;
9
+ let shouldPostMessage: ReturnType<typeof createUiProgressMessageFilter>;
10
+
11
+ beforeEach(() => {
12
+ currentTime = 1_000;
13
+ shouldPostMessage = createUiProgressMessageFilter(250, () => currentTime);
14
+ });
15
+
16
+ const firmwareProgress = (
17
+ progress: number,
18
+ progressType: 'transferData' | 'installingFirmware' = 'transferData'
19
+ ) =>
20
+ createUiMessage(UI_REQUEST.FIRMWARE_PROGRESS, {
21
+ device: {} as KnownDevice,
22
+ progress,
23
+ progressType,
24
+ });
25
+
26
+ test('limits firmware progress to one event per interval', () => {
27
+ expect(shouldPostMessage(firmwareProgress(1))).toBe(true);
28
+
29
+ currentTime += 100;
30
+ expect(shouldPostMessage(firmwareProgress(1))).toBe(false);
31
+
32
+ currentTime += 150;
33
+ expect(shouldPostMessage(firmwareProgress(1))).toBe(true);
34
+ });
35
+
36
+ test('limits transfer and install progress independently', () => {
37
+ expect(shouldPostMessage(firmwareProgress(1, 'transferData'))).toBe(true);
38
+ expect(shouldPostMessage(firmwareProgress(1, 'installingFirmware'))).toBe(true);
39
+
40
+ currentTime += 10;
41
+ expect(shouldPostMessage(firmwareProgress(2, 'transferData'))).toBe(false);
42
+ expect(shouldPostMessage(firmwareProgress(2, 'installingFirmware'))).toBe(false);
43
+ });
44
+
45
+ test('emits phase boundaries immediately and suppresses duplicate boundaries', () => {
46
+ expect(shouldPostMessage(firmwareProgress(0))).toBe(true);
47
+ expect(shouldPostMessage(firmwareProgress(0))).toBe(false);
48
+
49
+ currentTime += 10;
50
+ expect(shouldPostMessage(firmwareProgress(50))).toBe(false);
51
+ expect(shouldPostMessage(firmwareProgress(100))).toBe(true);
52
+ expect(shouldPostMessage(firmwareProgress(100))).toBe(false);
53
+
54
+ expect(shouldPostMessage(firmwareProgress(0))).toBe(true);
55
+ });
56
+
57
+ test('treats decreasing progress as a new phase', () => {
58
+ expect(shouldPostMessage(firmwareProgress(80))).toBe(true);
59
+
60
+ currentTime += 10;
61
+ expect(shouldPostMessage(firmwareProgress(20))).toBe(true);
62
+ });
63
+
64
+ test('also limits device progress and leaves other UI events unchanged', () => {
65
+ const deviceProgress = (progress: number) =>
66
+ createUiMessage(UI_REQUEST.DEVICE_PROGRESS, { progress });
67
+
68
+ expect(shouldPostMessage(deviceProgress(1))).toBe(true);
69
+ currentTime += 10;
70
+ expect(shouldPostMessage(deviceProgress(2))).toBe(false);
71
+
72
+ expect(shouldPostMessage(createUiMessage(UI_REQUEST.CLOSE_UI_WINDOW))).toBe(true);
73
+ });
74
+ });
@@ -0,0 +1,115 @@
1
+ import { createDeferred } from '@onekeyfe/hd-shared';
2
+
3
+ import {
4
+ consumeUiPromise,
5
+ findUiPromiseForResponse,
6
+ rejectUiPromises,
7
+ } from '../src/core/uiPromiseRegistry';
8
+ import { UI_RESPONSE } from '../src/events';
9
+
10
+ import type { UiPromise, UiPromiseResponse } from '../src/events';
11
+
12
+ const createPinPromise = (interactionId: string, deviceId: string) => {
13
+ const promise = createDeferred(UI_RESPONSE.RECEIVE_PIN) as UiPromise<
14
+ typeof UI_RESPONSE.RECEIVE_PIN
15
+ >;
16
+ promise.responseCorrelation = { interactionId, deviceId };
17
+ return promise;
18
+ };
19
+
20
+ const asRegistry = (promises: UiPromise<typeof UI_RESPONSE.RECEIVE_PIN>[]) =>
21
+ promises as UiPromise<UiPromiseResponse['type']>[];
22
+
23
+ describe('UI response promise correlation', () => {
24
+ test('consumes a rejected UI promise and normalizes its callback error', async () => {
25
+ const pending = createDeferred<string>();
26
+ const onFulfilled = jest.fn();
27
+ const onRejected = jest.fn();
28
+
29
+ consumeUiPromise(pending.promise, onFulfilled, onRejected);
30
+ pending.reject('cancelled' as unknown as Error);
31
+ await Promise.resolve();
32
+
33
+ expect(onFulfilled).not.toHaveBeenCalled();
34
+ expect(onRejected).toHaveBeenCalledWith(expect.any(Error));
35
+ expect(onRejected.mock.calls[0][0].message).toBe('cancelled');
36
+ });
37
+
38
+ test('matches a sensitive response by type, interactionId and deviceId', () => {
39
+ const deviceA = createPinPromise('interaction-a', 'device-a');
40
+ const deviceB = createPinPromise('interaction-b', 'device-b');
41
+
42
+ expect(
43
+ findUiPromiseForResponse(asRegistry([deviceA, deviceB]), {
44
+ type: UI_RESPONSE.RECEIVE_PIN,
45
+ payload: '123',
46
+ interactionId: 'interaction-b',
47
+ deviceId: 'device-b',
48
+ })
49
+ ).toBe(deviceB);
50
+ });
51
+
52
+ test('does not match incomplete or incorrect correlation metadata', () => {
53
+ const pending = createPinPromise('interaction-a', 'device-a');
54
+
55
+ expect(
56
+ findUiPromiseForResponse(asRegistry([pending]), {
57
+ type: UI_RESPONSE.RECEIVE_PIN,
58
+ payload: '123',
59
+ interactionId: 'interaction-a',
60
+ })
61
+ ).toBeUndefined();
62
+ expect(
63
+ findUiPromiseForResponse(asRegistry([pending]), {
64
+ type: UI_RESPONSE.RECEIVE_PIN,
65
+ payload: '123',
66
+ interactionId: 'interaction-a',
67
+ deviceId: 'device-b',
68
+ })
69
+ ).toBeUndefined();
70
+ });
71
+
72
+ test('keeps legacy responses only when the sensitive candidate is unique', () => {
73
+ const deviceA = createPinPromise('interaction-a', 'device-a');
74
+ const deviceB = createPinPromise('interaction-b', 'device-b');
75
+ const legacyResponse = {
76
+ type: UI_RESPONSE.RECEIVE_PIN,
77
+ payload: '123',
78
+ } as const;
79
+
80
+ expect(findUiPromiseForResponse(asRegistry([deviceA]), legacyResponse)).toBe(deviceA);
81
+ expect(
82
+ findUiPromiseForResponse(asRegistry([deviceA, deviceB]), legacyResponse)
83
+ ).toBeUndefined();
84
+ });
85
+
86
+ test('applies the same exact matching to passphrase responses', () => {
87
+ const promise = createDeferred(UI_RESPONSE.RECEIVE_PASSPHRASE) as UiPromise<
88
+ typeof UI_RESPONSE.RECEIVE_PASSPHRASE
89
+ >;
90
+ promise.responseCorrelation = {
91
+ interactionId: 'passphrase-interaction',
92
+ deviceId: 'device-a',
93
+ };
94
+
95
+ expect(
96
+ findUiPromiseForResponse([promise] as UiPromise<UiPromiseResponse['type']>[], {
97
+ type: UI_RESPONSE.RECEIVE_PASSPHRASE,
98
+ payload: { value: 'redacted' },
99
+ interactionId: 'passphrase-interaction',
100
+ deviceId: 'device-a',
101
+ })
102
+ ).toBe(promise);
103
+ });
104
+
105
+ test('rejects every pending UI promise removed during cleanup', async () => {
106
+ const deviceA = createPinPromise('interaction-a', 'device-a');
107
+ const deviceB = createPinPromise('interaction-b', 'device-b');
108
+ const cancellation = new Error('UI request was cancelled');
109
+
110
+ rejectUiPromises(asRegistry([deviceA, deviceB]), cancellation);
111
+
112
+ await expect(deviceA.promise).rejects.toBe(cancellation);
113
+ await expect(deviceB.promise).rejects.toBe(cancellation);
114
+ });
115
+ });
@@ -1,11 +1,12 @@
1
1
  import { type EFirmwareType } from '@onekeyfe/hd-shared';
2
2
  import { type ProtocolType } from '@onekeyfe/hd-transport';
3
- import { type UnlockPolicy } from '../protocols/protocol-v2/unlockPolicy';
4
3
  import type { Device } from '../device/Device';
5
4
  import type DeviceConnector from '../device/DeviceConnector';
6
5
  import type { DeviceFirmwareRange } from '../types';
7
6
  import type { CoreMessage } from '../events';
7
+ import type { UnlockPolicy } from '../protocols/protocol-v2/unlockPolicy';
8
8
  import type { ProtocolV2InteractionDescriptor } from '../protocols/protocol-v2/uiInteraction';
9
+ import type { ProtocolV2UnlockContext } from '../protocols/protocol-v2/unlockPolicyRunner';
9
10
  import type { RequestContext } from '../utils/tracing';
10
11
  import type { CoreContext } from '../core';
11
12
  export type { UnlockPolicy } from '../protocols/protocol-v2/unlockPolicy';
@@ -37,6 +38,7 @@ export declare abstract class BaseMethod<Params = undefined> {
37
38
  getPreWarmKey(): string;
38
39
  strictCheckDeviceSupport: boolean;
39
40
  unlockPolicy: UnlockPolicy;
41
+ protocolV2UnlockContext?: ProtocolV2UnlockContext;
40
42
  getSupportedProtocols(): readonly ProtocolType[];
41
43
  supportsProtocol(protocol: ProtocolType): boolean;
42
44
  assertProtocolSupported(protocol: ProtocolType, firmwareType: EFirmwareType): void;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseMethod.d.ts","sourceRoot":"","sources":["../../src/api/BaseMethod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseMethod.d.ts","sourceRoot":"","sources":["../../src/api/BaseMethod.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,10 @@ type ProtocolV2FirmwareReleasePlan = {
13
13
  targetsToUpdate: FirmwareUpdateV4Target[];
14
14
  release: IFirmwareReleaseInfo | undefined;
15
15
  };
16
- export declare function buildProtocolV2FirmwareRelease({ currentVersions, currentVerification, remotePayloadHashes, firmwareType, release, }: {
16
+ export declare function buildProtocolV2FirmwareRelease({ currentVersions, currentVerification, checkFirmwareHash, remotePayloadHashes, firmwareType, release, }: {
17
17
  currentVersions: DeviceStateVersions;
18
18
  currentVerification?: Partial<DeviceFeaturesVerify>;
19
+ checkFirmwareHash?: boolean;
19
20
  remotePayloadHashes?: Readonly<Record<string, string | null>>;
20
21
  firmwareType: EFirmwareType;
21
22
  release: IFirmwareReleaseInfo | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4C,MAAM,qBAAqB,CAAC;AAG9F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqB1C,OAAO,KAAK,EACV,kBAAkB,EAElB,kCAAkC,EAClC,+BAA+B,EAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AA8HlB,KAAK,6BAA6B,GAAG;IACnC,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,+BAA+B,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,mBAAmB,CAAC;IACrC,UAAU,EAAE,kCAAkC,EAAE,CAAC;IACjD,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,EAC7C,eAAe,EACf,mBAAwB,EACxB,mBAAwB,EACxB,YAAY,EACZ,OAAO,GACR,EAAE;IACD,eAAe,EAAE,mBAAmB,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpD,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9D,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,GAAG,6BAA6B,CAuEhC;AAID,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,qBAAqB;IAIrB,IAAI;IAME,GAAG;YAuFK,aAAa;CAqD5B"}
1
+ {"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAId,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB1C,OAAO,KAAK,EACV,kBAAkB,EAElB,kCAAkC,EAClC,+BAA+B,EAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AAgIlB,KAAK,6BAA6B,GAAG;IACnC,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,+BAA+B,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,mBAAmB,CAAC;IACrC,UAAU,EAAE,kCAAkC,EAAE,CAAC;IACjD,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,EAC7C,eAAe,EACf,mBAAwB,EACxB,iBAAyB,EACzB,mBAAwB,EACxB,YAAY,EACZ,OAAO,GACR,EAAE;IACD,eAAe,EAAE,mBAAmB,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9D,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,GAAG,6BAA6B,CAqEhC;AAID,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,qBAAqB;IAIrB,IAAI;IAME,GAAG;YAuFK,aAAa;CA2F5B"}
@@ -0,0 +1,7 @@
1
+ import { BaseMethod } from './BaseMethod';
2
+ export default class DetectDeviceConnectProtocol extends BaseMethod {
3
+ init(): void;
4
+ getSupportedProtocols(): readonly ["V1", "V2"];
5
+ run(): Promise<"V1" | "V2">;
6
+ }
7
+ //# sourceMappingURL=DetectDeviceConnectProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetectDeviceConnectProtocol.d.ts","sourceRoot":"","sources":["../../src/api/DetectDeviceConnectProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,UAAU;IACjE,IAAI;IAOJ,qBAAqB;IAIrB,GAAG;CAGJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdate.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdate.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;CAChC,CAAC;AAIF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC5D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAgCJ,cAAc,YAAa,MAAM,UAS/B;IAEF,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAiE/C,GAAG;CA+FV"}
1
+ {"version":3,"file":"FirmwareUpdate.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdate.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;CAChC,CAAC;AAIF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC5D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAgCJ,cAAc,YAAa,MAAM,UAS/B;IAEF,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAqE/C,GAAG;CA+FV"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAuEJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA6FvC,4BAA4B;IAuB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAgQV"}
1
+ {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAuEJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA8FvC,4BAA4B;IAyB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAgQV"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAY/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAMnE,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAaxD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA4B;IAEnD,IAAI;IAmFE,GAAG;;;;;YAQK,aAAa;IA6D3B,OAAO,CAAC,wBAAwB;YAiBlB,kBAAkB;YAelB,oBAAoB;IAKlC,OAAO,CAAC,wBAAwB;YAgBlB,oBAAoB;YA2DpB,uBAAuB;YAuBvB,4BAA4B;YA+E5B,aAAa;IAwN3B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sCAAsC;IAexC,sBAAsB,CAAC,OAAO,EAAE,MAAM;CA2E7C"}
1
+ {"version":3,"file":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAY/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAMnE,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAaxD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA4B;IAEnD,IAAI;IAmFE,GAAG;;;;;YAQK,aAAa;IA6D3B,OAAO,CAAC,wBAAwB;YAiBlB,kBAAkB;YAelB,oBAAoB;IAKlC,OAAO,CAAC,wBAAwB;YAgBlB,oBAAoB;YA2DpB,uBAAuB;YAuBvB,4BAA4B;YA+E5B,aAAa;IAwN3B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sCAAsC;IAexC,sBAAsB,CAAC,OAAO,EAAE,MAAM;CA+E7C"}
@@ -1,9 +1,10 @@
1
1
  import { FirmwareUpdateBaseMethod } from './firmware/FirmwareUpdateBaseMethod';
2
2
  import type { FirmwareUpdateV4Params } from '../types/api/firmwareUpdate';
3
3
  export declare const isProtocolV2FirmwareFingerprintValid: (binary: ArrayBuffer | Uint8Array, fingerprint: string | undefined) => boolean;
4
- export declare const assertProtocolV2ReconnectIdentity: (expectedSerialNumber?: string, actualSerialNumber?: string) => void;
4
+ export declare const assertProtocolV2ReconnectIdentity: (expectedSerialNumber?: string, actualSerialNumber?: string, expectedPath?: string, actualPath?: string) => void;
5
5
  export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareUpdateV4Params> {
6
6
  private protocolV2ExpectedSerialNumber?;
7
+ private protocolV2ExpectedPath?;
7
8
  getSupportedProtocols(): readonly ["V2"];
8
9
  private protocolV2PreparedSources;
9
10
  private protocolV2ExecutionInLoader;
@@ -31,6 +32,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
31
32
  private getProtocolV2DeviceFeatures;
32
33
  private getProtocolV2SerialNumber;
33
34
  private assertProtocolV2DeviceInfoIdentity;
35
+ private getProtocolV2DeviceInfoTimeout;
34
36
  private requestProtocolV2PhysicalIdentity;
35
37
  private captureProtocolV2PhysicalIdentity;
36
38
  private verifyProtocolV2ReconnectIdentity;
@@ -39,12 +41,15 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
39
41
  private buildProtocolV2InstallItems;
40
42
  private getRemoteComponentEntries;
41
43
  private getRemoteComponentTarget;
42
- private getProtocolV2ResourceFilePath;
43
- private readProtocolV2DeviceFileHeader;
44
44
  private downloadRemoteProtocolV2Component;
45
45
  private prepareRemoteProtocolV2Binaries;
46
+ private getProtocolV2DeviceType;
47
+ private prepareProtocolV2BootResources;
48
+ private prepareExplicitProtocolV2ResourceFiles;
46
49
  private prepareProtocolV2ResourceBundles;
47
- private materializeProtocolV2ResourceBundles;
50
+ private downloadProtocolV2Resource;
51
+ private getProtocolV2ResourceFilePath;
52
+ private readProtocolV2DeviceFileHeader;
48
53
  private isProtocolV2ResourceBundleUpToDate;
49
54
  private isProtocolV2BootloaderMode;
50
55
  private isProtocolV2RomloaderMode;
@@ -60,10 +65,12 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
60
65
  private getProtocolV2InstallItemStagingPath;
61
66
  private verifyProtocolV2StagedFile;
62
67
  private assertProtocolV2TargetStatus;
68
+ private getProtocolV2MissingTargetIds;
63
69
  private waitForProtocolV2FirmwareUpdateComplete;
64
70
  private exitProtocolV2BootloaderToNormal;
65
71
  private probeProtocolV2NormalMode;
66
72
  private waitForProtocolV2FinalFeatures;
73
+ private getProtocolV2VersionResult;
67
74
  private completeProtocolV2FinalVerification;
68
75
  private waitForProtocolV2ReconnectAndFeatures;
69
76
  private reconnectProtocolV2Device;
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AAmWrC,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,SAc5B,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAoBhC,GAAG;;;;;YAKK,aAAa;YAsEb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqD/B,gCAAgC;YAmDhC,8BAA8B;IAsB5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;YAO5B,iCAAiC;YAOjC,iCAAiC;YAgBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA6C9B,iCAAiC;YAmCjC,+BAA+B;IAiE7C,OAAO,CAAC,gCAAgC;YAyC1B,oCAAoC;YA6DpC,kCAAkC;IAgChD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAU3B,6BAA6B;YA+BrB,+BAA+B;IA6C7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YA6CvB,8BAA8B;YA2D9B,6BAA6B;IA0D3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;YAyGtB,uCAAuC;YAsFvC,gCAAgC;YAShC,yBAAyB;YAQzB,8BAA8B;YAsB9B,mCAAmC;YAWnC,qCAAqC;YA2CrC,yBAAyB;YAiDzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,cAAc;YA+Bd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
1
+ {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAwB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AAiWrC,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAoBhC,GAAG;;;;;YAKK,aAAa;YA+Gb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqD/B,gCAAgC;YAmDhC,8BAA8B;IAsB5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,8BAA8B;YAMxB,iCAAiC;YAOjC,iCAAiC;YAkBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;YAkBlB,iCAAiC;YAmCjC,+BAA+B;IAqD7C,OAAO,CAAC,uBAAuB;YAMjB,8BAA8B;IAuB5C,OAAO,CAAC,sCAAsC;YAmChC,gCAAgC;YAqChC,0BAA0B;IAexC,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA8C9B,kCAAkC;IAgChD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAc3B,6BAA6B;YAgCrB,+BAA+B;IAkD7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YA0CvB,8BAA8B;YA2D9B,6BAA6B;IAuE3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;IAyGpC,OAAO,CAAC,6BAA6B;YAcvB,uCAAuC;YA0JvC,gCAAgC;YAehC,yBAAyB;YAQzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAkBpB,mCAAmC;YAWnC,qCAAqC;YAgDrC,yBAAyB;YA8DzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,cAAc;YAoCd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"GetPassphraseState.d.ts","sourceRoot":"","sources":["../../src/api/GetPassphraseState.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,UAAU;IACxD,qBAAqB;IAIrB,IAAI;IAKE,GAAG;CA4BV"}
1
+ {"version":3,"file":"GetPassphraseState.d.ts","sourceRoot":"","sources":["../../src/api/GetPassphraseState.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,UAAU;IACxD,qBAAqB;IAIrB,IAAI;IAKE,GAAG;CAiCV"}