@nktkas/hyperliquid 0.25.7 → 0.25.8

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 (516) hide show
  1. package/CONTRIBUTING.md +26 -19
  2. package/README.md +57 -5
  3. package/esm/bin/cli.js +1 -0
  4. package/esm/bin/cli.js.map +1 -1
  5. package/esm/src/api/_common_schemas.d.ts +19 -0
  6. package/esm/src/api/_common_schemas.d.ts.map +1 -1
  7. package/esm/src/api/_common_schemas.js +15 -0
  8. package/esm/src/api/_common_schemas.js.map +1 -1
  9. package/esm/src/api/exchange/_base/_execute.d.ts +6 -7
  10. package/esm/src/api/exchange/_base/_execute.d.ts.map +1 -1
  11. package/esm/src/api/exchange/_base/_execute.js +67 -43
  12. package/esm/src/api/exchange/_base/_execute.js.map +1 -1
  13. package/esm/src/api/exchange/_base/_types.d.ts +0 -7
  14. package/esm/src/api/exchange/_base/_types.d.ts.map +1 -1
  15. package/esm/src/api/exchange/_base/mod.d.ts +0 -2
  16. package/esm/src/api/exchange/_base/mod.d.ts.map +1 -1
  17. package/esm/src/api/exchange/_base/mod.js +0 -2
  18. package/esm/src/api/exchange/_base/mod.js.map +1 -1
  19. package/esm/src/api/exchange/agentEnableDexAbstraction.d.ts.map +1 -1
  20. package/esm/src/api/exchange/agentEnableDexAbstraction.js +14 -7
  21. package/esm/src/api/exchange/agentEnableDexAbstraction.js.map +1 -1
  22. package/esm/src/api/exchange/approveAgent.d.ts.map +1 -1
  23. package/esm/src/api/exchange/approveAgent.js +16 -8
  24. package/esm/src/api/exchange/approveAgent.js.map +1 -1
  25. package/esm/src/api/exchange/approveBuilderFee.d.ts.map +1 -1
  26. package/esm/src/api/exchange/approveBuilderFee.js +16 -8
  27. package/esm/src/api/exchange/approveBuilderFee.js.map +1 -1
  28. package/esm/src/api/exchange/batchModify.d.ts.map +1 -1
  29. package/esm/src/api/exchange/batchModify.js +16 -10
  30. package/esm/src/api/exchange/batchModify.js.map +1 -1
  31. package/esm/src/api/exchange/cDeposit.d.ts.map +1 -1
  32. package/esm/src/api/exchange/cDeposit.js +16 -8
  33. package/esm/src/api/exchange/cDeposit.js.map +1 -1
  34. package/esm/src/api/exchange/cSignerAction.d.ts.map +1 -1
  35. package/esm/src/api/exchange/cSignerAction.js +15 -8
  36. package/esm/src/api/exchange/cSignerAction.js.map +1 -1
  37. package/esm/src/api/exchange/cValidatorAction.d.ts.map +1 -1
  38. package/esm/src/api/exchange/cValidatorAction.js +15 -8
  39. package/esm/src/api/exchange/cValidatorAction.js.map +1 -1
  40. package/esm/src/api/exchange/cWithdraw.d.ts.map +1 -1
  41. package/esm/src/api/exchange/cWithdraw.js +16 -8
  42. package/esm/src/api/exchange/cWithdraw.js.map +1 -1
  43. package/esm/src/api/exchange/cancel.d.ts.map +1 -1
  44. package/esm/src/api/exchange/cancel.js +16 -10
  45. package/esm/src/api/exchange/cancel.js.map +1 -1
  46. package/esm/src/api/exchange/cancelByCloid.d.ts.map +1 -1
  47. package/esm/src/api/exchange/cancelByCloid.js +16 -10
  48. package/esm/src/api/exchange/cancelByCloid.js.map +1 -1
  49. package/esm/src/api/exchange/claimRewards.d.ts.map +1 -1
  50. package/esm/src/api/exchange/claimRewards.js +14 -7
  51. package/esm/src/api/exchange/claimRewards.js.map +1 -1
  52. package/esm/src/api/exchange/convertToMultiSigUser.d.ts.map +1 -1
  53. package/esm/src/api/exchange/convertToMultiSigUser.js +16 -8
  54. package/esm/src/api/exchange/convertToMultiSigUser.js.map +1 -1
  55. package/esm/src/api/exchange/createSubAccount.d.ts.map +1 -1
  56. package/esm/src/api/exchange/createSubAccount.js +15 -8
  57. package/esm/src/api/exchange/createSubAccount.js.map +1 -1
  58. package/esm/src/api/exchange/createVault.d.ts.map +1 -1
  59. package/esm/src/api/exchange/createVault.js +15 -8
  60. package/esm/src/api/exchange/createVault.js.map +1 -1
  61. package/esm/src/api/exchange/evmUserModify.d.ts +1 -1
  62. package/esm/src/api/exchange/evmUserModify.d.ts.map +1 -1
  63. package/esm/src/api/exchange/evmUserModify.js +16 -9
  64. package/esm/src/api/exchange/evmUserModify.js.map +1 -1
  65. package/esm/src/api/exchange/linkStakingUser.d.ts +112 -0
  66. package/esm/src/api/exchange/linkStakingUser.d.ts.map +1 -0
  67. package/esm/src/api/exchange/linkStakingUser.js +99 -0
  68. package/esm/src/api/exchange/linkStakingUser.js.map +1 -0
  69. package/esm/src/api/exchange/modify.d.ts.map +1 -1
  70. package/esm/src/api/exchange/modify.js +16 -10
  71. package/esm/src/api/exchange/modify.js.map +1 -1
  72. package/esm/src/api/exchange/multiSig.d.ts.map +1 -1
  73. package/esm/src/api/exchange/multiSig.js +17 -16
  74. package/esm/src/api/exchange/multiSig.js.map +1 -1
  75. package/esm/src/api/exchange/noop.d.ts.map +1 -1
  76. package/esm/src/api/exchange/noop.js +14 -7
  77. package/esm/src/api/exchange/noop.js.map +1 -1
  78. package/esm/src/api/exchange/order.d.ts.map +1 -1
  79. package/esm/src/api/exchange/order.js +16 -10
  80. package/esm/src/api/exchange/order.js.map +1 -1
  81. package/esm/src/api/exchange/perpDeploy.d.ts.map +1 -1
  82. package/esm/src/api/exchange/perpDeploy.js +15 -8
  83. package/esm/src/api/exchange/perpDeploy.js.map +1 -1
  84. package/esm/src/api/exchange/registerReferrer.d.ts.map +1 -1
  85. package/esm/src/api/exchange/registerReferrer.js +15 -8
  86. package/esm/src/api/exchange/registerReferrer.js.map +1 -1
  87. package/esm/src/api/exchange/reserveRequestWeight.d.ts.map +1 -1
  88. package/esm/src/api/exchange/reserveRequestWeight.js +15 -8
  89. package/esm/src/api/exchange/reserveRequestWeight.js.map +1 -1
  90. package/esm/src/api/exchange/scheduleCancel.js +16 -10
  91. package/esm/src/api/exchange/scheduleCancel.js.map +1 -1
  92. package/esm/src/api/exchange/sendAsset.d.ts.map +1 -1
  93. package/esm/src/api/exchange/sendAsset.js +16 -8
  94. package/esm/src/api/exchange/sendAsset.js.map +1 -1
  95. package/esm/src/api/exchange/setDisplayName.d.ts.map +1 -1
  96. package/esm/src/api/exchange/setDisplayName.js +15 -8
  97. package/esm/src/api/exchange/setDisplayName.js.map +1 -1
  98. package/esm/src/api/exchange/setReferrer.d.ts.map +1 -1
  99. package/esm/src/api/exchange/setReferrer.js +15 -8
  100. package/esm/src/api/exchange/setReferrer.js.map +1 -1
  101. package/esm/src/api/exchange/spotDeploy.d.ts.map +1 -1
  102. package/esm/src/api/exchange/spotDeploy.js +15 -8
  103. package/esm/src/api/exchange/spotDeploy.js.map +1 -1
  104. package/esm/src/api/exchange/spotSend.d.ts.map +1 -1
  105. package/esm/src/api/exchange/spotSend.js +16 -8
  106. package/esm/src/api/exchange/spotSend.js.map +1 -1
  107. package/esm/src/api/exchange/spotUser.d.ts.map +1 -1
  108. package/esm/src/api/exchange/spotUser.js +15 -8
  109. package/esm/src/api/exchange/spotUser.js.map +1 -1
  110. package/esm/src/api/exchange/subAccountModify.d.ts.map +1 -1
  111. package/esm/src/api/exchange/subAccountModify.js +15 -8
  112. package/esm/src/api/exchange/subAccountModify.js.map +1 -1
  113. package/esm/src/api/exchange/subAccountSpotTransfer.d.ts.map +1 -1
  114. package/esm/src/api/exchange/subAccountSpotTransfer.js +15 -8
  115. package/esm/src/api/exchange/subAccountSpotTransfer.js.map +1 -1
  116. package/esm/src/api/exchange/subAccountTransfer.d.ts.map +1 -1
  117. package/esm/src/api/exchange/subAccountTransfer.js +15 -8
  118. package/esm/src/api/exchange/subAccountTransfer.js.map +1 -1
  119. package/esm/src/api/exchange/tokenDelegate.d.ts.map +1 -1
  120. package/esm/src/api/exchange/tokenDelegate.js +16 -8
  121. package/esm/src/api/exchange/tokenDelegate.js.map +1 -1
  122. package/esm/src/api/exchange/twapCancel.d.ts.map +1 -1
  123. package/esm/src/api/exchange/twapCancel.js +16 -10
  124. package/esm/src/api/exchange/twapCancel.js.map +1 -1
  125. package/esm/src/api/exchange/twapOrder.d.ts.map +1 -1
  126. package/esm/src/api/exchange/twapOrder.js +16 -10
  127. package/esm/src/api/exchange/twapOrder.js.map +1 -1
  128. package/esm/src/api/exchange/updateIsolatedMargin.d.ts.map +1 -1
  129. package/esm/src/api/exchange/updateIsolatedMargin.js +16 -10
  130. package/esm/src/api/exchange/updateIsolatedMargin.js.map +1 -1
  131. package/esm/src/api/exchange/updateLeverage.d.ts.map +1 -1
  132. package/esm/src/api/exchange/updateLeverage.js +16 -10
  133. package/esm/src/api/exchange/updateLeverage.js.map +1 -1
  134. package/esm/src/api/exchange/usdClassTransfer.d.ts.map +1 -1
  135. package/esm/src/api/exchange/usdClassTransfer.js +16 -8
  136. package/esm/src/api/exchange/usdClassTransfer.js.map +1 -1
  137. package/esm/src/api/exchange/usdSend.d.ts.map +1 -1
  138. package/esm/src/api/exchange/usdSend.js +16 -8
  139. package/esm/src/api/exchange/usdSend.js.map +1 -1
  140. package/esm/src/api/exchange/userDexAbstraction.d.ts.map +1 -1
  141. package/esm/src/api/exchange/userDexAbstraction.js +16 -8
  142. package/esm/src/api/exchange/userDexAbstraction.js.map +1 -1
  143. package/esm/src/api/exchange/vaultDistribute.d.ts.map +1 -1
  144. package/esm/src/api/exchange/vaultDistribute.js +15 -8
  145. package/esm/src/api/exchange/vaultDistribute.js.map +1 -1
  146. package/esm/src/api/exchange/vaultModify.d.ts.map +1 -1
  147. package/esm/src/api/exchange/vaultModify.js +15 -8
  148. package/esm/src/api/exchange/vaultModify.js.map +1 -1
  149. package/esm/src/api/exchange/vaultTransfer.d.ts.map +1 -1
  150. package/esm/src/api/exchange/vaultTransfer.js +15 -8
  151. package/esm/src/api/exchange/vaultTransfer.js.map +1 -1
  152. package/esm/src/api/exchange/withdraw3.d.ts.map +1 -1
  153. package/esm/src/api/exchange/withdraw3.js +16 -8
  154. package/esm/src/api/exchange/withdraw3.js.map +1 -1
  155. package/esm/src/api/exchange/~client.d.ts +31 -3
  156. package/esm/src/api/exchange/~client.d.ts.map +1 -1
  157. package/esm/src/api/exchange/~client.js +27 -4
  158. package/esm/src/api/exchange/~client.js.map +1 -1
  159. package/esm/src/api/exchange/~mod.d.ts +1 -0
  160. package/esm/src/api/exchange/~mod.d.ts.map +1 -1
  161. package/esm/src/api/exchange/~mod.js +1 -0
  162. package/esm/src/api/exchange/~mod.js.map +1 -1
  163. package/esm/src/api/info/allPerpMetas.d.ts +5 -0
  164. package/esm/src/api/info/allPerpMetas.d.ts.map +1 -1
  165. package/esm/src/api/info/meta.d.ts +5 -0
  166. package/esm/src/api/info/meta.d.ts.map +1 -1
  167. package/esm/src/api/info/meta.js +2 -0
  168. package/esm/src/api/info/meta.js.map +1 -1
  169. package/esm/src/api/info/metaAndAssetCtxs.d.ts +5 -0
  170. package/esm/src/api/info/metaAndAssetCtxs.d.ts.map +1 -1
  171. package/esm/src/api/info/perpDexs.d.ts +4 -0
  172. package/esm/src/api/info/perpDexs.d.ts.map +1 -1
  173. package/esm/src/api/info/perpDexs.js +5 -0
  174. package/esm/src/api/info/perpDexs.js.map +1 -1
  175. package/esm/src/api/info/spotClearinghouseState.d.ts +0 -5
  176. package/esm/src/api/info/spotClearinghouseState.d.ts.map +1 -1
  177. package/esm/src/api/info/spotClearinghouseState.js +2 -14
  178. package/esm/src/api/info/spotClearinghouseState.js.map +1 -1
  179. package/esm/src/api/info/userFees.d.ts +27 -2
  180. package/esm/src/api/info/userFees.d.ts.map +1 -1
  181. package/esm/src/api/info/userFees.js +29 -1
  182. package/esm/src/api/info/userFees.js.map +1 -1
  183. package/esm/src/api/info/webData2.d.ts +6 -0
  184. package/esm/src/api/info/webData2.d.ts.map +1 -1
  185. package/esm/src/api/info/~client.d.ts +9 -1
  186. package/esm/src/api/info/~client.d.ts.map +1 -1
  187. package/esm/src/api/subscription/spotState.d.ts +91 -0
  188. package/esm/src/api/subscription/spotState.d.ts.map +1 -0
  189. package/esm/src/api/subscription/spotState.js +58 -0
  190. package/esm/src/api/subscription/spotState.js.map +1 -0
  191. package/esm/src/api/subscription/webData2.d.ts +5 -0
  192. package/esm/src/api/subscription/webData2.d.ts.map +1 -1
  193. package/esm/src/api/subscription/~client.d.ts +22 -0
  194. package/esm/src/api/subscription/~client.d.ts.map +1 -1
  195. package/esm/src/api/subscription/~client.js +23 -0
  196. package/esm/src/api/subscription/~client.js.map +1 -1
  197. package/esm/src/api/subscription/~mod.d.ts +1 -0
  198. package/esm/src/api/subscription/~mod.d.ts.map +1 -1
  199. package/esm/src/api/subscription/~mod.js +1 -0
  200. package/esm/src/api/subscription/~mod.js.map +1 -1
  201. package/esm/src/signing/_signTypedData.d.ts +1 -1
  202. package/esm/src/signing/_signTypedData.d.ts.map +1 -1
  203. package/esm/src/signing/_signTypedData.js +1 -1
  204. package/esm/src/signing/_signTypedData.js.map +1 -1
  205. package/esm/src/utils/{_minimalEIP712Signer.d.ts → _eip712.d.ts} +16 -1
  206. package/esm/src/utils/_eip712.d.ts.map +1 -0
  207. package/esm/src/utils/{_minimalEIP712Signer.js → _eip712.js} +14 -11
  208. package/esm/src/utils/_eip712.js.map +1 -0
  209. package/esm/src/utils/_format.d.ts +3 -4
  210. package/esm/src/utils/_format.d.ts.map +1 -1
  211. package/esm/src/utils/_format.js +98 -88
  212. package/esm/src/utils/_format.js.map +1 -1
  213. package/esm/src/utils/_recover.d.ts +89 -0
  214. package/esm/src/utils/_recover.d.ts.map +1 -0
  215. package/esm/src/utils/_recover.js +119 -0
  216. package/esm/src/utils/_recover.js.map +1 -0
  217. package/esm/src/utils/mod.d.ts +1 -0
  218. package/esm/src/utils/mod.d.ts.map +1 -1
  219. package/esm/src/utils/mod.js +1 -0
  220. package/esm/src/utils/mod.js.map +1 -1
  221. package/package.json +3 -2
  222. package/script/bin/cli.js +1 -0
  223. package/script/bin/cli.js.map +1 -1
  224. package/script/src/api/_common_schemas.d.ts +19 -0
  225. package/script/src/api/_common_schemas.d.ts.map +1 -1
  226. package/script/src/api/_common_schemas.js +16 -1
  227. package/script/src/api/_common_schemas.js.map +1 -1
  228. package/script/src/api/exchange/_base/_execute.d.ts +6 -7
  229. package/script/src/api/exchange/_base/_execute.d.ts.map +1 -1
  230. package/script/src/api/exchange/_base/_execute.js +67 -43
  231. package/script/src/api/exchange/_base/_execute.js.map +1 -1
  232. package/script/src/api/exchange/_base/_types.d.ts +0 -7
  233. package/script/src/api/exchange/_base/_types.d.ts.map +1 -1
  234. package/script/src/api/exchange/_base/mod.d.ts +0 -2
  235. package/script/src/api/exchange/_base/mod.d.ts.map +1 -1
  236. package/script/src/api/exchange/_base/mod.js +0 -2
  237. package/script/src/api/exchange/_base/mod.js.map +1 -1
  238. package/script/src/api/exchange/agentEnableDexAbstraction.d.ts.map +1 -1
  239. package/script/src/api/exchange/agentEnableDexAbstraction.js +14 -7
  240. package/script/src/api/exchange/agentEnableDexAbstraction.js.map +1 -1
  241. package/script/src/api/exchange/approveAgent.d.ts.map +1 -1
  242. package/script/src/api/exchange/approveAgent.js +15 -7
  243. package/script/src/api/exchange/approveAgent.js.map +1 -1
  244. package/script/src/api/exchange/approveBuilderFee.d.ts.map +1 -1
  245. package/script/src/api/exchange/approveBuilderFee.js +15 -7
  246. package/script/src/api/exchange/approveBuilderFee.js.map +1 -1
  247. package/script/src/api/exchange/batchModify.d.ts.map +1 -1
  248. package/script/src/api/exchange/batchModify.js +16 -10
  249. package/script/src/api/exchange/batchModify.js.map +1 -1
  250. package/script/src/api/exchange/cDeposit.d.ts.map +1 -1
  251. package/script/src/api/exchange/cDeposit.js +15 -7
  252. package/script/src/api/exchange/cDeposit.js.map +1 -1
  253. package/script/src/api/exchange/cSignerAction.d.ts.map +1 -1
  254. package/script/src/api/exchange/cSignerAction.js +15 -8
  255. package/script/src/api/exchange/cSignerAction.js.map +1 -1
  256. package/script/src/api/exchange/cValidatorAction.d.ts.map +1 -1
  257. package/script/src/api/exchange/cValidatorAction.js +15 -8
  258. package/script/src/api/exchange/cValidatorAction.js.map +1 -1
  259. package/script/src/api/exchange/cWithdraw.d.ts.map +1 -1
  260. package/script/src/api/exchange/cWithdraw.js +15 -7
  261. package/script/src/api/exchange/cWithdraw.js.map +1 -1
  262. package/script/src/api/exchange/cancel.d.ts.map +1 -1
  263. package/script/src/api/exchange/cancel.js +16 -10
  264. package/script/src/api/exchange/cancel.js.map +1 -1
  265. package/script/src/api/exchange/cancelByCloid.d.ts.map +1 -1
  266. package/script/src/api/exchange/cancelByCloid.js +16 -10
  267. package/script/src/api/exchange/cancelByCloid.js.map +1 -1
  268. package/script/src/api/exchange/claimRewards.d.ts.map +1 -1
  269. package/script/src/api/exchange/claimRewards.js +14 -7
  270. package/script/src/api/exchange/claimRewards.js.map +1 -1
  271. package/script/src/api/exchange/convertToMultiSigUser.d.ts.map +1 -1
  272. package/script/src/api/exchange/convertToMultiSigUser.js +15 -7
  273. package/script/src/api/exchange/convertToMultiSigUser.js.map +1 -1
  274. package/script/src/api/exchange/createSubAccount.d.ts.map +1 -1
  275. package/script/src/api/exchange/createSubAccount.js +15 -8
  276. package/script/src/api/exchange/createSubAccount.js.map +1 -1
  277. package/script/src/api/exchange/createVault.d.ts.map +1 -1
  278. package/script/src/api/exchange/createVault.js +15 -8
  279. package/script/src/api/exchange/createVault.js.map +1 -1
  280. package/script/src/api/exchange/evmUserModify.d.ts +1 -1
  281. package/script/src/api/exchange/evmUserModify.d.ts.map +1 -1
  282. package/script/src/api/exchange/evmUserModify.js +16 -9
  283. package/script/src/api/exchange/evmUserModify.js.map +1 -1
  284. package/script/src/api/exchange/linkStakingUser.d.ts +112 -0
  285. package/script/src/api/exchange/linkStakingUser.d.ts.map +1 -0
  286. package/script/src/api/exchange/linkStakingUser.js +136 -0
  287. package/script/src/api/exchange/linkStakingUser.js.map +1 -0
  288. package/script/src/api/exchange/modify.d.ts.map +1 -1
  289. package/script/src/api/exchange/modify.js +16 -10
  290. package/script/src/api/exchange/modify.js.map +1 -1
  291. package/script/src/api/exchange/multiSig.d.ts.map +1 -1
  292. package/script/src/api/exchange/multiSig.js +17 -16
  293. package/script/src/api/exchange/multiSig.js.map +1 -1
  294. package/script/src/api/exchange/noop.d.ts.map +1 -1
  295. package/script/src/api/exchange/noop.js +14 -7
  296. package/script/src/api/exchange/noop.js.map +1 -1
  297. package/script/src/api/exchange/order.d.ts.map +1 -1
  298. package/script/src/api/exchange/order.js +16 -10
  299. package/script/src/api/exchange/order.js.map +1 -1
  300. package/script/src/api/exchange/perpDeploy.d.ts.map +1 -1
  301. package/script/src/api/exchange/perpDeploy.js +15 -8
  302. package/script/src/api/exchange/perpDeploy.js.map +1 -1
  303. package/script/src/api/exchange/registerReferrer.d.ts.map +1 -1
  304. package/script/src/api/exchange/registerReferrer.js +15 -8
  305. package/script/src/api/exchange/registerReferrer.js.map +1 -1
  306. package/script/src/api/exchange/reserveRequestWeight.d.ts.map +1 -1
  307. package/script/src/api/exchange/reserveRequestWeight.js +15 -8
  308. package/script/src/api/exchange/reserveRequestWeight.js.map +1 -1
  309. package/script/src/api/exchange/scheduleCancel.js +16 -10
  310. package/script/src/api/exchange/scheduleCancel.js.map +1 -1
  311. package/script/src/api/exchange/sendAsset.d.ts.map +1 -1
  312. package/script/src/api/exchange/sendAsset.js +15 -7
  313. package/script/src/api/exchange/sendAsset.js.map +1 -1
  314. package/script/src/api/exchange/setDisplayName.d.ts.map +1 -1
  315. package/script/src/api/exchange/setDisplayName.js +15 -8
  316. package/script/src/api/exchange/setDisplayName.js.map +1 -1
  317. package/script/src/api/exchange/setReferrer.d.ts.map +1 -1
  318. package/script/src/api/exchange/setReferrer.js +15 -8
  319. package/script/src/api/exchange/setReferrer.js.map +1 -1
  320. package/script/src/api/exchange/spotDeploy.d.ts.map +1 -1
  321. package/script/src/api/exchange/spotDeploy.js +15 -8
  322. package/script/src/api/exchange/spotDeploy.js.map +1 -1
  323. package/script/src/api/exchange/spotSend.d.ts.map +1 -1
  324. package/script/src/api/exchange/spotSend.js +15 -7
  325. package/script/src/api/exchange/spotSend.js.map +1 -1
  326. package/script/src/api/exchange/spotUser.d.ts.map +1 -1
  327. package/script/src/api/exchange/spotUser.js +15 -8
  328. package/script/src/api/exchange/spotUser.js.map +1 -1
  329. package/script/src/api/exchange/subAccountModify.d.ts.map +1 -1
  330. package/script/src/api/exchange/subAccountModify.js +15 -8
  331. package/script/src/api/exchange/subAccountModify.js.map +1 -1
  332. package/script/src/api/exchange/subAccountSpotTransfer.d.ts.map +1 -1
  333. package/script/src/api/exchange/subAccountSpotTransfer.js +15 -8
  334. package/script/src/api/exchange/subAccountSpotTransfer.js.map +1 -1
  335. package/script/src/api/exchange/subAccountTransfer.d.ts.map +1 -1
  336. package/script/src/api/exchange/subAccountTransfer.js +15 -8
  337. package/script/src/api/exchange/subAccountTransfer.js.map +1 -1
  338. package/script/src/api/exchange/tokenDelegate.d.ts.map +1 -1
  339. package/script/src/api/exchange/tokenDelegate.js +15 -7
  340. package/script/src/api/exchange/tokenDelegate.js.map +1 -1
  341. package/script/src/api/exchange/twapCancel.d.ts.map +1 -1
  342. package/script/src/api/exchange/twapCancel.js +16 -10
  343. package/script/src/api/exchange/twapCancel.js.map +1 -1
  344. package/script/src/api/exchange/twapOrder.d.ts.map +1 -1
  345. package/script/src/api/exchange/twapOrder.js +16 -10
  346. package/script/src/api/exchange/twapOrder.js.map +1 -1
  347. package/script/src/api/exchange/updateIsolatedMargin.d.ts.map +1 -1
  348. package/script/src/api/exchange/updateIsolatedMargin.js +16 -10
  349. package/script/src/api/exchange/updateIsolatedMargin.js.map +1 -1
  350. package/script/src/api/exchange/updateLeverage.d.ts.map +1 -1
  351. package/script/src/api/exchange/updateLeverage.js +16 -10
  352. package/script/src/api/exchange/updateLeverage.js.map +1 -1
  353. package/script/src/api/exchange/usdClassTransfer.d.ts.map +1 -1
  354. package/script/src/api/exchange/usdClassTransfer.js +15 -7
  355. package/script/src/api/exchange/usdClassTransfer.js.map +1 -1
  356. package/script/src/api/exchange/usdSend.d.ts.map +1 -1
  357. package/script/src/api/exchange/usdSend.js +15 -7
  358. package/script/src/api/exchange/usdSend.js.map +1 -1
  359. package/script/src/api/exchange/userDexAbstraction.d.ts.map +1 -1
  360. package/script/src/api/exchange/userDexAbstraction.js +15 -7
  361. package/script/src/api/exchange/userDexAbstraction.js.map +1 -1
  362. package/script/src/api/exchange/vaultDistribute.d.ts.map +1 -1
  363. package/script/src/api/exchange/vaultDistribute.js +15 -8
  364. package/script/src/api/exchange/vaultDistribute.js.map +1 -1
  365. package/script/src/api/exchange/vaultModify.d.ts.map +1 -1
  366. package/script/src/api/exchange/vaultModify.js +15 -8
  367. package/script/src/api/exchange/vaultModify.js.map +1 -1
  368. package/script/src/api/exchange/vaultTransfer.d.ts.map +1 -1
  369. package/script/src/api/exchange/vaultTransfer.js +15 -8
  370. package/script/src/api/exchange/vaultTransfer.js.map +1 -1
  371. package/script/src/api/exchange/withdraw3.d.ts.map +1 -1
  372. package/script/src/api/exchange/withdraw3.js +15 -7
  373. package/script/src/api/exchange/withdraw3.js.map +1 -1
  374. package/script/src/api/exchange/~client.d.ts +31 -3
  375. package/script/src/api/exchange/~client.d.ts.map +1 -1
  376. package/script/src/api/exchange/~client.js +29 -6
  377. package/script/src/api/exchange/~client.js.map +1 -1
  378. package/script/src/api/exchange/~mod.d.ts +1 -0
  379. package/script/src/api/exchange/~mod.d.ts.map +1 -1
  380. package/script/src/api/exchange/~mod.js +1 -0
  381. package/script/src/api/exchange/~mod.js.map +1 -1
  382. package/script/src/api/info/allPerpMetas.d.ts +5 -0
  383. package/script/src/api/info/allPerpMetas.d.ts.map +1 -1
  384. package/script/src/api/info/meta.d.ts +5 -0
  385. package/script/src/api/info/meta.d.ts.map +1 -1
  386. package/script/src/api/info/meta.js +2 -0
  387. package/script/src/api/info/meta.js.map +1 -1
  388. package/script/src/api/info/metaAndAssetCtxs.d.ts +5 -0
  389. package/script/src/api/info/metaAndAssetCtxs.d.ts.map +1 -1
  390. package/script/src/api/info/perpDexs.d.ts +4 -0
  391. package/script/src/api/info/perpDexs.d.ts.map +1 -1
  392. package/script/src/api/info/perpDexs.js +5 -0
  393. package/script/src/api/info/perpDexs.js.map +1 -1
  394. package/script/src/api/info/spotClearinghouseState.d.ts +0 -5
  395. package/script/src/api/info/spotClearinghouseState.d.ts.map +1 -1
  396. package/script/src/api/info/spotClearinghouseState.js +2 -14
  397. package/script/src/api/info/spotClearinghouseState.js.map +1 -1
  398. package/script/src/api/info/userFees.d.ts +27 -2
  399. package/script/src/api/info/userFees.d.ts.map +1 -1
  400. package/script/src/api/info/userFees.js +29 -1
  401. package/script/src/api/info/userFees.js.map +1 -1
  402. package/script/src/api/info/webData2.d.ts +6 -0
  403. package/script/src/api/info/webData2.d.ts.map +1 -1
  404. package/script/src/api/info/~client.d.ts +9 -1
  405. package/script/src/api/info/~client.d.ts.map +1 -1
  406. package/script/src/api/subscription/spotState.d.ts +91 -0
  407. package/script/src/api/subscription/spotState.d.ts.map +1 -0
  408. package/script/src/api/subscription/spotState.js +95 -0
  409. package/script/src/api/subscription/spotState.js.map +1 -0
  410. package/script/src/api/subscription/webData2.d.ts +5 -0
  411. package/script/src/api/subscription/webData2.d.ts.map +1 -1
  412. package/script/src/api/subscription/~client.d.ts +22 -0
  413. package/script/src/api/subscription/~client.d.ts.map +1 -1
  414. package/script/src/api/subscription/~client.js +23 -0
  415. package/script/src/api/subscription/~client.js.map +1 -1
  416. package/script/src/api/subscription/~mod.d.ts +1 -0
  417. package/script/src/api/subscription/~mod.d.ts.map +1 -1
  418. package/script/src/api/subscription/~mod.js +1 -0
  419. package/script/src/api/subscription/~mod.js.map +1 -1
  420. package/script/src/signing/_signTypedData.d.ts +1 -1
  421. package/script/src/signing/_signTypedData.d.ts.map +1 -1
  422. package/script/src/signing/_signTypedData.js +1 -1
  423. package/script/src/signing/_signTypedData.js.map +1 -1
  424. package/script/src/utils/{_minimalEIP712Signer.d.ts → _eip712.d.ts} +16 -1
  425. package/script/src/utils/_eip712.d.ts.map +1 -0
  426. package/script/src/utils/{_minimalEIP712Signer.js → _eip712.js} +14 -9
  427. package/script/src/utils/_eip712.js.map +1 -0
  428. package/script/src/utils/_format.d.ts +3 -4
  429. package/script/src/utils/_format.d.ts.map +1 -1
  430. package/script/src/utils/_format.js +98 -88
  431. package/script/src/utils/_format.js.map +1 -1
  432. package/script/src/utils/_recover.d.ts +89 -0
  433. package/script/src/utils/_recover.d.ts.map +1 -0
  434. package/script/src/utils/_recover.js +156 -0
  435. package/script/src/utils/_recover.js.map +1 -0
  436. package/script/src/utils/mod.d.ts +1 -0
  437. package/script/src/utils/mod.d.ts.map +1 -1
  438. package/script/src/utils/mod.js +1 -0
  439. package/script/src/utils/mod.js.map +1 -1
  440. package/src/bin/cli.ts +1 -0
  441. package/src/src/api/_common_schemas.ts +34 -0
  442. package/src/src/api/exchange/_base/_execute.ts +73 -49
  443. package/src/src/api/exchange/_base/_types.ts +0 -7
  444. package/src/src/api/exchange/_base/mod.ts +0 -2
  445. package/src/src/api/exchange/agentEnableDexAbstraction.ts +14 -9
  446. package/src/src/api/exchange/approveAgent.ts +15 -12
  447. package/src/src/api/exchange/approveBuilderFee.ts +15 -12
  448. package/src/src/api/exchange/batchModify.ts +16 -13
  449. package/src/src/api/exchange/cDeposit.ts +15 -12
  450. package/src/src/api/exchange/cSignerAction.ts +15 -10
  451. package/src/src/api/exchange/cValidatorAction.ts +15 -10
  452. package/src/src/api/exchange/cWithdraw.ts +15 -12
  453. package/src/src/api/exchange/cancel.ts +16 -13
  454. package/src/src/api/exchange/cancelByCloid.ts +16 -13
  455. package/src/src/api/exchange/claimRewards.ts +14 -9
  456. package/src/src/api/exchange/convertToMultiSigUser.ts +15 -12
  457. package/src/src/api/exchange/createSubAccount.ts +15 -10
  458. package/src/src/api/exchange/createVault.ts +15 -10
  459. package/src/src/api/exchange/evmUserModify.ts +16 -11
  460. package/src/src/api/exchange/linkStakingUser.ts +157 -0
  461. package/src/src/api/exchange/modify.ts +16 -13
  462. package/src/src/api/exchange/multiSig.ts +17 -23
  463. package/src/src/api/exchange/noop.ts +14 -9
  464. package/src/src/api/exchange/order.ts +16 -13
  465. package/src/src/api/exchange/perpDeploy.ts +15 -10
  466. package/src/src/api/exchange/registerReferrer.ts +15 -10
  467. package/src/src/api/exchange/reserveRequestWeight.ts +15 -10
  468. package/src/src/api/exchange/scheduleCancel.ts +16 -13
  469. package/src/src/api/exchange/sendAsset.ts +15 -12
  470. package/src/src/api/exchange/setDisplayName.ts +15 -10
  471. package/src/src/api/exchange/setReferrer.ts +15 -10
  472. package/src/src/api/exchange/spotDeploy.ts +15 -10
  473. package/src/src/api/exchange/spotSend.ts +15 -12
  474. package/src/src/api/exchange/spotUser.ts +15 -10
  475. package/src/src/api/exchange/subAccountModify.ts +15 -10
  476. package/src/src/api/exchange/subAccountSpotTransfer.ts +15 -10
  477. package/src/src/api/exchange/subAccountTransfer.ts +15 -10
  478. package/src/src/api/exchange/tokenDelegate.ts +15 -12
  479. package/src/src/api/exchange/twapCancel.ts +16 -13
  480. package/src/src/api/exchange/twapOrder.ts +16 -13
  481. package/src/src/api/exchange/updateIsolatedMargin.ts +16 -13
  482. package/src/src/api/exchange/updateLeverage.ts +16 -13
  483. package/src/src/api/exchange/usdClassTransfer.ts +15 -12
  484. package/src/src/api/exchange/usdSend.ts +15 -12
  485. package/src/src/api/exchange/userDexAbstraction.ts +15 -12
  486. package/src/src/api/exchange/vaultDistribute.ts +15 -10
  487. package/src/src/api/exchange/vaultModify.ts +15 -10
  488. package/src/src/api/exchange/vaultTransfer.ts +15 -10
  489. package/src/src/api/exchange/withdraw3.ts +15 -12
  490. package/src/src/api/exchange/~client.ts +30 -5
  491. package/src/src/api/exchange/~mod.ts +1 -0
  492. package/src/src/api/info/meta.ts +7 -0
  493. package/src/src/api/info/perpDexs.ts +10 -0
  494. package/src/src/api/info/spotClearinghouseState.ts +3 -33
  495. package/src/src/api/info/userFees.ts +46 -1
  496. package/src/src/api/subscription/spotState.ts +96 -0
  497. package/src/src/api/subscription/~client.ts +25 -0
  498. package/src/src/api/subscription/~mod.ts +1 -0
  499. package/src/src/signing/_signTypedData.ts +1 -1
  500. package/src/src/utils/{_minimalEIP712Signer.ts → _eip712.ts} +22 -29
  501. package/src/src/utils/_format.ts +99 -98
  502. package/src/src/utils/_recover.ts +178 -0
  503. package/src/src/utils/mod.ts +1 -0
  504. package/esm/src/api/exchange/_base/_sequential.d.ts +0 -30
  505. package/esm/src/api/exchange/_base/_sequential.d.ts.map +0 -1
  506. package/esm/src/api/exchange/_base/_sequential.js +0 -69
  507. package/esm/src/api/exchange/_base/_sequential.js.map +0 -1
  508. package/esm/src/utils/_minimalEIP712Signer.d.ts.map +0 -1
  509. package/esm/src/utils/_minimalEIP712Signer.js.map +0 -1
  510. package/script/src/api/exchange/_base/_sequential.d.ts +0 -30
  511. package/script/src/api/exchange/_base/_sequential.d.ts.map +0 -1
  512. package/script/src/api/exchange/_base/_sequential.js +0 -72
  513. package/script/src/api/exchange/_base/_sequential.js.map +0 -1
  514. package/script/src/utils/_minimalEIP712Signer.d.ts.map +0 -1
  515. package/script/src/utils/_minimalEIP712Signer.js.map +0 -1
  516. package/src/src/api/exchange/_base/_sequential.ts +0 -82
