@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,65 @@
1
+ import { PerpsError } from '@lifi/perps-sdk';
2
+ import { ActionType, PerpsErrorCode } from '@lifi/perps-types';
3
+ function assertNever(value) {
4
+ throw new Error(`Unreachable: exhaustiveness check failed for value ${JSON.stringify(value)}`);
5
+ }
6
+ /**
7
+ * Project a single Hyperliquid descriptor against the typed
8
+ * `HyperliquidAccountConfig` into an `AccountConfigSetting`.
9
+ *
10
+ * Mapping table:
11
+ *
12
+ * | descriptor.type | projected values
13
+ * |-----------------------|----------------------------------------------
14
+ * | APPROVE_AGENT | [] (no parameters)
15
+ * | APPROVE_BUILDER_FEE | [] (no parameters)
16
+ * | ACCOUNT_MODE | [{ name: 'mode', value: config.abstractionMode }]
17
+ *
18
+ * The switch is exhaustive over `ActionType` so enum additions force a
19
+ * compile error in the `default` arm. ActionTypes that are not valid on
20
+ * `Provider.setup` / `Provider.options` for Hyperliquid throw at runtime.
21
+ */
22
+ function projectHyperliquidDescriptor(descriptor, config) {
23
+ switch (descriptor.type) {
24
+ case ActionType.APPROVE_AGENT:
25
+ case ActionType.APPROVE_BUILDER_FEE:
26
+ return { type: descriptor.type, values: [] };
27
+ case ActionType.ACCOUNT_MODE:
28
+ return {
29
+ type: descriptor.type,
30
+ values: [{ name: 'mode', value: config.abstractionMode }],
31
+ };
32
+ case ActionType.ACCOUNT_TYPE:
33
+ case ActionType.SEND_ASSET:
34
+ case ActionType.WITHDRAWAL:
35
+ case ActionType.TRANSFER:
36
+ case ActionType.PLACE_ORDER:
37
+ case ActionType.PLACE_TRIGGER_ORDER:
38
+ case ActionType.CANCEL_ORDER:
39
+ case ActionType.CANCEL_ALL_ORDERS:
40
+ case ActionType.MODIFY_ORDER:
41
+ case ActionType.UPDATE_LEVERAGE:
42
+ case ActionType.UPDATE_POSITION_MARGIN:
43
+ case ActionType.REGISTER_API_KEY:
44
+ case ActionType.APPROVE_READ_ONLY_TOKEN:
45
+ case ActionType.DEPOSIT:
46
+ case ActionType.META_VOTE:
47
+ case ActionType.META_ACCEPT_TERMS:
48
+ throw new PerpsError(PerpsErrorCode.SDKError, `Hyperliquid account-config mapper has no projection for ` +
49
+ `descriptor type '${descriptor.type}' — this ActionType is not ` +
50
+ `valid on Provider.setup / Provider.options for Hyperliquid.`);
51
+ default:
52
+ return assertNever(descriptor.type);
53
+ }
54
+ }
55
+ /**
56
+ * Project the union of Hyperliquid setup + options descriptors against the
57
+ * typed `HyperliquidAccountConfig`. Produces exactly one
58
+ * `AccountConfigSetting` per descriptor, in `setup`-then-`options` order.
59
+ *
60
+ * @public
61
+ */
62
+ export function projectHyperliquidConfigSettings(config, setup, options) {
63
+ return [...setup, ...options].map((descriptor) => projectHyperliquidDescriptor(descriptor, config));
64
+ }
65
+ //# sourceMappingURL=accountConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE9D,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,4BAA4B,CACnC,UAA0B,EAC1B,MAAgC;IAEhC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,UAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,UAAU,CAAC,mBAAmB;YACjC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAE9C,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;aAC1D,CAAA;QAEH,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,QAAQ,CAAC;QACzB,KAAK,UAAU,CAAC,WAAW,CAAC;QAC5B,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,eAAe,CAAC;QAChC,KAAK,UAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,UAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,SAAS,CAAC;QAC1B,KAAK,UAAU,CAAC,iBAAiB;YAC/B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,0DAA0D;gBACxD,oBAAoB,UAAU,CAAC,IAAI,6BAA6B;gBAChE,6DAA6D,CAChE,CAAA;QAEH;YACE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAgC,EAChC,KAAuB,EACvB,OAAyB;IAEzB,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/C,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC"}
@@ -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,22 @@
1
+ import { summarizeAccount } from '@lifi/perps-sdk';
2
+ import { HlAbstractionMode } from './types/index.js';
3
+ /**
4
+ * In `unifiedAccount`/`portfolioMargin` the whole account lives in spot, so the
5
+ * collateral rows are already gross holdings (locked margin included). In
6
+ * `disabled`/`dexAbstraction` (and the unset/standard mode) the venue rows hold
7
+ * `accountValue`, which Hyperliquid reports net of locked margin — i.e. free.
8
+ */
9
+ const isUnifiedMode = (account) => account.config.provider === 'hyperliquid' &&
10
+ (account.config.abstractionMode === HlAbstractionMode.UNIFIED_ACCOUNT ||
11
+ account.config.abstractionMode === HlAbstractionMode.PORTFOLIO_MARGIN);
12
+ /**
13
+ * Roll a Hyperliquid {@link AccountResponse} up into an {@link AccountSummary},
14
+ * branching on the abstraction mode so the gross/free meaning of the collateral
15
+ * rows is interpreted correctly.
16
+ *
17
+ * @public
18
+ */
19
+ export function summarizeHyperliquidAccount(account, positions) {
20
+ return summarizeAccount(account, positions, isUnifiedMode(account));
21
+ }
22
+ //# sourceMappingURL=accountSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountSummary.js","sourceRoot":"","sources":["../../src/accountSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAMlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CAAC,OAAwB,EAAW,EAAE,CAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,aAAa;IACzC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,KAAK,iBAAiB,CAAC,eAAe;QACnE,OAAO,CAAC,MAAM,CAAC,eAAe,KAAK,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;AAE1E;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAwB,EACxB,SAAqB;IAErB,OAAO,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AACrE,CAAC"}
@@ -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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Hyperliquid provider key (exported from the package index as
3
+ * `HYPERLIQUID_PROVIDER_KEY`).
4
+ *
5
+ * @public
6
+ */
7
+ export const PROVIDER_KEY = 'hyperliquid';
8
+ /**
9
+ * Default Hyperliquid REST base URL.
10
+ *
11
+ * @public
12
+ */
13
+ export const DEFAULT_HYPERLIQUID_API_URL = 'https://api.hyperliquid.xyz';
14
+ /**
15
+ * Approximate published baseline maker/taker fee tier for Hyperliquid, used to
16
+ * seed fee math before the live account `feeTier` resolves. Rates are fractions
17
+ * (not basis points): `0.00015` = 0.015% maker, `0.00045` = 0.045% taker.
18
+ *
19
+ * @public
20
+ */
21
+ export const HYPERLIQUID_FEE_TIER_FALLBACK = {
22
+ maker: '0.00015',
23
+ taker: '0.00045',
24
+ };
25
+ /** @internal */
26
+ export const DEFAULT_HISTORY_LIMIT = 50;
27
+ /** @internal */
28
+ export const MAX_HISTORY_LIMIT = 200;
29
+ /** @internal */
30
+ export const NINETY_DAYS_MS = 90 * 24 * 60 * 60 * 1000;
31
+ /**
32
+ * Main perps DEX uses an empty sub-dex name on the wire; surfaced as
33
+ * 'hyperliquid' in normalised market IDs.
34
+ *
35
+ * @internal
36
+ */
37
+ export const MAIN_DEX_NAME = '';
38
+ /** @internal */
39
+ export const MAIN_MARKET_ID = 'hyperliquid';
40
+ /** @internal */
41
+ export const SPOT_MARKET_ID = 'spot';
42
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAA;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,6BAA6B,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAY;IACpD,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;CACjB,CAAA;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAA;AACvC,gBAAgB;AAChB,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AACpC,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAA;AAC/B,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAC3C,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { type PerpsSDKClient } from '@lifi/perps-sdk';
2
+ /**
3
+ * Runtime context the Hyperliquid read services resolve their deps from: the
4
+ * bound {@link PerpsSDKClient} (config / fetch / retry / market lookups) and
5
+ * the resolved REST base URL. Captured once in the provider factory's closure
6
+ * via {@link HyperliquidContextRef.bind}; the read methods read it at call
7
+ * time. This is the late-bind the SDK's `bindProvider` sets up — the factory
8
+ * is constructed before the client exists.
9
+ */
10
+ export interface HyperliquidContext {
11
+ client: PerpsSDKClient;
12
+ apiUrl: string;
13
+ }
14
+ /**
15
+ * Mutable, single-assignment holder for the {@link HyperliquidContext}. The
16
+ * provider factory creates one per instance and exposes `bind`; the read
17
+ * services call {@link HyperliquidContextRef.require} at call time.
18
+ */
19
+ export declare class HyperliquidContextRef {
20
+ private readonly apiUrl;
21
+ private context;
22
+ constructor(apiUrl: string);
23
+ bind(client: PerpsSDKClient): void;
24
+ require(): HyperliquidContext;
25
+ }
26
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGjE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,OAAO,CAAgC;gBAElB,MAAM,EAAE,MAAM;IAE3C,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIlC,OAAO,IAAI,kBAAkB;CAU9B"}
@@ -0,0 +1,25 @@
1
+ import { PerpsError } from '@lifi/perps-sdk';
2
+ import { PerpsErrorCode } from '@lifi/perps-types';
3
+ /**
4
+ * Mutable, single-assignment holder for the {@link HyperliquidContext}. The
5
+ * provider factory creates one per instance and exposes `bind`; the read
6
+ * services call {@link HyperliquidContextRef.require} at call time.
7
+ */
8
+ export class HyperliquidContextRef {
9
+ apiUrl;
10
+ context;
11
+ constructor(apiUrl) {
12
+ this.apiUrl = apiUrl;
13
+ }
14
+ bind(client) {
15
+ this.context = { client, apiUrl: this.apiUrl };
16
+ }
17
+ require() {
18
+ if (this.context === undefined) {
19
+ throw new PerpsError(PerpsErrorCode.SDKError, 'hyperliquidProvider used before binding. Register it via ' +
20
+ 'createPerpsClient({ providers: [hyperliquidProvider()] }).');
21
+ }
22
+ return this.context;
23
+ }
24
+ }
25
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAelD;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAGH;IAFrB,OAAO,CAAgC;IAE/C,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,IAAI,CAAC,MAAsB;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IAChD,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,2DAA2D;gBACzD,4DAA4D,CAC/D,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hyperliquid provider plugin for `@lifi/perps-sdk`. Reads account-specific
3
+ * state directly from `${apiUrl}/info`; enriched asset metadata and
4
+ * public/shared data come from the LI.FI backend. Register the
5
+ * `hyperliquidProvider()` factory with `createPerpsClient`.
6
+ *
7
+ * @packageDocumentation
8
+ * @public
9
+ */
10
+ export { projectHyperliquidConfigSettings } from './accountConfig.js';
11
+ export { summarizeHyperliquidAccount } from './accountSummary.js';
12
+ export { DEFAULT_HYPERLIQUID_API_URL, HYPERLIQUID_FEE_TIER_FALLBACK, PROVIDER_KEY as HYPERLIQUID_PROVIDER_KEY, } from './constants.js';
13
+ export { type HyperliquidPerpsProvider, type HyperliquidProviderOptions, hyperliquidProvider, } from './HyperliquidProvider.js';
14
+ export type { GetAccountParams } from './services/getAccount.js';
15
+ export { getAccount } from './services/getAccount.js';
16
+ export type { GetActivityParams } from './services/getActivity.js';
17
+ export { getActivity } from './services/getActivity.js';
18
+ export type { GetFillsParams } from './services/getFills.js';
19
+ export { getFills } from './services/getFills.js';
20
+ export type { GetOrderParams } from './services/getOrder.js';
21
+ export { getOrder } from './services/getOrder.js';
22
+ export type { GetOrdersParams } from './services/getOrders.js';
23
+ export { getOrders } from './services/getOrders.js';
24
+ export type { GetPositionsParams } from './services/getPositions.js';
25
+ export { getPositions } from './services/getPositions.js';
26
+ export type { HyperliquidAgent } from './signers/HyperliquidAgentStore.js';
27
+ export { HyperliquidAgentStore } from './signers/HyperliquidAgentStore.js';
28
+ export * from './types/index.js';
29
+ export * from './utils/index.js';
30
+ export { HyperliquidWsProvider, hyperliquidWsProvider, } from './websocket/HyperliquidWsProvider.js';
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,YAAY,IAAI,wBAAwB,GACzC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sCAAsC,CAAA"}
@@ -0,0 +1,26 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: package public entry point.
2
+ // biome-ignore-all lint/performance/noReExportAll: package public entry point.
3
+ /**
4
+ * Hyperliquid provider plugin for `@lifi/perps-sdk`. Reads account-specific
5
+ * state directly from `${apiUrl}/info`; enriched asset metadata and
6
+ * public/shared data come from the LI.FI backend. Register the
7
+ * `hyperliquidProvider()` factory with `createPerpsClient`.
8
+ *
9
+ * @packageDocumentation
10
+ * @public
11
+ */
12
+ export { projectHyperliquidConfigSettings } from './accountConfig.js';
13
+ export { summarizeHyperliquidAccount } from './accountSummary.js';
14
+ export { DEFAULT_HYPERLIQUID_API_URL, HYPERLIQUID_FEE_TIER_FALLBACK, PROVIDER_KEY as HYPERLIQUID_PROVIDER_KEY, } from './constants.js';
15
+ export { hyperliquidProvider, } from './HyperliquidProvider.js';
16
+ export { getAccount } from './services/getAccount.js';
17
+ export { getActivity } from './services/getActivity.js';
18
+ export { getFills } from './services/getFills.js';
19
+ export { getOrder } from './services/getOrder.js';
20
+ export { getOrders } from './services/getOrders.js';
21
+ export { getPositions } from './services/getPositions.js';
22
+ export { HyperliquidAgentStore } from './signers/HyperliquidAgentStore.js';
23
+ export * from './types/index.js';
24
+ export * from './utils/index.js';
25
+ export { HyperliquidWsProvider, hyperliquidWsProvider, } from './websocket/HyperliquidWsProvider.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E;;;;;;;;GAQG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,YAAY,IAAI,wBAAwB,GACzC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAGL,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sCAAsC,CAAA"}
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
@@ -0,0 +1,28 @@
1
+ import { type ProviderGetAccountParams, type SDKRequestOptions } from '@lifi/perps-sdk';
2
+ import type { AccountResponse } from '@lifi/perps-types';
3
+ import type { HyperliquidContext } from '../context.js';
4
+ /**
5
+ * Parameters for {@link getAccount}.
6
+ *
7
+ * @public
8
+ */
9
+ export type GetAccountParams = ProviderGetAccountParams;
10
+ /**
11
+ * Fetch the Hyperliquid account snapshot for `address`: balances per
12
+ * sub-dex (and spot), aggregate margin used, unrealised PnL, fee tier, and
13
+ * the typed `HyperliquidAccountConfig`.
14
+ *
15
+ * Issues `userFees`, `userAbstraction`, `extraAgents`,
16
+ * `spotClearinghouseState` and one `clearinghouseState` per supported perps
17
+ * sub-dex, all concurrently.
18
+ *
19
+ * `config.builderFeeApproval` is intentionally omitted — that field
20
+ * compares the venue's `maxBuilderFee` against the integrator-specific
21
+ * builder address LI.FI publishes, which is not data the venue itself
22
+ * owns. Surfacing it belongs at a higher layer (the LI.FI backend or a
23
+ * thin client-side helper that has the integrator's builder config).
24
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
25
+ * @public
26
+ */
27
+ export declare const getAccount: ({ client, apiUrl }: HyperliquidContext, params: GetAccountParams, options?: SDKRequestOptions) => Promise<AccountResponse>;
28
+ //# sourceMappingURL=getAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccount.d.ts","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAiBvD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AAkGvD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU,GACrB,oBAAoB,kBAAkB,EACtC,QAAQ,gBAAgB,EACxB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,eAAe,CA0GzB,CAAA"}
@@ -0,0 +1,134 @@
1
+ import { getMarketRegistry, getPrices, stringToFloat, } from '@lifi/perps-sdk';
2
+ import { PROVIDER_KEY } from '../constants.js';
3
+ import { HlAbstractionMode, } from '../types/index.js';
4
+ import { perpsDexNames, spotAssetFromToken, spotBalance, spotPriceById, } from '../utils/index.js';
5
+ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
6
+ import { mapPosition } from '../utils/mapPosition.js';
7
+ const getAccountValue = (state) => Number.parseFloat(state.crossMarginSummary.accountValue || state.marginSummary.accountValue);
8
+ const getTotalMarginUsed = (state) => Number.parseFloat(state.crossMarginSummary.totalMarginUsed ||
9
+ state.marginSummary.totalMarginUsed);
10
+ const getMarginUsed = (abstraction, positions, stateByDex) => {
11
+ if (abstraction === HlAbstractionMode.UNIFIED_ACCOUNT ||
12
+ abstraction === HlAbstractionMode.PORTFOLIO_MARGIN) {
13
+ // Per HL docs, individual per-dex states are not meaningful for these
14
+ // modes; derive total margin from the already-mapped positions.
15
+ const total = positions.reduce((sum, p) => sum + Number.parseFloat(p.marginUsed), 0);
16
+ return total.toString();
17
+ }
18
+ if (abstraction === HlAbstractionMode.DEX_ABSTRACTION) {
19
+ let total = 0;
20
+ for (const [, state] of stateByDex) {
21
+ total += getTotalMarginUsed(state);
22
+ }
23
+ return total.toString();
24
+ }
25
+ const mainState = stateByDex.get('');
26
+ if (!mainState) {
27
+ return '0';
28
+ }
29
+ return getTotalMarginUsed(mainState).toString();
30
+ };
31
+ const isUnifiedMode = (abstraction) => abstraction === HlAbstractionMode.UNIFIED_ACCOUNT ||
32
+ abstraction === HlAbstractionMode.PORTFOLIO_MARGIN;
33
+ const buildBalances = (abstraction, spotState, stateByDex, quoteAssetIds, priceById, quoteAssetByCategory) => {
34
+ const balances = [];
35
+ const collateralBalances = [];
36
+ // Spot balances: collateral iff the token is a category quote asset.
37
+ for (const b of spotState.balances) {
38
+ const balance = spotBalance(spotAssetFromToken(b), b.total, priceById);
39
+ if (quoteAssetIds.has(balance.asset.id)) {
40
+ collateralBalances.push(balance);
41
+ }
42
+ else {
43
+ balances.push(balance);
44
+ }
45
+ }
46
+ // Unified/portfolio modes hold everything in spot — per-dex equity would
47
+ // double-count. Only disabled/dexAbstraction carry separate venue collateral.
48
+ // `accountValue` is reported net of locked margin, i.e. the free collateral;
49
+ // the locked portion is carried by the positions' `marginUsed`.
50
+ if (!isUnifiedMode(abstraction)) {
51
+ for (const [dex, state] of stateByDex) {
52
+ const categoryId = dex || PROVIDER_KEY;
53
+ const value = getAccountValue(state);
54
+ collateralBalances.push({
55
+ categoryId,
56
+ // Always present: every dex in `stateByDex` derives from `markets`,
57
+ // which is what populates `quoteAssetByCategory`.
58
+ asset: quoteAssetByCategory.get(categoryId),
59
+ units: value.toString(),
60
+ valueUsd: value.toString(),
61
+ });
62
+ }
63
+ }
64
+ return { balances, collateralBalances };
65
+ };
66
+ /**
67
+ * Fetch the Hyperliquid account snapshot for `address`: balances per
68
+ * sub-dex (and spot), aggregate margin used, unrealised PnL, fee tier, and
69
+ * the typed `HyperliquidAccountConfig`.
70
+ *
71
+ * Issues `userFees`, `userAbstraction`, `extraAgents`,
72
+ * `spotClearinghouseState` and one `clearinghouseState` per supported perps
73
+ * sub-dex, all concurrently.
74
+ *
75
+ * `config.builderFeeApproval` is intentionally omitted — that field
76
+ * compares the venue's `maxBuilderFee` against the integrator-specific
77
+ * builder address LI.FI publishes, which is not data the venue itself
78
+ * owns. Surfacing it belongs at a higher layer (the LI.FI backend or a
79
+ * thin client-side helper that has the integrator's builder config).
80
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
81
+ * @public
82
+ */
83
+ export const getAccount = async ({ client, apiUrl }, params, options) => {
84
+ const registry = getMarketRegistry(client, PROVIDER_KEY);
85
+ const markets = await registry.sync();
86
+ const dexNames = perpsDexNames(markets);
87
+ const quoteAssetIds = new Set(markets.map((m) => m.quoteAsset.id));
88
+ const quoteAssetByCategory = new Map(markets.map((m) => [m.categoryId, m.quoteAsset]));
89
+ const infoOpts = hlInfoOptions(client, options);
90
+ const [feesResult, abstractionResult, agentsResult, spotState, stateResults, { prices },] = await Promise.all([
91
+ infoRequest(apiUrl, { type: 'userFees', user: params.address }, infoOpts),
92
+ // "Never set abstraction" is a successful 200 `null` body, not an error —
93
+ // so a fetch failure must propagate, never be coerced to `null` (which
94
+ // would silently route margin/balance down the wrong, non-unified branch).
95
+ infoRequest(apiUrl, { type: 'userAbstraction', user: params.address }, infoOpts),
96
+ infoRequest(apiUrl, { type: 'extraAgents', user: params.address }, infoOpts),
97
+ infoRequest(apiUrl, { type: 'spotClearinghouseState', user: params.address }, infoOpts),
98
+ Promise.all(dexNames.map((name) => infoRequest(apiUrl, {
99
+ type: 'clearinghouseState',
100
+ user: params.address,
101
+ ...(name ? { dex: name } : {}),
102
+ }, infoOpts))),
103
+ getPrices(client, { provider: PROVIDER_KEY }, options),
104
+ ]);
105
+ const priceById = spotPriceById(markets, new Map(prices.map((p) => [p.marketId, stringToFloat(p.markPrice)])));
106
+ const positions = stateResults.flatMap((state) => state.assetPositions
107
+ .filter((ap) => Number.parseFloat(ap.position.szi) !== 0)
108
+ .map((ap) => mapPosition(ap, registry.require(ap.position.coin))));
109
+ const stateByDex = new Map();
110
+ stateResults.forEach((state, i) => {
111
+ stateByDex.set(dexNames[i], state);
112
+ });
113
+ const totalUnrealizedPnl = positions.reduce((sum, p) => sum + Number.parseFloat(p.unrealizedPnl), 0);
114
+ const config = {
115
+ provider: PROVIDER_KEY,
116
+ abstractionMode: abstractionResult,
117
+ agents: agentsResult,
118
+ };
119
+ const { balances, collateralBalances } = buildBalances(abstractionResult, spotState, stateByDex, quoteAssetIds, priceById, quoteAssetByCategory);
120
+ return {
121
+ provider: PROVIDER_KEY,
122
+ address: params.address,
123
+ balances,
124
+ collateralBalances,
125
+ marginUsed: getMarginUsed(abstractionResult, positions, stateByDex),
126
+ unrealizedPnl: totalUnrealizedPnl.toString(),
127
+ feeTier: {
128
+ maker: feesResult.userAddRate ?? '0',
129
+ taker: feesResult.userCrossRate ?? '0',
130
+ },
131
+ config,
132
+ };
133
+ };
134
+ //# sourceMappingURL=getAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type SDKRequestOptions } from '@lifi/perps-sdk';
2
+ import type { ActivitiesResponse } from '@lifi/perps-types';
3
+ import { ActivityType } from '@lifi/perps-types';
4
+ import type { Address } from 'viem';
5
+ import type { HyperliquidContext } from '../context.js';
6
+ /**
7
+ * Parameters for {@link getActivity}.
8
+ *
9
+ * @public
10
+ */
11
+ export interface GetActivityParams {
12
+ address: Address;
13
+ limit?: number;
14
+ /** `cursor` is a ms-since-epoch upper bound — items with `timestamp < cursor` are returned. */
15
+ cursor?: string;
16
+ startTime?: number;
17
+ endTime?: number;
18
+ type?: ActivityType[];
19
+ }
20
+ /**
21
+ * Fetch a chronological activity feed (deposits, withdrawals, transfers,
22
+ * liquidations, funding) for `address`. Combines results from Hyperliquid's
23
+ * `userNonFundingLedgerUpdates` and `userFunding` endpoints, sorted
24
+ * newest-first.
25
+ *
26
+ * Cursor-based pagination uses the ms-since-epoch timestamp of the last
27
+ * item on the current page. `startTime` defaults to 90 days ago to keep
28
+ * unbounded queries cheap.
29
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
30
+ * @public
31
+ */
32
+ export declare const getActivity: ({ client, apiUrl }: HyperliquidContext, params: GetActivityParams, options?: SDKRequestOptions) => Promise<ActivitiesResponse>;
33
+ //# sourceMappingURL=getActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getActivity.d.ts","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAOnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAYvD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;CACtB;AAmDD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GACtB,oBAAoB,kBAAkB,EACtC,QAAQ,iBAAiB,EACzB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,kBAAkB,CAuD5B,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { getMarketRegistry } from '@lifi/perps-sdk';
2
+ import { ActivityType } from '@lifi/perps-types';
3
+ import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, NINETY_DAYS_MS, PROVIDER_KEY, } from '../constants.js';
4
+ import { mapFundingActivity, mapLedgerEntry } from '../utils/index.js';
5
+ import { hlInfoOptions, infoRequest, } from '../utils/infoClient.js';
6
+ const fetchActivityData = async (apiUrl, typeFilter, timeParams, resolveMarket, options) => {
7
+ const needLedger = !typeFilter || typeFilter.some((t) => t !== ActivityType.FUNDING);
8
+ const needFunding = !typeFilter || typeFilter.includes(ActivityType.FUNDING);
9
+ const [ledgerUpdates, fundingUpdates] = await Promise.all([
10
+ needLedger
11
+ ? infoRequest(apiUrl, { type: 'userNonFundingLedgerUpdates', ...timeParams }, options)
12
+ : Promise.resolve([]),
13
+ needFunding
14
+ ? infoRequest(apiUrl, { type: 'userFunding', ...timeParams }, options)
15
+ : Promise.resolve([]),
16
+ ]);
17
+ const ledgerItems = ledgerUpdates
18
+ .map((entry) => mapLedgerEntry(entry, PROVIDER_KEY, timeParams.user, resolveMarket))
19
+ .filter((item) => item !== null);
20
+ const fundingItems = fundingUpdates.map((entry) => mapFundingActivity(entry, PROVIDER_KEY, resolveMarket));
21
+ const merged = [...ledgerItems, ...fundingItems].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
22
+ if (!typeFilter) {
23
+ return merged;
24
+ }
25
+ const typeSet = new Set(typeFilter);
26
+ return merged.filter((item) => typeSet.has(item.type));
27
+ };
28
+ /**
29
+ * Fetch a chronological activity feed (deposits, withdrawals, transfers,
30
+ * liquidations, funding) for `address`. Combines results from Hyperliquid's
31
+ * `userNonFundingLedgerUpdates` and `userFunding` endpoints, sorted
32
+ * newest-first.
33
+ *
34
+ * Cursor-based pagination uses the ms-since-epoch timestamp of the last
35
+ * item on the current page. `startTime` defaults to 90 days ago to keep
36
+ * unbounded queries cheap.
37
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
38
+ * @public
39
+ */
40
+ export const getActivity = async ({ client, apiUrl }, params, options) => {
41
+ const registry = getMarketRegistry(client, PROVIDER_KEY);
42
+ await registry.sync();
43
+ const infoOpts = hlInfoOptions(client, options);
44
+ const limit = Math.min(params.limit ?? DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT);
45
+ const startTime = params.startTime ?? Date.now() - NINETY_DAYS_MS;
46
+ const endTime = params.cursor === undefined
47
+ ? params.endTime
48
+ : Number.parseInt(params.cursor, 10);
49
+ const timeParams = {
50
+ user: params.address,
51
+ startTime,
52
+ ...(endTime === undefined ? {} : { endTime }),
53
+ };
54
+ const merged = await fetchActivityData(apiUrl, params.type, timeParams, (coin) => registry.require(coin), infoOpts);
55
+ // Hyperliquid's endTime is inclusive — drop boundary items so we don't
56
+ // return the cursor row twice on the next page.
57
+ const filtered = params.cursor === undefined
58
+ ? merged
59
+ : merged.filter((item) => new Date(item.timestamp).getTime() <
60
+ Number.parseInt(params.cursor, 10));
61
+ const hasMore = filtered.length > limit;
62
+ const items = filtered.slice(0, limit);
63
+ return {
64
+ provider: PROVIDER_KEY,
65
+ items,
66
+ pagination: {
67
+ limit,
68
+ hasMore,
69
+ cursor: items.length > 0
70
+ ? String(new Date(items[items.length - 1].timestamp).getTime())
71
+ : undefined,
72
+ },
73
+ };
74
+ };
75
+ //# sourceMappingURL=getActivity.js.map