@onekeyfe/hd-core 1.2.0-alpha.64 → 1.2.0-alpha.66

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 (314) 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__/connectSettings.test.ts +5 -47
  6. package/__tests__/core-initialization.test.ts +23 -0
  7. package/__tests__/device-connector-protocol.test.ts +81 -0
  8. package/__tests__/device-lifecycle-events.test.ts +105 -3
  9. package/__tests__/device-pool-state.test.ts +22 -0
  10. package/__tests__/device-settings.test.ts +39 -18
  11. package/__tests__/device-state-contract.test.ts +1 -0
  12. package/__tests__/device-state-mapper.test.ts +13 -1
  13. package/__tests__/device-utils.test.ts +48 -1
  14. package/__tests__/deviceSettings.test.ts +11 -1
  15. package/__tests__/deviceUploadNft.test.ts +316 -0
  16. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +31 -59
  17. package/__tests__/get-device-state.test.ts +132 -12
  18. package/__tests__/homescreen.test.ts +41 -1
  19. package/__tests__/kaspa-use-tweak-pro2.test.ts +2 -2
  20. package/__tests__/kaspaSignTransaction.test.ts +3 -26
  21. package/__tests__/logBlockEvent.test.ts +1 -1
  22. package/__tests__/method-protocol-support.test.ts +19 -0
  23. package/__tests__/open-wallet-session.test.ts +568 -37
  24. package/__tests__/pro2Nft.test.ts +108 -0
  25. package/__tests__/protocol-binding.test.ts +89 -0
  26. package/__tests__/protocol-v2-resources.test.ts +340 -0
  27. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  28. package/__tests__/protocol-v2-unlock-policy.test.ts +300 -37
  29. package/__tests__/protocol-v2.test.ts +1506 -1097
  30. package/__tests__/protocolV2FileWrite.test.ts +152 -0
  31. package/__tests__/protocolV2UiInteraction.test.ts +63 -0
  32. package/__tests__/public-pro2-api-boundary.test.ts +1 -0
  33. package/__tests__/search-devices.test.ts +12 -3
  34. package/__tests__/tron-sign-message-init.test.ts +2 -2
  35. package/__tests__/uiProgressThrottle.test.ts +74 -0
  36. package/__tests__/uiPromiseRegistry.test.ts +115 -0
  37. package/dist/api/BaseMethod.d.ts +3 -1
  38. package/dist/api/BaseMethod.d.ts.map +1 -1
  39. package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
  40. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  41. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  42. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  43. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  44. package/dist/api/FirmwareUpdateV2.d.ts +0 -11
  45. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  46. package/dist/api/FirmwareUpdateV3.d.ts +3 -7
  47. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  48. package/dist/api/FirmwareUpdateV4.d.ts +13 -27
  49. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  50. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  51. package/dist/api/OpenWalletSession.d.ts.map +1 -1
  52. package/dist/api/SearchDevices.d.ts.map +1 -1
  53. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  54. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  55. package/dist/api/device/DeviceUnlock.d.ts +2 -2
  56. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  57. package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -5
  58. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  59. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +4 -11
  60. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  61. package/dist/api/firmware/getBinary.d.ts +0 -7
  62. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  63. package/dist/api/firmware/updateBootloader.d.ts +0 -2
  64. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  65. package/dist/api/firmware/uploadFirmware.d.ts +1 -9
  66. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  67. package/dist/api/helpers/protocolV2FileWrite.d.ts +9 -0
  68. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  69. package/dist/api/index.d.ts +2 -0
  70. package/dist/api/index.d.ts.map +1 -1
  71. package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -1
  72. package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -1
  73. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  74. package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -1
  75. package/dist/api/polkadot/networks.d.ts +1 -1
  76. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +31 -0
  77. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  78. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  79. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  80. package/dist/api/solana/SolSignMessage.d.ts +1 -1
  81. package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -1
  82. package/dist/api/solana/SolSignTransaction.d.ts +2 -2
  83. package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
  84. package/dist/api/sui/SuiGetAddress.d.ts +1 -1
  85. package/dist/api/sui/SuiGetPublicKey.d.ts +1 -1
  86. package/dist/api/sui/SuiSignMessage.d.ts +1 -1
  87. package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
  88. package/dist/api/ton/TonGetAddress.d.ts +1 -1
  89. package/dist/api/ton/TonSignMessage.d.ts +1 -1
  90. package/dist/api/ton/TonSignProof.d.ts +1 -1
  91. package/dist/api/tron/TronSignMessage.d.ts +2 -2
  92. package/dist/api/tron/TronSignTransaction.d.ts +1 -1
  93. package/dist/core/deviceEventRegistration.d.ts +2 -0
  94. package/dist/core/deviceEventRegistration.d.ts.map +1 -1
  95. package/dist/core/index.d.ts.map +1 -1
  96. package/dist/core/uiPromiseRegistry.d.ts +6 -0
  97. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  98. package/dist/data-manager/DataManager.d.ts +9 -4
  99. package/dist/data-manager/DataManager.d.ts.map +1 -1
  100. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  101. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  102. package/dist/device/Device.d.ts +29 -6
  103. package/dist/device/Device.d.ts.map +1 -1
  104. package/dist/device/DeviceCommands.d.ts +4 -4
  105. package/dist/device/DeviceCommands.d.ts.map +1 -1
  106. package/dist/device/DeviceConnector.d.ts +2 -1
  107. package/dist/device/DeviceConnector.d.ts.map +1 -1
  108. package/dist/device/DevicePool.d.ts.map +1 -1
  109. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -1
  110. package/dist/events/device.d.ts +4 -0
  111. package/dist/events/device.d.ts.map +1 -1
  112. package/dist/events/logBlockEvent.d.ts.map +1 -1
  113. package/dist/events/ui-promise.d.ts +4 -2
  114. package/dist/events/ui-promise.d.ts.map +1 -1
  115. package/dist/events/ui-request.d.ts +31 -2
  116. package/dist/events/ui-request.d.ts.map +1 -1
  117. package/dist/events/ui-response.d.ts +10 -2
  118. package/dist/events/ui-response.d.ts.map +1 -1
  119. package/dist/index.d.ts +243 -248
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +3051 -3774
  122. package/dist/inject.d.ts +6 -1
  123. package/dist/inject.d.ts.map +1 -1
  124. package/dist/lowLevelInject.d.ts.map +1 -1
  125. package/dist/protocols/protocol-v2/features.d.ts +0 -4
  126. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  127. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  128. package/dist/protocols/protocol-v2/resources.d.ts +30 -0
  129. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  130. package/dist/protocols/protocol-v2/uiInteraction.d.ts +7 -4
  131. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
  132. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +1 -3
  133. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
  134. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  135. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  136. package/dist/protocols/protocol-v2/walletSession.d.ts +6 -1
  137. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  138. package/dist/topLevelInject.d.ts.map +1 -1
  139. package/dist/types/api/checkAllFirmwareRelease.d.ts +3 -5
  140. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  141. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  142. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  143. package/dist/types/api/deviceUnlock.d.ts +5 -1
  144. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  145. package/dist/types/api/deviceUpdateBootloader.d.ts +0 -6
  146. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  147. package/dist/types/api/export.d.ts +2 -4
  148. package/dist/types/api/export.d.ts.map +1 -1
  149. package/dist/types/api/firmwareUpdate.d.ts +4 -71
  150. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  151. package/dist/types/api/index.d.ts +7 -10
  152. package/dist/types/api/index.d.ts.map +1 -1
  153. package/dist/types/api/protocolV2.d.ts +3 -0
  154. package/dist/types/api/protocolV2.d.ts.map +1 -1
  155. package/dist/types/device.d.ts +2 -2
  156. package/dist/types/device.d.ts.map +1 -1
  157. package/dist/types/params.d.ts +1 -0
  158. package/dist/types/params.d.ts.map +1 -1
  159. package/dist/types/settings.d.ts +38 -21
  160. package/dist/types/settings.d.ts.map +1 -1
  161. package/dist/utils/deviceFeaturesCompat.d.ts +0 -1
  162. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
  163. package/dist/utils/deviceFeaturesUtils.d.ts +4 -0
  164. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  165. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  166. package/dist/utils/deviceSettings.d.ts.map +1 -1
  167. package/dist/utils/homescreen.d.ts +4 -0
  168. package/dist/utils/homescreen.d.ts.map +1 -1
  169. package/dist/utils/index.d.ts +1 -1
  170. package/dist/utils/index.d.ts.map +1 -1
  171. package/dist/utils/patch.d.ts +1 -1
  172. package/dist/utils/patch.d.ts.map +1 -1
  173. package/dist/utils/pro2Nft.d.ts +31 -0
  174. package/dist/utils/pro2Nft.d.ts.map +1 -0
  175. package/dist/utils/pro2Wallpaper.d.ts +10 -0
  176. package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
  177. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  178. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  179. package/package.json +4 -4
  180. package/src/api/BaseMethod.ts +8 -10
  181. package/src/api/CheckAllFirmwareRelease.ts +59 -60
  182. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  183. package/src/api/FirmwareUpdate.ts +7 -15
  184. package/src/api/FirmwareUpdateV2.ts +126 -316
  185. package/src/api/FirmwareUpdateV3.ts +63 -265
  186. package/src/api/FirmwareUpdateV4.ts +597 -1005
  187. package/src/api/GetPassphraseState.ts +7 -1
  188. package/src/api/OpenWalletSession.ts +71 -17
  189. package/src/api/SearchDevices.ts +3 -1
  190. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  191. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +36 -11
  192. package/src/api/device/DeviceSettings.ts +5 -4
  193. package/src/api/device/DeviceUnlock.ts +8 -3
  194. package/src/api/device/DeviceUpdateBootloader.ts +6 -125
  195. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +27 -83
  196. package/src/api/firmware/updateBootloader.ts +4 -19
  197. package/src/api/firmware/uploadFirmware.ts +39 -144
  198. package/src/api/helpers/protocolV2FileWrite.ts +202 -63
  199. package/src/api/index.ts +2 -0
  200. package/src/api/kaspa/KaspaGetAddress.ts +1 -1
  201. package/src/api/kaspa/KaspaSignTransaction.ts +2 -13
  202. package/src/api/polkadot/networks.ts +3 -3
  203. package/src/api/protocol-v2/DeviceUploadNft.ts +197 -0
  204. package/src/api/protocol-v2/ProtocolInfoRequest.ts +3 -1
  205. package/src/api/protocol-v2/helpers.ts +1 -1
  206. package/src/api/solana/SolSignMessage.ts +1 -1
  207. package/src/api/solana/SolSignOffchainMessage.ts +1 -1
  208. package/src/api/solana/SolSignTransaction.ts +2 -2
  209. package/src/api/sui/SuiGetAddress.ts +1 -1
  210. package/src/api/sui/SuiGetPublicKey.ts +1 -1
  211. package/src/api/sui/SuiSignMessage.ts +1 -1
  212. package/src/api/sui/SuiSignTransaction.ts +1 -1
  213. package/src/api/ton/TonGetAddress.ts +1 -1
  214. package/src/api/ton/TonSignMessage.ts +1 -1
  215. package/src/api/ton/TonSignProof.ts +1 -1
  216. package/src/api/tron/TronSignMessage.ts +2 -2
  217. package/src/api/tron/TronSignTransaction.ts +1 -1
  218. package/src/core/deviceEventRegistration.ts +4 -0
  219. package/src/core/index.ts +213 -111
  220. package/src/core/uiPromiseRegistry.ts +63 -0
  221. package/src/data/messages/messages-protocol-v2.json +25 -0
  222. package/src/data-manager/DataManager.ts +113 -41
  223. package/src/data-manager/TransportManager.ts +6 -0
  224. package/src/data-manager/connectSettings.ts +0 -11
  225. package/src/device/Device.ts +274 -49
  226. package/src/device/DeviceCommands.ts +31 -4
  227. package/src/device/DeviceConnector.ts +33 -13
  228. package/src/device/DevicePool.ts +21 -7
  229. package/src/deviceProfile/buildDeviceFeatures.ts +2 -2
  230. package/src/deviceProfile/protocolV2DeviceIdentity.ts +3 -0
  231. package/src/events/device.ts +4 -0
  232. package/src/events/logBlockEvent.ts +1 -0
  233. package/src/events/ui-promise.ts +4 -2
  234. package/src/events/ui-request.ts +36 -2
  235. package/src/events/ui-response.ts +12 -2
  236. package/src/index.ts +0 -5
  237. package/src/inject.ts +60 -24
  238. package/src/lowLevelInject.ts +7 -8
  239. package/src/protocols/protocol-v2/features.ts +10 -7
  240. package/src/protocols/protocol-v2/firmware.ts +2 -0
  241. package/src/protocols/protocol-v2/resources.ts +390 -0
  242. package/src/protocols/protocol-v2/uiInteraction.ts +46 -6
  243. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -105
  244. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +131 -0
  245. package/src/protocols/protocol-v2/walletSession.ts +214 -36
  246. package/src/topLevelInject.ts +7 -8
  247. package/src/types/api/checkAllFirmwareRelease.ts +3 -5
  248. package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
  249. package/src/types/api/deviceUnlock.ts +12 -1
  250. package/src/types/api/deviceUpdateBootloader.ts +0 -6
  251. package/src/types/api/export.ts +1 -18
  252. package/src/types/api/firmwareUpdate.ts +6 -79
  253. package/src/types/api/index.ts +13 -14
  254. package/src/types/api/protocolV2.ts +13 -0
  255. package/src/types/device.ts +15 -3
  256. package/src/types/params.ts +7 -1
  257. package/src/types/settings.ts +60 -22
  258. package/src/utils/deviceFeaturesCompat.ts +5 -6
  259. package/src/utils/deviceFeaturesUtils.ts +14 -3
  260. package/src/utils/deviceInfoUtils.ts +2 -0
  261. package/src/utils/deviceSettings.ts +3 -0
  262. package/src/utils/homescreen.ts +32 -6
  263. package/src/utils/index.ts +6 -1
  264. package/src/utils/pro2Nft.ts +142 -0
  265. package/src/utils/pro2Wallpaper.ts +35 -8
  266. package/src/utils/uiProgressThrottle.ts +63 -0
  267. package/__tests__/device-initialize-timeout.test.ts +0 -56
  268. package/__tests__/firmware-update/check-all-firmware-release.test.ts +0 -175
  269. package/__tests__/firmware-update/firmware-artifact-source.test.ts +0 -119
  270. package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -70
  271. package/__tests__/firmware-update/firmware-preparation-error.test.ts +0 -27
  272. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +0 -200
  273. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +0 -13
  274. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +0 -394
  275. package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
  276. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -213
  277. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +0 -58
  278. package/__tests__/firmware-update/firmware-upload-source.test.ts +0 -70
  279. package/dist/api/firmware/FirmwareArtifactSource.d.ts +0 -25
  280. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +0 -1
  281. package/dist/api/firmware/FirmwareHostBinding.d.ts +0 -6
  282. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +0 -1
  283. package/dist/api/firmware/FirmwarePreparationError.d.ts +0 -3
  284. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +0 -1
  285. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +0 -3
  286. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +0 -1
  287. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +0 -25
  288. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +0 -1
  289. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +0 -32
  290. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +0 -1
  291. package/dist/api/firmware/progressThrottle.d.ts +0 -3
  292. package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
  293. package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
  294. package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
  295. package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -10
  296. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
  297. package/dist/types/api/firmwareUpdateCapabilities.d.ts +0 -9
  298. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +0 -1
  299. package/dist/types/api/firmwareUpdatePlan.d.ts +0 -28
  300. package/dist/types/api/firmwareUpdatePlan.d.ts.map +0 -1
  301. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +0 -42
  302. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +0 -1
  303. package/src/api/firmware/FirmwareArtifactSource.ts +0 -278
  304. package/src/api/firmware/FirmwareHostBinding.ts +0 -100
  305. package/src/api/firmware/FirmwarePreparationError.ts +0 -12
  306. package/src/api/firmware/FirmwareUpdateCapabilities.ts +0 -9
  307. package/src/api/firmware/FirmwareUpdatePlan.ts +0 -772
  308. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -449
  309. package/src/api/firmware/progressThrottle.ts +0 -44
  310. package/src/protocols/protocol-v2/lockedError.ts +0 -10
  311. package/src/protocols/protocol-v2/unlockRetry.ts +0 -109
  312. package/src/types/api/firmwareUpdateCapabilities.ts +0 -9
  313. package/src/types/api/firmwareUpdatePlan.ts +0 -38
  314. package/src/types/api/firmwareUpdatePreparedPlan.ts +0 -53
