@lifi/perps-sdk-provider-hyperliquid 15.0.0 → 16.0.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 (181) hide show
  1. package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
  2. package/dist/cjs/HyperliquidProvider.js +4 -0
  3. package/dist/cjs/HyperliquidProvider.js.map +1 -1
  4. package/dist/cjs/accountSummary.d.ts.map +1 -1
  5. package/dist/cjs/accountSummary.js +34 -7
  6. package/dist/cjs/accountSummary.js.map +1 -1
  7. package/dist/cjs/index.d.ts +2 -0
  8. package/dist/cjs/index.d.ts.map +1 -1
  9. package/dist/cjs/index.js +3 -1
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/services/activeAssetData.d.ts +6 -0
  12. package/dist/cjs/services/activeAssetData.d.ts.map +1 -0
  13. package/dist/cjs/services/activeAssetData.js +7 -0
  14. package/dist/cjs/services/activeAssetData.js.map +1 -0
  15. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  16. package/dist/cjs/services/getAccount.js +23 -35
  17. package/dist/cjs/services/getAccount.js.map +1 -1
  18. package/dist/cjs/services/getAvailableToTrade.d.ts +10 -0
  19. package/dist/cjs/services/getAvailableToTrade.d.ts.map +1 -0
  20. package/dist/cjs/services/getAvailableToTrade.js +32 -0
  21. package/dist/cjs/services/getAvailableToTrade.js.map +1 -0
  22. package/dist/cjs/services/getMarketSettings.d.ts +1 -1
  23. package/dist/cjs/services/getMarketSettings.d.ts.map +1 -1
  24. package/dist/cjs/services/getMarketSettings.js +3 -7
  25. package/dist/cjs/services/getMarketSettings.js.map +1 -1
  26. package/dist/cjs/services/getWithdrawableBalances.d.ts +5 -0
  27. package/dist/cjs/services/getWithdrawableBalances.d.ts.map +1 -0
  28. package/dist/cjs/services/getWithdrawableBalances.js +27 -0
  29. package/dist/cjs/services/getWithdrawableBalances.js.map +1 -0
  30. package/dist/cjs/types/account.d.ts +11 -8
  31. package/dist/cjs/types/account.d.ts.map +1 -1
  32. package/dist/cjs/types/account.js.map +1 -1
  33. package/dist/cjs/types/ws.d.ts +3 -4
  34. package/dist/cjs/types/ws.d.ts.map +1 -1
  35. package/dist/cjs/utils/abstractionMode.d.ts +1 -1
  36. package/dist/cjs/utils/abstractionMode.d.ts.map +1 -1
  37. package/dist/cjs/utils/abstractionMode.js.map +1 -1
  38. package/dist/cjs/utils/index.d.ts +2 -0
  39. package/dist/cjs/utils/index.d.ts.map +1 -1
  40. package/dist/cjs/utils/index.js +6 -1
  41. package/dist/cjs/utils/index.js.map +1 -1
  42. package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
  43. package/dist/cjs/utils/mapPosition.js +1 -4
  44. package/dist/cjs/utils/mapPosition.js.map +1 -1
  45. package/dist/cjs/utils/spotCollateral.d.ts +1 -1
  46. package/dist/cjs/utils/spotCollateral.d.ts.map +1 -1
  47. package/dist/cjs/utils/spotCollateral.js +1 -12
  48. package/dist/cjs/utils/spotCollateral.js.map +1 -1
  49. package/dist/cjs/utils/venueTotals.d.ts +11 -0
  50. package/dist/cjs/utils/venueTotals.d.ts.map +1 -0
  51. package/dist/cjs/utils/venueTotals.js +24 -0
  52. package/dist/cjs/utils/venueTotals.js.map +1 -0
  53. package/dist/cjs/utils/withdrawableBalances.d.ts +4 -0
  54. package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -0
  55. package/dist/cjs/utils/withdrawableBalances.js +35 -0
  56. package/dist/cjs/utils/withdrawableBalances.js.map +1 -0
  57. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +3 -1
  58. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  59. package/dist/cjs/websocket/HyperliquidWsProvider.js +102 -36
  60. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  61. package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
  62. package/dist/esm/HyperliquidProvider.js +4 -0
  63. package/dist/esm/HyperliquidProvider.js.map +1 -1
  64. package/dist/esm/accountSummary.d.ts +4 -3
  65. package/dist/esm/accountSummary.d.ts.map +1 -1
  66. package/dist/esm/accountSummary.js +36 -18
  67. package/dist/esm/accountSummary.js.map +1 -1
  68. package/dist/esm/index.d.ts +2 -0
  69. package/dist/esm/index.d.ts.map +1 -1
  70. package/dist/esm/index.js +1 -0
  71. package/dist/esm/index.js.map +1 -1
  72. package/dist/esm/services/activeAssetData.d.ts +13 -0
  73. package/dist/esm/services/activeAssetData.d.ts.map +1 -0
  74. package/dist/esm/services/activeAssetData.js +10 -0
  75. package/dist/esm/services/activeAssetData.js.map +1 -0
  76. package/dist/esm/services/getAccount.d.ts.map +1 -1
  77. package/dist/esm/services/getAccount.js +19 -29
  78. package/dist/esm/services/getAccount.js.map +1 -1
  79. package/dist/esm/services/getAvailableToTrade.d.ts +26 -0
  80. package/dist/esm/services/getAvailableToTrade.d.ts.map +1 -0
  81. package/dist/esm/services/getAvailableToTrade.js +42 -0
  82. package/dist/esm/services/getAvailableToTrade.js.map +1 -0
  83. package/dist/esm/services/getMarketSettings.d.ts +1 -1
  84. package/dist/esm/services/getMarketSettings.d.ts.map +1 -1
  85. package/dist/esm/services/getMarketSettings.js +3 -7
  86. package/dist/esm/services/getMarketSettings.js.map +1 -1
  87. package/dist/esm/services/getWithdrawableBalances.d.ts +22 -0
  88. package/dist/esm/services/getWithdrawableBalances.d.ts.map +1 -0
  89. package/dist/esm/services/getWithdrawableBalances.js +35 -0
  90. package/dist/esm/services/getWithdrawableBalances.js.map +1 -0
  91. package/dist/esm/types/account.d.ts +21 -8
  92. package/dist/esm/types/account.d.ts.map +1 -1
  93. package/dist/esm/types/account.js.map +1 -1
  94. package/dist/esm/types/ws.d.ts +10 -4
  95. package/dist/esm/types/ws.d.ts.map +1 -1
  96. package/dist/esm/utils/abstractionMode.d.ts +1 -1
  97. package/dist/esm/utils/abstractionMode.d.ts.map +1 -1
  98. package/dist/esm/utils/abstractionMode.js.map +1 -1
  99. package/dist/esm/utils/index.d.ts +2 -0
  100. package/dist/esm/utils/index.d.ts.map +1 -1
  101. package/dist/esm/utils/index.js +2 -0
  102. package/dist/esm/utils/index.js.map +1 -1
  103. package/dist/esm/utils/mapPosition.d.ts.map +1 -1
  104. package/dist/esm/utils/mapPosition.js +1 -4
  105. package/dist/esm/utils/mapPosition.js.map +1 -1
  106. package/dist/esm/utils/spotCollateral.d.ts +4 -4
  107. package/dist/esm/utils/spotCollateral.d.ts.map +1 -1
  108. package/dist/esm/utils/spotCollateral.js +4 -23
  109. package/dist/esm/utils/spotCollateral.js.map +1 -1
  110. package/dist/esm/utils/venueTotals.d.ts +26 -0
  111. package/dist/esm/utils/venueTotals.d.ts.map +1 -0
  112. package/dist/esm/utils/venueTotals.js +26 -0
  113. package/dist/esm/utils/venueTotals.js.map +1 -0
  114. package/dist/esm/utils/withdrawableBalances.d.ts +14 -0
  115. package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -0
  116. package/dist/esm/utils/withdrawableBalances.js +41 -0
  117. package/dist/esm/utils/withdrawableBalances.js.map +1 -0
  118. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +4 -1
  119. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  120. package/dist/esm/websocket/HyperliquidWsProvider.js +101 -35
  121. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  122. package/dist/types/HyperliquidProvider.d.ts.map +1 -1
  123. package/dist/types/accountSummary.d.ts +4 -3
  124. package/dist/types/accountSummary.d.ts.map +1 -1
  125. package/dist/types/index.d.ts +2 -0
  126. package/dist/types/index.d.ts.map +1 -1
  127. package/dist/types/services/activeAssetData.d.ts +13 -0
  128. package/dist/types/services/activeAssetData.d.ts.map +1 -0
  129. package/dist/types/services/getAccount.d.ts.map +1 -1
  130. package/dist/types/services/getAvailableToTrade.d.ts +26 -0
  131. package/dist/types/services/getAvailableToTrade.d.ts.map +1 -0
  132. package/dist/types/services/getMarketSettings.d.ts +1 -1
  133. package/dist/types/services/getMarketSettings.d.ts.map +1 -1
  134. package/dist/types/services/getWithdrawableBalances.d.ts +22 -0
  135. package/dist/types/services/getWithdrawableBalances.d.ts.map +1 -0
  136. package/dist/types/types/account.d.ts +21 -8
  137. package/dist/types/types/account.d.ts.map +1 -1
  138. package/dist/types/types/ws.d.ts +10 -4
  139. package/dist/types/types/ws.d.ts.map +1 -1
  140. package/dist/types/utils/abstractionMode.d.ts +1 -1
  141. package/dist/types/utils/abstractionMode.d.ts.map +1 -1
  142. package/dist/types/utils/index.d.ts +2 -0
  143. package/dist/types/utils/index.d.ts.map +1 -1
  144. package/dist/types/utils/mapPosition.d.ts.map +1 -1
  145. package/dist/types/utils/spotCollateral.d.ts +4 -4
  146. package/dist/types/utils/spotCollateral.d.ts.map +1 -1
  147. package/dist/types/utils/venueTotals.d.ts +26 -0
  148. package/dist/types/utils/venueTotals.d.ts.map +1 -0
  149. package/dist/types/utils/withdrawableBalances.d.ts +14 -0
  150. package/dist/types/utils/withdrawableBalances.d.ts.map +1 -0
  151. package/dist/types/websocket/HyperliquidWsProvider.d.ts +4 -1
  152. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  153. package/package.json +3 -3
  154. package/src/HyperliquidProvider.ts +26 -0
  155. package/src/accountSummary.ts +64 -19
  156. package/src/index.ts +2 -0
  157. package/src/services/activeAssetData.ts +24 -0
  158. package/src/services/getAccount.ts +37 -52
  159. package/src/services/getAvailableToTrade.ts +72 -0
  160. package/src/services/getMarketSettings.ts +7 -11
  161. package/src/services/getWithdrawableBalances.ts +84 -0
  162. package/src/types/account.ts +22 -8
  163. package/src/types/ws.ts +18 -5
  164. package/src/utils/abstractionMode.ts +1 -1
  165. package/src/utils/index.ts +6 -0
  166. package/src/utils/mapPosition.ts +1 -5
  167. package/src/utils/spotCollateral.ts +4 -25
  168. package/src/utils/venueTotals.ts +48 -0
  169. package/src/utils/withdrawableBalances.ts +57 -0
  170. package/src/websocket/HyperliquidWsProvider.ts +149 -42
  171. package/dist/cjs/websocket/decodeChain.d.ts +0 -11
  172. package/dist/cjs/websocket/decodeChain.d.ts.map +0 -1
  173. package/dist/cjs/websocket/decodeChain.js +0 -37
  174. package/dist/cjs/websocket/decodeChain.js.map +0 -1
  175. package/dist/esm/websocket/decodeChain.d.ts +0 -30
  176. package/dist/esm/websocket/decodeChain.d.ts.map +0 -1
  177. package/dist/esm/websocket/decodeChain.js +0 -44
  178. package/dist/esm/websocket/decodeChain.js.map +0 -1
  179. package/dist/types/websocket/decodeChain.d.ts +0 -30
  180. package/dist/types/websocket/decodeChain.d.ts.map +0 -1
  181. package/src/websocket/decodeChain.ts +0 -54
