@onekeyfe/hd-core 1.2.0-alpha.14 → 1.2.0-alpha.140

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (851) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +390 -0
  2. package/__tests__/DeviceCommands.test.ts +654 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +49 -0
  4. package/__tests__/base64Data.test.ts +69 -0
  5. package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
  6. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +878 -0
  7. package/__tests__/check-firmware-release-protocol-v2.test.ts +270 -0
  8. package/__tests__/connectSettings.test.ts +45 -5
  9. package/__tests__/core-dispose.test.ts +34 -0
  10. package/__tests__/core-error-output.test.ts +39 -0
  11. package/__tests__/core-initialization.test.ts +23 -0
  12. package/__tests__/device-connector-protocol.test.ts +102 -0
  13. package/__tests__/device-features-state.test.ts +78 -0
  14. package/__tests__/device-identity.test.ts +52 -0
  15. package/__tests__/device-initialize-timeout.test.ts +56 -0
  16. package/__tests__/device-lifecycle-events.test.ts +555 -0
  17. package/__tests__/device-pool-state.test.ts +191 -0
  18. package/__tests__/device-settings.test.ts +665 -0
  19. package/__tests__/device-state-contract.test.ts +28 -0
  20. package/__tests__/device-state-events.test.ts +286 -0
  21. package/__tests__/device-state-mapper.test.ts +335 -0
  22. package/__tests__/device-state-projector.test.ts +114 -0
  23. package/__tests__/device-state-store.test.ts +109 -0
  24. package/__tests__/device-utils.test.ts +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 +117 -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 +171 -0
  42. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +438 -0
  43. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  44. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +474 -0
  45. package/__tests__/firmware-update/firmware-update-plan.test.ts +819 -0
  46. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +287 -0
  47. package/__tests__/firmware-update/firmware-update-prepared-resource-executors.test.ts +326 -0
  48. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +457 -0
  49. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +237 -0
  50. package/__tests__/firmware-update/firmware-update-v4-install-poll.test.ts +166 -0
  51. package/__tests__/firmware-update/firmware-update-v4-parameters.test.ts +85 -0
  52. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  53. package/__tests__/get-device-state.test.ts +617 -0
  54. package/__tests__/homescreen.test.ts +81 -0
  55. package/__tests__/kaspa-public-types.type-test.ts +16 -0
  56. package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
  57. package/__tests__/kaspaSignTransaction.test.ts +578 -0
  58. package/__tests__/known-device-public-types.type-test.ts +3 -0
  59. package/__tests__/logBlockEvent.test.ts +140 -1
  60. package/__tests__/method-protocol-support.test.ts +144 -0
  61. package/__tests__/networkUtils.test.ts +406 -0
  62. package/__tests__/open-wallet-session-error-response.test.ts +43 -0
  63. package/__tests__/open-wallet-session.test.ts +1899 -0
  64. package/__tests__/pro2Nft.test.ts +108 -0
  65. package/__tests__/pro2Wallpaper.test.ts +8 -19
  66. package/__tests__/protocol-binding.test.ts +89 -0
  67. package/__tests__/protocol-v2-firmware-targets.test.ts +105 -0
  68. package/__tests__/protocol-v2-ping.test.ts +28 -0
  69. package/__tests__/protocol-v2-resources.test.ts +385 -0
  70. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  71. package/__tests__/protocol-v2-unlock-policy.test.ts +435 -0
  72. package/__tests__/protocol-v2.test.ts +7763 -2097
  73. package/__tests__/protocolV2FileWrite.test.ts +221 -3
  74. package/__tests__/protocolV2UiInteraction.test.ts +329 -0
  75. package/__tests__/public-device-state-api.test.ts +275 -0
  76. package/__tests__/public-pro2-api-boundary.test.ts +107 -0
  77. package/__tests__/refresh-device-state.test.ts +103 -0
  78. package/__tests__/request-context-logging.test.ts +16 -0
  79. package/__tests__/resourceBase64Boundary.test.ts +48 -0
  80. package/__tests__/search-devices.test.ts +191 -0
  81. package/__tests__/ton-sign-message.test.ts +84 -0
  82. package/__tests__/tron-sign-message-init.test.ts +74 -0
  83. package/__tests__/uiProgressThrottle.test.ts +74 -0
  84. package/__tests__/uiPromiseRegistry.test.ts +115 -0
  85. package/dist/api/BaseMethod.d.ts +14 -2
  86. package/dist/api/BaseMethod.d.ts.map +1 -1
  87. package/dist/api/CheckAllFirmwareRelease.d.ts +25 -1
  88. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  89. package/dist/api/CheckBLEFirmwareRelease.d.ts +3 -2
  90. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
  91. package/dist/api/CheckBootloaderRelease.d.ts +2 -1
  92. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  93. package/dist/api/CheckFirmwareRelease.d.ts +3 -2
  94. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  95. package/dist/api/CipherKeyValue.d.ts +1 -0
  96. package/dist/api/CipherKeyValue.d.ts.map +1 -1
  97. package/dist/api/ClearSessionCache.d.ts.map +1 -1
  98. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  99. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  100. package/dist/api/DirList.d.ts +1 -0
  101. package/dist/api/DirList.d.ts.map +1 -1
  102. package/dist/api/DirMake.d.ts +1 -0
  103. package/dist/api/DirMake.d.ts.map +1 -1
  104. package/dist/api/DirRemove.d.ts +1 -0
  105. package/dist/api/DirRemove.d.ts.map +1 -1
  106. package/dist/api/FileDelete.d.ts +1 -0
  107. package/dist/api/FileDelete.d.ts.map +1 -1
  108. package/dist/api/FileRead.d.ts +1 -0
  109. package/dist/api/FileRead.d.ts.map +1 -1
  110. package/dist/api/FileWrite.d.ts +1 -0
  111. package/dist/api/FileWrite.d.ts.map +1 -1
  112. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  113. package/dist/api/FirmwareUpdateV2.d.ts +13 -2
  114. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  115. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  116. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  117. package/dist/api/FirmwareUpdateV4.d.ts +57 -14
  118. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  119. package/dist/api/GetDeviceState.d.ts +8 -0
  120. package/dist/api/GetDeviceState.d.ts.map +1 -0
  121. package/dist/api/GetFeatures.d.ts +1 -1
  122. package/dist/api/GetFeatures.d.ts.map +1 -1
  123. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  124. package/dist/api/GetPassphraseState.d.ts +1 -0
  125. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  126. package/dist/api/OpenWalletSession.d.ts +8 -0
  127. package/dist/api/OpenWalletSession.d.ts.map +1 -0
  128. package/dist/api/PathInfo.d.ts +1 -0
  129. package/dist/api/PathInfo.d.ts.map +1 -1
  130. package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
  131. package/dist/api/SearchDevices.d.ts +3 -0
  132. package/dist/api/SearchDevices.d.ts.map +1 -1
  133. package/dist/api/UploadPortfolio.d.ts +1 -2
  134. package/dist/api/UploadPortfolio.d.ts.map +1 -1
  135. package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
  136. package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
  137. package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
  138. package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
  139. package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
  140. package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
  141. package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
  142. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
  143. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  144. package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
  145. package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
  146. package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
  147. package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
  148. package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
  149. package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
  150. package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
  151. package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
  152. package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
  153. package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
  154. package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
  155. package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
  156. package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
  157. package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
  158. package/dist/api/btc/BTCGetAddress.d.ts +1 -0
  159. package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
  160. package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
  161. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  162. package/dist/api/btc/BTCSignMessage.d.ts +1 -0
  163. package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
  164. package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
  165. package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
  166. package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
  167. package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
  168. package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
  169. package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
  170. package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
  171. package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
  172. package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
  173. package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
  174. package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
  175. package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
  176. package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
  177. package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
  178. package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
  179. package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
  180. package/dist/api/conflux/ConfluxGetAddress.d.ts +2 -0
  181. package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
  182. package/dist/api/conflux/ConfluxSignMessage.d.ts +2 -0
  183. package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
  184. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +2 -0
  185. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
  186. package/dist/api/conflux/ConfluxSignTransaction.d.ts +2 -0
  187. package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
  188. package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
  189. package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
  190. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
  191. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  192. package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
  193. package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
  194. package/dist/api/device/DeviceCancel.d.ts +1 -0
  195. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  196. package/dist/api/device/DeviceChangePin.d.ts +1 -0
  197. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  198. package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
  199. package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
  200. package/dist/api/device/DeviceLock.d.ts +1 -0
  201. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  202. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
  203. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  204. package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
  205. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  206. package/dist/api/device/DeviceSettings.d.ts +1 -0
  207. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  208. package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
  209. package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
  210. package/dist/api/device/DeviceUnlock.d.ts +3 -2
  211. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  212. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  213. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  214. package/dist/api/device/DeviceVerify.d.ts +1 -0
  215. package/dist/api/device/DeviceVerify.d.ts.map +1 -1
  216. package/dist/api/device/DeviceWipe.d.ts +1 -0
  217. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  218. package/dist/api/device/PreInitialize.d.ts +1 -0
  219. package/dist/api/device/PreInitialize.d.ts.map +1 -1
  220. package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
  221. package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
  222. package/dist/api/evm/EVMGetAddress.d.ts +1 -0
  223. package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
  224. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  225. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  226. package/dist/api/evm/EVMSignMessage.d.ts +1 -0
  227. package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
  228. package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
  229. package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
  230. package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
  231. package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
  232. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  233. package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
  234. package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
  235. package/dist/api/evm/protocol.d.ts +3 -0
  236. package/dist/api/evm/protocol.d.ts.map +1 -0
  237. package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
  238. package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
  239. package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
  240. package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
  241. package/dist/api/firmware/FirmwareArtifactSource.d.ts +29 -0
  242. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  243. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  244. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  245. package/dist/api/firmware/FirmwareMemoryHost.d.ts +22 -0
  246. package/dist/api/firmware/FirmwareMemoryHost.d.ts.map +1 -0
  247. package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
  248. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
  249. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts +11 -0
  250. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts.map +1 -0
  251. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +12 -3
  252. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  253. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  254. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  255. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +72 -0
  256. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  257. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +38 -0
  258. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  259. package/dist/api/firmware/getBinary.d.ts +15 -4
  260. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  261. package/dist/api/firmware/protocolV2Release.d.ts +33 -0
  262. package/dist/api/firmware/protocolV2Release.d.ts.map +1 -0
  263. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  264. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  265. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  266. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  267. package/dist/api/helpers/base64Data.d.ts +16 -0
  268. package/dist/api/helpers/base64Data.d.ts.map +1 -0
  269. package/dist/api/helpers/filesystemValidation.d.ts +3 -0
  270. package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
  271. package/dist/api/helpers/paramsValidator.d.ts +1 -0
  272. package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
  273. package/dist/api/helpers/protocolV2FileWrite.d.ts +11 -0
  274. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  275. package/dist/api/index.d.ts +5 -29
  276. package/dist/api/index.d.ts.map +1 -1
  277. package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
  278. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
  279. package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -1
  280. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  281. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  282. package/dist/api/lightning/LnurlAuth.d.ts +0 -4
  283. package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
  284. package/dist/api/near/NearGetAddress.d.ts +1 -0
  285. package/dist/api/near/NearGetAddress.d.ts.map +1 -1
  286. package/dist/api/near/NearSignTransaction.d.ts +1 -0
  287. package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
  288. package/dist/api/nem/NEMGetAddress.d.ts +1 -0
  289. package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
  290. package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
  291. package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
  292. package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
  293. package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
  294. package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
  295. package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
  296. package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
  297. package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
  298. package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
  299. package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
  300. package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
  301. package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
  302. package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
  303. package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
  304. package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
  305. package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
  306. package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
  307. package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
  308. package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
  309. package/dist/api/polkadot/PolkadotGetAddress.d.ts +2 -1
  310. package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
  311. package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
  312. package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
  313. package/dist/api/polkadot/networks.d.ts +1 -1
  314. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +1 -0
  315. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -1
  316. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +1 -0
  317. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -1
  318. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +4 -1
  319. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  320. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -0
  321. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  322. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +2 -1
  323. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
  324. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +2 -2
  325. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -1
  326. package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
  327. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  328. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +1 -0
  329. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -1
  330. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +30 -0
  331. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  332. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +3 -3
  333. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
  334. package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
  335. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  336. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +1 -0
  337. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -1
  338. package/dist/api/protocol-v2/Ping.d.ts +3 -0
  339. package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
  340. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +1 -0
  341. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  342. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  343. package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
  344. package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
  345. package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
  346. package/dist/api/solana/SolGetAddress.d.ts +1 -0
  347. package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
  348. package/dist/api/solana/SolSignMessage.d.ts +2 -1
  349. package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
  350. package/dist/api/solana/SolSignOffchainMessage.d.ts +2 -1
  351. package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
  352. package/dist/api/solana/SolSignTransaction.d.ts +3 -2
  353. package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
  354. package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
  355. package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
  356. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
  357. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
  358. package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
  359. package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
  360. package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
  361. package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
  362. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
  363. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
  364. package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
  365. package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
  366. package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
  367. package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
  368. package/dist/api/sui/SuiGetAddress.d.ts +2 -1
  369. package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
  370. package/dist/api/sui/SuiGetPublicKey.d.ts +2 -1
  371. package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
  372. package/dist/api/sui/SuiSignMessage.d.ts +2 -1
  373. package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
  374. package/dist/api/sui/SuiSignTransaction.d.ts +2 -1
  375. package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
  376. package/dist/api/ton/TonGetAddress.d.ts +2 -1
  377. package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
  378. package/dist/api/ton/TonSignData.d.ts +1 -0
  379. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  380. package/dist/api/ton/TonSignMessage.d.ts +2 -1
  381. package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
  382. package/dist/api/ton/TonSignProof.d.ts +2 -1
  383. package/dist/api/ton/TonSignProof.d.ts.map +1 -1
  384. package/dist/api/tron/TronGetAddress.d.ts +1 -0
  385. package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
  386. package/dist/api/tron/TronSignMessage.d.ts +6 -1
  387. package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
  388. package/dist/api/tron/TronSignTransaction.d.ts +2 -1
  389. package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
  390. package/dist/api/utils.d.ts +4 -1
  391. package/dist/api/utils.d.ts.map +1 -1
  392. package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
  393. package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
  394. package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
  395. package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
  396. package/dist/constants/index.d.ts +1 -1
  397. package/dist/constants/index.d.ts.map +1 -1
  398. package/dist/core/RequestQueue.d.ts +0 -2
  399. package/dist/core/RequestQueue.d.ts.map +1 -1
  400. package/dist/core/deviceEventRegistration.d.ts +13 -0
  401. package/dist/core/deviceEventRegistration.d.ts.map +1 -0
  402. package/dist/core/index.d.ts +6 -3
  403. package/dist/core/index.d.ts.map +1 -1
  404. package/dist/core/uiPromiseRegistry.d.ts +6 -0
  405. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  406. package/dist/data-manager/DataManager.d.ts +14 -5
  407. package/dist/data-manager/DataManager.d.ts.map +1 -1
  408. package/dist/data-manager/TransportManager.d.ts.map +1 -1
  409. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  410. package/dist/device/Device.d.ts +78 -16
  411. package/dist/device/Device.d.ts.map +1 -1
  412. package/dist/device/DeviceCommands.d.ts +8 -6
  413. package/dist/device/DeviceCommands.d.ts.map +1 -1
  414. package/dist/device/DeviceConnector.d.ts +4 -3
  415. package/dist/device/DeviceConnector.d.ts.map +1 -1
  416. package/dist/device/DeviceFeaturesState.d.ts +3 -0
  417. package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
  418. package/dist/device/DevicePool.d.ts +6 -2
  419. package/dist/device/DevicePool.d.ts.map +1 -1
  420. package/dist/device/DeviceStateMapper.d.ts +13 -0
  421. package/dist/device/DeviceStateMapper.d.ts.map +1 -0
  422. package/dist/device/DeviceStateProjector.d.ts +7 -0
  423. package/dist/device/DeviceStateProjector.d.ts.map +1 -0
  424. package/dist/device/DeviceStateStore.d.ts +21 -0
  425. package/dist/device/DeviceStateStore.d.ts.map +1 -0
  426. package/dist/device/DeviceWalletSessionStore.d.ts +13 -1
  427. package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -1
  428. package/dist/device/cloneDeviceState.d.ts +2 -0
  429. package/dist/device/cloneDeviceState.d.ts.map +1 -0
  430. package/dist/device/deviceIdentity.d.ts +5 -0
  431. package/dist/device/deviceIdentity.d.ts.map +1 -0
  432. package/dist/deviceProfile/buildDeviceFeatures.d.ts +8 -2
  433. package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
  434. package/dist/deviceProfile/index.d.ts +0 -1
  435. package/dist/deviceProfile/index.d.ts.map +1 -1
  436. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts +7 -0
  437. package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -0
  438. package/dist/events/call.d.ts +0 -7
  439. package/dist/events/call.d.ts.map +1 -1
  440. package/dist/events/core.d.ts +2 -2
  441. package/dist/events/core.d.ts.map +1 -1
  442. package/dist/events/device.d.ts +16 -2
  443. package/dist/events/device.d.ts.map +1 -1
  444. package/dist/events/iframe.d.ts +0 -1
  445. package/dist/events/iframe.d.ts.map +1 -1
  446. package/dist/events/logBlockEvent.d.ts +2 -0
  447. package/dist/events/logBlockEvent.d.ts.map +1 -1
  448. package/dist/events/ui-promise.d.ts +4 -2
  449. package/dist/events/ui-promise.d.ts.map +1 -1
  450. package/dist/events/ui-request.d.ts +50 -4
  451. package/dist/events/ui-request.d.ts.map +1 -1
  452. package/dist/events/ui-response.d.ts +10 -2
  453. package/dist/events/ui-response.d.ts.map +1 -1
  454. package/dist/index.d.ts +1765 -829
  455. package/dist/index.d.ts.map +1 -1
  456. package/dist/index.js +11666 -4647
  457. package/dist/inject.d.ts +7 -3
  458. package/dist/inject.d.ts.map +1 -1
  459. package/dist/lowLevelInject.d.ts +1 -2
  460. package/dist/lowLevelInject.d.ts.map +1 -1
  461. package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
  462. package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
  463. package/dist/protocols/protocol-v2/features.d.ts +33 -22
  464. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  465. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  466. package/dist/protocols/protocol-v2/index.d.ts +2 -2
  467. package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
  468. package/dist/protocols/protocol-v2/resources.d.ts +12 -0
  469. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  470. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +17 -0
  471. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
  472. package/dist/protocols/protocol-v2/uiInteraction.d.ts +42 -0
  473. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
  474. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +2 -0
  475. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
  476. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  477. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  478. package/dist/protocols/protocol-v2/walletSession.d.ts +18 -4
  479. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  480. package/dist/topLevelInject.d.ts.map +1 -1
  481. package/dist/types/api/checkAllFirmwareRelease.d.ts +48 -9
  482. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  483. package/dist/types/api/checkBLEFirmwareRelease.d.ts +2 -13
  484. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
  485. package/dist/types/api/checkBootloaderRelease.d.ts +2 -6
  486. package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
  487. package/dist/types/api/checkFirmwareRelease.d.ts +2 -13
  488. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
  489. package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
  490. package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
  491. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  492. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  493. package/dist/types/api/deviceSettings.d.ts +11 -2
  494. package/dist/types/api/deviceSettings.d.ts.map +1 -1
  495. package/dist/types/api/deviceUnlock.d.ts +6 -2
  496. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  497. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  498. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  499. package/dist/types/api/export.d.ts +8 -3
  500. package/dist/types/api/export.d.ts.map +1 -1
  501. package/dist/types/api/firmwareUpdate.d.ts +67 -5
  502. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  503. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  504. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  505. package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
  506. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  507. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  508. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  509. package/dist/types/api/getDeviceState.d.ts +12 -0
  510. package/dist/types/api/getDeviceState.d.ts.map +1 -0
  511. package/dist/types/api/getFeatures.d.ts.map +1 -1
  512. package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
  513. package/dist/types/api/getPassphraseState.d.ts.map +1 -1
  514. package/dist/types/api/index.d.ts +25 -35
  515. package/dist/types/api/index.d.ts.map +1 -1
  516. package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
  517. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  518. package/dist/types/api/openWalletSession.d.ts +35 -0
  519. package/dist/types/api/openWalletSession.d.ts.map +1 -0
  520. package/dist/types/api/protocolV2.d.ts +11 -93
  521. package/dist/types/api/protocolV2.d.ts.map +1 -1
  522. package/dist/types/api/sessionCache.d.ts +4 -1
  523. package/dist/types/api/sessionCache.d.ts.map +1 -1
  524. package/dist/types/device.d.ts +139 -8
  525. package/dist/types/device.d.ts.map +1 -1
  526. package/dist/types/params.d.ts +1 -0
  527. package/dist/types/params.d.ts.map +1 -1
  528. package/dist/types/settings.d.ts +44 -16
  529. package/dist/types/settings.d.ts.map +1 -1
  530. package/dist/utils/assets.d.ts +2 -1
  531. package/dist/utils/assets.d.ts.map +1 -1
  532. package/dist/utils/deviceFeaturesCompat.d.ts +14 -0
  533. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
  534. package/dist/utils/deviceFeaturesUtils.d.ts +10 -1
  535. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  536. package/dist/utils/deviceInfoUtils.d.ts +9 -9
  537. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  538. package/dist/utils/deviceSettings.d.ts +39 -7
  539. package/dist/utils/deviceSettings.d.ts.map +1 -1
  540. package/dist/utils/deviceVersionUtils.d.ts +7 -5
  541. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  542. package/dist/utils/homescreen.d.ts +4 -0
  543. package/dist/utils/homescreen.d.ts.map +1 -1
  544. package/dist/utils/index.d.ts +5 -4
  545. package/dist/utils/index.d.ts.map +1 -1
  546. package/dist/utils/networkUtils.d.ts +10 -1
  547. package/dist/utils/networkUtils.d.ts.map +1 -1
  548. package/dist/utils/patch.d.ts +1 -1
  549. package/dist/utils/patch.d.ts.map +1 -1
  550. package/dist/utils/pro2Nft.d.ts +38 -0
  551. package/dist/utils/pro2Nft.d.ts.map +1 -0
  552. package/dist/utils/pro2Wallpaper.d.ts +10 -0
  553. package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
  554. package/dist/utils/tracing.d.ts.map +1 -1
  555. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  556. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  557. package/package.json +6 -4
  558. package/src/api/BaseMethod.ts +45 -23
  559. package/src/api/CheckAllFirmwareRelease.ts +440 -4
  560. package/src/api/CheckBLEFirmwareRelease.ts +37 -5
  561. package/src/api/CheckBootloaderRelease.ts +37 -5
  562. package/src/api/CheckFirmwareRelease.ts +36 -9
  563. package/src/api/CipherKeyValue.ts +4 -0
  564. package/src/api/ClearSessionCache.ts +4 -0
  565. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  566. package/src/api/DirList.ts +9 -4
  567. package/src/api/DirMake.ts +7 -4
  568. package/src/api/DirRemove.ts +7 -4
  569. package/src/api/FileDelete.ts +7 -4
  570. package/src/api/FileRead.ts +13 -7
  571. package/src/api/FileWrite.ts +7 -4
  572. package/src/api/FirmwareUpdate.ts +30 -15
  573. package/src/api/FirmwareUpdateV2.ts +535 -169
  574. package/src/api/FirmwareUpdateV3.ts +349 -91
  575. package/src/api/FirmwareUpdateV4.ts +2274 -710
  576. package/src/api/GetDeviceState.ts +59 -0
  577. package/src/api/GetFeatures.ts +6 -4
  578. package/src/api/GetOnekeyFeatures.ts +1 -75
  579. package/src/api/GetPassphraseState.ts +36 -12
  580. package/src/api/OpenWalletSession.ts +268 -0
  581. package/src/api/PathInfo.ts +9 -4
  582. package/src/api/PromptWebDeviceAccess.ts +2 -7
  583. package/src/api/SearchDevices.ts +35 -5
  584. package/src/api/UploadPortfolio.ts +30 -4
  585. package/src/api/alephium/AlephiumGetAddress.ts +0 -4
  586. package/src/api/alephium/AlephiumSignMessage.ts +0 -4
  587. package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
  588. package/src/api/algo/AlgoGetAddress.ts +4 -0
  589. package/src/api/algo/AlgoSignTransaction.ts +4 -0
  590. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  591. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +45 -32
  592. package/src/api/aptos/AptosGetAddress.ts +4 -0
  593. package/src/api/aptos/AptosGetPublicKey.ts +4 -0
  594. package/src/api/aptos/AptosSignInMessage.ts +4 -0
  595. package/src/api/aptos/AptosSignMessage.ts +4 -0
  596. package/src/api/aptos/AptosSignTransaction.ts +4 -0
  597. package/src/api/benfen/BenfenGetAddress.ts +11 -7
  598. package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
  599. package/src/api/benfen/BenfenSignMessage.ts +0 -4
  600. package/src/api/benfen/BenfenSignTransaction.ts +0 -4
  601. package/src/api/btc/BTCGetAddress.ts +8 -1
  602. package/src/api/btc/BTCGetPublicKey.ts +9 -2
  603. package/src/api/btc/BTCSignMessage.ts +8 -1
  604. package/src/api/btc/BTCSignPsbt.ts +4 -0
  605. package/src/api/btc/BTCSignTransaction.ts +8 -1
  606. package/src/api/btc/BTCVerifyMessage.ts +8 -1
  607. package/src/api/btc/helpers/versionLimit.ts +7 -4
  608. package/src/api/cardano/CardanoGetAddress.ts +4 -0
  609. package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
  610. package/src/api/cardano/CardanoSignMessage.ts +4 -0
  611. package/src/api/cardano/CardanoSignTransaction.ts +4 -0
  612. package/src/api/conflux/ConfluxGetAddress.ts +6 -0
  613. package/src/api/conflux/ConfluxSignMessage.ts +6 -0
  614. package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
  615. package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
  616. package/src/api/cosmos/CosmosGetAddress.ts +4 -0
  617. package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
  618. package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
  619. package/src/api/device/DeviceCancel.ts +5 -0
  620. package/src/api/device/DeviceChangePin.ts +31 -0
  621. package/src/api/device/DeviceFullyUploadResource.ts +4 -5
  622. package/src/api/device/DeviceLock.ts +5 -0
  623. package/src/api/device/DeviceRebootToBoardloader.ts +5 -0
  624. package/src/api/device/DeviceRebootToBootloader.ts +5 -0
  625. package/src/api/device/DeviceSettings.ts +211 -3
  626. package/src/api/device/DeviceSupportFeatures.ts +4 -0
  627. package/src/api/device/DeviceUnlock.ts +21 -3
  628. package/src/api/device/DeviceUpdateBootloader.ts +152 -8
  629. package/src/api/device/DeviceVerify.ts +25 -0
  630. package/src/api/device/DeviceWipe.ts +28 -0
  631. package/src/api/device/PreInitialize.ts +4 -0
  632. package/src/api/dynex/DnxGetAddress.ts +0 -6
  633. package/src/api/dynex/DnxSignTransaction.ts +0 -6
  634. package/src/api/evm/EVMGetAddress.ts +6 -2
  635. package/src/api/evm/EVMGetPublicKey.ts +6 -2
  636. package/src/api/evm/EVMSignMessage.ts +6 -2
  637. package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
  638. package/src/api/evm/EVMSignTransaction.ts +6 -2
  639. package/src/api/evm/EVMSignTypedData.ts +42 -50
  640. package/src/api/evm/EVMVerifyMessage.ts +6 -2
  641. package/src/api/evm/legacyV1/getAddress.ts +2 -2
  642. package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
  643. package/src/api/evm/legacyV1/signMessage.ts +2 -2
  644. package/src/api/evm/legacyV1/signTypedData.ts +2 -2
  645. package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
  646. package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
  647. package/src/api/evm/protocol.ts +6 -0
  648. package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
  649. package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
  650. package/src/api/firmware/FirmwareArtifactSource.ts +305 -0
  651. package/src/api/firmware/FirmwareHostBinding.ts +123 -0
  652. package/src/api/firmware/FirmwareMemoryHost.ts +143 -0
  653. package/src/api/firmware/FirmwarePreparationError.ts +12 -0
  654. package/src/api/firmware/FirmwarePreparedResourceArchive.ts +196 -0
  655. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +214 -77
  656. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  657. package/src/api/firmware/FirmwareUpdatePlan.ts +946 -0
  658. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +486 -0
  659. package/src/api/firmware/getBinary.ts +8 -3
  660. package/src/api/firmware/protocolV2Release.ts +173 -0
  661. package/src/api/firmware/updateBootloader.ts +19 -4
  662. package/src/api/firmware/uploadFirmware.ts +157 -26
  663. package/src/api/helpers/base64Data.ts +85 -0
  664. package/src/api/helpers/batchGetPublickeys.ts +2 -2
  665. package/src/api/helpers/filesystemValidation.ts +61 -0
  666. package/src/api/helpers/paramsValidator.ts +1 -1
  667. package/src/api/helpers/protocolV2FileWrite.ts +266 -42
  668. package/src/api/index.ts +6 -30
  669. package/src/api/kaspa/KaspaGetAddress.ts +7 -0
  670. package/src/api/kaspa/KaspaSignTransaction.ts +369 -29
  671. package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
  672. package/src/api/lightning/LnurlAuth.ts +0 -4
  673. package/src/api/near/NearGetAddress.ts +4 -0
  674. package/src/api/near/NearSignTransaction.ts +4 -0
  675. package/src/api/nem/NEMGetAddress.ts +4 -0
  676. package/src/api/nem/NEMSignTransaction.ts +4 -0
  677. package/src/api/neo/NeoGetAddress.ts +0 -4
  678. package/src/api/neo/NeoSignTransaction.ts +0 -4
  679. package/src/api/nervos/NervosGetAddress.ts +0 -4
  680. package/src/api/nervos/NervosSignTransaction.ts +2 -6
  681. package/src/api/nexa/NexaGetAddress.ts +0 -4
  682. package/src/api/nexa/NexaSignTransaction.ts +3 -5
  683. package/src/api/nostr/NostrDecryptMessage.ts +4 -0
  684. package/src/api/nostr/NostrEncryptMessage.ts +4 -0
  685. package/src/api/nostr/NostrGetPublicKey.ts +4 -0
  686. package/src/api/nostr/NostrSignEvent.ts +4 -0
  687. package/src/api/nostr/NostrSignSchnorr.ts +4 -0
  688. package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
  689. package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
  690. package/src/api/polkadot/networks.ts +3 -3
  691. package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +5 -2
  692. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +6 -3
  693. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +13 -32
  694. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +10 -6
  695. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +6 -3
  696. package/src/api/protocol-v2/DeviceInfoGet.ts +11 -18
  697. package/src/api/protocol-v2/DeviceReboot.ts +7 -3
  698. package/src/api/protocol-v2/DeviceStatusGet.ts +6 -1
  699. package/src/api/protocol-v2/DeviceUploadNft.ts +245 -0
  700. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +55 -21
  701. package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
  702. package/src/api/protocol-v2/FilesystemPermissionFix.ts +5 -2
  703. package/src/api/protocol-v2/Ping.ts +37 -3
  704. package/src/api/protocol-v2/ProtocolInfoRequest.ts +8 -3
  705. package/src/api/protocol-v2/helpers.ts +1 -1
  706. package/src/api/scdo/ScdoGetAddress.ts +0 -4
  707. package/src/api/scdo/ScdoSignMessage.ts +0 -4
  708. package/src/api/scdo/ScdoSignTransaction.ts +0 -4
  709. package/src/api/solana/SolGetAddress.ts +4 -0
  710. package/src/api/solana/SolSignMessage.ts +5 -1
  711. package/src/api/solana/SolSignOffchainMessage.ts +5 -1
  712. package/src/api/solana/SolSignTransaction.ts +6 -2
  713. package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
  714. package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
  715. package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
  716. package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
  717. package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
  718. package/src/api/stellar/StellarGetAddress.ts +1 -10
  719. package/src/api/stellar/StellarSignTransaction.ts +1 -14
  720. package/src/api/sui/SuiGetAddress.ts +5 -1
  721. package/src/api/sui/SuiGetPublicKey.ts +5 -1
  722. package/src/api/sui/SuiSignMessage.ts +5 -1
  723. package/src/api/sui/SuiSignTransaction.ts +5 -1
  724. package/src/api/ton/TonGetAddress.ts +5 -1
  725. package/src/api/ton/TonSignData.ts +5 -1
  726. package/src/api/ton/TonSignMessage.ts +10 -4
  727. package/src/api/ton/TonSignProof.ts +5 -1
  728. package/src/api/tron/TronGetAddress.ts +4 -0
  729. package/src/api/tron/TronSignMessage.ts +19 -8
  730. package/src/api/tron/TronSignTransaction.ts +5 -1
  731. package/src/api/utils.ts +32 -3
  732. package/src/api/xrp/XrpGetAddress.ts +4 -0
  733. package/src/api/xrp/XrpSignTransaction.ts +5 -1
  734. package/src/constants/index.ts +1 -4
  735. package/src/core/RequestQueue.ts +0 -18
  736. package/src/core/deviceEventRegistration.ts +27 -0
  737. package/src/core/index.ts +469 -186
  738. package/src/core/uiPromiseRegistry.ts +63 -0
  739. package/src/data/messages/messages-protocol-v2.json +523 -449
  740. package/src/data/messages/messages.json +286 -1
  741. package/src/data-manager/DataManager.ts +162 -44
  742. package/src/data-manager/TransportManager.ts +7 -1
  743. package/src/data-manager/connectSettings.ts +11 -0
  744. package/src/device/Device.ts +912 -269
  745. package/src/device/DeviceCommands.ts +197 -161
  746. package/src/device/DeviceConnector.ts +51 -21
  747. package/src/device/DeviceFeaturesState.ts +25 -0
  748. package/src/device/DevicePool.ts +105 -23
  749. package/src/device/DeviceStateMapper.ts +422 -0
  750. package/src/device/DeviceStateProjector.ts +152 -0
  751. package/src/device/DeviceStateStore.ts +232 -0
  752. package/src/device/DeviceWalletSessionStore.ts +72 -6
  753. package/src/device/cloneDeviceState.ts +39 -0
  754. package/src/device/deviceIdentity.ts +18 -0
  755. package/src/deviceProfile/buildDeviceFeatures.ts +209 -191
  756. package/src/deviceProfile/index.ts +0 -1
  757. package/src/deviceProfile/protocolV2DeviceIdentity.ts +35 -0
  758. package/src/events/call.ts +0 -6
  759. package/src/events/core.ts +0 -2
  760. package/src/events/device.ts +22 -1
  761. package/src/events/iframe.ts +0 -1
  762. package/src/events/logBlockEvent.ts +93 -2
  763. package/src/events/ui-promise.ts +4 -2
  764. package/src/events/ui-request.ts +61 -4
  765. package/src/events/ui-response.ts +12 -2
  766. package/src/index.ts +17 -4
  767. package/src/inject.ts +89 -55
  768. package/src/lowLevelInject.ts +11 -7
  769. package/src/protocols/protocol-v2/deviceSession.ts +24 -0
  770. package/src/protocols/protocol-v2/features.ts +118 -52
  771. package/src/protocols/protocol-v2/firmware.ts +3 -1
  772. package/src/protocols/protocol-v2/index.ts +9 -3
  773. package/src/protocols/protocol-v2/resources.ts +171 -0
  774. package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
  775. package/src/protocols/protocol-v2/uiInteraction.ts +250 -0
  776. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -0
  777. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +136 -0
  778. package/src/protocols/protocol-v2/walletSession.ts +417 -61
  779. package/src/topLevelInject.ts +11 -6
  780. package/src/types/api/checkAllFirmwareRelease.ts +72 -9
  781. package/src/types/api/checkBLEFirmwareRelease.ts +4 -13
  782. package/src/types/api/checkBootloaderRelease.ts +2 -6
  783. package/src/types/api/checkFirmwareRelease.ts +2 -13
  784. package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
  785. package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
  786. package/src/types/api/deviceSettings.ts +26 -2
  787. package/src/types/api/deviceUnlock.ts +13 -2
  788. package/src/types/api/deviceUpdateBootloader.ts +7 -0
  789. package/src/types/api/export.ts +33 -1
  790. package/src/types/api/firmwareUpdate.ts +85 -11
  791. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  792. package/src/types/api/firmwareUpdatePlan.ts +38 -0
  793. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  794. package/src/types/api/getDeviceState.ts +19 -0
  795. package/src/types/api/getFeatures.ts +3 -0
  796. package/src/types/api/getOnekeyFeatures.ts +3 -0
  797. package/src/types/api/getPassphraseState.ts +7 -0
  798. package/src/types/api/index.ts +43 -73
  799. package/src/types/api/kaspaSignTransaction.ts +60 -4
  800. package/src/types/api/openWalletSession.ts +54 -0
  801. package/src/types/api/protocolV2.ts +23 -188
  802. package/src/types/api/sessionCache.ts +9 -4
  803. package/src/types/device.ts +211 -9
  804. package/src/types/params.ts +9 -2
  805. package/src/types/settings.ts +52 -25
  806. package/src/utils/assets.ts +4 -1
  807. package/src/utils/deviceFeaturesCompat.ts +191 -0
  808. package/src/utils/deviceFeaturesUtils.ts +42 -9
  809. package/src/utils/deviceInfoUtils.ts +29 -69
  810. package/src/utils/deviceSettings.ts +181 -39
  811. package/src/utils/deviceVersionUtils.ts +25 -44
  812. package/src/utils/findDefectiveBatchDevice.ts +3 -3
  813. package/src/utils/homescreen.ts +40 -0
  814. package/src/utils/index.ts +26 -7
  815. package/src/utils/networkUtils.ts +274 -16
  816. package/src/utils/pro2Nft.ts +165 -0
  817. package/src/utils/pro2Wallpaper.ts +44 -25
  818. package/src/utils/tracing.ts +3 -1
  819. package/src/utils/uiProgressThrottle.ts +63 -0
  820. package/tsconfig.type-tests.json +12 -0
  821. package/__tests__/RequestQueue.test.ts +0 -34
  822. package/dist/api/GetDeviceInfo.d.ts +0 -9
  823. package/dist/api/GetDeviceInfo.d.ts.map +0 -1
  824. package/dist/api/firmware/progressThrottle.d.ts +0 -3
  825. package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
  826. package/dist/api/protocol-v2/DeviceSessionGet.d.ts +0 -6
  827. package/dist/api/protocol-v2/DeviceSessionGet.d.ts.map +0 -1
  828. package/dist/api/protocol-v2/DeviceSettingsGet.d.ts +0 -6
  829. package/dist/api/protocol-v2/DeviceSettingsGet.d.ts.map +0 -1
  830. package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts +0 -16
  831. package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts.map +0 -1
  832. package/dist/api/protocol-v2/DeviceSettingsSet.d.ts +0 -12
  833. package/dist/api/protocol-v2/DeviceSettingsSet.d.ts.map +0 -1
  834. package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
  835. package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
  836. package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
  837. package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
  838. package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -9
  839. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
  840. package/dist/types/api/getDeviceInfo.d.ts +0 -87
  841. package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
  842. package/src/api/GetDeviceInfo.ts +0 -145
  843. package/src/api/firmware/progressThrottle.ts +0 -44
  844. package/src/api/protocol-v2/DeviceSessionGet.ts +0 -15
  845. package/src/api/protocol-v2/DeviceSettingsGet.ts +0 -16
  846. package/src/api/protocol-v2/DeviceSettingsPageShow.ts +0 -59
  847. package/src/api/protocol-v2/DeviceSettingsSet.ts +0 -39
  848. package/src/deviceProfile/buildDeviceProfile.ts +0 -354
  849. package/src/protocols/protocol-v2/lockedError.ts +0 -10
  850. package/src/protocols/protocol-v2/unlockRetry.ts +0 -36
  851. package/src/types/api/getDeviceInfo.ts +0 -101