@@ -9,31 +9,18 @@ import {
9
9
  getDeviceBLEFirmwareVersion,
10
10
  getDeviceBootloaderVersion,
11
11
  getDeviceFirmwareVersion,
12
- getDeviceUUID,
13
12
  getLogger,
14
13
  } from '../utils';
15
14
  import { getBinary, getSysResourceBinary } from './firmware/getBinary';
16
- import { normalizeFirmwarePreparationError } from './firmware/FirmwarePreparationError';
17
15
  import { DataManager } from '../data-manager';
18
16
  import { FirmwareUpdateBaseMethod } from './firmware/FirmwareUpdateBaseMethod';
19
17
  import { DevicePool } from '../device/DevicePool';
20
18
  import { DEVICE } from '../events';
21
19
  import { buildProtocolV1FeaturesPayload } from '../deviceProfile';
22
- import { openFirmwareByteSource } from './firmware/FirmwareArtifactSource';
23
- import { resolveFirmwareUpdateHostBinding } from './firmware/FirmwareHostBinding';
24
- import {
25
- assertFirmwareUpdatePreparedPlanBinding,
26
- assertFirmwareUpdatePreparedPlanDeviceIdentity,
27
- getFirmwareUpdateResourceName,
28
- } from './firmware/FirmwareUpdatePreparedPlan';
29
-
30
- import type {
31
- FirmwareArtifactReference,
32
- FirmwareUpdateV3Params,
33
- } from '../types/api/firmwareUpdate';
20
+
21
+ import type { FirmwareUpdateV3Params } from '../types/api/firmwareUpdate';
34
22
  import type { Deferred, EFirmwareType } from '@onekeyfe/hd-shared';
