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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +174 -0
  3. package/dist/cjs/HyperliquidProvider.d.ts +15 -0
  4. package/dist/cjs/HyperliquidProvider.d.ts.map +1 -0
  5. package/dist/cjs/HyperliquidProvider.js +135 -0
  6. package/dist/cjs/HyperliquidProvider.js.map +1 -0
  7. package/dist/cjs/accountConfig.d.ts +3 -0
  8. package/dist/cjs/accountConfig.d.ts.map +1 -0
  9. package/dist/cjs/accountConfig.js +45 -0
  10. package/dist/cjs/accountConfig.js.map +1 -0
  11. package/dist/cjs/accountSummary.d.ts +3 -0
  12. package/dist/cjs/accountSummary.d.ts.map +1 -0
  13. package/dist/cjs/accountSummary.js +12 -0
  14. package/dist/cjs/accountSummary.js.map +1 -0
  15. package/dist/cjs/constants.d.ts +11 -0
  16. package/dist/cjs/constants.d.ts.map +1 -0
  17. package/dist/cjs/constants.js +16 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/cjs/context.d.ts +13 -0
  20. package/dist/cjs/context.d.ts.map +1 -0
  21. package/dist/cjs/context.js +24 -0
  22. package/dist/cjs/context.js.map +1 -0
  23. package/dist/cjs/index.d.ts +22 -0
  24. package/dist/cjs/index.d.ts.map +1 -0
  25. package/dist/cjs/index.js +47 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/package.json +1 -0
  28. package/dist/cjs/services/getAccount.d.ts +6 -0
  29. package/dist/cjs/services/getAccount.d.ts.map +1 -0
  30. package/dist/cjs/services/getAccount.js +109 -0
  31. package/dist/cjs/services/getAccount.js.map +1 -0
  32. package/dist/cjs/services/getActivity.d.ts +15 -0
  33. package/dist/cjs/services/getActivity.d.ts.map +1 -0
  34. package/dist/cjs/services/getActivity.js +65 -0
  35. package/dist/cjs/services/getActivity.js.map +1 -0
  36. package/dist/cjs/services/getFills.d.ts +13 -0
  37. package/dist/cjs/services/getFills.d.ts.map +1 -0
  38. package/dist/cjs/services/getFills.js +40 -0
  39. package/dist/cjs/services/getFills.js.map +1 -0
  40. package/dist/cjs/services/getOrder.d.ts +6 -0
  41. package/dist/cjs/services/getOrder.d.ts.map +1 -0
  42. package/dist/cjs/services/getOrder.js +27 -0
  43. package/dist/cjs/services/getOrder.js.map +1 -0
  44. package/dist/cjs/services/getOrders.d.ts +11 -0
  45. package/dist/cjs/services/getOrders.d.ts.map +1 -0
  46. package/dist/cjs/services/getOrders.js +51 -0
  47. package/dist/cjs/services/getOrders.js.map +1 -0
  48. package/dist/cjs/services/getPositions.d.ts +11 -0
  49. package/dist/cjs/services/getPositions.d.ts.map +1 -0
  50. package/dist/cjs/services/getPositions.js +33 -0
  51. package/dist/cjs/services/getPositions.js.map +1 -0
  52. package/dist/cjs/signers/HyperliquidAgentStore.d.ts +19 -0
  53. package/dist/cjs/signers/HyperliquidAgentStore.d.ts.map +1 -0
  54. package/dist/cjs/signers/HyperliquidAgentStore.js +110 -0
  55. package/dist/cjs/signers/HyperliquidAgentStore.js.map +1 -0
  56. package/dist/cjs/signers/index.d.ts +4 -0
  57. package/dist/cjs/signers/index.d.ts.map +1 -0
  58. package/dist/cjs/signers/index.js +8 -0
  59. package/dist/cjs/signers/index.js.map +1 -0
  60. package/dist/cjs/signers/signActions.d.ts +7 -0
  61. package/dist/cjs/signers/signActions.d.ts.map +1 -0
  62. package/dist/cjs/signers/signActions.js +33 -0
  63. package/dist/cjs/signers/signActions.js.map +1 -0
  64. package/dist/cjs/types/account.d.ts +51 -0
  65. package/dist/cjs/types/account.d.ts.map +1 -0
  66. package/dist/cjs/types/account.js +10 -0
  67. package/dist/cjs/types/account.js.map +1 -0
  68. package/dist/cjs/types/action.d.ts +51 -0
  69. package/dist/cjs/types/action.d.ts.map +1 -0
  70. package/dist/cjs/types/action.js +11 -0
  71. package/dist/cjs/types/action.js.map +1 -0
  72. package/dist/cjs/types/asset.d.ts +66 -0
  73. package/dist/cjs/types/asset.d.ts.map +1 -0
  74. package/dist/cjs/types/asset.js +3 -0
  75. package/dist/cjs/types/asset.js.map +1 -0
  76. package/dist/cjs/types/fill.d.ts +18 -0
  77. package/dist/cjs/types/fill.d.ts.map +1 -0
  78. package/dist/cjs/types/fill.js +3 -0
  79. package/dist/cjs/types/fill.js.map +1 -0
  80. package/dist/cjs/types/index.d.ts +8 -0
  81. package/dist/cjs/types/index.d.ts.map +1 -0
  82. package/dist/cjs/types/index.js +24 -0
  83. package/dist/cjs/types/index.js.map +1 -0
  84. package/dist/cjs/types/ledger.d.ts +53 -0
  85. package/dist/cjs/types/ledger.d.ts.map +1 -0
  86. package/dist/cjs/types/ledger.js +8 -0
  87. package/dist/cjs/types/ledger.js.map +1 -0
  88. package/dist/cjs/types/order.d.ts +46 -0
  89. package/dist/cjs/types/order.d.ts.map +1 -0
  90. package/dist/cjs/types/order.js +3 -0
  91. package/dist/cjs/types/order.js.map +1 -0
  92. package/dist/cjs/types/ws.d.ts +36 -0
  93. package/dist/cjs/types/ws.d.ts.map +1 -0
  94. package/dist/cjs/types/ws.js +3 -0
  95. package/dist/cjs/types/ws.js.map +1 -0
  96. package/dist/cjs/utils/assetId.d.ts +4 -0
  97. package/dist/cjs/utils/assetId.d.ts.map +1 -0
  98. package/dist/cjs/utils/assetId.js +21 -0
  99. package/dist/cjs/utils/assetId.js.map +1 -0
  100. package/dist/cjs/utils/index.d.ts +15 -0
  101. package/dist/cjs/utils/index.d.ts.map +1 -0
  102. package/dist/cjs/utils/index.js +49 -0
  103. package/dist/cjs/utils/index.js.map +1 -0
  104. package/dist/cjs/utils/infoClient.d.ts +10 -0
  105. package/dist/cjs/utils/infoClient.d.ts.map +1 -0
  106. package/dist/cjs/utils/infoClient.js +58 -0
  107. package/dist/cjs/utils/infoClient.js.map +1 -0
  108. package/dist/cjs/utils/liquidation.d.ts +3 -0
  109. package/dist/cjs/utils/liquidation.d.ts.map +1 -0
  110. package/dist/cjs/utils/liquidation.js +24 -0
  111. package/dist/cjs/utils/liquidation.js.map +1 -0
  112. package/dist/cjs/utils/mapActivity.d.ts +5 -0
  113. package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
  114. package/dist/cjs/utils/mapActivity.js +133 -0
  115. package/dist/cjs/utils/mapActivity.js.map +1 -0
  116. package/dist/cjs/utils/mapFill.d.ts +6 -0
  117. package/dist/cjs/utils/mapFill.d.ts.map +1 -0
  118. package/dist/cjs/utils/mapFill.js +33 -0
  119. package/dist/cjs/utils/mapFill.js.map +1 -0
  120. package/dist/cjs/utils/mapMarket.d.ts +4 -0
  121. package/dist/cjs/utils/mapMarket.d.ts.map +1 -0
  122. package/dist/cjs/utils/mapMarket.js +22 -0
  123. package/dist/cjs/utils/mapMarket.js.map +1 -0
  124. package/dist/cjs/utils/mapMarketPrice.d.ts +4 -0
  125. package/dist/cjs/utils/mapMarketPrice.d.ts.map +1 -0
  126. package/dist/cjs/utils/mapMarketPrice.js +22 -0
  127. package/dist/cjs/utils/mapMarketPrice.js.map +1 -0
  128. package/dist/cjs/utils/mapOrder.d.ts +12 -0
  129. package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
  130. package/dist/cjs/utils/mapOrder.js +156 -0
  131. package/dist/cjs/utils/mapOrder.js.map +1 -0
  132. package/dist/cjs/utils/mapPosition.d.ts +5 -0
  133. package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
  134. package/dist/cjs/utils/mapPosition.js +28 -0
  135. package/dist/cjs/utils/mapPosition.js.map +1 -0
  136. package/dist/cjs/utils/marketDisplay.d.ts +4 -0
  137. package/dist/cjs/utils/marketDisplay.d.ts.map +1 -0
  138. package/dist/cjs/utils/marketDisplay.js +23 -0
  139. package/dist/cjs/utils/marketDisplay.js.map +1 -0
  140. package/dist/cjs/utils/orderFormatting.d.ts +4 -0
  141. package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
  142. package/dist/cjs/utils/orderFormatting.js +30 -0
  143. package/dist/cjs/utils/orderFormatting.js.map +1 -0
  144. package/dist/cjs/utils/priceStepToAggregation.d.ts +5 -0
  145. package/dist/cjs/utils/priceStepToAggregation.d.ts.map +1 -0
  146. package/dist/cjs/utils/priceStepToAggregation.js +36 -0
  147. package/dist/cjs/utils/priceStepToAggregation.js.map +1 -0
  148. package/dist/cjs/utils/spotBalance.d.ts +6 -0
  149. package/dist/cjs/utils/spotBalance.d.ts.map +1 -0
  150. package/dist/cjs/utils/spotBalance.js +34 -0
  151. package/dist/cjs/utils/spotBalance.js.map +1 -0
  152. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +29 -0
  153. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  154. package/dist/cjs/websocket/HyperliquidWsProvider.js +359 -0
  155. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -0
  156. package/dist/cjs/websocket/index.d.ts +2 -0
  157. package/dist/cjs/websocket/index.d.ts.map +1 -0
  158. package/dist/cjs/websocket/index.js +6 -0
  159. package/dist/cjs/websocket/index.js.map +1 -0
  160. package/dist/esm/HyperliquidProvider.d.ts +64 -0
  161. package/dist/esm/HyperliquidProvider.d.ts.map +1 -0
  162. package/dist/esm/HyperliquidProvider.js +162 -0
  163. package/dist/esm/HyperliquidProvider.js.map +1 -0
  164. package/dist/esm/accountConfig.d.ts +10 -0
  165. package/dist/esm/accountConfig.d.ts.map +1 -0
  166. package/dist/esm/accountConfig.js +65 -0
  167. package/dist/esm/accountConfig.js.map +1 -0
  168. package/dist/esm/accountSummary.d.ts +10 -0
  169. package/dist/esm/accountSummary.d.ts.map +1 -0
  170. package/dist/esm/accountSummary.js +22 -0
  171. package/dist/esm/accountSummary.js.map +1 -0
  172. package/dist/esm/constants.d.ts +40 -0
  173. package/dist/esm/constants.d.ts.map +1 -0
  174. package/dist/esm/constants.js +42 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/context.d.ts +26 -0
  177. package/dist/esm/context.d.ts.map +1 -0
  178. package/dist/esm/context.js +25 -0
  179. package/dist/esm/context.js.map +1 -0
  180. package/dist/esm/index.d.ts +31 -0
  181. package/dist/esm/index.d.ts.map +1 -0
  182. package/dist/esm/index.js +26 -0
  183. package/dist/esm/index.js.map +1 -0
  184. package/dist/esm/package.json +1 -0
  185. package/dist/esm/services/getAccount.d.ts +28 -0
  186. package/dist/esm/services/getAccount.d.ts.map +1 -0
  187. package/dist/esm/services/getAccount.js +134 -0
  188. package/dist/esm/services/getAccount.js.map +1 -0
  189. package/dist/esm/services/getActivity.d.ts +33 -0
  190. package/dist/esm/services/getActivity.d.ts.map +1 -0
  191. package/dist/esm/services/getActivity.js +75 -0
  192. package/dist/esm/services/getActivity.js.map +1 -0
  193. package/dist/esm/services/getFills.d.ts +34 -0
  194. package/dist/esm/services/getFills.d.ts.map +1 -0
  195. package/dist/esm/services/getFills.js +49 -0
  196. package/dist/esm/services/getFills.js.map +1 -0
  197. package/dist/esm/services/getOrder.d.ts +17 -0
  198. package/dist/esm/services/getOrder.d.ts.map +1 -0
  199. package/dist/esm/services/getOrder.js +29 -0
  200. package/dist/esm/services/getOrder.js.map +1 -0
  201. package/dist/esm/services/getOrders.d.ts +27 -0
  202. package/dist/esm/services/getOrders.d.ts.map +1 -0
  203. package/dist/esm/services/getOrders.js +57 -0
  204. package/dist/esm/services/getOrders.js.map +1 -0
  205. package/dist/esm/services/getPositions.d.ts +26 -0
  206. package/dist/esm/services/getPositions.d.ts.map +1 -0
  207. package/dist/esm/services/getPositions.js +37 -0
  208. package/dist/esm/services/getPositions.js.map +1 -0
  209. package/dist/esm/signers/HyperliquidAgentStore.d.ts +54 -0
  210. package/dist/esm/signers/HyperliquidAgentStore.d.ts.map +1 -0
  211. package/dist/esm/signers/HyperliquidAgentStore.js +134 -0
  212. package/dist/esm/signers/HyperliquidAgentStore.js.map +1 -0
  213. package/dist/esm/signers/index.d.ts +4 -0
  214. package/dist/esm/signers/index.d.ts.map +1 -0
  215. package/dist/esm/signers/index.js +4 -0
  216. package/dist/esm/signers/index.js.map +1 -0
  217. package/dist/esm/signers/signActions.d.ts +15 -0
  218. package/dist/esm/signers/signActions.d.ts.map +1 -0
  219. package/dist/esm/signers/signActions.js +38 -0
  220. package/dist/esm/signers/signActions.js.map +1 -0
  221. package/dist/esm/types/account.d.ts +64 -0
  222. package/dist/esm/types/account.d.ts.map +1 -0
  223. package/dist/esm/types/account.js +13 -0
  224. package/dist/esm/types/account.js.map +1 -0
  225. package/dist/esm/types/action.d.ts +61 -0
  226. package/dist/esm/types/action.d.ts.map +1 -0
  227. package/dist/esm/types/action.js +16 -0
  228. package/dist/esm/types/action.js.map +1 -0
  229. package/dist/esm/types/asset.d.ts +82 -0
  230. package/dist/esm/types/asset.d.ts.map +1 -0
  231. package/dist/esm/types/asset.js +3 -0
  232. package/dist/esm/types/asset.js.map +1 -0
  233. package/dist/esm/types/fill.d.ts +21 -0
  234. package/dist/esm/types/fill.d.ts.map +1 -0
  235. package/dist/esm/types/fill.js +3 -0
  236. package/dist/esm/types/fill.js.map +1 -0
  237. package/dist/esm/types/index.d.ts +8 -0
  238. package/dist/esm/types/index.d.ts.map +1 -0
  239. package/dist/esm/types/index.js +11 -0
  240. package/dist/esm/types/index.js.map +1 -0
  241. package/dist/esm/types/ledger.d.ts +93 -0
  242. package/dist/esm/types/ledger.d.ts.map +1 -0
  243. package/dist/esm/types/ledger.js +16 -0
  244. package/dist/esm/types/ledger.js.map +1 -0
  245. package/dist/esm/types/order.d.ts +51 -0
  246. package/dist/esm/types/order.d.ts.map +1 -0
  247. package/dist/esm/types/order.js +3 -0
  248. package/dist/esm/types/order.js.map +1 -0
  249. package/dist/esm/types/ws.d.ts +43 -0
  250. package/dist/esm/types/ws.d.ts.map +1 -0
  251. package/dist/esm/types/ws.js +3 -0
  252. package/dist/esm/types/ws.js.map +1 -0
  253. package/dist/esm/utils/assetId.d.ts +20 -0
  254. package/dist/esm/utils/assetId.d.ts.map +1 -0
  255. package/dist/esm/utils/assetId.js +31 -0
  256. package/dist/esm/utils/assetId.js.map +1 -0
  257. package/dist/esm/utils/index.d.ts +15 -0
  258. package/dist/esm/utils/index.d.ts.map +1 -0
  259. package/dist/esm/utils/index.js +17 -0
  260. package/dist/esm/utils/index.js.map +1 -0
  261. package/dist/esm/utils/infoClient.d.ts +28 -0
  262. package/dist/esm/utils/infoClient.d.ts.map +1 -0
  263. package/dist/esm/utils/infoClient.js +70 -0
  264. package/dist/esm/utils/infoClient.js.map +1 -0
  265. package/dist/esm/utils/liquidation.d.ts +48 -0
  266. package/dist/esm/utils/liquidation.d.ts.map +1 -0
  267. package/dist/esm/utils/liquidation.js +65 -0
  268. package/dist/esm/utils/liquidation.js.map +1 -0
  269. package/dist/esm/utils/mapActivity.d.ts +15 -0
  270. package/dist/esm/utils/mapActivity.d.ts.map +1 -0
  271. package/dist/esm/utils/mapActivity.js +148 -0
  272. package/dist/esm/utils/mapActivity.js.map +1 -0
  273. package/dist/esm/utils/mapFill.d.ts +11 -0
  274. package/dist/esm/utils/mapFill.d.ts.map +1 -0
  275. package/dist/esm/utils/mapFill.js +34 -0
  276. package/dist/esm/utils/mapFill.js.map +1 -0
  277. package/dist/esm/utils/mapMarket.d.ts +12 -0
  278. package/dist/esm/utils/mapMarket.d.ts.map +1 -0
  279. package/dist/esm/utils/mapMarket.js +27 -0
  280. package/dist/esm/utils/mapMarket.js.map +1 -0
  281. package/dist/esm/utils/mapMarketPrice.d.ts +10 -0
  282. package/dist/esm/utils/mapMarketPrice.d.ts.map +1 -0
  283. package/dist/esm/utils/mapMarketPrice.js +24 -0
  284. package/dist/esm/utils/mapMarketPrice.js.map +1 -0
  285. package/dist/esm/utils/mapOrder.d.ts +49 -0
  286. package/dist/esm/utils/mapOrder.d.ts.map +1 -0
  287. package/dist/esm/utils/mapOrder.js +182 -0
  288. package/dist/esm/utils/mapOrder.js.map +1 -0
  289. package/dist/esm/utils/mapPosition.d.ts +12 -0
  290. package/dist/esm/utils/mapPosition.d.ts.map +1 -0
  291. package/dist/esm/utils/mapPosition.js +30 -0
  292. package/dist/esm/utils/mapPosition.js.map +1 -0
  293. package/dist/esm/utils/marketDisplay.d.ts +17 -0
  294. package/dist/esm/utils/marketDisplay.d.ts.map +1 -0
  295. package/dist/esm/utils/marketDisplay.js +31 -0
  296. package/dist/esm/utils/marketDisplay.js.map +1 -0
  297. package/dist/esm/utils/orderFormatting.d.ts +50 -0
  298. package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
  299. package/dist/esm/utils/orderFormatting.js +78 -0
  300. package/dist/esm/utils/orderFormatting.js.map +1 -0
  301. package/dist/esm/utils/priceStepToAggregation.d.ts +20 -0
  302. package/dist/esm/utils/priceStepToAggregation.d.ts.map +1 -0
  303. package/dist/esm/utils/priceStepToAggregation.js +51 -0
  304. package/dist/esm/utils/priceStepToAggregation.js.map +1 -0
  305. package/dist/esm/utils/spotBalance.d.ts +18 -0
  306. package/dist/esm/utils/spotBalance.d.ts.map +1 -0
  307. package/dist/esm/utils/spotBalance.js +40 -0
  308. package/dist/esm/utils/spotBalance.js.map +1 -0
  309. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +61 -0
  310. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  311. package/dist/esm/websocket/HyperliquidWsProvider.js +406 -0
  312. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -0
  313. package/dist/esm/websocket/index.d.ts +2 -0
  314. package/dist/esm/websocket/index.d.ts.map +1 -0
  315. package/dist/esm/websocket/index.js +3 -0
  316. package/dist/esm/websocket/index.js.map +1 -0
  317. package/dist/types/HyperliquidProvider.d.ts +64 -0
  318. package/dist/types/HyperliquidProvider.d.ts.map +1 -0
  319. package/dist/types/accountConfig.d.ts +10 -0
  320. package/dist/types/accountConfig.d.ts.map +1 -0
  321. package/dist/types/accountSummary.d.ts +10 -0
  322. package/dist/types/accountSummary.d.ts.map +1 -0
  323. package/dist/types/constants.d.ts +40 -0
  324. package/dist/types/constants.d.ts.map +1 -0
  325. package/dist/types/context.d.ts +26 -0
  326. package/dist/types/context.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +31 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/services/getAccount.d.ts +28 -0
  330. package/dist/types/services/getAccount.d.ts.map +1 -0
  331. package/dist/types/services/getActivity.d.ts +33 -0
  332. package/dist/types/services/getActivity.d.ts.map +1 -0
  333. package/dist/types/services/getFills.d.ts +34 -0
  334. package/dist/types/services/getFills.d.ts.map +1 -0
  335. package/dist/types/services/getOrder.d.ts +17 -0
  336. package/dist/types/services/getOrder.d.ts.map +1 -0
  337. package/dist/types/services/getOrders.d.ts +27 -0
  338. package/dist/types/services/getOrders.d.ts.map +1 -0
  339. package/dist/types/services/getPositions.d.ts +26 -0
  340. package/dist/types/services/getPositions.d.ts.map +1 -0
  341. package/dist/types/signers/HyperliquidAgentStore.d.ts +54 -0
  342. package/dist/types/signers/HyperliquidAgentStore.d.ts.map +1 -0
  343. package/dist/types/signers/index.d.ts +4 -0
  344. package/dist/types/signers/index.d.ts.map +1 -0
  345. package/dist/types/signers/signActions.d.ts +15 -0
  346. package/dist/types/signers/signActions.d.ts.map +1 -0
  347. package/dist/types/types/account.d.ts +64 -0
  348. package/dist/types/types/account.d.ts.map +1 -0
  349. package/dist/types/types/action.d.ts +61 -0
  350. package/dist/types/types/action.d.ts.map +1 -0
  351. package/dist/types/types/asset.d.ts +82 -0
  352. package/dist/types/types/asset.d.ts.map +1 -0
  353. package/dist/types/types/fill.d.ts +21 -0
  354. package/dist/types/types/fill.d.ts.map +1 -0
  355. package/dist/types/types/index.d.ts +8 -0
  356. package/dist/types/types/index.d.ts.map +1 -0
  357. package/dist/types/types/ledger.d.ts +93 -0
  358. package/dist/types/types/ledger.d.ts.map +1 -0
  359. package/dist/types/types/order.d.ts +51 -0
  360. package/dist/types/types/order.d.ts.map +1 -0
  361. package/dist/types/types/ws.d.ts +43 -0
  362. package/dist/types/types/ws.d.ts.map +1 -0
  363. package/dist/types/utils/assetId.d.ts +20 -0
  364. package/dist/types/utils/assetId.d.ts.map +1 -0
  365. package/dist/types/utils/index.d.ts +15 -0
  366. package/dist/types/utils/index.d.ts.map +1 -0
  367. package/dist/types/utils/infoClient.d.ts +28 -0
  368. package/dist/types/utils/infoClient.d.ts.map +1 -0
  369. package/dist/types/utils/liquidation.d.ts +48 -0
  370. package/dist/types/utils/liquidation.d.ts.map +1 -0
  371. package/dist/types/utils/mapActivity.d.ts +15 -0
  372. package/dist/types/utils/mapActivity.d.ts.map +1 -0
  373. package/dist/types/utils/mapFill.d.ts +11 -0
  374. package/dist/types/utils/mapFill.d.ts.map +1 -0
  375. package/dist/types/utils/mapMarket.d.ts +12 -0
  376. package/dist/types/utils/mapMarket.d.ts.map +1 -0
  377. package/dist/types/utils/mapMarketPrice.d.ts +10 -0
  378. package/dist/types/utils/mapMarketPrice.d.ts.map +1 -0
  379. package/dist/types/utils/mapOrder.d.ts +49 -0
  380. package/dist/types/utils/mapOrder.d.ts.map +1 -0
  381. package/dist/types/utils/mapPosition.d.ts +12 -0
  382. package/dist/types/utils/mapPosition.d.ts.map +1 -0
  383. package/dist/types/utils/marketDisplay.d.ts +17 -0
  384. package/dist/types/utils/marketDisplay.d.ts.map +1 -0
  385. package/dist/types/utils/orderFormatting.d.ts +50 -0
  386. package/dist/types/utils/orderFormatting.d.ts.map +1 -0
  387. package/dist/types/utils/priceStepToAggregation.d.ts +20 -0
  388. package/dist/types/utils/priceStepToAggregation.d.ts.map +1 -0
  389. package/dist/types/utils/spotBalance.d.ts +18 -0
  390. package/dist/types/utils/spotBalance.d.ts.map +1 -0
  391. package/dist/types/websocket/HyperliquidWsProvider.d.ts +61 -0
  392. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -0
  393. package/dist/types/websocket/index.d.ts +2 -0
  394. package/dist/types/websocket/index.d.ts.map +1 -0
  395. package/package.json +73 -0
  396. package/src/HyperliquidProvider.ts +381 -0
  397. package/src/accountConfig.ts +89 -0
  398. package/src/accountSummary.ts +32 -0
  399. package/src/constants.ts +47 -0
  400. package/src/context.ts +41 -0
  401. package/src/index.ts +45 -0
  402. package/src/services/getAccount.ts +263 -0
  403. package/src/services/getActivity.ts +162 -0
  404. package/src/services/getFills.ts +96 -0
  405. package/src/services/getOrder.ts +61 -0
  406. package/src/services/getOrders.ts +101 -0
  407. package/src/services/getPositions.ts +76 -0
  408. package/src/signers/HyperliquidAgentStore.ts +176 -0
  409. package/src/signers/index.ts +5 -0
  410. package/src/signers/signActions.ts +78 -0
  411. package/src/types/account.ts +74 -0
  412. package/src/types/action.ts +66 -0
  413. package/src/types/asset.ts +96 -0
  414. package/src/types/fill.ts +24 -0
  415. package/src/types/index.ts +11 -0
  416. package/src/types/ledger.ts +111 -0
  417. package/src/types/order.ts +56 -0
  418. package/src/types/ws.ts +47 -0
  419. package/src/utils/assetId.ts +38 -0
  420. package/src/utils/index.ts +38 -0
  421. package/src/utils/infoClient.ts +111 -0
  422. package/src/utils/liquidation.ts +74 -0
  423. package/src/utils/mapActivity.ts +182 -0
  424. package/src/utils/mapFill.ts +48 -0
  425. package/src/utils/mapMarket.ts +33 -0
  426. package/src/utils/mapMarketPrice.ts +33 -0
  427. package/src/utils/mapOrder.ts +218 -0
  428. package/src/utils/mapPosition.ts +40 -0
  429. package/src/utils/marketDisplay.ts +38 -0
  430. package/src/utils/orderFormatting.ts +93 -0
  431. package/src/utils/priceStepToAggregation.ts +58 -0
  432. package/src/utils/spotBalance.ts +51 -0
  433. package/src/websocket/HyperliquidWsProvider.ts +533 -0
  434. package/src/websocket/index.ts +3 -0
