@onekeyfe/hd-core 1.2.0-alpha.1 → 1.2.0-alpha.100

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 (833) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +390 -0
  2. package/__tests__/DeviceCommands.test.ts +563 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +49 -0
  4. package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
  5. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +830 -0
  6. package/__tests__/check-firmware-release-protocol-v2.test.ts +270 -0
  7. package/__tests__/connectSettings.test.ts +59 -0
  8. package/__tests__/core-dispose.test.ts +34 -0
  9. package/__tests__/core-error-output.test.ts +39 -0
  10. package/__tests__/core-initialization.test.ts +23 -0
  11. package/__tests__/device-connector-protocol.test.ts +81 -0
  12. package/__tests__/device-features-state.test.ts +78 -0
  13. package/__tests__/device-identity.test.ts +52 -0
  14. package/__tests__/device-initialize-timeout.test.ts +56 -0
  15. package/__tests__/device-lifecycle-events.test.ts +351 -0
  16. package/__tests__/device-pool-state.test.ts +166 -0
  17. package/__tests__/device-settings.test.ts +437 -0
  18. package/__tests__/device-state-contract.test.ts +28 -0
  19. package/__tests__/device-state-events.test.ts +286 -0
  20. package/__tests__/device-state-mapper.test.ts +288 -0
  21. package/__tests__/device-state-projector.test.ts +114 -0
  22. package/__tests__/device-state-store.test.ts +109 -0
  23. package/__tests__/device-utils.test.ts +154 -0
  24. package/__tests__/device-wallet-session-store.test.ts +478 -0
  25. package/__tests__/deviceFeaturesUtils.test.ts +39 -0
  26. package/__tests__/devicePoolBootloaderPath.test.ts +64 -0
  27. package/__tests__/deviceSettings.test.ts +113 -0
  28. package/__tests__/deviceUploadNft.test.ts +316 -0
  29. package/__tests__/evmLedgerLegacySafety.test.ts +12 -6
  30. package/__tests__/evmSignTransaction.test.ts +69 -0
  31. package/__tests__/evmSignTypedData.test.ts +80 -0
  32. package/__tests__/filesystemValidation.test.ts +53 -0
  33. package/__tests__/firmware-memory-host.test.ts +126 -0
  34. package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
  35. package/__tests__/firmware-update/device-update-bootloader.test.ts +109 -0
  36. package/__tests__/firmware-update/firmware-artifact-source.test.ts +171 -0
  37. package/__tests__/firmware-update/firmware-host-binding.test.ts +79 -0
  38. package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
  39. package/__tests__/firmware-update/firmware-prepared-host-digest.test.ts +583 -0
  40. package/__tests__/firmware-update/firmware-prepared-resource-archive.test.ts +150 -0
  41. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +375 -0
  42. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  43. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +474 -0
  44. package/__tests__/firmware-update/firmware-update-plan.test.ts +815 -0
  45. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +283 -0
  46. package/__tests__/firmware-update/firmware-update-prepared-resource-executors.test.ts +326 -0
  47. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +457 -0
  48. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +121 -0
  49. package/__tests__/firmware-update/firmware-update-v4-parameters.test.ts +85 -0
  50. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  51. package/__tests__/get-device-state.test.ts +578 -0
  52. package/__tests__/homescreen.test.ts +81 -0
  53. package/__tests__/kaspa-public-types.type-test.ts +16 -0
  54. package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
  55. package/__tests__/kaspaSignTransaction.test.ts +578 -0
  56. package/__tests__/known-device-public-types.type-test.ts +3 -0
  57. package/__tests__/logBlockEvent.test.ts +128 -1
  58. package/__tests__/method-protocol-support.test.ts +144 -0
  59. package/__tests__/networkUtils.test.ts +406 -0
  60. package/__tests__/open-wallet-session-error-response.test.ts +43 -0
  61. package/__tests__/open-wallet-session.test.ts +1899 -0
  62. package/__tests__/preInitialize.test.ts +33 -0
  63. package/__tests__/pro2Nft.test.ts +108 -0
  64. package/__tests__/pro2Wallpaper.test.ts +39 -0
  65. package/__tests__/protocol-binding.test.ts +89 -0
  66. package/__tests__/protocol-v2-bootloader-mode.test.ts +37 -0
  67. package/__tests__/protocol-v2-firmware-targets.test.ts +124 -0
  68. package/__tests__/protocol-v2-ping.test.ts +28 -0
  69. package/__tests__/protocol-v2-resources.test.ts +270 -0
  70. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  71. package/__tests__/protocol-v2-unlock-policy.test.ts +308 -0
  72. package/__tests__/protocol-v2.test.ts +8346 -1866
  73. package/__tests__/protocolV2FileWrite.test.ts +285 -0
  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 +101 -0
  78. package/__tests__/request-context-logging.test.ts +16 -0
  79. package/__tests__/search-devices.test.ts +145 -0
  80. package/__tests__/tron-sign-message-init.test.ts +74 -0
  81. package/__tests__/uiProgressThrottle.test.ts +74 -0
  82. package/__tests__/uiPromiseRegistry.test.ts +115 -0
  83. package/dist/api/BaseMethod.d.ts +16 -1
  84. package/dist/api/BaseMethod.d.ts.map +1 -1
  85. package/dist/api/CheckAllFirmwareRelease.d.ts +25 -1
  86. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  87. package/dist/api/CheckBLEFirmwareRelease.d.ts +3 -2
  88. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
  89. package/dist/api/CheckBootloaderRelease.d.ts +2 -1
  90. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  91. package/dist/api/CheckFirmwareRelease.d.ts +3 -2
  92. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  93. package/dist/api/CipherKeyValue.d.ts +1 -0
  94. package/dist/api/CipherKeyValue.d.ts.map +1 -1
  95. package/dist/api/ClearSessionCache.d.ts +9 -0
  96. package/dist/api/ClearSessionCache.d.ts.map +1 -0
  97. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  98. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  99. package/dist/api/DirList.d.ts +1 -0
  100. package/dist/api/DirList.d.ts.map +1 -1
  101. package/dist/api/DirMake.d.ts +1 -0
  102. package/dist/api/DirMake.d.ts.map +1 -1
  103. package/dist/api/DirRemove.d.ts +1 -0
  104. package/dist/api/DirRemove.d.ts.map +1 -1
  105. package/dist/api/FileDelete.d.ts +1 -0
  106. package/dist/api/FileDelete.d.ts.map +1 -1
  107. package/dist/api/FileRead.d.ts +1 -0
  108. package/dist/api/FileRead.d.ts.map +1 -1
  109. package/dist/api/FileWrite.d.ts +2 -0
  110. package/dist/api/FileWrite.d.ts.map +1 -1
  111. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  112. package/dist/api/FirmwareUpdateV2.d.ts +13 -2
  113. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  114. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  115. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  116. package/dist/api/FirmwareUpdateV4.d.ts +63 -6
  117. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  118. package/dist/api/GetDeviceState.d.ts +8 -0
  119. package/dist/api/GetDeviceState.d.ts.map +1 -0
  120. package/dist/api/GetFeatures.d.ts +1 -1
  121. package/dist/api/GetFeatures.d.ts.map +1 -1
  122. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  123. package/dist/api/GetPassphraseState.d.ts +2 -6
  124. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  125. package/dist/api/OpenWalletSession.d.ts +8 -0
  126. package/dist/api/OpenWalletSession.d.ts.map +1 -0
  127. package/dist/api/PathInfo.d.ts +1 -0
  128. package/dist/api/PathInfo.d.ts.map +1 -1
  129. package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
  130. package/dist/api/SearchDevices.d.ts +3 -0
  131. package/dist/api/SearchDevices.d.ts.map +1 -1
  132. package/dist/api/UploadPortfolio.d.ts +17 -0
  133. package/dist/api/UploadPortfolio.d.ts.map +1 -0
  134. package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
  135. package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
  136. package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
  137. package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
  138. package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
  139. package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
  140. package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
  141. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
  142. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  143. package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
  144. package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
  145. package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
  146. package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
  147. package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
  148. package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
  149. package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
  150. package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
  151. package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
  152. package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
  153. package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
  154. package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
  155. package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
  156. package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
  157. package/dist/api/btc/BTCGetAddress.d.ts +1 -0
  158. package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
  159. package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
  160. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  161. package/dist/api/btc/BTCSignMessage.d.ts +1 -0
  162. package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
  163. package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
  164. package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
  165. package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
  166. package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
  167. package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
  168. package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
  169. package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
  170. package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
  171. package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
  172. package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
  173. package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
  174. package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
  175. package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
  176. package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
  177. package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
  178. package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
  179. package/dist/api/conflux/ConfluxGetAddress.d.ts +2 -0
  180. package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
  181. package/dist/api/conflux/ConfluxSignMessage.d.ts +2 -0
  182. package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
  183. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +2 -0
  184. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
  185. package/dist/api/conflux/ConfluxSignTransaction.d.ts +2 -0
  186. package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
  187. package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
  188. package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
  189. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
  190. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  191. package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
  192. package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
  193. package/dist/api/device/DeviceCancel.d.ts +1 -0
  194. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  195. package/dist/api/device/DeviceChangePin.d.ts +1 -0
  196. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  197. package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
  198. package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
  199. package/dist/api/device/DeviceLock.d.ts +1 -0
  200. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  201. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
  202. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  203. package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
  204. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  205. package/dist/api/device/DeviceSettings.d.ts +1 -0
  206. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  207. package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
  208. package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
  209. package/dist/api/device/DeviceUnlock.d.ts +3 -2
  210. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  211. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  212. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  213. package/dist/api/device/DeviceWipe.d.ts +1 -0
  214. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  215. package/dist/api/device/PreInitialize.d.ts +1 -0
  216. package/dist/api/device/PreInitialize.d.ts.map +1 -1
  217. package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
  218. package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
  219. package/dist/api/evm/EVMGetAddress.d.ts +1 -0
  220. package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
  221. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  222. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  223. package/dist/api/evm/EVMSignMessage.d.ts +1 -0
  224. package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
  225. package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
  226. package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
  227. package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
  228. package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
  229. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  230. package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
  231. package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
  232. package/dist/api/evm/protocol.d.ts +3 -0
  233. package/dist/api/evm/protocol.d.ts.map +1 -0
  234. package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
  235. package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
  236. package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
  237. package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
  238. package/dist/api/firmware/FirmwareArtifactSource.d.ts +29 -0
  239. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  240. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  241. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  242. package/dist/api/firmware/FirmwareMemoryHost.d.ts +22 -0
  243. package/dist/api/firmware/FirmwareMemoryHost.d.ts.map +1 -0
  244. package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
  245. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
  246. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts +11 -0
  247. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts.map +1 -0
  248. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +12 -2
  249. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  250. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  251. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  252. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +72 -0
  253. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  254. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +38 -0
  255. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  256. package/dist/api/firmware/getBinary.d.ts +17 -3
  257. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  258. package/dist/api/firmware/protocolV2Release.d.ts +33 -0
  259. package/dist/api/firmware/protocolV2Release.d.ts.map +1 -0
  260. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  261. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  262. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  263. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  264. package/dist/api/helpers/filesystemValidation.d.ts +3 -0
  265. package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
  266. package/dist/api/helpers/paramsValidator.d.ts +1 -0
  267. package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
  268. package/dist/api/helpers/protocolV2FileWrite.d.ts +43 -0
  269. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -0
  270. package/dist/api/index.d.ts +8 -29
  271. package/dist/api/index.d.ts.map +1 -1
  272. package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
  273. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
  274. package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -1
  275. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  276. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  277. package/dist/api/lightning/LnurlAuth.d.ts +0 -4
  278. package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
  279. package/dist/api/near/NearGetAddress.d.ts +1 -0
  280. package/dist/api/near/NearGetAddress.d.ts.map +1 -1
  281. package/dist/api/near/NearSignTransaction.d.ts +1 -0
  282. package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
  283. package/dist/api/nem/NEMGetAddress.d.ts +1 -0
  284. package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
  285. package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
  286. package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
  287. package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
  288. package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
  289. package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
  290. package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
  291. package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
  292. package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
  293. package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
  294. package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
  295. package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
  296. package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
  297. package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
  298. package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
  299. package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
  300. package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
  301. package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
  302. package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
  303. package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
  304. package/dist/api/polkadot/PolkadotGetAddress.d.ts +2 -1
  305. package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
  306. package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
  307. package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
  308. package/dist/api/polkadot/networks.d.ts +1 -1
  309. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +7 -0
  310. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -0
  311. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +8 -0
  312. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -0
  313. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +2 -1
  314. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  315. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +4 -2
  316. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  317. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +1 -0
  318. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
  319. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +29 -0
  320. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -0
  321. package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
  322. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  323. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +7 -0
  324. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -0
  325. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +31 -0
  326. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  327. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +27 -0
  328. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -0
  329. package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
  330. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  331. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +7 -0
  332. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
  333. package/dist/api/protocol-v2/Ping.d.ts +3 -0
  334. package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
  335. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +7 -0
  336. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -0
  337. package/dist/api/protocol-v2/helpers.d.ts +27 -18
  338. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  339. package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
  340. package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
  341. package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
  342. package/dist/api/solana/SolGetAddress.d.ts +1 -0
  343. package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
  344. package/dist/api/solana/SolSignMessage.d.ts +2 -1
  345. package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
  346. package/dist/api/solana/SolSignOffchainMessage.d.ts +2 -1
  347. package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
  348. package/dist/api/solana/SolSignTransaction.d.ts +3 -2
  349. package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
  350. package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
  351. package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
  352. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
  353. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
  354. package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
  355. package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
  356. package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
  357. package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
  358. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
  359. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
  360. package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
  361. package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
  362. package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
  363. package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
  364. package/dist/api/sui/SuiGetAddress.d.ts +2 -1
  365. package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
  366. package/dist/api/sui/SuiGetPublicKey.d.ts +2 -1
  367. package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
  368. package/dist/api/sui/SuiSignMessage.d.ts +2 -1
  369. package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
  370. package/dist/api/sui/SuiSignTransaction.d.ts +2 -1
  371. package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
  372. package/dist/api/ton/TonGetAddress.d.ts +2 -1
  373. package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
  374. package/dist/api/ton/TonSignData.d.ts +2 -5
  375. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  376. package/dist/api/ton/TonSignMessage.d.ts +2 -1
  377. package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
  378. package/dist/api/ton/TonSignProof.d.ts +2 -1
  379. package/dist/api/ton/TonSignProof.d.ts.map +1 -1
  380. package/dist/api/tron/TronGetAddress.d.ts +1 -0
  381. package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
  382. package/dist/api/tron/TronSignMessage.d.ts +6 -2
  383. package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
  384. package/dist/api/tron/TronSignTransaction.d.ts +2 -2
  385. package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
  386. package/dist/api/utils.d.ts +4 -1
  387. package/dist/api/utils.d.ts.map +1 -1
  388. package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
  389. package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
  390. package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
  391. package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
  392. package/dist/constants/index.d.ts +1 -1
  393. package/dist/constants/index.d.ts.map +1 -1
  394. package/dist/core/RequestQueue.d.ts.map +1 -1
  395. package/dist/core/deviceEventRegistration.d.ts +13 -0
  396. package/dist/core/deviceEventRegistration.d.ts.map +1 -0
  397. package/dist/core/index.d.ts +3 -1
  398. package/dist/core/index.d.ts.map +1 -1
  399. package/dist/core/uiPromiseRegistry.d.ts +6 -0
  400. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  401. package/dist/data-manager/DataManager.d.ts +12 -4
  402. package/dist/data-manager/DataManager.d.ts.map +1 -1
  403. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  404. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  405. package/dist/device/Device.d.ts +75 -17
  406. package/dist/device/Device.d.ts.map +1 -1
  407. package/dist/device/DeviceCommands.d.ts +8 -6
  408. package/dist/device/DeviceCommands.d.ts.map +1 -1
  409. package/dist/device/DeviceConnector.d.ts +4 -3
  410. package/dist/device/DeviceConnector.d.ts.map +1 -1
  411. package/dist/device/DeviceFeaturesState.d.ts +3 -0
  412. package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
  413. package/dist/device/DevicePool.d.ts +6 -2
  414. package/dist/device/DevicePool.d.ts.map +1 -1
  415. package/dist/device/DeviceStateMapper.d.ts +13 -0
  416. package/dist/device/DeviceStateMapper.d.ts.map +1 -0
  417. package/dist/device/DeviceStateProjector.d.ts +7 -0
  418. package/dist/device/DeviceStateProjector.d.ts.map +1 -0
  419. package/dist/device/DeviceStateStore.d.ts +21 -0
  420. package/dist/device/DeviceStateStore.d.ts.map +1 -0
  421. package/dist/device/DeviceWalletSessionStore.d.ts +27 -0
  422. package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -0
  423. package/dist/device/cloneDeviceState.d.ts +2 -0
  424. package/dist/device/cloneDeviceState.d.ts.map +1 -0
  425. package/dist/device/deviceIdentity.d.ts +5 -0
  426. package/dist/device/deviceIdentity.d.ts.map +1 -0
  427. package/dist/deviceProfile/buildDeviceFeatures.d.ts +9 -3
  428. package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
  429. package/dist/deviceProfile/index.d.ts +0 -1
  430. package/dist/deviceProfile/index.d.ts.map +1 -1
  431. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts +7 -0
  432. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -0
  433. package/dist/events/device.d.ts +16 -2
  434. package/dist/events/device.d.ts.map +1 -1
  435. package/dist/events/logBlockEvent.d.ts +2 -0
  436. package/dist/events/logBlockEvent.d.ts.map +1 -1
  437. package/dist/events/ui-promise.d.ts +4 -2
  438. package/dist/events/ui-promise.d.ts.map +1 -1
  439. package/dist/events/ui-request.d.ts +50 -4
  440. package/dist/events/ui-request.d.ts.map +1 -1
  441. package/dist/events/ui-response.d.ts +10 -2
  442. package/dist/events/ui-response.d.ts.map +1 -1
  443. package/dist/index.d.ts +1792 -750
  444. package/dist/index.d.ts.map +1 -1
  445. package/dist/index.js +12615 -4679
  446. package/dist/inject.d.ts +6 -1
  447. package/dist/inject.d.ts.map +1 -1
  448. package/dist/lowLevelInject.d.ts.map +1 -1
  449. package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
  450. package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
  451. package/dist/protocols/protocol-v2/features.d.ts +30 -28
  452. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  453. package/dist/protocols/protocol-v2/firmware.d.ts +11 -9
  454. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  455. package/dist/protocols/protocol-v2/index.d.ts +3 -2
  456. package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
  457. package/dist/protocols/protocol-v2/resources.d.ts +12 -0
  458. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  459. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +17 -0
  460. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
  461. package/dist/protocols/protocol-v2/uiInteraction.d.ts +42 -0
  462. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
  463. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +2 -0
  464. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
  465. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  466. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  467. package/dist/protocols/protocol-v2/walletSession.d.ts +27 -0
  468. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -0
  469. package/dist/topLevelInject.d.ts.map +1 -1
  470. package/dist/types/api/checkAllFirmwareRelease.d.ts +48 -9
  471. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  472. package/dist/types/api/checkBLEFirmwareRelease.d.ts +2 -13
  473. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
  474. package/dist/types/api/checkBootloaderRelease.d.ts +2 -6
  475. package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
  476. package/dist/types/api/checkFirmwareRelease.d.ts +2 -13
  477. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
  478. package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
  479. package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
  480. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  481. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  482. package/dist/types/api/deviceSettings.d.ts +11 -2
  483. package/dist/types/api/deviceSettings.d.ts.map +1 -1
  484. package/dist/types/api/deviceUnlock.d.ts +6 -2
  485. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  486. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  487. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  488. package/dist/types/api/export.d.ts +8 -3
  489. package/dist/types/api/export.d.ts.map +1 -1
  490. package/dist/types/api/firmwareUpdate.d.ts +68 -6
  491. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  492. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  493. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  494. package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
  495. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  496. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  497. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  498. package/dist/types/api/getDeviceState.d.ts +12 -0
  499. package/dist/types/api/getDeviceState.d.ts.map +1 -0
  500. package/dist/types/api/getFeatures.d.ts.map +1 -1
  501. package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
  502. package/dist/types/api/getPassphraseState.d.ts +2 -10
  503. package/dist/types/api/getPassphraseState.d.ts.map +1 -1
  504. package/dist/types/api/index.d.ts +31 -35
  505. package/dist/types/api/index.d.ts.map +1 -1
  506. package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
  507. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  508. package/dist/types/api/openWalletSession.d.ts +35 -0
  509. package/dist/types/api/openWalletSession.d.ts.map +1 -0
  510. package/dist/types/api/protocolV2.d.ts +17 -88
  511. package/dist/types/api/protocolV2.d.ts.map +1 -1
  512. package/dist/types/api/sessionCache.d.ts +13 -0
  513. package/dist/types/api/sessionCache.d.ts.map +1 -0
  514. package/dist/types/device.d.ts +143 -10
  515. package/dist/types/device.d.ts.map +1 -1
  516. package/dist/types/params.d.ts +2 -0
  517. package/dist/types/params.d.ts.map +1 -1
  518. package/dist/types/settings.d.ts +71 -9
  519. package/dist/types/settings.d.ts.map +1 -1
  520. package/dist/utils/assets.d.ts +2 -1
  521. package/dist/utils/assets.d.ts.map +1 -1
  522. package/dist/utils/deviceFeaturesCompat.d.ts +14 -0
  523. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
  524. package/dist/utils/deviceFeaturesUtils.d.ts +12 -3
  525. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  526. package/dist/utils/deviceInfoUtils.d.ts +9 -9
  527. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  528. package/dist/utils/deviceSettings.d.ts +38 -7
  529. package/dist/utils/deviceSettings.d.ts.map +1 -1
  530. package/dist/utils/deviceVersionUtils.d.ts +7 -5
  531. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  532. package/dist/utils/homescreen.d.ts +4 -0
  533. package/dist/utils/homescreen.d.ts.map +1 -1
  534. package/dist/utils/index.d.ts +6 -3
  535. package/dist/utils/index.d.ts.map +1 -1
  536. package/dist/utils/networkUtils.d.ts +10 -1
  537. package/dist/utils/networkUtils.d.ts.map +1 -1
  538. package/dist/utils/patch.d.ts +1 -1
  539. package/dist/utils/patch.d.ts.map +1 -1
  540. package/dist/utils/pro2Nft.d.ts +31 -0
  541. package/dist/utils/pro2Nft.d.ts.map +1 -0
  542. package/dist/utils/pro2Wallpaper.d.ts +22 -0
  543. package/dist/utils/pro2Wallpaper.d.ts.map +1 -0
  544. package/dist/utils/tracing.d.ts.map +1 -1
  545. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  546. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  547. package/package.json +4 -4
  548. package/src/api/BaseMethod.ts +53 -20
  549. package/src/api/CheckAllFirmwareRelease.ts +442 -4
  550. package/src/api/CheckBLEFirmwareRelease.ts +37 -5
  551. package/src/api/CheckBootloaderRelease.ts +37 -5
  552. package/src/api/CheckFirmwareRelease.ts +36 -9
  553. package/src/api/CipherKeyValue.ts +4 -0
  554. package/src/api/ClearSessionCache.ts +32 -0
  555. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  556. package/src/api/DirList.ts +9 -4
  557. package/src/api/DirMake.ts +7 -4
  558. package/src/api/DirRemove.ts +7 -4
  559. package/src/api/FileDelete.ts +7 -4
  560. package/src/api/FileRead.ts +27 -8
  561. package/src/api/FileWrite.ts +26 -168
  562. package/src/api/FirmwareUpdate.ts +30 -15
  563. package/src/api/FirmwareUpdateV2.ts +532 -169
  564. package/src/api/FirmwareUpdateV3.ts +320 -72
  565. package/src/api/FirmwareUpdateV4.ts +2691 -428
  566. package/src/api/GetDeviceState.ts +59 -0
  567. package/src/api/GetFeatures.ts +6 -4
  568. package/src/api/GetOnekeyFeatures.ts +1 -75
  569. package/src/api/GetPassphraseState.ts +36 -18
  570. package/src/api/OpenWalletSession.ts +268 -0
  571. package/src/api/PathInfo.ts +9 -4
  572. package/src/api/PromptWebDeviceAccess.ts +2 -7
  573. package/src/api/SearchDevices.ts +31 -4
  574. package/src/api/UploadPortfolio.ts +58 -0
  575. package/src/api/alephium/AlephiumGetAddress.ts +0 -4
  576. package/src/api/alephium/AlephiumSignMessage.ts +0 -4
  577. package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
  578. package/src/api/algo/AlgoGetAddress.ts +4 -0
  579. package/src/api/algo/AlgoSignTransaction.ts +4 -0
  580. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  581. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +45 -32
  582. package/src/api/aptos/AptosGetAddress.ts +4 -0
  583. package/src/api/aptos/AptosGetPublicKey.ts +4 -0
  584. package/src/api/aptos/AptosSignInMessage.ts +4 -0
  585. package/src/api/aptos/AptosSignMessage.ts +4 -0
  586. package/src/api/aptos/AptosSignTransaction.ts +4 -0
  587. package/src/api/benfen/BenfenGetAddress.ts +11 -7
  588. package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
  589. package/src/api/benfen/BenfenSignMessage.ts +0 -4
  590. package/src/api/benfen/BenfenSignTransaction.ts +0 -4
  591. package/src/api/btc/BTCGetAddress.ts +8 -1
  592. package/src/api/btc/BTCGetPublicKey.ts +9 -2
  593. package/src/api/btc/BTCSignMessage.ts +8 -1
  594. package/src/api/btc/BTCSignPsbt.ts +4 -0
  595. package/src/api/btc/BTCSignTransaction.ts +8 -1
  596. package/src/api/btc/BTCVerifyMessage.ts +8 -1
  597. package/src/api/btc/helpers/versionLimit.ts +7 -4
  598. package/src/api/cardano/CardanoGetAddress.ts +4 -0
  599. package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
  600. package/src/api/cardano/CardanoSignMessage.ts +5 -1
  601. package/src/api/cardano/CardanoSignTransaction.ts +5 -1
  602. package/src/api/conflux/ConfluxGetAddress.ts +6 -0
  603. package/src/api/conflux/ConfluxSignMessage.ts +6 -0
  604. package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
  605. package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
  606. package/src/api/cosmos/CosmosGetAddress.ts +4 -0
  607. package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
  608. package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
  609. package/src/api/device/DeviceCancel.ts +5 -0
  610. package/src/api/device/DeviceChangePin.ts +28 -0
  611. package/src/api/device/DeviceFullyUploadResource.ts +4 -5
  612. package/src/api/device/DeviceLock.ts +5 -0
  613. package/src/api/device/DeviceRebootToBoardloader.ts +9 -4
  614. package/src/api/device/DeviceRebootToBootloader.ts +9 -4
  615. package/src/api/device/DeviceSettings.ts +195 -1
  616. package/src/api/device/DeviceSupportFeatures.ts +4 -0
  617. package/src/api/device/DeviceUnlock.ts +21 -3
  618. package/src/api/device/DeviceUpdateBootloader.ts +152 -8
  619. package/src/api/device/DeviceWipe.ts +25 -0
  620. package/src/api/device/PreInitialize.ts +4 -0
  621. package/src/api/dynex/DnxGetAddress.ts +0 -6
  622. package/src/api/dynex/DnxSignTransaction.ts +0 -6
  623. package/src/api/evm/EVMGetAddress.ts +6 -2
  624. package/src/api/evm/EVMGetPublicKey.ts +6 -2
  625. package/src/api/evm/EVMSignMessage.ts +6 -2
  626. package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
  627. package/src/api/evm/EVMSignTransaction.ts +6 -2
  628. package/src/api/evm/EVMSignTypedData.ts +42 -50
  629. package/src/api/evm/EVMVerifyMessage.ts +6 -2
  630. package/src/api/evm/legacyV1/getAddress.ts +2 -2
  631. package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
  632. package/src/api/evm/legacyV1/signMessage.ts +2 -2
  633. package/src/api/evm/legacyV1/signTypedData.ts +2 -2
  634. package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
  635. package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
  636. package/src/api/evm/protocol.ts +6 -0
  637. package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
  638. package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
  639. package/src/api/firmware/FirmwareArtifactSource.ts +305 -0
  640. package/src/api/firmware/FirmwareHostBinding.ts +123 -0
  641. package/src/api/firmware/FirmwareMemoryHost.ts +143 -0
  642. package/src/api/firmware/FirmwarePreparationError.ts +12 -0
  643. package/src/api/firmware/FirmwarePreparedResourceArchive.ts +187 -0
  644. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +216 -65
  645. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  646. package/src/api/firmware/FirmwareUpdatePlan.ts +945 -0
  647. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +486 -0
  648. package/src/api/firmware/getBinary.ts +8 -3
  649. package/src/api/firmware/protocolV2Release.ts +168 -0
  650. package/src/api/firmware/updateBootloader.ts +19 -4
  651. package/src/api/firmware/uploadFirmware.ts +157 -26
  652. package/src/api/helpers/batchGetPublickeys.ts +2 -2
  653. package/src/api/helpers/filesystemValidation.ts +61 -0
  654. package/src/api/helpers/paramsValidator.ts +1 -1
  655. package/src/api/helpers/protocolV2FileWrite.ts +392 -0
  656. package/src/api/index.ts +9 -30
  657. package/src/api/kaspa/KaspaGetAddress.ts +7 -0
  658. package/src/api/kaspa/KaspaSignTransaction.ts +369 -29
  659. package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
  660. package/src/api/lightning/LnurlAuth.ts +0 -4
  661. package/src/api/near/NearGetAddress.ts +4 -0
  662. package/src/api/near/NearSignTransaction.ts +4 -0
  663. package/src/api/nem/NEMGetAddress.ts +4 -0
  664. package/src/api/nem/NEMSignTransaction.ts +4 -0
  665. package/src/api/neo/NeoGetAddress.ts +0 -4
  666. package/src/api/neo/NeoSignTransaction.ts +0 -4
  667. package/src/api/nervos/NervosGetAddress.ts +0 -4
  668. package/src/api/nervos/NervosSignTransaction.ts +2 -6
  669. package/src/api/nexa/NexaGetAddress.ts +0 -4
  670. package/src/api/nexa/NexaSignTransaction.ts +3 -5
  671. package/src/api/nostr/NostrDecryptMessage.ts +4 -0
  672. package/src/api/nostr/NostrEncryptMessage.ts +4 -0
  673. package/src/api/nostr/NostrGetPublicKey.ts +4 -0
  674. package/src/api/nostr/NostrSignEvent.ts +4 -0
  675. package/src/api/nostr/NostrSignSchnorr.ts +4 -0
  676. package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
  677. package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
  678. package/src/api/polkadot/networks.ts +3 -3
  679. package/src/api/protocol-v2/{FactoryGetDeviceInfo.ts → DeviceFactoryInfoGet.ts} +8 -5
  680. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +35 -0
  681. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +11 -10
  682. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +45 -7
  683. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +10 -5
  684. package/src/api/protocol-v2/DeviceInfoGet.ts +141 -0
  685. package/src/api/protocol-v2/DeviceReboot.ts +8 -4
  686. package/src/api/protocol-v2/DeviceStatusGet.ts +19 -0
  687. package/src/api/protocol-v2/DeviceUploadNft.ts +197 -0
  688. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +134 -0
  689. package/src/api/protocol-v2/FilesystemFormat.ts +9 -3
  690. package/src/api/protocol-v2/{FilesystemFixPermission.ts → FilesystemPermissionFix.ts} +7 -4
  691. package/src/api/protocol-v2/Ping.ts +37 -3
  692. package/src/api/protocol-v2/ProtocolInfoRequest.ts +21 -0
  693. package/src/api/protocol-v2/helpers.ts +71 -50
  694. package/src/api/scdo/ScdoGetAddress.ts +0 -4
  695. package/src/api/scdo/ScdoSignMessage.ts +0 -4
  696. package/src/api/scdo/ScdoSignTransaction.ts +0 -4
  697. package/src/api/solana/SolGetAddress.ts +4 -0
  698. package/src/api/solana/SolSignMessage.ts +5 -1
  699. package/src/api/solana/SolSignOffchainMessage.ts +5 -1
  700. package/src/api/solana/SolSignTransaction.ts +6 -2
  701. package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
  702. package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
  703. package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
  704. package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
  705. package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
  706. package/src/api/stellar/StellarGetAddress.ts +1 -10
  707. package/src/api/stellar/StellarSignTransaction.ts +1 -14
  708. package/src/api/sui/SuiGetAddress.ts +5 -1
  709. package/src/api/sui/SuiGetPublicKey.ts +5 -1
  710. package/src/api/sui/SuiSignMessage.ts +5 -1
  711. package/src/api/sui/SuiSignTransaction.ts +5 -1
  712. package/src/api/ton/TonGetAddress.ts +5 -1
  713. package/src/api/ton/TonSignData.ts +6 -6
  714. package/src/api/ton/TonSignMessage.ts +5 -1
  715. package/src/api/ton/TonSignProof.ts +5 -1
  716. package/src/api/tron/TronGetAddress.ts +4 -0
  717. package/src/api/tron/TronSignMessage.ts +19 -9
  718. package/src/api/tron/TronSignTransaction.ts +5 -2
  719. package/src/api/utils.ts +32 -3
  720. package/src/api/xrp/XrpGetAddress.ts +4 -0
  721. package/src/api/xrp/XrpSignTransaction.ts +5 -1
  722. package/src/constants/index.ts +1 -4
  723. package/src/core/RequestQueue.ts +1 -0
  724. package/src/core/deviceEventRegistration.ts +27 -0
  725. package/src/core/index.ts +400 -157
  726. package/src/core/uiPromiseRegistry.ts +63 -0
  727. package/src/data/messages/messages-protocol-v2.json +904 -791
  728. package/src/data/messages/messages.json +286 -1
  729. package/src/data-manager/DataManager.ts +158 -40
  730. package/src/data-manager/TransportManager.ts +7 -1
  731. package/src/data-manager/connectSettings.ts +13 -4
  732. package/src/device/Device.ts +909 -296
  733. package/src/device/DeviceCommands.ts +193 -158
  734. package/src/device/DeviceConnector.ts +44 -21
  735. package/src/device/DeviceFeaturesState.ts +25 -0
  736. package/src/device/DevicePool.ts +101 -23
  737. package/src/device/DeviceStateMapper.ts +416 -0
  738. package/src/device/DeviceStateProjector.ts +152 -0
  739. package/src/device/DeviceStateStore.ts +232 -0
  740. package/src/device/DeviceWalletSessionStore.ts +144 -0
  741. package/src/device/cloneDeviceState.ts +39 -0
  742. package/src/device/deviceIdentity.ts +18 -0
  743. package/src/deviceProfile/buildDeviceFeatures.ts +243 -212
  744. package/src/deviceProfile/index.ts +0 -1
  745. package/src/deviceProfile/protocolV2DeviceIdentity.ts +35 -0
  746. package/src/events/device.ts +22 -1
  747. package/src/events/logBlockEvent.ts +80 -2
  748. package/src/events/ui-promise.ts +4 -2
  749. package/src/events/ui-request.ts +61 -4
  750. package/src/events/ui-response.ts +12 -2
  751. package/src/index.ts +17 -0
  752. package/src/inject.ts +93 -49
  753. package/src/lowLevelInject.ts +11 -4
  754. package/src/protocols/protocol-v2/deviceSession.ts +24 -0
  755. package/src/protocols/protocol-v2/features.ts +113 -83
  756. package/src/protocols/protocol-v2/firmware.ts +14 -36
  757. package/src/protocols/protocol-v2/index.ts +8 -1
  758. package/src/protocols/protocol-v2/resources.ts +210 -0
  759. package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
  760. package/src/protocols/protocol-v2/uiInteraction.ts +250 -0
  761. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -0
  762. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +131 -0
  763. package/src/protocols/protocol-v2/walletSession.ts +463 -0
  764. package/src/topLevelInject.ts +11 -4
  765. package/src/types/api/checkAllFirmwareRelease.ts +72 -9
  766. package/src/types/api/checkBLEFirmwareRelease.ts +4 -13
  767. package/src/types/api/checkBootloaderRelease.ts +2 -6
  768. package/src/types/api/checkFirmwareRelease.ts +2 -13
  769. package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
  770. package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
  771. package/src/types/api/deviceSettings.ts +26 -2
  772. package/src/types/api/deviceUnlock.ts +13 -2
  773. package/src/types/api/deviceUpdateBootloader.ts +7 -0
  774. package/src/types/api/export.ts +33 -1
  775. package/src/types/api/firmwareUpdate.ts +101 -19
  776. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  777. package/src/types/api/firmwareUpdatePlan.ts +38 -0
  778. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  779. package/src/types/api/getDeviceState.ts +19 -0
  780. package/src/types/api/getFeatures.ts +3 -0
  781. package/src/types/api/getOnekeyFeatures.ts +3 -0
  782. package/src/types/api/getPassphraseState.ts +9 -11
  783. package/src/types/api/index.ts +50 -72
  784. package/src/types/api/kaspaSignTransaction.ts +60 -4
  785. package/src/types/api/openWalletSession.ts +54 -0
  786. package/src/types/api/protocolV2.ts +31 -157
  787. package/src/types/api/sessionCache.ts +19 -0
  788. package/src/types/device.ts +217 -10
  789. package/src/types/params.ts +12 -1
  790. package/src/types/settings.ts +91 -42
  791. package/src/utils/assets.ts +4 -1
  792. package/src/utils/deviceFeaturesCompat.ts +191 -0
  793. package/src/utils/deviceFeaturesUtils.ts +85 -26
  794. package/src/utils/deviceInfoUtils.ts +29 -69
  795. package/src/utils/deviceSettings.ts +174 -39
  796. package/src/utils/deviceVersionUtils.ts +25 -44
  797. package/src/utils/findDefectiveBatchDevice.ts +3 -3
  798. package/src/utils/homescreen.ts +40 -0
  799. package/src/utils/index.ts +27 -3
  800. package/src/utils/networkUtils.ts +274 -16
  801. package/src/utils/pro2Nft.ts +142 -0
  802. package/src/utils/pro2Wallpaper.ts +130 -0
  803. package/src/utils/tracing.ts +3 -1
  804. package/src/utils/uiProgressThrottle.ts +63 -0
  805. package/tsconfig.type-tests.json +12 -0
  806. package/dist/api/GetDeviceInfo.d.ts +0 -9
  807. package/dist/api/GetDeviceInfo.d.ts.map +0 -1
  808. package/dist/api/protocol-v2/DevReboot.d.ts +0 -7
  809. package/dist/api/protocol-v2/DevReboot.d.ts.map +0 -1
  810. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts +0 -29
  811. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts.map +0 -1
  812. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +0 -7
  813. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +0 -1
  814. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +0 -6
  815. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +0 -1
  816. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts +0 -13
  817. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts.map +0 -1
  818. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts +0 -6
  819. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +0 -1
  820. package/dist/api/protocol-v2/GetProtoVersion.d.ts +0 -6
  821. package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +0 -1
  822. package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
  823. package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
  824. package/dist/types/api/getDeviceInfo.d.ts +0 -85
  825. package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
  826. package/src/api/GetDeviceInfo.ts +0 -145
  827. package/src/api/protocol-v2/DevReboot.ts +0 -24
  828. package/src/api/protocol-v2/DeviceGetDeviceInfo.ts +0 -118
  829. package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +0 -29
  830. package/src/api/protocol-v2/FilesystemDiskControl.ts +0 -50
  831. package/src/api/protocol-v2/GetProtoVersion.ts +0 -16
  832. package/src/deviceProfile/buildDeviceProfile.ts +0 -333
  833. package/src/types/api/getDeviceInfo.ts +0 -99
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 { setProtocolV2DeviceInfoMock } from '../protocols/protocol-v2/features';
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,13 +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,
111
+ protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
99
112
  });