35
23
  import type { TypedResponseMessage } from '../device/DeviceCommands';
36
- import type { FirmwareByteSource } from './firmware/FirmwareArtifactSource';
37
24
 
38
25
  const Log = getLogger(LoggerNames.Method);
39
26
 
@@ -55,8 +42,6 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
55
42
 
56
43
  private isSwitchFirmware = false;
57
44
 
58
- private artifactSources: FirmwareByteSource[] = [];
59
-
60
45
  init() {
61
46
  this.allowDeviceMode = [UI_REQUEST.BOOTLOADER, UI_REQUEST.NOT_INITIALIZE];
62
47
  this.requireDeviceMode = [];
@@ -77,54 +62,8 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
77
62
  { name: 'firmwareType', type: 'string' },
78
63
  { name: 'platform', type: 'string' },
79
64
  ]);
80
- const hostBinding =
81
- payload.artifacts || payload.preparedPlan
82
- ? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration)
83
- : undefined;
84
- if (hostBinding) {
85
- assertFirmwareUpdatePreparedPlanBinding({
86
- preparedPlan: payload.preparedPlan,
87
- executor: 'v3',
88
- platform: payload.platform,
89
- scopeTargets: ['bootloader', 'firmware', 'resource', 'ble'],
90
- bindings: [
91
- ...(payload.artifacts?.bootloader
92
- ? [
93
- {
94
- target: 'bootloader' as const,
95
- artifact: payload.artifacts.bootloader,
96
- },
97
- ]
98
- : []),
99
- ...(payload.artifacts?.firmware
100
- ? [
101
- {
102
- target: 'firmware' as const,
103
- artifact: payload.artifacts.firmware,
104
- },
105
- ]
106
- : []),
107
- ...(payload.artifacts?.ble
108
- ? [
109
- {
110
- target: 'ble' as const,
111
- artifact: payload.artifacts.ble,
112
- },
113
- ]
114
- : []),
115
- ...(payload.artifacts?.resourceEntries ?? []).map(
116
- (entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
117
- target: 'resource' as const,
118
- entryName: entry.entryName,
119
- artifact: entry.artifact,
120
- })
121
- ),
122
- ],
123
- });
124
- }
125
65
 
