@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,49 @@
1
+ import type { MarketDisplay, OpenOrder, Order, TriggerOrder } from '@lifi/perps-types';
2
+ import { OrderStatus, OrderType } from '@lifi/perps-types';
3
+ import type { HlFrontendOpenOrder, HlOrderDetail } from '../types/index.js';
4
+ /**
5
+ * Map a Hyperliquid orderType string to the OrderType enum.
6
+ *
7
+ * @public
8
+ */
9
+ export declare const mapOrderType: (orderType: string) => OrderType;
10
+ /** @public */
11
+ export declare const isTriggerType: (type: OrderType) => boolean;
12
+ /**
13
+ * Decide whether a raw Hyperliquid order belongs in the cross-provider
14
+ * `triggerOrders` bucket. Single source of truth for both the REST
15
+ * `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
16
+ * WS handler (`HlOrderDetail.order`, a strict subset).
17
+ *
18
+ * Authoritative signals, in order:
19
+ * 1. `isTrigger` — REST-only boolean Hyperliquid sets on
20
+ * `frontendOpenOrders`. Definitive when present.
21
+ * 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
22
+ * position.
23
+ * 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
24
+ * Non-trigger orders carry the literal `'N/A'`.
25
+ * 4. `triggerPx` non-null and non-zero — present on both. The reliable
26
+ * trigger signal on the WS wire when `orderType` lies (HL pushes
27
+ * `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
28
+ * corrected type).
29
+ * 5. `orderType` — final fall-back via `isTriggerType`.
30
+ * @public
31
+ */
32
+ export declare const isTriggerOrder: (o: HlFrontendOpenOrder | HlOrderDetail["order"]) => boolean;
33
+ /** @public */
34
+ export declare const mapOpenOrder: (o: HlFrontendOpenOrder, market: MarketDisplay) => OpenOrder;
35
+ /** @public */
36
+ export declare const mapTriggerOrder: (o: HlFrontendOpenOrder, market: MarketDisplay) => TriggerOrder;
37
+ /** @public */
38
+ export declare const mapOrderStatus: (status: string) => OrderStatus;
39
+ /**
40
+ * Map a raw Hyperliquid order status to a short English sentence
41
+ * describing *why* the order ended in a terminal non-FILLED state. Bare
42
+ * `canceled`/`cancelled`/`rejected` carry no actionable detail and
43
+ * return `undefined`; so do non-terminal and unknown values.
44
+ * @public
45
+ */
46
+ export declare const mapStatusReason: (status: string) => string | undefined;
47
+ /** @public */
48
+ export declare const mapOrder: (detail: HlOrderDetail, market: MarketDisplay) => Order;
49
+ //# sourceMappingURL=mapOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,WAAW,EACX,SAAS,EAEV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,SAehD,CAAA;AAED,cAAc;AACd,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,KAAG,OAIjB,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,GACzB,GAAG,mBAAmB,GAAG,aAAa,CAAC,OAAO,CAAC,KAC9C,OAkBF,CAAA;AAED,cAAc;AACd,eAAO,MAAM,YAAY,GACvB,GAAG,mBAAmB,EACtB,QAAQ,aAAa,KACpB,SAaD,CAAA;AAEF,cAAc;AACd,eAAO,MAAM,eAAe,GAC1B,GAAG,mBAAmB,EACtB,QAAQ,aAAa,KACpB,YAcF,CAAA;AAED,cAAc;AACd,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,WAmB/C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAuBzD,CAAA;AAeD,cAAc;AACd,eAAO,MAAM,QAAQ,GACnB,QAAQ,aAAa,EACrB,QAAQ,aAAa,KACpB,KAsBF,CAAA"}
@@ -0,0 +1,182 @@
1
+ import { OrderSide, OrderStatus, OrderType, TimeInForce, } from '@lifi/perps-types';
2
+ /**
3
+ * Map a Hyperliquid orderType string to the OrderType enum.
4
+ *
5
+ * @public
6
+ */
7
+ export const mapOrderType = (orderType) => {
8
+ switch (orderType) {
9
+ case 'Take Profit Market':
10
+ return OrderType.TAKE_PROFIT_MARKET;
11
+ case 'Take Profit Limit':
12
+ return OrderType.TAKE_PROFIT_LIMIT;
13
+ case 'Stop Market':
14
+ return OrderType.STOP_MARKET;
15
+ case 'Stop Limit':
16
+ return OrderType.STOP_LIMIT;
17
+ case 'Market':
18
+ return OrderType.MARKET;
19
+ default:
20
+ return OrderType.LIMIT;
21
+ }
22
+ };
23
+ /** @public */
24
+ export const isTriggerType = (type) => type === OrderType.TAKE_PROFIT_MARKET ||
25
+ type === OrderType.TAKE_PROFIT_LIMIT ||
26
+ type === OrderType.STOP_MARKET ||
27
+ type === OrderType.STOP_LIMIT;
28
+ /**
29
+ * Decide whether a raw Hyperliquid order belongs in the cross-provider
30
+ * `triggerOrders` bucket. Single source of truth for both the REST
31
+ * `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
32
+ * WS handler (`HlOrderDetail.order`, a strict subset).
33
+ *
34
+ * Authoritative signals, in order:
35
+ * 1. `isTrigger` — REST-only boolean Hyperliquid sets on
36
+ * `frontendOpenOrders`. Definitive when present.
37
+ * 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
38
+ * position.
39
+ * 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
40
+ * Non-trigger orders carry the literal `'N/A'`.
41
+ * 4. `triggerPx` non-null and non-zero — present on both. The reliable
42
+ * trigger signal on the WS wire when `orderType` lies (HL pushes
43
+ * `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
44
+ * corrected type).
45
+ * 5. `orderType` — final fall-back via `isTriggerType`.
46
+ * @public
47
+ */
48
+ export const isTriggerOrder = (o) => {
49
+ if ('isTrigger' in o && o.isTrigger === true) {
50
+ return true;
51
+ }
52
+ if ('isPositionTpsl' in o && o.isPositionTpsl === true) {
53
+ return true;
54
+ }
55
+ if (o.triggerCondition && o.triggerCondition !== 'N/A') {
56
+ return true;
57
+ }
58
+ if (o.triggerPx != null &&
59
+ o.triggerPx !== '' &&
60
+ parseFloat(o.triggerPx) > 0) {
61
+ return true;
62
+ }
63
+ return isTriggerType(mapOrderType(o.orderType));
64
+ };
65
+ /** @public */
66
+ export const mapOpenOrder = (o, market) => ({
67
+ orderId: String(o.oid),
68
+ market,
69
+ side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
70
+ type: mapOrderType(o.orderType),
71
+ size: o.sz,
72
+ price: o.limitPx,
73
+ filledSize: o.origSz
74
+ ? (parseFloat(o.origSz) - parseFloat(o.sz)).toString()
75
+ : '0',
76
+ reduceOnly: o.reduceOnly ?? false,
77
+ label: o.isTrigger ? o.triggerCondition : undefined,
78
+ createdAt: new Date(o.timestamp).toISOString(),
79
+ });
80
+ /** @public */
81
+ export const mapTriggerOrder = (o, market) => {
82
+ const type = mapOrderType(o.orderType);
83
+ const isLimit = type === OrderType.TAKE_PROFIT_LIMIT || type === OrderType.STOP_LIMIT;
84
+ return {
85
+ orderId: String(o.oid),
86
+ market,
87
+ type,
88
+ size: o.sz,
89
+ triggerPrice: o.triggerPx,
90
+ ...(isLimit ? { limitPrice: o.limitPx } : {}),
91
+ label: o.triggerCondition,
92
+ createdAt: new Date(o.timestamp).toISOString(),
93
+ };
94
+ };
95
+ /** @public */
96
+ export const mapOrderStatus = (status) => {
97
+ switch (status) {
98
+ case 'open':
99
+ case 'resting':
100
+ return OrderStatus.OPEN;
101
+ case 'filled':
102
+ return OrderStatus.FILLED;
103
+ case 'canceled':
104
+ case 'cancelled':
105
+ return OrderStatus.CANCELLED;
106
+ case 'rejected':
107
+ return OrderStatus.REJECTED;
108
+ case 'triggered':
109
+ return OrderStatus.TRIGGERED;
110
+ case 'marginCanceled':
111
+ return OrderStatus.CANCELLED;
112
+ default:
113
+ return OrderStatus.PENDING;
114
+ }
115
+ };
116
+ /**
117
+ * Map a raw Hyperliquid order status to a short English sentence
118
+ * describing *why* the order ended in a terminal non-FILLED state. Bare
119
+ * `canceled`/`cancelled`/`rejected` carry no actionable detail and
120
+ * return `undefined`; so do non-terminal and unknown values.
121
+ * @public
122
+ */
123
+ export const mapStatusReason = (status) => {
124
+ switch (status) {
125
+ case 'iocCanceled':
126
+ return 'Order cancelled: not enough liquidity to fill immediately.';
127
+ case 'reduceOnlyCanceled':
128
+ return 'Order cancelled: would not reduce your position.';
129
+ case 'marginCanceled':
130
+ return 'Order cancelled: insufficient margin.';
131
+ case 'liquidatedCanceled':
132
+ return 'Order cancelled: account was liquidated.';
133
+ case 'siblingFilledCanceled':
134
+ return 'Order cancelled: sibling OCO order filled first.';
135
+ case 'selfTradeCanceled':
136
+ return 'Order cancelled: would self-trade against your own resting order.';
137
+ case 'tickRejected':
138
+ return 'Order rejected: price did not match the tick size.';
139
+ case 'minTradeNtlRejected':
140
+ return 'Order rejected: notional value below the minimum trade size.';
141
+ case 'delistedRejected':
142
+ return 'Order rejected: market has been delisted.';
143
+ default:
144
+ return undefined;
145
+ }
146
+ };
147
+ const mapTimeInForce = (tif) => {
148
+ switch (tif) {
149
+ case 'Gtc':
150
+ return TimeInForce.GTC;
151
+ case 'Ioc':
152
+ return TimeInForce.IOC;
153
+ case 'Alo':
154
+ return TimeInForce.POST_ONLY;
155
+ default:
156
+ return undefined;
157
+ }
158
+ };
159
+ /** @public */
160
+ export const mapOrder = (detail, market) => {
161
+ const o = detail.order;
162
+ const filled = parseFloat(o.origSz) - parseFloat(o.sz);
163
+ return {
164
+ orderId: String(o.oid),
165
+ market,
166
+ side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
167
+ type: mapOrderType(o.orderType),
168
+ price: o.limitPx,
169
+ originalSize: o.origSz,
170
+ remainingSize: o.sz,
171
+ filledSize: filled.toString(),
172
+ timeInForce: mapTimeInForce(o.tif ?? undefined),
173
+ reduceOnly: o.reduceOnly ?? undefined,
174
+ isTrigger: o.triggerCondition !== undefined && o.triggerCondition !== 'N/A',
175
+ triggerPrice: o.triggerPx ?? undefined,
176
+ status: mapOrderStatus(detail.status),
177
+ statusReason: mapStatusReason(detail.status),
178
+ createdAt: new Date(o.timestamp).toISOString(),
179
+ updatedAt: new Date(detail.statusTimestamp).toISOString(),
180
+ };
181
+ };
182
+ //# sourceMappingURL=mapOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { MarketDisplay, Position } from '@lifi/perps-types';
2
+ import type { HlAssetPosition } from '../types/index.js';
3
+ /**
4
+ * True when the assetPosition has non-zero size. Hyperliquid keeps zero-size
5
+ * rows in clearinghouse states after a close; both the REST and WS positions
6
+ * paths drop them so a close surfaces as absence from the open set.
7
+ * @public
8
+ */
9
+ export declare const isOpenAssetPosition: (ap: HlAssetPosition) => boolean;
10
+ /** @public */
11
+ export declare const mapPosition: (ap: HlAssetPosition, market: MarketDisplay) => Position;
12
+ //# sourceMappingURL=mapPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,eAAe,KAAG,OAChB,CAAA;AAE1C,cAAc;AACd,eAAO,MAAM,WAAW,GACtB,IAAI,eAAe,EACnB,QAAQ,aAAa,KACpB,QAsBF,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { MarginMode, PositionSide } from '@lifi/perps-types';
2
+ /**
3
+ * True when the assetPosition has non-zero size. Hyperliquid keeps zero-size
4
+ * rows in clearinghouse states after a close; both the REST and WS positions
5
+ * paths drop them so a close surfaces as absence from the open set.
6
+ * @public
7
+ */
8
+ export const isOpenAssetPosition = (ap) => Number.parseFloat(ap.position.szi) !== 0;
9
+ /** @public */
10
+ export const mapPosition = (ap, market) => {
11
+ const pos = ap.position;
12
+ const szi = parseFloat(pos.szi);
13
+ return {
14
+ market,
15
+ side: szi >= 0 ? PositionSide.LONG : PositionSide.SHORT,
16
+ size: Math.abs(szi).toString(),
17
+ entryPrice: pos.entryPx ?? '0',
18
+ markPrice: pos.positionValue && szi !== 0
19
+ ? (parseFloat(pos.positionValue) / Math.abs(szi)).toString()
20
+ : '0',
21
+ liquidationPrice: pos.liquidationPx ?? '0',
22
+ unrealizedPnl: pos.unrealizedPnl,
23
+ leverage: ap.position.leverage.value,
24
+ marginUsed: pos.marginUsed,
25
+ marginMode: ap.position.leverage.type === 'cross'
26
+ ? MarginMode.CROSS
27
+ : MarginMode.ISOLATED,
28
+ };
29
+ };
30
+ //# sourceMappingURL=mapPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAG5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAmB,EAAW,EAAE,CAClE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAE1C,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAmB,EACnB,MAAqB,EACX,EAAE;IACZ,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAA;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAE/B,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;QACvD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG;QAC9B,SAAS,EACP,GAAG,CAAC,aAAa,IAAI,GAAG,KAAK,CAAC;YAC5B,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC5D,CAAC,CAAC,GAAG;QACT,gBAAgB,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG;QAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EACR,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO;YACnC,CAAC,CAAC,UAAU,CAAC,KAAK;YAClB,CAAC,CAAC,UAAU,CAAC,QAAQ;KAC1B,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Asset, Market } from '@lifi/perps-types';
2
+ /**
3
+ * Synthesise the {@link Asset} for a Hyperliquid wire coin. `id` and `logoURI`
4
+ * keep the raw coin — the logo CDN is keyed by it, HIP-3 `dex:` prefix
5
+ * included. `displaySymbol` drops the prefix: the category is carried by
6
+ * `categoryId`, never by the display string.
7
+ * @public
8
+ */
9
+ export declare const coinAsset: (coin: string) => Asset;
10
+ /**
11
+ * Distinct wire `dex` names to fan `clearinghouseState` / `frontendOpenOrders`
12
+ * reads across, derived from the backend market list. Spot is excluded (it has
13
+ * no clearinghouseState); the main perp dex maps to the empty string.
14
+ * @public
15
+ */
16
+ export declare const perpsDexNames: (markets: readonly Market[]) => string[];
17
+ //# sourceMappingURL=marketDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketDisplay.d.ts","sourceRoot":"","sources":["../../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAQtD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,KAKvC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,MAAM,EAShE,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { MAIN_DEX_NAME, MAIN_MARKET_ID, PROVIDER_KEY, SPOT_MARKET_ID, } from '../constants.js';
2
+ /**
3
+ * Synthesise the {@link Asset} for a Hyperliquid wire coin. `id` and `logoURI`
4
+ * keep the raw coin — the logo CDN is keyed by it, HIP-3 `dex:` prefix
5
+ * included. `displaySymbol` drops the prefix: the category is carried by
6
+ * `categoryId`, never by the display string.
7
+ * @public
8
+ */
9
+ export const coinAsset = (coin) => ({
10
+ providerId: PROVIDER_KEY,
11
+ id: coin,
12
+ displaySymbol: coin.includes(':') ? coin.slice(coin.indexOf(':') + 1) : coin,
13
+ logoURI: `https://app.hyperliquid.xyz/coins/${coin}.svg`,
14
+ });
15
+ /**
16
+ * Distinct wire `dex` names to fan `clearinghouseState` / `frontendOpenOrders`
17
+ * reads across, derived from the backend market list. Spot is excluded (it has
18
+ * no clearinghouseState); the main perp dex maps to the empty string.
19
+ * @public
20
+ */
21
+ export const perpsDexNames = (markets) => {
22
+ const names = new Set();
23
+ for (const m of markets) {
24
+ if (m.categoryId === SPOT_MARKET_ID) {
25
+ continue;
26
+ }
27
+ names.add(m.categoryId === MAIN_MARKET_ID ? MAIN_DEX_NAME : m.categoryId);
28
+ }
29
+ return [...names];
30
+ };
31
+ //# sourceMappingURL=marketDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketDisplay.js","sourceRoot":"","sources":["../../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAS,EAAE,CAAC,CAAC;IACjD,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI;IACR,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IAC5E,OAAO,EAAE,qCAAqC,IAAI,MAAM;CACzD,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA0B,EAAY,EAAE;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,SAAQ;QACV,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AACnB,CAAC,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Hyperliquid order size and price formatting for exchange submission.
3
+ *
4
+ * These encode Hyperliquid-specific order submission rules. Getting size/price
5
+ * formatting wrong causes rejected orders.
6
+ *
7
+ * @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size
8
+ */
9
+ /**
10
+ * Derive the maximum number of price decimal places for a given asset.
11
+ *
12
+ * @param szDecimals - The asset's szDecimals (from market meta)
13
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
14
+ * @returns Maximum allowed price decimals
15
+ * @public
16
+ */
17
+ export declare function getMaxPriceDecimals(szDecimals: number, market?: string): number;
18
+ /**
19
+ * Format a size value for order submission.
20
+ *
21
+ * Per Hyperliquid docs (tick-and-lot-size):
22
+ * - Size must be rounded to the asset's szDecimals
23
+ * - Trailing zeroes must be removed for signing
24
+ *
25
+ * @param size - The size value to format
26
+ * @param szDecimals - Number of decimal places allowed for this asset (from meta)
27
+ * @returns Size as a string with correct precision, no trailing zeros
28
+ * @public
29
+ */
30
+ export declare function formatOrderSize(size: number, szDecimals: number): string;
31
+ /**
32
+ * Format a price value for order submission.
33
+ *
34
+ * Per Hyperliquid docs (tick-and-lot-size):
35
+ * - Maximum 5 significant figures
36
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
37
+ * - Integer prices always allowed regardless of significant figures
38
+ * - Trailing zeroes must be removed for signing
39
+ *
40
+ * Rounding is half-up (away from zero at exact halfway) on the true decimal
41
+ * value, not on the binary float — (1.005).toFixed(2) would give '1.00'.
42
+ *
43
+ * @param price - The price value to format
44
+ * @param szDecimals - The asset's szDecimals (affects max price decimals)
45
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
46
+ * @returns Price as a string with correct precision, no trailing zeros
47
+ * @public
48
+ */
49
+ export declare function formatOrderPrice(price: number, szDecimals: number, market?: string): string;
50
+ //# sourceMappingURL=orderFormatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAYR"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Hyperliquid order size and price formatting for exchange submission.
3
+ *
4
+ * These encode Hyperliquid-specific order submission rules. Getting size/price
5
+ * formatting wrong causes rejected orders.
6
+ *
7
+ * @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size
8
+ */
9
+ import Big from 'big.js';
10
+ /**
11
+ * Max combined decimals (size + price) enforced by Hyperliquid.
12
+ * Perps: 6, Spot: 8
13
+ */
14
+ const MAX_DECIMALS_PERPS = 6;
15
+ const MAX_DECIMALS_SPOT = 8;
16
+ function getMaxDecimals(market) {
17
+ return market === 'spot' ? MAX_DECIMALS_SPOT : MAX_DECIMALS_PERPS;
18
+ }
19
+ /**
20
+ * Derive the maximum number of price decimal places for a given asset.
21
+ *
22
+ * @param szDecimals - The asset's szDecimals (from market meta)
23
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
24
+ * @returns Maximum allowed price decimals
25
+ * @public
26
+ */
27
+ export function getMaxPriceDecimals(szDecimals, market) {
28
+ return Math.max(0, getMaxDecimals(market) - szDecimals);
29
+ }
30
+ /**
31
+ * Format a size value for order submission.
32
+ *
33
+ * Per Hyperliquid docs (tick-and-lot-size):
34
+ * - Size must be rounded to the asset's szDecimals
35
+ * - Trailing zeroes must be removed for signing
36
+ *
37
+ * @param size - The size value to format
38
+ * @param szDecimals - Number of decimal places allowed for this asset (from meta)
39
+ * @returns Size as a string with correct precision, no trailing zeros
40
+ * @public
41
+ */
42
+ export function formatOrderSize(size, szDecimals) {
43
+ // Big.roundDown truncates toward zero — never round a size up, it could
44
+ // exceed available balance. Exact decimal arithmetic: flooring the float
45
+ // product dropped a lot step (0.29 * 100 === 28.999999999999996).
46
+ const truncated = new Big(size).round(szDecimals, Big.roundDown);
47
+ // toFixed() with no dp always emits plain notation; eq(0) guards '-0'
48
+ return truncated.eq(0) ? '0' : truncated.toFixed();
49
+ }
50
+ /**
51
+ * Format a price value for order submission.
52
+ *
53
+ * Per Hyperliquid docs (tick-and-lot-size):
54
+ * - Maximum 5 significant figures
55
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
56
+ * - Integer prices always allowed regardless of significant figures
57
+ * - Trailing zeroes must be removed for signing
58
+ *
59
+ * Rounding is half-up (away from zero at exact halfway) on the true decimal
60
+ * value, not on the binary float — (1.005).toFixed(2) would give '1.00'.
61
+ *
62
+ * @param price - The price value to format
63
+ * @param szDecimals - The asset's szDecimals (affects max price decimals)
64
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
65
+ * @returns Price as a string with correct precision, no trailing zeros
66
+ * @public
67
+ */
68
+ export function formatOrderPrice(price, szDecimals, market) {
69
+ const maxPriceDecimals = getMaxPriceDecimals(szDecimals, market);
70
+ let rounded = new Big(price).round(maxPriceDecimals, Big.roundHalfUp);
71
+ // Integer prices bypass the 5 sig-fig rule; prec() is a no-op below 6 sig figs
72
+ if (!rounded.mod(1).eq(0)) {
73
+ rounded = rounded.prec(5, Big.roundHalfUp);
74
+ }
75
+ // toFixed() with no dp always emits plain notation; eq(0) guards '-0'
76
+ return rounded.eq(0) ? '0' : rounded.toFixed();
77
+ }
78
+ //# sourceMappingURL=orderFormatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IAC9D,wEAAwE;IACxE,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAChE,sEAAsE;IACtE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,UAAkB,EAClB,MAAe;IAEf,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEhE,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAErE,+EAA+E;IAC/E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5C,CAAC;IAED,sEAAsE;IACtE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Map a desired price `step` to Hyperliquid's server-side aggregation hint
3
+ * `(nSigFigs, mantissa)` against the order of magnitude of `referencePrice`
4
+ * (the market's mark price gives the digit count). HL buckets the book to
5
+ * `nSigFigs` significant figures, so the figures resolving a price to `step`
6
+ * granularity are `floor(log10(referencePrice)) - floor(log10(step)) + 1`.
7
+ *
8
+ * Returns `{}` (full precision) when the step is finer than HL's 5-sig-fig
9
+ * grid or the inputs are unusable; clamps to {@link HL_MIN_SIG_FIGS} when the
10
+ * step is coarser than HL's lowest granularity. `mantissa` is emitted only for
11
+ * a non-power-of-ten step that lands on the 5-sig-fig grid, since HL ignores
12
+ * it below `nSigFigs === 5`.
13
+ *
14
+ * @public
15
+ */
16
+ export declare function priceStepToAggregation(step: number, referencePrice: number): {
17
+ nSigFigs?: number;
18
+ mantissa?: number;
19
+ };
20
+ //# sourceMappingURL=priceStepToAggregation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceStepToAggregation.d.ts","sourceRoot":"","sources":["../../../src/utils/priceStepToAggregation.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB1C"}
@@ -0,0 +1,51 @@
1
+ /** Significant-figure bounds Hyperliquid's `l2Book` accepts; `undefined` is full precision. */
2
+ const HL_MIN_SIG_FIGS = 2;
3
+ const HL_MAX_SIG_FIGS = 5;
4
+ /** Mantissa sub-steps HL honours, but only when `nSigFigs === 5`. */
5
+ const HL_MANTISSA_VALUES = [1, 2, 5];
6
+ /** Snap a leading-digit ratio to the nearest mantissa HL accepts (1, 2 or 5). */
7
+ function snapToMantissa(ratio) {
8
+ let closest = HL_MANTISSA_VALUES[0];
9
+ for (const m of HL_MANTISSA_VALUES) {
10
+ if (Math.abs(ratio - m) < Math.abs(ratio - closest)) {
11
+ closest = m;
12
+ }
13
+ }
14
+ return closest;
15
+ }
16
+ /**
17
+ * Map a desired price `step` to Hyperliquid's server-side aggregation hint
18
+ * `(nSigFigs, mantissa)` against the order of magnitude of `referencePrice`
19
+ * (the market's mark price gives the digit count). HL buckets the book to
20
+ * `nSigFigs` significant figures, so the figures resolving a price to `step`
21
+ * granularity are `floor(log10(referencePrice)) - floor(log10(step)) + 1`.
22
+ *
23
+ * Returns `{}` (full precision) when the step is finer than HL's 5-sig-fig
24
+ * grid or the inputs are unusable; clamps to {@link HL_MIN_SIG_FIGS} when the
25
+ * step is coarser than HL's lowest granularity. `mantissa` is emitted only for
26
+ * a non-power-of-ten step that lands on the 5-sig-fig grid, since HL ignores
27
+ * it below `nSigFigs === 5`.
28
+ *
29
+ * @public
30
+ */
31
+ export function priceStepToAggregation(step, referencePrice) {
32
+ if (!Number.isFinite(step) || step <= 0) {
33
+ return {};
34
+ }
35
+ if (!Number.isFinite(referencePrice) || referencePrice <= 0) {
36
+ return {};
37
+ }
38
+ const stepExp = Math.floor(Math.log10(step));
39
+ const priceExp = Math.floor(Math.log10(referencePrice));
40
+ const nSigFigs = priceExp - stepExp + 1;
41
+ if (nSigFigs > HL_MAX_SIG_FIGS) {
42
+ return {};
43
+ }
44
+ const clamped = Math.max(HL_MIN_SIG_FIGS, nSigFigs);
45
+ const mantissa = snapToMantissa(step / 10 ** stepExp);
46
+ if (clamped === HL_MAX_SIG_FIGS && mantissa !== 1) {
47
+ return { nSigFigs: clamped, mantissa };
48
+ }
49
+ return { nSigFigs: clamped };
50
+ }
51
+ //# sourceMappingURL=priceStepToAggregation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceStepToAggregation.js","sourceRoot":"","sources":["../../../src/utils/priceStepToAggregation.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,qEAAqE;AACrE,MAAM,kBAAkB,GAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEpE,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,cAAsB;IAEtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAA;IAEvC,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,GAAG,EAAE,IAAI,OAAO,CAAC,CAAA;IACrD,IAAI,OAAO,KAAK,eAAe,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;IACxC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Asset, Balance, Market } from '@lifi/perps-types';
2
+ import type { HlSpotBalance } from '../types/index.js';
3
+ /**
4
+ * USD price keyed by spot token index: each spot market's live USD price
5
+ * (from `priceByMarketId`, keyed by `Market.id`) under its base-asset id, and
6
+ * every market's quote-asset id at $1. A spot market absent from
7
+ * `priceByMarketId` values its token at 0.
8
+ */
9
+ export declare const spotPriceById: (markets: readonly Market[], priceByMarketId: ReadonlyMap<string, number>) => Map<string, number>;
10
+ /**
11
+ * The held spot {@link Asset} for an HL balance: the venue token index
12
+ * (`b.token`) as `Asset.id` — equal to that token's spot `Market.baseAsset.id`
13
+ * — with display fields derived from the coin.
14
+ */
15
+ export declare const spotAssetFromToken: (b: HlSpotBalance) => Asset;
16
+ /** Assemble a typed spot {@link Balance} from its resolved asset and raw size. */
17
+ export declare const spotBalance: (asset: Asset, total: string, priceById: Map<string, number>) => Balance;
18
+ //# sourceMappingURL=spotBalance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAapB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAGpD,CAAA;AAEF,kFAAkF;AAClF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAKD,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { stringToFloat } from '@lifi/perps-sdk';
2
+ import { SPOT_MARKET_ID } from '../constants.js';
3
+ import { coinAsset } from './marketDisplay.js';
4
+ /**
5
+ * USD price keyed by spot token index: each spot market's live USD price
6
+ * (from `priceByMarketId`, keyed by `Market.id`) under its base-asset id, and
7
+ * every market's quote-asset id at $1. A spot market absent from
8
+ * `priceByMarketId` values its token at 0.
9
+ */
10
+ export const spotPriceById = (markets, priceByMarketId) => {
11
+ const map = new Map();
12
+ for (const m of markets) {
13
+ if (m.categoryId === SPOT_MARKET_ID) {
14
+ map.set(m.baseAsset.id, priceByMarketId.get(m.id) ?? 0);
15
+ }
16
+ }
17
+ for (const m of markets) {
18
+ if (!map.has(m.quoteAsset.id)) {
19
+ map.set(m.quoteAsset.id, 1);
20
+ }
21
+ }
22
+ return map;
23
+ };
24
+ /**
25
+ * The held spot {@link Asset} for an HL balance: the venue token index
26
+ * (`b.token`) as `Asset.id` — equal to that token's spot `Market.baseAsset.id`
27
+ * — with display fields derived from the coin.
28
+ */
29
+ export const spotAssetFromToken = (b) => ({
30
+ ...coinAsset(b.coin),
31
+ id: String(b.token),
32
+ });
33
+ /** Assemble a typed spot {@link Balance} from its resolved asset and raw size. */
34
+ export const spotBalance = (asset, total, priceById) => ({
35
+ categoryId: SPOT_MARKET_ID,
36
+ asset,
37
+ units: total,
38
+ valueUsd: (stringToFloat(total) * (priceById.get(asset.id) ?? 0)).toString(),
39
+ });
40
+ //# sourceMappingURL=spotBalance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAA4C,EACvB,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;CACpB,CAAC,CAAA;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,KAAa,EACb,SAA8B,EACrB,EAAE,CAAC,CAAC;IACb,UAAU,EAAE,cAAc;IAC1B,KAAK;IACL,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7E,CAAC,CAAA"}