package/src/core/index.ts CHANGED
@@ -1,7 +1,13 @@
1
1
  import semver from 'semver';
2
2
  import EventEmitter from 'events';
3
+ import {
4
+ DeviceSessionPinType,
5
+ TRANSPORT_EVENT,
6
+ isProtocolV2LinkDisabledError,
7
+ } from '@onekeyfe/hd-transport';
3
8
  import {
4
9
  ERRORS,
10
+ ERROR_CODES_REQUIRE_DISCONNECT,
5
11
  ERROR_CODES_REQUIRE_RELEASE,
6
12
  HardwareError,
7
13
  HardwareErrorCode,
@@ -14,14 +20,7 @@ import {
14
20
  createNewFirmwareUnReleaseHardwareError,
15
21
  } from '@onekeyfe/hd-shared';
16
22
 
17
- import {
18
- LoggerNames,
19
- enableLog,
20
- getLogger,
21
- isMethodVersionRangeUnsupported,
22
- setLoggerPostMessage,
23
- wait,
24
- } from '../utils';
23
+ import { LoggerNames, enableLog, getLogger, setLoggerPostMessage, wait } from '../utils';
25
24
  import {
26
25
  findDefectiveBatchDevice,
27
26
  getDefectiveDeviceInfo,
@@ -32,10 +31,12 @@ import {
32
31
  createRequestContext,
33
32
  createSdkTracingContext,
34
33
  formatRequestContext,
34
+ generateInstanceId,
35
35
  getActiveRequestsByDeviceInstance,
36
36
  updateRequestContext,
37
37
  } from '../utils/tracing';
38
38
  import { Device } from '../device/Device';
39
+ import { checkLiveDeviceId } from '../device/deviceIdentity';
39
40
  import { DeviceList } from '../device/DeviceList';
40
41
  import { DevicePool } from '../device/DevicePool';
41
42
  import { PollingStateManager } from './PollingStateManager';
@@ -51,23 +52,38 @@ import {
51
52
  createDeviceMessage,
52
53
  createResponseMessage,
53
54
  createUiMessage,
55
+ formatLogMethodLabel,
56
+ getLogBlockLabel,
57
+ getSafeLogPayload,
54
58
  } from '../events';
55
59
  import TransportManager from '../data-manager/TransportManager';
56
60
  import DeviceConnector from '../device/DeviceConnector';
57
61
  import RequestQueue from './RequestQueue';
62
+ import { consumeUiPromise, findUiPromiseForResponse, rejectUiPromises } from './uiPromiseRegistry';
63
+ import { registerHardwareUiEventListeners } from './deviceEventRegistration';
58
64
  import { getSynchronize } from '../utils/getSynchronize';
59
- import { runMethodWithUnlockRetry } from '../protocols/protocol-v2/unlockRetry';
65
+ import { runMethodWithUnlockPolicy } from '../protocols/protocol-v2/unlockPolicyRunner';
66
+ import {
67
+ ProtocolV2UiInteractionCoordinator,
68
+ isProtocolV2UiEnabled,
69
+ } from '../protocols/protocol-v2/uiInteraction';
70
+ import { createUiProgressMessageFilter } from '../utils/uiProgressThrottle';
60
71
 
61
72
  import type { ConnectSettings, Features, KnownDevice } from '../types';
62
73
  import type { CoreMessage, IFrameCallMessage, UiPromise, UiPromiseResponse } from '../events';
63
74
  import type { DeviceEvents, InitOptions, RunOptions } from '../device/Device';
64
75
  import type { SdkTracingContext } from '../utils/tracing';
65
76
  import type { Deferred } from '@onekeyfe/hd-shared';
66
- import type { LowlevelTransportSharedPlugin, OneKeyDeviceInfo } from '@onekeyfe/hd-transport';
77
+ import type {
78
+ LowlevelTransportSharedPlugin,
79
+ OneKeyDeviceInfo,
80
+ TransportDeviceDisconnectEvent,
81
+ } from '@onekeyfe/hd-transport';
67
82
  import type { BaseMethod } from '../api/BaseMethod';
68
83
 
69
84
  const Log = getLogger(LoggerNames.Core);
70
85
  const PRE_INITIALIZE_TTL_MS = 60 * 1000;
86
+ const PRE_PENDING_CALL_TIMEOUT_MS = 15 * 1000;
71
87
 
72
88
  // Dedup/coalesce state for "pre-warm signal" methods (isPreWarmSignal),
73
89
  // keyed by getPreWarmKey(): coalesce in-flight, skip if warmed within TTL.
@@ -92,14 +108,15 @@ function hasDeriveCardano(method: BaseMethod): boolean {
92
108
 
93
109
  const parseInitOptions = (method?: BaseMethod): InitOptions => ({
94
110
  initSession: method?.payload.initSession,
95
- passphraseState: method?.payload.passphraseState,
111
+ passphraseState: method?.payload.useEmptyPassphrase ? undefined : method?.payload.passphraseState,
96
112
  deviceId: method?.payload.deviceId,
97
113
  deriveCardano: method && hasDeriveCardano(method),
98
114
  connectProtocol: method?.payload.connectProtocol,
115
+ forceProtocolDetection: method?.payload.forceProtocolDetection,
99
116
  protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
100
117
  });
101
118
 
102
- let _core: Core;
119
+ let _core: Core | undefined;
103
120
  let _deviceList: DeviceList | undefined;
104
121
  let _connector: DeviceConnector | undefined;
105
122
  let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
@@ -124,6 +141,9 @@ const toError = (error: unknown): Error | undefined => {
124
141
  }
125
142
  };
126
143
 
144
+ const isExpectedCompatibilityError = (error: unknown) =>
145
+ error instanceof HardwareError && error.errorCode === HardwareErrorCode.DeviceNotSupportMethod;
146
+
127
147
  const updateMethodRequestContext = (method: BaseMethod, updates: any) => {
128
148
  if (method.requestContext) {
129
149
  updateRequestContext(method.requestContext.responseID, updates);
@@ -143,11 +163,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
143
163
  }
144
164
 
145
165
  // find api method
146
- let method: BaseMethod;
166
+ let method!: BaseMethod;
147
167
  try {
148
168
  method = findMethod(message as IFrameCallMessage);
149
169
  method.connector = _connector;
150
- method.postMessage = postMessage;
170
+ const shouldPostMessage = createUiProgressMessageFilter();
171
+ method.postMessage = event => {
172
+ if (shouldPostMessage(event)) {
173
+ postMessage(event);
174
+ }
175
+ };
151
176
  method.setContext?.(context);
152
177
 
153
178
  method.requestContext = createRequestContext(method.responseID, method.name, {
@@ -159,11 +184,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
159
184
 
160
185
  method.init();
161
186
  } catch (error) {
162
- return Promise.reject(error);
187
+ if (method) {
188
+ completeMethodRequestContext(method, error);
189
+ method.dispose();
190
+ }
191
+ return createResponseMessage(method?.responseID ?? message.id, false, { error });
163
192
  }
164
193
 
165
- DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
166
-
167
194
  if (!method.useDevice) {
168
195
  updateMethodRequestContext(method, { status: 'running' });
169
196
  try {
@@ -270,26 +297,35 @@ const handlePreWarmSignal = async (
270
297
  }
271
298
  };
272
299
 
273
- const waitWithTimeout = async (promise: Promise<any>, timeout: number) => {
274
- const timeoutPromise = new Promise((_, reject) => {
275
- setTimeout(() => reject(new Error('Request timeout')), timeout);
276
- });
277
- return Promise.race([promise, timeoutPromise]);
278
- };
279
-
280
300
  const waitForPendingPromise = async (
281
- getPrePendingCallPromise: () => Promise<void> | undefined,
282
- removePrePendingCallPromise?: (promise: Promise<void> | undefined) => void
301
+ connectId: string,
302
+ getPrePendingCallPromise: (connectId: string) => Promise<void> | undefined,
303
+ removePrePendingCallPromise?: (connectId: string, promise: Promise<void>) => void
283
304
  ) => {
284
- const pendingPromise = getPrePendingCallPromise();
305
+ const pendingPromise = getPrePendingCallPromise(connectId);
285
306
  if (pendingPromise) {
286
307
  Log.debug('pre pending call promise before call method, wait for it');
308
+ let timer: ReturnType<typeof setTimeout> | undefined;
309
+ let timedOut = false;
287
310
  try {
288
- await waitWithTimeout(pendingPromise, 5 * 1000);
311
+ await Promise.race([
312
+ pendingPromise,
313
+ new Promise<void>(resolve => {
314
+ timer = setTimeout(() => {
315
+ timedOut = true;
316
+ resolve();
317
+ }, PRE_PENDING_CALL_TIMEOUT_MS);
318
+ }),
319
+ ]);
289
320
  } catch (error) {
290
- // ignore timeout error
321
+ // Cancellation is best-effort; the transport teardown owns recovery.
322
+ } finally {
323
+ if (timer) clearTimeout(timer);
324
+ removePrePendingCallPromise?.(connectId, pendingPromise);
325
+ }
326
+ if (timedOut) {
327
+ Log.warn('pre pending call promise timed out before call method', { connectId });
291
328
  }
292
- removePrePendingCallPromise?.(pendingPromise);
293
329
  Log.debug('pre pending call promise before call method done');
294
330
  }
295
331
  };
@@ -301,7 +337,7 @@ const onCallDevice = async (
301
337
  ): Promise<any> => {
302
338
  let messageResponse: any;
303
339
 
304
- const { requestQueue, getPrePendingCallPromise, setPrePendingCallPromise } = context;
340
+ const { requestQueue, getPrePendingCallPromise, removePrePendingCallPromise } = context;
305
341
 
306
342
  updateMethodRequestContext(method, { status: 'running' });
307
343
 
@@ -329,7 +365,11 @@ const onCallDevice = async (
329
365
  await context.waitForCallbackTasks(method.connectId);
330
366
  }
331
367
 
332
- await waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
368
+ await waitForPendingPromise(
369
+ method.connectId ?? '',
370
+ getPrePendingCallPromise,
371
+ removePrePendingCallPromise
372
+ );
333
373
 
334
374
  const task = requestQueue.createTask(method);
335
375
 
@@ -358,7 +398,7 @@ const onCallDevice = async (
358
398
  );
359
399
  } catch (e) {
360
400
  preWarmCallbackTask?.resolve();
361
- console.log('ensureConnected error: ', e);
401
+ Log.debug('ensureConnected error: ', e);
362
402
 
363
403
  completeMethodRequestContext(method, e);
364
404
 
@@ -395,18 +435,28 @@ const onCallDevice = async (
395
435
  );
396
436
  }
397
437
 
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);
438
+ registerHardwareUiEventListeners(device, {
439
+ pin: onDevicePinHandler,
440
+ pinOnDevice: onEnterPinOnDeviceHandler,
441
+ pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
442
+ button: onDeviceButtonHandler,
443
+ passphrase: message.payload.useEmptyPassphrase
444
+ ? onEmptyPassphraseHandler
445
+ : onDevicePassphraseHandler,
446
+ passphraseOnDevice: onEnterPassphraseOnDeviceHandler,
447
+ attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
448
+ });
405
449
  device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
450
+ device.on(DEVICE.STATE, onDeviceStateHandler);
406
451
  device.on(
407
452
  DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
408
453
  onSelectDeviceInBootloaderForWebDeviceHandler
409
454
  );
455
+
456
+ const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
457
+ let protocolV2Operation = false;
458
+ let protocolV2CloseEmitted = false;
459
+ device.beginProtocolV2UiInteraction();
410
460
  device.on(
411
461
  DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
412
462
  onSelectDeviceForSwitchFirmwareWebDeviceHandler
@@ -418,14 +468,17 @@ const onCallDevice = async (
418
468
  await context.waitForCallbackTasks(method.connectId, preWarmCallbackTask);
419
469
  }
420
470
 
421
- await waitForPendingPromise(getPrePendingCallPromise, setPrePendingCallPromise);
471
+ await waitForPendingPromise(
472
+ method.connectId ?? '',
473
+ getPrePendingCallPromise,
474
+ removePrePendingCallPromise
475
+ );
422
476
 
423
477
  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
- }
478
+ // Protocol is established from an active device response during acquire/initialize.
479
+ // Reject unsupported methods before any method-specific device command is sent.
480
+ method.assertProtocolSupported(device.getProtocol(), device.getCurrentFirmwareType());
481
+ protocolV2Operation = device.isProtocolV2();
429
482
 
430
483
  // check firmware version
431
484
  const versionRange = device.getCurrentMethodVersionRange(
@@ -436,8 +489,8 @@ const onCallDevice = async (
436
489
  const deviceFirmwareType = device.getCurrentFirmwareType();
437
490
  let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
438
491
 
439
- // 故障批次检测与远端强制升级门禁基于 V1 features/remote config
440
- // Pro2(V2) 暂不参与:profile 版的 firmwareStatus 需要 DataManager 支持后再接入。
492
+ // Defective-batch and forced-update gates depend on V1 features/remote config.
493
+ // Pro2 joins after DataManager supports its profile firmwareStatus.
441
494
  if (device.features && !device.isProtocolV2()) {
442
495
  await DataManager.checkAndReloadData();
443
496
 
@@ -485,10 +538,6 @@ const onCallDevice = async (
485
538
  }
486
539
  }
487
540
 
488
- if (isMethodVersionRangeUnsupported(versionRange)) {
489
- throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
490
- }
491
-
492
541
  if (versionRange) {
493
542
  if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
494
543
  if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
@@ -539,89 +588,102 @@ const onCallDevice = async (
539
588
  );
540
589
  }
541
590
 
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();
591
+ try {
592
+ let deviceIdCheckedDuringUnlockPreflight = false;
593
+ const response = await runMethodWithUnlockPolicy<object>(method, device, {
594
+ uiCoordinator: protocolV2UiCoordinator,
595
+ afterStatusBeforeUnlock: () => {
596
+ if (method.deviceId && method.checkDeviceId) {
597
+ if (!device.checkDeviceId(method.deviceId)) {
598
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
599
+ }
600
+ deviceIdCheckedDuringUnlockPreflight = true;
601
+ }
602
+ },
603
+ prepare: async () => {
604
+ if (method.deviceId && method.checkDeviceId && !deviceIdCheckedDuringUnlockPreflight) {
605
+ const isSameDeviceID = await checkLiveDeviceId(device, method.deviceId);
606
+ if (!isSameDeviceID) {
607
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
608
+ }
609
+ }
553
610
 
554
- /**
555
- * check additional supported feature
556
- */
557
- method.checkDeviceSupportFeature();
611
+ /**
612
+ * check firmware release info
613
+ */
614
+ method.checkFirmwareRelease();
558
615
 
559
- // reconfigure messages
560
- if (_deviceList && device.features && !device.isProtocolV2()) {
561
- await TransportManager.reconfigure(device.features);
562
- }
616
+ /**
617
+ * check additional supported feature
618
+ */
619
+ method.checkDeviceSupportFeature();
563
620
 
564
- // Check to see if it is safe to use Passphrase
565
- checkPassphraseEnableState(method, device.features);
621
+ // reconfigure messages
622
+ if (_deviceList && device.features && !device.isProtocolV2()) {
623
+ await TransportManager.reconfigure(device.features);
624
+ }
566
625
 
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,
626
+ // Check to see if it is safe to use Passphrase
627
+ checkPassphraseEnableState(method, device.features);
628
+
629
+ if (shouldCheckPassphraseState(method, device)) {
630
+ // check version
631
+ const support = device.supportNewPassphrase();
632
+ if (!support.support) {
633
+ throw ERRORS.TypedError(
634
+ HardwareErrorCode.DeviceNotSupportPassphrase,
635
+ `Device not support passphrase, please update to ${support.require}`,
636
+ {
637
+ require: support.require,
638
+ }
639
+ );
577
640
  }
578
- )
579
- );
580
- }
581
641
 
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
-
589
- // Double check, handles the special case of Touch/Pro
590
- checkPassphraseEnableState(method, device.features);
642
+ // Check Device passphrase State after the Protocol V2 pre-unlock gate.
643
+ const passphraseStateSafety = await device.checkPassphraseStateSafety(
644
+ method.payload?.passphraseState,
645
+ method.payload?.useEmptyPassphrase,
646
+ method.payload?.skipPassphraseCheck,
647
+ hasDeriveCardano(method)
648
+ );
591
649
 
592
- if (!passphraseStateSafety) {
593
- DevicePool.clearDeviceCache(method.payload.connectId);
594
- return Promise.reject(
595
- ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
596
- );
597
- }
650
+ // Double check, handles the special case of Touch/Pro
651
+ checkPassphraseEnableState(method, device.features);
598
652
 
599
- // close pin popup window
600
- postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
601
- }
653
+ if (!passphraseStateSafety) {
654
+ DevicePool.clearDeviceCache(method.payload.connectId);
655
+ throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
656
+ }
602
657
 
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
- }
658
+ // Protocol V2 emits the PIN phase completion from DeviceSessionAskPin.
659
+ // Keep the legacy compatibility close for Protocol V1 only.
660
+ if (!device.isProtocolV2()) {
661
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
662
+ }
663
+ }
616
664
 
617
- method.device?.commands?.checkDisposed();
665
+ // Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
666
+ try {
667
+ await method.checkSafetyLevelOnTestNet();
668
+ } catch (e) {
669
+ throw e instanceof HardwareError
670
+ ? e
671
+ : ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
672
+ }
618
673
 
619
- try {
620
- const response: object = await runMethodWithUnlockRetry(method, device);
674
+ method.device?.commands?.checkDisposed();
675
+ },
676
+ });
621
677
  messageResponse = createResponseMessage(method.responseID, true, response);
622
678
  requestQueue.resolveRequest(method.responseID, messageResponse);
623
679
  completeMethodRequestContext(method);
624
680
  } catch (error) {
681
+ // Device.run may release the request before transport callbacks finish after a timeout.
682
+ // Ignore the stale callback because the caller already received the connection error.
683
+ if (!requestQueue.getTask(method.responseID)) {
684
+ Log.debug(`Call API - Ignore late inner method result`, error);
685
+ return;
686
+ }
625
687
  Log.debug(`Call API - Inner Method Run Error`, error);
626
688
  messageResponse = createResponseMessage(method.responseID, false, { error });
627
689
  requestQueue.resolveRequest(method.responseID, messageResponse);
@@ -634,6 +696,13 @@ const onCallDevice = async (
634
696
  ) {
635
697
  throw error;
636
698
  }
699
+ } finally {
700
+ if (isProtocolV2UiEnabled(method)) {
701
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
702
+ ensureOperationClose: protocolV2Operation,
703
+ protocolV2Operation,
704
+ });
705
+ }
637
706
  }
638
707
  };
