@onekeyfe/hd-core 1.2.0-alpha.3 → 1.2.0-alpha.31

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 (746) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +77 -0
  2. package/__tests__/DeviceCommands.test.ts +433 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +43 -0
  4. package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
  5. package/__tests__/connectSettings.test.ts +61 -0
  6. package/__tests__/core-dispose.test.ts +34 -0
  7. package/__tests__/core-error-output.test.ts +39 -0
  8. package/__tests__/device-features-state.test.ts +78 -0
  9. package/__tests__/device-identity.test.ts +52 -0
  10. package/__tests__/device-lifecycle-events.test.ts +197 -0
  11. package/__tests__/device-pool-state.test.ts +132 -0
  12. package/__tests__/device-settings.test.ts +391 -0
  13. package/__tests__/device-state-contract.test.ts +27 -0
  14. package/__tests__/device-state-events.test.ts +286 -0
  15. package/__tests__/device-state-mapper.test.ts +241 -0
  16. package/__tests__/device-state-projector.test.ts +94 -0
  17. package/__tests__/device-state-store.test.ts +82 -0
  18. package/__tests__/device-utils.test.ts +106 -0
  19. package/__tests__/device-wallet-session-store.test.ts +358 -0
  20. package/__tests__/deviceFeaturesUtils.test.ts +39 -0
  21. package/__tests__/deviceSettings.test.ts +103 -0
  22. package/__tests__/evmLedgerLegacySafety.test.ts +12 -6
  23. package/__tests__/evmSignTypedData.test.ts +80 -0
  24. package/__tests__/filesystemValidation.test.ts +53 -0
  25. package/__tests__/firmware-update/check-all-firmware-release.test.ts +174 -0
  26. package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
  27. package/__tests__/firmware-update/firmware-host-binding.test.ts +70 -0
  28. package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
  29. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  30. package/__tests__/firmware-update/firmware-update-plan.test.ts +593 -0
  31. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +213 -0
  32. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +430 -0
  33. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +58 -0
  34. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  35. package/__tests__/get-device-state.test.ts +410 -0
  36. package/__tests__/homescreen.test.ts +24 -0
  37. package/__tests__/kaspa-public-types.type-test.ts +16 -0
  38. package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
  39. package/__tests__/kaspaSignTransaction.test.ts +592 -0
  40. package/__tests__/logBlockEvent.test.ts +43 -0
  41. package/__tests__/method-protocol-support.test.ts +113 -0
  42. package/__tests__/networkUtils.test.ts +386 -0
  43. package/__tests__/open-wallet-session-error-response.test.ts +43 -0
  44. package/__tests__/open-wallet-session.test.ts +915 -0
  45. package/__tests__/preInitialize.test.ts +33 -0
  46. package/__tests__/pro2Wallpaper.test.ts +39 -0
  47. package/__tests__/protocol-v2-bootloader-mode.test.ts +37 -0
  48. package/__tests__/protocol-v2-firmware-targets.test.ts +19 -0
  49. package/__tests__/protocol-v2-ping.test.ts +28 -0
  50. package/__tests__/protocol-v2-unlock-policy.test.ts +45 -0
  51. package/__tests__/protocol-v2.test.ts +5310 -1856
  52. package/__tests__/protocolV2FileWrite.test.ts +92 -0
  53. package/__tests__/protocolV2UiInteraction.test.ts +266 -0
  54. package/__tests__/public-device-state-api.test.ts +266 -0
  55. package/__tests__/public-pro2-api-boundary.test.ts +106 -0
  56. package/__tests__/refresh-device-state.test.ts +101 -0
  57. package/__tests__/request-context-logging.test.ts +16 -0
  58. package/__tests__/search-devices.test.ts +136 -0
  59. package/__tests__/tron-sign-message-init.test.ts +74 -0
  60. package/dist/api/BaseMethod.d.ts +14 -1
  61. package/dist/api/BaseMethod.d.ts.map +1 -1
  62. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  63. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  64. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  65. package/dist/api/CipherKeyValue.d.ts +1 -0
  66. package/dist/api/CipherKeyValue.d.ts.map +1 -1
  67. package/dist/api/ClearSessionCache.d.ts +9 -0
  68. package/dist/api/ClearSessionCache.d.ts.map +1 -0
  69. package/dist/api/DirList.d.ts +1 -0
  70. package/dist/api/DirList.d.ts.map +1 -1
  71. package/dist/api/DirMake.d.ts +1 -0
  72. package/dist/api/DirMake.d.ts.map +1 -1
  73. package/dist/api/DirRemove.d.ts +1 -0
  74. package/dist/api/DirRemove.d.ts.map +1 -1
  75. package/dist/api/FileDelete.d.ts +1 -0
  76. package/dist/api/FileDelete.d.ts.map +1 -1
  77. package/dist/api/FileRead.d.ts +1 -0
  78. package/dist/api/FileRead.d.ts.map +1 -1
  79. package/dist/api/FileWrite.d.ts +2 -0
  80. package/dist/api/FileWrite.d.ts.map +1 -1
  81. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  82. package/dist/api/FirmwareUpdateV2.d.ts +13 -2
  83. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  84. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  85. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  86. package/dist/api/FirmwareUpdateV4.d.ts +47 -6
  87. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  88. package/dist/api/GetDeviceState.d.ts +8 -0
  89. package/dist/api/GetDeviceState.d.ts.map +1 -0
  90. package/dist/api/GetFeatures.d.ts +1 -1
  91. package/dist/api/GetFeatures.d.ts.map +1 -1
  92. package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
  93. package/dist/api/GetPassphraseState.d.ts +2 -6
  94. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  95. package/dist/api/OpenWalletSession.d.ts +8 -0
  96. package/dist/api/OpenWalletSession.d.ts.map +1 -0
  97. package/dist/api/PathInfo.d.ts +1 -0
  98. package/dist/api/PathInfo.d.ts.map +1 -1
  99. package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
  100. package/dist/api/SearchDevices.d.ts +3 -0
  101. package/dist/api/SearchDevices.d.ts.map +1 -1
  102. package/dist/api/UploadPortfolio.d.ts +17 -0
  103. package/dist/api/UploadPortfolio.d.ts.map +1 -0
  104. package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
  105. package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
  106. package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
  107. package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
  108. package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
  109. package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
  110. package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
  111. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
  112. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  113. package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
  114. package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
  115. package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
  116. package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
  117. package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
  118. package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
  119. package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
  120. package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
  121. package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
  122. package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
  123. package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
  124. package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
  125. package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
  126. package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
  127. package/dist/api/btc/BTCGetAddress.d.ts +1 -0
  128. package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
  129. package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
  130. package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
  131. package/dist/api/btc/BTCSignMessage.d.ts +1 -0
  132. package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
  133. package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
  134. package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
  135. package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
  136. package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
  137. package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
  138. package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
  139. package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
  140. package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
  141. package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
  142. package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
  143. package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
  144. package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
  145. package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
  146. package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
  147. package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
  148. package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
  149. package/dist/api/conflux/ConfluxGetAddress.d.ts +2 -0
  150. package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
  151. package/dist/api/conflux/ConfluxSignMessage.d.ts +2 -0
  152. package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
  153. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +2 -0
  154. package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
  155. package/dist/api/conflux/ConfluxSignTransaction.d.ts +2 -0
  156. package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
  157. package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
  158. package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
  159. package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
  160. package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
  161. package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
  162. package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
  163. package/dist/api/device/DeviceCancel.d.ts +1 -0
  164. package/dist/api/device/DeviceCancel.d.ts.map +1 -1
  165. package/dist/api/device/DeviceChangePin.d.ts +1 -0
  166. package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
  167. package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
  168. package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
  169. package/dist/api/device/DeviceLock.d.ts +1 -0
  170. package/dist/api/device/DeviceLock.d.ts.map +1 -1
  171. package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
  172. package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
  173. package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
  174. package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
  175. package/dist/api/device/DeviceSettings.d.ts +1 -0
  176. package/dist/api/device/DeviceSettings.d.ts.map +1 -1
  177. package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
  178. package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
  179. package/dist/api/device/DeviceUnlock.d.ts +1 -0
  180. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  181. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  182. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  183. package/dist/api/device/DeviceWipe.d.ts +1 -0
  184. package/dist/api/device/DeviceWipe.d.ts.map +1 -1
  185. package/dist/api/device/PreInitialize.d.ts +1 -0
  186. package/dist/api/device/PreInitialize.d.ts.map +1 -1
  187. package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
  188. package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
  189. package/dist/api/evm/EVMGetAddress.d.ts +1 -0
  190. package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
  191. package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
  192. package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
  193. package/dist/api/evm/EVMSignMessage.d.ts +1 -0
  194. package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
  195. package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
  196. package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
  197. package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
  198. package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
  199. package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
  200. package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
  201. package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
  202. package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
  203. package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
  204. package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
  205. package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
  206. package/dist/api/firmware/FirmwareArtifactSource.d.ts +25 -0
  207. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  208. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  209. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  210. package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
  211. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
  212. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +8 -0
  213. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  214. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  215. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  216. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +25 -0
  217. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  218. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +30 -0
  219. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  220. package/dist/api/firmware/getBinary.d.ts +18 -3
  221. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  222. package/dist/api/firmware/progressThrottle.d.ts +3 -0
  223. package/dist/api/firmware/progressThrottle.d.ts.map +1 -0
  224. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  225. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  226. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  227. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  228. package/dist/api/helpers/filesystemValidation.d.ts +3 -0
  229. package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
  230. package/dist/api/helpers/paramsValidator.d.ts +1 -0
  231. package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
  232. package/dist/api/helpers/protocolV2FileWrite.d.ts +33 -0
  233. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -0
  234. package/dist/api/index.d.ts +6 -29
  235. package/dist/api/index.d.ts.map +1 -1
  236. package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
  237. package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
  238. package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -1
  239. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  240. package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
  241. package/dist/api/lightning/LnurlAuth.d.ts +0 -4
  242. package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
  243. package/dist/api/near/NearGetAddress.d.ts +1 -0
  244. package/dist/api/near/NearGetAddress.d.ts.map +1 -1
  245. package/dist/api/near/NearSignTransaction.d.ts +1 -0
  246. package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
  247. package/dist/api/nem/NEMGetAddress.d.ts +1 -0
  248. package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
  249. package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
  250. package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
  251. package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
  252. package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
  253. package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
  254. package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
  255. package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
  256. package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
  257. package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
  258. package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
  259. package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
  260. package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
  261. package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
  262. package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
  263. package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
  264. package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
  265. package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
  266. package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
  267. package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
  268. package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -0
  269. package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
  270. package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
  271. package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
  272. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +7 -0
  273. package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -0
  274. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +8 -0
  275. package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -0
  276. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +2 -1
  277. package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
  278. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +4 -2
  279. package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
  280. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +2 -1
  281. package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
  282. package/dist/api/protocol-v2/DeviceInfoGet.d.ts +29 -0
  283. package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -0
  284. package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
  285. package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
  286. package/dist/api/protocol-v2/DeviceStatusGet.d.ts +7 -0
  287. package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -0
  288. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +27 -0
  289. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -0
  290. package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
  291. package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
  292. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +7 -0
  293. package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
  294. package/dist/api/protocol-v2/Ping.d.ts +3 -0
  295. package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
  296. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +7 -0
  297. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -0
  298. package/dist/api/protocol-v2/helpers.d.ts +27 -18
  299. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  300. package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
  301. package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
  302. package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
  303. package/dist/api/solana/SolGetAddress.d.ts +1 -0
  304. package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
  305. package/dist/api/solana/SolSignMessage.d.ts +1 -0
  306. package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
  307. package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -0
  308. package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
  309. package/dist/api/solana/SolSignTransaction.d.ts +1 -0
  310. package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
  311. package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
  312. package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
  313. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
  314. package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
  315. package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
  316. package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
  317. package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
  318. package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
  319. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
  320. package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
  321. package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
  322. package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
  323. package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
  324. package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
  325. package/dist/api/sui/SuiGetAddress.d.ts +1 -0
  326. package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
  327. package/dist/api/sui/SuiGetPublicKey.d.ts +1 -0
  328. package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
  329. package/dist/api/sui/SuiSignMessage.d.ts +1 -0
  330. package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
  331. package/dist/api/sui/SuiSignTransaction.d.ts +1 -0
  332. package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
  333. package/dist/api/ton/TonGetAddress.d.ts +1 -0
  334. package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
  335. package/dist/api/ton/TonSignData.d.ts +2 -5
  336. package/dist/api/ton/TonSignData.d.ts.map +1 -1
  337. package/dist/api/ton/TonSignMessage.d.ts +1 -0
  338. package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
  339. package/dist/api/ton/TonSignProof.d.ts +1 -0
  340. package/dist/api/ton/TonSignProof.d.ts.map +1 -1
  341. package/dist/api/tron/TronGetAddress.d.ts +1 -0
  342. package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
  343. package/dist/api/tron/TronSignMessage.d.ts +5 -0
  344. package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
  345. package/dist/api/tron/TronSignTransaction.d.ts +1 -0
  346. package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
  347. package/dist/api/utils.d.ts +2 -1
  348. package/dist/api/utils.d.ts.map +1 -1
  349. package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
  350. package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
  351. package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
  352. package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
  353. package/dist/constants/index.d.ts +1 -1
  354. package/dist/constants/index.d.ts.map +1 -1
  355. package/dist/core/RequestQueue.d.ts.map +1 -1
  356. package/dist/core/deviceEventRegistration.d.ts +11 -0
  357. package/dist/core/deviceEventRegistration.d.ts.map +1 -0
  358. package/dist/core/index.d.ts +3 -1
  359. package/dist/core/index.d.ts.map +1 -1
  360. package/dist/data-manager/DataManager.d.ts +2 -1
  361. package/dist/data-manager/DataManager.d.ts.map +1 -1
  362. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  363. package/dist/device/Device.d.ts +40 -13
  364. package/dist/device/Device.d.ts.map +1 -1
  365. package/dist/device/DeviceCommands.d.ts +8 -6
  366. package/dist/device/DeviceCommands.d.ts.map +1 -1
  367. package/dist/device/DeviceFeaturesState.d.ts +3 -0
  368. package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
  369. package/dist/device/DevicePool.d.ts +4 -2
  370. package/dist/device/DevicePool.d.ts.map +1 -1
  371. package/dist/device/DeviceStateMapper.d.ts +13 -0
  372. package/dist/device/DeviceStateMapper.d.ts.map +1 -0
  373. package/dist/device/DeviceStateProjector.d.ts +7 -0
  374. package/dist/device/DeviceStateProjector.d.ts.map +1 -0
  375. package/dist/device/DeviceStateStore.d.ts +21 -0
  376. package/dist/device/DeviceStateStore.d.ts.map +1 -0
  377. package/dist/device/DeviceWalletSessionStore.d.ts +20 -0
  378. package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -0
  379. package/dist/device/cloneDeviceState.d.ts +2 -0
  380. package/dist/device/cloneDeviceState.d.ts.map +1 -0
  381. package/dist/device/deviceIdentity.d.ts +5 -0
  382. package/dist/device/deviceIdentity.d.ts.map +1 -0
  383. package/dist/deviceProfile/buildDeviceFeatures.d.ts +9 -3
  384. package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
  385. package/dist/deviceProfile/index.d.ts +0 -1
  386. package/dist/deviceProfile/index.d.ts.map +1 -1
  387. package/dist/events/device.d.ts +12 -2
  388. package/dist/events/device.d.ts.map +1 -1
  389. package/dist/events/logBlockEvent.d.ts.map +1 -1
  390. package/dist/events/ui-request.d.ts +19 -2
  391. package/dist/events/ui-request.d.ts.map +1 -1
  392. package/dist/index.d.ts +1487 -691
  393. package/dist/index.d.ts.map +1 -1
  394. package/dist/index.js +8831 -4014
  395. package/dist/inject.d.ts.map +1 -1
  396. package/dist/lowLevelInject.d.ts.map +1 -1
  397. package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
  398. package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
  399. package/dist/protocols/protocol-v2/features.d.ts +23 -28
  400. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  401. package/dist/protocols/protocol-v2/firmware.d.ts +11 -9
  402. package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
  403. package/dist/protocols/protocol-v2/index.d.ts +3 -2
  404. package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
  405. package/dist/protocols/protocol-v2/lockedError.d.ts +2 -0
  406. package/dist/protocols/protocol-v2/lockedError.d.ts.map +1 -0
  407. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +16 -0
  408. package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
  409. package/dist/protocols/protocol-v2/uiInteraction.d.ts +39 -0
  410. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
  411. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +4 -0
  412. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
  413. package/dist/protocols/protocol-v2/unlockRetry.d.ts +10 -0
  414. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -0
  415. package/dist/protocols/protocol-v2/walletSession.d.ts +31 -0
  416. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -0
  417. package/dist/topLevelInject.d.ts.map +1 -1
  418. package/dist/types/api/checkAllFirmwareRelease.d.ts +5 -2
  419. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  420. package/dist/types/api/deviceSettings.d.ts +11 -2
  421. package/dist/types/api/deviceSettings.d.ts.map +1 -1
  422. package/dist/types/api/deviceUnlock.d.ts +1 -1
  423. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  424. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  425. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  426. package/dist/types/api/export.d.ts +5 -2
  427. package/dist/types/api/export.d.ts.map +1 -1
  428. package/dist/types/api/firmwareUpdate.d.ts +75 -6
  429. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  430. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  431. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  432. package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
  433. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  434. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  435. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  436. package/dist/types/api/getDeviceState.d.ts +12 -0
  437. package/dist/types/api/getDeviceState.d.ts.map +1 -0
  438. package/dist/types/api/getFeatures.d.ts.map +1 -1
  439. package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
  440. package/dist/types/api/getPassphraseState.d.ts +2 -10
  441. package/dist/types/api/getPassphraseState.d.ts.map +1 -1
  442. package/dist/types/api/index.d.ts +25 -35
  443. package/dist/types/api/index.d.ts.map +1 -1
  444. package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
  445. package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
  446. package/dist/types/api/openWalletSession.d.ts +29 -0
  447. package/dist/types/api/openWalletSession.d.ts.map +1 -0
  448. package/dist/types/api/protocolV2.d.ts +15 -89
  449. package/dist/types/api/protocolV2.d.ts.map +1 -1
  450. package/dist/types/api/sessionCache.d.ts +13 -0
  451. package/dist/types/api/sessionCache.d.ts.map +1 -0
  452. package/dist/types/device.d.ts +122 -6
  453. package/dist/types/device.d.ts.map +1 -1
  454. package/dist/types/params.d.ts +1 -0
  455. package/dist/types/params.d.ts.map +1 -1
  456. package/dist/types/settings.d.ts +34 -2
  457. package/dist/types/settings.d.ts.map +1 -1
  458. package/dist/utils/assets.d.ts +2 -1
  459. package/dist/utils/assets.d.ts.map +1 -1
  460. package/dist/utils/deviceFeaturesCompat.d.ts +13 -0
  461. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
  462. package/dist/utils/deviceFeaturesUtils.d.ts +11 -3
  463. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  464. package/dist/utils/deviceInfoUtils.d.ts +9 -9
  465. package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
  466. package/dist/utils/deviceSettings.d.ts +38 -7
  467. package/dist/utils/deviceSettings.d.ts.map +1 -1
  468. package/dist/utils/deviceVersionUtils.d.ts +7 -5
  469. package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
  470. package/dist/utils/homescreen.d.ts.map +1 -1
  471. package/dist/utils/index.d.ts +5 -2
  472. package/dist/utils/index.d.ts.map +1 -1
  473. package/dist/utils/networkUtils.d.ts +9 -1
  474. package/dist/utils/networkUtils.d.ts.map +1 -1
  475. package/dist/utils/patch.d.ts +1 -1
  476. package/dist/utils/patch.d.ts.map +1 -1
  477. package/dist/utils/pro2Wallpaper.d.ts +12 -0
  478. package/dist/utils/pro2Wallpaper.d.ts.map +1 -0
  479. package/dist/utils/tracing.d.ts.map +1 -1
  480. package/package.json +4 -4
  481. package/src/api/BaseMethod.ts +52 -17
  482. package/src/api/CheckAllFirmwareRelease.ts +51 -4
  483. package/src/api/CheckBootloaderRelease.ts +1 -2
  484. package/src/api/CheckFirmwareRelease.ts +1 -2
  485. package/src/api/CipherKeyValue.ts +4 -0
  486. package/src/api/ClearSessionCache.ts +32 -0
  487. package/src/api/DirList.ts +9 -4
  488. package/src/api/DirMake.ts +7 -4
  489. package/src/api/DirRemove.ts +7 -4
  490. package/src/api/FileDelete.ts +7 -4
  491. package/src/api/FileRead.ts +27 -8
  492. package/src/api/FileWrite.ts +26 -168
  493. package/src/api/FirmwareUpdate.ts +11 -12
  494. package/src/api/FirmwareUpdateV2.ts +370 -112
  495. package/src/api/FirmwareUpdateV3.ts +266 -68
  496. package/src/api/FirmwareUpdateV4.ts +1687 -397
  497. package/src/api/GetDeviceState.ts +59 -0
  498. package/src/api/GetFeatures.ts +6 -4
  499. package/src/api/GetOnekeyFeatures.ts +1 -75
  500. package/src/api/GetPassphraseState.ts +21 -21
  501. package/src/api/OpenWalletSession.ts +202 -0
  502. package/src/api/PathInfo.ts +9 -4
  503. package/src/api/PromptWebDeviceAccess.ts +2 -3
  504. package/src/api/SearchDevices.ts +29 -4
  505. package/src/api/UploadPortfolio.ts +40 -0
  506. package/src/api/alephium/AlephiumGetAddress.ts +0 -4
  507. package/src/api/alephium/AlephiumSignMessage.ts +0 -4
  508. package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
  509. package/src/api/algo/AlgoGetAddress.ts +4 -0
  510. package/src/api/algo/AlgoSignTransaction.ts +4 -0
  511. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +9 -21
  512. package/src/api/aptos/AptosGetAddress.ts +4 -0
  513. package/src/api/aptos/AptosGetPublicKey.ts +4 -0
  514. package/src/api/aptos/AptosSignInMessage.ts +4 -0
  515. package/src/api/aptos/AptosSignMessage.ts +4 -0
  516. package/src/api/aptos/AptosSignTransaction.ts +4 -0
  517. package/src/api/benfen/BenfenGetAddress.ts +11 -7
  518. package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
  519. package/src/api/benfen/BenfenSignMessage.ts +0 -4
  520. package/src/api/benfen/BenfenSignTransaction.ts +0 -4
  521. package/src/api/btc/BTCGetAddress.ts +8 -1
  522. package/src/api/btc/BTCGetPublicKey.ts +9 -2
  523. package/src/api/btc/BTCSignMessage.ts +8 -1
  524. package/src/api/btc/BTCSignPsbt.ts +4 -0
  525. package/src/api/btc/BTCSignTransaction.ts +8 -1
  526. package/src/api/btc/BTCVerifyMessage.ts +8 -1
  527. package/src/api/btc/helpers/versionLimit.ts +7 -4
  528. package/src/api/cardano/CardanoGetAddress.ts +4 -0
  529. package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
  530. package/src/api/cardano/CardanoSignMessage.ts +5 -1
  531. package/src/api/cardano/CardanoSignTransaction.ts +5 -1
  532. package/src/api/conflux/ConfluxGetAddress.ts +6 -0
  533. package/src/api/conflux/ConfluxSignMessage.ts +6 -0
  534. package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
  535. package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
  536. package/src/api/cosmos/CosmosGetAddress.ts +4 -0
  537. package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
  538. package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
  539. package/src/api/device/DeviceCancel.ts +5 -0
  540. package/src/api/device/DeviceChangePin.ts +28 -0
  541. package/src/api/device/DeviceFullyUploadResource.ts +4 -5
  542. package/src/api/device/DeviceLock.ts +5 -0
  543. package/src/api/device/DeviceRebootToBoardloader.ts +9 -4
  544. package/src/api/device/DeviceRebootToBootloader.ts +9 -4
  545. package/src/api/device/DeviceSettings.ts +187 -1
  546. package/src/api/device/DeviceSupportFeatures.ts +4 -0
  547. package/src/api/device/DeviceUnlock.ts +13 -0
  548. package/src/api/device/DeviceUpdateBootloader.ts +123 -8
  549. package/src/api/device/DeviceWipe.ts +25 -0
  550. package/src/api/device/PreInitialize.ts +4 -0
  551. package/src/api/dynex/DnxGetAddress.ts +0 -6
  552. package/src/api/dynex/DnxSignTransaction.ts +0 -6
  553. package/src/api/evm/EVMGetAddress.ts +4 -0
  554. package/src/api/evm/EVMGetPublicKey.ts +4 -0
  555. package/src/api/evm/EVMSignMessage.ts +4 -0
  556. package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
  557. package/src/api/evm/EVMSignTransaction.ts +4 -0
  558. package/src/api/evm/EVMSignTypedData.ts +7 -5
  559. package/src/api/evm/EVMVerifyMessage.ts +4 -0
  560. package/src/api/evm/legacyV1/getAddress.ts +2 -2
  561. package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
  562. package/src/api/evm/legacyV1/signMessage.ts +2 -2
  563. package/src/api/evm/legacyV1/signTypedData.ts +2 -2
  564. package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
  565. package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
  566. package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
  567. package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
  568. package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
  569. package/src/api/firmware/FirmwareHostBinding.ts +100 -0
  570. package/src/api/firmware/FirmwarePreparationError.ts +12 -0
  571. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +71 -7
  572. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  573. package/src/api/firmware/FirmwareUpdatePlan.ts +745 -0
  574. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +392 -0
  575. package/src/api/firmware/getBinary.ts +8 -3
  576. package/src/api/firmware/progressThrottle.ts +44 -0
  577. package/src/api/firmware/updateBootloader.ts +19 -4
  578. package/src/api/firmware/uploadFirmware.ts +140 -22
  579. package/src/api/helpers/batchGetPublickeys.ts +2 -2
  580. package/src/api/helpers/filesystemValidation.ts +61 -0
  581. package/src/api/helpers/paramsValidator.ts +1 -1
  582. package/src/api/helpers/protocolV2FileWrite.ts +199 -0
  583. package/src/api/index.ts +7 -30
  584. package/src/api/kaspa/KaspaGetAddress.ts +7 -0
  585. package/src/api/kaspa/KaspaSignTransaction.ts +373 -29
  586. package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
  587. package/src/api/lightning/LnurlAuth.ts +0 -4
  588. package/src/api/near/NearGetAddress.ts +4 -0
  589. package/src/api/near/NearSignTransaction.ts +4 -0
  590. package/src/api/nem/NEMGetAddress.ts +4 -0
  591. package/src/api/nem/NEMSignTransaction.ts +4 -0
  592. package/src/api/neo/NeoGetAddress.ts +0 -4
  593. package/src/api/neo/NeoSignTransaction.ts +0 -4
  594. package/src/api/nervos/NervosGetAddress.ts +0 -4
  595. package/src/api/nervos/NervosSignTransaction.ts +2 -6
  596. package/src/api/nexa/NexaGetAddress.ts +0 -4
  597. package/src/api/nexa/NexaSignTransaction.ts +3 -5
  598. package/src/api/nostr/NostrDecryptMessage.ts +4 -0
  599. package/src/api/nostr/NostrEncryptMessage.ts +4 -0
  600. package/src/api/nostr/NostrGetPublicKey.ts +4 -0
  601. package/src/api/nostr/NostrSignEvent.ts +4 -0
  602. package/src/api/nostr/NostrSignSchnorr.ts +4 -0
  603. package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
  604. package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
  605. package/src/api/protocol-v2/{FactoryGetDeviceInfo.ts → DeviceFactoryInfoGet.ts} +8 -5
  606. package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +35 -0
  607. package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +11 -10
  608. package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +45 -7
  609. package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +10 -5
  610. package/src/api/protocol-v2/DeviceInfoGet.ts +141 -0
  611. package/src/api/protocol-v2/DeviceReboot.ts +8 -4
  612. package/src/api/protocol-v2/DeviceStatusGet.ts +19 -0
  613. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +134 -0
  614. package/src/api/protocol-v2/FilesystemFormat.ts +9 -3
  615. package/src/api/protocol-v2/{FilesystemFixPermission.ts → FilesystemPermissionFix.ts} +7 -4
  616. package/src/api/protocol-v2/Ping.ts +37 -3
  617. package/src/api/protocol-v2/ProtocolInfoRequest.ts +19 -0
  618. package/src/api/protocol-v2/helpers.ts +71 -50
  619. package/src/api/scdo/ScdoGetAddress.ts +0 -4
  620. package/src/api/scdo/ScdoSignMessage.ts +0 -4
  621. package/src/api/scdo/ScdoSignTransaction.ts +0 -4
  622. package/src/api/solana/SolGetAddress.ts +4 -0
  623. package/src/api/solana/SolSignMessage.ts +4 -0
  624. package/src/api/solana/SolSignOffchainMessage.ts +4 -0
  625. package/src/api/solana/SolSignTransaction.ts +4 -0
  626. package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
  627. package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
  628. package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
  629. package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
  630. package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
  631. package/src/api/stellar/StellarGetAddress.ts +1 -10
  632. package/src/api/stellar/StellarSignTransaction.ts +1 -14
  633. package/src/api/sui/SuiGetAddress.ts +4 -0
  634. package/src/api/sui/SuiGetPublicKey.ts +4 -0
  635. package/src/api/sui/SuiSignMessage.ts +4 -0
  636. package/src/api/sui/SuiSignTransaction.ts +4 -0
  637. package/src/api/ton/TonGetAddress.ts +4 -0
  638. package/src/api/ton/TonSignData.ts +6 -6
  639. package/src/api/ton/TonSignMessage.ts +4 -0
  640. package/src/api/ton/TonSignProof.ts +4 -0
  641. package/src/api/tron/TronGetAddress.ts +4 -0
  642. package/src/api/tron/TronSignMessage.ts +18 -7
  643. package/src/api/tron/TronSignTransaction.ts +4 -0
  644. package/src/api/utils.ts +7 -3
  645. package/src/api/xrp/XrpGetAddress.ts +4 -0
  646. package/src/api/xrp/XrpSignTransaction.ts +5 -1
  647. package/src/constants/index.ts +1 -4
  648. package/src/core/RequestQueue.ts +1 -0
  649. package/src/core/deviceEventRegistration.ts +23 -0
  650. package/src/core/index.ts +181 -58
  651. package/src/data/messages/messages-protocol-v2.json +796 -620
  652. package/src/data/messages/messages.json +286 -1
  653. package/src/data-manager/DataManager.ts +45 -38
  654. package/src/data-manager/TransportManager.ts +1 -1
  655. package/src/data-manager/connectSettings.ts +13 -4
  656. package/src/device/Device.ts +573 -278
  657. package/src/device/DeviceCommands.ts +154 -156
  658. package/src/device/DeviceFeaturesState.ts +25 -0
  659. package/src/device/DevicePool.ts +61 -13
  660. package/src/device/DeviceStateMapper.ts +366 -0
  661. package/src/device/DeviceStateProjector.ts +101 -0
  662. package/src/device/DeviceStateStore.ts +201 -0
  663. package/src/device/DeviceWalletSessionStore.ts +105 -0
  664. package/src/device/cloneDeviceState.ts +39 -0
  665. package/src/device/deviceIdentity.ts +18 -0
  666. package/src/deviceProfile/buildDeviceFeatures.ts +234 -210
  667. package/src/deviceProfile/index.ts +0 -1
  668. package/src/events/device.ts +18 -1
  669. package/src/events/logBlockEvent.ts +1 -7
  670. package/src/events/ui-request.ts +25 -2
  671. package/src/index.ts +5 -0
  672. package/src/inject.ts +35 -47
  673. package/src/lowLevelInject.ts +5 -1
  674. package/src/protocols/protocol-v2/deviceSession.ts +24 -0
  675. package/src/protocols/protocol-v2/features.ts +68 -83
  676. package/src/protocols/protocol-v2/firmware.ts +12 -36
  677. package/src/protocols/protocol-v2/index.ts +3 -1
  678. package/src/protocols/protocol-v2/lockedError.ts +10 -0
  679. package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +60 -0
  680. package/src/protocols/protocol-v2/uiInteraction.ts +210 -0
  681. package/src/protocols/protocol-v2/unlockPolicy.ts +105 -0
  682. package/src/protocols/protocol-v2/unlockRetry.ts +98 -0
  683. package/src/protocols/protocol-v2/walletSession.ts +202 -0
  684. package/src/topLevelInject.ts +5 -1
  685. package/src/types/api/checkAllFirmwareRelease.ts +5 -2
  686. package/src/types/api/deviceSettings.ts +26 -2
  687. package/src/types/api/deviceUnlock.ts +1 -1
  688. package/src/types/api/deviceUpdateBootloader.ts +6 -0
  689. package/src/types/api/export.ts +21 -0
  690. package/src/types/api/firmwareUpdate.ts +103 -19
  691. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  692. package/src/types/api/firmwareUpdatePlan.ts +38 -0
  693. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  694. package/src/types/api/getDeviceState.ts +19 -0
  695. package/src/types/api/getFeatures.ts +3 -0
  696. package/src/types/api/getOnekeyFeatures.ts +3 -0
  697. package/src/types/api/getPassphraseState.ts +9 -11
  698. package/src/types/api/index.ts +33 -73
  699. package/src/types/api/kaspaSignTransaction.ts +60 -4
  700. package/src/types/api/openWalletSession.ts +45 -0
  701. package/src/types/api/protocolV2.ts +23 -162
  702. package/src/types/api/sessionCache.ts +19 -0
  703. package/src/types/device.ts +172 -5
  704. package/src/types/params.ts +4 -0
  705. package/src/types/settings.ts +55 -35
  706. package/src/utils/assets.ts +4 -1
  707. package/src/utils/deviceFeaturesCompat.ts +173 -0
  708. package/src/utils/deviceFeaturesUtils.ts +66 -24
  709. package/src/utils/deviceInfoUtils.ts +27 -69
  710. package/src/utils/deviceSettings.ts +171 -39
  711. package/src/utils/deviceVersionUtils.ts +25 -44
  712. package/src/utils/findDefectiveBatchDevice.ts +3 -3
  713. package/src/utils/homescreen.ts +10 -0
  714. package/src/utils/index.ts +21 -2
  715. package/src/utils/networkUtils.ts +270 -14
  716. package/src/utils/pro2Wallpaper.ts +109 -0
  717. package/src/utils/tracing.ts +3 -1
  718. package/tsconfig.type-tests.json +8 -0
  719. package/dist/api/GetDeviceInfo.d.ts +0 -9
  720. package/dist/api/GetDeviceInfo.d.ts.map +0 -1
  721. package/dist/api/protocol-v2/DevReboot.d.ts +0 -7
  722. package/dist/api/protocol-v2/DevReboot.d.ts.map +0 -1
  723. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts +0 -29
  724. package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts.map +0 -1
  725. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +0 -7
  726. package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +0 -1
  727. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +0 -6
  728. package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +0 -1
  729. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts +0 -13
  730. package/dist/api/protocol-v2/FilesystemDiskControl.d.ts.map +0 -1
  731. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts +0 -6
  732. package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +0 -1
  733. package/dist/api/protocol-v2/GetProtoVersion.d.ts +0 -6
  734. package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +0 -1
  735. package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
  736. package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
  737. package/dist/types/api/getDeviceInfo.d.ts +0 -85
  738. package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
  739. package/src/api/GetDeviceInfo.ts +0 -145
  740. package/src/api/protocol-v2/DevReboot.ts +0 -24
  741. package/src/api/protocol-v2/DeviceGetDeviceInfo.ts +0 -118
  742. package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +0 -29
  743. package/src/api/protocol-v2/FilesystemDiskControl.ts +0 -50
  744. package/src/api/protocol-v2/GetProtoVersion.ts +0 -16
  745. package/src/deviceProfile/buildDeviceProfile.ts +0 -333
  746. package/src/types/api/getDeviceInfo.ts +0 -99