@@ -0,0 +1,61 @@
1
+ import { type PerpsSDKClient, type ProviderGetQuoteParams, type QuoteListener, WsProviderBase, type WsProviderFactory } from '@lifi/perps-sdk';
2
+ import { type Subscription } from '@lifi/perps-types';
3
+ /**
4
+ * `WsProviderFactory` constructor for Hyperliquid — pass to
5
+ * `new PerpsWsClient(client, { wsProviders: { hyperliquid: hyperliquidWsProvider() } })`.
6
+ *
7
+ * Derives the active sub-DEX set from the `markets` list `PerpsWsClient`
8
+ * passes in (the provider's own key and `'spot'` are excluded — they
9
+ * aren't sub-DEX subscriptions on the HL wire). Higher-order shape mirrors
10
+ * `lighterWsProvider(options)` so the two factories register identically.
11
+ *
12
+ * @public
13
+ */
14
+ export declare const hyperliquidWsProvider: () => WsProviderFactory;
15
+ /**
16
+ * Hyperliquid realtime {@link WsProvider}: multiplexes prices, positions,
17
+ * orders, fills and spot balances over a single {@link ReconnectingWebSocket}.
18
+ * Construct via {@link hyperliquidWsProvider}.
19
+ *
20
+ * `orderUpdates` supports a single address per provider instance: HL delivers
21
+ * those frames without a user field, so frames from two concurrent address
22
+ * subscriptions on one socket cannot be attributed. Subscribing a second
23
+ * address rejects while the first still has listeners; once the first is
24
+ * released, an address switch reclaims the channel immediately.
25
+ *
26
+ * @public
27
+ */
28
+ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
29
+ private orderUpdatesKey;
30
+ private readonly subDexes;
31
+ private readonly client;
32
+ private readonly registry;
33
+ private midsBySubDex;
34
+ constructor(wsUrl: string, providerKey: string, subDexes: string[], client?: PerpsSDKClient);
35
+ subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
36
+ protected openChannel(sub: Subscription): Promise<() => void>;
37
+ /**
38
+ * Enforce the single-address `orderUpdates` invariant (HL frames carry no
39
+ * user field, so concurrent address subscriptions are unattributable). A
40
+ * listener-free lingering channel for another address is torn down eagerly
41
+ * so a wallet switch needn't wait out the teardown linger; a live one throws.
42
+ */
43
+ private claimOrderUpdatesKey;
44
+ /** Build sub-key + payload pairs for each sub-dex allMids subscription. */
45
+ private getPriceSubEntries;
46
+ protected onClose(): void;
47
+ protected sendSubscribe(payload: object): void;
48
+ protected toKey(sub: Subscription): string;
49
+ private toHlPayload;
50
+ protected handleMessage(raw: string): void;
51
+ private handleAllMids;
52
+ /** Latest mid per `Market.id`, merged across sub-dex allMids frames. */
53
+ private mergedMids;
54
+ private handleL2Book;
55
+ private handleCandle;
56
+ private handleOrderUpdates;
57
+ private handleUserFills;
58
+ private handleAllDexsClearinghouseState;
59
+ private handleSpotState;
60
+ }
61
+ //# sourceMappingURL=HyperliquidWsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA8B1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,QAC5B,iBAIH,CAAA;AAEH;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,YAAY,CAA4C;gBAG9D,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,cAAc;IAWnB,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAgDnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB;cAaP,OAAO,IAAI,IAAI;IAKlC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAmB1C,OAAO,CAAC,WAAW;IAqCnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IAyDnC,OAAO,CAAC,aAAa;IAYrB,wEAAwE;IACxE,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,+BAA+B;IAkBvC,OAAO,CAAC,eAAe;CAaxB"}
@@ -0,0 +1,2 @@
1
+ export { HyperliquidWsProvider } from './HyperliquidWsProvider.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/websocket/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@lifi/perps-sdk-provider-hyperliquid",
3
+ "version": "0.2.0-alpha.0",
4
+ "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
+ "homepage": "https://github.com/lifinance/perps-sdk",
6
+ "bugs": {
7
+ "url": "https://github.com/lifinance/perps-sdk/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/lifinance/perps-sdk.git"
12
+ },
13
+ "license": "Apache-2.0",
14
+ "author": "LI.FI <dev@li.fi>",
15
+ "type": "module",
16
+ "main": "./dist/cjs/index.js",
17
+ "module": "./dist/esm/index.js",
18
+ "types": "./dist/types/index.d.ts",
19
+ "typings": "./dist/types/index.d.ts",
20
+ "sideEffects": false,
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/types/index.d.ts",
24
+ "import": "./dist/esm/index.js",
25
+ "default": "./dist/cjs/index.js"
26
+ },
27
+ "./realtime": {
28
+ "types": "./dist/types/realtime/index.d.ts",
29
+ "import": "./dist/esm/realtime/index.js",
30
+ "default": "./dist/cjs/realtime/index.js"
31
+ },
32
+ "./utils": {
33
+ "types": "./dist/types/utils/index.d.ts",
34
+ "import": "./dist/esm/utils/index.js",
35
+ "default": "./dist/cjs/utils/index.js"
36
+ },
37
+ "./package.json": "./package.json"
38
+ },
39
+ "files": [
40
+ "dist/**",
41
+ "!dist/**/*.tsbuildinfo",
42
+ "src/**/*.ts",
43
+ "!src/**/*.spec.ts",
44
+ "!src/**/*.test.ts",
45
+ "!src/**/*.mock.ts",
46
+ "!src/**/*.handlers.ts",
47
+ "!src/**/*.tsbuildinfo",
48
+ "!**/__mocks__/**",
49
+ "!*.tmp",
50
+ "!*.env",
51
+ "!tsconfig.json"
52
+ ],
53
+ "dependencies": {
54
+ "big.js": "^7.0.1",
55
+ "@lifi/perps-types": "0.2.0-alpha.0"
56
+ },
57
+ "peerDependencies": {
58
+ "viem": "^2.48.8",
59
+ "@lifi/perps-sdk": "0.2.0-alpha.0"
60
+ },
61
+ "publishConfig": {
62
+ "access": "public"
63
+ },
64
+ "keywords": [
65
+ "perps",
66
+ "perpetuals",
67
+ "trading",
68
+ "defi",
69
+ "lifi",
70
+ "sdk",
71
+ "hyperliquid"
72
+ ]
73
+ }
@@ -0,0 +1,381 @@
1
+ import {
2
+ type ActionSignerContribution,
3
+ type LiquidationEstimateParams,
4
+ PerpsError,
5
+ PerpsErrorMessage,
6
+ type PerpsProviderPlugin,
7
+ type PerpsSDKClient,
8
+ type ProviderGetAccountParams,
9
+ type ProviderGetActivityParams,
10
+ type ProviderGetFillsParams,
11
+ type ProviderGetOrderParams,
12
+ type ProviderGetOrdersParams,
13
+ type ProviderGetPositionsParams,
14
+ type ProviderGetQuoteParams,
15
+ resolveQuote,
16
+ type SDKRequestOptions,
17
+ type SignActionsContext,
18
+ type StorageAdapter,
19
+ } from '@lifi/perps-sdk'
20
+ import {
21
+ type AccountConfig,
22
+ type AccountConfigSetting,
23
+ type AccountResponse,
24
+ type AccountSummary,
25
+ type ActionStep,
26
+ ActionType,
27
+ type ActivitiesResponse,
28
+ type FillsResponse,
29
+ type Market,
30
+ type Order,
31
+ type OrdersResponse,
32
+ PerpsErrorCode,
33
+ type PerpsMarket,
34
+ PerpsSigner,
35
+ type Position,
36
+ type PositionsResponse,
37
+ type ProviderAction,
38
+ type Quote,
39
+ type SignedActionStep,
40
+ type SigningMethod,
41
+ } from '@lifi/perps-types'
42
+ import { type Address, type Hex, isAddress } from 'viem'
43
+ import { projectHyperliquidConfigSettings } from './accountConfig.js'
44
+ import { summarizeHyperliquidAccount } from './accountSummary.js'
45
+ import {
46
+ DEFAULT_HYPERLIQUID_API_URL,
47
+ HYPERLIQUID_FEE_TIER_FALLBACK,
48
+ PROVIDER_KEY,
49
+ SPOT_MARKET_ID,
50
+ } from './constants.js'
51
+ import { HyperliquidContextRef } from './context.js'
52
+ import { getAccount } from './services/getAccount.js'
53
+ import { getActivity } from './services/getActivity.js'
54
+ import { getFills } from './services/getFills.js'
55
+ import { getOrder } from './services/getOrder.js'
56
+ import { getOrders } from './services/getOrders.js'
57
+ import { getPositions } from './services/getPositions.js'
58
+ import {
59
+ type HyperliquidAgent,
60
+ HyperliquidAgentStore,
61
+ } from './signers/HyperliquidAgentStore.js'
62
+ import { hyperliquidSignActions } from './signers/signActions.js'
63
+ import type { HlExtraAgents } from './types/index.js'
64
+ import { hlInfoOptions, infoRequest } from './utils/infoClient.js'
65
+ import { calculateLiquidationPrice } from './utils/liquidation.js'
66
+ import { formatOrderPrice, formatOrderSize } from './utils/orderFormatting.js'
67
+
68
+ /**
69
+ * Options for {@link hyperliquidProvider}.
70
+ *
71
+ * @public
72
+ */
73
+ export interface HyperliquidProviderOptions {
74
+ /**
75
+ * Base URL for the Hyperliquid REST surface. Defaults to
76
+ * `https://api.hyperliquid.xyz`. Override to point at a custom or
77
+ * third-party endpoint — e.g. a reverse proxy, a self-hosted mirror, or a
78
+ * rate-limit-managed gateway in front of Hyperliquid.
79
+ */
80
+ apiUrl?: string
81
+ /**
82
+ * Storage adapter for the user's per-address Hyperliquid agent keypair.
83
+ * Defaults to browser `localStorage`. Pass a custom adapter for SSR /
84
+ * non-browser hosts or encrypted storage.
85
+ */
86
+ storage?: StorageAdapter
87
+ }
88
+
89
+ /**
90
+ * Hyperliquid provider plugin extended with agent-keypair lifecycle methods.
91
+ * Hyperliquid signs trading actions with a per-user agent wallet the user
92
+ * approves via `APPROVE_AGENT`; the plugin owns that keypair's generation,
93
+ * persistence, and revocation. The base {@link PerpsProviderPlugin} contract
94
+ * stays provider-agnostic — this extension is opt-in for callers that
95
+ * explicitly type against it (e.g. to surface a "revoke agent" affordance).
96
+ */
97
+ export interface HyperliquidPerpsProvider extends PerpsProviderPlugin {
98
+ /** Resolve the agent wallet address, throwing if none has been created. */
99
+ getAgentAddress(address: Address): Promise<Address>
100
+ /** Whether an agent keypair exists for the user address. */
101
+ hasAgent(address: Address): Promise<boolean>
102
+ /** Remove the user's agent keypair (revoke local authorization). */
103
+ removeAgent(address: Address): Promise<void>
104
+ /** Import an existing agent keypair for the user address. */
105
+ importAgent(address: Address, privateKey: Hex): Promise<HyperliquidAgent>
106
+ }
107
+
108
+ /**
109
+ * Factory for the Hyperliquid {@link PerpsProviderPlugin}.
110
+ *
111
+ * Account-specific state is read direct from `${apiUrl}/info`; enriched asset
112
+ * metadata and public/shared data come from the LI.FI backend (Valkey-cached).
113
+ * Pass to `createPerpsClient({ providers: [hyperliquidProvider()] })` and look
114
+ * up via `client.getProvider('hyperliquid')`.
115
+ *
116
+ * Write actions are EIP-712 typed data signed by the user's Hyperliquid agent
117
+ * keypair; the plugin owns that keypair (generation, storage, revocation) and
118
+ * dispatches the agent-signed arm via `signActions`.
119
+ *
120
+ * @example
121
+ * ```ts
122
+ * const client = createPerpsClient({
123
+ * integrator: 'my-app',
124
+ * providers: [hyperliquidProvider()],
125
+ * })
126
+ * ```
127
+ * @public
128
+ */
129
+ export function hyperliquidProvider(
130
+ options: HyperliquidProviderOptions = {}
131
+ ): HyperliquidPerpsProvider {
132
+ const apiUrl = options.apiUrl ?? DEFAULT_HYPERLIQUID_API_URL
133
+ const agentStore = new HyperliquidAgentStore(options.storage)
134
+ const contextRef = new HyperliquidContextRef(apiUrl)
135
+
136
+ const toLowerAddress = (value: unknown): string | null =>
137
+ typeof value === 'string' && isAddress(value) ? value.toLowerCase() : null
138
+
139
+ const toValidUntilMs = (value: unknown): number | null => {
140
+ if (typeof value === 'number' && Number.isFinite(value)) {
141
+ return value
142
+ }
143
+ if (typeof value === 'string') {
144
+ const parsed = Number(value)
145
+ return Number.isFinite(parsed) ? parsed : null
146
+ }
147
+ return null
148
+ }
149
+
150
+ const isKnownExpiredRemoteAgent = async (
151
+ address: Address,
152
+ localAgentAddress: Address
153
+ ): Promise<boolean> => {
154
+ let context: ReturnType<typeof contextRef.require> | null = null
155
+ try {
156
+ context = contextRef.require()
157
+ } catch {
158
+ // Unbound provider (e.g. direct unit tests) cannot query /info.
159
+ return false
160
+ }
161
+ const agents = await infoRequest<HlExtraAgents>(
162
+ apiUrl,
163
+ { type: 'extraAgents', user: address },
164
+ hlInfoOptions(context.client)
165
+ )
166
+ const local = localAgentAddress.toLowerCase()
167
+ const match = agents.find(
168
+ (agent) => toLowerAddress(agent.address) === local
169
+ ) as Record<string, unknown> | undefined
170
+ if (!match) {
171
+ return false
172
+ }
173
+ const validUntilMs = toValidUntilMs(match.validUntil)
174
+ return validUntilMs !== null && validUntilMs <= Date.now()
175
+ }
176
+
177
+ const resolveApproveAgentAddress = async (
178
+ address: Address
179
+ ): Promise<Address> => {
180
+ try {
181
+ const localAgent = await agentStore.get(address)
182
+ try {
183
+ if (await isKnownExpiredRemoteAgent(address, localAgent.address)) {
184
+ await agentStore.remove(address)
185
+ return (await agentStore.getOrCreate(address)).address
186
+ }
187
+ } catch {
188
+ // If the upstream extra-agent probe fails, keep the existing local key.
189
+ }
190
+ return localAgent.address
191
+ } catch (error) {
192
+ if (
193
+ error instanceof PerpsError &&
194
+ error.message === PerpsErrorMessage.AgentNotFound
195
+ ) {
196
+ return (await agentStore.getOrCreate(address)).address
197
+ }
198
+ throw error
199
+ }
200
+ }
201
+
202
+ return {
203
+ type: PROVIDER_KEY,
204
+
205
+ bind: (client: PerpsSDKClient): void => contextRef.bind(client),
206
+
207
+ getAgentAddress: async (address: Address): Promise<Address> =>
208
+ (await agentStore.get(address)).address,
209
+
210
+ hasAgent: (address: Address): Promise<boolean> => agentStore.has(address),
211
+
212
+ removeAgent: (address: Address): Promise<void> =>
213
+ agentStore.remove(address),
214
+
215
+ importAgent: (
216
+ address: Address,
217
+ privateKey: Hex
218
+ ): Promise<HyperliquidAgent> => agentStore.import(address, privateKey),
219
+
220
+ resolveActionRequest: async (
221
+ action: ActionType,
222
+ address: Address,
223
+ signers: PerpsSigner[]
224
+ ): Promise<ActionSignerContribution> => {
225
+ // APPROVE_AGENT is user-signed: the user authorises the agent, so the
226
+ // agent address rides as a param (not signerAddress). The agent is
227
+ // provisioned on first use so its address is known before the backend
228
+ // builds the typed data.
229
+ if (action === ActionType.APPROVE_AGENT) {
230
+ const agentAddress = await resolveApproveAgentAddress(address)
231
+ return { params: { agentAddress } }
232
+ }
233
+ // Agent-signed actions (trades, account-mode) carry the agent as the
234
+ // on-wire signerAddress. User-signed actions (builder-fee, withdrawal)
235
+ // contribute nothing — core submits under the user's own address.
236
+ if (signers.includes(PerpsSigner.AGENT)) {
237
+ const agent = await agentStore.get(address)
238
+ return { signerAddress: agent.address }
239
+ }
240
+ return {}
241
+ },
242
+
243
+ signActions: (
244
+ method: SigningMethod,
245
+ steps: ActionStep[],
246
+ address: Address,
247
+ ctx?: SignActionsContext
248
+ ): Promise<SignedActionStep[]> =>
249
+ hyperliquidSignActions(agentStore, method, steps, address, ctx),
250
+
251
+ getAccount: (
252
+ params: ProviderGetAccountParams,
253
+ opts?: SDKRequestOptions
254
+ ): Promise<AccountResponse> =>
255
+ getAccount(contextRef.require(), { address: params.address }, opts),
256
+
257
+ getPositions: (
258
+ params: ProviderGetPositionsParams,
259
+ opts?: SDKRequestOptions
260
+ ): Promise<PositionsResponse> =>
261
+ getPositions(
262
+ contextRef.require(),
263
+ {
264
+ address: params.address,
265
+ marketId: params.marketId,
266
+ limit: params.limit,
267
+ },
268
+ opts
269
+ ),
270
+
271
+ getOrders: (
272
+ params: ProviderGetOrdersParams,
273
+ opts?: SDKRequestOptions
274
+ ): Promise<OrdersResponse> =>
275
+ getOrders(
276
+ contextRef.require(),
277
+ {
278
+ address: params.address,
279
+ marketId: params.marketId,
280
+ limit: params.limit,
281
+ },
282
+ opts
283
+ ),
284
+
285
+ getOrder: (
286
+ params: ProviderGetOrderParams,
287
+ opts?: SDKRequestOptions
288
+ ): Promise<Order> =>
289
+ getOrder(
290
+ contextRef.require(),
291
+ { address: params.address, id: params.id },
292
+ opts
293
+ ),
294
+
295
+ getFills: (
296
+ params: ProviderGetFillsParams,
297
+ opts?: SDKRequestOptions
298
+ ): Promise<FillsResponse> =>
299
+ getFills(
300
+ contextRef.require(),
301
+ {
302
+ address: params.address,
303
+ limit: params.limit,
304
+ cursor: params.cursor,
305
+ startTime: params.startTime,
306
+ endTime: params.endTime,
307
+ },
308
+ opts
309
+ ),
310
+
311
+ getActivity: (
312
+ params: ProviderGetActivityParams,
313
+ opts?: SDKRequestOptions
314
+ ): Promise<ActivitiesResponse> =>
315
+ getActivity(
316
+ contextRef.require(),
317
+ {
318
+ address: params.address,
319
+ limit: params.limit,
320
+ cursor: params.cursor,
321
+ startTime: params.startTime,
322
+ endTime: params.endTime,
323
+ type: params.type,
324
+ },
325
+ opts
326
+ ),
327
+
328
+ getQuote: (
329
+ params: ProviderGetQuoteParams,
330
+ opts?: SDKRequestOptions
331
+ ): Promise<Quote> =>
332
+ resolveQuote(
333
+ contextRef.require().client,
334
+ PROVIDER_KEY,
335
+ params,
336
+ HYPERLIQUID_FEE_TIER_FALLBACK,
337
+ opts
338
+ ),
339
+
340
+ getPortfolioSummary: (
341
+ account: AccountResponse,
342
+ positions: Position[]
343
+ ): AccountSummary => summarizeHyperliquidAccount(account, positions),
344
+
345
+ formatOrderPrice: (market: Market, price: number): string =>
346
+ formatOrderPrice(
347
+ price,
348
+ market.szDecimals,
349
+ market.categoryId === SPOT_MARKET_ID ? 'spot' : undefined
350
+ ),
351
+
352
+ formatOrderSize: (market: Market, size: number): string =>
353
+ formatOrderSize(size, market.szDecimals),
354
+
355
+ estimateLiquidationPrice: (
356
+ market: PerpsMarket,
357
+ params: LiquidationEstimateParams
358
+ ): number | undefined =>
359
+ calculateLiquidationPrice(
360
+ params.entryPrice,
361
+ params.leverage,
362
+ params.isLong,
363
+ market.maxLeverage
364
+ ),
365
+
366
+ projectConfig: (
367
+ config: AccountConfig,
368
+ setup: ProviderAction[],
369
+ options: ProviderAction[]
370
+ ): AccountConfigSetting[] => {
371
+ if (config.provider !== PROVIDER_KEY) {
372
+ throw new PerpsError(
373
+ PerpsErrorCode.SDKError,
374
+ `hyperliquidProvider.projectConfig received config for provider ` +
375
+ `'${config.provider}'.`
376
+ )
377
+ }
378
+ return projectHyperliquidConfigSettings(config, setup, options)
379
+ },
380
+ }
381
+ }
@@ -0,0 +1,89 @@
1
+ import { PerpsError } from '@lifi/perps-sdk'
2
+ import type {
3
+ AccountConfigSetting,
4
+ HyperliquidAccountConfig,
5
+ ProviderAction,
6
+ } from '@lifi/perps-types'
7
+ import { ActionType, PerpsErrorCode } from '@lifi/perps-types'
8
+
9
+ function assertNever(value: never): never {
10
+ throw new Error(
11
+ `Unreachable: exhaustiveness check failed for value ${JSON.stringify(value)}`
12
+ )
13
+ }
14
+
15
+ /**
16
+ * Project a single Hyperliquid descriptor against the typed
17
+ * `HyperliquidAccountConfig` into an `AccountConfigSetting`.
18
+ *
19
+ * Mapping table:
20
+ *
21
+ * | descriptor.type | projected values
22
+ * |-----------------------|----------------------------------------------
23
+ * | APPROVE_AGENT | [] (no parameters)
24
+ * | APPROVE_BUILDER_FEE | [] (no parameters)
25
+ * | ACCOUNT_MODE | [{ name: 'mode', value: config.abstractionMode }]
26
+ *
27
+ * The switch is exhaustive over `ActionType` so enum additions force a
28
+ * compile error in the `default` arm. ActionTypes that are not valid on
29
+ * `Provider.setup` / `Provider.options` for Hyperliquid throw at runtime.
30
+ */
31
+ function projectHyperliquidDescriptor(
32
+ descriptor: ProviderAction,
33
+ config: HyperliquidAccountConfig
34
+ ): AccountConfigSetting {
35
+ switch (descriptor.type) {
36
+ case ActionType.APPROVE_AGENT:
37
+ case ActionType.APPROVE_BUILDER_FEE:
38
+ return { type: descriptor.type, values: [] }
39
+
40
+ case ActionType.ACCOUNT_MODE:
41
+ return {
42
+ type: descriptor.type,
43
+ values: [{ name: 'mode', value: config.abstractionMode }],
44
+ }
45
+
46
+ case ActionType.ACCOUNT_TYPE:
47
+ case ActionType.SEND_ASSET:
48
+ case ActionType.WITHDRAWAL:
49
+ case ActionType.TRANSFER:
50
+ case ActionType.PLACE_ORDER:
51
+ case ActionType.PLACE_TRIGGER_ORDER:
52
+ case ActionType.CANCEL_ORDER:
53
+ case ActionType.CANCEL_ALL_ORDERS:
54
+ case ActionType.MODIFY_ORDER:
55
+ case ActionType.UPDATE_LEVERAGE:
56
+ case ActionType.UPDATE_POSITION_MARGIN:
57
+ case ActionType.REGISTER_API_KEY:
58
+ case ActionType.APPROVE_READ_ONLY_TOKEN:
59
+ case ActionType.DEPOSIT:
60
+ case ActionType.META_VOTE:
61
+ case ActionType.META_ACCEPT_TERMS:
62
+ throw new PerpsError(
63
+ PerpsErrorCode.SDKError,
64
+ `Hyperliquid account-config mapper has no projection for ` +
65
+ `descriptor type '${descriptor.type}' — this ActionType is not ` +
66
+ `valid on Provider.setup / Provider.options for Hyperliquid.`
67
+ )
68
+
69
+ default:
70
+ return assertNever(descriptor.type)
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Project the union of Hyperliquid setup + options descriptors against the
76
+ * typed `HyperliquidAccountConfig`. Produces exactly one
77
+ * `AccountConfigSetting` per descriptor, in `setup`-then-`options` order.
78
+ *
79
+ * @public
80
+ */
81
+ export function projectHyperliquidConfigSettings(
82
+ config: HyperliquidAccountConfig,
83
+ setup: ProviderAction[],
84
+ options: ProviderAction[]
85
+ ): AccountConfigSetting[] {
86
+ return [...setup, ...options].map((descriptor) =>
87
+ projectHyperliquidDescriptor(descriptor, config)
88
+ )
89
+ }
@@ -0,0 +1,32 @@
1
+ import { summarizeAccount } from '@lifi/perps-sdk'
2
+ import type {
3
+ AccountResponse,
4
+ AccountSummary,
5
+ Position,
6
+ } from '@lifi/perps-types'
7
+ import { HlAbstractionMode } from './types/index.js'
8
+
9
+ /**
10
+ * In `unifiedAccount`/`portfolioMargin` the whole account lives in spot, so the
11
+ * collateral rows are already gross holdings (locked margin included). In
12
+ * `disabled`/`dexAbstraction` (and the unset/standard mode) the venue rows hold
13
+ * `accountValue`, which Hyperliquid reports net of locked margin — i.e. free.
14
+ */
15
+ const isUnifiedMode = (account: AccountResponse): boolean =>
16
+ account.config.provider === 'hyperliquid' &&
17
+ (account.config.abstractionMode === HlAbstractionMode.UNIFIED_ACCOUNT ||
18
+ account.config.abstractionMode === HlAbstractionMode.PORTFOLIO_MARGIN)
19
+
20
+ /**
21
+ * Roll a Hyperliquid {@link AccountResponse} up into an {@link AccountSummary},
22
+ * branching on the abstraction mode so the gross/free meaning of the collateral
23
+ * rows is interpreted correctly.
24
+ *
25
+ * @public
26
+ */
27
+ export function summarizeHyperliquidAccount(
28
+ account: AccountResponse,
29
+ positions: Position[]
30
+ ): AccountSummary {
31
+ return summarizeAccount(account, positions, isUnifiedMode(account))
32
+ }
@@ -0,0 +1,47 @@
1
+ import type { FeeTier } from '@lifi/perps-types'
2
+
3
+ /**
4
+ * Hyperliquid provider key (exported from the package index as
5
+ * `HYPERLIQUID_PROVIDER_KEY`).
6
+ *
7
+ * @public
8
+ */
9
+ export const PROVIDER_KEY = 'hyperliquid'
10
+
11
+ /**
12
+ * Default Hyperliquid REST base URL.
13
+ *
14
+ * @public
15
+ */
16
+ export const DEFAULT_HYPERLIQUID_API_URL = 'https://api.hyperliquid.xyz'
17
+
18
+ /**
19
+ * Approximate published baseline maker/taker fee tier for Hyperliquid, used to
20
+ * seed fee math before the live account `feeTier` resolves. Rates are fractions
21
+ * (not basis points): `0.00015` = 0.015% maker, `0.00045` = 0.045% taker.
22
+ *
23
+ * @public
24
+ */
25
+ export const HYPERLIQUID_FEE_TIER_FALLBACK: FeeTier = {
26
+ maker: '0.00015',
27
+ taker: '0.00045',
28
+ }
29
+
30
+ /** @internal */
31
+ export const DEFAULT_HISTORY_LIMIT = 50
32
+ /** @internal */
33
+ export const MAX_HISTORY_LIMIT = 200
34
+ /** @internal */
35
+ export const NINETY_DAYS_MS = 90 * 24 * 60 * 60 * 1000
36
+
37
+ /**
38
+ * Main perps DEX uses an empty sub-dex name on the wire; surfaced as
39
+ * 'hyperliquid' in normalised market IDs.
40
+ *
41
+ * @internal
42
+ */
43
+ export const MAIN_DEX_NAME = ''
44
+ /** @internal */
45
+ export const MAIN_MARKET_ID = 'hyperliquid'
46
+ /** @internal */
47
+ export const SPOT_MARKET_ID = 'spot'