639
708
  Log.debug('Call API - Device Run: ', device.mainId);
@@ -649,7 +718,9 @@ const onCallDevice = async (
649
718
  try {
650
719
  return await task.callPromise.promise;
651
720
  } catch (e) {
652
- Log.debug('Device Run Error: ', e);
721
+ if (!isExpectedCompatibilityError(e)) {
722
+ Log.debug('Device Run Error: ', e);
723
+ }
653
724
  completeMethodRequestContext(method, e);
654
725
  return createResponseMessage(method.responseID, false, { error: e });
655
726
  }
@@ -687,7 +758,17 @@ const onCallDevice = async (
687
758
 
688
759
  requestQueue.releaseTask(method.responseID);
689
760
 
690
- closePopup();
761
+ if (isProtocolV2UiEnabled(method)) {
762
+ if (!protocolV2CloseEmitted && protocolV2Operation) {
763
+ protocolV2CloseEmitted = protocolV2UiCoordinator.close({
764
+ ensureOperationClose: true,
765
+ protocolV2Operation: true,
766
+ });
767
+ }
768
+ if (!protocolV2CloseEmitted) {
769
+ closePopup();
770
+ }
771
+ }
691
772
 
692
773
  cleanup();
693
774
 
@@ -843,14 +924,39 @@ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown)
843
924
  );
