@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,15 @@
1
+ export { assetIsSpot, calculateAssetId, getProviderIndex } from './assetId.js';
2
+ export type { InfoRequestOptions } from './infoClient.js';
3
+ export { hlInfoOptions, infoRequest } from './infoClient.js';
4
+ export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
5
+ export { mapFundingActivity, mapLedgerEntry } from './mapActivity.js';
6
+ export { classifyFillFromPosition, mapFill } from './mapFill.js';
7
+ export { mapMarket } from './mapMarket.js';
8
+ export { mapMarketPrice } from './mapMarketPrice.js';
9
+ export { isTriggerOrder, isTriggerType, mapOpenOrder, mapOrder, mapOrderStatus, mapOrderType, mapStatusReason, mapTriggerOrder, } from './mapOrder.js';
10
+ export { isOpenAssetPosition, mapPosition } from './mapPosition.js';
11
+ export { coinAsset, perpsDexNames } from './marketDisplay.js';
12
+ export { formatOrderPrice, formatOrderSize, getMaxPriceDecimals, } from './orderFormatting.js';
13
+ export { priceStepToAggregation } from './priceStepToAggregation.js';
14
+ export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC9E,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,17 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: single re-export entry point
2
+ // for the package's utility surface. Internal modules import per-file paths
3
+ // (e.g. `./assetId.js`, `./mapFill.js`) directly.
4
+ export { assetIsSpot, calculateAssetId, getProviderIndex } from './assetId.js';
5
+ export { hlInfoOptions, infoRequest } from './infoClient.js';
6
+ export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
7
+ export { mapFundingActivity, mapLedgerEntry } from './mapActivity.js';
8
+ export { classifyFillFromPosition, mapFill } from './mapFill.js';
9
+ export { mapMarket } from './mapMarket.js';
10
+ export { mapMarketPrice } from './mapMarketPrice.js';
11
+ export { isTriggerOrder, isTriggerType, mapOpenOrder, mapOrder, mapOrderStatus, mapOrderType, mapStatusReason, mapTriggerOrder, } from './mapOrder.js';
12
+ export { isOpenAssetPosition, mapPosition } from './mapPosition.js';
13
+ export { coinAsset, perpsDexNames } from './marketDisplay.js';
14
+ export { formatOrderPrice, formatOrderSize, getMaxPriceDecimals, } from './orderFormatting.js';
15
+ export { priceStepToAggregation } from './priceStepToAggregation.js';
16
+ export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { type PerpsSDKClient, type ResolvedRetryPolicy, type SDKRequestOptions } from '@lifi/perps-sdk';
2
+ /** @internal */
3
+ export declare const HYPERLIQUID_RETRY_DEFAULTS: ResolvedRetryPolicy;
4
+ /** @public */
5
+ export interface InfoRequestOptions {
6
+ signal?: AbortSignal;
7
+ policy?: ResolvedRetryPolicy;
8
+ fetchImpl?: typeof fetch;
9
+ }
10
+ /**
11
+ * Resolve the client's retry/fetch config into options for {@link infoRequest}.
12
+ *
13
+ * @public
14
+ */
15
+ export declare const hlInfoOptions: (client: PerpsSDKClient, options?: SDKRequestOptions) => InfoRequestOptions;
16
+ /**
17
+ * POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
18
+ *
19
+ * Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
20
+ * parameter is trusted; consumers should treat the response shape as
21
+ * upstream-controlled and normalise into `@lifi/perps-types` shapes before
22
+ * surfacing.
23
+ *
24
+ * Non-2xx responses raise a {@link PerpsError} with the Hyperliquid provider key.
25
+ * @public
26
+ */
27
+ export declare function infoRequest<T>(apiUrl: string, body: Record<string, unknown>, options?: InfoRequestOptions): Promise<T>;
28
+ //# sourceMappingURL=infoClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infoClient.d.ts","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AAIxB,gBAAgB;AAChB,eAAO,MAAM,0BAA0B,EAAE,mBAmBxC,CAAA;AAED,cAAc;AACd,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,kBAQD,CAAA;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAqCZ"}
@@ -0,0 +1,70 @@
1
+ import { fetchWithRetry, PerpsError, resolveRetryPolicy, } from '@lifi/perps-sdk';
2
+ import { PerpsErrorCode } from '@lifi/perps-types';
3
+ import { PROVIDER_KEY } from '../constants.js';
4
+ /** @internal */
5
+ export const HYPERLIQUID_RETRY_DEFAULTS = {
6
+ enabled: true,
7
+ maxAttempts: 3,
8
+ baseDelayMs: 2_000,
9
+ maxDelayMs: 15_000,
10
+ respectRetryAfter: true,
11
+ classify: ({ response }) => {
12
+ if (response.status === 429) {
13
+ return 'retry-rate-limit';
14
+ }
15
+ if (response.status === 502 ||
16
+ response.status === 503 ||
17
+ response.status === 504) {
18
+ return 'retry-server';
19
+ }
20
+ return 'fail';
21
+ },
22
+ };
23
+ /**
24
+ * Resolve the client's retry/fetch config into options for {@link infoRequest}.
25
+ *
26
+ * @public
27
+ */
28
+ export const hlInfoOptions = (client, options) => ({
29
+ signal: options?.signal,
30
+ policy: resolveRetryPolicy(HYPERLIQUID_RETRY_DEFAULTS, client.config.retry, PROVIDER_KEY),
31
+ fetchImpl: client.config.fetch,
32
+ });
33
+ /**
34
+ * POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
35
+ *
36
+ * Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
37
+ * parameter is trusted; consumers should treat the response shape as
38
+ * upstream-controlled and normalise into `@lifi/perps-types` shapes before
39
+ * surfacing.
40
+ *
41
+ * Non-2xx responses raise a {@link PerpsError} with the Hyperliquid provider key.
42
+ * @public
43
+ */
44
+ export async function infoRequest(apiUrl, body, options) {
45
+ const policy = options?.policy ?? HYPERLIQUID_RETRY_DEFAULTS;
46
+ let response;
47
+ try {
48
+ response = await fetchWithRetry(`${apiUrl}/info`, {
49
+ method: 'POST',
50
+ headers: { 'Content-Type': 'application/json' },
51
+ body: JSON.stringify(body),
52
+ }, {
53
+ policy,
54
+ fetchImpl: options?.fetchImpl,
55
+ signal: options?.signal,
56
+ });
57
+ }
58
+ catch (error) {
59
+ const err = new PerpsError(PerpsErrorCode.ServerError, error instanceof Error ? error.message : 'Hyperliquid info request failed');
60
+ err.tool = PROVIDER_KEY;
61
+ throw err;
62
+ }
63
+ if (!response.ok) {
64
+ const err = new PerpsError(PerpsErrorCode.ThirdPartyError, `Hyperliquid info request failed: ${response.status}`);
65
+ err.tool = PROVIDER_KEY;
66
+ throw err;
67
+ }
68
+ return (await response.json());
69
+ }
70
+ //# sourceMappingURL=infoClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infoClient.js","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EAGV,kBAAkB,GAEnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,0BAA0B,GAAwB;IAC7D,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,IACE,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG,EACvB,CAAC;YACD,OAAO,cAAc,CAAA;QACvB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AASD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAsB,EACtB,OAA2B,EACP,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,MAAM;IACvB,MAAM,EAAE,kBAAkB,CACxB,0BAA0B,EAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,YAAY,CACb;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;CAC/B,CAAC,CAAA;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,IAA6B,EAC7B,OAA4B;IAE5B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,0BAA0B,CAAA;IAE5D,IAAI,QAAkB,CAAA;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,cAAc,CAC7B,GAAG,MAAM,OAAO,EAChB;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,EACD;YACE,MAAM;YACN,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,WAAW,EAC1B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAC3E,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,eAAe,EAC9B,oCAAoC,QAAQ,CAAC,MAAM,EAAE,CACtD,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;AACrC,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Hyperliquid-specific liquidation price calculation.
3
+ *
4
+ * Uses the exact formula from Hyperliquid docs:
5
+ * https://hyperliquid.gitbook.io/hyperliquid-docs/trading/liquidations
6
+ *
7
+ * liq_price = price - side * margin_available / position_size / (1 - l * side)
8
+ *
9
+ * Where:
10
+ * - l = 1 / (2 * maxLeverage) (maintenance margin fraction)
11
+ * - side = 1 (long) or -1 (short)
12
+ * - margin_available = isolated_margin - maintenance_margin_required
13
+ */
14
+ /**
15
+ * Calculate the maintenance margin fraction for a Hyperliquid asset.
16
+ *
17
+ * Maintenance margin is half of the initial margin at max leverage.
18
+ *
19
+ * @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
20
+ * @returns Maintenance margin fraction (e.g., 0.01 for 50x max leverage),
21
+ * or undefined if maxLeverage is zero
22
+ * @public
23
+ */
24
+ export declare function calculateMaintenanceMarginRate(maxLeverage: number): number | undefined;
25
+ /**
26
+ * Calculate liquidation price using the exact Hyperliquid formula.
27
+ *
28
+ * For isolated margin, new position prediction. For existing positions,
29
+ * prefer Position.liquidationPrice from the API.
30
+ *
31
+ * Formula derivation (isolated margin, single position):
32
+ * margin_per_unit = entryPrice / leverage
33
+ * maintenance_per_unit = entryPrice * mmr
34
+ * margin_available = margin_per_unit - maintenance_per_unit
35
+ * liq_price = entryPrice - side * margin_available / (1 - mmr * side)
36
+ *
37
+ * Where mmr = 1 / (2 * maxLeverage).
38
+ *
39
+ * @param entryPrice - Position entry price
40
+ * @param leverage - User-selected leverage (e.g., 10)
41
+ * @param isLong - True if long position, false if short
42
+ * @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
43
+ * the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
44
+ * @returns Estimated liquidation price, or undefined if inputs are invalid
45
+ * @public
46
+ */
47
+ export declare function calculateLiquidationPrice(entryPrice: number, leverage: number, isLong: boolean, maxLeverage: number): number | undefined;
48
+ //# sourceMappingURL=liquidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAWpB"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Hyperliquid-specific liquidation price calculation.
3
+ *
4
+ * Uses the exact formula from Hyperliquid docs:
5
+ * https://hyperliquid.gitbook.io/hyperliquid-docs/trading/liquidations
6
+ *
7
+ * liq_price = price - side * margin_available / position_size / (1 - l * side)
8
+ *
9
+ * Where:
10
+ * - l = 1 / (2 * maxLeverage) (maintenance margin fraction)
11
+ * - side = 1 (long) or -1 (short)
12
+ * - margin_available = isolated_margin - maintenance_margin_required
13
+ */
14
+ import { estimateIsolatedLiquidationPrice } from '@lifi/perps-sdk';
15
+ /**
16
+ * Calculate the maintenance margin fraction for a Hyperliquid asset.
17
+ *
18
+ * Maintenance margin is half of the initial margin at max leverage.
19
+ *
20
+ * @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
21
+ * @returns Maintenance margin fraction (e.g., 0.01 for 50x max leverage),
22
+ * or undefined if maxLeverage is zero
23
+ * @public
24
+ */
25
+ export function calculateMaintenanceMarginRate(maxLeverage) {
26
+ if (maxLeverage === 0) {
27
+ return undefined;
28
+ }
29
+ return 1 / (2 * maxLeverage);
30
+ }
31
+ /**
32
+ * Calculate liquidation price using the exact Hyperliquid formula.
33
+ *
34
+ * For isolated margin, new position prediction. For existing positions,
35
+ * prefer Position.liquidationPrice from the API.
36
+ *
37
+ * Formula derivation (isolated margin, single position):
38
+ * margin_per_unit = entryPrice / leverage
39
+ * maintenance_per_unit = entryPrice * mmr
40
+ * margin_available = margin_per_unit - maintenance_per_unit
41
+ * liq_price = entryPrice - side * margin_available / (1 - mmr * side)
42
+ *
43
+ * Where mmr = 1 / (2 * maxLeverage).
44
+ *
45
+ * @param entryPrice - Position entry price
46
+ * @param leverage - User-selected leverage (e.g., 10)
47
+ * @param isLong - True if long position, false if short
48
+ * @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
49
+ * the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
50
+ * @returns Estimated liquidation price, or undefined if inputs are invalid
51
+ * @public
52
+ */
53
+ export function calculateLiquidationPrice(entryPrice, leverage, isLong, maxLeverage) {
54
+ const mmr = calculateMaintenanceMarginRate(maxLeverage);
55
+ if (mmr === undefined) {
56
+ return undefined;
57
+ }
58
+ return estimateIsolatedLiquidationPrice({
59
+ entryPrice,
60
+ leverage,
61
+ isLong,
62
+ maintenanceMarginRate: mmr,
63
+ });
64
+ }
65
+ //# sourceMappingURL=liquidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidation.js","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AAElE;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,WAAmB;IAEnB,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,QAAgB,EAChB,MAAe,EACf,WAAmB;IAEnB,MAAM,GAAG,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAA;IACvD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,gCAAgC,CAAC;QACtC,UAAU;QACV,QAAQ;QACR,MAAM;QACN,qBAAqB,EAAE,GAAG;KAC3B,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ActivityItem, FundingActivity, MarketDisplay } from '@lifi/perps-types';
2
+ import type { HlFundingUpdate, HlLedgerUpdate } from '../types/index.js';
3
+ /**
4
+ * Map a Hyperliquid non-funding ledger entry to an ActivityItem.
5
+ *
6
+ * Direction for `spotTransfer` and `sendAsset` is derived from
7
+ * `queriedAddress` matching the delta's `user` (OUT) or `destination` (IN).
8
+ * Returns null for unsupported delta types and for same-user `sendAsset`
9
+ * dex moves (where `user === destination === queriedAddress`).
10
+ * @public
11
+ */
12
+ export declare const mapLedgerEntry: (entry: HlLedgerUpdate, providerKey: string, queriedAddress: string, resolveMarket: (coin: string) => MarketDisplay) => ActivityItem | null;
13
+ /** @public */
14
+ export declare const mapFundingActivity: (entry: HlFundingUpdate, providerKey: string, resolveMarket: (coin: string) => MarketDisplay) => FundingActivity;
15
+ //# sourceMappingURL=mapActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EAEf,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGxE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,cAAc,EACrB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,KAC7C,YAAY,GAAG,IA0IjB,CAAA;AAED,cAAc;AACd,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EACtB,aAAa,MAAM,EACnB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,KAC7C,eASD,CAAA"}
@@ -0,0 +1,148 @@
1
+ import { ActivityType } from '@lifi/perps-types';
2
+ import { isSendAssetDelta, isSpotTransferDelta } from '../types/index.js';
3
+ /**
4
+ * Map a Hyperliquid non-funding ledger entry to an ActivityItem.
5
+ *
6
+ * Direction for `spotTransfer` and `sendAsset` is derived from
7
+ * `queriedAddress` matching the delta's `user` (OUT) or `destination` (IN).
8
+ * Returns null for unsupported delta types and for same-user `sendAsset`
9
+ * dex moves (where `user === destination === queriedAddress`).
10
+ * @public
11
+ */
12
+ export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket) => {
13
+ const { delta } = entry;
14
+ const base = {
15
+ id: entry.hash,
16
+ provider: providerKey,
17
+ timestamp: new Date(entry.time).toISOString(),
18
+ };
19
+ // Handled before the switch: the catch-all arm of `HlLedgerDelta` is a
20
+ // structural supertype of the concrete delta, so a `switch (delta.type)`
21
+ // cannot narrow off the discriminant. The user-defined type guard does.
22
+ if (isSpotTransferDelta(delta)) {
23
+ const queried = queriedAddress.toLowerCase();
24
+ const sender = delta.user.toLowerCase();
25
+ const recipient = delta.destination.toLowerCase();
26
+ const direction = queried === sender ? 'OUT' : 'IN';
27
+ const counterpartyAddress = direction === 'OUT' ? recipient : sender;
28
+ const meta = {
29
+ transferType: 'spotTransfer',
30
+ };
31
+ if (delta.usdcValue !== undefined) {
32
+ meta.usdcValue = delta.usdcValue;
33
+ }
34
+ if (delta.fee !== undefined) {
35
+ meta.fee = delta.fee;
36
+ }
37
+ if (delta.nativeTokenFee !== undefined) {
38
+ meta.nativeTokenFee = delta.nativeTokenFee;
39
+ }
40
+ if (delta.nonce !== undefined) {
41
+ meta.nonce = delta.nonce;
42
+ }
43
+ return {
44
+ ...base,
45
+ type: ActivityType.TRANSFER,
46
+ direction,
47
+ counterpartyAddress,
48
+ asset: delta.token,
49
+ amount: delta.amount,
50
+ meta,
51
+ explorerLink: entry.hash
52
+ ? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
53
+ : undefined,
54
+ };
55
+ }
56
+ // `sendAsset` (wire `type === 'send'`) covers cross-user transfers
57
+ // (modelled as TRANSFER) and same-user dex moves (returned as null —
58
+ // overloading TRANSFER for those would lie about direction). Pre-switch
59
+ // narrowing for the same reason as spotTransfer.
60
+ if (isSendAssetDelta(delta)) {
61
+ const queried = queriedAddress.toLowerCase();
62
+ const sender = delta.user.toLowerCase();
63
+ const recipient = delta.destination.toLowerCase();
64
+ if (sender === recipient && sender === queried) {
65
+ return null;
66
+ }
67
+ const direction = queried === sender ? 'OUT' : 'IN';
68
+ const counterpartyAddress = direction === 'OUT' ? recipient : sender;
69
+ const meta = {
70
+ transferType: 'sendAsset',
71
+ sourceDex: delta.sourceDex,
72
+ destinationDex: delta.destinationDex,
73
+ usdcValue: delta.usdcValue,
74
+ fee: delta.fee,
75
+ nativeTokenFee: delta.nativeTokenFee,
76
+ feeToken: delta.feeToken,
77
+ nonce: delta.nonce,
78
+ };
79
+ return {
80
+ ...base,
81
+ type: ActivityType.TRANSFER,
82
+ direction,
83
+ counterpartyAddress,
84
+ asset: delta.token,
85
+ amount: delta.amount,
86
+ meta,
87
+ explorerLink: entry.hash
88
+ ? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
89
+ : undefined,
90
+ };
91
+ }
92
+ switch (delta.type) {
93
+ case 'deposit':
94
+ return {
95
+ ...base,
96
+ type: ActivityType.DEPOSIT,
97
+ amount: delta.usdc ?? '0',
98
+ explorerLink: entry.hash
99
+ ? `https://scan.li.fi/tx/${entry.hash}`
100
+ : undefined,
101
+ };
102
+ case 'withdraw':
103
+ return {
104
+ ...base,
105
+ type: ActivityType.WITHDRAWAL,
106
+ amount: delta.usdc ?? '0',
107
+ fee: delta.fee ?? '0',
108
+ explorerLink: entry.hash
109
+ ? `https://scan.li.fi/tx/${entry.hash}`
110
+ : undefined,
111
+ };
112
+ case 'liquidation': {
113
+ const d = delta;
114
+ const liquidatedPositions = (d.liquidatedPositions ?? []).map((p) => ({
115
+ market: resolveMarket(p.coin),
116
+ size: p.szi,
117
+ }));
118
+ // Liquidation rows must point to at least one market. Drop entries with
119
+ // missing/empty positions so downstream consumers can rely on that
120
+ // invariant and avoid rendering a market-less liquidation card.
121
+ if (liquidatedPositions.length === 0) {
122
+ return null;
123
+ }
124
+ return {
125
+ ...base,
126
+ type: ActivityType.LIQUIDATION,
127
+ liquidatedNotionalPosition: d.liquidatedNtlPos,
128
+ accountValue: d.accountValue,
129
+ leverageType: d.leverageType,
130
+ liquidatedPositions,
131
+ };
132
+ }
133
+ default:
134
+ return null;
135
+ }
136
+ };
137
+ /** @public */
138
+ export const mapFundingActivity = (entry, providerKey, resolveMarket) => ({
139
+ id: entry.hash,
140
+ provider: providerKey,
141
+ timestamp: new Date(entry.time).toISOString(),
142
+ type: ActivityType.FUNDING,
143
+ market: resolveMarket(entry.delta.coin),
144
+ amount: entry.delta.usdc,
145
+ positionSize: entry.delta.szi,
146
+ fundingRate: entry.delta.fundingRate,
147
+ });
148
+ //# sourceMappingURL=mapActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapActivity.js","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { classifyFillFromPosition } from '@lifi/perps-sdk';
2
+ import type { Fill, MarketDisplay } from '@lifi/perps-types';
3
+ import type { HlUserFill } from '../types/index.js';
4
+ export { classifyFillFromPosition };
5
+ /**
6
+ * Spot-ness comes from the resolved market's category, not the coin string —
7
+ * HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
8
+ * @public
9
+ */
10
+ export declare const mapFill: (fill: HlUserFill, market: MarketDisplay) => Fill;
11
+ //# sourceMappingURL=mapFill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAwBhE,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { classifyFillFromPosition, ExplorerChainId, explorerTxUrl, } from '@lifi/perps-sdk';
2
+ import { FillClassification, FillStatus, LiquidityRole, OrderSide, OrderType, } from '@lifi/perps-types';
3
+ import { SPOT_MARKET_ID } from '../constants.js';
4
+ export { classifyFillFromPosition };
5
+ /**
6
+ * Spot-ness comes from the resolved market's category, not the coin string —
7
+ * HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
8
+ * @public
9
+ */
10
+ export const mapFill = (fill, market) => ({
11
+ ...(market.categoryId === SPOT_MARKET_ID
12
+ ? { realizedPnl: fill.closedPnl }
13
+ : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
14
+ id: String(fill.tid),
15
+ orderId: String(fill.oid),
16
+ market,
17
+ side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
18
+ type: fill.dir?.includes('Limit') ? OrderType.LIMIT : OrderType.MARKET,
19
+ size: fill.sz,
20
+ price: fill.px,
21
+ status: FillStatus.FILLED,
22
+ liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
23
+ filledSize: fill.sz,
24
+ fee: fill.fee,
25
+ startPosition: fill.startPosition,
26
+ explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
27
+ classification: market.categoryId === SPOT_MARKET_ID
28
+ ? fill.side === 'B'
29
+ ? FillClassification.SPOT_BUY
30
+ : FillClassification.SPOT_SELL
31
+ : classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
32
+ createdAt: new Date(fill.time).toISOString(),
33
+ });
34
+ //# sourceMappingURL=mapFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc;QACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;QACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;IACxD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;IACtE,IAAI,EAAE,IAAI,CAAC,EAAE;IACb,KAAK,EAAE,IAAI,CAAC,EAAE;IACd,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;IACnE,UAAU,EAAE,IAAI,CAAC,EAAE;IACnB,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,aAAa,EAAE,IAAI,CAAC,aAAa;IACjC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;IACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,cAAc;QAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;YACjB,CAAC,CAAC,kBAAkB,CAAC,QAAQ;YAC7B,CAAC,CAAC,kBAAkB,CAAC,SAAS;QAChC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { PerpsMarket } from '@lifi/perps-types';
2
+ import type { HlUniverseItem } from '../types/index.js';
3
+ /**
4
+ * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
5
+ * metadata. Live mark/stats fields live on the `/prices` item — see
6
+ * {@link mapMarketPrice}. `categoryId` is the `Provider.categories[].id` of the
7
+ * dex the entry was fetched from — known to the caller at fetch time, never
8
+ * re-derived from the coin string.
9
+ * @public
10
+ */
11
+ export declare const mapMarket: (universe: HlUniverseItem, categoryId: string) => PerpsMarket;
12
+ //# sourceMappingURL=mapMarket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQvD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,KACjB,WAWD,CAAA"}
@@ -0,0 +1,27 @@
1
+ import { PROVIDER_KEY } from '../constants.js';
2
+ import { calculateMaintenanceMarginRate } from './liquidation.js';
3
+ import { coinAsset } from './marketDisplay.js';
4
+ import { getMaxPriceDecimals } from './orderFormatting.js';
5
+ /** Hyperliquid quotes every perp market in USDC. */
6
+ const QUOTE_SYMBOL = 'USDC';
7
+ /**
8
+ * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
9
+ * metadata. Live mark/stats fields live on the `/prices` item — see
10
+ * {@link mapMarketPrice}. `categoryId` is the `Provider.categories[].id` of the
11
+ * dex the entry was fetched from — known to the caller at fetch time, never
12
+ * re-derived from the coin string.
13
+ * @public
14
+ */
15
+ export const mapMarket = (universe, categoryId) => ({
16
+ providerId: PROVIDER_KEY,
17
+ id: universe.name,
18
+ categoryId,
19
+ baseAsset: coinAsset(universe.name),
20
+ quoteAsset: coinAsset(QUOTE_SYMBOL),
21
+ szDecimals: universe.szDecimals,
22
+ priceDecimals: getMaxPriceDecimals(universe.szDecimals),
23
+ maxLeverage: universe.maxLeverage,
24
+ onlyIsolated: universe.onlyIsolated === true,
25
+ maintenanceMarginRate: calculateMaintenanceMarginRate(universe.maxLeverage),
26
+ });
27
+ //# sourceMappingURL=mapMarket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,oDAAoD;AACpD,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EACL,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,UAAU;IACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,KAAK,IAAI;IAC5C,qBAAqB,EAAE,8BAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { MarketPrice } from '@lifi/perps-types';
2
+ import type { HlAssetCtx } from '../types/index.js';
3
+ /**
4
+ * Map a Hyperliquid asset context plus its mid to a {@link MarketPrice} — the
5
+ * live mark/stats data for the `/prices` item. `mid` is the market mid from
6
+ * `allMids`, known to the caller; `HlAssetCtx` carries no mid of its own.
7
+ * @public
8
+ */
9
+ export declare const mapMarketPrice: (marketId: string, assetCtx: HlAssetCtx, mid: string) => MarketPrice;
10
+ //# sourceMappingURL=mapMarketPrice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapMarketPrice.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarketPrice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,UAAU,UAAU,EACpB,KAAK,MAAM,KACV,WAiBF,CAAA"}
@@ -0,0 +1,24 @@
1
+ const NEXT_FUNDING_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
2
+ /**
3
+ * Map a Hyperliquid asset context plus its mid to a {@link MarketPrice} — the
4
+ * live mark/stats data for the `/prices` item. `mid` is the market mid from
5
+ * `allMids`, known to the caller; `HlAssetCtx` carries no mid of its own.
6
+ * @public
7
+ */
8
+ export const mapMarketPrice = (marketId, assetCtx, mid) => {
9
+ const now = Date.now();
10
+ const nextFundingTime = Math.ceil(now / NEXT_FUNDING_INTERVAL_MS) * NEXT_FUNDING_INTERVAL_MS;
11
+ return {
12
+ marketId,
13
+ price: mid,
14
+ markPrice: assetCtx.markPx,
15
+ prevDayPrice: assetCtx.prevDayPx,
16
+ volume24h: assetCtx.dayNtlVlm,
17
+ openInterest: assetCtx.openInterest,
18
+ funding: {
19
+ rate: assetCtx.funding,
20
+ nextFundingTime,
21
+ },
22
+ };
23
+ };
24
+ //# sourceMappingURL=mapMarketPrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapMarketPrice.js","sourceRoot":"","sources":["../../../src/utils/mapMarketPrice.ts"],"names":[],"mappings":"AAGA,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,SAAS;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAgB,EAChB,QAAoB,EACpB,GAAW,EACE,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,eAAe,GACnB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,wBAAwB,CAAC,GAAG,wBAAwB,CAAA;IAEtE,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,QAAQ,CAAC,MAAM;QAC1B,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,eAAe;SAChB;KACF,CAAA;AACH,CAAC,CAAA"}