@onetokenfe/hd-core 1.1.23

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 (382) hide show
  1. package/.eslintrc +6 -0
  2. package/README.md +32 -0
  3. package/__tests__/benfen.test.ts +68 -0
  4. package/__tests__/checkBootloaderReleast.test.ts +115 -0
  5. package/__tests__/evmSignTransaction.test.ts +419 -0
  6. package/jest.config.js +6 -0
  7. package/package.json +48 -0
  8. package/src/api/BaseMethod.ts +275 -0
  9. package/src/api/CheckAllFirmwareRelease.ts +73 -0
  10. package/src/api/CheckBLEFirmwareRelease.ts +23 -0
  11. package/src/api/CheckBootloaderRelease.ts +32 -0
  12. package/src/api/CheckBridgeRelease.ts +28 -0
  13. package/src/api/CheckBridgeStatus.ts +32 -0
  14. package/src/api/CheckFirmwareRelease.ts +31 -0
  15. package/src/api/CheckFirmwareTypeAvailable.tsx +30 -0
  16. package/src/api/CipherKeyValue.ts +68 -0
  17. package/src/api/FirmwareUpdate.ts +219 -0
  18. package/src/api/FirmwareUpdateV2.ts +408 -0
  19. package/src/api/FirmwareUpdateV3.ts +560 -0
  20. package/src/api/GetFeatures.ts +23 -0
  21. package/src/api/GetLogs.ts +40 -0
  22. package/src/api/GetOnetokenFeatures.ts +25 -0
  23. package/src/api/GetPassphraseState.ts +28 -0
  24. package/src/api/PromptWebDeviceAccess.ts +77 -0
  25. package/src/api/SearchDevices.ts +50 -0
  26. package/src/api/alephium/AlephiumGetAddress.ts +84 -0
  27. package/src/api/alephium/AlephiumSignMessage.ts +51 -0
  28. package/src/api/alephium/AlephiumSignTransaction.ts +135 -0
  29. package/src/api/algo/AlgoGetAddress.ts +73 -0
  30. package/src/api/algo/AlgoSignTransaction.ts +52 -0
  31. package/src/api/allnetwork/AllNetworkGetAddress.ts +88 -0
  32. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +529 -0
  33. package/src/api/allnetwork/AllNetworkGetAddressByLoop.ts +162 -0
  34. package/src/api/aptos/AptosGetAddress.ts +129 -0
  35. package/src/api/aptos/AptosGetPublicKey.ts +64 -0
  36. package/src/api/aptos/AptosSignInMessage.ts +55 -0
  37. package/src/api/aptos/AptosSignMessage.ts +79 -0
  38. package/src/api/aptos/AptosSignTransaction.ts +72 -0
  39. package/src/api/benfen/BenfenGetAddress.ts +122 -0
  40. package/src/api/benfen/BenfenGetPublicKey.ts +68 -0
  41. package/src/api/benfen/BenfenSignMessage.ts +50 -0
  42. package/src/api/benfen/BenfenSignTransaction.ts +105 -0
  43. package/src/api/benfen/normalize.ts +51 -0
  44. package/src/api/btc/BTCGetAddress.ts +91 -0
  45. package/src/api/btc/BTCGetPublicKey.ts +174 -0
  46. package/src/api/btc/BTCSignMessage.ts +73 -0
  47. package/src/api/btc/BTCSignPsbt.ts +65 -0
  48. package/src/api/btc/BTCSignTransaction.ts +148 -0
  49. package/src/api/btc/BTCVerifyMessage.ts +46 -0
  50. package/src/api/btc/helpers/btcParamsUtils.ts +64 -0
  51. package/src/api/btc/helpers/signtx.ts +251 -0
  52. package/src/api/btc/helpers/signtxLegacy.ts +227 -0
  53. package/src/api/btc/helpers/versionLimit.ts +25 -0
  54. package/src/api/btc/helpers/xpubUtils.ts +132 -0
  55. package/src/api/cardano/CardanoGetAddress.ts +139 -0
  56. package/src/api/cardano/CardanoGetPublicKey.ts +72 -0
  57. package/src/api/cardano/CardanoSignMessage.ts +73 -0
  58. package/src/api/cardano/CardanoSignTransaction.ts +404 -0
  59. package/src/api/cardano/helper/addressParameters.ts +120 -0
  60. package/src/api/cardano/helper/auxiliaryData.ts +133 -0
  61. package/src/api/cardano/helper/cardanoInputs.ts +55 -0
  62. package/src/api/cardano/helper/cardanoOutputs.ts +89 -0
  63. package/src/api/cardano/helper/certificate.ts +246 -0
  64. package/src/api/cardano/helper/token.ts +44 -0
  65. package/src/api/cardano/helper/utils.ts +17 -0
  66. package/src/api/cardano/helper/witnesses.ts +62 -0
  67. package/src/api/conflux/ConfluxGetAddress.ts +78 -0
  68. package/src/api/conflux/ConfluxSignMessage.ts +49 -0
  69. package/src/api/conflux/ConfluxSignMessageCIP23.ts +49 -0
  70. package/src/api/conflux/ConfluxSignTransaction.ts +135 -0
  71. package/src/api/cosmos/CosmosGetAddress.ts +80 -0
  72. package/src/api/cosmos/CosmosGetPublicKey.ts +77 -0
  73. package/src/api/cosmos/CosmosSignTransaction.ts +68 -0
  74. package/src/api/device/DeviceBackup.ts +15 -0
  75. package/src/api/device/DeviceCancel.ts +15 -0
  76. package/src/api/device/DeviceChangePin.ts +25 -0
  77. package/src/api/device/DeviceFlags.ts +26 -0
  78. package/src/api/device/DeviceFullyUploadResource.ts +80 -0
  79. package/src/api/device/DeviceLock.ts +15 -0
  80. package/src/api/device/DeviceRebootToBoardloader.ts +30 -0
  81. package/src/api/device/DeviceRebootToBootloader.ts +28 -0
  82. package/src/api/device/DeviceRecovery.ts +44 -0
  83. package/src/api/device/DeviceReset.ts +46 -0
  84. package/src/api/device/DeviceSettings.ts +96 -0
  85. package/src/api/device/DeviceSupportFeatures.ts +29 -0
  86. package/src/api/device/DeviceUnlock.ts +13 -0
  87. package/src/api/device/DeviceUpdateBootloader.ts +111 -0
  88. package/src/api/device/DeviceUpdateReboot.ts +17 -0
  89. package/src/api/device/DeviceUploadResource.ts +204 -0
  90. package/src/api/device/DeviceVerify.ts +65 -0
  91. package/src/api/device/DeviceWipe.ts +15 -0
  92. package/src/api/dynex/DnxGetAddress.ts +75 -0
  93. package/src/api/dynex/DnxSignTransaction.ts +126 -0
  94. package/src/api/evm/EVMGetAddress.ts +88 -0
  95. package/src/api/evm/EVMGetPublicKey.ts +116 -0
  96. package/src/api/evm/EVMSignMessage.ts +49 -0
  97. package/src/api/evm/EVMSignMessageEIP712.ts +56 -0
  98. package/src/api/evm/EVMSignTransaction.ts +141 -0
  99. package/src/api/evm/EVMSignTypedData.ts +477 -0
  100. package/src/api/evm/EVMVerifyMessage.ts +46 -0
  101. package/src/api/evm/latest/getAddress.ts +13 -0
  102. package/src/api/evm/latest/getPublicKey.ts +17 -0
  103. package/src/api/evm/latest/signMessage.ts +19 -0
  104. package/src/api/evm/latest/signTransaction.ts +303 -0
  105. package/src/api/evm/latest/signTypedData.ts +34 -0
  106. package/src/api/evm/latest/signTypedHash.ts +46 -0
  107. package/src/api/evm/latest/verifyMessage.ts +15 -0
  108. package/src/api/evm/legacyV1/getAddress.ts +16 -0
  109. package/src/api/evm/legacyV1/getPublicKey.ts +20 -0
  110. package/src/api/evm/legacyV1/signMessage.ts +22 -0
  111. package/src/api/evm/legacyV1/signTransaction.ts +37 -0
  112. package/src/api/evm/legacyV1/signTypedData.ts +37 -0
  113. package/src/api/evm/legacyV1/signTypedHash.ts +50 -0
  114. package/src/api/evm/legacyV1/verifyMessage.ts +19 -0
  115. package/src/api/filecoin/FilecoinGetAddress.ts +80 -0
  116. package/src/api/filecoin/FilecoinSignTransaction.ts +57 -0
  117. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +476 -0
  118. package/src/api/firmware/bootloaderHelper.ts +46 -0
  119. package/src/api/firmware/getBinary.ts +99 -0
  120. package/src/api/firmware/releaseHelper.ts +78 -0
  121. package/src/api/firmware/updateBootloader.ts +82 -0
  122. package/src/api/firmware/uploadFirmware.ts +541 -0
  123. package/src/api/helpers/batchGetPublickeys.ts +84 -0
  124. package/src/api/helpers/bigNumberUtils.ts +58 -0
  125. package/src/api/helpers/hexUtils.ts +111 -0
  126. package/src/api/helpers/paramsValidator.ts +165 -0
  127. package/src/api/helpers/pathUtils.ts +145 -0
  128. package/src/api/helpers/stringUtils.ts +11 -0
  129. package/src/api/helpers/typeNameUtils.ts +137 -0
  130. package/src/api/index.ts +161 -0
  131. package/src/api/kaspa/KaspaGetAddress.ts +103 -0
  132. package/src/api/kaspa/KaspaSignTransaction.ts +182 -0
  133. package/src/api/kaspa/helpers/BufferWriter.ts +177 -0
  134. package/src/api/kaspa/helpers/HashWriter.ts +74 -0
  135. package/src/api/kaspa/helpers/SignatureType.ts +7 -0
  136. package/src/api/kaspa/helpers/TransferSerialize.ts +144 -0
  137. package/src/api/lightning/LnurlAuth.ts +52 -0
  138. package/src/api/near/NearGetAddress.ts +75 -0
  139. package/src/api/near/NearSignTransaction.ts +46 -0
  140. package/src/api/nem/NEMGetAddress.ts +72 -0
  141. package/src/api/nem/NEMSignTransaction.ts +251 -0
  142. package/src/api/neo/NeoGetAddress.ts +80 -0
  143. package/src/api/neo/NeoSignTransaction.ts +59 -0
  144. package/src/api/nervos/NervosGetAddress.ts +80 -0
  145. package/src/api/nervos/NervosSignTransaction.ts +116 -0
  146. package/src/api/nexa/NexaGetAddress.ts +88 -0
  147. package/src/api/nexa/NexaSignTransaction.ts +107 -0
  148. package/src/api/nostr/NostrDecryptMessage.ts +57 -0
  149. package/src/api/nostr/NostrEncryptMessage.ts +57 -0
  150. package/src/api/nostr/NostrGetPublicKey.ts +74 -0
  151. package/src/api/nostr/NostrSignEvent.ts +65 -0
  152. package/src/api/nostr/NostrSignSchnorr.ts +52 -0
  153. package/src/api/nostr/helper/index.ts +28 -0
  154. package/src/api/polkadot/PolkadotGetAddress.ts +83 -0
  155. package/src/api/polkadot/PolkadotSignTransaction.ts +53 -0
  156. package/src/api/polkadot/networks.ts +72 -0
  157. package/src/api/scdo/ScdoGetAddress.ts +76 -0
  158. package/src/api/scdo/ScdoSignMessage.ts +45 -0
  159. package/src/api/scdo/ScdoSignTransaction.ts +106 -0
  160. package/src/api/solana/SolGetAddress.ts +68 -0
  161. package/src/api/solana/SolSignMessage.ts +61 -0
  162. package/src/api/solana/SolSignOffchainMessage.ts +61 -0
  163. package/src/api/solana/SolSignTransaction.ts +108 -0
  164. package/src/api/starcoin/StarcoinGetAddress.ts +69 -0
  165. package/src/api/starcoin/StarcoinGetPublicKey.ts +70 -0
  166. package/src/api/starcoin/StarcoinSignMessage.ts +42 -0
  167. package/src/api/starcoin/StarcoinSignTransaction.ts +38 -0
  168. package/src/api/starcoin/StarcoinVerifyMessage.ts +35 -0
  169. package/src/api/stellar/StellarGetAddress.ts +68 -0
  170. package/src/api/stellar/StellarSignTransaction.ts +220 -0
  171. package/src/api/sui/SuiGetAddress.ts +117 -0
  172. package/src/api/sui/SuiGetPublicKey.ts +66 -0
  173. package/src/api/sui/SuiSignMessage.ts +48 -0
  174. package/src/api/sui/SuiSignTransaction.ts +126 -0
  175. package/src/api/sui/normalize.ts +28 -0
  176. package/src/api/test/TestInitializeDeviceDuration.ts +22 -0
  177. package/src/api/ton/TonGetAddress.ts +96 -0
  178. package/src/api/ton/TonSignMessage.ts +217 -0
  179. package/src/api/ton/TonSignProof.ts +62 -0
  180. package/src/api/tron/TronGetAddress.ts +75 -0
  181. package/src/api/tron/TronSignMessage.ts +89 -0
  182. package/src/api/tron/TronSignTransaction.ts +214 -0
  183. package/src/api/u2f/GetNextU2FCounter.ts +15 -0
  184. package/src/api/u2f/SetU2FCounter.ts +19 -0
  185. package/src/api/utils.ts +23 -0
  186. package/src/api/xrp/XrpGetAddress.ts +96 -0
  187. package/src/api/xrp/XrpSignTransaction.ts +71 -0
  188. package/src/constants/errors.ts +15 -0
  189. package/src/constants/index.ts +2 -0
  190. package/src/constants/ui-request.ts +3 -0
  191. package/src/core/RequestQueue.ts +134 -0
  192. package/src/core/index.ts +1320 -0
  193. package/src/data/coins/bitcoin.json +44 -0
  194. package/src/data/config.ts +25 -0
  195. package/src/data/messages/messages.json +13167 -0
  196. package/src/data/messages/messages_legacy_v1.json +10282 -0
  197. package/src/data-manager/CoinManager.ts +31 -0
  198. package/src/data-manager/DataManager.ts +499 -0
  199. package/src/data-manager/MessagesConfig.ts +28 -0
  200. package/src/data-manager/TransportManager.ts +140 -0
  201. package/src/data-manager/connectSettings.ts +121 -0
  202. package/src/data-manager/index.ts +3 -0
  203. package/src/device/Device.ts +884 -0
  204. package/src/device/DeviceCommands.ts +631 -0
  205. package/src/device/DeviceConnector.ts +124 -0
  206. package/src/device/DeviceList.ts +39 -0
  207. package/src/device/DevicePool.ts +266 -0
  208. package/src/events/call.ts +95 -0
  209. package/src/events/core.ts +65 -0
  210. package/src/events/device.ts +92 -0
  211. package/src/events/firmware.ts +43 -0
  212. package/src/events/iframe.ts +55 -0
  213. package/src/events/index.ts +10 -0
  214. package/src/events/log.ts +23 -0
  215. package/src/events/logBlockEvent.ts +6 -0
  216. package/src/events/ui-promise.ts +14 -0
  217. package/src/events/ui-request.ts +216 -0
  218. package/src/events/ui-response.ts +59 -0
  219. package/src/events/utils.ts +19 -0
  220. package/src/index.ts +70 -0
  221. package/src/inject.ts +408 -0
  222. package/src/lowLevelInject.ts +61 -0
  223. package/src/topLevelInject.ts +62 -0
  224. package/src/types/api/alephiumGetAddress.ts +31 -0
  225. package/src/types/api/alephiumSignMessage.ts +14 -0
  226. package/src/types/api/alephiumSignTransaction.ts +18 -0
  227. package/src/types/api/algoGetAddress.ts +23 -0
  228. package/src/types/api/algoSignTransaction.ts +17 -0
  229. package/src/types/api/allNetworkGetAddress.ts +130 -0
  230. package/src/types/api/aptosGetAddress.ts +28 -0
  231. package/src/types/api/aptosGetPublicKey.ts +27 -0
  232. package/src/types/api/aptosSignInMessage.ts +17 -0
  233. package/src/types/api/aptosSignMessage.ts +26 -0
  234. package/src/types/api/aptosSignTransaction.ts +18 -0
  235. package/src/types/api/benfenGetAddress.ts +24 -0
  236. package/src/types/api/benfenGetPublicKey.ts +23 -0
  237. package/src/types/api/benfenSignMessage.ts +13 -0
  238. package/src/types/api/benfenSignTransaction.ts +19 -0
  239. package/src/types/api/btcGetAddress.ts +26 -0
  240. package/src/types/api/btcGetPublicKey.ts +26 -0
  241. package/src/types/api/btcSignMessage.ts +16 -0
  242. package/src/types/api/btcSignPsbt.ts +13 -0
  243. package/src/types/api/btcSignTransaction.ts +98 -0
  244. package/src/types/api/btcVerifyMessage.ts +15 -0
  245. package/src/types/api/cardano.ts +212 -0
  246. package/src/types/api/cardanoGetAddress.ts +49 -0
  247. package/src/types/api/cardanoGetPublicKey.ts +33 -0
  248. package/src/types/api/cardanoSignMessage.ts +31 -0
  249. package/src/types/api/cardanoSignTransaction.ts +8 -0
  250. package/src/types/api/checkAllFirmwareRelease.ts +34 -0
  251. package/src/types/api/checkBLEFirmwareRelease.ts +15 -0
  252. package/src/types/api/checkBootloaderRelease.ts +19 -0
  253. package/src/types/api/checkBridgeRelease.ts +14 -0
  254. package/src/types/api/checkBridgeStatus.ts +3 -0
  255. package/src/types/api/checkFirmwareRelease.ts +23 -0
  256. package/src/types/api/checkFirmwareTypeAvailable.ts +12 -0
  257. package/src/types/api/cipherKeyValue.ts +28 -0
  258. package/src/types/api/confluxGetAddress.ts +24 -0
  259. package/src/types/api/confluxSignMessage.ts +13 -0
  260. package/src/types/api/confluxSignMessageCIP23.ts +14 -0
  261. package/src/types/api/confluxSignTransaction.ts +32 -0
  262. package/src/types/api/cosmosGetAddress.ts +24 -0
  263. package/src/types/api/cosmosGetPublicKey.ts +28 -0
  264. package/src/types/api/cosmosSignTransaction.ts +17 -0
  265. package/src/types/api/deviceBackup.ts +4 -0
  266. package/src/types/api/deviceCancel.ts +4 -0
  267. package/src/types/api/deviceChangePin.ts +11 -0
  268. package/src/types/api/deviceFlags.ts +11 -0
  269. package/src/types/api/deviceFullyUploadResource.ts +15 -0
  270. package/src/types/api/deviceLock.ts +4 -0
  271. package/src/types/api/deviceRebootToBoardloader.ts +6 -0
  272. package/src/types/api/deviceRebootToBootloader.ts +4 -0
  273. package/src/types/api/deviceRecovery.ts +19 -0
  274. package/src/types/api/deviceReset.ts +20 -0
  275. package/src/types/api/deviceSettings.ts +23 -0
  276. package/src/types/api/deviceSupportFeatures.ts +6 -0
  277. package/src/types/api/deviceUnlock.ts +4 -0
  278. package/src/types/api/deviceUpdateBootloader.ts +13 -0
  279. package/src/types/api/deviceUpdateReboot.ts +3 -0
  280. package/src/types/api/deviceUploadResource.ts +21 -0
  281. package/src/types/api/deviceVerify.ts +15 -0
  282. package/src/types/api/deviceWipe.ts +4 -0
  283. package/src/types/api/dnxGetAddress.ts +23 -0
  284. package/src/types/api/dnxSignTransaction.ts +36 -0
  285. package/src/types/api/event.ts +8 -0
  286. package/src/types/api/evmGetAddress.ts +24 -0
  287. package/src/types/api/evmGetPublicKey.ts +36 -0
  288. package/src/types/api/evmSignMessage.ts +14 -0
  289. package/src/types/api/evmSignMessageEIP712.ts +14 -0
  290. package/src/types/api/evmSignTransaction.ts +80 -0
  291. package/src/types/api/evmSignTypedData.ts +42 -0
  292. package/src/types/api/evmVerifyMessage.ts +15 -0
  293. package/src/types/api/export.ts +194 -0
  294. package/src/types/api/filecoinGetAddress.ts +24 -0
  295. package/src/types/api/filecoinSignTransaction.ts +24 -0
  296. package/src/types/api/firmwareUpdate.ts +66 -0
  297. package/src/types/api/getFeatures.ts +4 -0
  298. package/src/types/api/getLogs.ts +3 -0
  299. package/src/types/api/getNextU2FCounter.ts +7 -0
  300. package/src/types/api/getOnetokenFeatures.ts +7 -0
  301. package/src/types/api/getPassphraseState.ts +6 -0
  302. package/src/types/api/index.ts +404 -0
  303. package/src/types/api/init.ts +11 -0
  304. package/src/types/api/kaspaGetAddress.ts +26 -0
  305. package/src/types/api/kaspaSignTransaction.ts +44 -0
  306. package/src/types/api/lnurlAuth.ts +22 -0
  307. package/src/types/api/nearGetAddress.ts +23 -0
  308. package/src/types/api/nearSignTransaction.ts +13 -0
  309. package/src/types/api/nemGetAddress.ts +24 -0
  310. package/src/types/api/nemSignTransaction.ts +118 -0
  311. package/src/types/api/neoGetAddress.ts +24 -0
  312. package/src/types/api/neoSignTransaction.ts +18 -0
  313. package/src/types/api/nervosGetAddress.ts +24 -0
  314. package/src/types/api/nervosSignTransaction.ts +19 -0
  315. package/src/types/api/nexaGetAddress.ts +26 -0
  316. package/src/types/api/nexaSignTransaction.ts +28 -0
  317. package/src/types/api/nostrDecryptMessage.ts +25 -0
  318. package/src/types/api/nostrEncryptMessage.ts +25 -0
  319. package/src/types/api/nostrGetPublicKey.ts +28 -0
  320. package/src/types/api/nostrSignEvent.ts +52 -0
  321. package/src/types/api/nostrSignSchnorr.ts +22 -0
  322. package/src/types/api/polkadotGetAddress.ts +30 -0
  323. package/src/types/api/polkadotSignTransaction.ts +19 -0
  324. package/src/types/api/promptWebDeviceAccess.ts +6 -0
  325. package/src/types/api/scdoGetAddress.ts +23 -0
  326. package/src/types/api/scdoSignMessage.ts +13 -0
  327. package/src/types/api/scdoSignTransaction.ts +24 -0
  328. package/src/types/api/searchDevices.ts +4 -0
  329. package/src/types/api/setU2FCounter.ts +7 -0
  330. package/src/types/api/solGetAddress.ts +23 -0
  331. package/src/types/api/solSignMessage.ts +17 -0
  332. package/src/types/api/solSignOffchainMessage.ts +24 -0
  333. package/src/types/api/solSignTransaction.ts +27 -0
  334. package/src/types/api/starcoinGetAddress.ts +23 -0
  335. package/src/types/api/starcoinGetPublicKey.ts +23 -0
  336. package/src/types/api/starcoinSignMessage.ts +13 -0
  337. package/src/types/api/starcoinSignTransaction.ts +13 -0
  338. package/src/types/api/starcoinVerifyMessage.ts +14 -0
  339. package/src/types/api/stellarGetAddress.ts +23 -0
  340. package/src/types/api/stellarSignTransaction.ts +154 -0
  341. package/src/types/api/suiGetAddress.ts +28 -0
  342. package/src/types/api/suiGetPublicKey.ts +27 -0
  343. package/src/types/api/suiSignMessage.ts +13 -0
  344. package/src/types/api/suiSignTransaction.ts +17 -0
  345. package/src/types/api/testInitializeDeviceDuration.ts +6 -0
  346. package/src/types/api/tonGetAddress.ts +34 -0
  347. package/src/types/api/tonSignMessage.ts +42 -0
  348. package/src/types/api/tonSignProof.ts +25 -0
  349. package/src/types/api/tronGetAddress.ts +23 -0
  350. package/src/types/api/tronSignMessage.ts +14 -0
  351. package/src/types/api/tronSignTransaction.ts +89 -0
  352. package/src/types/api/uiResponse.ts +3 -0
  353. package/src/types/api/xrpGetAddress.ts +28 -0
  354. package/src/types/api/xrpSignTransaction.ts +29 -0
  355. package/src/types/device.ts +194 -0
  356. package/src/types/firmware.ts +41 -0
  357. package/src/types/global.d.ts +3 -0
  358. package/src/types/index.ts +5 -0
  359. package/src/types/params.ts +64 -0
  360. package/src/types/settings.ts +144 -0
  361. package/src/utils/arrayUtils.ts +7 -0
  362. package/src/utils/assets.ts +5 -0
  363. package/src/utils/bridgeUpdate.ts +80 -0
  364. package/src/utils/capabilitieUtils.ts +12 -0
  365. package/src/utils/deviceFeaturesUtils.ts +352 -0
  366. package/src/utils/deviceInfoUtils.ts +167 -0
  367. package/src/utils/deviceSettings.ts +109 -0
  368. package/src/utils/deviceVersionUtils.ts +79 -0
  369. package/src/utils/findDefectiveBatchDevice.ts +39 -0
  370. package/src/utils/getMutex.ts +41 -0
  371. package/src/utils/getSynchronize.ts +25 -0
  372. package/src/utils/homescreen.ts +345 -0
  373. package/src/utils/index.ts +44 -0
  374. package/src/utils/logger.ts +190 -0
  375. package/src/utils/networkUtils.ts +25 -0
  376. package/src/utils/patch.ts +14 -0
  377. package/src/utils/promiseUtils.ts +4 -0
  378. package/src/utils/release.ts +42 -0
  379. package/src/utils/semver.test.js +53 -0
  380. package/src/utils/tracing.ts +238 -0
  381. package/src/utils/versionUtils.ts +120 -0
  382. package/tsconfig.json +11 -0