126
66
  this.params = {
127
- preparedPlan: payload.preparedPlan,
128
67
  bleBinary: payload.bleBinary,
129
68
  firmwareBinary: payload.firmwareBinary,
130
69
  forcedUpdateRes: payload.forcedUpdateRes,
@@ -135,8 +74,6 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
135
74
  resourceBinary: payload.resourceBinary,
136
75
  firmwareType: payload.firmwareType,
137
76
  platform: payload.platform,
138
- artifactReader: hostBinding?.artifactReader ?? payload.artifactReader,
139
- artifacts: payload.artifacts,
140
77
  };
141
78
  }
142
79
 
@@ -160,53 +97,39 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
160
97
  if (!features) {
161
98
  throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'Device features not available');
162
99
  }
163
- if (this.params.preparedPlan) {
164
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
165
- preparedPlan: this.params.preparedPlan,
166
- deviceIdentity: getDeviceUUID(features) || undefined,
167
- });
168
- }
169
100
 
170
101
  const deviceFirmwareType = device.getCurrentFirmwareType();
171
102
  const firmwareType = this.params.firmwareType ?? deviceFirmwareType;
172
103
  this.isSwitchFirmware = firmwareType !== deviceFirmwareType;
173
104
 
174
105
  let resourceBinary: ArrayBuffer | null = null;