@@ -1,11 +1,8 @@
1
- import { HyperliquidError } from "../_base.js";
2
-
3
1
  /**
4
2
  * Format price according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
5
3
  * - Maximum 5 significant figures
6
- * - Maximum (6 for perp, 8 for spot) - `szDecimals` decimal places
4
+ * - Maximum 6 (for perp) or 8 (for spot) - `szDecimals` decimal places
7
5
  * - Integer prices are always allowed regardless of significant figures
8
- * - Remove trailing zeros
9
6
  * @example
10
7
  * ```ts
11
8
  * import { formatPrice } from "@nktkas/hyperliquid/utils";
@@ -15,158 +12,162 @@ import { HyperliquidError } from "../_base.js";
15
12
  * const price = formatPrice("0.0000123456789", 0, false); // → "0.00001234"
16
13
  * ```
17
14
  */
18
- export function formatPrice(
19
- price: string | number,
20
- szDecimals: number,
21
- isPerp: boolean = true,
22
- ): string {
23
- // Prepare: trim, validate, normalize leading/trailing zeros
24
- let priceStr = prepareNumber(typeof price === "string" ? price : price.toString());
25
-
26
- // Integer prices bypass sig figs limit per spec
27
- if (!priceStr.includes(".")) {
28
- return priceStr;
29
- }
15
+ export function formatPrice(price: string | number, szDecimals: number, isPerp: boolean = true): string {
16
+ price = price.toString().trim();
17
+ assertNumberString(price);
30
18
 
31
- // Apply decimal limit: max (6 for perp, 8 for spot) - `szDecimals` decimals
19
+ // Integer prices are always allowed
20
+ if (/^-?\d+$/.test(price)) return trimZeros(price);
21
+
22
+ // Apply decimal limit: max 6 (perp) or 8 (spot) - szDecimals
32
23
  const maxDecimals = Math.max((isPerp ? 6 : 8) - szDecimals, 0);
33
- priceStr = truncateDecimals(priceStr, maxDecimals);
24
+ price = StringMath.toFixedTruncate(price, maxDecimals);
34
25
 
35
26
  // Apply sig figs limit: max 5 significant figures
36
- priceStr = truncateSigFigs(priceStr, 5);
27
+ price = StringMath.toPrecisionTruncate(price, 5);
37
28
 
38
- return priceStr;
29
+ return price;
39
30
  }
40
31
 
41
32
  /**
42
33
  * Format size according to Hyperliquid {@link https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size | rules}:
43
- * - Truncate to `szDecimals` decimal places
44
- * - Remove trailing zeros
34
+ * - Truncate decimal places to `szDecimals`
45
35
  * @example
46
36
  * ```ts
47
37
  * import { formatSize } from "@nktkas/hyperliquid/utils";
48
38
  *
49
39
  * const size = formatSize("1.23456789", 5); // → "1.23456"
50
40
  * ```
41
+ * @note May return 0 if the value is not suitable, but when closing a position, a size of 0 means the full size.
51
42
  */
52
43
  export function formatSize(size: string | number, szDecimals: number): string {
53
- // Prepare: trim, validate, normalize leading/trailing zeros
54
- let sizeStr = prepareNumber(typeof size === "string" ? size : size.toString());
55
-
56
- // Truncate to `szDecimals` decimal places
57
- sizeStr = truncateDecimals(sizeStr, szDecimals);
58
-
59
- return sizeStr;
60
- }
61
-
62
- /**
63
- * Prepare number string for processing:
64
- * 1. Trim whitespace
65
- * 2. Validate format (decimal number, not hex/scientific)
66
- * 3. Normalize: remove leading zeros from integer part, trailing zeros from decimal part
67
- */
68
- function prepareNumber(numStr: string): string {
69
- const trimmed = numStr.trim();
44
+ size = size.toString().trim();
45
+ assertNumberString(size);
70
46
 
71
- // Validate: only decimal numbers allowed (no hex, scientific notation, etc)
72
- if (!/^-?(\d+\.?\d*|\.\d+)$/.test(trimmed)) {
73
- throw new HyperliquidError(`Invalid number format: ${numStr}`);
74
- }
47
+ // Apply decimal limit: szDecimals
48
+ size = StringMath.toFixedTruncate(size, szDecimals);
75
49
 
76
- // Normalize: remove leading zeros from integer, trailing zeros from decimal
77
- const [int, dec] = trimmed.split(".");
78
- const trimmedInt = int.replace(/^0+/, "") || "0";
79
- const trimmedDec = dec?.replace(/0+$/, "");
80
- return trimmedInt + (trimmedDec ? "." + trimmedDec : "");
50
+ return size;
81
51
  }
82
52
 
83
53
  /** String-based Math operations for arbitrary precision */
84
54
  const StringMath = {
85
- /** Absolute value: remove negative sign if present */
86
- abs(numStr: string): string {
87
- return numStr[0] === "-" ? numStr.slice(1) : numStr;
88
- },
89
-
90
55
  /** Floor log10 (magnitude): position of most significant digit */
91
- log10Floor(numStr: string): number {
92
- const abs = this.abs(numStr);
56
+ log10Floor(value: string): number {
57
+ const abs = value[0] === "-" ? value.slice(1) : value;
58
+
59
+ // Check if zero or invalid
60
+ const num = Number(abs);
61
+ if (num === 0 || isNaN(num)) return -Infinity;
62
+
93
63
  const [int, dec] = abs.split(".");
94
64
 
95
65
  // Number >= 1: magnitude = length of integer part - 1
96
- if (int !== "0") {
66
+ if (Number(int) !== 0) {
97
67
  const trimmed = int.replace(/^0+/, "");
98
68
  return trimmed.length - 1;
99
69
  }
100
70
 
101
71
  // Number < 1: count leading zeros in decimal part
102
- if (!dec) return -Infinity;
103
72
  const leadingZeros = dec.match(/^0*/)?.[0].length ?? 0;
104
73
  return -(leadingZeros + 1);
105
74
  },
106
75
 
107
76
  /** Multiply by 10^exp: shift decimal point left (negative) or right (positive) */
108
- multiplyByPow10(numStr: string, exp: number): string {
109
- if (exp === 0) return numStr;
77
+ multiplyByPow10(value: string, exp: number): string {
78
+ if (!Number.isInteger(exp)) throw new RangeError("Exponent must be an integer");
79
+ if (exp === 0) return trimZeros(value);
110
80
 
111
- const neg = numStr[0] === "-";
112
- const abs = neg ? numStr.slice(1) : numStr;
113
- const [int, dec = ""] = abs.split(".");
81
+ const neg = value[0] === "-";
82
+ const abs = neg ? value.slice(1) : value;
83
+ const [intRaw, dec = ""] = abs.split(".");
84
+ // Normalize empty integer part to "0" (handles ".5" → "0.5")
85
+ const int = intRaw || "0";
86
+
87
+ let result: string;
114
88
 
115
89
  if (exp > 0) {
116
90
  // Shift right: move digits from decimal to integer
117
91
  if (exp >= dec.length) {
118
- return (neg ? "-" : "") + int + dec + "0".repeat(exp - dec.length);
92
+ result = int + dec + "0".repeat(exp - dec.length);
93
+ } else {
94
+ result = int + dec.slice(0, exp) + "." + dec.slice(exp);
119
95
  }
120
- return (neg ? "-" : "") + int + dec.slice(0, exp) + "." + dec.slice(exp);
121
96
  } else {
122
97
  // Shift left: move digits from integer to decimal
123
98
  const absExp = -exp;
124
99
  if (absExp >= int.length) {
125
- return (neg ? "-" : "") + "0." + "0".repeat(absExp - int.length) + int + dec;
100
+ result = "0." + "0".repeat(absExp - int.length) + int + dec;
101
+ } else {
102
+ result = int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
126
103
  }
127
- return (neg ? "-" : "") + int.slice(0, -absExp) + "." + int.slice(-absExp) + dec;
128
104
  }
105
+
106
+ return trimZeros((neg ? "-" : "") + result);
129
107
  },
130
108
 
131
- /** Truncate: remove decimal part */
132
- trunc(numStr: string): string {
133
- const dotIndex = numStr.indexOf(".");
134
- return dotIndex === -1 ? numStr : numStr.slice(0, dotIndex);
109
+ /** Returns the integer part of a number by removing any fractional digits */
110
+ trunc(value: string): string {
111
+ const dotIndex = value.indexOf(".");
112
+ return dotIndex === -1 ? value : value.slice(0, dotIndex) || "0";
135
113
  },
136
- };
137
114
 
138
- /** Truncate to specified decimal places */
139
- function truncateDecimals(numStr: string, maxDecimals: number): string {
140
- const dotIndex = numStr.indexOf(".");
141
- if (dotIndex === -1) return numStr;
115
+ /** Truncate to a certain number of significant figures */
116
+ toPrecisionTruncate(value: string, precision: number): string {
117
+ if (!Number.isInteger(precision)) throw new RangeError("Precision must be an integer");
118
+ if (precision < 1) throw new RangeError("Precision must be positive");
119
+ if (/^-?0+(\.0*)?$/.test(value)) return "0"; // zero is special case (don't work with log10)
142
120
 
143
- const truncated = numStr.substring(0, dotIndex + maxDecimals + 1);
121
+ const neg = value[0] === "-";
122
+ const abs = neg ? value.slice(1) : value;
144
123
 
145
- // Remove trailing zeros from decimal
146
- const [int, dec] = truncated.split(".");
147
- const trimmedDec = dec?.replace(/0+$/, "");
148
- return trimmedDec ? int + "." + trimmedDec : int;
149
- }
124
+ // Calculate how much to shift: align most significant digit to ones place + (maxSigFigs-1)
125
+ const magnitude = StringMath.log10Floor(abs);
126
+ const shiftAmount = precision - magnitude - 1;
150
127
 
151
- /** Truncate to specified significant figures using string-based math */
152
- function truncateSigFigs(numStr: string, maxSigFigs: number): string {
153
- if (parseFloat(numStr) === 0) return "0";
128
+ // Shift right, truncate integer part, shift back
129
+ const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
130
+ const truncated = StringMath.trunc(shifted);
131
+ const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
154
132
 
155
- const neg = numStr[0] === "-";
156
- const abs = neg ? numStr.slice(1) : numStr;
133
+ // build final result and trim zeros
134
+ return trimZeros(neg ? "-" + result : result);
135
+ },
136
+
137
+ /** Truncate to a certain number of decimal places */
138
+ toFixedTruncate(value: string, decimals: number): string {
139
+ if (!Number.isInteger(decimals)) throw new RangeError("Decimals must be an integer");
140
+ if (decimals < 0) throw new RangeError("Decimals must be non-negative");
157
141
 
158
- // Calculate how much to shift: align most significant digit to ones place + (maxSigFigs-1)
159
- const magnitude = StringMath.log10Floor(abs);
160
- const shiftAmount = maxSigFigs - magnitude - 1;
142
+ // Match number with up to `decimals` decimal places
143
+ const regex = new RegExp(`^-?(?:\\d+)?(?:\\.\\d{0,${decimals}})?`);
144
+ const result = value.match(regex)?.[0];
161
145
 
162
- // Shift right, truncate integer part, shift back
163
- const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
164
- const truncated = StringMath.trunc(shifted);
165
- const result = StringMath.multiplyByPow10(truncated, -shiftAmount);
146
+ if (!result) {
147
+ throw new TypeError("Invalid number format");
148
+ }
166
149
 
167
- // Remove trailing zeros introduced by shifting
168
- const final = neg ? "-" + result : result;
169
- const [int, dec] = final.split(".");
170
- const trimmedDec = dec?.replace(/0+$/, "");
171
- return trimmedDec ? int + "." + trimmedDec : int;
150
+ // Trim zeros after truncation
151
+ return trimZeros(result);
152
+ },
153
+ };
154
+
155
+ function trimZeros(value: string): string {
156
+ return value
157
+ // remove leading zeros
158
+ .replace(/^(-?)0+(?=\d)/, "$1") // "00123" → "123", "-00.5" → "-0.5"
159
+ // remove trailing zeros
160
+ .replace(/\.0*$|(\.\d+?)0+$/, "$1") // "1.2000" → "1.2", "5.0" → "5"
161
+ // add leading zero if starts with decimal point
162
+ .replace(/^(-?)\./, "$10.") // ".5" → "0.5", "-.5" → "-0.5"
163
+ // add "0" if string is empty after trimming
164
+ .replace(/^-?$/, "0") // "" → "0", "-" → "0"
165
+ // normalize negative zero
166
+ .replace(/^-0$/, "0"); // "-0" → "0"
167
+ }
168
+
169
+ function assertNumberString(value: string): void {
170
+ if (!/^-?(\d+\.?\d*|\.\d*)$/.test(value)) {
171
+ throw new TypeError("Invalid number format");
172
+ }
172
173
  }
@@ -0,0 +1,178 @@
1
+ import { keccak_256 } from "@noble/hashes/sha3.js";
2
+ import * as secp from "@noble/secp256k1";
3
+ import { createL1ActionHash, type Signature } from "../signing/mod.js";
4
+ import { hashTypedData } from "./_eip712.js";
5
+
6
+ /**
7
+ * Recover the Ethereum address that signed an L1 action.
8
+ * @example
9
+ * ```ts
10
+ * import { recoverUserFromL1Action } from "@nktkas/hyperliquid/utils";
11
+ *
12
+ * const action = {
13
+ * type: "cancel",
14
+ * cancels: [{ a: 0, o: 12345 }],
15
+ * };
16
+ * const nonce = 1700000000000;
17
+ * const signature = {
18
+ * r: "0x...",
19
+ * s: "0x...",
20
+ * v: 27,
21
+ * } as const;
22
+ *
23
+ * const address = await recoverUserFromL1Action({ action, nonce, signature });
24
+ * console.log(`Signer address: ${address}`);
25
+ * ```
26
+ */
27
+ export async function recoverUserFromL1Action(params: {
28
+ /** The action that was signed (hash depends on key order). */
29
+ action: Record<string, unknown>;
30
+ /** The timestamp in ms used when signing. */
31
+ nonce: number;
32
+ /** The signature to recover the address from. */
33
+ signature: Signature;
34
+ /** Indicates if the action is for the testnet. (default: false) */
35
+ isTestnet?: boolean;
36
+ /** Optional vault address used in the action. */
37
+ vaultAddress?: `0x${string}`;
38
+ /** Optional expiration time in ms used in the action. */
39
+ expiresAfter?: number;
40
+ }): Promise<`0x${string}`> {
41
+ const {
42
+ action,
43
+ signature,
44
+ nonce,
45
+ isTestnet = false,
46
+ vaultAddress,
47
+ expiresAfter,
48
+ } = params;
49
+
50
+ // 1. Create the action hash
51
+ const actionHash = createL1ActionHash({ action, nonce, vaultAddress, expiresAfter });
52
+
53
+ // 2. Hash the typed data according to EIP-712
54
+ const hash = hashTypedData({
55
+ domain: {
56
+ name: "Exchange",
57
+ version: "1",
58
+ chainId: 1337,
59
+ verifyingContract: "0x0000000000000000000000000000000000000000",
60
+ },
61
+ types: {
62
+ Agent: [
63
+ { name: "source", type: "string" },
64
+ { name: "connectionId", type: "bytes32" },
65
+ ],
66
+ },
67
+ primaryType: "Agent",
68
+ message: {
69
+ source: isTestnet ? "b" : "a",
70
+ connectionId: actionHash,
71
+ },
72
+ });
73
+
74
+ // 3. Convert signature to recovery format (v, r, s)
75
+ const sigr = secp.etc.concatBytes(
76
+ new Uint8Array([signature.v - 27]),
77
+ secp.etc.hexToBytes(signature.r.slice(2)),
78
+ secp.etc.hexToBytes(signature.s.slice(2)),
79
+ );
80
+
81
+ // 4. Recover the public key from the signature and hash
82
+ const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
83
+ const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
84
+
85
+ // 5. Convert the public key to an Ethereum address
86
+ return publicKeyToAddress(uncompressedPubKey);
87
+ }
88
+
89
+ /**
90
+ * Recover the Ethereum address that signed a user-signed action.
91
+ * @example
92
+ * ```ts
93
+ * import { recoverUserFromUserSigned } from "@nktkas/hyperliquid/utils";
94
+ *
95
+ * const action = {
96
+ * type: "approveAgent",
97
+ * signatureChainId: "0x66eee" as const,
98
+ * hyperliquidChain: "Mainnet",
99
+ * agentAddress: "0x...",
100
+ * agentName: "Agent",
101
+ * nonce: 1700000000000,
102
+ * };
103
+ * const types = {
104
+ * HyperliquidTransaction: [
105
+ * { name: "hyperliquidChain", type: "string" },
106
+ * // ... other fields
107
+ * ],
108
+ * };
109
+ * const signature = {
110
+ * r: "0x...",
111
+ * s: "0x...",
112
+ * v: 27,
113
+ * } as const;
114
+ *
115
+ * const address = await recoverUserFromUserSigned({ action, types, signature });
116
+ * console.log(`Signer address: ${address}`);
117
+ * ```
118
+ */
119
+ export async function recoverUserFromUserSigned(params: {
120
+ /** The action that was signed (hex strings must be in lower case). */
121
+ action:
122
+ & {
123
+ signatureChainId: `0x${string}`;
124
+ [key: string]: unknown;
125
+ }
126
+ & (
127
+ | { nonce: number; time?: undefined }
128
+ | { time: number; nonce?: undefined }
129
+ );
130
+ /** The types of the action (hash depends on key order). */
131
+ types: {
132
+ [key: string]: {
133
+ name: string;
134
+ type: string;
135
+ }[];
136
+ };
137
+ /** The signature to recover the address from. */
138
+ signature: Signature;
139
+ }): Promise<`0x${string}`> {
140
+ const { action, types, signature } = params;
141
+
142
+ // 1. Hash the typed data according to EIP-712
143
+ const hash = hashTypedData({
144
+ domain: {
145
+ name: "HyperliquidSignTransaction",
146
+ version: "1",
147
+ chainId: parseInt(action.signatureChainId),
148
+ verifyingContract: "0x0000000000000000000000000000000000000000",
149
+ },
150
+ types,
151
+ primaryType: Object.keys(types)[0],
152
+ message: action,
153
+ });
154
+
155
+ // 2. Convert signature to recovery format (v, r, s)
156
+ const sigr = secp.etc.concatBytes(
157
+ new Uint8Array([signature.v - 27]),
158
+ secp.etc.hexToBytes(signature.r.slice(2)),
159
+ secp.etc.hexToBytes(signature.s.slice(2)),
160
+ );
161
+
162
+ // 3. Recover the public key from the signature and hash
163
+ const compressedPubKey = await secp.recoverPublicKeyAsync(sigr, hash, { prehash: false });
164
+ const uncompressedPubKey = secp.Point.fromBytes(compressedPubKey).toBytes(false);
165
+
166
+ // 4. Convert the public key to an Ethereum address
167
+ return publicKeyToAddress(uncompressedPubKey);
168
+ }
169
+
170
+ /** Convert a public key to an Ethereum address. */
171
+ function publicKeyToAddress(publicKey: Uint8Array): `0x${string}` {
172
+ // Remove the 0x04 prefix from uncompressed public key
173
+ const publicKeyWithoutPrefix = publicKey.slice(1);
174
+ // Hash the public key and take the last 20 bytes as the address
175
+ const hash = keccak_256(publicKeyWithoutPrefix);
176
+ const addressBytes = hash.slice(-20);
177
+ return `0x${secp.etc.bytesToHex(addressBytes)}`;
178
+ }
@@ -1,2 +1,3 @@
1
1
  export * from "./_symbolConverter.js";
2
2
  export * from "./_format.js";
3
+ export * from "./_recover.js";
@@ -1,30 +0,0 @@
1
- /**
2
- * Sequential request execution to prevent nonce race conditions.
3
- *
4
- * Problem: When multiple requests are sent rapidly, they may execute in different order
5
- * on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
6
- *
7
- * Solution: Queue ensures requests execute sequentially in order.
8
- */
9
- import type { ExchangeRequestConfig, MultiSignRequestConfig } from "./_types.js";
10
- /**
11
- * Request queue for sequential execution of requests.
12
- * Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
13
- */
14
- declare class RequestQueue {
15
- private queue;
16
- /**
17
- * Enqueue a request to be executed sequentially.
18
- * @param fn - The function to execute.
19
- * @returns A promise that resolves with the result of the function.
20
- */
21
- enqueue<T>(fn: () => Promise<T>): Promise<T>;
22
- }
23
- /**
24
- * Get or create a request queue for the given config.
25
- * Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
26
- * regardless of whether called via client or direct function.
27
- */
28
- export declare function getRequestQueue(config: ExchangeRequestConfig | MultiSignRequestConfig): Promise<RequestQueue | undefined>;
29
- export {};
30
- //# sourceMappingURL=_sequential.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_sequential.d.ts","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF;;;GAGG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAK7C;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAAG,sBAAsB,GACrD,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA0BnC"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Sequential request execution to prevent nonce race conditions.
3
- *
4
- * Problem: When multiple requests are sent rapidly, they may execute in different order
5
- * on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
6
- *
7
- * Solution: Queue ensures requests execute sequentially in order.
8
- */
9
- import { getWalletAddress } from "../../../signing/mod.js";
10
- /**
11
- * Request queue for sequential execution of requests.
12
- * Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
13
- */
14
- class RequestQueue {
15
- queue = Promise.resolve();
16
- /**
17
- * Enqueue a request to be executed sequentially.
18
- * @param fn - The function to execute.
19
- * @returns A promise that resolves with the result of the function.
20
- */
21
- enqueue(fn) {
22
- const current = this.queue.then(() => fn());
23
- this.queue = current.catch(() => { }); // Prevent unhandled rejection
24
- return current;
25
- }
26
- }
27
- /**
28
- * Map of wallet addresses to weak references of request queues.
29
- * Uses WeakRef to allow garbage collection of unused queues:
30
- * - When a queue is no longer referenced (all requests completed), GC can remove it
31
- * - FinalizationRegistry automatically cleans up the Map entry when queue is GC'd
32
- * - This prevents memory leaks in long-running applications without manual cleanup
33
- */
34
- const requestQueueMap = /* @__PURE__ */ new Map();
35
- /**
36
- * Registry to clean up Map entries when queues are garbage collected.
37
- * When a RequestQueue is GC'd, this callback removes the corresponding Map entry.
38
- */
39
- const requestQueueRegistry = /* @__PURE__ */ new FinalizationRegistry((address) => {
40
- requestQueueMap.delete(address);
41
- });
42
- /**
43
- * Get or create a request queue for the given config.
44
- * Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
45
- * regardless of whether called via client or direct function.
46
- */
47
- export async function getRequestQueue(config) {
48
- const sequentialRequests = config.sequentialRequests ?? true; // default to true
49
- if (!sequentialRequests) {
50
- return undefined;
51
- }
52
- // Get wallet address to use as key
53
- const walletAddress = "signers" in config
54
- ? await getWalletAddress(config.signers[0])
55
- : await getWalletAddress(config.wallet);
56
- const address = walletAddress.toLowerCase();
57
- // Try to get existing queue from weak reference
58
- const queueRef = requestQueueMap.get(address);
59
- let queue = queueRef?.deref();
60
- if (!queue) {
61
- // Create new queue if it doesn't exist or was garbage collected
62
- queue = new RequestQueue();
63
- requestQueueMap.set(address, new WeakRef(queue));
64
- // Register for automatic cleanup when queue is GC'd
65
- requestQueueRegistry.register(queue, address);
66
- }
67
- return queue;
68
- }
69
- //# sourceMappingURL=_sequential.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_sequential.js","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,YAAY;IACR,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD;;;;OAIG;IACH,OAAO,CAAI,EAAoB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,EAAiC,CAAC;AAEjF;;;GAGG;AACH,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,oBAAoB,CAAS,CAAC,OAAO,EAAE,EAAE;IACxF,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsD;IAEtD,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,kBAAkB;IAChF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,SAAS,IAAI,MAAM;QACvC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAE5C,gDAAgD;IAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,gEAAgE;QAChE,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAC3B,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,oDAAoD;QACpD,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_minimalEIP712Signer.d.ts","sourceRoot":"","sources":["../../../src/src/utils/_minimalEIP712Signer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,KAAK;IACpB,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;CACL;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,MAAM,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CACtB;AAqMD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,2DAA2D;AAC3D,qBAAa,sBAAuB,YAAW,wBAAwB;;IAErE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;gBACX,UAAU,EAAE,MAAM,GAAG,UAAU;IAI3C,aAAa,CACX,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GACA,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;CAG1B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_minimalEIP712Signer.js","sourceRoot":"","sources":["../../../src/src/utils/_minimalEIP712Signer.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Sequential request execution to prevent nonce race conditions.
3
- *
4
- * Problem: When multiple requests are sent rapidly, they may execute in different order
5
- * on the transport layer, causing nonce errors (e.g., server receives nonce 101 before 100).
6
- *
7
- * Solution: Queue ensures requests execute sequentially in order.
8
- */
9
- import type { ExchangeRequestConfig, MultiSignRequestConfig } from "./_types.js";
10
- /**
11
- * Request queue for sequential execution of requests.
12
- * Ensures that requests are executed in order, preventing them from arriving at the server out of sequence.
13
- */
14
- declare class RequestQueue {
15
- private queue;
16
- /**
17
- * Enqueue a request to be executed sequentially.
18
- * @param fn - The function to execute.
19
- * @returns A promise that resolves with the result of the function.
20
- */
21
- enqueue<T>(fn: () => Promise<T>): Promise<T>;
22
- }
23
- /**
24
- * Get or create a request queue for the given config.
25
- * Uses a global Map keyed by wallet address to ensure the same wallet uses the same queue
26
- * regardless of whether called via client or direct function.
27
- */
28
- export declare function getRequestQueue(config: ExchangeRequestConfig | MultiSignRequestConfig): Promise<RequestQueue | undefined>;
29
- export {};
30
- //# sourceMappingURL=_sequential.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_sequential.d.ts","sourceRoot":"","sources":["../../../../../src/src/api/exchange/_base/_sequential.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGjF;;;GAGG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAK7C;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAAG,sBAAsB,GACrD,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA0BnC"}