@onekeyfe/hd-core 1.2.0-alpha.11 → 1.2.0-alpha.110

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 (849) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +390 -0
  2. package/__tests__/DeviceCommands.test.ts +652 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +49 -0
  4. package/__tests__/base64Data.test.ts +70 -0
  5. package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
  6. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +830 -0
  7. package/__tests__/check-firmware-release-protocol-v2.test.ts +270 -0
  8. package/__tests__/connectSettings.test.ts +45 -5
  9. package/__tests__/core-dispose.test.ts +34 -0
  10. package/__tests__/core-error-output.test.ts +39 -0
  11. package/__tests__/core-initialization.test.ts +23 -0
  12. package/__tests__/device-connector-protocol.test.ts +81 -0
  13. package/__tests__/device-features-state.test.ts +78 -0
  14. package/__tests__/device-identity.test.ts +52 -0
  15. package/__tests__/device-initialize-timeout.test.ts +56 -0
  16. package/__tests__/device-lifecycle-events.test.ts +462 -0
  17. package/__tests__/device-pool-state.test.ts +191 -0
  18. package/__tests__/device-settings.test.ts +437 -0
  19. package/__tests__/device-state-contract.test.ts +28 -0
  20. package/__tests__/device-state-events.test.ts +286 -0
  21. package/__tests__/device-state-mapper.test.ts +288 -0
  22. package/__tests__/device-state-projector.test.ts +114 -0
  23. package/__tests__/device-state-store.test.ts +109 -0
  24. package/__tests__/device-utils.test.ts +154 -0
  25. package/__tests__/device-wallet-session-store.test.ts +348 -1
  26. package/__tests__/deviceFeaturesUtils.test.ts +39 -0
  27. package/__tests__/devicePoolBootloaderPath.test.ts +64 -0
  28. package/__tests__/deviceSettings.test.ts +112 -0
  29. package/__tests__/deviceUploadNft.test.ts +345 -0
  30. package/__tests__/evmLedgerLegacySafety.test.ts +12 -6
  31. package/__tests__/evmSignTransaction.test.ts +69 -0
  32. package/__tests__/evmSignTypedData.test.ts +80 -0
  33. package/__tests__/filesystemValidation.test.ts +53 -0
  34. package/__tests__/firmware-memory-host.test.ts +126 -0
  35. package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
  36. package/__tests__/firmware-update/device-update-bootloader.test.ts +109 -0
  37. package/__tests__/firmware-update/firmware-artifact-source.test.ts +171 -0
  38. package/__tests__/firmware-update/firmware-host-binding.test.ts +79 -0
  39. package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
  40. package/__tests__/firmware-update/firmware-prepared-host-digest.test.ts +583 -0
  41. package/__tests__/firmware-update/firmware-prepared-resource-archive.test.ts +150 -0
  42. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +375 -0
  43. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  44. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +474 -0
  45. package/__tests__/firmware-update/firmware-update-plan.test.ts +819 -0
  46. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +283 -0
  47. package/__tests__/firmware-update/firmware-update-prepared-resource-executors.test.ts +326 -0
  48. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +457 -0
  49. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +175 -0
  50. package/__tests__/firmware-update/firmware-update-v4-install-poll.test.ts +178 -0
  51. package/__tests__/firmware-update/firmware-update-v4-parameters.test.ts +85 -0
  52. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  53. package/__tests__/get-device-state.test.ts +617 -0
  54. package/__tests__/homescreen.test.ts +81 -0
  55. package/__tests__/kaspa-public-types.type-test.ts +16 -0
  56. package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
  57. package/__tests__/kaspaSignTransaction.test.ts +578 -0
  58. package/__tests__/known-device-public-types.type-test.ts +3 -0
  59. package/__tests__/logBlockEvent.test.ts +140 -1
  60. package/__tests__/method-protocol-support.test.ts +144 -0
  61. package/__tests__/networkUtils.test.ts +406 -0
  62. package/__tests__/open-wallet-session-error-response.test.ts +43 -0
  63. package/__tests__/open-wallet-session.test.ts +1899 -0
  64. package/__tests__/pro2Nft.test.ts +108 -0
  65. package/__tests__/pro2Wallpaper.test.ts +8 -19
  66. package/__tests__/protocol-binding.test.ts +89 -0
  67. package/__tests__/protocol-v2-bootloader-mode.test.ts +37 -0
  68. package/__tests__/protocol-v2-firmware-targets.test.ts +105 -0
  69. package/__tests__/protocol-v2-ping.test.ts +28 -0
  70. package/__tests__/protocol-v2-resources.test.ts +270 -0
  71. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  72. package/__tests__/protocol-v2-unlock-policy.test.ts +308 -0
  73. package/__tests__/protocol-v2.test.ts +7490 -2020
  74. package/__tests__/protocolV2FileWrite.test.ts +285 -0
  75. package/__tests__/protocolV2UiInteraction.test.ts +329 -0
  76. package/__tests__/public-device-state-api.test.ts +275 -0
  77. package/__tests__/public-pro2-api-boundary.test.ts +107 -0
  78. package/__tests__/refresh-device-state.test.ts +103 -0
  79. package/__tests__/request-context-logging.test.ts +16 -0
  80. package/__tests__/resourceBase64Boundary.test.ts +48 -0
  81. package/__tests__/search-devices.test.ts +151 -0
  82. package/__tests__/ton-sign-message.test.ts +84 -0
  83. package/__tests__/tron-sign-message-init.test.ts +74 -0
  84. package/__tests__/uiProgressThrottle.test.ts +74 -0
  85. package/__tests__/uiPromiseRegistry.test.ts +115 -0
  86. package/dist/api/BaseMethod.d.ts +13 -2
  87. package/dist/api/BaseMethod.d.ts.map +1 -1
  88. package/dist/api/CheckAllFirmwareRelease.d.ts +25 -1
  89. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  90. package/dist/api/CheckBLEFirmwareRelease.d.ts +3 -2
  91. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
  92. package/dist/api/CheckBootloaderRelease.d.ts +2 -1
  93. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  94. package/dist/api/CheckFirmwareRelease.d.ts +3 -2
  95. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  96. package/dist/api/CipherKeyValue.d.ts +1 -0
  97. package/dist/api/CipherKeyValue.d.ts.map +1 -1
  98. package/dist/api/ClearSessionCache.d.ts.map +1 -1
  99. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  100. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  101. package/dist/api/DirList.d.ts +1 -0
  102. package/dist/api/DirList.d.ts.map +1 -1
  103. package/dist/api/DirMake.d.ts +1 -0
  104. package/dist/api/DirMake.d.ts.map +1 -1
  105. package/dist/api/DirRemove.d.ts +1 -0
  106. package/dist/api/DirRemove.d.ts.map +1 -1
  107. package/dist/api/FileDelete.d.ts +1 -0
  108. package/dist/api/FileDelete.d.ts.map +1 -1
  109. package/dist/api/FileRead.d.ts +1 -0
  110. package/dist/api/FileRead.d.ts.map +1 -1
  111. package/dist/api/FileWrite.d.ts +2 -0
  112. package/dist/api/FileWrite.d.ts.map +1 -1
  113. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  114. package/dist/api/FirmwareUpdateV2.d.ts +13 -2
  115. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  116. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  117. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  118. package/dist/api/FirmwareUpdateV4.d.ts +59 -12
  119. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  120. package/dist/api/GetDeviceState.d.ts +8 -0
  121. package/dist/api/GetDeviceState.d.ts.map +1 -0
  122. package/dist/api/GetFeatures.d.ts +1 -1
  123. package/dist/api/GetFeatures.d.ts.map +1 -1
  124. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  125. package/dist/api/GetPassphraseState.d.ts +1 -0
  126. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  127. package/dist/api/OpenWalletSession.d.ts +8 -0
  128. package/dist/api/OpenWalletSession.d.ts.map +1 -0
  129. package/dist/api/PathInfo.d.ts +1 -0
  130. package/dist/api/PathInfo.d.ts.map +1 -1
  131. package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
  132. package/dist/api/SearchDevices.d.ts +3 -0
  133. package/dist/api/SearchDevices.d.ts.map +1 -1
  134. package/dist/api/UploadPortfolio.d.ts +1 -2
  135. package/dist/api/UploadPortfolio.d.ts.map +1 -1
  136. package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
  137. package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
  138. package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
  139. package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
  140. package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
  141. package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
  142. package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
  143. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
  144. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  145. package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
  146. package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
  147. package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
  148. package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
  149. package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
  150. package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
  151. package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
  152. package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
  153. package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
  154. package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
  155. package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
  156. package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
  157. package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
  158. package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
  159. package/dist/api/btc/BTCGetAddress.d.ts +1 -0
  160. package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
  161. package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
  162. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  163. package/dist/api/btc/BTCSignMessage.d.ts +1 -0
  164. package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
  165. package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
  166. package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
  167. package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
  168. package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
  169. package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
  170. package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
  171. package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
  172. package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
  173. package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
  174. package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
  175. package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
  176. package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
  177. package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
  178. package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
  179. package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
  180. package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
  181. package/dist/api/conflux/ConfluxGetAddress.d.ts +2 -0
  182. package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
  183. package/dist/api/conflux/ConfluxSignMessage.d.ts +2 -0
  184. package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
  185. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +2 -0
  186. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
  187. package/dist/api/conflux/ConfluxSignTransaction.d.ts +2 -0
  188. package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
  189. package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
  190. package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
  191. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
  192. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  193. package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
  194. package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
  195. package/dist/api/device/DeviceCancel.d.ts +1 -0
  196. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  197. package/dist/api/device/DeviceChangePin.d.ts +1 -0
  198. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  199. package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
  200. package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
  201. package/dist/api/device/DeviceLock.d.ts +1 -0
  202. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  203. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
  204. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  205. package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
  206. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  207. package/dist/api/device/DeviceSettings.d.ts +1 -0
  208. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  209. package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
  210. package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
  211. package/dist/api/device/DeviceUnlock.d.ts +3 -2
  212. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  213. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  214. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  215. package/dist/api/device/DeviceWipe.d.ts +1 -0
  216. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  217. package/dist/api/device/PreInitialize.d.ts +1 -0
  218. package/dist/api/device/PreInitialize.d.ts.map +1 -1
  219. package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
  220. package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
  221. package/dist/api/evm/EVMGetAddress.d.ts +1 -0
  222. package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
  223. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  224. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  225. package/dist/api/evm/EVMSignMessage.d.ts +1 -0
  226. package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
  227. package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
  228. package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
  229. package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
  230. package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
  231. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  232. package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
  233. package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
  234. package/dist/api/evm/protocol.d.ts +3 -0
  235. package/dist/api/evm/protocol.d.ts.map +1 -0
  236. package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
  237. package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
  238. package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
  239. package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
  240. package/dist/api/firmware/FirmwareArtifactSource.d.ts +29 -0
  241. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  242. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  243. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  244. package/dist/api/firmware/FirmwareMemoryHost.d.ts +22 -0
  245. package/dist/api/firmware/FirmwareMemoryHost.d.ts.map +1 -0
  246. package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
  247. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
  248. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts +11 -0
  249. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts.map +1 -0
  250. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +12 -3
  251. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  252. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  253. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  254. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +72 -0
  255. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  256. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +38 -0
  257. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  258. package/dist/api/firmware/getBinary.d.ts +14 -4
  259. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  260. package/dist/api/firmware/protocolV2Release.d.ts +33 -0
  261. package/dist/api/firmware/protocolV2Release.d.ts.map +1 -0
  262. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  263. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  264. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  265. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  266. package/dist/api/helpers/base64Data.d.ts +16 -0
  267. package/dist/api/helpers/base64Data.d.ts.map +1 -0
  268. package/dist/api/helpers/filesystemValidation.d.ts +3 -0
  269. package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
  270. package/dist/api/helpers/paramsValidator.d.ts +1 -0
  271. package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
  272. package/dist/api/helpers/protocolV2FileWrite.d.ts +43 -0
  273. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -0
  274. package/dist/api/index.d.ts +6 -30
  275. package/dist/api/index.d.ts.map +1 -1
  276. package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
  277. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
  278. package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -1
  279. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  280. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  281. package/dist/api/lightning/LnurlAuth.d.ts +0 -4
  282. package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
  283. package/dist/api/near/NearGetAddress.d.ts +1 -0
  284. package/dist/api/near/NearGetAddress.d.ts.map +1 -1
  285. package/dist/api/near/NearSignTransaction.d.ts +1 -0
  286. package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
  287. package/dist/api/nem/NEMGetAddress.d.ts +1 -0
  288. package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
  289. package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
  290. package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
  291. package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
  292. package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
  293. package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
  294. package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
  295. package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
  296. package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
  297. package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
  298. package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
  299. package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
  300. package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
  301. package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
  302. package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
  303. package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
  304. package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
  305. package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
  306. package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
  307. package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
  308. package/dist/api/polkadot/PolkadotGetAddress.d.ts +2 -1
  309. package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
  310. package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
  311. package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
  312. package/dist/api/polkadot/networks.d.ts +1 -1
  313. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +1 -0
  314. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -1
  315. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +1 -0
  316. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -1
  317. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +1 -0
  318. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  319. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -0
  320. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  321. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +7 -0
  322. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -0
  323. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +1 -1
  324. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -1
  325. package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
  326. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  327. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +1 -0
  328. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -1
  329. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +30 -0
  330. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  331. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +3 -3
  332. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
  333. package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
  334. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  335. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +1 -0
  336. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -1
  337. package/dist/api/protocol-v2/Ping.d.ts +3 -0
  338. package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
  339. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +1 -0
  340. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  341. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  342. package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
  343. package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
  344. package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
  345. package/dist/api/solana/SolGetAddress.d.ts +1 -0
  346. package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
  347. package/dist/api/solana/SolSignMessage.d.ts +2 -1
  348. package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
  349. package/dist/api/solana/SolSignOffchainMessage.d.ts +2 -1
  350. package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
  351. package/dist/api/solana/SolSignTransaction.d.ts +3 -2
  352. package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
  353. package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
  354. package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
  355. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
  356. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
  357. package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
  358. package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
  359. package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
  360. package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
  361. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
  362. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
  363. package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
  364. package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
  365. package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
  366. package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
  367. package/dist/api/sui/SuiGetAddress.d.ts +2 -1
  368. package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
  369. package/dist/api/sui/SuiGetPublicKey.d.ts +2 -1
  370. package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
  371. package/dist/api/sui/SuiSignMessage.d.ts +2 -1
  372. package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
  373. package/dist/api/sui/SuiSignTransaction.d.ts +2 -1
  374. package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
  375. package/dist/api/ton/TonGetAddress.d.ts +2 -1
  376. package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
  377. package/dist/api/ton/TonSignData.d.ts +1 -0
  378. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  379. package/dist/api/ton/TonSignMessage.d.ts +2 -1
  380. package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
  381. package/dist/api/ton/TonSignProof.d.ts +2 -1
  382. package/dist/api/ton/TonSignProof.d.ts.map +1 -1
  383. package/dist/api/tron/TronGetAddress.d.ts +1 -0
  384. package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
  385. package/dist/api/tron/TronSignMessage.d.ts +6 -1
  386. package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
  387. package/dist/api/tron/TronSignTransaction.d.ts +2 -1
  388. package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
  389. package/dist/api/utils.d.ts +4 -1
  390. package/dist/api/utils.d.ts.map +1 -1
  391. package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
  392. package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
  393. package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
  394. package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
  395. package/dist/constants/index.d.ts +1 -1
  396. package/dist/constants/index.d.ts.map +1 -1
  397. package/dist/core/RequestQueue.d.ts +0 -2
  398. package/dist/core/RequestQueue.d.ts.map +1 -1
  399. package/dist/core/deviceEventRegistration.d.ts +13 -0
  400. package/dist/core/deviceEventRegistration.d.ts.map +1 -0
  401. package/dist/core/index.d.ts +3 -2
  402. package/dist/core/index.d.ts.map +1 -1
  403. package/dist/core/uiPromiseRegistry.d.ts +6 -0
  404. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  405. package/dist/data-manager/DataManager.d.ts +11 -3
  406. package/dist/data-manager/DataManager.d.ts.map +1 -1
  407. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  408. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  409. package/dist/device/Device.d.ts +76 -16
  410. package/dist/device/Device.d.ts.map +1 -1
  411. package/dist/device/DeviceCommands.d.ts +8 -6
  412. package/dist/device/DeviceCommands.d.ts.map +1 -1
  413. package/dist/device/DeviceConnector.d.ts +4 -3
  414. package/dist/device/DeviceConnector.d.ts.map +1 -1
  415. package/dist/device/DeviceFeaturesState.d.ts +3 -0
  416. package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
  417. package/dist/device/DevicePool.d.ts +6 -2
  418. package/dist/device/DevicePool.d.ts.map +1 -1
  419. package/dist/device/DeviceStateMapper.d.ts +13 -0
  420. package/dist/device/DeviceStateMapper.d.ts.map +1 -0
  421. package/dist/device/DeviceStateProjector.d.ts +7 -0
  422. package/dist/device/DeviceStateProjector.d.ts.map +1 -0
  423. package/dist/device/DeviceStateStore.d.ts +21 -0
  424. package/dist/device/DeviceStateStore.d.ts.map +1 -0
  425. package/dist/device/DeviceWalletSessionStore.d.ts +13 -1
  426. package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -1
  427. package/dist/device/cloneDeviceState.d.ts +2 -0
  428. package/dist/device/cloneDeviceState.d.ts.map +1 -0
  429. package/dist/device/deviceIdentity.d.ts +5 -0
  430. package/dist/device/deviceIdentity.d.ts.map +1 -0
  431. package/dist/deviceProfile/buildDeviceFeatures.d.ts +9 -3
  432. package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
  433. package/dist/deviceProfile/index.d.ts +0 -1
  434. package/dist/deviceProfile/index.d.ts.map +1 -1
  435. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts +7 -0
  436. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -0
  437. package/dist/events/call.d.ts +0 -7
  438. package/dist/events/call.d.ts.map +1 -1
  439. package/dist/events/core.d.ts +2 -2
  440. package/dist/events/core.d.ts.map +1 -1
  441. package/dist/events/device.d.ts +16 -2
  442. package/dist/events/device.d.ts.map +1 -1
  443. package/dist/events/iframe.d.ts +0 -1
  444. package/dist/events/iframe.d.ts.map +1 -1
  445. package/dist/events/logBlockEvent.d.ts +2 -0
  446. package/dist/events/logBlockEvent.d.ts.map +1 -1
  447. package/dist/events/ui-promise.d.ts +4 -2
  448. package/dist/events/ui-promise.d.ts.map +1 -1
  449. package/dist/events/ui-request.d.ts +50 -4
  450. package/dist/events/ui-request.d.ts.map +1 -1
  451. package/dist/events/ui-response.d.ts +10 -2
  452. package/dist/events/ui-response.d.ts.map +1 -1
  453. package/dist/index.d.ts +1779 -835
  454. package/dist/index.d.ts.map +1 -1
  455. package/dist/index.js +12334 -5037
  456. package/dist/inject.d.ts +7 -3
  457. package/dist/inject.d.ts.map +1 -1
  458. package/dist/lowLevelInject.d.ts +1 -2
  459. package/dist/lowLevelInject.d.ts.map +1 -1
  460. package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
  461. package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
  462. package/dist/protocols/protocol-v2/features.d.ts +29 -17
  463. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  464. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  465. package/dist/protocols/protocol-v2/index.d.ts +2 -2
  466. package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
  467. package/dist/protocols/protocol-v2/resources.d.ts +12 -0
  468. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  469. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +17 -0
  470. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
  471. package/dist/protocols/protocol-v2/uiInteraction.d.ts +42 -0
  472. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
  473. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +2 -0
  474. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
  475. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  476. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  477. package/dist/protocols/protocol-v2/walletSession.d.ts +18 -4
  478. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  479. package/dist/topLevelInject.d.ts.map +1 -1
  480. package/dist/types/api/checkAllFirmwareRelease.d.ts +48 -9
  481. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  482. package/dist/types/api/checkBLEFirmwareRelease.d.ts +2 -13
  483. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
  484. package/dist/types/api/checkBootloaderRelease.d.ts +2 -6
  485. package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
  486. package/dist/types/api/checkFirmwareRelease.d.ts +2 -13
  487. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
  488. package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
  489. package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
  490. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  491. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  492. package/dist/types/api/deviceSettings.d.ts +11 -2
  493. package/dist/types/api/deviceSettings.d.ts.map +1 -1
  494. package/dist/types/api/deviceUnlock.d.ts +6 -2
  495. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  496. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  497. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  498. package/dist/types/api/export.d.ts +8 -3
  499. package/dist/types/api/export.d.ts.map +1 -1
  500. package/dist/types/api/firmwareUpdate.d.ts +67 -5
  501. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  502. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  503. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  504. package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
  505. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  506. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  507. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  508. package/dist/types/api/getDeviceState.d.ts +12 -0
  509. package/dist/types/api/getDeviceState.d.ts.map +1 -0
  510. package/dist/types/api/getFeatures.d.ts.map +1 -1
  511. package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
  512. package/dist/types/api/getPassphraseState.d.ts.map +1 -1
  513. package/dist/types/api/index.d.ts +26 -36
  514. package/dist/types/api/index.d.ts.map +1 -1
  515. package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
  516. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  517. package/dist/types/api/openWalletSession.d.ts +35 -0
  518. package/dist/types/api/openWalletSession.d.ts.map +1 -0
  519. package/dist/types/api/protocolV2.d.ts +11 -96
  520. package/dist/types/api/protocolV2.d.ts.map +1 -1
  521. package/dist/types/api/sessionCache.d.ts +4 -1
  522. package/dist/types/api/sessionCache.d.ts.map +1 -1
  523. package/dist/types/device.d.ts +142 -10
  524. package/dist/types/device.d.ts.map +1 -1
  525. package/dist/types/params.d.ts +1 -0
  526. package/dist/types/params.d.ts.map +1 -1
  527. package/dist/types/settings.d.ts +59 -16
  528. package/dist/types/settings.d.ts.map +1 -1
  529. package/dist/utils/assets.d.ts +2 -1
  530. package/dist/utils/assets.d.ts.map +1 -1
  531. package/dist/utils/deviceFeaturesCompat.d.ts +14 -0
  532. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
  533. package/dist/utils/deviceFeaturesUtils.d.ts +10 -1
  534. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  535. package/dist/utils/deviceInfoUtils.d.ts +9 -9
  536. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  537. package/dist/utils/deviceSettings.d.ts +38 -7
  538. package/dist/utils/deviceSettings.d.ts.map +1 -1
  539. package/dist/utils/deviceVersionUtils.d.ts +7 -5
  540. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  541. package/dist/utils/homescreen.d.ts +4 -0
  542. package/dist/utils/homescreen.d.ts.map +1 -1
  543. package/dist/utils/index.d.ts +5 -4
  544. package/dist/utils/index.d.ts.map +1 -1
  545. package/dist/utils/networkUtils.d.ts +10 -1
  546. package/dist/utils/networkUtils.d.ts.map +1 -1
  547. package/dist/utils/patch.d.ts +1 -1
  548. package/dist/utils/patch.d.ts.map +1 -1
  549. package/dist/utils/pro2Nft.d.ts +38 -0
  550. package/dist/utils/pro2Nft.d.ts.map +1 -0
  551. package/dist/utils/pro2Wallpaper.d.ts +10 -0
  552. package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
  553. package/dist/utils/tracing.d.ts.map +1 -1
  554. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  555. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  556. package/package.json +6 -4
  557. package/src/api/BaseMethod.ts +38 -23
  558. package/src/api/CheckAllFirmwareRelease.ts +442 -4
  559. package/src/api/CheckBLEFirmwareRelease.ts +37 -5
  560. package/src/api/CheckBootloaderRelease.ts +37 -5
  561. package/src/api/CheckFirmwareRelease.ts +36 -9
  562. package/src/api/CipherKeyValue.ts +4 -0
  563. package/src/api/ClearSessionCache.ts +4 -0
  564. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  565. package/src/api/DirList.ts +9 -4
  566. package/src/api/DirMake.ts +7 -4
  567. package/src/api/DirRemove.ts +7 -4
  568. package/src/api/FileDelete.ts +7 -4
  569. package/src/api/FileRead.ts +13 -7
  570. package/src/api/FileWrite.ts +26 -189
  571. package/src/api/FirmwareUpdate.ts +30 -15
  572. package/src/api/FirmwareUpdateV2.ts +532 -169
  573. package/src/api/FirmwareUpdateV3.ts +343 -88
  574. package/src/api/FirmwareUpdateV4.ts +2331 -657
  575. package/src/api/GetDeviceState.ts +59 -0
  576. package/src/api/GetFeatures.ts +6 -4
  577. package/src/api/GetOnekeyFeatures.ts +1 -75
  578. package/src/api/GetPassphraseState.ts +36 -12
  579. package/src/api/OpenWalletSession.ts +268 -0
  580. package/src/api/PathInfo.ts +9 -4
  581. package/src/api/PromptWebDeviceAccess.ts +2 -7
  582. package/src/api/SearchDevices.ts +31 -4
  583. package/src/api/UploadPortfolio.ts +32 -4
  584. package/src/api/alephium/AlephiumGetAddress.ts +0 -4
  585. package/src/api/alephium/AlephiumSignMessage.ts +0 -4
  586. package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
  587. package/src/api/algo/AlgoGetAddress.ts +4 -0
  588. package/src/api/algo/AlgoSignTransaction.ts +4 -0
  589. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  590. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +45 -32
  591. package/src/api/aptos/AptosGetAddress.ts +4 -0
  592. package/src/api/aptos/AptosGetPublicKey.ts +4 -0
  593. package/src/api/aptos/AptosSignInMessage.ts +4 -0
  594. package/src/api/aptos/AptosSignMessage.ts +4 -0
  595. package/src/api/aptos/AptosSignTransaction.ts +4 -0
  596. package/src/api/benfen/BenfenGetAddress.ts +11 -7
  597. package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
  598. package/src/api/benfen/BenfenSignMessage.ts +0 -4
  599. package/src/api/benfen/BenfenSignTransaction.ts +0 -4
  600. package/src/api/btc/BTCGetAddress.ts +8 -1
  601. package/src/api/btc/BTCGetPublicKey.ts +9 -2
  602. package/src/api/btc/BTCSignMessage.ts +8 -1
  603. package/src/api/btc/BTCSignPsbt.ts +4 -0
  604. package/src/api/btc/BTCSignTransaction.ts +8 -1
  605. package/src/api/btc/BTCVerifyMessage.ts +8 -1
  606. package/src/api/btc/helpers/versionLimit.ts +7 -4
  607. package/src/api/cardano/CardanoGetAddress.ts +4 -0
  608. package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
  609. package/src/api/cardano/CardanoSignMessage.ts +5 -1
  610. package/src/api/cardano/CardanoSignTransaction.ts +5 -1
  611. package/src/api/conflux/ConfluxGetAddress.ts +6 -0
  612. package/src/api/conflux/ConfluxSignMessage.ts +6 -0
  613. package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
  614. package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
  615. package/src/api/cosmos/CosmosGetAddress.ts +4 -0
  616. package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
  617. package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
  618. package/src/api/device/DeviceCancel.ts +5 -0
  619. package/src/api/device/DeviceChangePin.ts +28 -0
  620. package/src/api/device/DeviceFullyUploadResource.ts +4 -5
  621. package/src/api/device/DeviceLock.ts +5 -0
  622. package/src/api/device/DeviceRebootToBoardloader.ts +5 -0
  623. package/src/api/device/DeviceRebootToBootloader.ts +5 -0
  624. package/src/api/device/DeviceSettings.ts +195 -1
  625. package/src/api/device/DeviceSupportFeatures.ts +4 -0
  626. package/src/api/device/DeviceUnlock.ts +21 -3
  627. package/src/api/device/DeviceUpdateBootloader.ts +152 -8
  628. package/src/api/device/DeviceWipe.ts +25 -0
  629. package/src/api/device/PreInitialize.ts +4 -0
  630. package/src/api/dynex/DnxGetAddress.ts +0 -6
  631. package/src/api/dynex/DnxSignTransaction.ts +0 -6
  632. package/src/api/evm/EVMGetAddress.ts +6 -2
  633. package/src/api/evm/EVMGetPublicKey.ts +6 -2
  634. package/src/api/evm/EVMSignMessage.ts +6 -2
  635. package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
  636. package/src/api/evm/EVMSignTransaction.ts +6 -2
  637. package/src/api/evm/EVMSignTypedData.ts +42 -50
  638. package/src/api/evm/EVMVerifyMessage.ts +6 -2
  639. package/src/api/evm/legacyV1/getAddress.ts +2 -2
  640. package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
  641. package/src/api/evm/legacyV1/signMessage.ts +2 -2
  642. package/src/api/evm/legacyV1/signTypedData.ts +2 -2
  643. package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
  644. package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
  645. package/src/api/evm/protocol.ts +6 -0
  646. package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
  647. package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
  648. package/src/api/firmware/FirmwareArtifactSource.ts +305 -0
  649. package/src/api/firmware/FirmwareHostBinding.ts +123 -0
  650. package/src/api/firmware/FirmwareMemoryHost.ts +143 -0
  651. package/src/api/firmware/FirmwarePreparationError.ts +12 -0
  652. package/src/api/firmware/FirmwarePreparedResourceArchive.ts +187 -0
  653. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +214 -77
  654. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  655. package/src/api/firmware/FirmwareUpdatePlan.ts +946 -0
  656. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +486 -0
  657. package/src/api/firmware/getBinary.ts +8 -3
  658. package/src/api/firmware/protocolV2Release.ts +168 -0
  659. package/src/api/firmware/updateBootloader.ts +19 -4
  660. package/src/api/firmware/uploadFirmware.ts +157 -26
  661. package/src/api/helpers/base64Data.ts +85 -0
  662. package/src/api/helpers/batchGetPublickeys.ts +2 -2
  663. package/src/api/helpers/filesystemValidation.ts +61 -0
  664. package/src/api/helpers/paramsValidator.ts +1 -1
  665. package/src/api/helpers/protocolV2FileWrite.ts +392 -0
  666. package/src/api/index.ts +7 -31
  667. package/src/api/kaspa/KaspaGetAddress.ts +7 -0
  668. package/src/api/kaspa/KaspaSignTransaction.ts +369 -29
  669. package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
  670. package/src/api/lightning/LnurlAuth.ts +0 -4
  671. package/src/api/near/NearGetAddress.ts +4 -0
  672. package/src/api/near/NearSignTransaction.ts +4 -0
  673. package/src/api/nem/NEMGetAddress.ts +4 -0
  674. package/src/api/nem/NEMSignTransaction.ts +4 -0
  675. package/src/api/neo/NeoGetAddress.ts +0 -4
  676. package/src/api/neo/NeoSignTransaction.ts +0 -4
  677. package/src/api/nervos/NervosGetAddress.ts +0 -4
  678. package/src/api/nervos/NervosSignTransaction.ts +2 -6
  679. package/src/api/nexa/NexaGetAddress.ts +0 -4
  680. package/src/api/nexa/NexaSignTransaction.ts +3 -5
  681. package/src/api/nostr/NostrDecryptMessage.ts +4 -0
  682. package/src/api/nostr/NostrEncryptMessage.ts +4 -0
  683. package/src/api/nostr/NostrGetPublicKey.ts +4 -0
  684. package/src/api/nostr/NostrSignEvent.ts +4 -0
  685. package/src/api/nostr/NostrSignSchnorr.ts +4 -0
  686. package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
  687. package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
  688. package/src/api/polkadot/networks.ts +3 -3
  689. package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +5 -2
  690. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +5 -2
  691. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +8 -5
  692. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +10 -6
  693. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +21 -0
  694. package/src/api/protocol-v2/DeviceInfoGet.ts +8 -15
  695. package/src/api/protocol-v2/DeviceReboot.ts +7 -3
  696. package/src/api/protocol-v2/DeviceStatusGet.ts +6 -1
  697. package/src/api/protocol-v2/DeviceUploadNft.ts +245 -0
  698. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +66 -73
  699. package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
  700. package/src/api/protocol-v2/FilesystemPermissionFix.ts +5 -2
  701. package/src/api/protocol-v2/Ping.ts +37 -3
  702. package/src/api/protocol-v2/ProtocolInfoRequest.ts +8 -3
  703. package/src/api/protocol-v2/helpers.ts +1 -4
  704. package/src/api/scdo/ScdoGetAddress.ts +0 -4
  705. package/src/api/scdo/ScdoSignMessage.ts +0 -4
  706. package/src/api/scdo/ScdoSignTransaction.ts +0 -4
  707. package/src/api/solana/SolGetAddress.ts +4 -0
  708. package/src/api/solana/SolSignMessage.ts +5 -1
  709. package/src/api/solana/SolSignOffchainMessage.ts +5 -1
  710. package/src/api/solana/SolSignTransaction.ts +6 -2
  711. package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
  712. package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
  713. package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
  714. package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
  715. package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
  716. package/src/api/stellar/StellarGetAddress.ts +1 -10
  717. package/src/api/stellar/StellarSignTransaction.ts +1 -14
  718. package/src/api/sui/SuiGetAddress.ts +5 -1
  719. package/src/api/sui/SuiGetPublicKey.ts +5 -1
  720. package/src/api/sui/SuiSignMessage.ts +5 -1
  721. package/src/api/sui/SuiSignTransaction.ts +5 -1
  722. package/src/api/ton/TonGetAddress.ts +5 -1
  723. package/src/api/ton/TonSignData.ts +5 -1
  724. package/src/api/ton/TonSignMessage.ts +10 -4
  725. package/src/api/ton/TonSignProof.ts +5 -1
  726. package/src/api/tron/TronGetAddress.ts +4 -0
  727. package/src/api/tron/TronSignMessage.ts +19 -8
  728. package/src/api/tron/TronSignTransaction.ts +5 -1
  729. package/src/api/utils.ts +32 -3
  730. package/src/api/xrp/XrpGetAddress.ts +4 -0
  731. package/src/api/xrp/XrpSignTransaction.ts +5 -1
  732. package/src/constants/index.ts +1 -4
  733. package/src/core/RequestQueue.ts +0 -18
  734. package/src/core/deviceEventRegistration.ts +27 -0
  735. package/src/core/index.ts +387 -163
  736. package/src/core/uiPromiseRegistry.ts +63 -0
  737. package/src/data/messages/messages-protocol-v2.json +1030 -567
  738. package/src/data/messages/messages.json +286 -9
  739. package/src/data-manager/DataManager.ts +154 -43
  740. package/src/data-manager/TransportManager.ts +7 -1
  741. package/src/data-manager/connectSettings.ts +11 -0
  742. package/src/device/Device.ts +880 -278
  743. package/src/device/DeviceCommands.ts +177 -158
  744. package/src/device/DeviceConnector.ts +44 -21
  745. package/src/device/DeviceFeaturesState.ts +25 -0
  746. package/src/device/DevicePool.ts +105 -23
  747. package/src/device/DeviceStateMapper.ts +416 -0
  748. package/src/device/DeviceStateProjector.ts +152 -0
  749. package/src/device/DeviceStateStore.ts +232 -0
  750. package/src/device/DeviceWalletSessionStore.ts +72 -6
  751. package/src/device/cloneDeviceState.ts +39 -0
  752. package/src/device/deviceIdentity.ts +18 -0
  753. package/src/deviceProfile/buildDeviceFeatures.ts +223 -189
  754. package/src/deviceProfile/index.ts +0 -1
  755. package/src/deviceProfile/protocolV2DeviceIdentity.ts +35 -0
  756. package/src/events/call.ts +0 -6
  757. package/src/events/core.ts +0 -2
  758. package/src/events/device.ts +22 -1
  759. package/src/events/iframe.ts +0 -1
  760. package/src/events/logBlockEvent.ts +93 -2
  761. package/src/events/ui-promise.ts +4 -2
  762. package/src/events/ui-request.ts +61 -4
  763. package/src/events/ui-response.ts +12 -2
  764. package/src/index.ts +17 -4
  765. package/src/inject.ts +91 -57
  766. package/src/lowLevelInject.ts +11 -7
  767. package/src/protocols/protocol-v2/deviceSession.ts +24 -0
  768. package/src/protocols/protocol-v2/features.ts +117 -33
  769. package/src/protocols/protocol-v2/firmware.ts +3 -1
  770. package/src/protocols/protocol-v2/index.ts +9 -1
  771. package/src/protocols/protocol-v2/resources.ts +210 -0
  772. package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
  773. package/src/protocols/protocol-v2/uiInteraction.ts +250 -0
  774. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -0
  775. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +131 -0
  776. package/src/protocols/protocol-v2/walletSession.ts +420 -49
  777. package/src/topLevelInject.ts +11 -6
  778. package/src/types/api/checkAllFirmwareRelease.ts +72 -9
  779. package/src/types/api/checkBLEFirmwareRelease.ts +4 -13
  780. package/src/types/api/checkBootloaderRelease.ts +2 -6
  781. package/src/types/api/checkFirmwareRelease.ts +2 -13
  782. package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
  783. package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
  784. package/src/types/api/deviceSettings.ts +26 -2
  785. package/src/types/api/deviceUnlock.ts +13 -2
  786. package/src/types/api/deviceUpdateBootloader.ts +7 -0
  787. package/src/types/api/export.ts +33 -1
  788. package/src/types/api/firmwareUpdate.ts +85 -11
  789. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  790. package/src/types/api/firmwareUpdatePlan.ts +38 -0
  791. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  792. package/src/types/api/getDeviceState.ts +19 -0
  793. package/src/types/api/getFeatures.ts +3 -0
  794. package/src/types/api/getOnekeyFeatures.ts +3 -0
  795. package/src/types/api/getPassphraseState.ts +7 -0
  796. package/src/types/api/index.ts +45 -75
  797. package/src/types/api/kaspaSignTransaction.ts +60 -4
  798. package/src/types/api/openWalletSession.ts +54 -0
  799. package/src/types/api/protocolV2.ts +24 -189
  800. package/src/types/api/sessionCache.ts +9 -4
  801. package/src/types/device.ts +217 -10
  802. package/src/types/params.ts +9 -2
  803. package/src/types/settings.ts +67 -25
  804. package/src/utils/assets.ts +4 -1
  805. package/src/utils/deviceFeaturesCompat.ts +191 -0
  806. package/src/utils/deviceFeaturesUtils.ts +42 -9
  807. package/src/utils/deviceInfoUtils.ts +29 -69
  808. package/src/utils/deviceSettings.ts +174 -39
  809. package/src/utils/deviceVersionUtils.ts +25 -44
  810. package/src/utils/findDefectiveBatchDevice.ts +3 -3
  811. package/src/utils/homescreen.ts +40 -0
  812. package/src/utils/index.ts +25 -7
  813. package/src/utils/networkUtils.ts +274 -16
  814. package/src/utils/pro2Nft.ts +165 -0
  815. package/src/utils/pro2Wallpaper.ts +44 -25
  816. package/src/utils/tracing.ts +3 -1
  817. package/src/utils/uiProgressThrottle.ts +63 -0
  818. package/tsconfig.type-tests.json +12 -0
  819. package/__tests__/RequestQueue.test.ts +0 -34
  820. package/dist/api/GetDeviceInfo.d.ts +0 -9
  821. package/dist/api/GetDeviceInfo.d.ts.map +0 -1
  822. package/dist/api/firmware/progressThrottle.d.ts +0 -3
  823. package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
  824. package/dist/api/protocol-v2/DeviceSessionGet.d.ts +0 -6
  825. package/dist/api/protocol-v2/DeviceSessionGet.d.ts.map +0 -1
  826. package/dist/api/protocol-v2/DeviceSettingsGet.d.ts +0 -6
  827. package/dist/api/protocol-v2/DeviceSettingsGet.d.ts.map +0 -1
  828. package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts +0 -16
  829. package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts.map +0 -1
  830. package/dist/api/protocol-v2/DeviceSettingsSet.d.ts +0 -12
  831. package/dist/api/protocol-v2/DeviceSettingsSet.d.ts.map +0 -1
  832. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts +0 -13
  833. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts.map +0 -1
  834. package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
  835. package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
  836. package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -9
  837. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
  838. package/dist/types/api/getDeviceInfo.d.ts +0 -87
  839. package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
  840. package/src/api/GetDeviceInfo.ts +0 -145
  841. package/src/api/firmware/progressThrottle.ts +0 -44
  842. package/src/api/protocol-v2/DeviceSessionGet.ts +0 -15
  843. package/src/api/protocol-v2/DeviceSettingsGet.ts +0 -16
  844. package/src/api/protocol-v2/DeviceSettingsPageShow.ts +0 -59
  845. package/src/api/protocol-v2/DeviceSettingsSet.ts +0 -39
  846. package/src/api/protocol-v2/FilesystemDiskControl.ts +0 -50
  847. package/src/deviceProfile/buildDeviceProfile.ts +0 -352
  848. package/src/protocols/protocol-v2/unlockRetry.ts +0 -46
  849. package/src/types/api/getDeviceInfo.ts +0 -101