175
- let resourceEntries: Array<{ entryName: string; source: FirmwareByteSource }> = [];
176
- let fwSources: Array<{ fileName: string; source: FirmwareByteSource }> = [];
177
- let bootloaderSource: FirmwareByteSource | null = null;
106
+ let fwBinaryMap: { fileName: string; binary: ArrayBuffer }[] = [];
107
+ let bootloaderBinary: ArrayBuffer | null = null;
178
108
  try {
179
109
  this.postTipMessage(FirmwareUpdateTipMessage.StartDownloadFirmware);
180
- const resourceInput = await this.prepareResourceInput(firmwareType);
181
- resourceBinary = resourceInput.resourceBinary;
182
- resourceEntries = resourceInput.resourceEntries;
183
- fwSources = await this.prepareFirmwareAndBleSources(firmwareType);
184
- bootloaderSource = await this.prepareBootloaderSource(firmwareType);
110
+ resourceBinary = await this.prepareResourceBinary(firmwareType);
111
+ fwBinaryMap = await this.prepareFirmwareAndBleBinary(firmwareType);
112
+ bootloaderBinary = await this.prepareBootloaderBinary(firmwareType);
185
113
  this.postTipMessage(FirmwareUpdateTipMessage.FinishDownloadFirmware);
186
114
  } catch (err) {
187
- await this.closeArtifactSources();
188
- throw normalizeFirmwarePreparationError(err);
115
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateDownloadFailed, err.message ?? err);
189
116
  }
