@onekeyfe/hd-core 1.2.0-alpha.9 → 1.2.0-alpha.90

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