@@ -14,24 +14,48 @@ import { BaseMethod } from './BaseMethod';
14
14
  import { validateParams } from './helpers/paramsValidator';
15
15
  import { DevicePool } from '../device/DevicePool';
16
16
  import { getBinary, getInfo, getSysResourceBinary } from './firmware/getBinary';
17
- import { updateResources, uploadFirmware } from './firmware/uploadFirmware';
17
+ import { normalizeFirmwarePreparationError } from './firmware/FirmwarePreparationError';
18
18
  import {
19
- LoggerNames,
20
- getDeviceBootloaderVersion,
21
- getDeviceFirmwareVersion,
22
- getDeviceUUID,
23
- getLogger,
24
- wait,
25
- } from '../utils';
19
+ updateResources,
20
+ updateResourcesFromSources,
21
+ uploadFirmwareFromSource,
22
+ } from './firmware/uploadFirmware';
23
+ import { BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS } from './firmware/FirmwareUpdateBaseMethod';
24
+ import { LoggerNames, getDeviceType, getDeviceUUID, getLogger, wait } from '../utils';
25
+ import { resolveDeviceBootloaderMode } from '../utils/deviceFeaturesCompat';
26
26
  import { FirmwareUpdateTipMessage, createUiMessage } from '../events/ui-request';