@@ -0,0 +1,915 @@
1
+ import { EDeviceType, HardwareErrorCode } from '@onekeyfe/hd-shared';
2
+ import { DeviceSessionPinType } from '@onekeyfe/hd-transport';
3
+
4
+ import GetPassphraseState from '../src/api/GetPassphraseState';
5
+ import OpenWalletSession from '../src/api/OpenWalletSession';
6
+ import { deviceWalletSessionStore } from '../src/device/DeviceWalletSessionStore';
7
+
8
+ jest.mock('../src/data/config', () => ({
9
+ getSDKVersion: jest.fn(() => '1.0.0'),
10
+ DEFAULT_DOMAIN: 'https://jssdk.onekey.so/1.0.0/',
11
+ }));
12
+
13
+ const createDevice = ({
14
+ passphraseProtection = true,
15
+ typedCall = jest.fn(),
16
+ promptPassphrase = jest.fn(),
17
+ }: {
18
+ passphraseProtection?: boolean;
19
+ typedCall?: jest.Mock;
20
+ promptPassphrase?: jest.Mock;
21
+ } = {}) => {
22
+ const device: Record<string, any> = {
23
+ passphraseState: undefined,
24
+ features: {
25
+ unlocked: true,
26
+ passphraseProtection,
27
+ attachToPinEnabled: false,
28
+ },
29
+ commands: { typedCall, promptPassphrase },
30
+ getDeviceState: jest.fn().mockResolvedValue({
31
+ identity: { deviceId: 'device-1' },
32
+ status: { passphraseProtection },
33
+ }),
34
+ getCurrentDeviceId: () => 'device-1',
35
+ getCurrentPassphraseProtection: () => passphraseProtection,
36
+ getInternalState: () =>
37
+ deviceWalletSessionStore.get('device-1', device.passphraseState as string | undefined),
38
+ updateInternalState: jest.fn(
39
+ (_enabled: boolean, passphraseState: string, deviceId: string, sessionId: string) => {
40
+ deviceWalletSessionStore.set(deviceId, passphraseState, sessionId);
41
+ }
42
+ ),
43
+ clearInternalState: jest.fn(() => {
44
+ if (device.passphraseState) {
45
+ deviceWalletSessionStore.delete('device-1', device.passphraseState);
46
+ }
47
+ }),
48
+ lockDevice: jest.fn(),
49
+ unlockDevice: jest.fn(),
50
+ initialize: jest.fn(),
51
+ emit: jest.fn(),
52
+ isProtocolV2: () => true,
53
+ getCurrentFirmwareType: () => 'universal',
54
+ };
55
+ return device;
56
+ };
57
+
58
+ describe('openWalletSession', () => {
59
+ beforeEach(() => {
60
+ deviceWalletSessionStore.clear();
61
+ });
62
+
63
+ test.each([{ useEmptyPassphrase: true }, { initSession: true }, {}])(
64
+ 'requires the explicit mode in the new public API: %p',
65
+ legacyParams => {
66
+ const method = new OpenWalletSession({
67
+ payload: {
68
+ method: 'openWalletSession',
69
+ connectId: 'connect-id',
70
+ ...legacyParams,
71
+ },
72
+ });
73
+
74
+ expect(() => method.init()).toThrow('Parameter [mode] is required');
75
+ }
76
+ );
77
+
78
+ test('keeps the legacy getPassphraseState App flow working on Protocol V2', async () => {
79
+ const typedCall = jest
80
+ .fn()
81
+ .mockResolvedValueOnce({ message: { version: 2 } })
82
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
83
+ .mockResolvedValueOnce({
84
+ message: {
85
+ btc_test_address: 'pro2-wallet-state',
86
+ session_id: 'pro2-wallet-session',
87
+ },
88
+ });
89
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
90
+ const method = new GetPassphraseState({
91
+ payload: {
92
+ method: 'getPassphraseState',
93
+ connectId: 'connect-id',
94
+ initSession: true,
95
+ useEmptyPassphrase: false,
96
+ },
97
+ });
98
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
99
+
100
+ await expect(method.run()).resolves.toBe('pro2-wallet-state');
101
+ expect(promptPassphrase).toHaveBeenCalledWith(
102
+ {
103
+ existsAttachPinUser: false,
104
+ source: 'wallet-session-coordinator',
105
+ reason: 'open-wallet',
106
+ },
107
+ { cancelDeviceOnReject: false }
108
+ );
109
+ expect(typedCall).toHaveBeenNthCalledWith(2, 'DeviceSessionAskPassphrase', 'Success', {});
110
+ expect(typedCall).toHaveBeenNthCalledWith(3, 'DeviceSessionGet', 'DeviceSession', {});
111
+ });
112
+
113
+ test('keeps Legacy Protocol V1 getPassphraseState parameterless', async () => {
114
+ const typedCall = jest.fn().mockResolvedValue({
115
+ type: 'PassphraseState',
116
+ message: {
117
+ passphrase_state: 'current-wallet-state',
118
+ session_id: 'current-wallet-session',
119
+ unlocked_attach_pin: false,
120
+ },
121
+ });
122
+ const method = new GetPassphraseState({
123
+ payload: {
124
+ method: 'getPassphraseState',
125
+ connectId: 'connect-id',
126
+ useEmptyPassphrase: true,
127
+ initSession: true,
128
+ passphraseState: 'ignored-wallet-state',
129
+ },
130
+ });
131
+ const device = createDevice({ typedCall });
132
+ device.isProtocolV2 = () => false;
133
+ device.features = {
134
+ ...device.features,
135
+ deviceId: 'device-1',
136
+ passphraseProtection: true,
137
+ unlocked: true,
138
+ sessionId: null,
139
+ };
140
+ device.getCurrentFirmwareVersionString = () => '4.15.0';
141
+ device.getCurrentDeviceType = () => EDeviceType.Pro;
142
+ device.getFeatures = jest.fn();
143
+ method.device = device as any;
144
+
145
+ await expect(method.run()).resolves.toBe('current-wallet-state');
146
+ expect(device.clearInternalState).not.toHaveBeenCalled();
147
+ expect(typedCall).toHaveBeenCalledWith('GetPassphraseState', 'PassphraseState', {
148
+ passphrase_state: undefined,
149
+ });
150
+ });
151
+
152
+ test('opens the standard wallet through the Protocol V1 empty-passphrase flow', async () => {
153
+ const typedCall = jest.fn().mockResolvedValue({
154
+ type: 'PassphraseState',
155
+ message: {
156
+ passphrase_state: 'main-wallet-state',
157
+ session_id: 'main-wallet-session',
158
+ unlocked_attach_pin: false,
159
+ },
160
+ });
161
+ const method = new OpenWalletSession({
162
+ payload: {
163
+ method: 'openWalletSession',
164
+ connectId: 'connect-id',
165
+ mode: 'standard',
166
+ },
167
+ });
168
+ method.init();
169
+ const device = createDevice({ typedCall });
170
+ device.isProtocolV2 = () => false;
171
+ device.features = {
172
+ ...device.features,
173
+ deviceId: 'device-1',
174
+ unlocked: true,
175
+ sessionId: null,
176
+ };
177
+ device.getCurrentFirmwareVersionString = () => '4.15.0';
178
+ device.getCurrentDeviceType = () => EDeviceType.Pro;
179
+ device.getFeatures = jest.fn();
180
+ method.device = device as any;
181
+
182
+ await expect(method.run()).resolves.toEqual({
183
+ protocol: 'V1',
184
+ walletType: 'standard',
185
+ deviceId: 'device-1',
186
+ passphraseState: null,
187
+ resumed: false,
188
+ });
189
+ expect(method.payload.useEmptyPassphrase).toBe(true);
190
+ expect(typedCall).toHaveBeenCalledWith('GetPassphraseState', 'PassphraseState', {
191
+ passphrase_state: undefined,
192
+ });
193
+ expect(device.clearInternalState).not.toHaveBeenCalled();
194
+ });
195
+
196
+ test('uses the explicit mode to select a hidden wallet on Protocol V2', async () => {
197
+ const typedCall = jest
198
+ .fn()
199
+ .mockResolvedValueOnce({ message: { version: 2 } })
200
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
201
+ .mockResolvedValueOnce({
202
+ message: {
203
+ btc_test_address: 'hidden-state',
204
+ session_id: 'hidden-session',
205
+ },
206
+ });
207
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
208
+ const method = new OpenWalletSession({
209
+ payload: {
210
+ method: 'openWalletSession',
211
+ connectId: 'connect-id',
212
+ mode: 'select-hidden',
213
+ },
214
+ });
215
+ method.init();
216
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
217
+
218
+ await expect(method.run()).resolves.toMatchObject({
219
+ protocol: 'V2',
220
+ walletType: 'hidden',
221
+ passphraseState: 'hidden-state',
222
+ });
223
+ expect(promptPassphrase).toHaveBeenCalled();
224
+ expect(typedCall).toHaveBeenNthCalledWith(2, 'DeviceSessionAskPassphrase', 'Success', {});
225
+ expect(typedCall).toHaveBeenNthCalledWith(3, 'DeviceSessionGet', 'DeviceSession', {});
226
+ });
227
+
228
+ test('classifies the selected Pro2 wallet from the post-unlock device state', async () => {
229
+ const typedCall = jest
230
+ .fn()
231
+ .mockResolvedValueOnce({ message: { version: 2 } })
232
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
233
+ .mockResolvedValueOnce({
234
+ message: {
235
+ btc_test_address: 'hidden-state-after-unlock',
236
+ session_id: 'hidden-session-after-unlock',
237
+ },
238
+ });
239
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
240
+ const method = new OpenWalletSession({
241
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
242
+ });
243
+ method.init();
244
+ const device = createDevice({
245
+ passphraseProtection: false,
246
+ typedCall,
247
+ promptPassphrase,
248
+ });
249
+ device.features.unlocked = false;
250
+ device.getCurrentPassphraseProtection = () => device.features.passphraseProtection;
251
+ device.unlockDevice = jest.fn().mockImplementation(() => {
252
+ device.features.unlocked = true;
253
+ device.features.passphraseProtection = true;
254
+ return Promise.resolve(device.features);
255
+ });
256
+ method.device = device as any;
257
+
258
+ await expect(method.run()).resolves.toEqual({
259
+ protocol: 'V2',
260
+ walletType: 'hidden',
261
+ deviceId: 'device-1',
262
+ passphraseState: 'hidden-state-after-unlock',
263
+ resumed: false,
264
+ });
265
+ expect(device.unlockDevice).toHaveBeenCalledWith(DeviceSessionPinType.Main);
266
+ expect(promptPassphrase).toHaveBeenCalledTimes(1);
267
+ });
268
+
269
+ test('select-hidden starts a fresh hidden-wallet session on Protocol V2', async () => {
270
+ const typedCall = jest
271
+ .fn()
272
+ .mockResolvedValueOnce({ message: { version: 2 } })
273
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
274
+ .mockResolvedValueOnce({
275
+ message: {
276
+ btc_test_address: 'new-hidden-state',
277
+ session_id: 'new-hidden-session',
278
+ },
279
+ });
280
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
281
+ const method = new OpenWalletSession({
282
+ payload: {
283
+ method: 'openWalletSession',
284
+ connectId: 'connect-id',
285
+ mode: 'select-hidden',
286
+ },
287
+ });
288
+ method.init();
289
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
290
+
291
+ await expect(method.run()).resolves.toEqual({
292
+ protocol: 'V2',
293
+ walletType: 'hidden',
294
+ deviceId: 'device-1',
295
+ passphraseState: 'new-hidden-state',
296
+ resumed: false,
297
+ });
298
+ expect(typedCall).toHaveBeenCalledWith('ProtocolInfoRequest', 'ProtocolInfo', {
299
+ eventless_wallet_session: true,
300
+ });
301
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionAskPassphrase', 'Success', {});
302
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {});
303
+ expect(promptPassphrase).toHaveBeenCalled();
304
+ expect(deviceWalletSessionStore.get('device-1', 'new-hidden-state')).toBe('new-hidden-session');
305
+ });
306
+
307
+ test('select-hidden does not clear another device wallet', async () => {
308
+ const typedCall = jest
309
+ .fn()
310
+ .mockResolvedValueOnce({ message: { version: 2 } })
311
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
312
+ .mockResolvedValueOnce({
313
+ message: {
314
+ btc_test_address: 'current-device-state',
315
+ session_id: 'current-device-session',
316
+ },
317
+ });
318
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
319
+ const method = new OpenWalletSession({
320
+ payload: {
321
+ method: 'openWalletSession',
322
+ connectId: 'connect-id',
323
+ mode: 'select-hidden',
324
+ },
325
+ });
326
+ method.init();
327
+ deviceWalletSessionStore.set('other-device', 'other-device-state', 'other-device-session');
328
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
329
+
330
+ await expect(method.run()).resolves.toMatchObject({
331
+ deviceId: 'device-1',
332
+ passphraseState: 'current-device-state',
333
+ resumed: false,
334
+ });
335
+ expect(deviceWalletSessionStore.get('other-device', 'other-device-state')).toBe(
336
+ 'other-device-session'
337
+ );
338
+ });
339
+
340
+ test('uses an explicit wallet binding to resume on Protocol V2', async () => {
341
+ const typedCall = jest
342
+ .fn()
343
+ .mockResolvedValueOnce({ message: { version: 2 } })
344
+ .mockResolvedValueOnce({
345
+ message: {
346
+ btc_test_address: 'hidden-state',
347
+ session_id: 'renewed-session',
348
+ },
349
+ });
350
+ const promptPassphrase = jest.fn();
351
+ const method = new OpenWalletSession({
352
+ payload: {
353
+ method: 'openWalletSession',
354
+ connectId: 'connect-id',
355
+ mode: 'resume-hidden',
356
+ deviceId: 'device-1',
357
+ passphraseState: 'hidden-state',
358
+ },
359
+ });
360
+ method.init();
361
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'known-session');
362
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
363
+
364
+ await expect(method.run()).resolves.toEqual({
365
+ protocol: 'V2',
366
+ walletType: 'hidden',
367
+ deviceId: 'device-1',
368
+ passphraseState: 'hidden-state',
369
+ resumed: true,
370
+ });
371
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {
372
+ session_id: 'known-session',
373
+ });
374
+ expect(promptPassphrase).not.toHaveBeenCalled();
375
+ });
376
+
377
+ test.each([
378
+ {
379
+ mode: 'standard',
380
+ initSession: true,
381
+ },
382
+ {
383
+ mode: 'select-hidden',
384
+ useEmptyPassphrase: false,
385
+ },
386
+ {
387
+ mode: 'select-hidden',
388
+ deviceId: 'device-1',
389
+ passphraseState: 'hidden-state',
390
+ },
391
+ {
392
+ mode: 'resume-hidden',
393
+ deviceId: 'device-1',
394
+ passphraseState: 'hidden-state',
395
+ initSession: false,
396
+ },
397
+ ])('rejects legacy parameters combined with explicit mode: %o', params => {
398
+ const method = new OpenWalletSession({
399
+ payload: {
400
+ method: 'openWalletSession',
401
+ connectId: 'connect-id',
402
+ ...params,
403
+ } as any,
404
+ });
405
+
406
+ expect(() => method.init()).toThrow(
407
+ expect.objectContaining({
408
+ errorCode: HardwareErrorCode.CallMethodInvalidParameter,
409
+ })
410
+ );
411
+ });
412
+
413
+ test.each([{ initSession: 'true' }, { useEmptyPassphrase: 'false' }])(
414
+ 'rejects legacy flags without an explicit mode: %o',
415
+ params => {
416
+ const method = new OpenWalletSession({
417
+ payload: {
418
+ method: 'openWalletSession',
419
+ connectId: 'connect-id',
420
+ ...params,
421
+ } as any,
422
+ });
423
+
424
+ expect(() => method.init()).toThrow(
425
+ expect.objectContaining({
426
+ errorCode: HardwareErrorCode.CallMethodInvalidParameter,
427
+ })
428
+ );
429
+ }
430
+ );
431
+
432
+ test('reuses the SDK-managed Protocol V1 hidden-wallet session before validation', async () => {
433
+ const typedCall = jest.fn().mockResolvedValue({
434
+ type: 'PassphraseState',
435
+ message: {
436
+ passphrase_state: 'hidden-state',
437
+ session_id: 'known-session',
438
+ unlocked_attach_pin: false,
439
+ },
440
+ });
441
+ const method = new OpenWalletSession({
442
+ payload: {
443
+ method: 'openWalletSession',
444
+ connectId: 'connect-id',
445
+ mode: 'resume-hidden',
446
+ deviceId: 'device-1',
447
+ passphraseState: 'hidden-state',
448
+ },
449
+ });
450
+ method.init();
451
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'known-session');
452
+ const device = createDevice({ typedCall });
453
+ device.isProtocolV2 = () => false;
454
+ device.features = {
455
+ ...device.features,
456
+ deviceId: 'device-1',
457
+ unlocked: true,
458
+ sessionId: null,
459
+ };
460
+ device.getCurrentFirmwareVersionString = () => '4.15.0';
461
+ device.getCurrentDeviceType = () => EDeviceType.Pro;
462
+ device.getFeatures = jest.fn();
463
+ method.device = device as any;
464
+
465
+ await expect(method.run()).resolves.toMatchObject({
466
+ protocol: 'V1',
467
+ walletType: 'hidden',
468
+ passphraseState: 'hidden-state',
469
+ resumed: true,
470
+ });
471
+ expect(device.initialize).toHaveBeenCalledWith({
472
+ deviceId: 'device-1',
473
+ passphraseState: 'hidden-state',
474
+ });
475
+ expect(typedCall).toHaveBeenCalledWith('GetPassphraseState', 'PassphraseState', {
476
+ passphrase_state: 'hidden-state',
477
+ });
478
+ });
479
+
480
+ test('opens the standard wallet without selecting a hidden wallet', async () => {
481
+ const typedCall = jest.fn().mockResolvedValue({ message: { version: 2 } });
482
+ const promptPassphrase = jest.fn();
483
+ const method = new OpenWalletSession({
484
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'standard' },
485
+ });
486
+ method.init();
487
+ const device = createDevice({ typedCall, promptPassphrase });
488
+ device.passphraseState = 'previous-hidden-state';
489
+ method.device = device as any;
490
+
491
+ await expect(method.run()).resolves.toEqual({
492
+ protocol: 'V2',
493
+ walletType: 'standard',
494
+ deviceId: 'device-1',
495
+ passphraseState: null,
496
+ resumed: false,
497
+ });
498
+ expect(typedCall).toHaveBeenCalledTimes(1);
499
+ expect(typedCall).toHaveBeenCalledWith('ProtocolInfoRequest', 'ProtocolInfo', {
500
+ eventless_wallet_session: true,
501
+ });
502
+ expect(promptPassphrase).not.toHaveBeenCalled();
503
+ expect(device.passphraseState).toBeUndefined();
504
+ });
505
+
506
+ test('opens a locked Protocol V2 standard wallet after deviceId becomes available', async () => {
507
+ const typedCall = jest.fn().mockResolvedValue({ message: { version: 2 } });
508
+ const method = new OpenWalletSession({
509
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'standard' },
510
+ });
511
+ method.init();
512
+ const device = createDevice({ typedCall });
513
+ device.features.unlocked = false;
514
+ device.getDeviceState = jest
515
+ .fn()
516
+ .mockResolvedValueOnce({
517
+ identity: { deviceId: undefined },
518
+ status: { passphraseProtection: true },
519
+ })
520
+ .mockResolvedValueOnce({
521
+ identity: { deviceId: 'device-1' },
522
+ status: { passphraseProtection: true },
523
+ });
524
+ device.unlockDevice = jest.fn().mockImplementation(() => {
525
+ device.features.unlocked = true;
526
+ return Promise.resolve(device.features);
527
+ });
528
+ method.device = device as any;
529
+
530
+ await expect(method.run()).resolves.toEqual({
531
+ protocol: 'V2',
532
+ walletType: 'standard',
533
+ deviceId: 'device-1',
534
+ passphraseState: null,
535
+ resumed: false,
536
+ });
537
+ expect(device.unlockDevice).toHaveBeenCalledTimes(1);
538
+ expect(device.getDeviceState).toHaveBeenCalledTimes(2);
539
+ });
540
+
541
+ test('rejects a standard-wallet request when Protocol V2 is unlocked by Attach PIN', async () => {
542
+ const typedCall = jest
543
+ .fn()
544
+ .mockResolvedValueOnce({ message: { version: 2 } })
545
+ .mockResolvedValueOnce({
546
+ message: {
547
+ btc_test_address: 'attach-wallet-state',
548
+ session_id: 'attach-wallet-session',
549
+ },
550
+ });
551
+ const method = new OpenWalletSession({
552
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'standard' },
553
+ });
554
+ method.init();
555
+ const device = createDevice({ typedCall });
556
+ device.features.unlockedAttachPin = true;
557
+ method.device = device as any;
558
+
559
+ await expect(method.run()).rejects.toMatchObject({
560
+ errorCode: HardwareErrorCode.DeviceCheckUnlockTypeError,
561
+ });
562
+ expect(device.lockDevice).toHaveBeenCalled();
563
+ expect(device.clearInternalState).toHaveBeenCalled();
564
+ });
565
+
566
+ test('selects a hidden wallet without exposing the internal device session', async () => {
567
+ const typedCall = jest
568
+ .fn()
569
+ .mockResolvedValueOnce({ message: { version: 2 } })
570
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
571
+ .mockResolvedValueOnce({
572
+ message: {
573
+ btc_test_address: 'hidden-state',
574
+ session_id: 'hidden-session',
575
+ },
576
+ });
577
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
578
+ const method = new OpenWalletSession({
579
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
580
+ });
581
+ method.init();
582
+ const device = createDevice({ typedCall, promptPassphrase });
583
+ device.passphraseState = 'previous-hidden-state';
584
+ method.device = device as any;
585
+
586
+ await expect(method.run()).resolves.toEqual({
587
+ protocol: 'V2',
588
+ walletType: 'hidden',
589
+ deviceId: 'device-1',
590
+ passphraseState: 'hidden-state',
591
+ resumed: false,
592
+ });
593
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionAskPassphrase', 'Success', {});
594
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {});
595
+ expect(promptPassphrase).toHaveBeenCalled();
596
+ expect(device.passphraseState).toBeUndefined();
597
+ expect(deviceWalletSessionStore.get('device-1', 'hidden-state')).toBe('hidden-session');
598
+ });
599
+
600
+ test('selects on-device passphrase entry before getting the prepared session', async () => {
601
+ const typedCall = jest
602
+ .fn()
603
+ .mockResolvedValueOnce({ message: { version: 2 } })
604
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
605
+ .mockResolvedValueOnce({
606
+ message: { btc_test_address: 'device-state', session_id: 'device-session' },
607
+ });
608
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
609
+ const method = new OpenWalletSession({
610
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
611
+ });
612
+ method.init();
613
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
614
+
615
+ await expect(method.run()).resolves.toMatchObject({
616
+ walletType: 'hidden',
617
+ passphraseState: 'device-state',
618
+ });
619
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionAskPassphrase', 'Success', {});
620
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {});
621
+ });
622
+
623
+ test('forwards a host passphrase to Pro2 firmware', async () => {
624
+ const typedCall = jest
625
+ .fn()
626
+ .mockResolvedValueOnce({ message: { version: 2 } })
627
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
628
+ .mockResolvedValueOnce({
629
+ message: { btc_test_address: 'host-state', session_id: 'host-session' },
630
+ });
631
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphrase: 'host hidden wallet' });
632
+ const method = new OpenWalletSession({
633
+ payload: {
634
+ method: 'openWalletSession',
635
+ connectId: 'connect-id',
636
+ mode: 'select-hidden',
637
+ },
638
+ });
639
+ method.init();
640
+ method.device = createDevice({
641
+ typedCall,
642
+ promptPassphrase,
643
+ }) as any;
644
+
645
+ await expect(method.run()).resolves.toMatchObject({
646
+ walletType: 'hidden',
647
+ passphraseState: 'host-state',
648
+ });
649
+ expect(promptPassphrase).toHaveBeenCalledWith(
650
+ {
651
+ existsAttachPinUser: false,
652
+ source: 'wallet-session-coordinator',
653
+ reason: 'open-wallet',
654
+ },
655
+ { cancelDeviceOnReject: false }
656
+ );
657
+ expect(typedCall).toHaveBeenNthCalledWith(2, 'DeviceSessionAskPassphrase', 'Success', {
658
+ passphrase: 'host hidden wallet',
659
+ });
660
+ });
661
+
662
+ test('selects Attach PIN only when the device reports an existing binding', async () => {
663
+ const typedCall = jest
664
+ .fn()
665
+ .mockResolvedValueOnce({ message: { version: 2 } })
666
+ .mockResolvedValueOnce({
667
+ message: { btc_test_address: 'attach-state', session_id: 'attach-session' },
668
+ });
669
+ const promptPassphrase = jest.fn().mockResolvedValue({ attachPinOnDevice: true });
670
+ const method = new OpenWalletSession({
671
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
672
+ });
673
+ method.init();
674
+ const device = createDevice({ typedCall, promptPassphrase });
675
+ device.features.attachToPinEnabled = true;
676
+ method.device = device as any;
677
+
678
+ await expect(method.run()).resolves.toMatchObject({
679
+ walletType: 'hidden',
680
+ passphraseState: 'attach-state',
681
+ });
682
+ expect(promptPassphrase).toHaveBeenCalledWith(
683
+ {
684
+ existsAttachPinUser: true,
685
+ source: 'wallet-session-coordinator',
686
+ reason: 'open-wallet',
687
+ },
688
+ { cancelDeviceOnReject: false }
689
+ );
690
+ expect(device.unlockDevice).toHaveBeenCalledWith(DeviceSessionPinType.AttachToPin);
691
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {});
692
+ });
693
+
694
+ test.each([
695
+ {
696
+ missingField: 'session_id',
697
+ message: { btc_test_address: 'hidden-state' },
698
+ },
699
+ {
700
+ missingField: 'btc_test_address',
701
+ message: { session_id: 'hidden-session' },
702
+ },
703
+ ])(
704
+ 'rejects an incomplete Protocol V2 hidden-wallet response missing $missingField',
705
+ async ({ message }) => {
706
+ const typedCall = jest
707
+ .fn()
708
+ .mockResolvedValueOnce({ message: { version: 2 } })
709
+ .mockResolvedValueOnce({ message: { message: 'passphrase prepared' } })
710
+ .mockResolvedValueOnce({ message });
711
+ const promptPassphrase = jest.fn().mockResolvedValue({ passphraseOnDevice: true });
712
+ const method = new OpenWalletSession({
713
+ payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
714
+ });
715
+ method.init();
716
+ const device = createDevice({ typedCall, promptPassphrase });
717
+ method.device = device as any;
718
+
719
+ await expect(method.run()).rejects.toMatchObject({
720
+ errorCode: HardwareErrorCode.RuntimeError,
721
+ message: 'DeviceSessionGet returned an incomplete DeviceSession response.',
722
+ });
723
+ expect(device.clearInternalState).toHaveBeenCalled();
724
+ expect(device.updateInternalState).not.toHaveBeenCalled();
725
+ }
726
+ );
727
+
728
+ test('resumes a known hidden wallet without prompting or device selection', async () => {
729
+ const typedCall = jest
730
+ .fn()
731
+ .mockResolvedValueOnce({ message: { version: 2 } })
732
+ .mockResolvedValueOnce({
733
+ message: {
734
+ btc_test_address: 'hidden-state',
735
+ session_id: 'renewed-session',
736
+ },
737
+ });
738
+ const promptPassphrase = jest.fn();
739
+ const method = new OpenWalletSession({
740
+ payload: {
741
+ method: 'openWalletSession',
742
+ connectId: 'connect-id',
743
+ mode: 'resume-hidden',
744
+ deviceId: 'device-1',
745
+ passphraseState: 'hidden-state',
746
+ },
747
+ });
748
+ method.init();
749
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'known-session');
750
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
751
+
752
+ await expect(method.run()).resolves.toEqual({
753
+ protocol: 'V2',
754
+ walletType: 'hidden',
755
+ deviceId: 'device-1',
756
+ passphraseState: 'hidden-state',
757
+ resumed: true,
758
+ });
759
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {
760
+ session_id: 'known-session',
761
+ });
762
+ expect(promptPassphrase).not.toHaveBeenCalled();
763
+ });
764
+
765
+ test('validates a locked Protocol V2 resume binding after deviceId refresh', async () => {
766
+ const typedCall = jest
767
+ .fn()
768
+ .mockResolvedValueOnce({ message: { version: 2 } })
769
+ .mockResolvedValueOnce({
770
+ message: {
771
+ btc_test_address: 'hidden-state',
772
+ session_id: 'renewed-session',
773
+ },
774
+ });
775
+ const method = new OpenWalletSession({
776
+ payload: {
777
+ method: 'openWalletSession',
778
+ connectId: 'connect-id',
779
+ mode: 'resume-hidden',
780
+ deviceId: 'device-1',
781
+ passphraseState: 'hidden-state',
782
+ },
783
+ });
784
+ method.init();
785
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'known-session');
786
+ const device = createDevice({ typedCall });
787
+ device.features.unlocked = false;
788
+ device.getDeviceState = jest
789
+ .fn()
790
+ .mockResolvedValueOnce({
791
+ identity: { deviceId: undefined },
792
+ status: { passphraseProtection: true },
793
+ })
794
+ .mockResolvedValueOnce({
795
+ identity: { deviceId: 'device-1' },
796
+ status: { passphraseProtection: true },
797
+ });
798
+ device.unlockDevice = jest.fn().mockImplementation(() => {
799
+ device.features.unlocked = true;
800
+ return Promise.resolve(device.features);
801
+ });
802
+ method.device = device as any;
803
+
804
+ await expect(method.run()).resolves.toMatchObject({
805
+ protocol: 'V2',
806
+ walletType: 'hidden',
807
+ deviceId: 'device-1',
808
+ passphraseState: 'hidden-state',
809
+ resumed: true,
810
+ });
811
+ expect(device.unlockDevice).toHaveBeenCalledTimes(1);
812
+ expect(device.getDeviceState).toHaveBeenCalledTimes(2);
813
+ expect(typedCall).toHaveBeenCalledWith('DeviceSessionGet', 'DeviceSession', {
814
+ session_id: 'known-session',
815
+ });
816
+ const sessionGetCall = typedCall.mock.calls.findIndex(
817
+ ([requestName]) => requestName === 'DeviceSessionGet'
818
+ );
819
+ expect(device.getDeviceState.mock.invocationCallOrder[1]).toBeLessThan(
820
+ typedCall.mock.invocationCallOrder[sessionGetCall]
821
+ );
822
+ });
823
+
824
+ test('rejects a Protocol V2 resume when the refreshed deviceId does not match', async () => {
825
+ const typedCall = jest.fn().mockResolvedValue({
826
+ message: {
827
+ btc_test_address: 'hidden-state',
828
+ session_id: 'renewed-session',
829
+ },
830
+ });
831
+ const method = new OpenWalletSession({
832
+ payload: {
833
+ method: 'openWalletSession',
834
+ connectId: 'connect-id',
835
+ mode: 'resume-hidden',
836
+ deviceId: 'device-1',
837
+ passphraseState: 'hidden-state',
838
+ },
839
+ });
840
+ method.init();
841
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'known-session');
842
+ const device = createDevice({ typedCall });
843
+ device.features.unlocked = false;
844
+ device.getDeviceState = jest
845
+ .fn()
846
+ .mockResolvedValueOnce({
847
+ identity: { deviceId: undefined },
848
+ status: { passphraseProtection: true },
849
+ })
850
+ .mockResolvedValueOnce({
851
+ identity: { deviceId: 'other-device' },
852
+ status: { passphraseProtection: true },
853
+ });
854
+ device.unlockDevice = jest.fn().mockImplementation(() => {
855
+ device.features.unlocked = true;
856
+ return Promise.resolve(device.features);
857
+ });
858
+ method.device = device as any;
859
+
860
+ await expect(method.run()).rejects.toMatchObject({
861
+ errorCode: HardwareErrorCode.DeviceCheckDeviceIdError,
862
+ });
863
+ expect(typedCall).not.toHaveBeenCalled();
864
+ expect(device.clearInternalState).not.toHaveBeenCalled();
865
+ expect(deviceWalletSessionStore.get('device-1', 'hidden-state')).toBeUndefined();
866
+ });
867
+
868
+ test('does not fall back to wallet selection when a cached resume is invalid', async () => {
869
+ const typedCall = jest.fn().mockRejectedValue(
870
+ Object.assign(new Error('Invalid session'), {
871
+ errorCode: HardwareErrorCode.WalletSessionInvalid,
872
+ })
873
+ );
874
+ const promptPassphrase = jest.fn();
875
+ const method = new OpenWalletSession({
876
+ payload: {
877
+ method: 'openWalletSession',
878
+ connectId: 'connect-id',
879
+ mode: 'resume-hidden',
880
+ deviceId: 'device-1',
881
+ passphraseState: 'hidden-state',
882
+ },
883
+ });
884
+ method.init();
885
+ deviceWalletSessionStore.set('device-1', 'hidden-state', 'expired-session');
886
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
887
+
888
+ await expect(method.run()).rejects.toMatchObject({
889
+ errorCode: HardwareErrorCode.WalletSessionInvalid,
890
+ });
891
+ expect(promptPassphrase).not.toHaveBeenCalled();
892
+ });
893
+
894
+ test('rejects resume-hidden when the SDK store has no matching session', async () => {
895
+ const typedCall = jest.fn();
896
+ const promptPassphrase = jest.fn();
897
+ const method = new OpenWalletSession({
898
+ payload: {
899
+ method: 'openWalletSession',
900
+ connectId: 'connect-id',
901
+ mode: 'resume-hidden',
902
+ deviceId: 'device-1',
903
+ passphraseState: 'hidden-state',
904
+ },
905
+ });
906
+ method.init();
907
+ method.device = createDevice({ typedCall, promptPassphrase }) as any;
908
+
909
+ await expect(method.run()).rejects.toMatchObject({
910
+ errorCode: HardwareErrorCode.WalletSessionInvalid,
911
+ });
912
+ expect(typedCall).not.toHaveBeenCalled();
913
+ expect(promptPassphrase).not.toHaveBeenCalled();
914
+ });
915
+ });