@lifi/perps-sdk-provider-hyperliquid 0.2.0-alpha.0

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 (434) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +174 -0
  3. package/dist/cjs/HyperliquidProvider.d.ts +15 -0
  4. package/dist/cjs/HyperliquidProvider.d.ts.map +1 -0
  5. package/dist/cjs/HyperliquidProvider.js +135 -0
  6. package/dist/cjs/HyperliquidProvider.js.map +1 -0
  7. package/dist/cjs/accountConfig.d.ts +3 -0
  8. package/dist/cjs/accountConfig.d.ts.map +1 -0
  9. package/dist/cjs/accountConfig.js +45 -0
  10. package/dist/cjs/accountConfig.js.map +1 -0
  11. package/dist/cjs/accountSummary.d.ts +3 -0
  12. package/dist/cjs/accountSummary.d.ts.map +1 -0
  13. package/dist/cjs/accountSummary.js +12 -0
  14. package/dist/cjs/accountSummary.js.map +1 -0
  15. package/dist/cjs/constants.d.ts +11 -0
  16. package/dist/cjs/constants.d.ts.map +1 -0
  17. package/dist/cjs/constants.js +16 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/cjs/context.d.ts +13 -0
  20. package/dist/cjs/context.d.ts.map +1 -0
  21. package/dist/cjs/context.js +24 -0
  22. package/dist/cjs/context.js.map +1 -0
  23. package/dist/cjs/index.d.ts +22 -0
  24. package/dist/cjs/index.d.ts.map +1 -0
  25. package/dist/cjs/index.js +47 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/package.json +1 -0
  28. package/dist/cjs/services/getAccount.d.ts +6 -0
  29. package/dist/cjs/services/getAccount.d.ts.map +1 -0
  30. package/dist/cjs/services/getAccount.js +109 -0
  31. package/dist/cjs/services/getAccount.js.map +1 -0
  32. package/dist/cjs/services/getActivity.d.ts +15 -0
  33. package/dist/cjs/services/getActivity.d.ts.map +1 -0
  34. package/dist/cjs/services/getActivity.js +65 -0
  35. package/dist/cjs/services/getActivity.js.map +1 -0
  36. package/dist/cjs/services/getFills.d.ts +13 -0
  37. package/dist/cjs/services/getFills.d.ts.map +1 -0
  38. package/dist/cjs/services/getFills.js +40 -0
  39. package/dist/cjs/services/getFills.js.map +1 -0
  40. package/dist/cjs/services/getOrder.d.ts +6 -0
  41. package/dist/cjs/services/getOrder.d.ts.map +1 -0
  42. package/dist/cjs/services/getOrder.js +27 -0
  43. package/dist/cjs/services/getOrder.js.map +1 -0
  44. package/dist/cjs/services/getOrders.d.ts +11 -0
  45. package/dist/cjs/services/getOrders.d.ts.map +1 -0
  46. package/dist/cjs/services/getOrders.js +51 -0
  47. package/dist/cjs/services/getOrders.js.map +1 -0
  48. package/dist/cjs/services/getPositions.d.ts +11 -0
  49. package/dist/cjs/services/getPositions.d.ts.map +1 -0
  50. package/dist/cjs/services/getPositions.js +33 -0
  51. package/dist/cjs/services/getPositions.js.map +1 -0
  52. package/dist/cjs/signers/HyperliquidAgentStore.d.ts +19 -0
  53. package/dist/cjs/signers/HyperliquidAgentStore.d.ts.map +1 -0
  54. package/dist/cjs/signers/HyperliquidAgentStore.js +110 -0
  55. package/dist/cjs/signers/HyperliquidAgentStore.js.map +1 -0
  56. package/dist/cjs/signers/index.d.ts +4 -0
  57. package/dist/cjs/signers/index.d.ts.map +1 -0
  58. package/dist/cjs/signers/index.js +8 -0
  59. package/dist/cjs/signers/index.js.map +1 -0
  60. package/dist/cjs/signers/signActions.d.ts +7 -0
  61. package/dist/cjs/signers/signActions.d.ts.map +1 -0
  62. package/dist/cjs/signers/signActions.js +33 -0
  63. package/dist/cjs/signers/signActions.js.map +1 -0
  64. package/dist/cjs/types/account.d.ts +51 -0
  65. package/dist/cjs/types/account.d.ts.map +1 -0
  66. package/dist/cjs/types/account.js +10 -0
  67. package/dist/cjs/types/account.js.map +1 -0
  68. package/dist/cjs/types/action.d.ts +51 -0
  69. package/dist/cjs/types/action.d.ts.map +1 -0
  70. package/dist/cjs/types/action.js +11 -0
  71. package/dist/cjs/types/action.js.map +1 -0
  72. package/dist/cjs/types/asset.d.ts +66 -0
  73. package/dist/cjs/types/asset.d.ts.map +1 -0
  74. package/dist/cjs/types/asset.js +3 -0
  75. package/dist/cjs/types/asset.js.map +1 -0
  76. package/dist/cjs/types/fill.d.ts +18 -0
  77. package/dist/cjs/types/fill.d.ts.map +1 -0
  78. package/dist/cjs/types/fill.js +3 -0
  79. package/dist/cjs/types/fill.js.map +1 -0
  80. package/dist/cjs/types/index.d.ts +8 -0
  81. package/dist/cjs/types/index.d.ts.map +1 -0
  82. package/dist/cjs/types/index.js +24 -0
  83. package/dist/cjs/types/index.js.map +1 -0
  84. package/dist/cjs/types/ledger.d.ts +53 -0
  85. package/dist/cjs/types/ledger.d.ts.map +1 -0
  86. package/dist/cjs/types/ledger.js +8 -0
  87. package/dist/cjs/types/ledger.js.map +1 -0
  88. package/dist/cjs/types/order.d.ts +46 -0
  89. package/dist/cjs/types/order.d.ts.map +1 -0
  90. package/dist/cjs/types/order.js +3 -0
  91. package/dist/cjs/types/order.js.map +1 -0
  92. package/dist/cjs/types/ws.d.ts +36 -0
  93. package/dist/cjs/types/ws.d.ts.map +1 -0
  94. package/dist/cjs/types/ws.js +3 -0
  95. package/dist/cjs/types/ws.js.map +1 -0
  96. package/dist/cjs/utils/assetId.d.ts +4 -0
  97. package/dist/cjs/utils/assetId.d.ts.map +1 -0
  98. package/dist/cjs/utils/assetId.js +21 -0
  99. package/dist/cjs/utils/assetId.js.map +1 -0
  100. package/dist/cjs/utils/index.d.ts +15 -0
  101. package/dist/cjs/utils/index.d.ts.map +1 -0
  102. package/dist/cjs/utils/index.js +49 -0
  103. package/dist/cjs/utils/index.js.map +1 -0
  104. package/dist/cjs/utils/infoClient.d.ts +10 -0
  105. package/dist/cjs/utils/infoClient.d.ts.map +1 -0
  106. package/dist/cjs/utils/infoClient.js +58 -0
  107. package/dist/cjs/utils/infoClient.js.map +1 -0
  108. package/dist/cjs/utils/liquidation.d.ts +3 -0
  109. package/dist/cjs/utils/liquidation.d.ts.map +1 -0
  110. package/dist/cjs/utils/liquidation.js +24 -0
  111. package/dist/cjs/utils/liquidation.js.map +1 -0
  112. package/dist/cjs/utils/mapActivity.d.ts +5 -0
  113. package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
  114. package/dist/cjs/utils/mapActivity.js +133 -0
  115. package/dist/cjs/utils/mapActivity.js.map +1 -0
  116. package/dist/cjs/utils/mapFill.d.ts +6 -0
  117. package/dist/cjs/utils/mapFill.d.ts.map +1 -0
  118. package/dist/cjs/utils/mapFill.js +33 -0
  119. package/dist/cjs/utils/mapFill.js.map +1 -0
  120. package/dist/cjs/utils/mapMarket.d.ts +4 -0
  121. package/dist/cjs/utils/mapMarket.d.ts.map +1 -0
  122. package/dist/cjs/utils/mapMarket.js +22 -0
  123. package/dist/cjs/utils/mapMarket.js.map +1 -0
  124. package/dist/cjs/utils/mapMarketPrice.d.ts +4 -0
  125. package/dist/cjs/utils/mapMarketPrice.d.ts.map +1 -0
  126. package/dist/cjs/utils/mapMarketPrice.js +22 -0
  127. package/dist/cjs/utils/mapMarketPrice.js.map +1 -0
  128. package/dist/cjs/utils/mapOrder.d.ts +12 -0
  129. package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
  130. package/dist/cjs/utils/mapOrder.js +156 -0
  131. package/dist/cjs/utils/mapOrder.js.map +1 -0
  132. package/dist/cjs/utils/mapPosition.d.ts +5 -0
  133. package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
  134. package/dist/cjs/utils/mapPosition.js +28 -0
  135. package/dist/cjs/utils/mapPosition.js.map +1 -0
  136. package/dist/cjs/utils/marketDisplay.d.ts +4 -0
  137. package/dist/cjs/utils/marketDisplay.d.ts.map +1 -0
  138. package/dist/cjs/utils/marketDisplay.js +23 -0
  139. package/dist/cjs/utils/marketDisplay.js.map +1 -0
  140. package/dist/cjs/utils/orderFormatting.d.ts +4 -0
  141. package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
  142. package/dist/cjs/utils/orderFormatting.js +30 -0
  143. package/dist/cjs/utils/orderFormatting.js.map +1 -0
  144. package/dist/cjs/utils/priceStepToAggregation.d.ts +5 -0
  145. package/dist/cjs/utils/priceStepToAggregation.d.ts.map +1 -0
  146. package/dist/cjs/utils/priceStepToAggregation.js +36 -0
  147. package/dist/cjs/utils/priceStepToAggregation.js.map +1 -0
  148. package/dist/cjs/utils/spotBalance.d.ts +6 -0
  149. package/dist/cjs/utils/spotBalance.d.ts.map +1 -0
  150. package/dist/cjs/utils/spotBalance.js +34 -0
  151. package/dist/cjs/utils/spotBalance.js.map +1 -0
  152. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +29 -0
  153. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  154. package/dist/cjs/websocket/HyperliquidWsProvider.js +359 -0
  155. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -0
  156. package/dist/cjs/websocket/index.d.ts +2 -0
  157. package/dist/cjs/websocket/index.d.ts.map +1 -0
  158. package/dist/cjs/websocket/index.js +6 -0
  159. package/dist/cjs/websocket/index.js.map +1 -0
  160. package/dist/esm/HyperliquidProvider.d.ts +64 -0
  161. package/dist/esm/HyperliquidProvider.d.ts.map +1 -0
  162. package/dist/esm/HyperliquidProvider.js +162 -0
  163. package/dist/esm/HyperliquidProvider.js.map +1 -0
  164. package/dist/esm/accountConfig.d.ts +10 -0
  165. package/dist/esm/accountConfig.d.ts.map +1 -0
  166. package/dist/esm/accountConfig.js +65 -0
  167. package/dist/esm/accountConfig.js.map +1 -0
  168. package/dist/esm/accountSummary.d.ts +10 -0
  169. package/dist/esm/accountSummary.d.ts.map +1 -0
  170. package/dist/esm/accountSummary.js +22 -0
  171. package/dist/esm/accountSummary.js.map +1 -0
  172. package/dist/esm/constants.d.ts +40 -0
  173. package/dist/esm/constants.d.ts.map +1 -0
  174. package/dist/esm/constants.js +42 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/context.d.ts +26 -0
  177. package/dist/esm/context.d.ts.map +1 -0
  178. package/dist/esm/context.js +25 -0
  179. package/dist/esm/context.js.map +1 -0
  180. package/dist/esm/index.d.ts +31 -0
  181. package/dist/esm/index.d.ts.map +1 -0
  182. package/dist/esm/index.js +26 -0
  183. package/dist/esm/index.js.map +1 -0
  184. package/dist/esm/package.json +1 -0
  185. package/dist/esm/services/getAccount.d.ts +28 -0
  186. package/dist/esm/services/getAccount.d.ts.map +1 -0
  187. package/dist/esm/services/getAccount.js +134 -0
  188. package/dist/esm/services/getAccount.js.map +1 -0
  189. package/dist/esm/services/getActivity.d.ts +33 -0
  190. package/dist/esm/services/getActivity.d.ts.map +1 -0
  191. package/dist/esm/services/getActivity.js +75 -0
  192. package/dist/esm/services/getActivity.js.map +1 -0
  193. package/dist/esm/services/getFills.d.ts +34 -0
  194. package/dist/esm/services/getFills.d.ts.map +1 -0
  195. package/dist/esm/services/getFills.js +49 -0
  196. package/dist/esm/services/getFills.js.map +1 -0
  197. package/dist/esm/services/getOrder.d.ts +17 -0
  198. package/dist/esm/services/getOrder.d.ts.map +1 -0
  199. package/dist/esm/services/getOrder.js +29 -0
  200. package/dist/esm/services/getOrder.js.map +1 -0
  201. package/dist/esm/services/getOrders.d.ts +27 -0
  202. package/dist/esm/services/getOrders.d.ts.map +1 -0
  203. package/dist/esm/services/getOrders.js +57 -0
  204. package/dist/esm/services/getOrders.js.map +1 -0
  205. package/dist/esm/services/getPositions.d.ts +26 -0
  206. package/dist/esm/services/getPositions.d.ts.map +1 -0
  207. package/dist/esm/services/getPositions.js +37 -0
  208. package/dist/esm/services/getPositions.js.map +1 -0
  209. package/dist/esm/signers/HyperliquidAgentStore.d.ts +54 -0
  210. package/dist/esm/signers/HyperliquidAgentStore.d.ts.map +1 -0
  211. package/dist/esm/signers/HyperliquidAgentStore.js +134 -0
  212. package/dist/esm/signers/HyperliquidAgentStore.js.map +1 -0
  213. package/dist/esm/signers/index.d.ts +4 -0
  214. package/dist/esm/signers/index.d.ts.map +1 -0
  215. package/dist/esm/signers/index.js +4 -0
  216. package/dist/esm/signers/index.js.map +1 -0
  217. package/dist/esm/signers/signActions.d.ts +15 -0
  218. package/dist/esm/signers/signActions.d.ts.map +1 -0
  219. package/dist/esm/signers/signActions.js +38 -0
  220. package/dist/esm/signers/signActions.js.map +1 -0
  221. package/dist/esm/types/account.d.ts +64 -0
  222. package/dist/esm/types/account.d.ts.map +1 -0
  223. package/dist/esm/types/account.js +13 -0
  224. package/dist/esm/types/account.js.map +1 -0
  225. package/dist/esm/types/action.d.ts +61 -0
  226. package/dist/esm/types/action.d.ts.map +1 -0
  227. package/dist/esm/types/action.js +16 -0
  228. package/dist/esm/types/action.js.map +1 -0
  229. package/dist/esm/types/asset.d.ts +82 -0
  230. package/dist/esm/types/asset.d.ts.map +1 -0
  231. package/dist/esm/types/asset.js +3 -0
  232. package/dist/esm/types/asset.js.map +1 -0
  233. package/dist/esm/types/fill.d.ts +21 -0
  234. package/dist/esm/types/fill.d.ts.map +1 -0
  235. package/dist/esm/types/fill.js +3 -0
  236. package/dist/esm/types/fill.js.map +1 -0
  237. package/dist/esm/types/index.d.ts +8 -0
  238. package/dist/esm/types/index.d.ts.map +1 -0
  239. package/dist/esm/types/index.js +11 -0
  240. package/dist/esm/types/index.js.map +1 -0
  241. package/dist/esm/types/ledger.d.ts +93 -0
  242. package/dist/esm/types/ledger.d.ts.map +1 -0
  243. package/dist/esm/types/ledger.js +16 -0
  244. package/dist/esm/types/ledger.js.map +1 -0
  245. package/dist/esm/types/order.d.ts +51 -0
  246. package/dist/esm/types/order.d.ts.map +1 -0
  247. package/dist/esm/types/order.js +3 -0
  248. package/dist/esm/types/order.js.map +1 -0
  249. package/dist/esm/types/ws.d.ts +43 -0
  250. package/dist/esm/types/ws.d.ts.map +1 -0
  251. package/dist/esm/types/ws.js +3 -0
  252. package/dist/esm/types/ws.js.map +1 -0
  253. package/dist/esm/utils/assetId.d.ts +20 -0
  254. package/dist/esm/utils/assetId.d.ts.map +1 -0
  255. package/dist/esm/utils/assetId.js +31 -0
  256. package/dist/esm/utils/assetId.js.map +1 -0
  257. package/dist/esm/utils/index.d.ts +15 -0
  258. package/dist/esm/utils/index.d.ts.map +1 -0
  259. package/dist/esm/utils/index.js +17 -0
  260. package/dist/esm/utils/index.js.map +1 -0
  261. package/dist/esm/utils/infoClient.d.ts +28 -0
  262. package/dist/esm/utils/infoClient.d.ts.map +1 -0
  263. package/dist/esm/utils/infoClient.js +70 -0
  264. package/dist/esm/utils/infoClient.js.map +1 -0
  265. package/dist/esm/utils/liquidation.d.ts +48 -0
  266. package/dist/esm/utils/liquidation.d.ts.map +1 -0
  267. package/dist/esm/utils/liquidation.js +65 -0
  268. package/dist/esm/utils/liquidation.js.map +1 -0
  269. package/dist/esm/utils/mapActivity.d.ts +15 -0
  270. package/dist/esm/utils/mapActivity.d.ts.map +1 -0
  271. package/dist/esm/utils/mapActivity.js +148 -0
  272. package/dist/esm/utils/mapActivity.js.map +1 -0
  273. package/dist/esm/utils/mapFill.d.ts +11 -0
  274. package/dist/esm/utils/mapFill.d.ts.map +1 -0
  275. package/dist/esm/utils/mapFill.js +34 -0
  276. package/dist/esm/utils/mapFill.js.map +1 -0
  277. package/dist/esm/utils/mapMarket.d.ts +12 -0
  278. package/dist/esm/utils/mapMarket.d.ts.map +1 -0
  279. package/dist/esm/utils/mapMarket.js +27 -0
  280. package/dist/esm/utils/mapMarket.js.map +1 -0
  281. package/dist/esm/utils/mapMarketPrice.d.ts +10 -0
  282. package/dist/esm/utils/mapMarketPrice.d.ts.map +1 -0
  283. package/dist/esm/utils/mapMarketPrice.js +24 -0
  284. package/dist/esm/utils/mapMarketPrice.js.map +1 -0
  285. package/dist/esm/utils/mapOrder.d.ts +49 -0
  286. package/dist/esm/utils/mapOrder.d.ts.map +1 -0
  287. package/dist/esm/utils/mapOrder.js +182 -0
  288. package/dist/esm/utils/mapOrder.js.map +1 -0
  289. package/dist/esm/utils/mapPosition.d.ts +12 -0
  290. package/dist/esm/utils/mapPosition.d.ts.map +1 -0
  291. package/dist/esm/utils/mapPosition.js +30 -0
  292. package/dist/esm/utils/mapPosition.js.map +1 -0
  293. package/dist/esm/utils/marketDisplay.d.ts +17 -0
  294. package/dist/esm/utils/marketDisplay.d.ts.map +1 -0
  295. package/dist/esm/utils/marketDisplay.js +31 -0
  296. package/dist/esm/utils/marketDisplay.js.map +1 -0
  297. package/dist/esm/utils/orderFormatting.d.ts +50 -0
  298. package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
  299. package/dist/esm/utils/orderFormatting.js +78 -0
  300. package/dist/esm/utils/orderFormatting.js.map +1 -0
  301. package/dist/esm/utils/priceStepToAggregation.d.ts +20 -0
  302. package/dist/esm/utils/priceStepToAggregation.d.ts.map +1 -0
  303. package/dist/esm/utils/priceStepToAggregation.js +51 -0
  304. package/dist/esm/utils/priceStepToAggregation.js.map +1 -0
  305. package/dist/esm/utils/spotBalance.d.ts +18 -0
  306. package/dist/esm/utils/spotBalance.d.ts.map +1 -0
  307. package/dist/esm/utils/spotBalance.js +40 -0
  308. package/dist/esm/utils/spotBalance.js.map +1 -0
  309. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +61 -0
  310. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  311. package/dist/esm/websocket/HyperliquidWsProvider.js +406 -0
  312. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -0
  313. package/dist/esm/websocket/index.d.ts +2 -0
  314. package/dist/esm/websocket/index.d.ts.map +1 -0
  315. package/dist/esm/websocket/index.js +3 -0
  316. package/dist/esm/websocket/index.js.map +1 -0
  317. package/dist/types/HyperliquidProvider.d.ts +64 -0
  318. package/dist/types/HyperliquidProvider.d.ts.map +1 -0
  319. package/dist/types/accountConfig.d.ts +10 -0
  320. package/dist/types/accountConfig.d.ts.map +1 -0
  321. package/dist/types/accountSummary.d.ts +10 -0
  322. package/dist/types/accountSummary.d.ts.map +1 -0
  323. package/dist/types/constants.d.ts +40 -0
  324. package/dist/types/constants.d.ts.map +1 -0
  325. package/dist/types/context.d.ts +26 -0
  326. package/dist/types/context.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +31 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/services/getAccount.d.ts +28 -0
  330. package/dist/types/services/getAccount.d.ts.map +1 -0
  331. package/dist/types/services/getActivity.d.ts +33 -0
  332. package/dist/types/services/getActivity.d.ts.map +1 -0
  333. package/dist/types/services/getFills.d.ts +34 -0
  334. package/dist/types/services/getFills.d.ts.map +1 -0
  335. package/dist/types/services/getOrder.d.ts +17 -0
  336. package/dist/types/services/getOrder.d.ts.map +1 -0
  337. package/dist/types/services/getOrders.d.ts +27 -0
  338. package/dist/types/services/getOrders.d.ts.map +1 -0
  339. package/dist/types/services/getPositions.d.ts +26 -0
  340. package/dist/types/services/getPositions.d.ts.map +1 -0
  341. package/dist/types/signers/HyperliquidAgentStore.d.ts +54 -0
  342. package/dist/types/signers/HyperliquidAgentStore.d.ts.map +1 -0
  343. package/dist/types/signers/index.d.ts +4 -0
  344. package/dist/types/signers/index.d.ts.map +1 -0
  345. package/dist/types/signers/signActions.d.ts +15 -0
  346. package/dist/types/signers/signActions.d.ts.map +1 -0
  347. package/dist/types/types/account.d.ts +64 -0
  348. package/dist/types/types/account.d.ts.map +1 -0
  349. package/dist/types/types/action.d.ts +61 -0
  350. package/dist/types/types/action.d.ts.map +1 -0
  351. package/dist/types/types/asset.d.ts +82 -0
  352. package/dist/types/types/asset.d.ts.map +1 -0
  353. package/dist/types/types/fill.d.ts +21 -0
  354. package/dist/types/types/fill.d.ts.map +1 -0
  355. package/dist/types/types/index.d.ts +8 -0
  356. package/dist/types/types/index.d.ts.map +1 -0
  357. package/dist/types/types/ledger.d.ts +93 -0
  358. package/dist/types/types/ledger.d.ts.map +1 -0
  359. package/dist/types/types/order.d.ts +51 -0
  360. package/dist/types/types/order.d.ts.map +1 -0
  361. package/dist/types/types/ws.d.ts +43 -0
  362. package/dist/types/types/ws.d.ts.map +1 -0
  363. package/dist/types/utils/assetId.d.ts +20 -0
  364. package/dist/types/utils/assetId.d.ts.map +1 -0
  365. package/dist/types/utils/index.d.ts +15 -0
  366. package/dist/types/utils/index.d.ts.map +1 -0
  367. package/dist/types/utils/infoClient.d.ts +28 -0
  368. package/dist/types/utils/infoClient.d.ts.map +1 -0
  369. package/dist/types/utils/liquidation.d.ts +48 -0
  370. package/dist/types/utils/liquidation.d.ts.map +1 -0
  371. package/dist/types/utils/mapActivity.d.ts +15 -0
  372. package/dist/types/utils/mapActivity.d.ts.map +1 -0
  373. package/dist/types/utils/mapFill.d.ts +11 -0
  374. package/dist/types/utils/mapFill.d.ts.map +1 -0
  375. package/dist/types/utils/mapMarket.d.ts +12 -0
  376. package/dist/types/utils/mapMarket.d.ts.map +1 -0
  377. package/dist/types/utils/mapMarketPrice.d.ts +10 -0
  378. package/dist/types/utils/mapMarketPrice.d.ts.map +1 -0
  379. package/dist/types/utils/mapOrder.d.ts +49 -0
  380. package/dist/types/utils/mapOrder.d.ts.map +1 -0
  381. package/dist/types/utils/mapPosition.d.ts +12 -0
  382. package/dist/types/utils/mapPosition.d.ts.map +1 -0
  383. package/dist/types/utils/marketDisplay.d.ts +17 -0
  384. package/dist/types/utils/marketDisplay.d.ts.map +1 -0
  385. package/dist/types/utils/orderFormatting.d.ts +50 -0
  386. package/dist/types/utils/orderFormatting.d.ts.map +1 -0
  387. package/dist/types/utils/priceStepToAggregation.d.ts +20 -0
  388. package/dist/types/utils/priceStepToAggregation.d.ts.map +1 -0
  389. package/dist/types/utils/spotBalance.d.ts +18 -0
  390. package/dist/types/utils/spotBalance.d.ts.map +1 -0
  391. package/dist/types/websocket/HyperliquidWsProvider.d.ts +61 -0
  392. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  393. package/dist/types/websocket/index.d.ts +2 -0
  394. package/dist/types/websocket/index.d.ts.map +1 -0
  395. package/package.json +73 -0
  396. package/src/HyperliquidProvider.ts +381 -0
  397. package/src/accountConfig.ts +89 -0
  398. package/src/accountSummary.ts +32 -0
  399. package/src/constants.ts +47 -0
  400. package/src/context.ts +41 -0
  401. package/src/index.ts +45 -0
  402. package/src/services/getAccount.ts +263 -0
  403. package/src/services/getActivity.ts +162 -0
  404. package/src/services/getFills.ts +96 -0
  405. package/src/services/getOrder.ts +61 -0
  406. package/src/services/getOrders.ts +101 -0
  407. package/src/services/getPositions.ts +76 -0
  408. package/src/signers/HyperliquidAgentStore.ts +176 -0
  409. package/src/signers/index.ts +5 -0
  410. package/src/signers/signActions.ts +78 -0
  411. package/src/types/account.ts +74 -0
  412. package/src/types/action.ts +66 -0
  413. package/src/types/asset.ts +96 -0
  414. package/src/types/fill.ts +24 -0
  415. package/src/types/index.ts +11 -0
  416. package/src/types/ledger.ts +111 -0
  417. package/src/types/order.ts +56 -0
  418. package/src/types/ws.ts +47 -0
  419. package/src/utils/assetId.ts +38 -0
  420. package/src/utils/index.ts +38 -0
  421. package/src/utils/infoClient.ts +111 -0
  422. package/src/utils/liquidation.ts +74 -0
  423. package/src/utils/mapActivity.ts +182 -0
  424. package/src/utils/mapFill.ts +48 -0
  425. package/src/utils/mapMarket.ts +33 -0
  426. package/src/utils/mapMarketPrice.ts +33 -0
  427. package/src/utils/mapOrder.ts +218 -0
  428. package/src/utils/mapPosition.ts +40 -0
  429. package/src/utils/marketDisplay.ts +38 -0
  430. package/src/utils/orderFormatting.ts +93 -0
  431. package/src/utils/priceStepToAggregation.ts +58 -0
  432. package/src/utils/spotBalance.ts +51 -0
  433. package/src/websocket/HyperliquidWsProvider.ts +533 -0
  434. package/src/websocket/index.ts +3 -0