100
113
 
101
- let _core: Core;
114
+ let _core: Core | undefined;
102
115
  let _deviceList: DeviceList | undefined;
103
116
  let _connector: DeviceConnector | undefined;
104
117
  let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
@@ -142,11 +155,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
142
155
  }
143
156
 
144
157
  // find api method
145
- let method: BaseMethod;
158
+ let method!: BaseMethod;
146
159
  try {
147
160
  method = findMethod(message as IFrameCallMessage);
148
161
  method.connector = _connector;
149
- method.postMessage = postMessage;
162
+ const shouldPostMessage = createUiProgressMessageFilter();
163
+ method.postMessage = event => {
164
+ if (shouldPostMessage(event)) {
165
+ postMessage(event);
166
+ }
167
+ };
150
168
  method.setContext?.(context);
151
169
 
152
170
  method.requestContext = createRequestContext(method.responseID, method.name, {
@@ -158,11 +176,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
158
176
 
159
177
  method.init();
160
178
  } catch (error) {
161
- return Promise.reject(error);
179
+ if (method) {
180
+ completeMethodRequestContext(method, error);
181
+ method.dispose();
182
+ }
183
+ return createResponseMessage(method?.responseID ?? message.id, false, { error });
162
184
  }
163
185
 
164
- DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
165
-
166
186
  if (!method.useDevice) {
167
187
  updateMethodRequestContext(method, { status: 'running' });
168
188
  try {
@@ -223,9 +243,15 @@ const handlePreWarmSignal = async (
223
243
  message: CoreMessage,
224
244
  method: BaseMethod
225
245
  ): Promise<any> => {
246
+ const createAckResponse = () => {
247
+ completeMethodRequestContext(method);
248
+ method.dispose();
249
+ return createResponseMessage(method.responseID, true, true);
250
+ };
251
+
226
252
  // no connectId: can't target a device safely, skip pre-warm (ack only)
227
253
  if (!method.connectId) {
228
- return createResponseMessage(method.responseID, true, true);
254
+ return createAckResponse();
229
255
  }
230
256
 
231
257
  const key = method.getPreWarmKey();
@@ -238,12 +264,12 @@ const handlePreWarmSignal = async (
238
264
  } catch {
239
265
  // pre-warm is best-effort; ignore its failure for the coalesced caller
240
266
  }
241
- return createResponseMessage(method.responseID, true, true);
267
+ return createAckResponse();
242
268
  }
243
269
 
244
270
  const doneAt = preWarmDoneAt.get(key);
245
271
  if (typeof doneAt === 'number' && Date.now() - doneAt <= method.preWarmTtl) {
246
- return createResponseMessage(method.responseID, true, true);
272
+ return createAckResponse();
247
273
  }
248
274
 
249
275
  const run = onCallDevice(context, message, method);
@@ -351,7 +377,7 @@ const onCallDevice = async (
351
377
  );
352
378
  } catch (e) {
353
379
  preWarmCallbackTask?.resolve();
354
- console.log('ensureConnected error: ', e);
380
+ Log.debug('ensureConnected error: ', e);
355
381
 
356
382
  completeMethodRequestContext(method, e);
357
383
 
@@ -388,18 +414,28 @@ const onCallDevice = async (
388
414
  );
389
415
  }
390
416
 
391
- device.on(DEVICE.PIN, onDevicePinHandler);
392
- device.on(DEVICE.BUTTON, onDeviceButtonHandler);
393
- device.on(
394
- DEVICE.PASSPHRASE,
395
- message.payload.useEmptyPassphrase ? onEmptyPassphraseHandler : onDevicePassphraseHandler
396
- );
397
- device.on(DEVICE.PASSPHRASE_ON_DEVICE, onEnterPassphraseOnDeviceHandler);
417
+ registerHardwareUiEventListeners(device, {
418
+ pin: onDevicePinHandler,
419
+ pinOnDevice: onEnterPinOnDeviceHandler,
420
+ pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
421
+ button: onDeviceButtonHandler,
422
+ passphrase: message.payload.useEmptyPassphrase
423
+ ? onEmptyPassphraseHandler
424
+ : onDevicePassphraseHandler,
425
+ passphraseOnDevice: onEnterPassphraseOnDeviceHandler,
426
+ attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
427
+ });
398
428
  device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
429
+ device.on(DEVICE.STATE, onDeviceStateHandler);
399
430
  device.on(
400
431
  DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
401
432
  onSelectDeviceInBootloaderForWebDeviceHandler
402
433
  );
434
+
435
+ const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
436
+ let protocolV2Operation = false;
437
+ let protocolV2CloseEmitted = false;
438
+ device.beginProtocolV2UiInteraction();
403
439
  device.on(
404
440
  DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
405
441
  onSelectDeviceForSwitchFirmwareWebDeviceHandler
@@ -414,11 +450,10 @@ const onCallDevice = async (
414
450
  await waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
415
451
 
416
452
  const inner = async (): Promise<void> => {
417
- // Protocol V2 专属方法统一守卫:协议在 acquire/initialize 后已确定,
418
- // V2 设备直接抛出明确的 NotSupport 错误(见 BaseMethod.requireProtocolV2)。
419
- if (method.requireProtocolV2 && !device.isProtocolV2()) {
420
- throw createDeviceNotSupportMethodError(method.name, device.getCurrentFirmwareType());
421
- }
453
+ // Protocol is established from an active device response during acquire/initialize.
454
+ // Reject unsupported methods before any method-specific device command is sent.
455
+ method.assertProtocolSupported(device.getProtocol(), device.getCurrentFirmwareType());
456
+ protocolV2Operation = device.isProtocolV2();
422
457
 
423
458
  // check firmware version
424
459
  const versionRange = device.getCurrentMethodVersionRange(
@@ -429,8 +464,8 @@ const onCallDevice = async (
429
464
  const deviceFirmwareType = device.getCurrentFirmwareType();
430
465
  let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
431
466
 
432
- // 故障批次检测与远端强制升级门禁基于 V1 features/remote config
433
- // Pro2(V2) 暂不参与:profile 版的 firmwareStatus 需要 DataManager 支持后再接入。
467
+ // Defective-batch and forced-update gates depend on V1 features/remote config.
468
+ // Pro2 joins after DataManager supports its profile firmwareStatus.
434
469
  if (device.features && !device.isProtocolV2()) {
435
470
  await DataManager.checkAndReloadData();
436
471
 
@@ -478,10 +513,6 @@ const onCallDevice = async (
478
513
  }
479
514
  }
480
515
 
481
- if (isMethodVersionRangeUnsupported(versionRange)) {
482
- throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
483
- }
484
-
485
516
  if (versionRange) {
486
517
  if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
487
518
  if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
@@ -532,89 +563,102 @@ const onCallDevice = async (
532
563
  );
533
564
  }
534
565
 
535
- if (method.deviceId && method.checkDeviceId) {
536
- const isSameDeviceID = device.checkDeviceId(method.deviceId);
537
- if (!isSameDeviceID) {
538
- return Promise.reject(ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError));
539
- }
540
- }
541
-
542
- /**
543
- * check firmware release info
544
- */
545
- method.checkFirmwareRelease();
566
+ try {
567
+ let deviceIdCheckedDuringUnlockPreflight = false;
568
+ const response = await runMethodWithUnlockPolicy<object>(method, device, {
569
+ uiCoordinator: protocolV2UiCoordinator,
570
+ afterStatusBeforeUnlock: () => {
571
+ if (method.deviceId && method.checkDeviceId) {
572
+ if (!device.checkDeviceId(method.deviceId)) {
573
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
574
+ }
575
+ deviceIdCheckedDuringUnlockPreflight = true;
576
+ }
577
+ },
578
+ prepare: async () => {
579
+ if (method.deviceId && method.checkDeviceId && !deviceIdCheckedDuringUnlockPreflight) {
580
+ const isSameDeviceID = await checkLiveDeviceId(device, method.deviceId);
581
+ if (!isSameDeviceID) {
582
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
583
+ }
584
+ }
546
585
 
547
- /**
548
- * check additional supported feature
549
- */
550
- method.checkDeviceSupportFeature();
586
+ /**
587
+ * check firmware release info
588
+ */
589
+ method.checkFirmwareRelease();
551
590
 
552
- // reconfigure messages
553
- if (_deviceList && device.features && !device.isProtocolV2()) {
554
- await TransportManager.reconfigure(device.features);
555
- }
591
+ /**
592
+ * check additional supported feature
593
+ */
594
+ method.checkDeviceSupportFeature();
556
595
 
557
- // Check to see if it is safe to use Passphrase
558
- checkPassphraseEnableState(method, device.features);
596
+ // reconfigure messages
597
+ if (_deviceList && device.features && !device.isProtocolV2()) {
598
+ await TransportManager.reconfigure(device.features);
599
+ }
559
600
 
560
- if (shouldCheckPassphraseState(method, device)) {
561
- // check version
562
- const support = device.supportNewPassphrase();
563
- if (!support.support) {
564
- return Promise.reject(
565
- ERRORS.TypedError(
566
- HardwareErrorCode.DeviceNotSupportPassphrase,
567
- `Device not support passphrase, please update to ${support.require}`,
568
- {
569
- require: support.require,
601
+ // Check to see if it is safe to use Passphrase
602
+ checkPassphraseEnableState(method, device.features);
603
+
604
+ if (shouldCheckPassphraseState(method, device)) {
605
+ // check version
606
+ const support = device.supportNewPassphrase();
607
+ if (!support.support) {
608
+ throw ERRORS.TypedError(
609
+ HardwareErrorCode.DeviceNotSupportPassphrase,
610
+ `Device not support passphrase, please update to ${support.require}`,
611
+ {
612
+ require: support.require,
613
+ }
614
+ );
570
615
  }
571
- )
572
- );
573
- }
574
616
 
575
- // Check Device passphrase State
576
- const passphraseStateSafety = await device.checkPassphraseStateSafety(
577
- method.payload?.passphraseState,
578
- method.payload?.useEmptyPassphrase,
579
- method.payload?.skipPassphraseCheck
580
- );
617
+ // Check Device passphrase State after the Protocol V2 pre-unlock gate.
618
+ const passphraseStateSafety = await device.checkPassphraseStateSafety(
619
+ method.payload?.passphraseState,
620
+ method.payload?.useEmptyPassphrase,
621
+ method.payload?.skipPassphraseCheck,
622
+ hasDeriveCardano(method)
623
+ );
581
624
 
582
- // Double check, handles the special case of Touch/Pro
583
- checkPassphraseEnableState(method, device.features);
625
+ // Double check, handles the special case of Touch/Pro
626
+ checkPassphraseEnableState(method, device.features);
584
627
 
585
- if (!passphraseStateSafety) {
586
- DevicePool.clearDeviceCache(method.payload.connectId);
587
- return Promise.reject(
588
- ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
589
- );
590
- }
591
-
592
- // close pin popup window
593
- postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
594
- }
628
+ if (!passphraseStateSafety) {
629
+ DevicePool.clearDeviceCache(method.payload.connectId);
630
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
631
+ }
595
632
 
596
- // Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
597
- try {
598
- await method.checkSafetyLevelOnTestNet();
599
- } catch (e) {
600
- const error =
601
- e instanceof HardwareError
602
- ? e
603
- : ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
604
- // messageResponse = createResponseMessage(method.responseID, false, { error });
605
- // requestQueue.resolveRequest(method.responseID, messageResponse);
606
- // return;
607
- throw error;
608
- }
633
+ // Protocol V2 emits the PIN phase completion from DeviceSessionAskPin.
634
+ // Keep the legacy compatibility close for Protocol V1 only.
635
+ if (!device.isProtocolV2()) {
636
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
637
+ }
638
+ }
609
639
 
610
- method.device?.commands?.checkDisposed();
640
+ // Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
641
+ try {
642
+ await method.checkSafetyLevelOnTestNet();
643
+ } catch (e) {
644
+ throw e instanceof HardwareError
645
+ ? e
646
+ : ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
647
+ }
611
648
 
612
- try {
613
- const response: object = await method.run();
649
+ method.device?.commands?.checkDisposed();
650
+ },
651
+ });
614
652
  messageResponse = createResponseMessage(method.responseID, true, response);
615
653
  requestQueue.resolveRequest(method.responseID, messageResponse);
616
654
  completeMethodRequestContext(method);
617
655
  } catch (error) {
656
+ // Device.run may release the request before transport callbacks finish after a timeout.
657
+ // Ignore the stale callback because the caller already received the connection error.
658
+ if (!requestQueue.getTask(method.responseID)) {
659
+ Log.debug(`Call API - Ignore late inner method result`, error);
660
+ return;
661
+ }
618
662
  Log.debug(`Call API - Inner Method Run Error`, error);
619
663
  messageResponse = createResponseMessage(method.responseID, false, { error });
620
664
  requestQueue.resolveRequest(method.responseID, messageResponse);
@@ -627,6 +671,13 @@ const onCallDevice = async (
627
671
  ) {
628
672
  throw error;
629
673
  }
674
+ } finally {
675
+ if (isProtocolV2UiEnabled(method)) {
676
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
677
+ ensureOperationClose: protocolV2Operation,
678
+ protocolV2Operation,
679
+ });
680
+ }
630
681
  }
631
682
  };
632
683
  Log.debug('Call API - Device Run: ', device.mainId);
@@ -680,7 +731,17 @@ const onCallDevice = async (
680
731
 
681
732
  requestQueue.releaseTask(method.responseID);
682
733
 
683
- closePopup();
734
+ if (isProtocolV2UiEnabled(method)) {
735
+ if (!protocolV2CloseEmitted && protocolV2Operation) {
736
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
737
+ ensureOperationClose: true,
738
+ protocolV2Operation: true,
739
+ });
740
+ }
741
+ if (!protocolV2CloseEmitted) {
742
+ closePopup();
743
+ }
744
+ }
684
745
 
685
746
  cleanup();
686
747
 
@@ -732,6 +793,15 @@ function initDevice(method: BaseMethod) {
732
793
 
733
794
  if (method.connectId) {
734
795
  device = _deviceList.getDevice(method.connectId);
796
+ if (!device && method.name === 'firmwareUpdateV4' && allDevices.length === 1) {
797
+ const [singleDevice] = allDevices;
798
+ if (singleDevice.isBootloader()) {
799
+ Log.debug(
800
+ 'firmwareUpdateV4 uses the only bootloader device when connectId changed after reboot'
801
+ );
802
+ device = singleDevice;
803
+ }
804
+ }
735
805
  } else if (allDevices.length === 1) {
736
806
  [device] = allDevices;
737
807
  } else if (allDevices.length > 1) {
@@ -833,8 +903,23 @@ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown)
833
903
  */
834
904
  async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
835
905
  try {
836
- await device.acquire(method.payload.connectProtocol);
906
+ if (method.payload.forceProtocolDetection && device.hasDeviceAcquire()) {
907
+ await device.release();
908
+ }
909
+ const shouldAcquire =
910
+ method.payload.forceProtocolDetection ||
911
+ !device.hasDeviceAcquire() ||
912
+ !device.commands ||
913
+ device.commands.disposed;
914
+ if (shouldAcquire) {
915
+ await device.acquire(method.payload.connectProtocol, {
916
+ forceProtocolDetection: method.payload.forceProtocolDetection,
917
+ });
918
+ }
837
919
  if (method.payload?.onlyConnectBleDevice) {
920
+ if (shouldAcquire) {
921
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
922
+ }
838
923
  return;
839
924
  }
840
925
  // Skip initialize if conditions are met
@@ -845,7 +930,25 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
845
930
  passphraseState: initOptions.passphraseState,
846
931
  });
847
932
  }
933
+ if (shouldAcquire) {
934
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
935
+ }
848
936
  } catch (err) {
937
+ // Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
938
+ // failures, so with keep-alive a wedged link would be reused by every retry
939
+ // (field case: Initialize timing out at 25s per attempt, forever). Drop it
940
+ // here so the next retry cold-connects.
941
+ if (
942
+ ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) &&
943
+ device.mainId &&
944
+ device.deviceConnector
945
+ ) {
946
+ await device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
947
+ // The connector only drops the link; `deviceAcquired` is reset by
948
+ // release()/markTransportDisconnected() alone. Leaving it set makes the
949
+ // next attempt skip acquire and initialize onto the link we just cut.
950
+ device.markTransportDisconnected();
951
+ }
849
952
  if (
850
953
  (err.errorCode === HardwareErrorCode.BleTimeoutError ||
851
954
  err.errorCode === HardwareErrorCode.BleConnectedError ||
@@ -1139,14 +1242,17 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
1139
1242
  };
1140
1243
 
1141
1244
  const cleanup = () => {
1245
+ const pendingUiPromises = _uiPromises;
1142
1246
  _uiPromises = [];
1247
+ rejectUiPromises(
1248
+ pendingUiPromises,
1249
+ ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
1250
+ );
1143
1251
  Log.debug('Cleanup...');
1144
1252
  };
1145
1253
 
1146
1254
  const removeDeviceListener = (device: Device) => {
1147
1255
  device.removeAllListeners();
1148
- DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
1149
- // DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1150
1256
  };
1151
1257
 
1152
1258
  /**
@@ -1157,19 +1263,33 @@ const closePopup = () => {
1157
1263
  };
1158
1264
 
1159
1265
  const onDeviceConnectHandler = (device: Device) => {
1160
- const env = DataManager.getSettings('env');
1161
- const deviceObject = DataManager.isBleConnect(env) ? device : device.toMessageObject();
1162
- postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject as KnownDevice }));
1266
+ const deviceObject = device.toMessageObject();
1267
+ if (!deviceObject) return;
1268
+ postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
1163
1269
  };
1164
1270
 
1165
1271
  const onDeviceDisconnectHandler = (device: Device) => {
1166
1272
  device.clearPreInitialized();
1167
- const env = DataManager.getSettings('env');
1168
- const deviceObject = DataManager.isBleConnect(env) ? device : device.toMessageObject();
1169
- postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject as KnownDevice }));
1273
+ const deviceObject = device.toMessageObject();
1274
+ if (!deviceObject) return;
1275
+ postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
1170
1276
  };
1171
1277
 
1172
- const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin']) => {
1278
+ const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
1279
+ const device =
1280
+ deviceCacheMap.get(event.connectId) ??
1281
+ DevicePool.devicesCache[event.connectId] ??
1282
+ DevicePool.getDeviceByPath(event.connectId);
1283
+ if (!device) {
1284
+ Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
1285
+ return;
1286
+ }
1287
+
1288
+ device.markTransportDisconnected();
1289
+ DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
1290
+ };
1291
+
1292
+ const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
1173
1293
  Log.log('request Input PIN');
1174
1294
  // create ui promise
1175
1295
  const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
@@ -1178,12 +1298,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
1178
1298
  createUiMessage(UI_REQUEST.REQUEST_PIN, {
1179
1299
  device: device.toMessageObject() as unknown as KnownDevice,
1180
1300
  type,
1301
+ responseCorrelation: uiPromise.responseCorrelation,
1181
1302
  })
1182
1303
  );
1183
- // wait for pin
1184
- const uiResp = await uiPromise.promise;
1185
- // callback.apply(null, [null, pin]);
1186
- callback(null, uiResp.payload);
1304
+ consumeUiPromise(
1305
+ uiPromise.promise,
1306
+ uiResp => callback(null, uiResp.payload),
1307
+ error => callback(error, '')
1308
+ );
1187
1309
  };
1188
1310
 
1189
1311
  export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
@@ -1207,7 +1329,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
1207
1329
  postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
1208
1330
  };
1209
1331
 
1210
- const onDevicePassphraseHandler = async (
1332
+ const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
1333
+ postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
1334
+ };
1335
+
1336
+ const onDevicePassphraseHandler = (
1211
1337
  ...[device, requestPayload, callback]: DeviceEvents['passphrase']
1212
1338
  ) => {
1213
1339
  Log.debug('onDevicePassphraseHandler');
@@ -1217,18 +1343,27 @@ const onDevicePassphraseHandler = async (
1217
1343
  device: device.toMessageObject() as KnownDevice,
1218
1344
  passphraseState: device.passphraseState,
1219
1345
  existsAttachPinUser: requestPayload.existsAttachPinUser,
1346
+ deviceOnly: requestPayload.deviceOnly,
1347
+ source: requestPayload.source,
1348
+ reason: requestPayload.reason,
1349
+ expectedPassphraseState: requestPayload.expectedPassphraseState,
1350
+ ...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
1351
+ responseCorrelation: uiPromise.responseCorrelation,
1220
1352
  })
1221
1353
  );
1222
- // wait for passphrase
1223
- const uiResp = await uiPromise.promise;
1224
- const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
1225
- // send as PassphrasePromptResponse
1226
- callback({
1227
- passphrase: value.normalize('NFKD'),
1228
- passphraseOnDevice,
1229
- attachPinOnDevice,
1230
- cache: save,
1231
- });
1354
+ consumeUiPromise(
1355
+ uiPromise.promise,
1356
+ uiResp => {
1357
+ const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
1358
+ callback({
1359
+ passphrase: value.normalize('NFKD'),
1360
+ passphraseOnDevice,
1361
+ attachPinOnDevice,
1362
+ cache: save,
1363
+ });
1364
+ },
1365
+ error => callback({}, error)
1366
+ );
1232
1367
  };
1233
1368
 
1234
1369
  const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
@@ -1238,17 +1373,62 @@ const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']
1238
1373
  };
1239
1374
 
1240
1375
  const onEnterPassphraseOnDeviceHandler = (
1241
- ...[device]: [...DeviceEvents['passphrase_on_device']]
1376
+ ...[device, requestPayload]: [...DeviceEvents['passphrase_on_device']]
1242
1377
  ) => {
1243
1378
  postMessage(
1244
1379
  createUiMessage(UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE, {
1245
1380
  device: device.toMessageObject() as KnownDevice,
1246
1381
  passphraseState: device.passphraseState,
1382
+ source: requestPayload?.source,
1383
+ reason: requestPayload?.reason,
1384
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1385
+ })
1386
+ );
1387
+ };
1388
+
1389
+ const onEnterAttachPinOnDeviceHandler = (
1390
+ ...[device, requestPayload]: [...DeviceEvents['attach_pin_on_device']]
1391
+ ) => {
1392
+ postMessage(
1393
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1394
+ device: device.toMessageObject() as KnownDevice,
1395
+ type: 'ButtonRequest_AttachPin',
1396
+ source: requestPayload?.source,
1397
+ reason: requestPayload?.reason,
1398
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1399
+ })
1400
+ );
1401
+ };
1402
+
1403
+ const onEnterPinOnDeviceHandler = (
1404
+ ...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
1405
+ ) => {
1406
+ postMessage(
1407
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1408
+ device: device.toMessageObject() as KnownDevice,
1409
+ type:
1410
+ pinType === DeviceSessionPinType.AttachToPin
1411
+ ? 'ButtonRequest_AttachPin'
1412
+ : 'ButtonRequest_PinEntry',
1413
+ source: metadata?.source,
1414
+ reason: metadata?.reason,
1415
+ deviceOnly: metadata?.deviceOnly ?? true,
1416
+ completion: metadata?.completion,
1417
+ method: metadata?.method,
1418
+ page: metadata?.page,
1419
+ operation: metadata?.operation,
1420
+ ...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
1247
1421
  })
1248
1422
  );
1249
1423
  };
1250
1424
 
1251
- const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1425
+ const onPinOnDeviceCompleteHandler = (
1426
+ ...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
1427
+ ) => {
1428
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
1429
+ };
1430
+
1431
+ const onSelectDeviceInBootloaderForWebDeviceHandler = (
1252
1432
  ...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
1253
1433
  ) => {
1254
1434
  Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
@@ -1258,11 +1438,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1258
1438
  device: device.toMessageObject() as KnownDevice,
1259
1439
  })
1260
1440
  );
1261
- const uiResp = await uiPromise.promise;
1262
- callback(null, uiResp.payload.deviceId);
1441
+ consumeUiPromise(
1442
+ uiPromise.promise,
1443
+ uiResp => callback(null, uiResp.payload.deviceId),
1444
+ error => callback(error, '')
1445
+ );
1263
1446
  };
1264
1447
 
1265
- const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1448
+ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
1266
1449
  ...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
1267
1450
  ) => {
1268
1451
  Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
@@ -1275,8 +1458,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1275
1458
  device: device.toMessageObject() as KnownDevice,
1276
1459
  })
1277
1460
  );
1278
- const uiResp = await uiPromise.promise;
1279
- callback(null, uiResp.payload.deviceId);
1461
+ consumeUiPromise(
1462
+ uiPromise.promise,
1463
+ uiResp => callback(null, uiResp.payload.deviceId),
1464
+ error => callback(error, '')
1465
+ );
1280
1466
  };
1281
1467
 
1282
1468
  /**
@@ -1295,14 +1481,21 @@ const postMessage = (message: CoreMessage) => {
1295
1481
 
1296
1482
  const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
1297
1483
  const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
1484
+ if (
1485
+ device &&
1486
+ (promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
1487
+ ) {
1488
+ const publicDeviceId = device.toMessageObject()?.deviceId;
1489
+ uiPromise.responseCorrelation = {
1490
+ interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
1491
+ deviceId: publicDeviceId || device.instanceId,
1492
+ };
1493
+ }
1298
1494
  _uiPromises.push(uiPromise as any);
1299
1495
 
1300
1496
  return uiPromise;
1301
1497
  };
1302
1498
 
1303
- const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
1304
- _uiPromises.find(p => p.id === promiseEvent);
1305
-
1306
1499
  const removeUiPromise = (promise: Deferred<any>) => {
1307
1500
  _uiPromises = _uiPromises.filter(p => p !== promise);
1308
1501
  };
@@ -1314,6 +1507,8 @@ export default class Core extends EventEmitter {
1314
1507
 
1315
1508
  private requestQueue = new RequestQueue();
1316
1509
 
1510
+ private disposePromise?: Promise<void>;
1511
+
1317
1512
  // background task
1318
1513
  private prePendingCallPromise: Promise<void> | undefined;
1319
1514
 
@@ -1352,11 +1547,16 @@ export default class Core extends EventEmitter {
1352
1547
  case UI_RESPONSE.RECEIVE_PASSPHRASE:
1353
1548
  case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
1354
1549
  case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
1355
- const uiPromise = findUiPromise(message.type);
1550
+ const uiPromise = findUiPromiseForResponse(_uiPromises, message);
1356
1551
  if (uiPromise) {
1357
1552
  Log.log('receive UI Response: ', message.type);
1358
1553
  uiPromise.resolve(message);
1359
1554
  removeUiPromise(uiPromise);
1555
+ } else if (
1556
+ message.type === UI_RESPONSE.RECEIVE_PIN ||
1557
+ message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
1558
+ ) {
1559
+ Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
1360
1560
  }
1361
1561
  break;
1362
1562
  }
@@ -1372,10 +1572,17 @@ export default class Core extends EventEmitter {
1372
1572
  }
1373
1573
 
1374
1574
  case IFRAME.CALL: {
1375
- Log.log(`[${Date.now()}][CALL_API]`, message);
1575
+ const logBlockLabel = getLogBlockLabel(message);
1576
+ Log.log(
1577
+ formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
1578
+ getSafeLogPayload(message, logBlockLabel)
1579
+ );
1376
1580
  const response = await callAPI(this.getCoreContext(), message);
1377
1581
  const { success, payload } = response;
1378
- Log.log(`[${Date.now()}][CALL_API_RESPONSE]`, response);
1582
+ Log.log(
1583
+ formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
1584
+ getSafeLogPayload(response, logBlockLabel)
1585
+ );
1379
1586
  if (success) {
1380
1587
  return response;
1381
1588
  }
@@ -1405,25 +1612,65 @@ export default class Core extends EventEmitter {
1405
1612
  return Promise.resolve(message);
1406
1613
  }
1407
1614
 
1408
- dispose() {
1615
+ dispose(): Promise<void> {
1616
+ if (!this.disposePromise) {
1617
+ this.disposePromise = this.disposeResources();
1618
+ }
1619
+ return this.disposePromise;
1620
+ }
1621
+
1622
+ private async disposeResources(): Promise<void> {
1623
+ Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1624
+ pollingManager.stopAll();
1625
+ this.requestQueue.abortAllRequests();
1626
+ cleanup();
1627
+
1628
+ _connector?.stop();
1629
+ let transportCleanup: Promise<void>;
1630
+ try {
1631
+ transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
1632
+ Log.warn('[Core] Transport cleanup failed:', error);
1633
+ });
1634
+ } catch (error) {
1635
+ Log.warn('[Core] Transport cleanup failed:', error);
1636
+ transportCleanup = Promise.resolve();
1637
+ }
1638
+
1639
+ // Preserve synchronous dispose semantics for in-memory state and listeners.
1409
1640
  _deviceList = undefined;
1410
1641
  _connector = undefined;
1642
+ DevicePool.dispose();
1411
1643
  deviceCacheMap.clear();
1412
1644
  preWarmInflight.clear();
1413
1645
  preWarmDoneAt.clear();
1414
- Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1646
+ preConnectCache = { passphraseState: undefined };
1647
+ this.prePendingCallPromise = undefined;
1648
+ this.removeAllListeners();
1415
1649
  cleanupSdkInstance(this.sdkInstanceId);
1650
+ if (_core === this) _core = undefined;
1651
+
1652
+ // Transports, especially Node USB, may release native handles asynchronously.
1653
+ await transportCleanup;
1416
1654
  }
1417
1655
  }
1418
1656
 
1419
1657
  export const initCore = () => {
1420
- _core = new Core();
1421
- return _core;
1658
+ const core = new Core();
1659
+ _core = core;
1660
+ return core;
1422
1661
  };
1423
1662
 
1424
1663
  export const initConnector = () => {
1425
1664
  _connector = new DeviceConnector();
1665
+ DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
1666
+ DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1667
+ DevicePool.emitter.removeListener(
1668
+ TRANSPORT_EVENT.DEVICE_DISCONNECT,
1669
+ onTransportDeviceDisconnectHandler
1670
+ );
1671
+ DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
1426
1672
  DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1673
+ DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
1427
1674
  return _connector;
1428
1675
  };
1429
1676
 
@@ -1437,13 +1684,8 @@ export const init = async (
1437
1684
  plugin?: LowlevelTransportSharedPlugin
1438
1685
  ) => {
1439
1686
  try {
1440
- try {
1441
- await DataManager.load(settings);
1442
- setProtocolV2DeviceInfoMock(settings.protocolV2DeviceInfoMockEnabled ?? false);
1443
- initTransport(Transport, plugin);
1444
- } catch {
1445
- Log.error('DataManager.load error');
1446
- }
1687
+ await DataManager.load(settings);
1688
+ initTransport(Transport, plugin);
1447
1689
  enableLog(DataManager.getSettings('debug'));
1448
1690
  if (DataManager.getSettings('env') !== 'react-native') {
1449
1691
  setLoggerPostMessage(postMessage);
@@ -1454,6 +1696,7 @@ export const init = async (
1454
1696
  return _core;
1455
1697
  } catch (error) {
1456
1698
  Log.error('core init', error);
1699
+ throw error;
1457
1700
  }
1458
1701
  };
1459
1702