27
27
  import { DeviceModelToTypes } from '../types';
28
28
  import { DataManager } from '../data-manager';
29
29
  import { DEVICE } from '../events';
30
+ import { type FirmwareByteSource, openFirmwareByteSource } from './firmware/FirmwareArtifactSource';
31
+ import { resolveFirmwareUpdateHostBinding } from './firmware/FirmwareHostBinding';
32
+ import { readVerifiedPreparedResourceArchive } from './firmware/FirmwarePreparedResourceArchive';
33
+ import {
34
+ assertFirmwareUpdatePreparedPlanBinding,
35
+ assertFirmwareUpdatePreparedPlanDeviceIdentity,
36
+ getFirmwareUpdatePreparedRawArtifact,
37
+ validateFirmwareUpdatePreparedPlan,
38
+ } from './firmware/FirmwareUpdatePreparedPlan';
30
39
 
31
40
  import type { Features, KnownDevice } from '../types';
41
+ import type { FirmwareBinary } from './firmware/getBinary';
42
+ import type {
43
+ FirmwareArtifactReader,
44
+ FirmwareArtifactReference,
45
+ } from '../types/api/firmwareUpdate';
46
+ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePreparedPlan';
32
47
 
33
48
  type Params = {
34
49
  binary?: ArrayBuffer;
50
+ artifact?: FirmwareArtifactReference;
51
+ hostBindingGeneration?: number;
52
+ resourceEntries?: Array<{
53
+ entryName: string;
54
+ artifact: FirmwareArtifactReference;
55
+ }>;
56
+ artifactReader?: FirmwareArtifactReader;
57
+ preparedPlan?: FirmwareUpdatePreparedPlan;
58
+ platform?: FirmwareUpdatePreparedPlan['platform'];
35
59
  version?: number[];
36
60
  updateType: 'firmware' | 'ble';
37
61
  forcedUpdateRes?: boolean;
@@ -41,6 +65,84 @@ type Params = {
41
65
 
42
66
  const Log = getLogger(LoggerNames.Method);
43
67
 
68
+ const FIRMWARE_DOWNLOAD_REQUEST_OPTIONS = {
69
+ connectTimeoutMs: 60_000,
70
+ readTimeoutMs: 60_000,
71
+ overallTimeoutMs: 180_000,
72
+ maxRetries: 2,
73
+ retryDelayMs: 500,
74
+ } as const;
75
+
76
+ const normalizeFirmwareBinary = (binary: unknown): FirmwareBinary | undefined => {
77
+ if (typeof binary !== 'object' || binary === null) {
78
+ return undefined;
79
+ }
80
+
81
+ const isNodeBuffer =
82
+ typeof Buffer !== 'undefined' &&
83
+ typeof Buffer.isBuffer === 'function' &&
84
+ Buffer.isBuffer(binary);
85
+ if (isNodeBuffer) {
86
+ return binary.byteLength > 0 ? binary : undefined;
87
+ }
88
+
89
+ if (typeof ArrayBuffer !== 'undefined' && binary instanceof ArrayBuffer) {
90
+ return binary.byteLength > 0 ? binary : undefined;
91
+ }
92
+
93
+ if (
94
+ typeof ArrayBuffer !== 'undefined' &&
95
+ typeof ArrayBuffer.isView === 'function' &&
96
+ ArrayBuffer.isView(binary)
97
+ ) {
98
+ if (binary.byteLength <= 0) {
99
+ return undefined;
100
+ }
101
+ const source = new Uint8Array(binary.buffer, binary.byteOffset, binary.byteLength);
102
+ const normalized = new Uint8Array(binary.byteLength);
103
+ normalized.set(source);
104
+ return normalized.buffer;
105
+ }
106
+
107
+ const customBuffer = binary as {
108
+ [index: number]: unknown;
109
+ byteLength?: unknown;
110
+ constructor?: {
111
+ isBuffer?: (value: unknown) => boolean;
112
+ };
113
+ length?: unknown;
114
+ };
115
+ if (
116
+ typeof customBuffer.constructor?.isBuffer !== 'function' ||
117
+ !customBuffer.constructor.isBuffer(binary) ||
118
+ typeof customBuffer.byteLength !== 'number' ||
119
+ !Number.isSafeInteger(customBuffer.byteLength) ||
120
+ customBuffer.byteLength <= 0 ||
121
+ typeof customBuffer.length !== 'number' ||
122
+ customBuffer.length !== customBuffer.byteLength
123
+ ) {
124
+ return undefined;
125
+ }
126
+
127
+ const { byteLength } = customBuffer;
128
+ const normalized = new Uint8Array(byteLength);
129
+ for (let index = 0; index < byteLength; index += 1) {
130
+ const { [index]: byte } = customBuffer;
131
+ if (typeof byte !== 'number' || !Number.isInteger(byte) || byte < 0 || byte > 255) {
132
+ return undefined;
133
+ }
134
+ normalized[index] = byte;
135
+ }
136
+ return normalized.buffer;
137
+ };
138
+
139
+ const toArrayBuffer = (binary: FirmwareBinary): ArrayBuffer => {
140
+ if (binary instanceof ArrayBuffer) {
141
+ return binary;
142
+ }
143
+ return new Uint8Array(binary.buffer, binary.byteOffset, binary.byteLength).slice().buffer;
144
+ };
145
+
44
146
  export default class FirmwareUpdateV2 extends BaseMethod<Params> {
45
147
  checkPromise: Deferred<any> | null = null;
46
148
 
@@ -60,6 +162,20 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
60
162
  { name: 'firmwareType', type: 'string' },
61
163
  ]);
62
164
 
165
+ const hasPreparedPlan = payload.preparedPlan !== undefined;
166
+ if (hasPreparedPlan && (payload.binary !== undefined || payload.version !== undefined)) {
167
+ throw ERRORS.TypedError(
168
+ HardwareErrorCode.CallMethodInvalidParameter,
169
+ 'Prepared firmware plans cannot be combined with legacy firmware inputs'
170
+ );
171
+ }
172
+ if (!hasPreparedPlan && payload.artifact !== undefined) {
173
+ throw ERRORS.TypedError(
174
+ HardwareErrorCode.CallMethodInvalidParameter,
175
+ 'Firmware artifacts require a prepared plan'
176
+ );
177
+ }
178
+
63
179
  if (!payload.updateType) {
64
180
  throw ERRORS.TypedError(
65
181
  HardwareErrorCode.CallMethodInvalidParameter,
@@ -73,7 +189,7 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
73
189
  isUpdateBootloader: payload.isUpdateBootloader,
74
190
  };
75
191
 
76
- if ('version' in payload) {
192
+ if (!hasPreparedPlan && 'version' in payload) {
77
193
  this.params = {
78
194
  ...this.params,
79
195
  version: payload.version,
@@ -81,12 +197,50 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
81
197
  };
82
198
  }
83
199
 
84
- if ('binary' in payload) {
200
+ if (!hasPreparedPlan && 'binary' in payload) {
85
201
  this.params = {
86
202
  ...this.params,
87
203
  binary: payload.binary,
88
204
  };
89
205
  }
206
+
207
+ if (hasPreparedPlan) {
208
+ const preparedPlan = validateFirmwareUpdatePreparedPlan(payload.preparedPlan);
209
+ const hostBinding = resolveFirmwareUpdateHostBinding(
210
+ payload.hostBindingGeneration,
211
+ preparedPlan.preparedPlanDigest
212
+ );
213
+ const target = payload.isUpdateBootloader ? 'bootloader' : payload.updateType;
214
+ const plannedArtifact = getFirmwareUpdatePreparedRawArtifact({
215
+ preparedPlan,
216
+ target,
217
+ role: target,
218
+ }).artifact;
219
+ const resourceBindings = (payload.resourceEntries ?? []).map(
220
+ (entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
221
+ target: 'resource' as const,
222
+ entryName: entry.entryName,
223
+ artifact: entry.artifact,
224
+ })
225
+ );
226
+ assertFirmwareUpdatePreparedPlanBinding({
227
+ preparedPlan,
228
+ executor: 'v2',
229
+ platform: payload.platform,
230
+ scopeTargets: [
231
+ target,
232
+ ...(target === 'firmware' && resourceBindings.length ? (['resource'] as const) : []),
233
+ ],
234
+ bindings: [{ target, artifact: payload.artifact ?? plannedArtifact }, ...resourceBindings],
235
+ });
236
+ this.params = {
237
+ ...this.params,
238
+ preparedPlan,
239
+ artifact: plannedArtifact,
240
+ artifactReader: hostBinding.artifactReader,
241
+ firmwareType: preparedPlan.firmwareType,
242
+ };
243
+ }
90
244
  }
91
245
 
92
246
  postTipMessage = (message: string) => {
@@ -122,82 +276,152 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
122
276
  this.checkPromise = createDeferred();
123
277
  const env = DataManager.getSettings('env');
124
278
  const isBleReconnect = connectId && DataManager.isBleConnect(env);
279
+ // Tracks the in-flight BLE probe so interval ticks never overlap: a superseded
280
+ // Initialize left pending on the V1 transport is exactly what later times out
281
+ // and used to tear down the connection mid-firmware-upload.
282
+ let bleProbeInFlight = false;
125
283
 
126
284
  Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
127
285
 
128
286
  // check device goto bootloader mode
129
287
  let isFirstCheck = true;
130
288
  let checkCount = 0;
131
- // eslint-disable-next-line prefer-const
289
+ let hasPromptedWebDevice = false;
290
+ let isPromptingWebDevice = false;
291
+ let isFinished = false;
292
+ let intervalTimer: ReturnType<typeof setInterval> | undefined;
132
293
  let timeoutTimer: ReturnType<typeof setTimeout> | undefined;
133
294
 
134
295
  const deviceType = this.device?.getCurrentDeviceType();
135
296
  const isTouchOrProDevice = deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro;
136
297
 
137
- const intervalTimer: ReturnType<typeof setInterval> | undefined = setInterval(
138
- async () => {
139
- checkCount += 1;
140
- Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ', isFirstCheck);
141
- if (isTouchOrProDevice && isFirstCheck) {
142
- isFirstCheck = false;
143
- Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] wait 3000ms');
144
- await wait(3000);
145
- }
298
+ const clearPollingTimers = () => {
299
+ if (intervalTimer !== undefined) {
300
+ clearInterval(intervalTimer);
301
+ intervalTimer = undefined;
302
+ }
303
+ if (timeoutTimer !== undefined) {
304
+ clearTimeout(timeoutTimer);
305
+ timeoutTimer = undefined;
306
+ }
307
+ };
146
308
 
147
- if (
148
- checkCount > 4 &&
149
- DataManager.isBrowserWebUsb(DataManager.getSettings('env')) &&
150
- !this.payload.skipWebDevicePrompt
151
- ) {
152
- clearInterval(intervalTimer);
153
- clearTimeout(timeoutTimer);
309
+ const checkForBootloader = async (clearActiveTimers: boolean) => {
310
+ const found = await this._checkDeviceInBootloaderMode(
311
+ connectId,
312
+ clearActiveTimers ? intervalTimer : undefined,
313
+ clearActiveTimers ? timeoutTimer : undefined
314
+ );
315
+ if (found) {
316
+ isFinished = true;
317
+ clearPollingTimers();
318
+ }
319
+ return found;
320
+ };
154
321
 
155
- try {
156
- this.postTipMessage(FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);
157
- const confirmed = await this._promptDeviceInBootloaderForWebDevice();
158
- if (confirmed) {
159
- await this._checkDeviceInBootloaderMode(connectId, intervalTimer, timeoutTimer);
160
- }
161
- } catch (e) {
162
- Log.log(
163
- 'FirmwareUpdateV2 [checkDeviceToBootloader] promptDeviceInBootloaderForWebDevice failed: ',
164
- e
165
- );
166
- this.checkPromise?.reject(e);
322
+ let startPolling: () => void = () => undefined;
323
+ const pollForBootloader = async () => {
324
+ if (isFinished || isPromptingWebDevice) return;
325
+ checkCount += 1;
326
+ Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ', isFirstCheck);
327
+ if (isTouchOrProDevice && isFirstCheck) {
328
+ isFirstCheck = false;
329
+ Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] wait 3000ms');
330
+ await wait(3000);
331
+ }
332
+
333
+ if (
334
+ checkCount > 4 &&
335
+ DataManager.isBrowserWebUsb(DataManager.getSettings('env')) &&
336
+ !this.payload.skipWebDevicePrompt &&
337
+ !hasPromptedWebDevice &&
338
+ !isPromptingWebDevice
339
+ ) {
340
+ clearPollingTimers();
341
+ isPromptingWebDevice = true;
342
+ try {
343
+ this.postTipMessage(FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);
344
+ const confirmed = await this._promptDeviceInBootloaderForWebDevice();
345
+ hasPromptedWebDevice = true;
346
+ if (confirmed) {
347
+ await checkForBootloader(false);
167
348
  }
168
- return;
349
+ // WebUSB enumeration can still be empty immediately after the chooser
350
+ // resolves. Resume a fresh bounded polling window instead of leaving the
351
+ // deferred check pending forever after the original timers were paused.
352
+ if (!isFinished) {
353
+ startPolling();
354
+ }
355
+ } catch (e) {
356
+ isFinished = true;
357
+ clearPollingTimers();
358
+ Log.log(
359
+ 'FirmwareUpdateV2 [checkDeviceToBootloader] promptDeviceInBootloaderForWebDevice failed: ',
360
+ e
361
+ );
362
+ this.checkPromise?.reject(e);
363
+ } finally {
364
+ isPromptingWebDevice = false;
169
365
  }
366
+ return;
367
+ }
170
368
 
171
- if (isBleReconnect) {
172
- try {
173
- await this.device.deviceConnector?.acquire(
174
- this.device.originalDescriptor.id,
175
- null,
176
- true
177
- );
178
- await this.device.initialize();
179
- if (this.device.isBootloader()) {
180
- clearInterval(intervalTimer);
181
- this.checkPromise?.resolve(true);
182
- }
183
- } catch (e) {
184
- // ignore error because of device is not connected
185
- Log.log('catch Bluetooth error when device is restarting: ', e);
369
+ if (isBleReconnect) {
370
+ if (bleProbeInFlight) return;
371
+ bleProbeInFlight = true;
372
+ try {
373
+ await this.device.deviceConnector?.acquire(
374
+ this.device.originalDescriptor.id,
375
+ null,
376
+ true,
377
+ this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType
378
+ );
379
+ // Bound each probe so a request the rebooting device never received
380
+ // frees the slot for the next tick instead of hanging into the
381
+ // 30s reboot budget.
382
+ await this.device.initialize({ timeoutMs: BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS });
383
+ if (this.device.isBootloader()) {
384
+ isFinished = true;
385
+ clearPollingTimers();
386
+ this.checkPromise?.resolve(true);
186
387
  }
187
- } else {
188
- await this._checkDeviceInBootloaderMode(connectId, intervalTimer, timeoutTimer);
388
+ } catch (e) {
389
+ // ignore error because of device is not connected
390
+ Log.log('catch Bluetooth error when device is restarting: ', e);
391
+ } finally {
392
+ bleProbeInFlight = false;
189
393
  }
190
- },
191
- isBleReconnect ? 3000 : 2000
192
- );
193
-
194
- // check goto bootloader mode timeout and throw error
195
- timeoutTimer = setTimeout(() => {
196
- if (this.checkPromise) {
197
- clearInterval(intervalTimer);
198
- this.checkPromise.reject(new Error());
394
+ } else {
395
+ await checkForBootloader(true);
199
396
  }
200
- }, 30000);
397
+ };
398
+
399
+ startPolling = () => {
400
+ if (isFinished) return;
401
+ clearPollingTimers();
402
+ intervalTimer = setInterval(
403
+ () => {
404
+ pollForBootloader().catch(error => {
405
+ if (isFinished) return;
406
+ isFinished = true;
407
+ clearPollingTimers();
408
+ this.checkPromise?.reject(error);
409
+ });
410
+ },
411
+ isBleReconnect ? 3000 : 2000
412
+ );
413
+ // Each automatic polling phase is bounded. Time spent in the browser's
414
+ // permission chooser is intentionally excluded from this deadline.
415
+ timeoutTimer = setTimeout(() => {
416
+ if (!isFinished && this.checkPromise) {
417
+ isFinished = true;
418
+ clearPollingTimers();
419
+ this.checkPromise.reject(new Error());
420
+ }
421
+ }, 30000);
422
+ };
423
+
424
+ startPolling();
201
425
  }
202
426
 
203
427
  private async _checkDeviceInBootloaderMode(
@@ -207,7 +431,9 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
207
431
  ) {
208
432
  const deviceDiff = await this.device.deviceConnector?.enumerate();
209
433
  const devicesDescriptor = deviceDiff?.descriptors ?? [];
210
- const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId);
434
+ const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId, {
435
+ connectProtocol: this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType,
436
+ });
211
437
 
212
438
  if (deviceList.length === 1 && deviceList[0]?.isBootloader()) {
213
439
  // should update current device from cache
@@ -223,22 +449,22 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
223
449
  return false;
224
450
  }
225
451
 
226
- isEnteredManuallyBoot(features: Features) {
452
+ isEnteredManuallyBoot() {
227
453
  const deviceType = this.device.getCurrentDeviceType();
228
454
  const isMini = deviceType === EDeviceType.Mini;
229
455
  const isBoot183ClassicUpBle =
230
456
  this.params.updateType === 'firmware' &&
231
457
  deviceType === EDeviceType.Classic &&
232
- getDeviceBootloaderVersion(features).join('.') === '1.8.3';
458
+ this.device.getCurrentBootloaderVersionString() === '1.8.3';
233
459
  return isMini || isBoot183ClassicUpBle;
234
460
  }
235
461
 
236
- isSupportResourceUpdate(features: Features, updateType: string) {
462
+ isSupportResourceUpdate(updateType: string) {
237
463
  if (updateType !== 'firmware') return false;
238
464
 
239
465
  const deviceType = this.device.getCurrentDeviceType();
240
466
  const isTouchMode = deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro;
241
- const currentVersion = getDeviceFirmwareVersion(features).join('.');
467
+ const currentVersion = this.device.getCurrentFirmwareVersionString() ?? '0.0.0';
242
468
 
243
469
  return isTouchMode && semver.gte(currentVersion, '3.2.0');
244
470
  }
@@ -250,7 +476,7 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
250
476
  checkVersionForCopyTouchResource(features: Features | undefined, firmwareType: EFirmwareType) {
251
477
  if (!features) return;
252
478
  const deviceType = this.device.getCurrentDeviceType();
253
- const currentVersion = getDeviceFirmwareVersion(features).join('.');
479
+ const currentVersion = this.device.getCurrentFirmwareVersionString() ?? '0.0.0';
254
480
  const targetVersion = this.params.version?.join('.');
255
481
  const { updateType } = this.params;
256
482
 
@@ -276,136 +502,273 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
276
502
  const { features, commands } = device;
277
503
  const deviceType = device.getCurrentDeviceType();
278
504
 
279
- // Protocol V2 (Pro2) 固件升级走 DeviceFirmwareUpdate 流程,禁止进入 legacy 入口
505
+ // Protocol V2 (Pro2) uses DeviceFirmwareUpdate and must not enter this legacy flow.
280
506
  if (device.isProtocolV2()) {
281
507
  throw ERRORS.TypedError(
282
508
  HardwareErrorCode.RuntimeError,
283
509
  'Protocol V2 firmware update must use firmwareUpdateV4'
284
510
  );
285
511
  }
512
+ if (params.preparedPlan) {
513
+ assertFirmwareUpdatePreparedPlanDeviceIdentity({
514
+ preparedPlan: params.preparedPlan,
515
+ deviceIdentity: getDeviceUUID(features) || undefined,
516
+ bootloaderMode: resolveDeviceBootloaderMode(features),
517
+ deviceModel: String(getDeviceType(features)),
518
+ });
519
+ }
286
520
 
287
521
  const deviceFirmwareType = device.getCurrentFirmwareType();
288
522
  const firmwareType = params.firmwareType ?? deviceFirmwareType;
289
523
 
290
524
  this.checkVersionForCopyTouchResource(features, firmwareType);
291
525
 
292
- if (!device.isBootloader() && features) {
293
- const uuid = getDeviceUUID(features);
294
- // should go to bootloader mode manually
295
- if (this.isEnteredManuallyBoot(features)) {
296
- return Promise.reject(ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));
526
+ let preparedSource: FirmwareByteSource | undefined;
527
+ try {
528
+ const acquireFirmwareSource = async (): Promise<FirmwareByteSource> => {
529
+ try {
530
+ if (preparedSource) {
531
+ return preparedSource;
532
+ }
533
+
534
+ if (params.binary !== undefined) {
535
+ const binary = normalizeFirmwareBinary(params.binary);
536
+ if (!binary) {
537
+ throw new Error('firmware binary is empty or invalid');
538
+ }
539
+ const source = await openFirmwareByteSource({
540
+ binary: toArrayBuffer(binary),
541
+ });
542
+ if (!source) {
543
+ throw new Error('firmware binary is empty or invalid');
544
+ }
545
+ preparedSource = source;
546
+ return source;
547
+ }
548
+
549
+ if (params.artifact) {
550
+ const source = await openFirmwareByteSource({
551
+ artifact: params.artifact,
552
+ reader: params.artifactReader,
553
+ });
554
+ if (!source) {
555
+ throw new Error('firmware artifact is not prepared');
556
+ }
557
+ preparedSource = source;
558
+ return source;
559
+ }
560
+
561
+ if (!device.features) {
562
+ throw ERRORS.TypedError(
563
+ HardwareErrorCode.RuntimeError,
564
+ 'no features found for this device'
565
+ );
566
+ }
567
+
568
+ if (
569
+ params.artifactReader ||
570
+ DataManager.getSettings('firmwareManifestMode') === 'external-only'
571
+ ) {
572
+ throw ERRORS.TypedError(
573
+ HardwareErrorCode.RuntimeError,
574
+ 'Firmware must be prepared by the external firmware host',
575
+ {
576
+ firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
577
+ artifactName: 'firmware',
578
+ }
579
+ );
580
+ }
581
+
582
+ this.postTipMessage('DownloadFirmware');
583
+ const firmware = await getBinary({
584
+ features: device.features,
585
+ version: params.version,
586
+ updateType: params.updateType,
587
+ isUpdateBootloader: params.isUpdateBootloader,
588
+ firmwareType,
589
+ requestOptions: FIRMWARE_DOWNLOAD_REQUEST_OPTIONS,
590
+ });
591
+ const binary = normalizeFirmwareBinary(firmware.binary);
592
+ if (!binary) {
593
+ throw new Error('downloaded firmware binary is empty or invalid');
594
+ }
595
+ const source = await openFirmwareByteSource({
596
+ binary: toArrayBuffer(binary),
597
+ });
598
+ if (!source) {
599
+ throw new Error('downloaded firmware binary is empty or invalid');
600
+ }
601
+ preparedSource = source;
602
+ this.postTipMessage('DownloadFirmwareSuccess');
603
+ return source;
604
+ } catch (err) {
605
+ throw normalizeFirmwarePreparationError(err);
606
+ }
607
+ };
608
+
609
+ const preparedResourceRequested =
610
+ !params.isUpdateBootloader &&
611
+ params.updateType === 'firmware' &&
612
+ (params.preparedPlan?.targetsToUpdate.includes('resource') ?? false);
613
+ if (preparedResourceRequested && device.isBootloader()) {
614
+ throw ERRORS.TypedError(
615
+ HardwareErrorCode.RuntimeError,
616
+ 'Prepared firmware resources require the device application mode',
617
+ { firmwareUpdateCode: 'FirmwareArtifactsNotPrepared', artifactName: 'resource' }
618
+ );
297
619
  }
298
620
 
299
- // check & upgrade firmware resource
300
- if (features && this.isSupportResourceUpdate(features, params.updateType)) {
301
- this.postTipMessage('CheckLatestUiResource');
302
- const resourceUrl = DataManager.getSysResourcesLatestRelease({
303
- features,
304
- forcedUpdateRes: params.forcedUpdateRes,
305
- firmwareType,
306
- });
307
- if (resourceUrl) {
621
+ if (!device.isBootloader() && features) {
622
+ const serialNo = device.getCurrentSerialNo();
623
+ // should go to bootloader mode manually
624
+ if (this.isEnteredManuallyBoot()) {
625
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot);
626
+ }
627
+
628
+ // All network-backed input must be ready before the first device mutation.
629
+ await acquireFirmwareSource();
630
+
631
+ // PreparedPlan 资源只依赖获批 ZIP;live release 仅保留给非 prepared 旧流程。
632
+ if (preparedResourceRequested) {
633
+ if (!this.isSupportResourceUpdate(params.updateType)) {
634
+ throw ERRORS.TypedError(
635
+ HardwareErrorCode.RuntimeError,
636
+ 'Prepared firmware resources are not supported by this device',
637
+ { firmwareUpdateCode: 'FirmwareArtifactsNotPrepared', artifactName: 'resource' }
638
+ );
639
+ }
640
+ this.postTipMessage('CheckLatestUiResource');
308
641
  this.postTipMessage('DownloadLatestUiResource');
309
- const resource = await getSysResourceBinary(resourceUrl);
642
+ const verifiedEntries = await readVerifiedPreparedResourceArchive({
643
+ preparedPlan: params.preparedPlan as FirmwareUpdatePreparedPlan,
644
+ reader: params.artifactReader,
645
+ });
646
+ const sources: Array<{ entryName: string; source: FirmwareByteSource }> = [];
647
+ try {
648
+ for (const entry of verifiedEntries) {
649
+ const source = await openFirmwareByteSource({ binary: entry.binary });
650
+ if (!source) {
651
+ throw ERRORS.TypedError(
652
+ HardwareErrorCode.RuntimeError,
653
+ `Firmware resource entry ${entry.entryName} is empty`,
654
+ {
655
+ firmwareUpdateCode: 'FirmwareArtifactReceiptMismatch',
656
+ artifactName: 'resource',
657
+ }
658
+ );
659
+ }
660
+ sources.push({ entryName: entry.entryName, source });
661
+ }
662
+ await updateResourcesFromSources(
663
+ this.device.getCommands().typedCall.bind(this.device.getCommands()),
664
+ this.postMessage,
665
+ device,
666
+ sources
667
+ );
668
+ } finally {
669
+ await Promise.all(sources.map(entry => entry.source.close().catch(() => undefined)));
670
+ }
310
671
  this.postTipMessage('DownloadLatestUiResourceSuccess');
311
- if (resource) {
672
+ } else if (this.isSupportResourceUpdate(params.updateType)) {
673
+ this.postTipMessage('CheckLatestUiResource');
674
+ const resourceUrl = DataManager.getSysResourcesLatestRelease({
675
+ features,
676
+ forcedUpdateRes: params.forcedUpdateRes,
677
+ firmwareType,
678
+ });
679
+ if (resourceUrl) {
680
+ this.postTipMessage('DownloadLatestUiResource');
681
+ if (
682
+ params.artifactReader ||
683
+ DataManager.getSettings('firmwareManifestMode') === 'external-only'
684
+ ) {
685
+ throw ERRORS.TypedError(
686
+ HardwareErrorCode.RuntimeError,
687
+ 'Firmware resource must be prepared by the external firmware host',
688
+ {
689
+ firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
690
+ artifactName: 'resource',
691
+ }
692
+ );
693
+ }
694
+ const resourceBinary: ArrayBuffer | Buffer = (await getSysResourceBinary(resourceUrl))
695
+ .binary;
696
+ this.postTipMessage('DownloadLatestUiResourceSuccess');
312
697
  await updateResources(
313
698
  this.device.getCommands().typedCall.bind(this.device.getCommands()),
314
699
  this.postMessage,
315
700
  device,
316
- resource.binary
701
+ resourceBinary
317
702
  );
318
703
  }
319
704
  }
320
- }
321
705
 
322
- // check if the device commands has been disposed
323
- this.device?.commands?.checkDisposed();
324
-
325
- // auto go to bootloader mode
326
- try {
327
- this.postTipMessage('AutoRebootToBootloader');
328
- const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
329
- // @ts-expect-error
330
- if (bootRes.type === 'CallMethodError') {
331
- throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
332
- }
333
- this.postTipMessage('GoToBootloaderSuccess');
334
- this.checkDeviceToBootloader(this.payload.connectId);
335
-
336
- // force clean classic device cache so that the device can initialize again
337
- if (DeviceModelToTypes.model_classic.includes(deviceType)) {
338
- DevicePool.clearDeviceCache(uuid);
339
- }
340
- delete DevicePool.devicesCache[''];
341
- await this.checkPromise?.promise;
342
- this.checkPromise = null;
343
-
344
- // check if the device commands has been disposed
706
+ // The request may outlive the current transport command instance.
345
707
  this.device?.commands?.checkDisposed();
346
708
 
347
- /**
348
- * Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
349
- */
350
- const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
351
- await wait(isTouch ? 3000 : 1500);
352
- } catch (e) {
353
- if (e instanceof HardwareError) {
354
- return Promise.reject(e);
355
- }
356
- console.log('auto go to bootloader mode failed: ', e);
357
- return Promise.reject(
358
- ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
359
- );
360
- }
361
- }
362
-
363
- let binary;
709
+ // auto go to bootloader mode
710
+ try {
711
+ this.postTipMessage('AutoRebootToBootloader');
712
+ const bootRes = await commands.typedCall('DeviceBackToBoot', 'Success');
713
+ // @ts-expect-error
714
+ if (bootRes.type === 'CallMethodError') {
715
+ throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);
716
+ }
717
+ this.postTipMessage('GoToBootloaderSuccess');
718
+ this.checkDeviceToBootloader(this.payload.connectId);
364
719
 
365
- try {
366
- if (params.binary) {
367
- binary = this.params.binary;
368
- } else {
369
- if (!device.features) {
370
- throw ERRORS.TypedError(
371
- HardwareErrorCode.RuntimeError,
372
- 'no features found for this device'
720
+ // force clean classic device cache so that the device can initialize again
721
+ if (DeviceModelToTypes.model_classic.includes(deviceType)) {
722
+ DevicePool.clearDeviceCache(serialNo);
723
+ }
724
+ delete DevicePool.devicesCache[''];
725
+ await this.checkPromise?.promise;
726
+ this.checkPromise = null;
727
+
728
+ // check if the device commands has been disposed
729
+ this.device?.commands?.checkDisposed();
730
+
731
+ /**
732
+ * Touch 1 with bootloader v2.5.0 issue: BLE chip need more time for looking up name, here change the delay time to 3000ms after rebooting.
733
+ */
734
+ const isTouch = DeviceModelToTypes.model_touch.includes(deviceType);
735
+ await wait(isTouch ? 3000 : 1500);
736
+ } catch (e) {
737
+ if (e instanceof HardwareError) {
738
+ return Promise.reject(e);
739
+ }
740
+ console.log('auto go to bootloader mode failed: ', e);
741
+ return Promise.reject(
742
+ ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure)
373
743
  );
374
744
  }
375
- this.postTipMessage('DownloadFirmware');
376
-
377
- const firmware = await getBinary({
378
- features: device.features,
379
- version: params.version,
380
- updateType: params.updateType,
381
- isUpdateBootloader: params.isUpdateBootloader,
382
- firmwareType,
383
- });
384
- binary = firmware.binary;
385
- this.postTipMessage('DownloadFirmwareSuccess');
386
745
  }
387
- } catch (err) {
388
- throw ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateDownloadFailed, err.message ?? err);
389
- }
390
746
 
391
- // check if the device commands has been disposed
392
- this.device?.commands?.checkDisposed();
747
+ // Devices already in bootloader mode still acquire through the same helper.
748
+ const source = await acquireFirmwareSource();
393
749
 
394
- await this.device.acquire();
750
+ // check if the device commands has been disposed
751
+ this.device?.commands?.checkDisposed();
395
752
 
396
- const response = await uploadFirmware(
397
- params.updateType,
398
- this.device.getCommands().typedCall.bind(this.device.getCommands()),
399
- this.postMessage,
400
- device,
401
- { payload: binary, rebootOnSuccess: true },
402
- params.isUpdateBootloader
403
- );
753
+ await this.device.acquire();
404
754
 
405
- if (this.connectId) {
406
- DevicePool.clearDeviceCache(this.connectId);
407
- }
755
+ const response = await uploadFirmwareFromSource(
756
+ params.updateType,
757
+ this.device.getCommands().typedCall.bind(this.device.getCommands()),
758
+ this.postMessage,
759
+ device,
760
+ source,
761
+ true,
762
+ params.isUpdateBootloader
763
+ );
764
+
765
+ if (this.connectId) {
766
+ DevicePool.clearDeviceCache(this.connectId);
767
+ }
408
768
 
409
- return response;
769
+ return response;
770
+ } finally {
771
+ await preparedSource?.close().catch(() => undefined);
772
+ }
410
773
  }
411
774
  }