@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
package/.eslintrc ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "rules": {
3
+ "camelcase": "off",
4
+ "no-param-reassign": "off"
5
+ }
6
+ }
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # `@onetokenfe/hd-core`
2
+
3
+ @onetokenfe/hd-core is a platform for easy integration of OneToken hardware into 3rd party services. This library provides the core processes and APIs for communicating with OneToken hardware.
4
+
5
+ This library is not environment specific, if you want to use a specific SDK, please refer to the SDK for each environment.
6
+
7
+ ## Installation
8
+
9
+ Install library as npm module:
10
+
11
+ ```javascript
12
+ npm install @onetokenfe/hd-core
13
+ ```
14
+
15
+ or
16
+
17
+ ```javascript
18
+ yarn add @onetokenfe/hd-core
19
+ ```
20
+
21
+ ## Initialization
22
+
23
+ ```javascript
24
+ import Core from '@onetokenfe/hd-core';
25
+ ```
26
+
27
+ ## Docs
28
+
29
+ Documentation is available [hardware-js-sdk](https://developer.onetoken.so/connect-to-hardware/hardware-sdk/start)
30
+
31
+ ## Examples
32
+ // TODO: add example url
@@ -0,0 +1,68 @@
1
+ import { hex2BfcAddress, publicKeyToAddress } from '../src/api/benfen/normalize';
2
+
3
+ export const TEST_FIXTURES = [
4
+ // 12 位助记词
5
+ {
6
+ publicKey: '554652d41f799d254b6f9f34a52b1b10be217ccf0ddcc8bf2389747099d53e3d',
7
+ hexAddress: '0x2d6e023ee0f3763c95e8b55621dec35e41cdc1438f3716588628f3a1a41e005d',
8
+ bfcAddress: 'BFC2d6e023ee0f3763c95e8b55621dec35e41cdc1438f3716588628f3a1a41e005d8fc4',
9
+ },
10
+ {
11
+ publicKey: 'f199d06ee5abd9055143af7c14e98d9fce7bd08c4de9a20ab18205d467350ca4',
12
+ hexAddress: '0x8e6de169f88b291a03070a99ed8f1ccb61046fa5a07e760c860501689bd41346',
13
+ bfcAddress: 'BFC8e6de169f88b291a03070a99ed8f1ccb61046fa5a07e760c860501689bd4134662c1',
14
+ },
15
+ {
16
+ publicKey: '12ee1cee9f0fa0016db328a5d3e5a3979a9c3ec4f2a85efde473f4575727ab5b',
17
+ hexAddress: '0x2b2253617385ee359d87860d1e9fc1e461223f0695ecbd67407878d48fcd10dc',
18
+ bfcAddress: 'BFC2b2253617385ee359d87860d1e9fc1e461223f0695ecbd67407878d48fcd10dc7099',
19
+ },
20
+ // 18 位助记词
21
+ {
22
+ publicKey: 'c556f258d4840fe69826f58dfa9cd20df604a2a2f4b1af57c82f72c1e96c0fd6',
23
+ hexAddress: '0xe94f5633460f2d2b851837ebacfa21fcaad6390044190afe889d31f0544f2e77',
24
+ bfcAddress: 'BFCe94f5633460f2d2b851837ebacfa21fcaad6390044190afe889d31f0544f2e773e53',
25
+ },
26
+ {
27
+ publicKey: '852f3b4496eb533282d2dcbf536cebdd372d8d8cf106677e91f40f7e694dd724',
28
+ hexAddress: '0xa37f1d6df2c75464608c850faa601522d03fbd02e406ffee2cf0bcdae3cb5f39',
29
+ bfcAddress: 'BFCa37f1d6df2c75464608c850faa601522d03fbd02e406ffee2cf0bcdae3cb5f399914',
30
+ },
31
+ {
32
+ publicKey: 'cd6f02eec5c5cc0eaa8c9da78a1e7f2dc69481b64030d130c3f2fe4f24dfe6e8',
33
+ hexAddress: '0x763ca26a1b55f3b5386ba61befb7b3110a424ff70a18f003205465e576699e9b',
34
+ bfcAddress: 'BFC763ca26a1b55f3b5386ba61befb7b3110a424ff70a18f003205465e576699e9bf887',
35
+ },
36
+
37
+ // 24 位助记词
38
+ // "path": "m/44'/728'/0'/0'/0'",
39
+ {
40
+ publicKey: 'd59fc3edda0e16a8b5b827829b97a65398223e319cf3a8afeb482f5c6f6653c6',
41
+ hexAddress: '0x7356158f73e541ff7eb1a1aa97341d414fbc35fc7710e138e2d2d31207a41e6a',
42
+ bfcAddress: 'BFC7356158f73e541ff7eb1a1aa97341d414fbc35fc7710e138e2d2d31207a41e6a6a90',
43
+ },
44
+ // "path": "m/44'/728'/0'/0'",
45
+ {
46
+ publicKey: 'a3600ca62a50a9650ac26f9b8b731eea83afca735ddbd83e688121e0f74fceb6',
47
+ hexAddress: '0x1a4889f782d427a863b69086840128e5308a2c071935d6c7e079a4ad4d136ebc',
48
+ bfcAddress: 'BFC1a4889f782d427a863b69086840128e5308a2c071935d6c7e079a4ad4d136ebce4d2',
49
+ },
50
+ // "path": "m/44'/728'/0'/0'/1'",
51
+ {
52
+ publicKey: '8e0411e3059c9339038d927049ae79ccf4f2f5339a923aef258a1e69f70f733f',
53
+ hexAddress: '0x67f30006ee36ae36f6e3203f88fb8a48b08756144cf02a64137627d45c504e24',
54
+ bfcAddress: 'BFC67f30006ee36ae36f6e3203f88fb8a48b08756144cf02a64137627d45c504e244dd2',
55
+ },
56
+ ];
57
+
58
+ describe('Benfen Address Normalization', () => {
59
+ TEST_FIXTURES.forEach(({ publicKey, hexAddress, bfcAddress }) => {
60
+ it(`should correctly convert public key ${publicKey.slice(0, 8)}... to BFC address`, () => {
61
+ const generatedHexAddress = publicKeyToAddress(publicKey);
62
+ const generatedBfcAddress = hex2BfcAddress(generatedHexAddress);
63
+
64
+ expect(generatedHexAddress).toBe(hexAddress);
65
+ expect(generatedBfcAddress).toBe(bfcAddress);
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,115 @@
1
+ import { shouldUpdateBootloaderForClassicAndMini } from '../src/api/firmware/bootloaderHelper';
2
+
3
+ import type { IVersionArray } from '../src';
4
+
5
+ // Add mock for config module
6
+ jest.mock('../src/data/config', () => ({
7
+ getSDKVersion: () => '1.0.0',
8
+ DEFAULT_DOMAIN: 'https://jssdk.onetoken.so/1.0.0/',
9
+ }));
10
+
11
+ const fixtures = [
12
+ {
13
+ description: 'version: 2.10.0 -> 2.11.0, boot 1.9.0 -> boot 2.0.0, No need to upgrade',
14
+ currentVersion: '2.10.0',
15
+ bootloaderVersion: '1.9.0',
16
+ willUpdateFirmware: '2.11.0',
17
+ targetBootloaderVersion: [2, 0, 0],
18
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
19
+ shouldUpdateBootloader: false,
20
+ },
21
+ {
22
+ description: 'version: 2.10.0 -> 3.0.0, boot 1.9.0 -> boot 2.0.0, Should upgrade bootloader',
23
+ currentVersion: '2.10.0',
24
+ bootloaderVersion: '1.9.0',
25
+ willUpdateFirmware: '3.0.0',
26
+ targetBootloaderVersion: [2, 0, 0],
27
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
28
+ shouldUpdateBootloader: true,
29
+ },
30
+ {
31
+ description: 'version: 2.10.0 -> 3.0.0, boot 2.0.0 -> boot 2.0.0, No need to upgrade',
32
+ currentVersion: '2.10.0',
33
+ bootloaderVersion: '2.0.0',
34
+ willUpdateFirmware: '3.0.0',
35
+ targetBootloaderVersion: [2, 0, 0],
36
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
37
+ shouldUpdateBootloader: false,
38
+ },
39
+ {
40
+ description: 'version: 3.0.0 -> 3.0.0, boot 2.0.0 -> boot 2.0.0, No need to upgrade',
41
+ currentVersion: '3.0.0',
42
+ bootloaderVersion: '2.0.0',
43
+ willUpdateFirmware: '3.0.0',
44
+ targetBootloaderVersion: [2, 0, 0],
45
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
46
+ shouldUpdateBootloader: false,
47
+ },
48
+ {
49
+ description: 'version: 3.0.0 -> 3.1.0, boot 2.0.0 -> boot 2.0.0, No need to upgrade',
50
+ currentVersion: '3.0.0',
51
+ bootloaderVersion: '2.0.0',
52
+ willUpdateFirmware: '3.1.0',
53
+ targetBootloaderVersion: [2, 0, 0],
54
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
55
+ shouldUpdateBootloader: false,
56
+ },
57
+ {
58
+ description: 'version: 2.11.0 -> 3.1.0, boot 1.9.0 -> boot 2.0.0, Should upgrade bootloader',
59
+ currentVersion: '2.11.0',
60
+ bootloaderVersion: '2.0.0',
61
+ willUpdateFirmware: '3.1.0',
62
+ targetBootloaderVersion: [2, 0, 0],
63
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
64
+ shouldUpdateBootloader: false,
65
+ },
66
+ {
67
+ description: 'version: 2.11.0 -> 3.1.0, boot 2.0.0 -> boot 2.0.0, No need to upgrade',
68
+ currentVersion: '2.11.0',
69
+ bootloaderVersion: '2.0.0',
70
+ willUpdateFirmware: '3.1.0',
71
+ targetBootloaderVersion: [2, 0, 0],
72
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
73
+ shouldUpdateBootloader: false,
74
+ },
75
+ {
76
+ description: 'version: 3.1.0 -> 3.2.0, boot 1.9.0 -> boot 2.0.0, Should upgrade bootloader',
77
+ currentVersion: '3.1.0',
78
+ bootloaderVersion: '1.9.0',
79
+ willUpdateFirmware: '3.2.0',
80
+ targetBootloaderVersion: [2, 0, 0],
81
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
82
+ shouldUpdateBootloader: true,
83
+ },
84
+ {
85
+ description: 'version: 3.1.0 -> 3.3.0, boot 2.0.0 -> boot 2.0.0, No need to upgrade',
86
+ currentVersion: '3.1.0',
87
+ bootloaderVersion: '1.9.0',
88
+ willUpdateFirmware: '3.2.0',
89
+ targetBootloaderVersion: [2, 0, 0],
90
+ bootloaderRelatedFirmwareVersion: [3, 0, 0],
91
+ shouldUpdateBootloader: true,
92
+ },
93
+ ];
94
+
95
+ describe('CheckBootloaderReleast', () => {
96
+ fixtures.forEach(data => {
97
+ test(data.description, () => {
98
+ const {
99
+ currentVersion,
100
+ bootloaderVersion,
101
+ willUpdateFirmware,
102
+ targetBootloaderVersion,
103
+ bootloaderRelatedFirmwareVersion,
104
+ } = data;
105
+ const shouldUpdateBootloader = shouldUpdateBootloaderForClassicAndMini({
106
+ currentVersion,
107
+ bootloaderVersion,
108
+ willUpdateFirmware,
109
+ targetBootloaderVersion: targetBootloaderVersion as IVersionArray,
110
+ bootloaderRelatedFirmwareVersion: bootloaderRelatedFirmwareVersion as IVersionArray,
111
+ });
112
+ expect(shouldUpdateBootloader).toBe(data.shouldUpdateBootloader);
113
+ });
114
+ });
115
+ });
@@ -0,0 +1,419 @@
1
+ import EVMSignTransaction from '../src/api/evm/EVMSignTransaction';
2
+
3
+ import type { EVMTransactionEIP7702 } from '../src/types';
4
+
5
+ // Mock the config module to avoid package.json resolution issues
6
+ jest.mock('../src/data/config', () => ({
7
+ getSDKVersion: jest.fn(() => '1.0.0'),
8
+ DEFAULT_DOMAIN: 'https://jssdk.onetoken.so/1.0.0/',
9
+ }));
10
+
11
+ // Mock the device and transport manager
12
+ jest.mock('../src/data-manager/TransportManager', () => ({
13
+ getMessageVersion: jest.fn(() => 'v2'),
14
+ }));
15
+
16
+ jest.mock('../src/device/Device', () => ({
17
+ Device: jest.fn(),
18
+ }));
19
+
20
+ describe('EVMSignTransaction EIP-7702', () => {
21
+ let mockDevice: any;
22
+ let mockTypedCall: jest.Mock;
23
+
24
+ beforeEach(() => {
25
+ mockTypedCall = jest.fn();
26
+ mockDevice = {
27
+ commands: {
28
+ typedCall: {
29
+ bind: jest.fn(() => mockTypedCall),
30
+ },
31
+ },
32
+ };
33
+ });
34
+
35
+ describe('EIP-7702 Transaction Detection', () => {
36
+ it('should detect EIP-7702 transaction with authorization list', () => {
37
+ const transaction: EVMTransactionEIP7702 = {
38
+ to: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
39
+ value: '0x0',
40
+ gasLimit: '0x5208',
41
+ nonce: '0x0',
42
+ chainId: 1,
43
+ maxFeePerGas: '0xbebc200',
44
+ maxPriorityFeePerGas: '0x9502f900',
45
+ authorizationList: [
46
+ {
47
+ chainId: 1,
48
+ address: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
49
+ nonce: '0x1',
50
+ },
51
+ ],
52
+ };
53
+
54
+ const method = new EVMSignTransaction({
55
+ id: 1,
56
+ payload: {
57
+ method: 'evmSignTransaction',
58
+ path: "m/44'/60'/0'/0/0",
59
+ transaction,
60
+ },
61
+ });
62
+ method.device = mockDevice;
63
+ method.init();
64
+
65
+ expect(method.isEIP7702).toBe(true);
66
+ expect(method.isEIP1559).toBe(false);
67
+ });
68
+
69
+ it('should not detect EIP-7702 when authorization list is empty', () => {
70
+ const transaction = {
71
+ to: '0x1234567890123456789012345678901234567890',
72
+ value: '0x0',
73
+ gasLimit: '0x5208',
74
+ nonce: '0x0',
75
+ chainId: 1,
76
+ maxFeePerGas: '0x77359400',
77
+ maxPriorityFeePerGas: '0x77359400',
78
+ authorizationList: [],
79
+ };
80
+
81
+ const method = new EVMSignTransaction({
82
+ id: 1,
83
+ payload: {
84
+ method: 'evmSignTransaction',
85
+ path: "m/44'/60'/0'/0/0",
86
+ transaction,
87
+ },
88
+ });
89
+ method.device = mockDevice;
90
+ method.init();
91
+
92
+ expect(method.isEIP7702).toBe(false);
93
+ expect(method.isEIP1559).toBe(true);
94
+ });
95
+ });
96
+
97
+ describe('EIP-7702 Signature Processing', () => {
98
+ it('should return flattened r,s,v structure for authorization signatures', async () => {
99
+ const mockAuthSignatures = [
100
+ {
101
+ y_parity: 0,
102
+ r: 'abcd1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd',
103
+ s: 'efab5678901234567890abcdef1234567890abcdef1234567890abcdef123456',
104
+ },
105
+ {
106
+ y_parity: 1,
107
+ r: '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
108
+ s: '567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234',
109
+ },
110
+ ];
111
+
112
+ mockTypedCall.mockResolvedValue({
113
+ message: {
114
+ signature_v: 27,
115
+ signature_r: 'deadbeef1234567890abcdef1234567890abcdef1234567890abcdef123456',
116
+ signature_s: 'cafebabe567890abcdef1234567890abcdef1234567890abcdef1234567890',
117
+ authorization_signatures: mockAuthSignatures,
118
+ },
119
+ });
120
+
121
+ const transaction: EVMTransactionEIP7702 = {
122
+ to: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
123
+ value: '0x0',
124
+ gasLimit: '0x5208',
125
+ nonce: '0x0',
126
+ chainId: 1,
127
+ maxFeePerGas: '0xbebc200',
128
+ maxPriorityFeePerGas: '0x9502f900',
129
+ authorizationList: [
130
+ {
131
+ chainId: 1,
132
+ address: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
133
+ nonce: '0x1',
134
+ },
135
+ ],
136
+ };
137
+
138
+ const method = new EVMSignTransaction({
139
+ id: 1,
140
+ payload: {
141
+ method: 'evmSignTransaction',
142
+ path: "m/44'/60'/0'/0/0",
143
+ transaction,
144
+ },
145
+ });
146
+ method.device = mockDevice;
147
+ method.init();
148
+
149
+ const result = await method.run();
150
+
151
+ expect(result).toEqual({
152
+ v: '0x1b',
153
+ r: '0xdeadbeef1234567890abcdef1234567890abcdef1234567890abcdef123456',
154
+ s: '0xcafebabe567890abcdef1234567890abcdef1234567890abcdef1234567890',
155
+ authorizationSignatures: [
156
+ {
157
+ yParity: 0,
158
+ r: 'abcd1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd',
159
+ s: 'efab5678901234567890abcdef1234567890abcdef1234567890abcdef123456',
160
+ },
161
+ {
162
+ yParity: 1,
163
+ r: '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
164
+ s: '567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234',
165
+ },
166
+ ],
167
+ });
168
+ });
169
+
170
+ it('should handle transaction without authorization signatures', async () => {
171
+ mockTypedCall.mockResolvedValue({
172
+ message: {
173
+ signature_v: 28,
174
+ signature_r: 'deadbeef1234567890abcdef1234567890abcdef1234567890abcdef123456',
175
+ signature_s: 'cafebabe567890abcdef1234567890abcdef1234567890abcdef1234567890',
176
+ authorization_signatures: [],
177
+ },
178
+ });
179
+
180
+ const transaction: EVMTransactionEIP7702 = {
181
+ to: '0x1234567890123456789012345678901234567890',
182
+ value: '0x0',
183
+ gasLimit: '0x5208',
184
+ nonce: '0x0',
185
+ chainId: 1,
186
+ maxFeePerGas: '0x77359400',
187
+ maxPriorityFeePerGas: '0x77359400',
188
+ authorizationList: [
189
+ {
190
+ chainId: 1,
191
+ address: '0x1234567890123456789012345678901234567890',
192
+ nonce: '0x0',
193
+ },
194
+ ],
195
+ };
196
+
197
+ const method = new EVMSignTransaction({
198
+ id: 1,
199
+ payload: {
200
+ method: 'evmSignTransaction',
201
+ path: "m/44'/60'/0'/0/0",
202
+ transaction,
203
+ },
204
+ });
205
+ method.device = mockDevice;
206
+ method.init();
207
+
208
+ const result = await method.run();
209
+
210
+ expect(result).toEqual({
211
+ v: '0x1c',
212
+ r: '0xdeadbeef1234567890abcdef1234567890abcdef1234567890abcdef123456',
213
+ s: '0xcafebabe567890abcdef1234567890abcdef1234567890abcdef1234567890',
214
+ });
215
+ });
216
+ });
217
+
218
+ describe('EIP-7702 Validation', () => {
219
+ it('should require authorization list for EIP-7702 transactions', () => {
220
+ const transaction = {
221
+ to: '0x1234567890123456789012345678901234567890',
222
+ value: '0x0',
223
+ gasLimit: '0x5208',
224
+ nonce: '0x0',
225
+ chainId: 1,
226
+ maxFeePerGas: '0x77359400',
227
+ maxPriorityFeePerGas: '0x77359400',
228
+ authorizationList: [], // Empty authorization list should trigger EIP1559 detection, not EIP7702
229
+ };
230
+
231
+ // This should not throw because empty authorizationList means it's EIP1559, not EIP7702
232
+ expect(() => {
233
+ const method = new EVMSignTransaction({
234
+ id: 1,
235
+ payload: {
236
+ method: 'evmSignTransaction',
237
+ path: "m/44'/60'/0'/0/0",
238
+ transaction,
239
+ },
240
+ });
241
+ method.device = mockDevice;
242
+ method.init();
243
+ }).not.toThrow();
244
+ });
245
+
246
+ it('should require maxFeePerGas and maxPriorityFeePerGas for EIP-7702', () => {
247
+ const transaction = {
248
+ to: '0x1234567890123456789012345678901234567890',
249
+ value: '0x0',
250
+ gasLimit: '0x5208',
251
+ nonce: '0x0',
252
+ chainId: 1,
253
+ authorizationList: [
254
+ {
255
+ chainId: 1,
256
+ address: '0x1234567890123456789012345678901234567890',
257
+ nonce: '0x0',
258
+ },
259
+ ],
260
+ // Missing maxFeePerGas and maxPriorityFeePerGas
261
+ };
262
+
263
+ expect(() => {
264
+ const method = new EVMSignTransaction({
265
+ id: 1,
266
+ payload: {
267
+ method: 'evmSignTransaction',
268
+ path: "m/44'/60'/0'/0/0",
269
+ transaction,
270
+ },
271
+ });
272
+ method.device = mockDevice;
273
+ method.init();
274
+ }).toThrow();
275
+ });
276
+ });
277
+
278
+ describe('Version Range', () => {
279
+ it('should return correct version range for EIP-7702', () => {
280
+ const transaction: EVMTransactionEIP7702 = {
281
+ to: '0x1234567890123456789012345678901234567890',
282
+ value: '0x0',
283
+ gasLimit: '0x5208',
284
+ nonce: '0x0',
285
+ chainId: 1,
286
+ maxFeePerGas: '0x77359400',
287
+ maxPriorityFeePerGas: '0x77359400',
288
+ authorizationList: [
289
+ {
290
+ chainId: 1,
291
+ address: '0x1234567890123456789012345678901234567890',
292
+ nonce: '0x0',
293
+ },
294
+ ],
295
+ };
296
+
297
+ const method = new EVMSignTransaction({
298
+ id: 1,
299
+ payload: {
300
+ method: 'evmSignTransaction',
301
+ path: "m/44'/60'/0'/0/0",
302
+ transaction,
303
+ },
304
+ });
305
+ method.device = mockDevice;
306
+ method.init();
307
+
308
+ const versionRange = method.getVersionRange();
309
+
310
+ expect(versionRange).toEqual({
311
+ model_classic1s: {
312
+ min: '3.13.0',
313
+ },
314
+ pro: {
315
+ min: '4.16.0',
316
+ },
317
+ });
318
+ });
319
+ });
320
+
321
+ describe('Edge Cases', () => {
322
+ it('should handle authorization with existing signature', async () => {
323
+ const mockAuthSignatures = [
324
+ {
325
+ y_parity: 1,
326
+ r: 'abcd1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd',
327
+ s: 'efab5678901234567890abcdef1234567890abcdef1234567890abcdef123456',
328
+ },
329
+ ];
330
+
331
+ mockTypedCall.mockResolvedValue({
332
+ message: {
333
+ signature_v: 27,
334
+ signature_r: 'deadbeef1234567890abcdef1234567890abcdef1234567890abcdef123456',
335
+ signature_s: 'cafebabe567890abcdef1234567890abcdef1234567890abcdef1234567890',
336
+ authorization_signatures: mockAuthSignatures,
337
+ },
338
+ });
339
+
340
+ const transaction: EVMTransactionEIP7702 = {
341
+ to: '0x1234567890123456789012345678901234567890',
342
+ value: '0x0',
343
+ gasLimit: '0x5208',
344
+ nonce: '0x0',
345
+ chainId: 1,
346
+ maxFeePerGas: '0x77359400',
347
+ maxPriorityFeePerGas: '0x77359400',
348
+ authorizationList: [
349
+ {
350
+ chainId: 1,
351
+ address: '0x1234567890123456789012345678901234567890',
352
+ nonce: '0x0',
353
+ yParity: 0,
354
+ r: 'existing_r_value_1234567890abcdef1234567890abcdef1234567890abcdef',
355
+ s: 'existing_s_value_567890abcdef1234567890abcdef1234567890abcdef1234',
356
+ },
357
+ ],
358
+ };
359
+
360
+ const method = new EVMSignTransaction({
361
+ id: 1,
362
+ payload: {
363
+ method: 'evmSignTransaction',
364
+ path: "m/44'/60'/0'/0/0",
365
+ transaction,
366
+ },
367
+ });
368
+ method.device = mockDevice;
369
+ method.init();
370
+
371
+ const result = await method.run();
372
+
373
+ expect(result.authorizationSignatures).toHaveLength(1);
374
+ expect(result.authorizationSignatures?.[0]).toEqual({
375
+ yParity: 1,
376
+ r: 'abcd1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd',
377
+ s: 'efab5678901234567890abcdef1234567890abcdef1234567890abcdef123456',
378
+ });
379
+ });
380
+
381
+ it('should throw error for non-self-sponsoring transactions', async () => {
382
+ const transaction: EVMTransactionEIP7702 = {
383
+ to: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
384
+ value: '0x0',
385
+ gasLimit: '0x5208',
386
+ nonce: '0x0',
387
+ chainId: 1,
388
+ maxFeePerGas: '0xbebc200',
389
+ maxPriorityFeePerGas: '0x9502f900',
390
+ authorizationList: [
391
+ {
392
+ chainId: 1,
393
+ address: '0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9',
394
+ nonce: '0x1',
395
+ addressN: [44, 60, 0, 0, 1], // Different from transaction signer
396
+ },
397
+ ],
398
+ };
399
+
400
+ const method = new EVMSignTransaction({
401
+ id: 1,
402
+ payload: {
403
+ method: 'evmSignTransaction',
404
+ path: "m/44'/60'/0'/0/0", // Different from authorization addressN
405
+ transaction,
406
+ },
407
+ });
408
+ method.device = mockDevice;
409
+ method.init();
410
+
411
+ await expect(method.run()).rejects.toMatchObject({
412
+ errorCode: 400,
413
+ message: expect.stringContaining(
414
+ 'Hardware currently only supports self-sponsoring EIP-7702 transactions'
415
+ ),
416
+ });
417
+ });
418
+ });
419
+ });
package/jest.config.js ADDED
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ preset: '../../jest.config.js',
3
+ testEnvironment: 'node',
4
+ modulePathIgnorePatterns: ['node_modules', '<rootDir>/lib', '<rootDir>/libDev'],
5
+ collectCoverage: true,
6
+ };
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@onetokenfe/hd-core",
3
+ "version": "1.1.23",
4
+ "description": "Core processes and APIs for communicating with OneToken hardware devices.",
5
+ "author": "OneToken",
6
+ "homepage": "https://github.com/OneTokenHQ/hardware-js-sdk#readme",
7
+ "license": "ISC",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/OneTokenHQ/hardware-js-sdk.git"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "scripts": {
18
+ "dev": "rimraf dist && rollup -c ../../build/rollup.config.js -w",
19
+ "build": "rimraf dist && rollup -c ../../build/rollup.config.js",
20
+ "lint": "eslint .",
21
+ "lint:fix": "eslint . --fix",
22
+ "test": "jest"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/OneTokenHQ/hardware-js-sdk/issues"
26
+ },
27
+ "dependencies": {
28
+ "@onetokenfe/hd-shared": "1.1.23",
29
+ "@onetokenfe/hd-transport": "1.1.23",
30
+ "axios": "1.12.2",
31
+ "bignumber.js": "^9.0.2",
32
+ "bytebuffer": "^5.0.1",
33
+ "jszip": "^3.10.1",
34
+ "parse-uri": "^1.0.7",
35
+ "semver": "^7.3.7"
36
+ },
37
+ "peerDependencies": {
38
+ "@noble/hashes": "^1.1.3"
39
+ },
40
+ "devDependencies": {
41
+ "@noble/hashes": "^1.1.3",
42
+ "@types/parse-uri": "^1.0.0",
43
+ "@types/semver": "^7.3.9",
44
+ "@types/w3c-web-usb": "^1.0.10",
45
+ "@types/web-bluetooth": "^0.0.21"
46
+ },
47
+ "gitHead": "e66a905d4b3fbb8128f0204d94b8510f4246b7d0"
48
+ }