@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,84 @@
1
+ import {
2
+ HardwareErrorCode,
3
+ TypedError,
4
+ createDeviceNotSupportMethodError,
5
+ } from '@onetokenfe/hd-shared';
6
+
7
+ import { supportBatchPublicKey } from '../../utils/deviceFeaturesUtils';
8
+ import { isEqualBip44CoinType } from './pathUtils';
9
+ import { splitArray } from '../../utils/arrayUtils';
10
+ import { getDeviceType, getFirmwareType } from '../../utils';
11
+ import { DeviceModelToTypes } from '../../types';
12
+
13
+ import type { EcdsaPublicKeys, Path } from '@onetokenfe/hd-transport';
14
+ import type { Device } from '../../device/Device';
15
+
16
+ export async function batchGetPublickeys(
17
+ device: Device,
18
+ paths: Path[],
19
+ ecdsaCurveName: string,
20
+ coinType: number,
21
+ options?: {
22
+ includeNode?: boolean;
23
+ ignoreCoinType?: boolean;
24
+ }
25
+ ) {
26
+ const existsPathNotValid = paths.find(p => p.address_n.length < 3);
27
+ if (existsPathNotValid) {
28
+ throw TypedError(HardwareErrorCode.ForbiddenKeyPath, 'Path length must be greater than 3');
29
+ }
30
+
31
+ const supportsBatchPublicKey = supportBatchPublicKey(device.features, options);
32
+ if (!supportsBatchPublicKey) {
33
+ throw createDeviceNotSupportMethodError('BatchGetPublickeys', getFirmwareType(device.features));
34
+ }
35
+
36
+ const existsPathNotEqualCoinType = paths.find(p => !isEqualBip44CoinType(p.address_n, coinType));
37
+ if (options?.ignoreCoinType === false && existsPathNotEqualCoinType) {
38
+ throw TypedError(HardwareErrorCode.ForbiddenKeyPath);
39
+ }
40
+
41
+ let batchSize = 10;
42
+ const deviceType = getDeviceType(device.features);
43
+ if (DeviceModelToTypes.model_mini.includes(deviceType)) {
44
+ batchSize = 10;
45
+ } else if (DeviceModelToTypes.model_touch.includes(deviceType)) {
46
+ batchSize = 20;
47
+ }
48
+
49
+ const result: EcdsaPublicKeys = {
50
+ public_keys: [],
51
+ hd_nodes: [],
52
+ };
53
+ const splitPaths = splitArray(paths, batchSize);
54
+ for (const paths of splitPaths) {
55
+ const res = await device.commands.typedCall('BatchGetPublickeys', 'EcdsaPublicKeys', {
56
+ paths,
57
+ ecdsa_curve_name: ecdsaCurveName,
58
+ include_node: options?.includeNode ?? false,
59
+ });
60
+ if (res.type !== 'EcdsaPublicKeys') {
61
+ throw createDeviceNotSupportMethodError(
62
+ 'BatchGetPublickeys',
63
+ getFirmwareType(device.features)
64
+ );
65
+ } else {
66
+ result.root_fingerprint = res.message.root_fingerprint;
67
+ result.public_keys.push(...res.message.public_keys);
68
+ result.hd_nodes.push(...res.message.hd_nodes);
69
+ }
70
+ }
71
+ if (result.hd_nodes.length !== paths.length && options?.includeNode) {
72
+ throw TypedError(
73
+ HardwareErrorCode.CallMethodError,
74
+ 'BatchGetPublickeys failed, hd_nodes length not match'
75
+ );
76
+ }
77
+ if (result.public_keys.length !== paths.length && !options?.includeNode) {
78
+ throw TypedError(
79
+ HardwareErrorCode.CallMethodError,
80
+ 'BatchGetPublickeys failed, public_keys length not match'
81
+ );
82
+ }
83
+ return result;
84
+ }
@@ -0,0 +1,58 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { ERRORS, HardwareErrorCode } from '@onetokenfe/hd-shared';
3
+
4
+ /**
5
+ * Converts a number to a two's complement representation.
6
+ *
7
+ * E.g. -128 would be 0x80 in two's complement, while 127 would be 0x7F.
8
+ *
9
+ * BigNumber.js has no built-in function, unlike https://www.npmjs.com/package/bn.js
10
+ */
11
+ export const twosComplement = (number: BigNumber, bytes: number): BigNumber => {
12
+ if (bytes < 1 || bytes > 32) {
13
+ throw ERRORS.TypedError('Runtime', 'Int byte size must be between 1 and 32 (8 and 256 bits)');
14
+ }
15
+ // Determine value range
16
+ const minValue = new BigNumber(2).exponentiatedBy(bytes * 8 - 1).negated();
17
+ const maxValue = minValue.negated().minus(1);
18
+
19
+ const bigNumber = new BigNumber(number);
20
+
21
+ if (bigNumber.isGreaterThan(maxValue) || bigNumber.isLessThan(minValue)) {
22
+ throw ERRORS.TypedError(
23
+ HardwareErrorCode.RuntimeError,
24
+ `Overflow when trying to convert number ${number.toString()} into ${bytes} bytes`
25
+ );
26
+ }
27
+
28
+ if (bigNumber.isPositive()) {
29
+ return bigNumber;
30
+ }
31
+ return bigNumber.minus(minValue).minus(minValue);
32
+ };
33
+
34
+ export const intToHex = (
35
+ number: number | BigNumber | string,
36
+ bytes: number,
37
+ signed: boolean
38
+ ): string => {
39
+ let bigNumber = new BigNumber(number);
40
+ if (signed) {
41
+ bigNumber = twosComplement(bigNumber, bytes);
42
+ }
43
+ if (bigNumber.isNegative()) {
44
+ throw ERRORS.TypedError(
45
+ HardwareErrorCode.RuntimeError,
46
+ `Cannot convert negative number to unsigned interger: ${number.toString()}`
47
+ );
48
+ }
49
+ const hex = bigNumber.toString(16);
50
+ const hexChars = bytes * 2;
51
+ if (hex.length > hexChars) {
52
+ throw ERRORS.TypedError(
53
+ HardwareErrorCode.RuntimeError,
54
+ `Overflow when trying to convert number ${number.toString()} into ${bytes} bytes`
55
+ );
56
+ }
57
+ return hex.padStart(bytes * 2, '0');
58
+ };
@@ -0,0 +1,111 @@
1
+ import BigNumber from 'bignumber.js';
2
+
3
+ export const hasHexPrefix = (str: string): boolean => str.slice(0, 2).toLowerCase() === '0x';
4
+
5
+ // remove hex prefix
6
+ export const stripHexPrefix = (str: string): string => (hasHexPrefix(str) ? str.slice(2) : str);
7
+
8
+ // add hex prefix
9
+ export const addHexPrefix = (str: string): string => (hasHexPrefix(str) ? str : `0x${str}`);
10
+
11
+ export const isHexString = (value: string, length?: number) => {
12
+ if (typeof value !== 'string' || !value.match(/^(0x|0X)?[0-9A-Fa-f]*$/)) {
13
+ return false;
14
+ }
15
+ if (length && value.length !== 2 + 2 * length) {
16
+ return false;
17
+ }
18
+ return true;
19
+ };
20
+
21
+ export const stripHexStartZeroes = (str: string) => {
22
+ while (/^00/.test(str)) {
23
+ str = str.slice(2);
24
+ }
25
+ return str;
26
+ };
27
+
28
+ const modifyValues = (object: any, transformer: (value: any, key: string) => any) =>
29
+ Object.fromEntries(Object.entries(object).map(([key, value]) => [key, transformer(value, key)]));
30
+
31
+ /**
32
+ * Passing to the hardware requires formatting hex strings in the following way.
33
+ */
34
+ export const formatAnyHex: (value: any) => any = value => {
35
+ if (typeof value === 'string') {
36
+ let stripped = stripHexPrefix(value);
37
+ // pad with zeroes
38
+ if (stripped.length % 2 !== 0) {
39
+ stripped = `0${stripped}`;
40
+ }
41
+ return stripped;
42
+ }
43
+ if (Array.isArray(value)) {
44
+ return value.map(formatAnyHex);
45
+ }
46
+ if (typeof value === 'object') {
47
+ return modifyValues(value, value => formatAnyHex(value));
48
+ }
49
+
50
+ return value;
51
+ };
52
+
53
+ const hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));
54
+ /**
55
+ * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))
56
+ */
57
+ export function bytesToHex(uint8a: Uint8Array): string {
58
+ // pre-caching improves the speed 6x
59
+ if (!(uint8a instanceof Uint8Array)) throw new Error('Uint8Array expected');
60
+ let hex = '';
61
+ for (let i = 0; i < uint8a.length; i++) {
62
+ hex += hexes[uint8a[i]];
63
+ }
64
+ return hex;
65
+ }
66
+
67
+ /**
68
+ * @example hexToBytes('deadbeef')
69
+ */
70
+ export function hexToBytes(hex: string): Uint8Array {
71
+ if (typeof hex !== 'string') {
72
+ throw new TypeError(`hexToBytes: expected string, got ${typeof hex}`);
73
+ }
74
+ if (hex.length % 2) throw new Error('hexToBytes: received invalid unpadded hex');
75
+ const array = new Uint8Array(hex.length / 2);
76
+ for (let i = 0; i < array.length; i++) {
77
+ const j = i * 2;
78
+ const hexByte = hex.slice(j, j + 2);
79
+ const byte = Number.parseInt(hexByte, 16);
80
+ if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');
81
+ array[i] = byte;
82
+ }
83
+ return array;
84
+ }
85
+
86
+ export function parseChainId(chainId: string | number | undefined): number {
87
+ if (!chainId) {
88
+ return 0;
89
+ }
90
+
91
+ if (typeof chainId === 'string') {
92
+ if (chainId.trim() === '') {
93
+ return 0;
94
+ }
95
+
96
+ if (chainId.match(/^[0-9]+$/)) {
97
+ return new BigNumber(chainId, 10).toNumber();
98
+ }
99
+ if (chainId.startsWith('0x') || chainId.match(/^[0-9a-fA-F]+$/)) {
100
+ return new BigNumber(chainId, 16).toNumber();
101
+ }
102
+
103
+ throw new Error(`Invalid chainId ${chainId}`);
104
+ }
105
+
106
+ if (typeof chainId === 'number') {
107
+ return new BigNumber(chainId).toNumber();
108
+ }
109
+
110
+ throw new Error(`Invalid chainId ${chainId}`);
111
+ }
@@ -0,0 +1,165 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { ERRORS, HardwareErrorCode } from '@onetokenfe/hd-shared';
3
+
4
+ import { addHexPrefix, isHexString } from './hexUtils';
5
+
6
+ export type SchemaParam = {
7
+ name: string;
8
+ type?:
9
+ | 'string'
10
+ | 'number'
11
+ | 'boolean'
12
+ | 'bigNumber'
13
+ | 'uint'
14
+ | 'buffer'
15
+ | 'object'
16
+ | 'array'
17
+ | 'hexString';
18
+ required?: boolean;
19
+ allowEmpty?: boolean;
20
+ allowNegative?: boolean;
21
+ };
22
+
23
+ const invalidParameter = (message: string) =>
24
+ ERRORS.TypedError(HardwareErrorCode.CallMethodInvalidParameter, message);
25
+
26
+ const invalidResponse = (message: string) =>
27
+ ERRORS.TypedError(HardwareErrorCode.CallMethodError, message);
28
+
29
+ export const validateParams = (values: any, fields: Array<SchemaParam>): void => {
30
+ fields.forEach(field => {
31
+ const existsProp = Object.prototype.hasOwnProperty.call(values, field.name);
32
+
33
+ if (!existsProp && field.required) {
34
+ throw invalidParameter(`Missing required parameter: ${field.name}`);
35
+ }
36
+
37
+ const value = values[field.name];
38
+ if (value && field.type) {
39
+ switch (field.type) {
40
+ case 'array':
41
+ if (!Array.isArray(value)) {
42
+ // invalid type
43
+ throw invalidParameter(
44
+ `Parameter [${field.name}] is of type invalid and should be [${field.type}].`
45
+ );
46
+ } else if (!field.allowEmpty && value.length < 1) {
47
+ throw invalidParameter(`Parameter "${field.name}" is empty.`);
48
+ }
49
+ break;
50
+ case 'uint':
51
+ if (typeof value !== 'string' && typeof value !== 'number') {
52
+ throw invalidParameter(
53
+ `Parameter [${field.name}] has invalid type. "string|number" expected.`
54
+ );
55
+ }
56
+ if (
57
+ (typeof value === 'number' && !Number.isSafeInteger(value)) ||
58
+ !/^(?:[1-9]\d*|\d)$/.test(
59
+ value.toString().replace(/^-/, field.allowNegative ? '' : '-')
60
+ )
61
+ ) {
62
+ throw invalidParameter(
63
+ `Parameter [${field.name}] has invalid value "${value}". Integer representation expected.`
64
+ );
65
+ }
66
+ break;
67
+ case 'bigNumber':
68
+ if (typeof value !== 'string') {
69
+ throw invalidParameter(
70
+ `Parameter [${field.name}] is of type invalid and should be [string].`
71
+ );
72
+ }
73
+ try {
74
+ const bn = new BigNumber(value);
75
+ if (bn.toFixed(0) !== value) {
76
+ // Try catch collection error
77
+ throw new Error('');
78
+ }
79
+ } catch (error) {
80
+ throw invalidParameter(
81
+ `Parameter [${field.name}] is of type invalid and should be [${field.type}].`
82
+ );
83
+ }
84
+ break;
85
+
86
+ case 'buffer': {
87
+ if (typeof value === 'undefined' || value === null) {
88
+ throw invalidParameter(
89
+ `Parameter [${field.name}] is of type invalid and should be [buffer].`
90
+ );
91
+ }
92
+ const isNodeBuffer =
93
+ typeof Buffer !== 'undefined' &&
94
+ typeof Buffer.isBuffer === 'function' &&
95
+ Buffer.isBuffer(value);
96
+ const isCustomBuffer =
97
+ value.constructor &&
98
+ typeof value.constructor.isBuffer === 'function' &&
99
+ value.constructor.isBuffer(value);
100
+ const isArrayBuffer = typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;
101
+ const isArrayBufferView =
102
+ typeof ArrayBuffer !== 'undefined' &&
103
+ typeof ArrayBuffer.isView === 'function' &&
104
+ ArrayBuffer.isView(value);
105
+
106
+ if (!isNodeBuffer && !isCustomBuffer && !isArrayBuffer && !isArrayBufferView) {
107
+ throw invalidParameter(
108
+ `Parameter [${field.name}] is of type invalid and should be [buffer].`
109
+ );
110
+ }
111
+ break;
112
+ }
113
+
114
+ case 'hexString':
115
+ if (typeof value !== 'string' || !isHexString(addHexPrefix(value))) {
116
+ throw invalidParameter(
117
+ `Parameter [${field.name}] is of type invalid and should be [${field.type}].`
118
+ );
119
+ }
120
+ break;
121
+
122
+ default:
123
+ // eslint-disable-next-line valid-typeof
124
+ if (typeof value !== field.type) {
125
+ // invalid type
126
+ throw invalidParameter(
127
+ `Parameter [${field.name}] is of type invalid and should be [${field.type}].`
128
+ );
129
+ }
130
+ break;
131
+ }
132
+ }
133
+ });
134
+ };
135
+
136
+ export function validateResult(
137
+ result: any,
138
+ nonNullableFields: string[],
139
+ options?: {
140
+ expectedLength?: number | undefined | null;
141
+ }
142
+ ) {
143
+ if (Array.isArray(result)) {
144
+ if (options?.expectedLength !== null && result.length !== options?.expectedLength) {
145
+ throw invalidResponse(
146
+ `Expected array length of ${options?.expectedLength}, but got ${result.length}`
147
+ );
148
+ }
149
+ result.forEach((item, index) => {
150
+ nonNullableFields.forEach(field => {
151
+ if (item[field] == null) {
152
+ throw invalidResponse(`Field '${field}' in array item at index ${index} is null`);
153
+ }
154
+ });
155
+ });
156
+ } else if (typeof result === 'object' && result !== null) {
157
+ nonNullableFields.forEach(field => {
158
+ if (result[field] == null) {
159
+ throw invalidResponse(`Field '${field}' in object is null`);
160
+ }
161
+ });
162
+ } else {
163
+ throw invalidResponse('Result is neither an array nor a valid object');
164
+ }
165
+ }
@@ -0,0 +1,145 @@
1
+ /* eslint-disable no-bitwise */
2
+
3
+ import { ERRORS, HardwareErrorCode } from '@onetokenfe/hd-shared';
4
+
5
+ import type { ChangeOutputScriptType, InputScriptType } from '@onetokenfe/hd-transport';
6
+
7
+ const HD_HARDENED = 0x80000000;
8
+ export const toHardened = (n: number): number => (n | HD_HARDENED) >>> 0;
9
+ export const fromHardened = (n: number): number => (n & ~HD_HARDENED) >>> 0;
10
+ export const getSlip44ByPath = (path: number[]) => fromHardened(path[1]);
11
+
12
+ const PATH_NOT_VALID = ERRORS.TypedError(
13
+ HardwareErrorCode.CallMethodInvalidParameter,
14
+ 'Not a valid path'
15
+ );
16
+ const PATH_NEGATIVE_VALUES = ERRORS.TypedError(
17
+ HardwareErrorCode.CallMethodInvalidParameter,
18
+ 'Path cannot contain negative values'
19
+ );
20
+
21
+ export const getHDPath = (path: string): Array<number> => {
22
+ const parts: Array<string> = path.toLowerCase().split('/');
23
+ if (parts[0] !== 'm') throw PATH_NOT_VALID;
24
+ return parts
25
+ .filter((p: string) => p !== 'm' && p !== '')
26
+ .map((p: string) => {
27
+ let hardened = false;
28
+ if (p.substr(p.length - 1) === "'") {
29
+ hardened = true;
30
+ p = p.substr(0, p.length - 1);
31
+ }
32
+ let n: number = parseInt(p);
33
+ if (Number.isNaN(n)) {
34
+ throw PATH_NOT_VALID;
35
+ } else if (n < 0) {
36
+ throw PATH_NEGATIVE_VALUES;
37
+ }
38
+ if (hardened) {
39
+ // hardened index
40
+ n = toHardened(n);
41
+ }
42
+ return n;
43
+ });
44
+ };
45
+
46
+ export const isEqualBip44CoinType = (path: Array<number>, coinType: number): boolean =>
47
+ isBip44Path(path) && path[1] === toHardened(coinType);
48
+
49
+ export const isBip44Path = (path: Array<number>): boolean =>
50
+ Array.isArray(path) && path[0] === toHardened(44);
51
+
52
+ export const isMultisigPath = (path: Array<number>): boolean =>
53
+ Array.isArray(path) && path[0] === toHardened(48);
54
+
55
+ export const isSegwitPath = (path: Array<number>): boolean =>
56
+ Array.isArray(path) && path[0] === toHardened(49);
57
+
58
+ export const isBech32Path = (path: Array<number>): boolean =>
59
+ Array.isArray(path) && path[0] === toHardened(84);
60
+
61
+ export const isTaprootPath = (path: number[] | undefined) =>
62
+ Array.isArray(path) && (path[0] === toHardened(86) || path[0] === toHardened(10025));
63
+
64
+ export const getScriptType = (path: Array<number>): InputScriptType => {
65
+ if (!Array.isArray(path) || path.length < 1) return 'SPENDADDRESS';
66
+
67
+ const p1 = fromHardened(path[0]);
68
+ switch (p1) {
69
+ case 48:
70
+ return 'SPENDMULTISIG';
71
+ case 49:
72
+ return 'SPENDP2SHWITNESS';
73
+ case 84:
74
+ return 'SPENDWITNESS';
75
+ case 86:
76
+ case 10025:
77
+ return 'SPENDTAPROOT';
78
+ default:
79
+ return 'SPENDADDRESS';
80
+ }
81
+ };
82
+
83
+ export const getOutputScriptType = (path?: number[]): ChangeOutputScriptType => {
84
+ if (!Array.isArray(path) || path.length < 1) return 'PAYTOADDRESS';
85
+
86
+ // compatibility for Casa - allow an unhardened 49 path to use PAYTOP2SHWITNESS
87
+ if (path[0] === 49) {
88
+ return 'PAYTOP2SHWITNESS';
89
+ }
90
+
91
+ const p = fromHardened(path[0]);
92
+ switch (p) {
93
+ case 48:
94
+ return 'PAYTOMULTISIG';
95
+ case 49:
96
+ return 'PAYTOP2SHWITNESS';
97
+ case 84:
98
+ return 'PAYTOWITNESS';
99
+ // 10025 - SLIP-25 https://github.com/satoshilabs/slips/blob/master/slip-0025.md#public-key-derivation
100
+ case 86:
101
+ case 10025:
102
+ return 'PAYTOTAPROOT';
103
+ default:
104
+ return 'PAYTOADDRESS';
105
+ }
106
+ };
107
+
108
+ export const serializedPath = (path: Array<number>): string => {
109
+ const pathStr = path
110
+ .map((p: number) => {
111
+ if (p & HD_HARDENED) {
112
+ return `${p & ~HD_HARDENED}'`;
113
+ }
114
+ return p;
115
+ })
116
+ .join('/');
117
+
118
+ return `m/${pathStr}`;
119
+ };
120
+
121
+ export const validatePath = (
122
+ path: string | Array<number>,
123
+ length = 0,
124
+ base = false
125
+ ): Array<number> => {
126
+ let valid: Array<number> | undefined;
127
+ if (typeof path === 'string') {
128
+ valid = getHDPath(path);
129
+ } else if (Array.isArray(path)) {
130
+ valid = path.map((p: any) => {
131
+ const n: number = parseInt(p);
132
+ if (Number.isNaN(n)) {
133
+ throw PATH_NOT_VALID;
134
+ } else if (n < 0) {
135
+ throw PATH_NEGATIVE_VALUES;
136
+ }
137
+ return n;
138
+ });
139
+ } else {
140
+ valid = undefined;
141
+ }
142
+ if (!valid) throw PATH_NOT_VALID;
143
+ if (length > 0 && valid.length < length) throw PATH_NOT_VALID;
144
+ return base ? valid.splice(0, 3) : valid;
145
+ };
@@ -0,0 +1,11 @@
1
+ export const cutString = (str: string | undefined, cutLen: number): [string, string] => {
2
+ if (!str) {
3
+ return ['', ''];
4
+ }
5
+ const first = str.slice(0, cutLen);
6
+ const second = str.slice(cutLen);
7
+ return [first, second];
8
+ };
9
+
10
+ export const toSnakeCase = (val: string): string =>
11
+ val.replace(/([A-Z])/g, el => `_${el.toLowerCase()}`);