@@ -0,0 +1,124 @@
1
+ import { safeThrowError } from '../constants';
2
+ import { DataManager } from '../data-manager';
3
+ import TransportManager from '../data-manager/TransportManager';
4
+ import { DevicePool } from './DevicePool';
5
+ import { resolveAfter } from '../utils/promiseUtils';
6
+ import { LoggerNames, getLogger } from '../utils';
7
+
8
+ import type { DeviceDescriptorDiff } from './DevicePool';
9
+ import type { OneTokenDeviceInfo as DeviceDescriptor, Transport } from '@onetokenfe/hd-transport';
10
+
11
+ const Log = getLogger(LoggerNames.DeviceConnector);
12
+
13
+ export default class DeviceConnector {
14
+ transport: Transport;
15
+
16
+ listenTimestamp = 0;
17
+
18
+ current: DeviceDescriptor[] | null = null;
19
+
20
+ upcoming: DeviceDescriptor[] = [];
21
+
22
+ listening = false;
23
+
24
+ constructor() {
25
+ TransportManager.load();
26
+ this.transport = TransportManager.getTransport();
27
+ DevicePool.setConnector(this);
28
+ }
29
+
30
+ async enumerate() {
31
+ try {
32
+ const descriptors = await this.transport.enumerate();
33
+ this.upcoming = descriptors;
34
+ this._reportDevicesChange();
35
+ return { descriptors } as DeviceDescriptorDiff;
36
+ } catch (error) {
37
+ safeThrowError(error);
38
+ }
39
+ }
40
+
41
+ async listen() {
42
+ const waitForEvent = this.current !== null;
43
+ const current: DeviceDescriptor[] = this.current || [];
44
+
45
+ this.listening = true;
46
+
47
+ let descriptors: DeviceDescriptor[];
48
+
49
+ try {
50
+ Log.debug('Start listening', current);
51
+ this.listenTimestamp = new Date().getTime();
52
+ descriptors = waitForEvent
53
+ ? await this.transport.listen(current)
54
+ : await this.transport.enumerate();
55
+ if (!this.listening) return; // do not continue if stop() was called
56
+
57
+ this.upcoming = descriptors;
58
+ Log.debug('Listen result', descriptors);
59
+ this._reportDevicesChange();
60
+ if (this.listening) this.listen(); // handlers might have called stop()
61
+ } catch (error) {
62
+ const time = new Date().getTime() - this.listenTimestamp;
63
+ Log.debug('Listen error', 'timestamp', time, typeof error);
64
+
65
+ if (time > 1100) {
66
+ await resolveAfter(1000, null);
67
+ if (this.listening) this.listen();
68
+ } else {
69
+ Log.warn('Transport error');
70
+ }
71
+ }
72
+ }
73
+
74
+ stop() {
75
+ this.listening = false;
76
+ }
77
+
78
+ async acquire(path: string, session?: string | null, forceCleanRunPromise?: boolean) {
79
+ Log.debug('acquire', path, session);
80
+ const env = DataManager.getSettings('env');
81
+ try {
82
+ let res;
83
+ if (DataManager.isBleConnect(env)) {
84
+ res = await this.transport.acquire({ uuid: path, forceCleanRunPromise });
85
+ } else {
86
+ res = await this.transport.acquire({ path, previous: session ?? null });
87
+ }
88
+ return res;
89
+ } catch (error) {
90
+ Log.error('acquire error: ', error.message);
91
+ safeThrowError(error);
92
+ }
93
+ }
94
+
95
+ async release(session: string, onclose: boolean) {
96
+ try {
97
+ const res = await this.transport.release(session, onclose);
98
+ return res;
99
+ } catch (error) {
100
+ safeThrowError(error);
101
+ }
102
+ }
103
+
104
+ async disconnect(session: string | undefined | null) {
105
+ try {
106
+ if (this.transport.disconnect && !!session) {
107
+ await this.transport.disconnect(session);
108
+ }
109
+ } catch (error) {
110
+ safeThrowError(error);
111
+ }
112
+ }
113
+
114
+ promptDeviceAccess(): Promise<USBDevice | BluetoothDevice | null> {
115
+ if (!this.transport.promptDeviceAccess) {
116
+ return Promise.resolve(null);
117
+ }
118
+ return this.transport.promptDeviceAccess();
119
+ }
120
+
121
+ _reportDevicesChange() {
122
+ DevicePool.reportDeviceChange(this.upcoming);
123
+ }
124
+ }
@@ -0,0 +1,39 @@
1
+ import EventEmitter from 'events';
2
+
3
+ import { DevicePool } from './DevicePool';
4
+
5
+ import type DeviceConnector from './DeviceConnector';
6
+ import type { Device, InitOptions } from './Device';
7
+
8
+ export class DeviceList extends EventEmitter {
9
+ devices: Record<string, Device> = {};
10
+
11
+ connector?: DeviceConnector;
12
+
13
+ /**
14
+ * 获取已连接的设备列表
15
+ * @returns {OneTokenDeviceInfo[]}
16
+ */
17
+ async getDeviceLists(connectId?: string, initOptions?: InitOptions) {
18
+ const deviceDiff = await this.connector?.enumerate();
19
+ const descriptorList = deviceDiff?.descriptors ?? [];
20
+
21
+ this.devices = {};
22
+
23
+ const { deviceList, devices } = await DevicePool.getDevices(
24
+ descriptorList,
25
+ connectId,
26
+ initOptions
27
+ );
28
+ this.devices = devices;
29
+ return deviceList;
30
+ }
31
+
32
+ allDevices(): Device[] {
33
+ return Object.keys(this.devices).map(key => this.devices[key]);
34
+ }
35
+
36
+ getDevice(connectId: string) {
37
+ return this.devices[connectId];
38
+ }
39
+ }
@@ -0,0 +1,266 @@
1
+ import EventEmitter from 'events';
2
+
3
+ // eslint-disable-next-line import/no-cycle
4
+ import { Device } from './Device';
5
+ import { DEVICE } from '../events';
6
+ import { LoggerNames, getDeviceUUID, getLogger } from '../utils';
7
+
8
+ import type { InitOptions } from './Device';
9
+ import type { OneTokenDeviceInfo as DeviceDescriptor } from '@onetokenfe/hd-transport';
10
+ import type DeviceConnector from './DeviceConnector';
11
+
12
+ const Log = getLogger(LoggerNames.DevicePool);
13
+
14
+ export type DeviceDescriptorDiff = {
15
+ didUpdate: boolean;
16
+ connected: DeviceDescriptor[];
17
+ disconnected: DeviceDescriptor[];
18
+ changedSessions: DeviceDescriptor[];
19
+ changedDebugSessions: DeviceDescriptor[];
20
+ acquired: DeviceDescriptor[];
21
+ debugAcquired: DeviceDescriptor[];
22
+ released: DeviceDescriptor[];
23
+ debugReleased: DeviceDescriptor[];
24
+ descriptors: DeviceDescriptor[];
25
+ };
26
+
27
+ const getDiff = (
28
+ current: DeviceDescriptor[],
29
+ descriptors: DeviceDescriptor[]
30
+ ): DeviceDescriptorDiff => {
31
+ const connected = descriptors.filter(d => current.find(x => x.path === d.path) === undefined);
32
+ const disconnected = current.filter(d => descriptors.find(x => x.path === d.path) === undefined);
33
+ const changedSessions = descriptors.filter(d => {
34
+ const currentDescriptor = current.find(x => x.path === d.path);
35
+ if (currentDescriptor) {
36
+ return currentDescriptor.session !== d.session;
37
+ }
38
+ return false;
39
+ });
40
+ const acquired = changedSessions.filter(d => typeof d.session === 'string');
41
+ const released = changedSessions.filter(d => typeof d.session !== 'string');
42
+
43
+ const changedDebugSessions = descriptors.filter(d => {
44
+ const currentDescriptor = current.find(x => x.path === d.path);
45
+ if (currentDescriptor) {
46
+ return currentDescriptor.debugSession !== d.debugSession;
47
+ }
48
+ return false;
49
+ });
50
+ const debugAcquired = changedSessions.filter(d => typeof d.debugSession === 'string');
51
+ const debugReleased = changedSessions.filter(d => typeof d.debugSession !== 'string');
52
+
53
+ const didUpdate =
54
+ connected.length + disconnected.length + changedSessions.length + changedDebugSessions.length >
55
+ 0;
56
+
57
+ return {
58
+ connected,
59
+ disconnected,
60
+ changedSessions,
61
+ acquired,
62
+ released,
63
+ changedDebugSessions,
64
+ debugAcquired,
65
+ debugReleased,
66
+ didUpdate,
67
+ descriptors,
68
+ };
69
+ };
70
+
71
+ export class DevicePool extends EventEmitter {
72
+ static current: DeviceDescriptor[] | null = null;
73
+
74
+ static upcoming: DeviceDescriptor[] = [];
75
+
76
+ static connectedPool: DeviceDescriptor[] = [];
77
+
78
+ static disconnectPool: DeviceDescriptor[] = [];
79
+
80
+ static devicesCache: Record<string, Device> = {};
81
+
82
+ static emitter = new EventEmitter();
83
+
84
+ static connector: DeviceConnector;
85
+
86
+ static setConnector(connector: DeviceConnector) {
87
+ this.connector = connector;
88
+ }
89
+
90
+ static async getDevices(
91
+ descriptorList: DeviceDescriptor[],
92
+ connectId?: string,
93
+ initOptions?: InitOptions
94
+ ) {
95
+ // Log.debug('get device list: connectId: ', connectId);
96
+
97
+ const devices: Record<string, Device> = {};
98
+ const deviceList = [];
99
+
100
+ // If there is a connectId
101
+ // it means that you only want to get data from cache
102
+ if (connectId) {
103
+ const device = this.devicesCache[connectId];
104
+ if (device) {
105
+ const exist = descriptorList.find(d => d.path === device.originalDescriptor.path);
106
+ if (exist) {
107
+ // Log.debug('find existed Device: ', connectId);
108
+ device.updateDescriptor(exist, true);
109
+ devices[connectId] = device;
110
+ deviceList.push(device);
111
+ await this._checkDevicePool(initOptions);
112
+ return { devices, deviceList };
113
+ }
114
+ Log.debug('found device in cache, but path is different: ', connectId);
115
+ }
116
+ }
117
+
118
+ for await (const descriptor of descriptorList) {
119
+ const device = await this._createDevice(descriptor, initOptions);
120
+
121
+ if (device.features) {
122
+ const uuid = getDeviceUUID(device.features);
123
+ if (this.devicesCache[uuid]) {
124
+ const cache = this.devicesCache[uuid];
125
+ cache.updateDescriptor(descriptor, true);
126
+ }
127
+ this.devicesCache[uuid] = device;
128
+ devices[uuid] = device;
129
+ }
130
+
131
+ deviceList.push(device);
132
+ }
133
+ // Log.debug('get devices result : ', devices, deviceList);
134
+ // console.log('device poll -> connected: ', this.connectedPool);
135
+ // console.log('device poll -> disconnected: ', this.disconnectPool);
136
+ await this._checkDevicePool(initOptions);
137
+ return { devices, deviceList };
138
+ }
139
+
140
+ static clearDeviceCache(connectId?: string) {
141
+ // Log.debug('clear device pool cache: connectId', connectId);
142
+ // Log.debug('clear device pool cache: ', this.devicesCache);
143
+ if (connectId) {
144
+ delete this.devicesCache[connectId];
145
+ }
146
+ }
147
+
148
+ static async _createDevice(descriptor: DeviceDescriptor, initOptions?: InitOptions) {
149
+ let device = this.getDeviceByPath(descriptor.path);
150
+ if (!device) {
151
+ device = Device.fromDescriptor(descriptor);
152
+ device.deviceConnector = this.connector;
153
+ await device.connect();
154
+ await device.initialize(initOptions);
155
+ await device.release();
156
+ }
157
+ return device;
158
+ }
159
+
160
+ static async _checkDevicePool(initOptions?: InitOptions) {
161
+ await this._sendConnectMessage(initOptions);
162
+ this._sendDisconnectMessage();
163
+ }
164
+
165
+ static async _sendConnectMessage(initOptions?: InitOptions) {
166
+ for (let i = this.connectedPool.length - 1; i >= 0; i--) {
167
+ const descriptor = this.connectedPool[i];
168
+ const device = await this._createDevice(descriptor, initOptions);
169
+ Log.debug('emit DEVICE.CONNECT: ', device?.features);
170
+ this.emitter.emit(DEVICE.CONNECT, device);
171
+ this.connectedPool.splice(i, 1);
172
+ }
173
+ }
174
+
175
+ static _sendDisconnectMessage() {
176
+ for (let i = this.disconnectPool.length - 1; i >= 0; i--) {
177
+ const descriptor = this.connectedPool[i];
178
+ const device = descriptor?.path ? this.getDeviceByPath(descriptor.path) : null;
179
+ if (device) {
180
+ this.emitter.emit(DEVICE.DISCONNECT, device);
181
+ }
182
+ this.disconnectPool.splice(i, 1);
183
+ }
184
+ }
185
+
186
+ static reportDeviceChange(upcoming: DeviceDescriptor[]) {
187
+ const diff = getDiff(this.current || [], upcoming);
188
+
189
+ this.upcoming = upcoming;
190
+ this.current = this.upcoming;
191
+
192
+ Log.debug('device pool -> current: ', this.current);
193
+ Log.debug('device pool -> upcomming: ', this.upcoming);
194
+ Log.debug('DeviceCache.reportDeviceChange diff: ', diff);
195
+
196
+ if (!diff.didUpdate) {
197
+ return;
198
+ }
199
+
200
+ diff.connected.forEach(d => {
201
+ const device = this.getDeviceByPath(d.path);
202
+ if (!device) {
203
+ this._addConnectedDeviceToPool(d);
204
+ return;
205
+ }
206
+ Log.debug('emit DEVICE.CONNECT: ', device.features);
207
+ this.emitter.emit(DEVICE.CONNECT, device);
208
+ });
209
+
210
+ diff.disconnected.forEach(d => {
211
+ this._removeDeviceFromConnectedPool(d.path);
212
+ const device = this.getDeviceByPath(d.path);
213
+ if (!device) {
214
+ this._addDisconnectedDeviceToPool(d);
215
+ return;
216
+ }
217
+
218
+ Log.debug('emit DEVICE.DISCONNECT: ', device.features);
219
+ this.emitter.emit(DEVICE.DISCONNECT, device);
220
+ });
221
+ }
222
+
223
+ static getDeviceByPath(path: string) {
224
+ return Object.values(this.devicesCache).find(d => d.originalDescriptor.path === path);
225
+ }
226
+
227
+ static _addConnectedDeviceToPool(descriptor: DeviceDescriptor) {
228
+ const existDescriptorIndex = this.connectedPool.findIndex(d => d.path === descriptor.path);
229
+ if (existDescriptorIndex > -1) {
230
+ this.connectedPool.splice(existDescriptorIndex, 1, descriptor);
231
+ return;
232
+ }
233
+
234
+ this.connectedPool.push(descriptor);
235
+ }
236
+
237
+ static _removeDeviceFromConnectedPool(path: string) {
238
+ const index = this.connectedPool.findIndex(d => d.path === path);
239
+ if (index > -1) {
240
+ this.connectedPool.splice(index, 1);
241
+ }
242
+ }
243
+
244
+ static _addDisconnectedDeviceToPool(descriptor: DeviceDescriptor) {
245
+ const existDescriptorIndex = this.disconnectPool.findIndex(d => d.path === descriptor.path);
246
+ if (existDescriptorIndex > -1) {
247
+ this.disconnectPool.splice(existDescriptorIndex, 1, descriptor);
248
+ return;
249
+ }
250
+
251
+ this.disconnectPool.push(descriptor);
252
+ }
253
+
254
+ static resetState() {
255
+ this.current = null;
256
+ this.upcoming = [];
257
+ this.connectedPool = [];
258
+ this.disconnectPool = [];
259
+ this.devicesCache = {};
260
+
261
+ // Clear all event listeners but keep the emitter instance
262
+ this.emitter.removeAllListeners();
263
+
264
+ Log.debug('DevicePool state has been reset');
265
+ }
266
+ }
@@ -0,0 +1,95 @@
1
+ import { serializeError } from '@onetokenfe/hd-shared';
2
+
3
+ import type { IFRAME } from './iframe';
4
+ import type { CommonParams, ConnectSettings, CoreApi } from '../types';
5
+
6
+ type UnwrappedResponse<T> = T extends Promise<infer R>
7
+ ? R extends { success: true; payload: infer P }
8
+ ? P
9
+ : never
10
+ : void;
11
+
12
+ type OverloadedMethod<T, E extends Record<string, string>> = T extends {
13
+ (params: infer P1): infer R1;
14
+ (params: infer P2): infer R2;
15
+ }
16
+ ? ((params: P1 & E) => R1) | ((params: P2 & E) => R2) // - method IS overloaded, result depends on params (example: getAddress)
17
+ : T extends (...args: infer P) => infer R
18
+ ? (params: E & P[0]) => R // - method in NOT overloaded, one set of params and one set of result (example: signTransaction)
19
+ : never;
20
+
21
+ type UnwrappedMethod<T, M extends Record<string, string>> = T extends () => infer R
22
+ ? (params: M & CommonParams) => R // - method doesn't have params (example: dispose, disableWebUSB)
23
+ : OverloadedMethod<T, M>;
24
+
25
+ type IsMethodCallable<T> = T extends (...args: any[]) => infer R
26
+ ? R extends Promise<{ success: boolean }>
27
+ ? R
28
+ : never
29
+ : never;
30
+
31
+ type CallApi = {
32
+ [K in keyof CoreApi]: IsMethodCallable<CoreApi[K]> extends never
33
+ ? never
34
+ : UnwrappedMethod<CoreApi[K], { method: K }>;
35
+ };
36
+
37
+ export type CallMethodUnion = CallApi[keyof CallApi];
38
+ export type CallMethodPayload = Parameters<CallMethodUnion>[0];
39
+ export type CallMethodResponse<M extends keyof CallApi> = UnwrappedResponse<ReturnType<CallApi[M]>>;
40
+ export type CallMethodAnyResponse = ReturnType<CallMethodUnion>;
41
+
42
+ export type CallMethod = (params: CallMethodPayload) => Promise<any>;
43
+
44
+ export interface IFrameCallMessage {
45
+ event: typeof IFRAME.CALL;
46
+ type: typeof IFRAME.CALL;
47
+ payload: CallMethodPayload;
48
+ }
49
+
50
+ export interface IFrameCancelMessage {
51
+ event: typeof IFRAME.CANCEL;
52
+ type: typeof IFRAME.CANCEL;
53
+ payload: { connectId?: string };
54
+ }
55
+
56
+ export interface IFrameSwitchTransportMessage {
57
+ event: typeof IFRAME.SWITCH_TRANSPORT;
58
+ type: typeof IFRAME.SWITCH_TRANSPORT;
59
+ payload: { env: ConnectSettings['env'] };
60
+ }
61
+
62
+ export interface IFrameCallbackMessage {
63
+ event: typeof IFRAME.CALLBACK;
64
+ type: typeof IFRAME.CALLBACK;
65
+ payload: {
66
+ callbackId: string;
67
+ data?: any;
68
+ error?: any;
69
+ };
70
+ }
71
+
72
+ export const RESPONSE_EVENT = 'RESPONSE_EVENT';
73
+
74
+ export interface MethodResponseMessage {
75
+ event: typeof RESPONSE_EVENT;
76
+ type: typeof RESPONSE_EVENT;
77
+ id: number;
78
+ success: boolean;
79
+ payload: any;
80
+ }
81
+
82
+ export const createResponseMessage = (
83
+ id: number,
84
+ success: boolean,
85
+ payload: any
86
+ ): MethodResponseMessage => ({
87
+ event: RESPONSE_EVENT,
88
+ type: RESPONSE_EVENT,
89
+ id,
90
+ success,
91
+
92
+ payload: success ? payload : serializeError(payload),
93
+ });
94
+
95
+ export type CallMethodKeys = keyof CoreApi;
@@ -0,0 +1,65 @@
1
+ import { HardwareError } from '@onetokenfe/hd-shared';
2
+
3
+ import type { Unsuccessful } from '../types/params';
4
+ import type {
5
+ IFrameCallMessage,
6
+ IFrameCallbackMessage,
7
+ IFrameCancelMessage,
8
+ IFrameSwitchTransportMessage,
9
+ } from './call';
10
+ import type { DeviceEventMessage } from './device';
11
+ import type { IFrameEventMessage } from './iframe';
12
+ import type { UiEventMessage } from './ui-request';
13
+ import type { UiResponseMessage } from './ui-response';
14
+ import type { LogEventMessage } from './log';
15
+ import type { FirmwareMessage } from './firmware';
16
+
17
+ export const CORE_EVENT = 'CORE_EVENT';
18
+
19
+ export type CoreMessage = {
20
+ id?: string;
21
+ success?: true | false;
22
+ } & (
23
+ | IFrameEventMessage
24
+ | IFrameCallMessage
25
+ | IFrameCancelMessage
26
+ | IFrameSwitchTransportMessage
27
+ | IFrameCallbackMessage
28
+ | UiResponseMessage
29
+ | UiEventMessage
30
+ | DeviceEventMessage
31
+ | LogEventMessage
32
+ | FirmwareMessage
33
+ );
34
+
35
+ export type PostMessageEvent = MessageEvent<any>;
36
+
37
+ export const parseMessage = (messageData: any): CoreMessage => {
38
+ const { data } = messageData;
39
+ const message: CoreMessage = {
40
+ event: data.event,
41
+ type: data.type,
42
+ payload: data.payload,
43
+ };
44
+
45
+ if (typeof messageData.id === 'number') {
46
+ message.id = messageData.id;
47
+ }
48
+
49
+ if (typeof message.success === 'boolean') {
50
+ message.success = data.success;
51
+ }
52
+
53
+ return message;
54
+ };
55
+
56
+ export const createErrorMessage = (error: Error & { code?: string | number }): Unsuccessful => {
57
+ let payload = { error: error.message, code: error.code };
58
+ if (error instanceof HardwareError) {
59
+ payload = { error: error.message, code: error.errorCode };
60
+ }
61
+ return {
62
+ success: false,
63
+ payload,
64
+ };
65
+ };
@@ -0,0 +1,92 @@
1
+ import type { MessageFactoryFn } from './utils';
2
+ import type { PROTO } from '../constants';
3
+ import type { KnownDevice as Device, Features, SupportFeatures } from '../types/device';
4
+
5
+ export const DEVICE_EVENT = 'DEVICE_EVENT';
6
+ export const DEVICE = {
7
+ // device list events
8
+ CONNECT: 'device-connect',
9
+ CONNECT_UNACQUIRED: 'device-connect_unacquired',
10
+ DISCONNECT: 'device-disconnect',
11
+ CHANGED: 'device-changed',
12
+ ACQUIRE: 'device-acquire',
13
+ RELEASE: 'device-release',
14
+ ACQUIRED: 'device-acquired',
15
+ RELEASED: 'device-released',
16
+ USED_ELSEWHERE: 'device-used_elsewhere',
17
+ UNREADABLE: 'unreadable-device',
18
+
19
+ LOADING: 'device-loading',
20
+
21
+ // onetoken-transport events in protobuf format
22
+ BUTTON: 'button',
23
+ PIN: 'pin',
24
+ PASSPHRASE: 'passphrase',
25
+ PASSPHRASE_ON_DEVICE: 'passphrase_on_device',
26
+ WORD: 'word',
27
+ SUPPORT_FEATURES: 'support_features',
28
+ SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE: 'select_device_in_bootloader_for_web_device',
29
+ SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: 'select_device_for_switch_firmware_web_device',
30
+
31
+ FEATURES: 'features',
32
+ } as const;
33
+
34
+ export interface DeviceConnnectRequest {
35
+ type: typeof DEVICE.CONNECT;
36
+ payload: { device: Device };
37
+ }
38
+
39
+ export interface DeviceDisconnnectRequest {
40
+ type: typeof DEVICE.DISCONNECT;
41
+ payload: { device: Device };
42
+ }
43
+
44
+ export interface DeviceButtonRequestPayload extends Omit<PROTO.ButtonRequest, 'code'> {
45
+ code?: PROTO.ButtonRequest['code'] | 'ButtonRequest_FirmwareUpdate';
46
+ }
47
+
48
+ export type PassphraseRequestPayload = {
49
+ existsAttachPinUser?: boolean;
50
+ };
51
+
52
+ export interface DeviceButtonRequest {
53
+ type: typeof DEVICE.BUTTON;
54
+ payload: DeviceButtonRequestPayload & { device: Device | null };
55
+ }
56
+
57
+ export type DeviceFeaturesPayload = Features;
58
+
59
+ export interface DeviceSendFeatures {
60
+ type: typeof DEVICE.FEATURES;
61
+ payload: DeviceFeaturesPayload;
62
+ }
63
+
64
+ export type DeviceSupportFeaturesPayload = SupportFeatures & { device: Device | null };
65
+ export interface DeviceSendSupportFeatures {
66
+ type: typeof DEVICE.SUPPORT_FEATURES;
67
+ payload: DeviceSupportFeaturesPayload;
68
+ }
69
+
70
+ export type DeviceEvent =
71
+ | DeviceButtonRequest
72
+ | DeviceSendFeatures
73
+ | DeviceSendSupportFeatures
74
+ | DeviceDisconnnectRequest
75
+ | DeviceConnnectRequest;
76
+
77
+ export type DeviceEventMessage = DeviceEvent & { event: typeof DEVICE_EVENT };
78
+
79
+ export type DeviceEventListenerFn = (
80
+ type: typeof DEVICE_EVENT,
81
+ cb: (event: DeviceEventMessage) => void
82
+ ) => void;
83
+
84
+ export const createDeviceMessage: MessageFactoryFn<typeof DEVICE_EVENT, DeviceEvent> = (
85
+ type,
86
+ payload
87
+ ) =>
88
+ ({
89
+ event: DEVICE_EVENT,
90
+ type,
91
+ payload,
92
+ } as any);