@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,137 @@
1
+ /* eslint-disable prefer-regex-literals */
2
+
3
+ import { EthereumDataType } from '@onetokenfe/hd-transport';
4
+ import { ERRORS, HardwareErrorCode } from '@onetokenfe/hd-shared';
5
+
6
+ import { intToHex } from './bigNumberUtils';
7
+ import { formatAnyHex } from './hexUtils';
8
+
9
+ import type { EthereumSignTypedDataTypes } from '../../types/api/evmSignTypedData';
10
+ import type { EthereumFieldType } from '@onetokenfe/hd-transport';
11
+
12
+ // Copied from https://github.com/ethers-io/ethers.js/blob/v5.5.2/packages/abi/src.ts/fragments.ts#L249
13
+ const paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/);
14
+ const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
15
+ const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
16
+
17
+ /**
18
+ * Parse the given EIP-712 array type into its entries, and its length (if not dynamic)
19
+ * E.g. `uint16[32]` will return `{entryTypeName: 'uint16', arraySize: 32}`.
20
+ */
21
+ export const parseArrayType = (
22
+ arrayTypeName: string
23
+ ): {
24
+ entryTypeName: string;
25
+ arraySize: number | null;
26
+ } => {
27
+ const arrayMatch = paramTypeArray.exec(arrayTypeName);
28
+ if (arrayMatch === null) {
29
+ throw ERRORS.TypedError(
30
+ HardwareErrorCode.RuntimeError,
31
+ `typename ${arrayTypeName} could not be parsed as an EIP-712 array`
32
+ );
33
+ }
34
+ const [_, entryTypeName, arraySize] = arrayMatch;
35
+ return {
36
+ entryTypeName,
37
+ arraySize: parseInt(arraySize, 10) || null,
38
+ };
39
+ };
40
+
41
+ /**
42
+ * Encodes the given primitive data to a big-endian hex string.
43
+ *
44
+ * @param typeName - Primitive Solidity data type (e.g. `uint16`)
45
+ * @param data - The actual data to convert.
46
+ * @returns Hex string of the data.
47
+ */
48
+ export const encodeData = (typeName: string, data: any): string => {
49
+ if (paramTypeBytes.test(typeName) || typeName === 'address') {
50
+ return formatAnyHex(data);
51
+ }
52
+ if (typeName === 'string') {
53
+ return Buffer.from(data, 'utf-8').toString('hex');
54
+ }
55
+ const numberMatch = paramTypeNumber.exec(typeName);
56
+ if (numberMatch) {
57
+ const [_, intType, bits] = numberMatch;
58
+ const bytes = Math.ceil(parseInt(bits, 10) / 8);
59
+ return intToHex(data, bytes, intType === 'int');
60
+ }
61
+ if (typeName === 'bool') {
62
+ return data ? '01' : '00';
63
+ }
64
+
65
+ // We should be receiving only atomic, non-array types
66
+ throw ERRORS.TypedError(
67
+ HardwareErrorCode.RuntimeError,
68
+ `Unsupported data type for direct field encoding: ${typeName}`
69
+ );
70
+ };
71
+
72
+ // these are simple types, so we can just do a string-match
73
+ const paramTypesMap: Record<string, EthereumDataType> = {
74
+ string: EthereumDataType.STRING,
75
+ bool: EthereumDataType.BOOL,
76
+ address: EthereumDataType.ADDRESS,
77
+ };
78
+
79
+ /**
80
+ * Converts the given EIP-712 typename into a Protobuf package.
81
+ *
82
+ * @param typeName - The EIP-712 typename (e.g. `uint16` for simple types, `Example` for structs)
83
+ * @param types - Map of types, required for recursive (`struct`) types.
84
+ */
85
+ export const getFieldType = (
86
+ typeName: string,
87
+ types: EthereumSignTypedDataTypes
88
+ ): EthereumFieldType => {
89
+ const arrayMatch = paramTypeArray.exec(typeName);
90
+ if (arrayMatch) {
91
+ const [_, arrayItemTypeName, arraySize] = arrayMatch;
92
+ const entryType = getFieldType(arrayItemTypeName, types);
93
+ return {
94
+ data_type: EthereumDataType.ARRAY,
95
+ size: parseInt(arraySize, 10) || undefined,
96
+ entry_type: entryType,
97
+ };
98
+ }
99
+
100
+ const numberMatch = paramTypeNumber.exec(typeName);
101
+ if (numberMatch) {
102
+ const [_, type, bits] = numberMatch;
103
+ return {
104
+ data_type: type === 'uint' ? EthereumDataType.UINT : EthereumDataType.INT,
105
+ size: Math.floor(parseInt(bits, 10) / 8),
106
+ };
107
+ }
108
+
109
+ const bytesMatch = paramTypeBytes.exec(typeName);
110
+ if (bytesMatch) {
111
+ const [_, size] = bytesMatch;
112
+ return {
113
+ data_type: EthereumDataType.BYTES,
114
+ size: parseInt(size, 10) || undefined,
115
+ };
116
+ }
117
+
118
+ const fixedSizeTypeMatch = paramTypesMap[typeName];
119
+ if (fixedSizeTypeMatch) {
120
+ return {
121
+ data_type: fixedSizeTypeMatch,
122
+ };
123
+ }
124
+
125
+ if (typeName in types) {
126
+ return {
127
+ data_type: EthereumDataType.STRUCT,
128
+ size: types[typeName].length,
129
+ struct_name: typeName,
130
+ };
131
+ }
132
+
133
+ throw ERRORS.TypedError(
134
+ HardwareErrorCode.RuntimeError,
135
+ `No type definition specified: ${typeName}`
136
+ );
137
+ };
@@ -0,0 +1,161 @@
1
+ export { default as testInitializeDeviceDuration } from './test/TestInitializeDeviceDuration';
2
+
3
+ export { default as searchDevices } from './SearchDevices';
4
+ export { default as getFeatures } from './GetFeatures';
5
+ export { default as getonetokenfeatures } from './Getonetokenfeatures';
6
+ export { default as getPassphraseState } from './GetPassphraseState';
7
+ export { default as getLogs } from './GetLogs';
8
+ export { default as checkFirmwareRelease } from './CheckFirmwareRelease';
9
+ export { default as checkBLEFirmwareRelease } from './CheckBLEFirmwareRelease';
10
+ export { default as checkBridgeStatus } from './CheckBridgeStatus';
11
+ export { default as checkBridgeRelease } from './CheckBridgeRelease';
12
+ export { default as checkBootloaderRelease } from './CheckBootloaderRelease';
13
+ export { default as checkAllFirmwareRelease } from './CheckAllFirmwareRelease';
14
+ export { default as checkFirmwareTypeAvailable } from './CheckFirmwareTypeAvailable';
15
+ export { default as deviceBackup } from './device/DeviceBackup';
16
+ export { default as deviceChangePin } from './device/DeviceChangePin';
17
+ export { default as deviceFlags } from './device/DeviceFlags';
18
+ export { default as deviceRebootToBootloader } from './device/DeviceRebootToBootloader';
19
+ export { default as deviceRebootToBoardloader } from './device/DeviceRebootToBoardloader';
20
+ export { default as deviceRecovery } from './device/DeviceRecovery';
21
+ export { default as deviceReset } from './device/DeviceReset';
22
+ export { default as deviceSettings } from './device/DeviceSettings';
23
+ export { default as deviceUpdateReboot } from './device/DeviceUpdateReboot';
24
+ export { default as deviceUploadResource } from './device/DeviceUploadResource';
25
+ export { default as deviceSupportFeatures } from './device/DeviceSupportFeatures';
26
+ export { default as deviceVerify } from './device/DeviceVerify';
27
+ export { default as deviceWipe } from './device/DeviceWipe';
28
+ export { default as deviceFullyUploadResource } from './device/DeviceFullyUploadResource';
29
+ export { default as deviceUpdateBootloader } from './device/DeviceUpdateBootloader';
30
+ export { default as deviceLock } from './device/DeviceLock';
31
+ export { default as deviceUnlock } from './device/DeviceUnlock';
32
+ export { default as deviceCancel } from './device/DeviceCancel';
33
+
34
+ export { default as setU2FCounter } from './u2f/SetU2FCounter';
35
+ export { default as getNextU2FCounter } from './u2f/GetNextU2FCounter';
36
+
37
+ export { default as firmwareUpdate } from './FirmwareUpdate';
38
+ export { default as firmwareUpdateV2 } from './FirmwareUpdateV2';
39
+ export { default as firmwareUpdateV3 } from './FirmwareUpdateV3';
40
+ export { default as promptWebDeviceAccess } from './PromptWebDeviceAccess';
41
+
42
+ export { default as cipherKeyValue } from './CipherKeyValue';
43
+
44
+ export { default as allNetworkGetAddress } from './allnetwork/AllNetworkGetAddress';
45
+ export { default as allNetworkGetAddressByLoop } from './allnetwork/AllNetworkGetAddressByLoop';
46
+
47
+ export { default as btcGetAddress } from './btc/BTCGetAddress';
48
+ export { default as btcGetPublicKey } from './btc/BTCGetPublicKey';
49
+ export { default as btcSignMessage } from './btc/BTCSignMessage';
50
+ export { default as btcSignPsbt } from './btc/BTCSignPsbt';
51
+ export { default as btcSignTransaction } from './btc/BTCSignTransaction';
52
+ export { default as btcVerifyMessage } from './btc/BTCVerifyMessage';
53
+
54
+ export { default as confluxGetAddress } from './conflux/ConfluxGetAddress';
55
+ export { default as confluxSignMessage } from './conflux/ConfluxSignMessage';
56
+ export { default as confluxSignMessageCIP23 } from './conflux/ConfluxSignMessageCIP23';
57
+ export { default as confluxSignTransaction } from './conflux/ConfluxSignTransaction';
58
+
59
+ export { default as evmGetAddress } from './evm/EVMGetAddress';
60
+ export { default as evmGetPublicKey } from './evm/EVMGetPublicKey';
61
+ export { default as evmSignMessage } from './evm/EVMSignMessage';
62
+ export { default as evmSignMessageEIP712 } from './evm/EVMSignMessageEIP712';
63
+ export { default as evmSignTransaction } from './evm/EVMSignTransaction';
64
+ export { default as evmSignTypedData } from './evm/EVMSignTypedData';
65
+ export { default as evmVerifyMessage } from './evm/EVMVerifyMessage';
66
+
67
+ export { default as starcoinGetAddress } from './starcoin/StarcoinGetAddress';
68
+ export { default as starcoinGetPublicKey } from './starcoin/StarcoinGetPublicKey';
69
+ export { default as starcoinSignMessage } from './starcoin/StarcoinSignMessage';
70
+ export { default as starcoinSignTransaction } from './starcoin/StarcoinSignTransaction';
71
+ export { default as starcoinVerifyMessage } from './starcoin/StarcoinVerifyMessage';
72
+
73
+ export { default as nemGetAddress } from './nem/NEMGetAddress';
74
+ export { default as nemSignTransaction } from './nem/NEMSignTransaction';
75
+
76
+ export { default as solGetAddress } from './solana/SolGetAddress';
77
+ export { default as solSignTransaction } from './solana/SolSignTransaction';
78
+ export { default as solSignOffchainMessage } from './solana/SolSignOffchainMessage';
79
+ export { default as solSignMessage } from './solana/SolSignMessage';
80
+
81
+ export { default as stellarGetAddress } from './stellar/StellarGetAddress';
82
+ export { default as stellarSignTransaction } from './stellar/StellarSignTransaction';
83
+
84
+ export { default as tronGetAddress } from './tron/TronGetAddress';
85
+ export { default as tronSignMessage } from './tron/TronSignMessage';
86
+ export { default as tronSignTransaction } from './tron/TronSignTransaction';
87
+
88
+ export { default as nearGetAddress } from './near/NearGetAddress';
89
+ export { default as nearSignTransaction } from './near/NearSignTransaction';
90
+
91
+ export { default as aptosGetAddress } from './aptos/AptosGetAddress';
92
+ export { default as aptosGetPublicKey } from './aptos/AptosGetPublicKey';
93
+ export { default as aptosSignTransaction } from './aptos/AptosSignTransaction';
94
+ export { default as aptosSignMessage } from './aptos/AptosSignMessage';
95
+ export { default as aptosSignInMessage } from './aptos/AptosSignInMessage';
96
+
97
+ export { default as algoGetAddress } from './algo/AlgoGetAddress';
98
+ export { default as algoSignTransaction } from './algo/AlgoSignTransaction';
99
+
100
+ export { default as cosmosGetAddress } from './cosmos/CosmosGetAddress';
101
+ export { default as cosmosGetPublicKey } from './cosmos/CosmosGetPublicKey';
102
+ export { default as cosmosSignTransaction } from './cosmos/CosmosSignTransaction';
103
+
104
+ export { default as xrpGetAddress } from './xrp/XrpGetAddress';
105
+ export { default as xrpSignTransaction } from './xrp/XrpSignTransaction';
106
+
107
+ export { default as suiGetAddress } from './sui/SuiGetAddress';
108
+ export { default as suiGetPublicKey } from './sui/SuiGetPublicKey';
109
+ export { default as suiSignMessage } from './sui/SuiSignMessage';
110
+ export { default as suiSignTransaction } from './sui/SuiSignTransaction';
111
+
112
+ export { default as cardanoGetAddress } from './cardano/CardanoGetAddress';
113
+ export { default as cardanoGetPublicKey } from './cardano/CardanoGetPublicKey';
114
+ export { default as cardanoSignTransaction } from './cardano/CardanoSignTransaction';
115
+ export { default as cardanoSignMessage } from './cardano/CardanoSignMessage';
116
+
117
+ export { default as filecoinGetAddress } from './filecoin/FilecoinGetAddress';
118
+ export { default as filecoinSignTransaction } from './filecoin/FilecoinSignTransaction';
119
+
120
+ export { default as polkadotGetAddress } from './polkadot/PolkadotGetAddress';
121
+ export { default as polkadotSignTransaction } from './polkadot/PolkadotSignTransaction';
122
+
123
+ export { default as kaspaGetAddress } from './kaspa/KaspaGetAddress';
124
+ export { default as kaspaSignTransaction } from './kaspa/KaspaSignTransaction';
125
+
126
+ export { default as nexaGetAddress } from './nexa/NexaGetAddress';
127
+ export { default as nexaSignTransaction } from './nexa/NexaSignTransaction';
128
+
129
+ export { default as nostrGetPublicKey } from './nostr/NostrGetPublicKey';
130
+ export { default as nostrSignEvent } from './nostr/NostrSignEvent';
131
+ export { default as nostrEncryptMessage } from './nostr/NostrEncryptMessage';
132
+ export { default as nostrDecryptMessage } from './nostr/NostrDecryptMessage';
133
+ export { default as nostrSignSchnorr } from './nostr/NostrSignSchnorr';
134
+
135
+ export { default as lnurlAuth } from './lightning/LnurlAuth';
136
+
137
+ export { default as nervosGetAddress } from './nervos/NervosGetAddress';
138
+ export { default as nervosSignTransaction } from './nervos/NervosSignTransaction';
139
+
140
+ export { default as dnxGetAddress } from './dynex/DnxGetAddress';
141
+ export { default as dnxSignTransaction } from './dynex/DnxSignTransaction';
142
+
143
+ export { default as tonGetAddress } from './ton/TonGetAddress';
144
+ export { default as tonSignMessage } from './ton/TonSignMessage';
145
+ export { default as tonSignProof } from './ton/TonSignProof';
146
+
147
+ export { default as scdoGetAddress } from './scdo/ScdoGetAddress';
148
+ export { default as scdoSignTransaction } from './scdo/ScdoSignTransaction';
149
+ export { default as scdoSignMessage } from './scdo/ScdoSignMessage';
150
+
151
+ export { default as alephiumGetAddress } from './alephium/AlephiumGetAddress';
152
+ export { default as alephiumSignTransaction } from './alephium/AlephiumSignTransaction';
153
+ export { default as alephiumSignMessage } from './alephium/AlephiumSignMessage';
154
+
155
+ export { default as benfenGetAddress } from './benfen/BenfenGetAddress';
156
+ export { default as benfenGetPublicKey } from './benfen/BenfenGetPublicKey';
157
+ export { default as benfenSignMessage } from './benfen/BenfenSignMessage';
158
+ export { default as benfenSignTransaction } from './benfen/BenfenSignTransaction';
159
+
160
+ export { default as neoGetAddress } from './neo/NeoGetAddress';
161
+ export { default as neoSignTransaction } from './neo/NeoSignTransaction';
@@ -0,0 +1,103 @@
1
+ import { UI_REQUEST } from '../../constants/ui-request';
2
+ import { serializedPath, validatePath } from '../helpers/pathUtils';
3
+ import { BaseMethod } from '../BaseMethod';
4
+ import { validateParams, validateResult } from '../helpers/paramsValidator';
5
+
6
+ import type { KaspaGetAddress as HardwareKaspaGetAddress } from '@onetokenfe/hd-transport';
7
+ import type { KaspaAddress, KaspaGetAddressParams } from '../../types';
8
+
9
+ export default class KaspaGetAddress extends BaseMethod<HardwareKaspaGetAddress[]> {
10
+ hasBundle = false;
11
+
12
+ init() {
13
+ this.checkDeviceId = true;
14
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.NOT_INITIALIZE];
15
+
16
+ this.hasBundle = !!this.payload?.bundle;
17
+ const payload = this.hasBundle ? this.payload : { bundle: [this.payload] };
18
+
19
+ // check payload
20
+ validateParams(payload, [{ name: 'bundle', type: 'array' }]);
21
+
22
+ // init params
23
+ this.params = [];
24
+ payload.bundle.forEach((batch: KaspaGetAddressParams) => {
25
+ const addressN = validatePath(batch.path, 3);
26
+
27
+ validateParams(batch, [
28
+ { name: 'path', required: true },
29
+ { name: 'showOnOneToken', type: 'boolean' },
30
+ { name: 'prefix', type: 'string' },
31
+ { name: 'scheme', type: 'string' },
32
+ { name: 'useTweak', type: 'boolean' },
33
+ ]);
34
+
35
+ const showOnOneToken = batch.showOnOneToken ?? true;
36
+
37
+ this.params.push({
38
+ address_n: addressN,
39
+ show_display: showOnOneToken,
40
+ prefix: batch.prefix,
41
+ scheme: batch.scheme,
42
+ use_tweak: batch.useTweak,
43
+ });
44
+ });
45
+ }
46
+
47
+ getVersionRange() {
48
+ return {
49
+ model_mini: {
50
+ min: '3.0.0',
51
+ },
52
+ model_touch: {
53
+ min: '4.3.0',
54
+ },
55
+ };
56
+ }
57
+
58
+ getUseTweakVersionRange() {
59
+ return {
60
+ pro: {
61
+ min: '4.14.0',
62
+ },
63
+ model_classic1s: {
64
+ min: '3.12.0',
65
+ },
66
+ };
67
+ }
68
+
69
+ async run() {
70
+ this.checkFeatureVersionLimit(
71
+ // exists use_tweak is false check firmware version
72
+ () => this.params.some(param => param.use_tweak === false),
73
+ () => this.getUseTweakVersionRange(),
74
+ {
75
+ strictCheckDeviceSupport: true,
76
+ }
77
+ );
78
+
79
+ const responses: KaspaAddress[] = [];
80
+
81
+ for (let i = 0; i < this.params.length; i++) {
82
+ const param = this.params[i];
83
+ const res = await this.device.commands.typedCall('KaspaGetAddress', 'KaspaAddress', {
84
+ ...param,
85
+ });
86
+
87
+ const { address } = res.message;
88
+
89
+ const result = {
90
+ path: serializedPath(param.address_n),
91
+ address,
92
+ };
93
+ responses.push(result);
94
+ this.postPreviousAddressMessage(result);
95
+ }
96
+
97
+ validateResult(responses, ['address'], {
98
+ expectedLength: this.params.length,
99
+ });
100
+
101
+ return Promise.resolve(this.hasBundle ? responses : responses[0]);
102
+ }
103
+ }
@@ -0,0 +1,182 @@
1
+ import { bytesToHex } from '@noble/hashes/utils';
2
+
3
+ import { UI_REQUEST } from '../../constants/ui-request';
4
+ import { validatePath } from '../helpers/pathUtils';
5
+ import { BaseMethod } from '../BaseMethod';
6
+ import { validateParams } from '../helpers/paramsValidator';
7
+ import { serialize, zeroSubnetworkID } from './helpers/TransferSerialize';
8
+ import { SignatureType } from './helpers/SignatureType';
9
+
10
+ import type { TypedResponseMessage } from '../../device/DeviceCommands';
11
+ import type {
12
+ KaspaSignInputParams,
13
+ KaspaSignOutputParams,
14
+ KaspaSignTransactionParams,
15
+ KaspaSignature,
16
+ } from '../../types';
17
+ import type { TypedCall } from '@onetokenfe/hd-transport';
18
+
19
+ export default class KaspaSignTransaction extends BaseMethod<KaspaSignTransactionParams> {
20
+ hasBundle = false;
21
+
22
+ init() {
23
+ this.checkDeviceId = true;
24
+ this.allowDeviceMode = [...this.allowDeviceMode, UI_REQUEST.NOT_INITIALIZE];
25
+
26
+ const payload = this.payload as KaspaSignTransactionParams;
27
+
28
+ // check payload
29
+ validateParams(payload, [
30
+ { name: 'version', type: 'number' },
31
+ { name: 'sigHashType', type: 'number', required: true },
32
+ { name: 'inputs', type: 'array', required: true },
33
+ { name: 'outputs', type: 'array', required: true },
34
+ { name: 'lockTime', required: true },
35
+ { name: 'sigOpCount', type: 'number' },
36
+ { name: 'subNetworkID', type: 'string' },
37
+ { name: 'useTweak', type: 'boolean' },
38
+ ]);
39
+
40
+ // if(!payload.inputs.length) throw
41
+
42
+ const inputs: KaspaSignInputParams[] = payload.inputs.map(input => {
43
+ validateParams(input, [
44
+ { name: 'path', type: 'string', required: true },
45
+ { name: 'prevTxId', type: 'string', required: true },
46
+ { name: 'outputIndex', type: 'number', required: true },
47
+ { name: 'sequenceNumber', required: true },
48
+ ]);
49
+
50
+ const addressN = validatePath(input.path, 3);
51
+
52
+ return {
53
+ ...input,
54
+ path: addressN,
55
+ sigOpCount: input.sigOpCount ?? 1, // input.script.getSignatureOperationsCount()) //sigOpCount
56
+ };
57
+ });
58
+
59
+ const outputs: KaspaSignOutputParams[] = payload.outputs.map(output => {
60
+ validateParams(output, [
61
+ { name: 'satoshis', required: true },
62
+ { name: 'script', type: 'string', required: true },
63
+ { name: 'scriptVersion', type: 'number' },
64
+ ]);
65
+
66
+ return {
67
+ ...output,
68
+ scriptVersion: output.scriptVersion ?? 0,
69
+ };
70
+ });
71
+
72
+ this.params = {
73
+ ...payload,
74
+ inputs,
75
+ outputs,
76
+ scheme: payload.scheme ?? 'schnorr',
77
+ prefix: payload.prefix ?? 'kaspa',
78
+ // eslint-disable-next-line no-bitwise
79
+ sigHashType: payload.sigHashType ?? SignatureType.SIGHASH_ALL | SignatureType.SIGHASH_FORKID,
80
+ sigOpCount: payload.sigOpCount ?? 1,
81
+ subNetworkID: payload.subNetworkID ?? bytesToHex(zeroSubnetworkID()),
82
+ useTweak: payload.useTweak,
83
+ };
84
+ }
85
+
86
+ getVersionRange() {
87
+ return {
88
+ model_mini: {
89
+ min: '3.0.0',
90
+ },
91
+ model_touch: {
92
+ min: '4.3.0',
93
+ },
94
+ };
95
+ }
96
+
97
+ getUseTweakVersionRange() {
98
+ return {
99
+ pro: {
100
+ min: '4.14.0',
101
+ },
102
+ model_classic1s: {
103
+ min: '3.12.0',
104
+ },
105
+ };
106
+ }
107
+
108
+ async processTxRequest(
109
+ typedCall: TypedCall,
110
+ res: TypedResponseMessage<'KaspaTxInputRequest'> | TypedResponseMessage<'KaspaSignedTx'>,
111
+ index: number,
112
+ signature: KaspaSignature[]
113
+ ): Promise<KaspaSignature[]> {
114
+ if (res.type === 'KaspaSignedTx') {
115
+ signature.push({
116
+ index,
117
+ signature: res.message.signature,
118
+ });
119
+
120
+ return signature;
121
+ }
122
+
123
+ if (res.type === 'KaspaTxInputRequest') {
124
+ signature.push({
125
+ index,
126
+ signature: res.message.signature ?? '',
127
+ });
128
+
129
+ const nextIndex = res.message.request_index;
130
+
131
+ const { raw: rawMessage } = serialize(this.params, nextIndex);
132
+ const input = this.params.inputs[nextIndex];
133
+
134
+ const response = await typedCall(
135
+ 'KaspaTxInputAck',
136
+ // @ts-expect-error
137
+ ['KaspaTxInputRequest', 'KaspaSignedTx'],
138
+ {
139
+ address_n: input.path,
140
+ raw_message: bytesToHex(rawMessage),
141
+ }
142
+ );
143
+
144
+ // @ts-expect-error
145
+ return this.processTxRequest(typedCall, response, nextIndex, signature);
146
+ }
147
+
148
+ return signature;
149
+ }
150
+
151
+ async run() {
152
+ this.checkFeatureVersionLimit(
153
+ // exists use_tweak is false check firmware version
154
+ () => this.params.useTweak === false,
155
+ () => this.getUseTweakVersionRange(),
156
+ {
157
+ strictCheckDeviceSupport: true,
158
+ }
159
+ );
160
+
161
+ const { raw: rawMessage } = serialize(this.params, 0);
162
+ const input = this.params.inputs[0];
163
+
164
+ const { device, params } = this;
165
+
166
+ // @ts-expect-error
167
+ const response = await device.commands.typedCall(
168
+ 'KaspaSignTx',
169
+ ['KaspaTxInputRequest', 'KaspaSignedTx'],
170
+ {
171
+ address_n: input.path,
172
+ raw_message: bytesToHex(rawMessage),
173
+ scheme: params.scheme,
174
+ prefix: params.prefix,
175
+ input_count: params.inputs.length,
176
+ use_tweak: params.useTweak,
177
+ }
178
+ );
179
+
180
+ return this.processTxRequest(device.commands.typedCall.bind(device.commands), response, 0, []);
181
+ }
182
+ }