@@ -0,0 +1,61 @@
1
+ import { type PerpsSDKClient, type ProviderGetQuoteParams, type QuoteListener, WsProviderBase, type WsProviderFactory } from '@lifi/perps-sdk';
2
+ import { type Subscription } from '@lifi/perps-types';
3
+ /**
4
+ * `WsProviderFactory` constructor for Hyperliquid — pass to
5
+ * `new PerpsWsClient(client, { wsProviders: { hyperliquid: hyperliquidWsProvider() } })`.
6
+ *
7
+ * Derives the active sub-DEX set from the `markets` list `PerpsWsClient`
8
+ * passes in (the provider's own key and `'spot'` are excluded — they
9
+ * aren't sub-DEX subscriptions on the HL wire). Higher-order shape mirrors
10
+ * `lighterWsProvider(options)` so the two factories register identically.
11
+ *
12
+ * @public
13
+ */
14
+ export declare const hyperliquidWsProvider: () => WsProviderFactory;
15
+ /**
16
+ * Hyperliquid realtime {@link WsProvider}: multiplexes prices, positions,
17
+ * orders, fills and spot balances over a single {@link ReconnectingWebSocket}.
18
+ * Construct via {@link hyperliquidWsProvider}.
19
+ *
20
+ * `orderUpdates` supports a single address per provider instance: HL delivers
21
+ * those frames without a user field, so frames from two concurrent address
22
+ * subscriptions on one socket cannot be attributed. Subscribing a second
23
+ * address rejects while the first still has listeners; once the first is
24
+ * released, an address switch reclaims the channel immediately.
25
+ *
26
+ * @public
27
+ */
28
+ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
29
+ private orderUpdatesKey;
30
+ private readonly subDexes;
31
+ private readonly client;
32
+ private readonly registry;
33
+ private midsBySubDex;
34
+ constructor(wsUrl: string, providerKey: string, subDexes: string[], client?: PerpsSDKClient);
35
+ subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
36
+ protected openChannel(sub: Subscription): Promise<() => void>;
37
+ /**
38
+ * Enforce the single-address `orderUpdates` invariant (HL frames carry no
39
+ * user field, so concurrent address subscriptions are unattributable). A
40
+ * listener-free lingering channel for another address is torn down eagerly
41
+ * so a wallet switch needn't wait out the teardown linger; a live one throws.
42
+ */
43
+ private claimOrderUpdatesKey;
44
+ /** Build sub-key + payload pairs for each sub-dex allMids subscription. */
45
+ private getPriceSubEntries;
46
+ protected onClose(): void;
47
+ protected sendSubscribe(payload: object): void;
48
+ protected toKey(sub: Subscription): string;
49
+ private toHlPayload;
50
+ protected handleMessage(raw: string): void;
51
+ private handleAllMids;
52
+ /** Latest mid per `Market.id`, merged across sub-dex allMids frames. */
53
+ private mergedMids;
54
+ private handleL2Book;
55
+ private handleCandle;
56
+ private handleOrderUpdates;
57
+ private handleUserFills;
58
+ private handleAllDexsClearinghouseState;
59
+ private handleSpotState;
60
+ }
61
+ //# sourceMappingURL=HyperliquidWsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA8B1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,QAC5B,iBAIH,CAAA;AAEH;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,YAAY,CAA4C;gBAG9D,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,cAAc;IAWnB,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAgDnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB;cAaP,OAAO,IAAI,IAAI;IAKlC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAmB1C,OAAO,CAAC,WAAW;IAqCnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IAyDnC,OAAO,CAAC,aAAa;IAYrB,wEAAwE;IACxE,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,+BAA+B;IAkBvC,OAAO,CAAC,eAAe;CAaxB"}
@@ -0,0 +1,406 @@
1
+ import { getMarketRegistry, isActiveOrderStatus, ReconnectingWebSocket, resolveSubscribeQuote, WsProviderBase, wsLog, } from '@lifi/perps-sdk';
2
+ import { OrderSide, OrderType, } from '@lifi/perps-types';
3
+ import { HYPERLIQUID_FEE_TIER_FALLBACK } from '../constants.js';
4
+ import { isOpenAssetPosition, isTriggerOrder, mapFill, mapOrderStatus, mapOrderType, mapPosition, priceStepToAggregation, spotAssetFromToken, spotBalance, spotPriceById, } from '../utils/index.js';
5
+ /** HL's `l2Book` returns at most this many levels per side (slow/default mode). */
6
+ const HL_L2_BOOK_MAX_LEVELS_PER_SIDE = 20;
7
+ /**
8
+ * `WsProviderFactory` constructor for Hyperliquid — pass to
9
+ * `new PerpsWsClient(client, { wsProviders: { hyperliquid: hyperliquidWsProvider() } })`.
10
+ *
11
+ * Derives the active sub-DEX set from the `markets` list `PerpsWsClient`
12
+ * passes in (the provider's own key and `'spot'` are excluded — they
13
+ * aren't sub-DEX subscriptions on the HL wire). Higher-order shape mirrors
14
+ * `lighterWsProvider(options)` so the two factories register identically.
15
+ *
16
+ * @public
17
+ */
18
+ export const hyperliquidWsProvider = () => ({ provider, wsUrl, markets, client }) => {
19
+ const subDexes = markets.filter((m) => m !== provider && m !== 'spot');
20
+ return new HyperliquidWsProvider(wsUrl, provider, subDexes, client);
21
+ };
22
+ /**
23
+ * Hyperliquid realtime {@link WsProvider}: multiplexes prices, positions,
24
+ * orders, fills and spot balances over a single {@link ReconnectingWebSocket}.
25
+ * Construct via {@link hyperliquidWsProvider}.
26
+ *
27
+ * `orderUpdates` supports a single address per provider instance: HL delivers
28
+ * those frames without a user field, so frames from two concurrent address
29
+ * subscriptions on one socket cannot be attributed. Subscribing a second
30
+ * address rejects while the first still has listeners; once the first is
31
+ * released, an address switch reclaims the channel immediately.
32
+ *
33
+ * @public
34
+ */
35
+ export class HyperliquidWsProvider extends WsProviderBase {
36
+ orderUpdatesKey;
37
+ subDexes;
38
+ client;
39
+ registry;
40
+ midsBySubDex = new Map();
41
+ constructor(wsUrl, providerKey, subDexes, client) {
42
+ super(new ReconnectingWebSocket(wsUrl, { pingPayload: '{"method":"ping"}' }), providerKey);
43
+ this.subDexes = subDexes;
44
+ this.client = client;
45
+ this.registry = client && getMarketRegistry(client, providerKey);
46
+ }
47
+ async subscribeQuote(params, onQuote) {
48
+ const client = this.client;
49
+ if (client === undefined) {
50
+ throw new Error('HyperliquidWsProvider: PerpsSDKClient not provided; cannot stream quotes. ' +
51
+ 'Construct via `hyperliquidWsProvider()` and register with PerpsWsClient.');
52
+ }
53
+ return resolveSubscribeQuote(client, this.providerKey, this, params, HYPERLIQUID_FEE_TIER_FALLBACK, onQuote);
54
+ }
55
+ async openChannel(sub) {
56
+ // Must run synchronously, before any await, so two concurrent opens
57
+ // cannot both pass the exclusivity check.
58
+ if (sub.channel === 'orderUpdates') {
59
+ this.claimOrderUpdatesKey(this.toKey(sub));
60
+ }
61
+ await this.registry?.sync();
62
+ // Prices require multi-sub-dex allMids subscriptions under one logical key.
63
+ if (sub.channel === 'prices') {
64
+ const entries = this.getPriceSubEntries();
65
+ for (const { subKey, payload } of entries) {
66
+ await this.registerSub(subKey, payload);
67
+ }
68
+ await this.rws.ready();
69
+ return () => {
70
+ for (const { subKey, payload } of entries) {
71
+ this.unregisterSub(subKey);
72
+ this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
73
+ }
74
+ this.midsBySubDex.clear();
75
+ };
76
+ }
77
+ // All other channels: single WS subscription per key
78
+ const key = this.toKey(sub);
79
+ const payload = this.toHlPayload(sub);
80
+ await this.registerSub(key, payload);
81
+ await this.rws.ready();
82
+ return () => {
83
+ this.unregisterSub(key);
84
+ if (this.orderUpdatesKey === key) {
85
+ this.orderUpdatesKey = undefined;
86
+ }
87
+ this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
88
+ };
89
+ }
90
+ /**
91
+ * Enforce the single-address `orderUpdates` invariant (HL frames carry no
92
+ * user field, so concurrent address subscriptions are unattributable). A
93
+ * listener-free lingering channel for another address is torn down eagerly
94
+ * so a wallet switch needn't wait out the teardown linger; a live one throws.
95
+ */
96
+ claimOrderUpdatesKey(key) {
97
+ const active = this.orderUpdatesKey;
98
+ if (active !== undefined &&
99
+ active !== key &&
100
+ !this.closeChannelIfIdle(active)) {
101
+ throw new Error(`Hyperliquid supports one orderUpdates address per provider instance ` +
102
+ `(frames carry no user field). Unsubscribe ` +
103
+ `${active.slice('orderUpdates:'.length)} before subscribing ` +
104
+ `${key.slice('orderUpdates:'.length)}.`);
105
+ }
106
+ this.orderUpdatesKey = key;
107
+ }
108
+ /** Build sub-key + payload pairs for each sub-dex allMids subscription. */
109
+ getPriceSubEntries() {
110
+ return [
111
+ {
112
+ subKey: 'allMids:default',
113
+ payload: { type: 'allMids' },
114
+ },
115
+ ...this.subDexes.map((dex) => ({
116
+ subKey: `allMids:${dex}`,
117
+ payload: { type: 'allMids', dex },
118
+ })),
119
+ ];
120
+ }
121
+ onClose() {
122
+ this.midsBySubDex.clear();
123
+ this.orderUpdatesKey = undefined;
124
+ }
125
+ sendSubscribe(payload) {
126
+ this.rws.send(JSON.stringify({ method: 'subscribe', subscription: payload }));
127
+ }
128
+ toKey(sub) {
129
+ switch (sub.channel) {
130
+ case 'prices':
131
+ return 'allMids';
132
+ case 'orderbook':
133
+ return `l2Book:${sub.marketId}`;
134
+ case 'candle':
135
+ return `candle:${sub.marketId}:${sub.interval}`;
136
+ case 'orderUpdates':
137
+ return `orderUpdates:${sub.address.toLowerCase()}`;
138
+ case 'fills':
139
+ return `userFills:${sub.address.toLowerCase()}`;
140
+ case 'positions':
141
+ return `positions:${sub.address.toLowerCase()}`;
142
+ case 'spotBalances':
143
+ return `spotState:${sub.address.toLowerCase()}`;
144
+ }
145
+ }
146
+ toHlPayload(sub) {
147
+ switch (sub.channel) {
148
+ case 'prices':
149
+ // Prices are handled via getPriceSubEntries in subscribe()
150
+ // and never reach toHlPayload, but TS requires exhaustive cases.
151
+ return { type: 'allMids' };
152
+ case 'orderbook':
153
+ return {
154
+ type: 'l2Book',
155
+ coin: sub.marketId,
156
+ // HL's l2Book ignores any level-count field; it returns up to 20
157
+ // levels/side and controls granularity via nSigFigs (+ mantissa,
158
+ // valid only when nSigFigs === 5).
159
+ ...(sub.priceStep !== undefined
160
+ ? priceStepToAggregation(sub.priceStep, this.mergedMids().get(sub.marketId) ?? Number.NaN)
161
+ : {}),
162
+ };
163
+ case 'candle':
164
+ return {
165
+ type: 'candle',
166
+ coin: sub.marketId,
167
+ interval: sub.interval,
168
+ };
169
+ case 'orderUpdates':
170
+ return { type: 'orderUpdates', user: sub.address };
171
+ case 'fills':
172
+ return { type: 'userFills', user: sub.address };
173
+ case 'positions':
174
+ return { type: 'allDexsClearinghouseState', user: sub.address };
175
+ case 'spotBalances':
176
+ return { type: 'spotState', user: sub.address };
177
+ }
178
+ }
179
+ handleMessage(raw) {
180
+ let msg;
181
+ try {
182
+ msg = JSON.parse(raw);
183
+ }
184
+ catch {
185
+ wsLog.parseFailure(this.providerKey, raw);
186
+ return;
187
+ }
188
+ if (!msg.channel ||
189
+ msg.channel === 'pong' ||
190
+ msg.channel === 'subscriptionResponse') {
191
+ return;
192
+ }
193
+ if (msg.channel === 'error') {
194
+ wsLog.serverError(this.providerKey, String(msg.data));
195
+ return;
196
+ }
197
+ if (!isValidHlFrame(msg.channel, msg.data)) {
198
+ wsLog.parseFailure(this.providerKey, raw);
199
+ return;
200
+ }
201
+ try {
202
+ switch (msg.channel) {
203
+ case 'allMids':
204
+ this.handleAllMids(msg.data);
205
+ break;
206
+ case 'l2Book':
207
+ this.handleL2Book(msg.data);
208
+ break;
209
+ case 'candle':
210
+ this.handleCandle(msg.data);
211
+ break;
212
+ case 'orderUpdates':
213
+ this.handleOrderUpdates(msg.data);
214
+ break;
215
+ case 'userFills':
216
+ this.handleUserFills(msg.data);
217
+ break;
218
+ case 'allDexsClearinghouseState':
219
+ this.handleAllDexsClearinghouseState(msg.data);
220
+ break;
221
+ case 'spotState':
222
+ this.handleSpotState(msg.data);
223
+ break;
224
+ }
225
+ }
226
+ catch (error) {
227
+ wsLog.handlerFailure(this.providerKey, error);
228
+ }
229
+ }
230
+ handleAllMids(data) {
231
+ const subDexKey = data.dex || 'default';
232
+ this.midsBySubDex.set(subDexKey, data.mids);
233
+ const merged = {};
234
+ for (const mids of this.midsBySubDex.values()) {
235
+ Object.assign(merged, mids);
236
+ }
237
+ this.emit('allMids', { channel: 'prices', data: merged });
238
+ }
239
+ /** Latest mid per `Market.id`, merged across sub-dex allMids frames. */
240
+ mergedMids() {
241
+ const map = new Map();
242
+ for (const mids of this.midsBySubDex.values()) {
243
+ for (const [id, mid] of Object.entries(mids)) {
244
+ map.set(id, Number(mid));
245
+ }
246
+ }
247
+ return map;
248
+ }
249
+ handleL2Book(data) {
250
+ this.emit(`l2Book:${data.coin}`, {
251
+ channel: 'orderbook',
252
+ data: {
253
+ provider: this.providerKey,
254
+ marketId: data.coin,
255
+ bids: data.levels[0]
256
+ .slice(0, HL_L2_BOOK_MAX_LEVELS_PER_SIDE)
257
+ .map((l) => ({ price: l.px, size: l.sz })),
258
+ asks: data.levels[1]
259
+ .slice(0, HL_L2_BOOK_MAX_LEVELS_PER_SIDE)
260
+ .map((l) => ({ price: l.px, size: l.sz })),
261
+ timestamp: data.time,
262
+ },
263
+ });
264
+ }
265
+ handleCandle(data) {
266
+ this.emit(`candle:${data.s}:${data.i}`, {
267
+ channel: 'candle',
268
+ data: {
269
+ t: data.t,
270
+ o: data.o,
271
+ h: data.h,
272
+ l: data.l,
273
+ c: data.c,
274
+ v: data.v,
275
+ },
276
+ });
277
+ }
278
+ handleOrderUpdates(data) {
279
+ // Untagged frame: attributable only via the single-address invariant.
280
+ const key = this.orderUpdatesKey;
281
+ if (key === undefined) {
282
+ return;
283
+ }
284
+ const openOrders = [];
285
+ const triggerOrders = [];
286
+ const terminated = [];
287
+ for (const detail of data) {
288
+ const o = detail.order;
289
+ const orderId = String(o.oid);
290
+ if (!isActiveOrderStatus(mapOrderStatus(detail.status))) {
291
+ terminated.push(orderId);
292
+ continue;
293
+ }
294
+ const type = mapOrderType(o.orderType);
295
+ // A miss warns once and schedules a cooldown-gated registry refetch
296
+ // (the id may have listed after the snapshot); skip just this item.
297
+ const market = this.registry?.get(o.coin);
298
+ if (!market) {
299
+ continue;
300
+ }
301
+ const createdAt = new Date(o.timestamp).toISOString();
302
+ if (isTriggerOrder(o)) {
303
+ const isLimit = type === OrderType.TAKE_PROFIT_LIMIT || type === OrderType.STOP_LIMIT;
304
+ triggerOrders.push({
305
+ orderId,
306
+ market,
307
+ type,
308
+ size: o.sz,
309
+ triggerPrice: o.triggerPx ?? '0',
310
+ ...(isLimit ? { limitPrice: o.limitPx } : {}),
311
+ label: o.triggerCondition,
312
+ createdAt,
313
+ });
314
+ }
315
+ else {
316
+ const filled = parseFloat(o.origSz) - parseFloat(o.sz);
317
+ openOrders.push({
318
+ orderId,
319
+ market,
320
+ side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
321
+ type,
322
+ size: o.sz,
323
+ price: o.limitPx,
324
+ filledSize: filled.toString(),
325
+ reduceOnly: o.reduceOnly ?? false,
326
+ createdAt,
327
+ });
328
+ }
329
+ }
330
+ this.emit(key, {
331
+ channel: 'orderUpdates',
332
+ data: { openOrders, triggerOrders, terminated },
333
+ });
334
+ }
335
+ handleUserFills(data) {
336
+ const items = data.fills.flatMap((f) => {
337
+ const market = this.registry?.get(f.coin);
338
+ return market ? [mapFill(f, market)] : [];
339
+ });
340
+ this.emit(`userFills:${data.user.toLowerCase()}`, {
341
+ channel: 'fills',
342
+ data: items,
343
+ });
344
+ }
345
+ handleAllDexsClearinghouseState(data) {
346
+ const positions = data.clearinghouseStates.flatMap(([, state]) => state.assetPositions.flatMap((ap) => {
347
+ if (!isOpenAssetPosition(ap)) {
348
+ return [];
349
+ }
350
+ const market = this.registry?.get(ap.position.coin);
351
+ return market ? [mapPosition(ap, market)] : [];
352
+ }));
353
+ this.emit(`positions:${data.user.toLowerCase()}`, {
354
+ channel: 'positions',
355
+ data: positions,
356
+ });
357
+ }
358
+ handleSpotState(data) {
359
+ const priceById = spotPriceById(this.registry?.markets ?? [], this.mergedMids());
360
+ this.emit(`spotState:${data.user.toLowerCase()}`, {
361
+ channel: 'spotBalances',
362
+ data: data.spotState.balances.map((b) => ({
363
+ ...spotBalance(spotAssetFromToken(b), b.total, priceById),
364
+ locked: b.hold,
365
+ })),
366
+ });
367
+ }
368
+ }
369
+ const isObject = (v) => typeof v === 'object' && v !== null;
370
+ /**
371
+ * Minimal presence/type check of the channel-discriminating and required
372
+ * fields the matching handler dereferences without its own guard. A frame
373
+ * that parses but fails this is a bad frame (log + skip), distinct from a
374
+ * handler that throws on otherwise-shaped data. Unknown channels pass through
375
+ * to the dispatch switch, which silently ignores them.
376
+ */
377
+ function isValidHlFrame(channel, data) {
378
+ if (!isObject(data)) {
379
+ return false;
380
+ }
381
+ switch (channel) {
382
+ case 'allMids':
383
+ return isObject(data.mids);
384
+ case 'l2Book':
385
+ return (typeof data.coin === 'string' &&
386
+ Array.isArray(data.levels) &&
387
+ Array.isArray(data.levels[0]) &&
388
+ Array.isArray(data.levels[1]) &&
389
+ typeof data.time === 'number');
390
+ case 'candle':
391
+ return typeof data.s === 'string' && typeof data.i === 'string';
392
+ case 'orderUpdates':
393
+ return Array.isArray(data);
394
+ case 'userFills':
395
+ return typeof data.user === 'string' && Array.isArray(data.fills);
396
+ case 'allDexsClearinghouseState':
397
+ return (typeof data.user === 'string' && Array.isArray(data.clearinghouseStates));
398
+ case 'spotState':
399
+ return (typeof data.user === 'string' &&
400
+ isObject(data.spotState) &&
401
+ Array.isArray(data.spotState.balances));
402
+ default:
403
+ return true;
404
+ }
405
+ }
406
+ //# sourceMappingURL=HyperliquidWsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperliquidWsProvider.js","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { HyperliquidWsProvider } from './HyperliquidWsProvider.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/websocket/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,3 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: package-internal barrel.
2
+ export { HyperliquidWsProvider } from './HyperliquidWsProvider.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/websocket/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { type PerpsProviderPlugin, type StorageAdapter } from '@lifi/perps-sdk';
2
+ import { type Address, type Hex } from 'viem';
3
+ import { type HyperliquidAgent } from './signers/HyperliquidAgentStore.js';
4
+ /**
5
+ * Options for {@link hyperliquidProvider}.
6
+ *
7
+ * @public
8
+ */
9
+ export interface HyperliquidProviderOptions {
10
+ /**
11
+ * Base URL for the Hyperliquid REST surface. Defaults to
12
+ * `https://api.hyperliquid.xyz`. Override to point at a custom or
13
+ * third-party endpoint — e.g. a reverse proxy, a self-hosted mirror, or a
14
+ * rate-limit-managed gateway in front of Hyperliquid.
15
+ */
16
+ apiUrl?: string;
17
+ /**
18
+ * Storage adapter for the user's per-address Hyperliquid agent keypair.
19
+ * Defaults to browser `localStorage`. Pass a custom adapter for SSR /
20
+ * non-browser hosts or encrypted storage.
21
+ */
22
+ storage?: StorageAdapter;
23
+ }
24
+ /**
25
+ * Hyperliquid provider plugin extended with agent-keypair lifecycle methods.
26
+ * Hyperliquid signs trading actions with a per-user agent wallet the user
27
+ * approves via `APPROVE_AGENT`; the plugin owns that keypair's generation,
28
+ * persistence, and revocation. The base {@link PerpsProviderPlugin} contract
29
+ * stays provider-agnostic — this extension is opt-in for callers that
30
+ * explicitly type against it (e.g. to surface a "revoke agent" affordance).
31
+ */
32
+ export interface HyperliquidPerpsProvider extends PerpsProviderPlugin {
33
+ /** Resolve the agent wallet address, throwing if none has been created. */
34
+ getAgentAddress(address: Address): Promise<Address>;
35
+ /** Whether an agent keypair exists for the user address. */
36
+ hasAgent(address: Address): Promise<boolean>;
37
+ /** Remove the user's agent keypair (revoke local authorization). */
38
+ removeAgent(address: Address): Promise<void>;
39
+ /** Import an existing agent keypair for the user address. */
40
+ importAgent(address: Address, privateKey: Hex): Promise<HyperliquidAgent>;
41
+ }
42
+ /**
43
+ * Factory for the Hyperliquid {@link PerpsProviderPlugin}.
44
+ *
45
+ * Account-specific state is read direct from `${apiUrl}/info`; enriched asset
46
+ * metadata and public/shared data come from the LI.FI backend (Valkey-cached).
47
+ * Pass to `createPerpsClient({ providers: [hyperliquidProvider()] })` and look
48
+ * up via `client.getProvider('hyperliquid')`.
49
+ *
50
+ * Write actions are EIP-712 typed data signed by the user's Hyperliquid agent
51
+ * keypair; the plugin owns that keypair (generation, storage, revocation) and
52
+ * dispatches the agent-signed arm via `signActions`.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * const client = createPerpsClient({
57
+ * integrator: 'my-app',
58
+ * providers: [hyperliquidProvider()],
59
+ * })
60
+ * ```
61
+ * @public
62
+ */
63
+ export declare function hyperliquidProvider(options?: HyperliquidProviderOptions): HyperliquidPerpsProvider;
64
+ //# sourceMappingURL=HyperliquidProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperliquidProvider.d.ts","sourceRoot":"","sources":["../../src/HyperliquidProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EAYxB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAuBxB,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAa,MAAM,MAAM,CAAA;AAgBxD,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,oCAAoC,CAAA;AAO3C;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,2EAA2E;IAC3E,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5C,oEAAoE;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,6DAA6D;IAC7D,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,wBAAwB,CA0P1B"}
@@ -0,0 +1,10 @@
1
+ import type { AccountConfigSetting, HyperliquidAccountConfig, ProviderAction } from '@lifi/perps-types';
2
+ /**
3
+ * Project the union of Hyperliquid setup + options descriptors against the
4
+ * typed `HyperliquidAccountConfig`. Produces exactly one
5
+ * `AccountConfigSetting` per descriptor, in `setup`-then-`options` order.
6
+ *
7
+ * @public
8
+ */
9
+ export declare function projectHyperliquidConfigSettings(config: HyperliquidAccountConfig, setup: ProviderAction[], options: ProviderAction[]): AccountConfigSetting[];
10
+ //# sourceMappingURL=accountConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAoE1B;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
@@ -0,0 +1,10 @@
1
+ import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-types';
2
+ /**
3
+ * Roll a Hyperliquid {@link AccountResponse} up into an {@link AccountSummary},
4
+ * branching on the abstraction mode so the gross/free meaning of the collateral
5
+ * rows is interpreted correctly.
6
+ *
7
+ * @public
8
+ */
9
+ export declare function summarizeHyperliquidAccount(account: AccountResponse, positions: Position[]): AccountSummary;
10
+ //# sourceMappingURL=accountSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../src/accountSummary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAc1B;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,QAAQ,EAAE,GACpB,cAAc,CAEhB"}
@@ -0,0 +1,40 @@
1
+ import type { FeeTier } from '@lifi/perps-types';
2
+ /**
3
+ * Hyperliquid provider key (exported from the package index as
4
+ * `HYPERLIQUID_PROVIDER_KEY`).
5
+ *
6
+ * @public
7
+ */
8
+ export declare const PROVIDER_KEY = "hyperliquid";
9
+ /**
10
+ * Default Hyperliquid REST base URL.
11
+ *
12
+ * @public
13
+ */
14
+ export declare const DEFAULT_HYPERLIQUID_API_URL = "https://api.hyperliquid.xyz";
15
+ /**
16
+ * Approximate published baseline maker/taker fee tier for Hyperliquid, used to
17
+ * seed fee math before the live account `feeTier` resolves. Rates are fractions
18
+ * (not basis points): `0.00015` = 0.015% maker, `0.00045` = 0.045% taker.
19
+ *
20
+ * @public
21
+ */
22
+ export declare const HYPERLIQUID_FEE_TIER_FALLBACK: FeeTier;
23
+ /** @internal */
24
+ export declare const DEFAULT_HISTORY_LIMIT = 50;
25
+ /** @internal */
26
+ export declare const MAX_HISTORY_LIMIT = 200;
27
+ /** @internal */
28
+ export declare const NINETY_DAYS_MS: number;
29
+ /**
30
+ * Main perps DEX uses an empty sub-dex name on the wire; surfaced as
31
+ * 'hyperliquid' in normalised market IDs.
32
+ *
33
+ * @internal
34
+ */
35
+ export declare const MAIN_DEX_NAME = "";
36
+ /** @internal */
37
+ export declare const MAIN_MARKET_ID = "hyperliquid";
38
+ /** @internal */
39
+ export declare const SPOT_MARKET_ID = "spot";
40
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAEzC;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,gCAAgC,CAAA;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,OAG3C,CAAA;AAED,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,MAAM,CAAA;AACpC,gBAAgB;AAChB,eAAO,MAAM,cAAc,QAA2B,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,KAAK,CAAA;AAC/B,gBAAgB;AAChB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,gBAAgB;AAChB,eAAO,MAAM,cAAc,SAAS,CAAA"}