844
925
  }
845
926
 
927
+ export function isMissingDetectedProtocolV2Error(method: BaseMethod, error: unknown) {
928
+ const typedError = error as { errorCode?: unknown; message?: unknown };
929
+ return (
930
+ method.payload.connectProtocol === 'V2' &&
931
+ typedError?.errorCode === HardwareErrorCode.RuntimeError &&
932
+ typeof typedError.message === 'string' &&
933
+ typedError.message.includes('Device protocol has not been detected')
934
+ );
935
+ }
936
+
846
937
  /**
847
938
  * If the Bluetooth connection times out, retry up to 6 times
848
939
  * @param retryCount - Current retry count (default 0)
849
940
  */
850
941
  async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
851
942
  try {
852
- await device.acquire(method.payload.connectProtocol);
943
+ if (method.payload.forceProtocolDetection && device.hasDeviceAcquire()) {
944
+ await device.release();
945
+ }
946
+ const shouldAcquire =
947
+ method.payload.forceProtocolDetection ||
948
+ !device.hasDeviceAcquire() ||
949
+ !device.commands ||
950
+ device.commands.disposed;
951
+ if (shouldAcquire) {
952
+ await device.acquire(method.payload.connectProtocol, {
953
+ forceProtocolDetection: method.payload.forceProtocolDetection,
954
+ });
955
+ }
853
956
  if (method.payload?.onlyConnectBleDevice) {
957
+ if (shouldAcquire) {
958
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
959
+ }
854
960
  return;
855
961
  }
856
962
  // Skip initialize if conditions are met
@@ -861,15 +967,35 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
861
967
  passphraseState: initOptions.passphraseState,
862
968
  });