@@ -47,6 +47,18 @@ export type HlPosition = {
47
47
  export type HlAssetPosition = {
48
48
  position: HlPosition;
49
49
  };
50
+ /**
51
+ * Margin totals block of a Hyperliquid clearinghouse state. Monetary fields
52
+ * are decimal strings in the account's quote asset.
53
+ * @public
54
+ */
55
+ export type HlMarginSummary = {
56
+ /** Total equity: locked margin and unrealized PnL included. */
57
+ accountValue: string;
58
+ totalNtlPos: string;
59
+ totalRawUsd: string;
60
+ totalMarginUsed: string;
61
+ };
50
62
  /**
51
63
  * Perpetual clearinghouse account state returned by Hyperliquid `/info`.
52
64
  * `assetPositions` includes zero-size rows that callers may discard. Monetary
@@ -56,14 +68,10 @@ export type HlAssetPosition = {
56
68
  */
57
69
  export type HlClearinghouseState = {
58
70
  assetPositions: HlAssetPosition[];
59
- marginSummary: {
60
- accountValue: string;
61
- totalMarginUsed: string;
62
- };
63
- crossMarginSummary: {
64
- accountValue: string;
65
- totalMarginUsed: string;
66
- };
71
+ marginSummary: HlMarginSummary;
72
+ crossMarginSummary: HlMarginSummary;
73
+ crossMaintenanceMarginUsed: string;
74
+ withdrawable: string;
67
75
  };
68
76
  /**
69
77
  * One spot balance from Hyperliquid `spotClearinghouseState`.
@@ -84,6 +92,11 @@ export type HlSpotBalance = {
84
92
  */
85
93
  export type HlSpotClearinghouseState = {
86
94
  balances: HlSpotBalance[];
95
+ /**
96
+ * Venue buying power per spot token, as `[token index, amount]` pairs.
97
+ * The venue reports the amount after maintenance margin.
98
+ */
99
+ tokenToAvailableAfterMaintenance: [number, string][];
87
100
  };
88
101
  /**
89
102
  * User fee rates returned by Hyperliquid `userFees`.
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAA;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAA;IACrB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD;;;;;OAKG;IACH,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,eAAe,EAAE,CAAA;IACjC,aAAa,EAAE;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,kBAAkB,EAAE;QAClB,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;CACF,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;AAErD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAA;AAEV,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"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"}
@@ -170,6 +170,13 @@ export type HlWsUserFillsData = {
170
170
  user: string;
171
171
  fills: HlUserFill[];
172
172
  };
173
+ /**
174
+ * One sub-dex slice of an `allDexsClearinghouseState` frame. `marginSummary`
175
+ * is absent on a frame that reports positions only, so a reader must treat it
176
+ * as optional.
177
+ * @public
178
+ */
179
+ export type HlWsDexClearinghouseState = Pick<HlClearinghouseState, 'assetPositions'> & Partial<Pick<HlClearinghouseState, 'marginSummary'>>;
173
180
  /**
174
181
  * Per-dex clearinghouse event for one user. Each tuple contains a wire DEX name
175
182
  * and the perp positions/equity fields supplied by that DEX.
@@ -177,16 +184,15 @@ export type HlWsUserFillsData = {
177
184
  */
178
185
  export type HlWsAllDexsClearinghouseStateData = {
179
186
  user: string;
180
- clearinghouseStates: [
181
- string,
182
- Pick<HlClearinghouseState, 'assetPositions' | 'marginSummary'>
183
- ][];
187
+ clearinghouseStates: [string, HlWsDexClearinghouseState][];
184
188
  };
185
189
  /** User spot clearinghouse event containing the current spot balances. @public */
186
190
  export type HlWsSpotStateData = {
187
191
  user: string;
188
192
  spotState: {
189
193
  balances: HlSpotBalance[];
194
+ /** Absent on some frames; the REST `spotClearinghouseState` read covers it. */
195
+ tokenToAvailableAfterMaintenance?: [number, string][];
190
196
  };
191
197
  };
192
198
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@ import { HlAbstractionMode } from '../types/account.js';
4
4
  * portfolio-margin accounts do; every other mode keeps perps collateral
5
5
  * per-dex, apart from the spot balances.
6
6
  */
7
- export declare const isUnifiedAbstraction: (abstraction: HlAbstractionMode | null) => boolean;
7
+ export declare const isUnifiedAbstraction: (abstraction: HlAbstractionMode | string | null) => boolean;
8
8
  //# sourceMappingURL=abstractionMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstractionMode.d.ts","sourceRoot":"","sources":["../../../src/utils/abstractionMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,iBAAiB,GAAG,IAAI,KACpC,OAEiD,CAAA"}
1
+ {"version":3,"file":"abstractionMode.d.ts","sourceRoot":"","sources":["../../../src/utils/abstractionMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,iBAAiB,GAAG,MAAM,GAAG,IAAI,KAC7C,OAEiD,CAAA"}
@@ -17,4 +17,6 @@ export { priceStepToAggregation } from './priceStepToAggregation.js';
17
17
  export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
18
18
  export { partitionSpotBalances, type SpotPartition } from './spotCollateral.js';
19
19
  export { positionMarginConstraints } from './transferMargin.js';
20
+ export { type DexMarginSummary, perpsTotals, sumUnrealizedPnl, } from './venueTotals.js';
21
+ export { hyperliquidWithdrawableBalances } from './withdrawableBalances.js';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,KAAK,gBAAgB,EACrB,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,eAAe,KAAG,OAChB,CAAA;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,eAAe,EACnB,QAAQ,kBAAkB,KACzB,QA0BF,CAAA"}
1
+ {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,eAAe,KAAG,OAChB,CAAA;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,eAAe,EACnB,QAAQ,kBAAkB,KACzB,QAsBF,CAAA"}
@@ -9,10 +9,10 @@ export interface SpotPartition {
9
9
  balances: Balance[];
10
10
  }
11
11
  /**
12
- * Partition spot balances into collateral and ordinary holdings. Quote assets
13
- * are full-value collateral; portfolio-margin-supported assets retain their
14
- * LTV as `collateralWeight`.
12
+ * Partition spot balances into collateral and ordinary holdings. Category
13
+ * quote assets are collateral; every other token is an ordinary holding.
14
+ * Zero-unit rows are dropped from both lists.
15
15
  * @public
16
16
  */
17
- export declare const partitionSpotBalances: (spotBalances: readonly Balance[], quoteAssetIds: ReadonlySet<string>, portfolioMargin: boolean) => SpotPartition;
17
+ export declare const partitionSpotBalances: (spotBalances: readonly Balance[], quoteAssetIds: ReadonlySet<string>) => SpotPartition;
18
18
  //# sourceMappingURL=spotCollateral.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAgBhD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,OAAO,EAAE,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,SAAS,OAAO,EAAE,EAChC,eAAe,WAAW,CAAC,MAAM,CAAC,EAClC,iBAAiB,OAAO,KACvB,aAqBF,CAAA"}
1
+ {"version":3,"file":"spotCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAGhD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,OAAO,EAAE,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,SAAS,OAAO,EAAE,EAChC,eAAe,WAAW,CAAC,MAAM,CAAC,KACjC,aAcF,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { HyperliquidMarginSummary, Position } from '@lifi/perps-types';
2
+ import Big from 'big.js';
3
+ /**
4
+ * One perps sub-dex entry {@link perpsTotals} reads. The REST response always
5
+ * carries `marginSummary`; a WebSocket frame may omit it.
6
+ * @public
7
+ */
8
+ export interface DexMarginSummary {
9
+ marginSummary?: HyperliquidMarginSummary;
10
+ }
11
+ /**
12
+ * Sum the venue `marginSummary` totals over every perps sub-dex of an
13
+ * account. `accountValue` is total equity, so it already carries locked
14
+ * margin and unrealized PnL. An entry without a `marginSummary` adds nothing.
15
+ * @public
16
+ */
17
+ export declare const perpsTotals: (dexStates: readonly DexMarginSummary[]) => {
18
+ accountValue: Big;
19
+ marginUsed: Big;
20
+ };
21
+ /**
22
+ * Sum the unrealized PnL of every position, in quote-asset units.
23
+ * @public
24
+ */
25
+ export declare const sumUnrealizedPnl: (positions: readonly Position[]) => Big;
26
+ //# sourceMappingURL=venueTotals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venueTotals.d.ts","sourceRoot":"","sources":["../../../src/utils/venueTotals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,wBAAwB,CAAA;CACzC;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,SAAS,gBAAgB,EAAE,KACrC;IAAE,YAAY,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,GAAG,CAAA;CAetC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,SAAS,QAAQ,EAAE,KAAG,GAK/D,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { ProviderWithdrawableBalance } from '@lifi/perps-sdk';
2
+ import type { HlAbstractionMode, HlClearinghouseState, HlSpotClearinghouseState } from '../types/index.js';
3
+ /**
4
+ * Split a Hyperliquid account's venue figures into the routes a withdrawal
5
+ * draws on. A unified or portfolio-margin account holds its collateral in spot,
6
+ * so each spot token adds the part of `total` that no order or margin holds. A
7
+ * route with nothing left to draw carries no row, and the caller applies the
8
+ * per-asset venue minimum.
9
+ *
10
+ * @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
11
+ * @public
12
+ */
13
+ export declare const hyperliquidWithdrawableBalances: (abstraction: HlAbstractionMode | null, state: HlClearinghouseState, spotState: HlSpotClearinghouseState, quoteAssetId: string) => ProviderWithdrawableBalance[];
14
+ //# sourceMappingURL=withdrawableBalances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAK1B;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,KACnB,2BAA2B,EA+B7B,CAAA"}
@@ -34,7 +34,7 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
34
34
  private readonly abstractionByUser;
35
35
  private readonly spotRefs;
36
36
  private readonly unifiedSummaryByUser;
37
- private readonly latestPositionsByUser;
37
+ private readonly latestPerpsByUser;
38
38
  private readonly heldSummaryByUser;
39
39
  private perpCtxBySubDex;
40
40
  private spotCtxByMarketId;
@@ -134,6 +134,9 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
134
134
  private static readonly REFRESH_COALESCE_MS;
135
135
  private emitSummaryIfModeAllows;
136
136
  private fetchAbstractionMode;
137
+ private handleActiveAssetData;
137
138
  private handleSpotState;
139
+ /** Read the venue buying power over REST when the spot frame omits it. */
140
+ private fetchAvailableAfterMaintenance;
138
141
  }
139
142
  //# sourceMappingURL=HyperliquidWsProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAGzB,cAAc,EACd,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,mBAAmB,CAAA;AA6D1B;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,QAAO,iBAKtC,CAAA;AAEH;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAUrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAG/B;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAIrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAMlC;IAGH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgC;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQ/B;IACH,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,wBAAwB,CAAoC;IACpE,OAAO,CAAC,uBAAuB,CAAiC;IAChE,OAAO,CAAC,yBAAyB,CAAuC;IAKxE,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACW;IAM/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG/B;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IACD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAGpC;IACD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAGhC;gBAEW,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAYxD,SAAS,CACtB,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,IAAI,CAAC;IAuBhB,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;IAmHnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,iBAAiB;IAmBzB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;cAcL,OAAO,IAAI,IAAI;IAgBlC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IA4B1C,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IAiDnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IA8EnC,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,SAAS;IAUjB,oFAAoF;IACpF,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,oBAAoB;IAe5B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,wBAAwB;IAchC,sEAAsE;IACtE,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,kBAAkB;IAyE1B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,+BAA+B;IAiDvC;0EACsE;IACtE,OAAO,CAAC,MAAM,CAAC,oBAAoB;YAOrB,eAAe;IA8B7B,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,kBAAkB;IAuB1B;2EACuE;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAEnD;;+BAE2B;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAEjD,OAAO,CAAC,uBAAuB;IAyC/B,OAAO,CAAC,oBAAoB;IA4C5B,OAAO,CAAC,eAAe;CAwCxB"}
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-hyperliquid",
3
- "version": "15.0.0",
3
+ "version": "16.0.0",
4
4
  "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -49,10 +49,10 @@
49
49
  "dependencies": {
50
50
  "big.js": "^7.0.1",
51
51
  "viem": "^2.55.18",
52
- "@lifi/perps-types": "^14.0.0"
52
+ "@lifi/perps-types": "^15.0.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "@lifi/perps-sdk": "^15.0.0"
55
+ "@lifi/perps-sdk": "^16.0.0"
56
56
  },
57
57
  "publishConfig": {
58
58
  "access": "public"
@@ -10,6 +10,7 @@ import {
10
10
  type ProviderAccountExistsParams,
11
11
  type ProviderGetAccountParams,
12
12
  type ProviderGetActivityParams,
13
+ type ProviderGetAvailableToTradeParams,
13
14
  type ProviderGetFillsParams,
14
15
  type ProviderGetMarketSettingsParams,
15
16
  type ProviderGetOrderParams,
@@ -17,6 +18,8 @@ import {
17
18
  type ProviderGetPortfolioHistoryParams,
18
19
  type ProviderGetPositionsParams,
19
20
  type ProviderGetQuoteParams,
21
+ type ProviderGetWithdrawableBalancesParams,
22
+ type ProviderWithdrawableBalance,
20
23
  resolveQuote,
21
24
  type SDKRequestOptions,
22
25
  type SignActionsContext,
@@ -30,6 +33,7 @@ import {
30
33
  type ActionStep,
31
34
  ActionType,
32
35
  type ActivitiesResponse,
36
+ type AvailableToTrade,
33
37
  type FillsResponse,
34
38
  type Market,
35
39
  type MarketSettings,
@@ -59,12 +63,14 @@ import { HyperliquidContextRef } from './context.js'
59
63
  import { getAccount } from './services/getAccount.js'
60
64
  import { getAccountExists } from './services/getAccountExists.js'
61
65
  import { getActivity } from './services/getActivity.js'
66
+ import { getAvailableToTrade } from './services/getAvailableToTrade.js'
62
67
  import { getFills } from './services/getFills.js'
63
68
  import { getMarketSettings } from './services/getMarketSettings.js'
64
69
  import { getOrder } from './services/getOrder.js'
65
70
  import { getOrders } from './services/getOrders.js'
66
71
  import { getPortfolioHistory } from './services/getPortfolioHistory.js'
67
72
  import { getPositions } from './services/getPositions.js'
73
+ import { getWithdrawableBalances } from './services/getWithdrawableBalances.js'
68
74
  import {
69
75
  type HyperliquidAgent,
70
76
  HyperliquidAgentStore,
@@ -296,6 +302,16 @@ export function hyperliquidProvider(
296
302
  destination: HYPERLIQUID_USDC,
297
303
  }),
298
304
 
305
+ getWithdrawableBalances: (
306
+ params: ProviderGetWithdrawableBalancesParams,
307
+ opts?: SDKRequestOptions
308
+ ): Promise<ProviderWithdrawableBalance[]> =>
309
+ getWithdrawableBalances(
310
+ contextRef.require(),
311
+ { address: params.address },
312
+ opts
313
+ ),
314
+
299
315
  getPositions: (
300
316
  params: ProviderGetPositionsParams,
301
317
  opts?: SDKRequestOptions
@@ -320,6 +336,16 @@ export function hyperliquidProvider(
320
336
  opts
321
337
  ),
322
338
 
339
+ getAvailableToTrade: (
340
+ params: ProviderGetAvailableToTradeParams,
341
+ opts?: SDKRequestOptions
342
+ ): Promise<AvailableToTrade | undefined> =>
343
+ getAvailableToTrade(
344
+ contextRef.require(),
345
+ { address: params.address, marketId: params.marketId },
346
+ opts
347
+ ),
348
+
323
349
  getOrders: (
324
350
  params: ProviderGetOrdersParams,
325
351
  opts?: SDKRequestOptions
@@ -1,35 +1,80 @@
1
- import { type CollateralSemantics, summarizeAccount } from '@lifi/perps-sdk'
1
+ import { PerpsError } from '@lifi/perps-sdk'
2
2
  import type {
3
3
  AccountResponse,
4
4
  AccountSummary,
5
+ Balance,
6
+ HyperliquidAccountConfig,
5
7
  Position,
6
8
  } from '@lifi/perps-types'
7
- import { HlAbstractionMode } from './types/index.js'
9
+ import { PerpsErrorCode } from '@lifi/perps-types'
10
+ import Big from 'big.js'
11
+ import { isUnifiedAbstraction } from './utils/abstractionMode.js'
12
+ import { toWireBig } from './utils/decimal.js'
13
+ import { perpsTotals, sumUnrealizedPnl } from './utils/venueTotals.js'
8
14
 
9
- /**
10
- * In `unifiedAccount`/`portfolioMargin` the whole account lives in spot, so
11
- * the collateral rows are gross holdings: locked margin included, unrealized
12
- * PnL carried by the positions. In `disabled`/`dexAbstraction` (and the
13
- * unset/standard mode) the venue rows hold `accountValue`, Hyperliquid's
14
- * total equity — locked margin AND unrealized PnL already included.
15
- */
16
- const collateralSemantics = (account: AccountResponse): CollateralSemantics =>
17
- account.config.provider === 'hyperliquid' &&
18
- (account.config.abstractionMode === HlAbstractionMode.UNIFIED_ACCOUNT ||
19
- account.config.abstractionMode === HlAbstractionMode.PORTFOLIO_MARGIN)
20
- ? 'gross'
21
- : 'equity'
15
+ const sumValueUsd = (balances: readonly Balance[]): Big =>
16
+ balances.reduce(
17
+ (sum, balance) => sum.plus(toWireBig(balance.valueUsd, 'balance.valueUsd')),
18
+ new Big(0)
19
+ )
20
+
21
+ const hyperliquidConfig = (
22
+ account: AccountResponse
23
+ ): HyperliquidAccountConfig => {
24
+ if (account.config.provider !== 'hyperliquid') {
25
+ throw new PerpsError(
26
+ PerpsErrorCode.SDKError,
27
+ `Hyperliquid account summary received a '${account.config.provider}' account config`
28
+ )
29
+ }
30
+ return account.config
31
+ }
32
+
33
+ const getAvailableMargin = (
34
+ config: HyperliquidAccountConfig,
35
+ accountValue: Big,
36
+ marginUsed: Big
37
+ ): Big => {
38
+ if (!isUnifiedAbstraction(config.abstractionMode)) {
39
+ return accountValue.minus(marginUsed)
40
+ }
41
+ if (config.availableAfterMaintenance === undefined) {
42
+ throw new PerpsError(
43
+ PerpsErrorCode.SDKError,
44
+ `Hyperliquid '${config.abstractionMode}' account carries no quote-asset entry in \`tokenToAvailableAfterMaintenance\``
45
+ )
46
+ }
47
+ return toWireBig(
48
+ config.availableAfterMaintenance,
49
+ 'tokenToAvailableAfterMaintenance'
50
+ )
51
+ }
22
52
 
23
53
  /**
24
- * Roll a Hyperliquid {@link AccountResponse} up into an {@link AccountSummary},
25
- * branching on the abstraction mode so the margin/PnL content of the
26
- * collateral rows is interpreted correctly.
54
+ * Roll a Hyperliquid account and its open positions up into an
55
+ * {@link AccountSummary}, from the venue figures the response carries.
27
56
  *
57
+ * @throws {PerpsError} `SDKError` when the account is not a Hyperliquid one,
58
+ * or when a unified/portfolio-margin account carries no venue buying power.
28
59
  * @public
29
60
  */
30
61
  export function getAccountSummary(
31
62
  account: AccountResponse,
32
63
  positions: Position[]
33
64
  ): AccountSummary {
34
- return summarizeAccount(account, positions, collateralSemantics(account))
65
+ const config = hyperliquidConfig(account)
66
+ const { accountValue, marginUsed } = perpsTotals(config.dexStates)
67
+
68
+ return {
69
+ portfolioValue: sumValueUsd(account.collateralBalances)
70
+ .plus(sumValueUsd(account.balances))
71
+ .toFixed(),
72
+ availableMargin: getAvailableMargin(
73
+ config,
74
+ accountValue,
75
+ marginUsed
76
+ ).toFixed(),
77
+ marginUsed: marginUsed.toFixed(),
78
+ unrealizedPnl: sumUnrealizedPnl(positions).toFixed(),
79
+ }
35
80
  }
package/src/index.ts CHANGED
@@ -40,6 +40,8 @@ export type { GetPortfolioHistoryParams } from './services/getPortfolioHistory.j
40
40
  export { getPortfolioHistory } from './services/getPortfolioHistory.js'
41
41
  export type { GetPositionsParams } from './services/getPositions.js'
42
42
  export { getPositions } from './services/getPositions.js'
43
+ export type { GetWithdrawableBalancesParams } from './services/getWithdrawableBalances.js'
44
+ export { getWithdrawableBalances } from './services/getWithdrawableBalances.js'
43
45
  export type { HyperliquidAgent } from './signers/HyperliquidAgentStore.js'
44
46
  export { HyperliquidAgentStore } from './signers/HyperliquidAgentStore.js'
45
47
  export * from './types/index.js'
@@ -0,0 +1,24 @@
1
+ import type { SDKRequestOptions } from '@lifi/perps-sdk'
2
+ import type { Address } from 'viem'
3
+ import type { HyperliquidContext } from '../context.js'
4
+ import type { HlActiveAssetData } from '../types/index.js'
5
+ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
6
+
7
+ /**
8
+ * The venue's per-account, per-market state for one perps market: margin
9
+ * mode, leverage, maximum sizes and the amounts still tradable on each side.
10
+ * Present whether or not a position is open.
11
+ *
12
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
13
+ */
14
+ export const fetchActiveAssetData = (
15
+ { client, apiUrl }: HyperliquidContext,
16
+ address: Address,
17
+ marketId: string,
18
+ options?: SDKRequestOptions
19
+ ): Promise<HlActiveAssetData> =>
20
+ infoRequest<HlActiveAssetData>(
21
+ apiUrl,
22
+ { type: 'activeAssetData', user: address, coin: marketId },
23
+ hlInfoOptions(client, options)
24
+ )
@@ -11,17 +11,18 @@ import type {
11
11
  Asset,
12
12
  Balance,
13
13
  HyperliquidAccountConfig,
14
+ HyperliquidDexAccountState,
14
15
  Position,
15
16
  } from '@lifi/perps-types'
16
- import Big from 'big.js'
17
+ import type Big from 'big.js'
17
18
  import { PROVIDER_KEY } from '../constants.js'
18
19
  import type { HyperliquidContext } from '../context.js'
19
- import {
20
+ import type {
20
21
  HlAbstractionMode,
21
- type HlClearinghouseState,
22
- type HlExtraAgents,
23
- type HlSpotClearinghouseState,
24
- type HlUserFees,
22
+ HlClearinghouseState,
23
+ HlExtraAgents,
24
+ HlSpotClearinghouseState,
25
+ HlUserFees,
25
26
  } from '../types/index.js'
26
27
  import { isUnifiedAbstraction } from '../utils/abstractionMode.js'
27
28
  import { toWireBig } from '../utils/decimal.js'
@@ -29,9 +30,11 @@ import {
29
30
  assetIsOutcome,
30
31
  partitionSpotBalances,
31
32
  perpsDexNames,
33
+ perpsTotals,
32
34
  spotAssetFromToken,
33
35
  spotBalance,
34
36
  spotPriceById,
37
+ sumUnrealizedPnl,
35
38
  } from '../utils/index.js'
36
39
  import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
37
40
  import { isOpenAssetPosition, mapPosition } from '../utils/mapPosition.js'
@@ -49,45 +52,14 @@ export type GetAccountParams = ProviderGetAccountParams
49
52
  const getAccountValue = (state: HlClearinghouseState): Big =>
50
53
  toWireBig(state.marginSummary.accountValue, 'marginSummary.accountValue')
51
54
 
52
- const getTotalMarginUsed = (state: HlClearinghouseState): Big =>
53
- toWireBig(
54
- state.marginSummary.totalMarginUsed,
55
- 'marginSummary.totalMarginUsed'
56
- )
57
-
58
- const getMarginUsed = (
59
- abstraction: HlAbstractionMode | null,
60
- positions: Position[],
61
- stateByDex: Map<string, HlClearinghouseState>
62
- ): string => {
63
- if (
64
- abstraction === HlAbstractionMode.UNIFIED_ACCOUNT ||
65
- abstraction === HlAbstractionMode.PORTFOLIO_MARGIN
66
- ) {
67
- // Per HL docs, individual per-dex states are not meaningful for these
68
- // modes; derive total margin from the already-mapped positions.
69
- const total = positions.reduce(
70
- (sum, position) =>
71
- sum.plus(toWireBig(position.marginUsed, 'positions.marginUsed')),
72
- new Big(0)
73
- )
74
- return total.toFixed()
75
- }
76
-
77
- if (abstraction === HlAbstractionMode.DEX_ABSTRACTION) {
78
- let total = new Big(0)
79
- for (const [, state] of stateByDex) {
80
- total = total.plus(getTotalMarginUsed(state))
81
- }
82
- return total.toFixed()
83
- }
84
-
85
- const mainState = stateByDex.get('')
86
- if (!mainState) {
87
- return '0'
88
- }
89
- return getTotalMarginUsed(mainState).toFixed()
90
- }
55
+ /** Venue buying power for the quote asset the perps dex settles in. */
56
+ const getAvailableAfterMaintenance = (
57
+ spotState: HlSpotClearinghouseState,
58
+ quoteAssetId: string | undefined
59
+ ): string | undefined =>
60
+ spotState.tokenToAvailableAfterMaintenance.find(
61
+ ([token]) => String(token) === quoteAssetId
62
+ )?.[1]
91
63
 
92
64
  interface BalancePartition {
93
65
  balances: Balance[]
@@ -106,8 +78,7 @@ const buildBalances = (
106
78
  spotState.balances
107
79
  .filter((b) => !assetIsOutcome(b.coin))
108
80
  .map((b) => spotBalance(spotAssetFromToken(b), b.total, priceById)),
109
- quoteAssetIds,
110
- abstraction === HlAbstractionMode.PORTFOLIO_MARGIN
81
+ quoteAssetIds
111
82
  )
112
83
 
113
84
  // Unified/portfolio modes hold everything in spot — per-dex equity would
@@ -238,15 +209,29 @@ export const getAccount = async (
238
209
  stateByDex.set(dexNames[i], state)
239
210
  })
240
211
 
241
- const totalUnrealizedPnl = positions.reduce(
242
- (sum, p) => sum + Number.parseFloat(p.unrealizedPnl),
243
- 0
212
+ const dexStates: HyperliquidDexAccountState[] = stateResults.map(
213
+ (state, i) => ({
214
+ dex: dexNames[i],
215
+ marginSummary: state.marginSummary,
216
+ crossMarginSummary: state.crossMarginSummary,
217
+ crossMaintenanceMarginUsed: state.crossMaintenanceMarginUsed,
218
+ withdrawable: state.withdrawable,
219
+ })
244
220
  )
245
221
 
246
222
  const config: HyperliquidAccountConfig = {
247
223
  provider: PROVIDER_KEY,
248
224
  abstractionMode: abstractionResult,
249
225
  agents: agentsResult,
226
+ dexStates,
227
+ ...(isUnifiedAbstraction(abstractionResult)
228
+ ? {
229
+ availableAfterMaintenance: getAvailableAfterMaintenance(
230
+ spotState,
231
+ quoteAssetByCategory.get(PROVIDER_KEY)?.id
232
+ ),
233
+ }
234
+ : {}),
250
235
  }
251
236
 
252
237
  const { balances, collateralBalances } = buildBalances(
@@ -264,8 +249,8 @@ export const getAccount = async (
264
249
  balances,
265
250
  collateralBalances,
266
251
  positions,
267
- marginUsed: getMarginUsed(abstractionResult, positions, stateByDex),
268
- unrealizedPnl: totalUnrealizedPnl.toString(),
252
+ marginUsed: perpsTotals(dexStates).marginUsed.toFixed(),
253
+ unrealizedPnl: sumUnrealizedPnl(positions).toFixed(),
269
254
  feeTier: {
270
255
  maker: feesResult.userAddRate ?? '0',
271
256
  taker: feesResult.userCrossRate ?? '0',