190
117
 
191
- if (!bootloaderSource && fwSources.length === 0) {
192
- await this.closeArtifactSources();
118
+ if (!bootloaderBinary && fwBinaryMap.length === 0) {
193
119
  throw ERRORS.TypedError(
194
120
  HardwareErrorCode.FirmwareUpdateDownloadFailed,
195
121
  'No firmware to update'
196
122
  );
197
123
  }
198
124
 
199
- try {
200
- await this.enterBootloaderMode();
201
- return await this.executeUpdate({
202
- resourceBinary,
203
- resourceEntries,
204
- fwSources,
205
- bootloaderSource,
206
- });
207
- } finally {
208
- await this.closeArtifactSources();
209
- }
125
+ await this.enterBootloaderMode();
126
+
127
+ const updateResult = await this.executeUpdate({
128
+ resourceBinary,
129
+ fwBinaryMap,
130
+ bootloaderBinary,
131
+ });
132
+ return updateResult;
210
133
  }
211
134
 
212
135
  private validateDeviceAndVersion(deviceType: EDeviceType, bootloaderVersion: string) {
@@ -226,81 +149,12 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
226
149
  }
227
150
  }
228
151
 
229
- private async openArtifactSource(
230
- binary: ArrayBuffer | undefined,
231
- artifact: FirmwareArtifactReference | undefined
232
- ) {
233
- const source = await openFirmwareByteSource({
234
- binary,
235
- artifact,
236
- reader: this.params.artifactReader,
237
- });
238
- if (source) {
239
- this.artifactSources.push(source);
240
- }
241
- return source;
242
- }
243
-
244
- private async closeArtifactSources() {
245
- const sources = this.artifactSources.splice(0);
246
- await Promise.all(sources.map(source => source.close().catch(() => undefined)));
247
- }
248
-
249
- private assertSdkDownloadAllowed(artifactName: string) {
250
- if (
251
- this.params.artifactReader ||
252
- DataManager.getSettings('firmwareManifestMode') === 'external-only'
253
- ) {
254
- throw ERRORS.TypedError(
255
- HardwareErrorCode.RuntimeError,
256
- `${artifactName} must be prepared by the external firmware host`,
257
- {
258
- firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
259
- artifactName,
260
- }
261
- );
262
- }
263
- }
264
-
265
- private async prepareResourceInput(firmwareType: EFirmwareType) {
266
- const preparedEntries = this.params.artifacts?.resourceEntries;
267
- if (preparedEntries?.length && this.params.resourceBinary) {
268
- throw ERRORS.TypedError(
269
- HardwareErrorCode.RuntimeError,
270
- 'Firmware resource input must not contain both archive binary and prepared entries'
271
- );
272
- }
273
- if (preparedEntries?.length) {
274
- const resourceEntries: Array<{ entryName: string; source: FirmwareByteSource }> = [];
275
- for (const entry of preparedEntries) {
276
- const resourceName = getFirmwareUpdateResourceName(entry.entryName);
277
- const source = await this.openArtifactSource(undefined, entry.artifact);
278
- if (!source) {
279
- throw ERRORS.TypedError(
280
- HardwareErrorCode.RuntimeError,
281
- `Firmware resource entry ${entry.entryName} is not prepared`
282
- );
283
- }
284
- resourceEntries.push({ entryName: resourceName, source });
285
- }
286
- return {
287
- resourceBinary: null,
288
- resourceEntries,
289
- };
290
- }
152
+ private async prepareResourceBinary(firmwareType: EFirmwareType) {
291
153
  if (this.params.resourceBinary) {
292
- return {
293
- resourceBinary: this.params.resourceBinary,
294
- resourceEntries: [],
295
- };
154
+ return this.params.resourceBinary;
296
155
  }
297
156
  const { features } = this.device;
298
- if (!features) {
299
- return {
300
- resourceBinary: null,
301
- resourceEntries: [],
302
- };
303
- }
157
+ if (!features) return null;
304
158
  const resourceUrl = DataManager.getSysResourcesLatestRelease({
305
159
  features,
306
160
  forcedUpdateRes: this.params.forcedUpdateRes,
@@ -308,27 +162,16 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
308
162
  });
309
163
 
310
164
  if (resourceUrl) {
311
- this.assertSdkDownloadAllowed('resource');
312
- return {
313
- resourceBinary: (await getSysResourceBinary(resourceUrl)).binary,
314
- resourceEntries: [],
315
- };
165
+ const resource = (await getSysResourceBinary(resourceUrl)).binary;
166
+ return resource;
316
167
  }
317
168
  Log.warn('No resource url found');
318
- return {
319
- resourceBinary: null,
320
- resourceEntries: [],
321
- };
169
+ return null;
322
170
  }
323
171
 
324
- private async prepareBootloaderSource(
325
- firmwareType: EFirmwareType
326
- ): Promise<FirmwareByteSource | null> {
327
- if (this.params.bootloaderBinary || this.params.artifacts?.bootloader) {
328
- return this.openArtifactSource(
329
- this.params.bootloaderBinary,
330
- this.params.artifacts?.bootloader
331
- );
172
+ private async prepareBootloaderBinary(firmwareType: EFirmwareType): Promise<ArrayBuffer | null> {
173
+ if (this.params.bootloaderBinary) {
174
+ return this.params.bootloaderBinary;
332
175
  }
333
176
  const { features } = this.device;
334
177
  if (!features) return null;
@@ -336,35 +179,23 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
336
179
  if (this.params.bootloaderVersion) {
337
180
  const bootResourceUrl = DataManager.getBootloaderResource(features, firmwareType);
338
181
  if (bootResourceUrl) {
339
- this.assertSdkDownloadAllowed('bootloader');
340
182
  const bootBinary = (await getSysResourceBinary(bootResourceUrl)).binary;
341
- return this.openArtifactSource(bootBinary, undefined);
183
+ return bootBinary;
342
184
  }
343
185
  }
344
186
  return null;
345
187
  }
346
188
 
347
- private async prepareFirmwareAndBleSources(firmwareType: EFirmwareType) {
348
- const fwSources: Array<{ fileName: string; source: FirmwareByteSource }> = [];
349
- if (this.params.firmwareBinary || this.params.artifacts?.firmware) {
350
- const source = await this.openArtifactSource(
351
- this.params.firmwareBinary,
352
- this.params.artifacts?.firmware
353
- );
354
- if (!source) {
355
- throw ERRORS.TypedError(
356
- HardwareErrorCode.RuntimeError,
357
- 'Firmware artifact is not prepared'
358
- );
359
- }
360
- fwSources.push({
189
+ private async prepareFirmwareAndBleBinary(firmwareType: EFirmwareType) {
190
+ const fwBinaryMap: { fileName: string; binary: ArrayBuffer }[] = [];
191
+ if (this.params.firmwareBinary) {
192
+ fwBinaryMap.push({
361
193
  fileName: 'firmware.bin',
362
- source,
194
+ binary: this.params.firmwareBinary,
363
195
  });
364
196
  } else if (this.params.firmwareVersion) {
365
197
  const { features } = this.device;
366
198
  if (features) {
367
- this.assertSdkDownloadAllowed('firmware');
368
199
  const firmwareBinary = (
369
200
  await getBinary({
370
201
  features,
@@ -374,65 +205,44 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
374
205
  firmwareType,
375
206
  })
376
207
  ).binary;
377
- const source = await this.openArtifactSource(firmwareBinary, undefined);
378
- if (!source) {
379
- throw ERRORS.TypedError(
380
- HardwareErrorCode.RuntimeError,
381
- 'Firmware binary is not prepared'
382
- );
383
- }
384
- fwSources.push({
208
+ fwBinaryMap.push({
385
209
  fileName: 'firmware.bin',
386
- source,
210
+ binary: firmwareBinary,
387
211
  });
388
212
  }
389
213
  }
390
214
 
391
- if (this.params.bleBinary || this.params.artifacts?.ble) {
392
- const source = await this.openArtifactSource(
393
- this.params.bleBinary,
394
- this.params.artifacts?.ble
395
- );
396
- if (!source) {
397
- throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'BLE artifact is not prepared');
398
- }
399
- fwSources.push({
215
+ if (this.params.bleBinary) {
216
+ fwBinaryMap.push({
400
217
  fileName: 'ble-firmware.bin',
401
- source,
218
+ binary: this.params.bleBinary,
402
219
  });
403
220
  } else if (this.params.bleVersion) {
404
221
  const { features } = this.device;
405
222
  if (features) {
406
- this.assertSdkDownloadAllowed('ble');
407
223
  const bleBinary = await getBinary({
408
224
  features,
409
225
  version: this.params.bleVersion,
410
226
  updateType: 'ble',
411
227
  firmwareType,
412
228
  });
413
- const source = await this.openArtifactSource(bleBinary.binary, undefined);
414
- if (!source) {
415
- throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'BLE binary is not prepared');
416
- }
417
- fwSources.push({
229
+ fwBinaryMap.push({
418
230
  fileName: 'ble-firmware.bin',
419
- source,
231
+ binary: bleBinary.binary,
420
232
  });
421
233
  }
422
234
  }
423
- return fwSources;
235
+ return fwBinaryMap;
424
236
  }
425
237
 
426
238
  private async executeUpdate({
427
239
  resourceBinary,
428
- resourceEntries,
429
- fwSources,
430
- bootloaderSource,
240
+ fwBinaryMap,
241
+ bootloaderBinary,
431
242
  }: {
432
243
  resourceBinary: ArrayBuffer | null;
433
- resourceEntries: Array<{ entryName: string; source: FirmwareByteSource }>;
434
- fwSources: Array<{ fileName: string; source: FirmwareByteSource }>;
435
- bootloaderSource: FirmwareByteSource | null;
244
+ fwBinaryMap: { fileName: string; binary: ArrayBuffer }[];
245
+ bootloaderBinary: ArrayBuffer | null;
436
246
  }) {
437
247
  let totalSize = 0;
438
248
  let processedSize = 0;
@@ -440,14 +250,11 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
440
250
  if (resourceBinary) {
441
251
  totalSize += resourceBinary.byteLength;
442
252
  }
443
- for (const entry of resourceEntries) {
444
- totalSize += entry.source.size;
445
- }
446
- for (const firmware of fwSources) {
447
- totalSize += firmware.source.size;
253
+ for (const fwbinary of fwBinaryMap) {
254
+ totalSize += fwbinary.binary.byteLength;
448
255
  }
449
- if (bootloaderSource) {
450
- totalSize += bootloaderSource.size;
256
+ if (bootloaderBinary) {
257
+ totalSize += bootloaderBinary.byteLength;
451
258
  }
452
259
 
453
260
  this.postTipMessage(FirmwareUpdateTipMessage.StartTransferData);
@@ -470,18 +277,9 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
470
277
  }
471
278
  }
472
279
 
473
- for (const entry of resourceEntries) {
474
- processedSize = await this.emmcCommonUpdateProcessFromSource({
475
- source: entry.source,
476
- filePath: `0:res/${entry.entryName}`,
477
- processedSize,
478
- totalSize,
479
- });
480
- }
481
-
482
- if (bootloaderSource) {
483
- processedSize = await this.emmcCommonUpdateProcessFromSource({
484
- source: bootloaderSource,
280
+ if (bootloaderBinary) {
281
+ processedSize = await this.emmcCommonUpdateProcess({
282
+ payload: bootloaderBinary,
485
283
  filePath: `0:boot/bootloader.bin`,
486
284
  processedSize,
487
285
  totalSize,
@@ -490,11 +288,11 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
490
288
 
491
289
  await this.createUpdatesFolderIfNotExists(`0:updates/`);
492
290
 
493
- for (const firmware of fwSources) {
494
- if (firmware) {
495
- processedSize = await this.emmcCommonUpdateProcessFromSource({
496
- source: firmware.source,
497
- filePath: `0:updates/${firmware.fileName}`,
291
+ for (const fwbinary of fwBinaryMap) {
292
+ if (fwbinary) {
293
+ processedSize = await this.emmcCommonUpdateProcess({
294
+ payload: fwbinary.binary,
295
+ filePath: `0:updates/${fwbinary.fileName}`,
498
296
  processedSize,
499
297
  totalSize,
500
298
  });
@@ -705,7 +503,8 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
705
503
  await this.device.deviceConnector?.acquire(
706
504
  this.device.originalDescriptor.id,
707
505
  null,
708
- true
506
+ true,
507
+ this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType
709
508
  );
710
509
  const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands());
711
510
  await Promise.race([
@@ -742,15 +541,14 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
742
541
  webUsbCheckCount = 0;
743
542
  }
744
543
 
745
- const { deviceList } = await DevicePool.getDevices(devicesDescriptor, this.connectId);
544
+ const { deviceList } = await DevicePool.getDevices(devicesDescriptor, this.connectId, {
545
+ connectProtocol:
546
+ this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType,
547
+ });
746
548
 
747
549
  if (deviceList.length === 1) {
748
550
  this.device.updateFromCache(deviceList[0]);
749
- // Reconnect failures are expected while installation still owns USB.
750
- // Keep them in this polling loop instead of rejecting the active firmware run.
751
- await this.device.acquire(undefined, {
752
- throwOnRunPromiseError: true,
753
- });
551
+ await this.device.acquire();
754
552
  this.device.commands.disposed = false;
755
553
  this.device.getCommands().mainId = this.device.mainId ?? '';
756
554
  return;