863
969
  }
970
+ if (shouldAcquire) {
971
+ DevicePool.emitter.emit(DEVICE.CONNECT, device);
972
+ }
864
973
  } catch (err) {
974
+ const requiresColdReconnect = isMissingDetectedProtocolV2Error(method, err);
975
+ // Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
976
+ // failures, so with keep-alive a wedged link would be reused by every retry
977
+ // (field case: Initialize timing out at 25s per attempt, forever). Drop it
978
+ // here so the next retry cold-connects.
979
+ if (
980
+ (ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
981
+ device.mainId &&
982
+ device.deviceConnector
983
+ ) {
984
+ await device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
985
+ // The connector only drops the link; `deviceAcquired` is reset by
986
+ // release()/markTransportDisconnected() alone. Leaving it set makes the
987
+ // next attempt skip acquire and initialize onto the link we just cut.
988
+ device.markTransportDisconnected();
989
+ }
865
990
  if (
866
991
  (err.errorCode === HardwareErrorCode.BleTimeoutError ||
867
992
  err.errorCode === HardwareErrorCode.BleConnectedError ||
868
- isRetryableBleProtocolV2ProbeError(method, err)) &&
993
+ isRetryableBleProtocolV2ProbeError(method, err) ||
994
+ requiresColdReconnect) &&
869
995
  retryCount < 6
870
996
  ) {
871
997
  const nextRetry = retryCount + 1;
872
- Log.debug(`Bluetooth connect timeout and will retry, retry count: ${nextRetry}`);
998
+ Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
873
999
  await wait(3000);
874
1000
  await connectDeviceForBle(method, device, nextRetry);
875
1001
  } else {
@@ -983,6 +1109,19 @@ const ensureConnected = async (
983
1109
  }
984
1110
  } catch (error) {
985
1111
  Log.debug('device error: ', error);
1112
+ if (error.errorCode === HardwareErrorCode.BleUnavailableWhileUsbConnected) {
1113
+ reject(error);
1114
+ return;
1115
+ }
1116
+ if (isProtocolV2LinkDisabledError(error)) {
1117
+ reject(
1118
+ ERRORS.TypedError(HardwareErrorCode.BleUnavailableWhileUsbConnected, undefined, {
1119
+ failureCode: error.failureCode,
1120
+ firmwareMessage: error.firmwareMessage,
1121
+ })
1122
+ );
1123
+ return;
1124
+ }
986
1125
  if ([HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(error.errorCode)) {
987
1126
  postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE));
988
1127
  }
@@ -1068,7 +1207,10 @@ export const cancel = (context: CoreContext, connectId?: string) => {
1068
1207
  if (task && task.method?.device) {
1069
1208
  if (!canceledDevices.includes(task.method.device)) {
1070
1209
  const { device } = task.method;
1071
- setPrePendingCallPromise(device?.interruptionFromUser());
1210
+ setPrePendingCallPromise(
1211
+ task.method.connectId ?? connectId,
1212
+ device.interruptionFromUser()
1213
+ );
1072
1214
  canceledDevices.push(device);
1073
1215
  }
1074
1216
  requestQueue.rejectRequest(
@@ -1155,14 +1297,16 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
1155
1297
  };
1156
1298
 
1157
1299
  const cleanup = () => {
1300
+ const pendingUiPromises = _uiPromises;
1158
1301
  _uiPromises = [];
1159
- Log.debug('Cleanup...');
1302
+ rejectUiPromises(
1303
+ pendingUiPromises,
1304
+ ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
1305
+ );
1160
1306
  };
1161
1307
 
1162
1308
  const removeDeviceListener = (device: Device) => {
1163
1309
  device.removeAllListeners();
1164
- DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
1165
- // DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1166
1310
  };
1167
1311
 
1168
1312
  /**
@@ -1173,19 +1317,33 @@ const closePopup = () => {
1173
1317
  };
1174
1318
 
1175
1319
  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 }));
1320
+ const deviceObject = device.toMessageObject();
1321
+ if (!deviceObject) return;
1322
+ postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
1179
1323
  };
1180
1324
 
1181
1325
  const onDeviceDisconnectHandler = (device: Device) => {
1182
1326
  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 }));
1327
+ const deviceObject = device.toMessageObject();
1328
+ if (!deviceObject) return;
1329
+ postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
1186
1330
  };
1187
1331
 
1188
- const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin']) => {
1332
+ const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
1333
+ const device =
1334
+ deviceCacheMap.get(event.connectId) ??
1335
+ DevicePool.devicesCache[event.connectId] ??
1336
+ DevicePool.getDeviceByPath(event.connectId);
1337
+ if (!device) {
1338
+ Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
1339
+ return;
1340
+ }
1341
+
1342
+ device.markTransportDisconnected();
1343
+ DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
1344
+ };
1345
+
1346
+ const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
1189
1347
  Log.log('request Input PIN');
1190
1348
  // create ui promise
1191
1349
  const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
@@ -1194,12 +1352,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
1194
1352
  createUiMessage(UI_REQUEST.REQUEST_PIN, {
1195
1353
  device: device.toMessageObject() as unknown as KnownDevice,
1196
1354
  type,
1355
+ responseCorrelation: uiPromise.responseCorrelation,
1197
1356
  })
1198
1357
  );
1199
- // wait for pin
1200
- const uiResp = await uiPromise.promise;
1201
- // callback.apply(null, [null, pin]);
1202
- callback(null, uiResp.payload);
1358
+ consumeUiPromise(
1359
+ uiPromise.promise,
1360
+ uiResp => callback(null, uiResp.payload),
1361
+ error => callback(error, '')
1362
+ );
1203
1363
  };
1204
1364
 
1205
1365
  export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
@@ -1223,7 +1383,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
1223
1383
  postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
1224
1384
  };
1225
1385
 
1226
- const onDevicePassphraseHandler = async (
1386
+ const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
1387
+ postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
1388
+ };
1389
+
1390
+ const onDevicePassphraseHandler = (
1227
1391
  ...[device, requestPayload, callback]: DeviceEvents['passphrase']
1228
1392
  ) => {
1229
1393
  Log.debug('onDevicePassphraseHandler');
@@ -1233,18 +1397,27 @@ const onDevicePassphraseHandler = async (
1233
1397
  device: device.toMessageObject() as KnownDevice,
1234
1398
  passphraseState: device.passphraseState,
1235
1399
  existsAttachPinUser: requestPayload.existsAttachPinUser,
1400
+ deviceOnly: requestPayload.deviceOnly,
1401
+ source: requestPayload.source,
1402
+ reason: requestPayload.reason,
1403
+ expectedPassphraseState: requestPayload.expectedPassphraseState,
1404
+ ...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
1405
+ responseCorrelation: uiPromise.responseCorrelation,
1236
1406
  })
1237
1407
  );
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
- });
1408
+ consumeUiPromise(
1409
+ uiPromise.promise,
1410
+ uiResp => {
1411
+ const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
1412
+ callback({
1413
+ passphrase: value.normalize('NFKD'),
1414
+ passphraseOnDevice,
1415
+ attachPinOnDevice,
1416
+ cache: save,
1417
+ });
1418
+ },
1419
+ error => callback({}, error)
1420
+ );
1248
1421
  };
1249
1422
 
1250
1423
  const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
@@ -1254,17 +1427,62 @@ const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']
1254
1427
  };
1255
1428
 
1256
1429
  const onEnterPassphraseOnDeviceHandler = (
1257
- ...[device]: [...DeviceEvents['passphrase_on_device']]
1430
+ ...[device, requestPayload]: [...DeviceEvents['passphrase_on_device']]
1258
1431
  ) => {
1259
1432
  postMessage(
1260
1433
  createUiMessage(UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE, {
1261
1434
  device: device.toMessageObject() as KnownDevice,
1262
1435
  passphraseState: device.passphraseState,
1436
+ source: requestPayload?.source,
1437
+ reason: requestPayload?.reason,
1438
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1439
+ })
1440
+ );
1441
+ };
1442
+
1443
+ const onEnterAttachPinOnDeviceHandler = (
1444
+ ...[device, requestPayload]: [...DeviceEvents['attach_pin_on_device']]
1445
+ ) => {
1446
+ postMessage(
1447
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1448
+ device: device.toMessageObject() as KnownDevice,
1449
+ type: 'ButtonRequest_AttachPin',
1450
+ source: requestPayload?.source,
1451
+ reason: requestPayload?.reason,
1452
+ ...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
1263
1453
  })
1264
1454
  );
1265
1455
  };
1266
1456
 
1267
- const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1457
+ const onEnterPinOnDeviceHandler = (
1458
+ ...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
1459
+ ) => {
1460
+ postMessage(
1461
+ createUiMessage(UI_REQUEST.REQUEST_PIN, {
1462
+ device: device.toMessageObject() as KnownDevice,
1463
+ type:
1464
+ pinType === DeviceSessionPinType.AttachToPin
1465
+ ? 'ButtonRequest_AttachPin'
1466
+ : 'ButtonRequest_PinEntry',
1467
+ source: metadata?.source,
1468
+ reason: metadata?.reason,
1469
+ deviceOnly: metadata?.deviceOnly ?? true,
1470
+ completion: metadata?.completion,
1471
+ method: metadata?.method,
1472
+ page: metadata?.page,
1473
+ operation: metadata?.operation,
1474
+ ...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
1475
+ })
1476
+ );
1477
+ };
1478
+
1479
+ const onPinOnDeviceCompleteHandler = (
1480
+ ...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
1481
+ ) => {
1482
+ postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
1483
+ };
1484
+
1485
+ const onSelectDeviceInBootloaderForWebDeviceHandler = (
1268
1486
  ...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
1269
1487
  ) => {
1270
1488
  Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
@@ -1274,11 +1492,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
1274
1492
  device: device.toMessageObject() as KnownDevice,
1275
1493
  })
1276
1494
  );
1277
- const uiResp = await uiPromise.promise;
1278
- callback(null, uiResp.payload.deviceId);
1495
+ consumeUiPromise(
1496
+ uiPromise.promise,
1497
+ uiResp => callback(null, uiResp.payload.deviceId),
1498
+ error => callback(error, '')
1499
+ );
1279
1500
  };
1280
1501
 
1281
- const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1502
+ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
1282
1503
  ...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
1283
1504
  ) => {
1284
1505
  Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
@@ -1291,8 +1512,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
1291
1512
  device: device.toMessageObject() as KnownDevice,
1292
1513
  })
1293
1514
  );
1294
- const uiResp = await uiPromise.promise;
1295
- callback(null, uiResp.payload.deviceId);
1515
+ consumeUiPromise(
1516
+ uiPromise.promise,
1517
+ uiResp => callback(null, uiResp.payload.deviceId),
1518
+ error => callback(error, '')
1519
+ );
1296
1520
  };
1297
1521
 
1298
1522
  /**
@@ -1311,14 +1535,21 @@ const postMessage = (message: CoreMessage) => {
1311
1535
 
1312
1536
  const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
1313
1537
  const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
1538
+ if (
1539
+ device &&
1540
+ (promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
1541
+ ) {
1542
+ const publicDeviceId = device.toMessageObject()?.deviceId;
1543
+ uiPromise.responseCorrelation = {
1544
+ interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
1545
+ deviceId: publicDeviceId || device.instanceId,
1546
+ };
1547
+ }
1314
1548
  _uiPromises.push(uiPromise as any);
1315
1549
 
1316
1550
  return uiPromise;
1317
1551
  };
1318
1552
 
1319
- const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
1320
- _uiPromises.find(p => p.id === promiseEvent);
1321
-
1322
1553
  const removeUiPromise = (promise: Deferred<any>) => {
1323
1554
  _uiPromises = _uiPromises.filter(p => p !== promise);
1324
1555
  };
@@ -1330,8 +1561,10 @@ export default class Core extends EventEmitter {
1330
1561
 
1331
1562
  private requestQueue = new RequestQueue();
1332
1563
 
1564
+ private disposePromise?: Promise<void>;
1565
+
1333
1566
  // background task
1334
- private prePendingCallPromise: Promise<void> | undefined;
1567
+ private prePendingCallPromises = new Map<string, Promise<void>>();
1335
1568
 
1336
1569
  private methodSynchronize = getSynchronize();
1337
1570
 
@@ -1342,19 +1575,24 @@ export default class Core extends EventEmitter {
1342
1575
  Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`);
1343
1576
  }
1344
1577
 
1345
- cancelOperation(operationId: string) {
1346
- this.requestQueue.abortOperation(operationId);
1347
- }
1348
-
1349
1578
  private getCoreContext() {
1350
1579
  return {
1351
1580
  sdkInstanceId: this.sdkInstanceId,
1352
1581
  tracingContext: this.tracingContext,
1353
1582
  requestQueue: this.requestQueue,
1354
1583
  methodSynchronize: this.methodSynchronize,
1355
- getPrePendingCallPromise: () => this.prePendingCallPromise,
1356
- setPrePendingCallPromise: (promise: Promise<void> | undefined) => {
1357
- this.prePendingCallPromise = promise;
1584
+ getPrePendingCallPromise: (connectId: string) => this.prePendingCallPromises.get(connectId),
1585
+ setPrePendingCallPromise: (connectId: string, promise?: Promise<void>) => {
1586
+ if (!promise) {
1587
+ this.prePendingCallPromises.delete(connectId);
1588
+ return;
1589
+ }
1590
+ this.prePendingCallPromises.set(connectId, promise);
1591
+ },
1592
+ removePrePendingCallPromise: (connectId: string, promise: Promise<void>) => {
1593
+ if (this.prePendingCallPromises.get(connectId) === promise) {
1594
+ this.prePendingCallPromises.delete(connectId);
1595
+ }
1358
1596
  },
1359
1597
  // callback 任务管理
1360
1598
  registerCallbackTask: (connectId: string, callbackPromise: Deferred<any>) => {
@@ -1372,11 +1610,16 @@ export default class Core extends EventEmitter {
1372
1610
  case UI_RESPONSE.RECEIVE_PASSPHRASE:
1373
1611
  case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
1374
1612
  case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
1375
- const uiPromise = findUiPromise(message.type);
1613
+ const uiPromise = findUiPromiseForResponse(_uiPromises, message);
1376
1614
  if (uiPromise) {
1377
1615
  Log.log('receive UI Response: ', message.type);
1378
1616
  uiPromise.resolve(message);
1379
1617
  removeUiPromise(uiPromise);
1618
+ } else if (
1619
+ message.type === UI_RESPONSE.RECEIVE_PIN ||
1620
+ message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
1621
+ ) {
1622
+ Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
1380
1623
  }
1381
1624
  break;
1382
1625
  }
@@ -1392,10 +1635,17 @@ export default class Core extends EventEmitter {
1392
1635
  }
1393
1636
 
1394
1637
  case IFRAME.CALL: {
1395
- Log.log(`[${Date.now()}][CALL_API]`, message);
1638
+ const logBlockLabel = getLogBlockLabel(message);
1639
+ Log.log(
1640
+ formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
1641
+ getSafeLogPayload(message, logBlockLabel)
1642
+ );
1396
1643
  const response = await callAPI(this.getCoreContext(), message);
1397
1644
  const { success, payload } = response;
1398
- Log.log(`[${Date.now()}][CALL_API_RESPONSE]`, response);
1645
+ Log.log(
1646
+ formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
1647
+ getSafeLogPayload(response, logBlockLabel)
1648
+ );
1399
1649
  if (success) {
1400
1650
  return response;
1401
1651
  }
@@ -1414,10 +1664,6 @@ export default class Core extends EventEmitter {
1414
1664
  cancel(this.getCoreContext(), message.payload.connectId);
1415
1665
  break;
1416
1666
  }
1417
- case IFRAME.CANCEL_OPERATION: {
1418
- this.cancelOperation(message.payload.operationId);
1419
- break;
1420
- }
1421
1667
  case IFRAME.CALLBACK: {
1422
1668
  Log.log('callback message: ', message);
1423
1669
  postMessage(message);
@@ -1429,25 +1675,65 @@ export default class Core extends EventEmitter {
1429
1675
  return Promise.resolve(message);
1430
1676
  }
1431
1677
 
1432
- dispose() {
1678
+ dispose(): Promise<void> {
1679
+ if (!this.disposePromise) {
1680
+ this.disposePromise = this.disposeResources();
1681
+ }
1682
+ return this.disposePromise;
1683
+ }
1684
+
1685
+ private async disposeResources(): Promise<void> {
1686
+ Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1687
+ pollingManager.stopAll();
1688
+ this.requestQueue.abortAllRequests();
1689
+ cleanup();
1690
+
1691
+ _connector?.stop();
1692
+ let transportCleanup: Promise<void>;
1693
+ try {
1694
+ transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
1695
+ Log.warn('[Core] Transport cleanup failed:', error);
1696
+ });
1697
+ } catch (error) {
1698
+ Log.warn('[Core] Transport cleanup failed:', error);
1699
+ transportCleanup = Promise.resolve();
1700
+ }
1701
+
1702
+ // Preserve synchronous dispose semantics for in-memory state and listeners.
1433
1703
  _deviceList = undefined;
1434
1704
  _connector = undefined;
1705
+ DevicePool.dispose();
1435
1706
  deviceCacheMap.clear();
1436
1707
  preWarmInflight.clear();
1437
1708
  preWarmDoneAt.clear();
1438
- Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
1709
+ preConnectCache = { passphraseState: undefined };
1710
+ this.prePendingCallPromises.clear();
1711
+ this.removeAllListeners();
1439
1712
  cleanupSdkInstance(this.sdkInstanceId);
1713
+ if (_core === this) _core = undefined;
1714
+
1715
+ // Transports, especially Node USB, may release native handles asynchronously.
1716
+ await transportCleanup;
1440
1717
  }
1441
1718
  }
1442
1719
 
1443
1720
  export const initCore = () => {
1444
- _core = new Core();
1445
- return _core;
1721
+ const core = new Core();
1722
+ _core = core;
1723
+ return core;
1446
1724
  };
1447
1725
 
1448
1726
  export const initConnector = () => {
1449
1727
  _connector = new DeviceConnector();
1728
+ DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
1729
+ DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1730
+ DevicePool.emitter.removeListener(
1731
+ TRANSPORT_EVENT.DEVICE_DISCONNECT,
1732
+ onTransportDeviceDisconnectHandler
1733
+ );
1734
+ DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
1450
1735
  DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
1736
+ DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
1451
1737
  return _connector;
1452
1738
  };
1453
1739
 
@@ -1461,12 +1747,8 @@ export const init = async (
1461
1747
  plugin?: LowlevelTransportSharedPlugin
1462
1748
  ) => {
1463
1749
  try {
1464
- try {
1465
- await DataManager.load(settings);
1466
- initTransport(Transport, plugin);
1467
- } catch {
1468
- Log.error('DataManager.load error');
1469
- }
1750
+ await DataManager.load(settings);
1751
+ initTransport(Transport, plugin);
1470
1752
  enableLog(DataManager.getSettings('debug'));
1471
1753
  if (DataManager.getSettings('env') !== 'react-native') {
1472
1754
  setLoggerPostMessage(postMessage);
@@ -1477,6 +1759,7 @@ export const init = async (
1477
1759
  return _core;
1478
1760
  } catch (error) {
1479
1761
  Log.error('core init', error);
1762
+ throw error;
1480
1763
  }
1481
1764
  };
1482
1765