@onekeyfe/hd-core 1.2.0-alpha.15 → 1.2.0-alpha.151

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