@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
package/src/core/index.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import semver from 'semver';
2
2
  import EventEmitter from 'events';
3
+ import { DeviceSessionPinType, TRANSPORT_EVENT } from '@onekeyfe/hd-transport';
3
4
  import {
4
5
  ERRORS,
6
+ ERROR_CODES_REQUIRE_DISCONNECT,
5
7
  ERROR_CODES_REQUIRE_RELEASE,
6
8
  HardwareError,
7
9
  HardwareErrorCode,
@@ -14,14 +16,7 @@ import {
14
16
  createNewFirmwareUnReleaseHardwareError,
15
17
  } from '@onekeyfe/hd-shared';
16
18
 
17
- import {
18
- LoggerNames,
19
- enableLog,
20
- getLogger,
21
- isMethodVersionRangeUnsupported,
22
- setLoggerPostMessage,
23
- wait,
24
- } from '../utils';
19
+ import { LoggerNames, enableLog, getLogger, setLoggerPostMessage, wait } from '../utils';
25
20
  import {
26
21
  findDefectiveBatchDevice,
27
22
  getDefectiveDeviceInfo,
@@ -32,10 +27,12 @@ import {
32
27
  createRequestContext,
33
28
  createSdkTracingContext,
34
29
  formatRequestContext,
30
+ generateInstanceId,
35
31
  getActiveRequestsByDeviceInstance,
36
32
  updateRequestContext,
37
33
  } from '../utils/tracing';
38
34
  import { Device } from '../device/Device';
35
+ import { checkLiveDeviceId } from '../device/deviceIdentity';
39
36
  import { DeviceList } from '../device/DeviceList';
40
37
  import { DevicePool } from '../device/DevicePool';
41
38
  import { PollingStateManager } from './PollingStateManager';
@@ -51,19 +48,33 @@ import {
51
48
  createDeviceMessage,
52
49
  createResponseMessage,
53
50
  createUiMessage,
51
+ formatLogMethodLabel,
52
+ getLogBlockLabel,
53
+ getSafeLogPayload,
54
54
  } from '../events';
55
55
  import TransportManager from '../data-manager/TransportManager';
56
56
  import DeviceConnector from '../device/DeviceConnector';
57
57
  import RequestQueue from './RequestQueue';
58
+ import { consumeUiPromise, findUiPromiseForResponse, rejectUiPromises } from './uiPromiseRegistry';
59
+ import { registerHardwareUiEventListeners } from './deviceEventRegistration';
58
60
  import { getSynchronize } from '../utils/getSynchronize';
59
- import { runMethodWithUnlockRetry } from '../protocols/protocol-v2/unlockRetry';
61
+ import { runMethodWithUnlockPolicy } from '../protocols/protocol-v2/unlockPolicyRunner';
62
+ import {
63
+ ProtocolV2UiInteractionCoordinator,
64
+ isProtocolV2UiEnabled,
65
+ } from '../protocols/protocol-v2/uiInteraction';
66
+ import { createUiProgressMessageFilter } from '../utils/uiProgressThrottle';
60
67
 
61
68
  import type { ConnectSettings, Features, KnownDevice } from '../types';
62
69
  import type { CoreMessage, IFrameCallMessage, UiPromise, UiPromiseResponse } from '../events';
63
70
  import type { DeviceEvents, InitOptions, RunOptions } from '../device/Device';
64
71
  import type { SdkTracingContext } from '../utils/tracing';
65
72
  import type { Deferred } from '@onekeyfe/hd-shared';
66
- import type { LowlevelTransportSharedPlugin, OneKeyDeviceInfo } from '@onekeyfe/hd-transport';
73
+ import type {
74
+ LowlevelTransportSharedPlugin,
75
+ OneKeyDeviceInfo,
76
+ TransportDeviceDisconnectEvent,
77
+ } from '@onekeyfe/hd-transport';
67
78
  import type { BaseMethod } from '../api/BaseMethod';
68
79
 
69
80
  const Log = getLogger(LoggerNames.Core);
@@ -92,14 +103,15 @@ function hasDeriveCardano(method: BaseMethod): boolean {
92
103
 
93
104
  const parseInitOptions = (method?: BaseMethod): InitOptions => ({
94
105
  initSession: method?.payload.initSession,
95
- passphraseState: method?.payload.passphraseState,
106
+ passphraseState: method?.payload.useEmptyPassphrase ? undefined : method?.payload.passphraseState,
96
107
  deviceId: method?.payload.deviceId,
97
108
  deriveCardano: method && hasDeriveCardano(method),
98
109
  connectProtocol: method?.payload.connectProtocol,
110
+ forceProtocolDetection: method?.payload.forceProtocolDetection,
99
111
  protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
100
112
  });
101
113
 
102
- let _core: Core;
114
+ let _core: Core | undefined;
103
115
  let _deviceList: DeviceList | undefined;
104
116
  let _connector: DeviceConnector | undefined;
105
117
  let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
@@ -124,6 +136,9 @@ const toError = (error: unknown): Error | undefined => {
124
136
  }
125
137
  };
126
138
 
139
+ const isExpectedCompatibilityError = (error: unknown) =>
140
+ error instanceof HardwareError && error.errorCode === HardwareErrorCode.DeviceNotSupportMethod;
141
+
127
142
  const updateMethodRequestContext = (method: BaseMethod, updates: any) => {
128
143
  if (method.requestContext) {
129
144
  updateRequestContext(method.requestContext.responseID, updates);
@@ -143,11 +158,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
143
158
  }
144
159
 
145
160
  // find api method
146
- let method: BaseMethod;
161
+ let method!: BaseMethod;
147
162
  try {
148
163
  method = findMethod(message as IFrameCallMessage);
149
164
  method.connector = _connector;
150
- method.postMessage = postMessage;
165
+ const shouldPostMessage = createUiProgressMessageFilter();
166
+ method.postMessage = event => {
167
+ if (shouldPostMessage(event)) {
168
+ postMessage(event);
169
+ }
170
+ };
151
171
  method.setContext?.(context);
152
172
 
153
173
  method.requestContext = createRequestContext(method.responseID, method.name, {
@@ -159,11 +179,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
159
179
 
160
180
  method.init();
161
181
  } catch (error) {
162
- return Promise.reject(error);
182
+ if (method) {
183
+ completeMethodRequestContext(method, error);
184
+ method.dispose();
185
+ }
186
+ return createResponseMessage(method?.responseID ?? message.id, false, { error });
163
187
  }
164
188
 
165
- DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
166
-
167
189
  if (!method.useDevice) {
168
190
  updateMethodRequestContext(method, { status: 'running' });
169
191
  try {
@@ -358,7 +380,7 @@ const onCallDevice = async (
358
380
  );
359
381
  } catch (e) {
360
382
  preWarmCallbackTask?.resolve();
361
- console.log('ensureConnected error: ', e);
383
+ Log.debug('ensureConnected error: ', e);
362
384
 
363
385
  completeMethodRequestContext(method, e);
364
386
 
@@ -395,18 +417,28 @@ const onCallDevice = async (
395
417
  );
396
418
  }
397
419
 
398
- device.on(DEVICE.PIN, onDevicePinHandler);
399
- device.on(DEVICE.BUTTON, onDeviceButtonHandler);
400
- device.on(
401
- DEVICE.PASSPHRASE,
402
- message.payload.useEmptyPassphrase ? onEmptyPassphraseHandler : onDevicePassphraseHandler
403
- );
404
- device.on(DEVICE.PASSPHRASE_ON_DEVICE, onEnterPassphraseOnDeviceHandler);
420
+ registerHardwareUiEventListeners(device, {
421
+ pin: onDevicePinHandler,
422
+ pinOnDevice: onEnterPinOnDeviceHandler,
423
+ pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
424
+ button: onDeviceButtonHandler,
425
+ passphrase: message.payload.useEmptyPassphrase
426
+ ? onEmptyPassphraseHandler
427
+ : onDevicePassphraseHandler,
428
+ passphraseOnDevice: onEnterPassphraseOnDeviceHandler,
429
+ attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
430
+ });
405
431
  device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
432
+ device.on(DEVICE.STATE, onDeviceStateHandler);
406
433
  device.on(
407
434
  DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
408
435
  onSelectDeviceInBootloaderForWebDeviceHandler
409
436
  );
437
+
438
+ const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
439
+ let protocolV2Operation = false;
440
+ let protocolV2CloseEmitted = false;
441
+ device.beginProtocolV2UiInteraction();
410
442
  device.on(
411
443
  DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
412
444
  onSelectDeviceForSwitchFirmwareWebDeviceHandler
@@ -421,11 +453,10 @@ const onCallDevice = async (
421
453
  await waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
422
454
 
423
455
  const inner = async (): Promise<void> => {
424
- // Protocol V2 专属方法统一守卫:协议在 acquire/initialize 后已确定,
425
- // V2 设备直接抛出明确的 NotSupport 错误(见 BaseMethod.requireProtocolV2)。
426
- if (method.requireProtocolV2 && !device.isProtocolV2()) {
427
- throw createDeviceNotSupportMethodError(method.name, device.getCurrentFirmwareType());
428
- }
456
+ // Protocol is established from an active device response during acquire/initialize.
457
+ // Reject unsupported methods before any method-specific device command is sent.
458
+ method.assertProtocolSupported(device.getProtocol(), device.getCurrentFirmwareType());
459
+ protocolV2Operation = device.isProtocolV2();
429
460
 
430
461
  // check firmware version
431
462
  const versionRange = device.getCurrentMethodVersionRange(
@@ -436,8 +467,8 @@ const onCallDevice = async (
436
467
  const deviceFirmwareType = device.getCurrentFirmwareType();
437
468
  let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
438
469
 
439
- // 故障批次检测与远端强制升级门禁基于 V1 features/remote config
440
- // Pro2(V2) 暂不参与:profile 版的 firmwareStatus 需要 DataManager 支持后再接入。
470
+ // Defective-batch and forced-update gates depend on V1 features/remote config.
471
+ // Pro2 joins after DataManager supports its profile firmwareStatus.
441
472
  if (device.features && !device.isProtocolV2()) {
442
473
  await DataManager.checkAndReloadData();
443
474
 
@@ -485,10 +516,6 @@ const onCallDevice = async (
485
516
  }
486
517
  }
487
518
 
488
- if (isMethodVersionRangeUnsupported(versionRange)) {
489
- throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
490
- }
491
-
492
519
  if (versionRange) {
493
520
  if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
494
521
  if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
@@ -539,89 +566,102 @@ const onCallDevice = async (
539
566
  );
540
567
  }
541
568
 
542
- if (method.deviceId && method.checkDeviceId) {
543
- const isSameDeviceID = device.checkDeviceId(method.deviceId);
544
- if (!isSameDeviceID) {
545
- return Promise.reject(ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError));
546
- }
547
- }
548
-
549
- /**
550
- * check firmware release info
551
- */
552
- method.checkFirmwareRelease();
569
+ try {
570
+ let deviceIdCheckedDuringUnlockPreflight = false;
571
+ const response = await runMethodWithUnlockPolicy<object>(method, device, {
572
+ uiCoordinator: protocolV2UiCoordinator,
573
+ afterStatusBeforeUnlock: () => {
574
+ if (method.deviceId && method.checkDeviceId) {
575
+ if (!device.checkDeviceId(method.deviceId)) {
576
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
577
+ }
578
+ deviceIdCheckedDuringUnlockPreflight = true;
579
+ }
580
+ },
581
+ prepare: async () => {
582
+ if (method.deviceId && method.checkDeviceId && !deviceIdCheckedDuringUnlockPreflight) {
583
+ const isSameDeviceID = await checkLiveDeviceId(device, method.deviceId);
584
+ if (!isSameDeviceID) {
585
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
586
+ }
587
+ }
553
588
 
554
- /**
555
- * check additional supported feature
556
- */
557
- method.checkDeviceSupportFeature();
589
+ /**
590
+ * check firmware release info
591
+ */
592
+ method.checkFirmwareRelease();
558
593
 
559
- // reconfigure messages
560
- if (_deviceList && device.features && !device.isProtocolV2()) {
561
- await TransportManager.reconfigure(device.features);
562
- }
594
+ /**
595
+ * check additional supported feature
596
+ */
597
+ method.checkDeviceSupportFeature();
563
598
 
564
- // Check to see if it is safe to use Passphrase
565
- checkPassphraseEnableState(method, device.features);
599
+ // reconfigure messages
600
+ if (_deviceList && device.features && !device.isProtocolV2()) {
601
+ await TransportManager.reconfigure(device.features);
602
+ }
566
603
 
567
- if (shouldCheckPassphraseState(method, device)) {
568
- // check version
569
- const support = device.supportNewPassphrase();
570
- if (!support.support) {
571
- return Promise.reject(
572
- ERRORS.TypedError(
573
- HardwareErrorCode.DeviceNotSupportPassphrase,
574
- `Device not support passphrase, please update to ${support.require}`,
575
- {
576
- require: support.require,
604
+ // Check to see if it is safe to use Passphrase
605
+ checkPassphraseEnableState(method, device.features);
606
+
607
+ if (shouldCheckPassphraseState(method, device)) {
608
+ // check version
609
+ const support = device.supportNewPassphrase();
610
+ if (!support.support) {
611
+ throw ERRORS.TypedError(
612
+ HardwareErrorCode.DeviceNotSupportPassphrase,
613
+ `Device not support passphrase, please update to ${support.require}`,
614
+ {
615
+ require: support.require,
616
+ }
617
+ );
577
618
  }
578
- )
579
- );
580
- }
581
-
582
- // Check Device passphrase State
583
- const passphraseStateSafety = await device.checkPassphraseStateSafety(
584
- method.payload?.passphraseState,
585
- method.payload?.useEmptyPassphrase,
586
- method.payload?.skipPassphraseCheck
587
- );
588
619
 
589
- // Double check, handles the special case of Touch/Pro
590
- checkPassphraseEnableState(method, device.features);
620
+ // Check Device passphrase State after the Protocol V2 pre-unlock gate.
621
+ const passphraseStateSafety = await device.checkPassphraseStateSafety(
622
+ method.payload?.passphraseState,
623
+ method.payload?.useEmptyPassphrase,
624
+ method.payload?.skipPassphraseCheck,
625
+ hasDeriveCardano(method)
626
+ );
591
627
 
592
- if (!passphraseStateSafety) {
593
- DevicePool.clearDeviceCache(method.payload.connectId);
594
- return Promise.reject(
595
- ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
596
- );
597
- }
628
+ // Double check, handles the special case of Touch/Pro
629
+ checkPassphraseEnableState(method, device.features);
598
630
 
599
- // close pin popup window
600
- postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
601
- }
631
+ if (!passphraseStateSafety) {
632
+ DevicePool.clearDeviceCache(method.payload.connectId);
633
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
634
+ }
602
635
 
603
- // Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
604
- try {
605
- await method.checkSafetyLevelOnTestNet();
606
- } catch (e) {
607
- const error =
608
- e instanceof HardwareError
609
- ? e
610
- : ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
611
- // messageResponse = createResponseMessage(method.responseID, false, { error });
612
- // requestQueue.resolveRequest(method.responseID, messageResponse);
613
- // return;
614
- throw error;
615
- }
636
+ // Protocol V2 emits the PIN phase completion from DeviceSessionAskPin.
637
+ // Keep the legacy compatibility close for Protocol V1 only.
638
+ if (!device.isProtocolV2()) {
639
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
640
+ }
641
+ }
616
642
 
617
- method.device?.commands?.checkDisposed();
643
+ // Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
644
+ try {
645
+ await method.checkSafetyLevelOnTestNet();
646
+ } catch (e) {
647
+ throw e instanceof HardwareError
648
+ ? e
649
+ : ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
650
+ }
618
651
 
619
- try {
620
- const response: object = await runMethodWithUnlockRetry(method, device);
652
+ method.device?.commands?.checkDisposed();
653
+ },
654
+ });
621
655
  messageResponse = createResponseMessage(method.responseID, true, response);
622
656
  requestQueue.resolveRequest(method.responseID, messageResponse);
623
657
  completeMethodRequestContext(method);
624
658
  } catch (error) {
659
+ // Device.run may release the request before transport callbacks finish after a timeout.
660
+ // Ignore the stale callback because the caller already received the connection error.
661
+ if (!requestQueue.getTask(method.responseID)) {
662
+ Log.debug(`Call API - Ignore late inner method result`, error);
663
+ return;
664
+ }
625
665
  Log.debug(`Call API - Inner Method Run Error`, error);
626
666
  messageResponse = createResponseMessage(method.responseID, false, { error });
627
667
  requestQueue.resolveRequest(method.responseID, messageResponse);
@@ -634,6 +674,13 @@ const onCallDevice = async (
634
674
  ) {
635
675
  throw error;
636
676
  }
677
+ } finally {
678
+ if (isProtocolV2UiEnabled(method)) {
679
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
680
+ ensureOperationClose: protocolV2Operation,
681
+ protocolV2Operation,
682
+ });
683
+ }
637
684
  }
638
685
  };
639
686
  Log.debug('Call API - Device Run: ', device.mainId);
@@ -649,7 +696,9 @@ const onCallDevice = async (
649
696
  try {
650
697
  return await task.callPromise.promise;
651
698
  } catch (e) {
652
- Log.debug('Device Run Error: ', e);
699
+ if (!isExpectedCompatibilityError(e)) {
700
+ Log.debug('Device Run Error: ', e);
701
+ }
653
702
  completeMethodRequestContext(method, e);
654
703
  return createResponseMessage(method.responseID, false, { error: e });
655
704
  }
@@ -687,7 +736,17 @@ const onCallDevice = async (
687
736
 
688
737
  requestQueue.releaseTask(method.responseID);
689
738
 
690
- closePopup();
739
+ if (isProtocolV2UiEnabled(method)) {
740
+ if (!protocolV2CloseEmitted && protocolV2Operation) {
741
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
742
+ ensureOperationClose: true,
743
+ protocolV2Operation: true,
744
+ });
745
+ }
746
+ if (!protocolV2CloseEmitted) {
747
+ closePopup();
748
+ }
749
+ }
691
750
 
692
751
  cleanup();
693
752
 
@@ -849,8 +908,23 @@ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown)
849
908
  */
850
909
  async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
851
910
  try {
852
- await device.acquire(method.payload.connectProtocol);
911
+ if (method.payload.forceProtocolDetection && device.hasDeviceAcquire()) {
912
+ await device.release();
913
+ }
914
+ const shouldAcquire =
915
+ method.payload.forceProtocolDetection ||
916
+ !device.hasDeviceAcquire() ||
917
+ !device.commands ||
918
+ device.commands.disposed;
919
+ if (shouldAcquire) {
920
+ await device.acquire(method.payload.connectProtocol, {
921
+ forceProtocolDetection: method.payload.forceProtocolDetection,
922
+ });
923
+ }
853
924
  if (method.payload?.onlyConnectBleDevice) {
925
+ if (shouldAcquire) {
926
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
927
+ }
854
928
  return;
855
929
  }
856
930
  // Skip initialize if conditions are met
@@ -861,7 +935,25 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
861
935
  passphraseState: initOptions.passphraseState,
862
936
  });
863
937
  }
938
+ if (shouldAcquire) {
939
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
940
+ }
864
941
  } catch (err) {
942
+ // Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
943
+ // failures, so with keep-alive a wedged link would be reused by every retry
944
+ // (field case: Initialize timing out at 25s per attempt, forever). Drop it
945
+ // here so the next retry cold-connects.
946
+ if (
947
+ ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) &&
948
+ device.mainId &&
949
+ device.deviceConnector
950
+ ) {
951
+ await device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
952
+ // The connector only drops the link; `deviceAcquired` is reset by
953
+ // release()/markTransportDisconnected() alone. Leaving it set makes the
954
+ // next attempt skip acquire and initialize onto the link we just cut.
955
+ device.markTransportDisconnected();
956
+ }
865
957
  if (
866
958
  (err.errorCode === HardwareErrorCode.BleTimeoutError ||
867
959
  err.errorCode === HardwareErrorCode.BleConnectedError ||
@@ -1155,14 +1247,16 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
1155
1247
  };
1156
1248
 
1157
1249
  const cleanup = () => {
1250
+ const pendingUiPromises = _uiPromises;
1158
1251
  _uiPromises = [];
1159
- Log.debug('Cleanup...');
1252
+ rejectUiPromises(
1253
+ pendingUiPromises,
1254
+ ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
1255
+ );
1160
1256
  };
1161
1257
 
1162
1258
  const removeDeviceListener = (device: Device) => {
1163
1259
  device.removeAllListeners();
1164
- DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
1165
- // DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1166
1260
  };
1167
1261
 
1168
1262
  /**
@@ -1173,19 +1267,33 @@ const closePopup = () => {
1173
1267
  };
1174
1268
 
1175
1269
  const onDeviceConnectHandler = (device: Device) => {
1176
- const env = DataManager.getSettings('env');
1177
- const deviceObject = DataManager.isBleConnect(env) ? device : device.toMessageObject();
1178
- postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject as KnownDevice }));
1270
+ const deviceObject = device.toMessageObject();
1271
+ if (!deviceObject) return;
1272
+ postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
1179
1273
  };
1180
1274
 
1181
1275
  const onDeviceDisconnectHandler = (device: Device) => {
1182
1276
  device.clearPreInitialized();
1183
- const env = DataManager.getSettings('env');
1184
- const deviceObject = DataManager.isBleConnect(env) ? device : device.toMessageObject();
1185
- postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject as KnownDevice }));
1277
+ const deviceObject = device.toMessageObject();
1278
+ if (!deviceObject) return;
1279
+ postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
1280
+ };
1281
+
1282
+ const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
1283
+ const device =
1284
+ deviceCacheMap.get(event.connectId) ??
1285
+ DevicePool.devicesCache[event.connectId] ??
1286
+ DevicePool.getDeviceByPath(event.connectId);
1287
+ if (!device) {
1288
+ Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
1289
+ return;
1290
+ }
1291
+
1292
+ device.markTransportDisconnected();
1293
+ DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
1186
1294
  };
1187
1295
 
1188
- const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin']) => {
1296
+ const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
1189
1297
  Log.log('request Input PIN');
1190
1298
  // create ui promise
1191
1299
  const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
@@ -1194,12 +1302,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
1194
1302
  createUiMessage(UI_REQUEST.REQUEST_PIN, {
1195
1303
  device: device.toMessageObject() as unknown as KnownDevice,
1196
1304
  type,
1305
+ responseCorrelation: uiPromise.responseCorrelation,
1197
1306
  })
1198
1307
  );
1199
- // wait for pin
1200
- const uiResp = await uiPromise.promise;
1201
- // callback.apply(null, [null, pin]);
1202
- callback(null, uiResp.payload);
1308
+ consumeUiPromise(
1309
+ uiPromise.promise,
1310
+ uiResp => callback(null, uiResp.payload),
1311
+ error => callback(error, '')
1312
+ );
1203
1313
  };
1204
1314
 
1205
1315
  export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
@@ -1223,7 +1333,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
1223
1333
  postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
1224
1334
  };
1225
1335
 
1226
- const onDevicePassphraseHandler = async (
1336
+ const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
1337
+ postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
1338
+ };
1339
+
1340
+ const onDevicePassphraseHandler = (
1227
1341
  ...[device, requestPayload, callback]: DeviceEvents['passphrase']
1228
1342
  ) => {
1229
1343
  Log.debug('onDevicePassphraseHandler');
@@ -1233,18 +1347,27 @@ const onDevicePassphraseHandler = async (
1233
1347
  device: device.toMessageObject() as KnownDevice,
1234
1348
  passphraseState: device.passphraseState,
1235
1349
  existsAttachPinUser: requestPayload.existsAttachPinUser,
1350
+ deviceOnly: requestPayload.deviceOnly,
1351
+ source: requestPayload.source,
1352
+ reason: requestPayload.reason,
1353
+ expectedPassphraseState: requestPayload.expectedPassphraseState,
1354
+ ...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
1355
+ responseCorrelation: uiPromise.responseCorrelation,
1236
1356
  })
1237
1357
  );
1238
- // wait for passphrase
1239
- const uiResp = await uiPromise.promise;
1240
- const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
1241
- // send as PassphrasePromptResponse
1242
- callback({
1243
- passphrase: value.normalize('NFKD'),
1244
- passphraseOnDevice,
1245
- attachPinOnDevice,
1246
- cache: save,
1247
- });
1358
+ consumeUiPromise(
1359
+ uiPromise.promise,
1360
+ uiResp => {
1361
+ const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
1362
+ callback({
1363
+ passphrase: value.normalize('NFKD'),
1364
+ passphraseOnDevice,
1365
+ attachPinOnDevice,
1366
+ cache: save,
1367
+ });
1368
+ },
1369
+ error => callback({}, error)
1370
+ );
1248
1371
  };
1249
1372
 
1250
1373
  const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
@@ -1254,17 +1377,62 @@ const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']
1254
1377
  };
1255
1378
 
1256
1379
  const onEnterPassphraseOnDeviceHandler = (
1257
- ...[device]: [...DeviceEvents['passphrase_on_device']]
1380
+ ...[device, requestPayload]: [...DeviceEvents['passphrase_on_device']]
1258
1381
  ) => {
1259
1382
  postMessage(
1260
1383
  createUiMessage(UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE, {
1261
1384
  device: device.toMessageObject() as KnownDevice,
1262
1385
  passphraseState: device.passphraseState,
1386
+ source: requestPayload?.source,
1387
+ reason: requestPayload?.reason,
1388
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1389
+ })
1390
+ );
1391
+ };
1392
+
1393
+ const onEnterAttachPinOnDeviceHandler = (
1394
+ ...[device, requestPayload]: [...DeviceEvents['attach_pin_on_device']]
1395
+ ) => {
1396
+ postMessage(
1397
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1398
+ device: device.toMessageObject() as KnownDevice,
1399
+ type: 'ButtonRequest_AttachPin',
1400
+ source: requestPayload?.source,
1401
+ reason: requestPayload?.reason,
1402
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1403
+ })
1404
+ );
1405
+ };
1406
+
1407
+ const onEnterPinOnDeviceHandler = (
1408
+ ...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
1409
+ ) => {
1410
+ postMessage(
1411
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1412
+ device: device.toMessageObject() as KnownDevice,
1413
+ type:
1414
+ pinType === DeviceSessionPinType.AttachToPin
1415
+ ? 'ButtonRequest_AttachPin'
1416
+ : 'ButtonRequest_PinEntry',
1417
+ source: metadata?.source,
1418
+ reason: metadata?.reason,
1419
+ deviceOnly: metadata?.deviceOnly ?? true,
1420
+ completion: metadata?.completion,
1421
+ method: metadata?.method,
1422
+ page: metadata?.page,
1423
+ operation: metadata?.operation,
1424
+ ...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
1263
1425
  })
1264
1426
  );
1265
1427
  };
1266
1428
 
1267
- const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1429
+ const onPinOnDeviceCompleteHandler = (
1430
+ ...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
1431
+ ) => {
1432
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
1433
+ };
1434
+
1435
+ const onSelectDeviceInBootloaderForWebDeviceHandler = (
1268
1436
  ...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
1269
1437
  ) => {
1270
1438
  Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
@@ -1274,11 +1442,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1274
1442
  device: device.toMessageObject() as KnownDevice,
1275
1443
  })
1276
1444
  );
1277
- const uiResp = await uiPromise.promise;
1278
- callback(null, uiResp.payload.deviceId);
1445
+ consumeUiPromise(
1446
+ uiPromise.promise,
1447
+ uiResp => callback(null, uiResp.payload.deviceId),
1448
+ error => callback(error, '')
1449
+ );
1279
1450
  };
1280
1451
 
1281
- const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1452
+ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
1282
1453
  ...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
1283
1454
  ) => {
1284
1455
  Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
@@ -1291,8 +1462,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1291
1462
  device: device.toMessageObject() as KnownDevice,
1292
1463
  })
1293
1464
  );
1294
- const uiResp = await uiPromise.promise;
1295
- callback(null, uiResp.payload.deviceId);
1465
+ consumeUiPromise(
1466
+ uiPromise.promise,
1467
+ uiResp => callback(null, uiResp.payload.deviceId),
1468
+ error => callback(error, '')
1469
+ );
1296
1470
  };
1297
1471
 
1298
1472
  /**
@@ -1311,14 +1485,21 @@ const postMessage = (message: CoreMessage) => {
1311
1485
 
1312
1486
  const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
1313
1487
  const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
1488
+ if (
1489
+ device &&
1490
+ (promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
1491
+ ) {
1492
+ const publicDeviceId = device.toMessageObject()?.deviceId;
1493
+ uiPromise.responseCorrelation = {
1494
+ interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
1495
+ deviceId: publicDeviceId || device.instanceId,
1496
+ };
1497
+ }
1314
1498
  _uiPromises.push(uiPromise as any);
1315
1499
 
1316
1500
  return uiPromise;
1317
1501
  };
1318
1502
 
1319
- const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
1320
- _uiPromises.find(p => p.id === promiseEvent);
1321
-
1322
1503
  const removeUiPromise = (promise: Deferred<any>) => {
1323
1504
  _uiPromises = _uiPromises.filter(p => p !== promise);
1324
1505
  };
@@ -1330,6 +1511,8 @@ export default class Core extends EventEmitter {
1330
1511
 
1331
1512
  private requestQueue = new RequestQueue();
1332
1513
 
1514
+ private disposePromise?: Promise<void>;
1515
+
1333
1516
  // background task
1334
1517
  private prePendingCallPromise: Promise<void> | undefined;
1335
1518
 
@@ -1342,10 +1525,6 @@ export default class Core extends EventEmitter {
1342
1525
  Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`);
1343
1526
  }
1344
1527
 
1345
- cancelOperation(operationId: string) {
1346
- this.requestQueue.abortOperation(operationId);
1347
- }
1348
-
1349
1528
  private getCoreContext() {
1350
1529
  return {
1351
1530
  sdkInstanceId: this.sdkInstanceId,
@@ -1372,11 +1551,16 @@ export default class Core extends EventEmitter {
1372
1551
  case UI_RESPONSE.RECEIVE_PASSPHRASE:
1373
1552
  case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
1374
1553
  case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
1375
- const uiPromise = findUiPromise(message.type);
1554
+ const uiPromise = findUiPromiseForResponse(_uiPromises, message);
1376
1555
  if (uiPromise) {
1377
1556
  Log.log('receive UI Response: ', message.type);
1378
1557
  uiPromise.resolve(message);
1379
1558
  removeUiPromise(uiPromise);
1559
+ } else if (
1560
+ message.type === UI_RESPONSE.RECEIVE_PIN ||
1561
+ message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
1562
+ ) {
1563
+ Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
1380
1564
  }
1381
1565
  break;
1382
1566
  }
@@ -1392,10 +1576,17 @@ export default class Core extends EventEmitter {
1392
1576
  }
1393
1577
 
1394
1578
  case IFRAME.CALL: {
1395
- Log.log(`[${Date.now()}][CALL_API]`, message);
1579
+ const logBlockLabel = getLogBlockLabel(message);
1580
+ Log.log(
1581
+ formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
1582
+ getSafeLogPayload(message, logBlockLabel)
1583
+ );
1396
1584
  const response = await callAPI(this.getCoreContext(), message);
1397
1585
  const { success, payload } = response;
1398
- Log.log(`[${Date.now()}][CALL_API_RESPONSE]`, response);
1586
+ Log.log(
1587
+ formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
1588
+ getSafeLogPayload(response, logBlockLabel)
1589
+ );
1399
1590
  if (success) {
1400
1591
  return response;
1401
1592
  }
@@ -1414,10 +1605,6 @@ export default class Core extends EventEmitter {
1414
1605
  cancel(this.getCoreContext(), message.payload.connectId);
1415
1606
  break;
1416
1607
  }
1417
- case IFRAME.CANCEL_OPERATION: {
1418
- this.cancelOperation(message.payload.operationId);
1419
- break;
1420
- }
1421
1608
  case IFRAME.CALLBACK: {
1422
1609
  Log.log('callback message: ', message);
1423
1610
  postMessage(message);
@@ -1429,25 +1616,65 @@ export default class Core extends EventEmitter {
1429
1616
  return Promise.resolve(message);
1430
1617
  }
1431
1618
 
1432
- dispose() {
1619
+ dispose(): Promise<void> {
1620
+ if (!this.disposePromise) {
1621
+ this.disposePromise = this.disposeResources();
1622
+ }
1623
+ return this.disposePromise;
1624
+ }
1625
+
1626
+ private async disposeResources(): Promise<void> {
1627
+ Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1628
+ pollingManager.stopAll();
1629
+ this.requestQueue.abortAllRequests();
1630
+ cleanup();
1631
+
1632
+ _connector?.stop();
1633
+ let transportCleanup: Promise<void>;
1634
+ try {
1635
+ transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
1636
+ Log.warn('[Core] Transport cleanup failed:', error);
1637
+ });
1638
+ } catch (error) {
1639
+ Log.warn('[Core] Transport cleanup failed:', error);
1640
+ transportCleanup = Promise.resolve();
1641
+ }
1642
+
1643
+ // Preserve synchronous dispose semantics for in-memory state and listeners.
1433
1644
  _deviceList = undefined;
1434
1645
  _connector = undefined;
1646
+ DevicePool.dispose();
1435
1647
  deviceCacheMap.clear();
1436
1648
  preWarmInflight.clear();
1437
1649
  preWarmDoneAt.clear();
1438
- Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1650
+ preConnectCache = { passphraseState: undefined };
1651
+ this.prePendingCallPromise = undefined;
1652
+ this.removeAllListeners();
1439
1653
  cleanupSdkInstance(this.sdkInstanceId);
1654
+ if (_core === this) _core = undefined;
1655
+
1656
+ // Transports, especially Node USB, may release native handles asynchronously.
1657
+ await transportCleanup;
1440
1658
  }
1441
1659
  }
1442
1660
 
1443
1661
  export const initCore = () => {
1444
- _core = new Core();
1445
- return _core;
1662
+ const core = new Core();
1663
+ _core = core;
1664
+ return core;
1446
1665
  };
1447
1666
 
1448
1667
  export const initConnector = () => {
1449
1668
  _connector = new DeviceConnector();
1669
+ DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
1670
+ DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1671
+ DevicePool.emitter.removeListener(
1672
+ TRANSPORT_EVENT.DEVICE_DISCONNECT,
1673
+ onTransportDeviceDisconnectHandler
1674
+ );
1675
+ DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
1450
1676
  DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1677
+ DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
1451
1678
  return _connector;
1452
1679
  };
1453
1680
 
@@ -1461,12 +1688,8 @@ export const init = async (
1461
1688
  plugin?: LowlevelTransportSharedPlugin
1462
1689
  ) => {
1463
1690
  try {
1464
- try {
1465
- await DataManager.load(settings);
1466
- initTransport(Transport, plugin);
1467
- } catch {
1468
- Log.error('DataManager.load error');
1469
- }
1691
+ await DataManager.load(settings);
1692
+ initTransport(Transport, plugin);
1470
1693
  enableLog(DataManager.getSettings('debug'));
1471
1694
  if (DataManager.getSettings('env') !== 'react-native') {
1472
1695
  setLoggerPostMessage(postMessage);
@@ -1477,6 +1700,7 @@ export const init = async (
1477
1700
  return _core;
1478
1701
  } catch (error) {
1479
1702
  Log.error('core init', error);
1703
+ throw error;
1480
1704
  }
1481
1705
  };
1482
1706