@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
@@ -0,0 +1,42 @@
1
+ import { getMarketRegistry, PerpsError, toAssetDisplay, } from '@lifi/perps-sdk';
2
+ import { PerpsErrorCode } from '@lifi/perps-types';
3
+ import { PROVIDER_KEY, SPOT_MARKET_ID } from '../constants.js';
4
+ import { fetchActiveAssetData } from './activeAssetData.js';
5
+ /**
6
+ * The amounts the account can still buy and sell on one perps market, read
7
+ * from `activeAssetData`. The amounts are denominated in the market's margin
8
+ * asset: USDC on the main dex, and the dex margin asset on a builder-deployed
9
+ * dex. Resolves `undefined` for a spot market, which carries no such state.
10
+ *
11
+ * @throws {PerpsError} On an unknown market, an `availableToTrade` payload
12
+ * that is not a buy/sell pair, Hyperliquid REST error, network, or parsing
13
+ * failures.
14
+ * @public
15
+ */
16
+ export const getAvailableToTrade = async (context, params, options) => {
17
+ const registry = getMarketRegistry(context.client, PROVIDER_KEY);
18
+ await registry.sync();
19
+ const market = registry.require(params.marketId);
20
+ if (market.categoryId === SPOT_MARKET_ID) {
21
+ return undefined;
22
+ }
23
+ const data = await fetchActiveAssetData(context, params.address, params.marketId, options);
24
+ // The wire type states the pair; nothing verifies the response, so read it
25
+ // as a plain list to keep the length check in reach of the type checker.
26
+ const amounts = data.availableToTrade;
27
+ if (amounts.length !== 2) {
28
+ const err = new PerpsError(PerpsErrorCode.ValidationError, `Hyperliquid returned ${amounts.length} availableToTrade amounts for market '${params.marketId}'. Expected a buy amount and a sell amount.`);
29
+ err.tool = PROVIDER_KEY;
30
+ throw err;
31
+ }
32
+ // Hyperliquid orders the pair buy-side first, sell-side second.
33
+ const [buy, sell] = amounts;
34
+ return {
35
+ providerId: market.providerId,
36
+ marketId: market.id,
37
+ asset: toAssetDisplay(market.quoteAsset),
38
+ buy,
39
+ sell,
40
+ };
41
+ };
42
+ //# sourceMappingURL=getAvailableToTrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAvailableToTrade.js","sourceRoot":"","sources":["../../../src/services/getAvailableToTrade.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEV,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAY3D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAA2B,EAC3B,MAAiC,EACjC,OAA2B,EACY,EAAE;IACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAChE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAChD,IAAI,MAAM,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;QACzC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,OAAO,EACP,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,QAAQ,EACf,OAAO,CACR,CAAA;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,OAAO,GAAsB,IAAI,CAAC,gBAAgB,CAAA;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,eAAe,EAC9B,wBAAwB,OAAO,CAAC,MAAM,yCAAyC,MAAM,CAAC,QAAQ,6CAA6C,CAC5I,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IACD,gEAAgE;IAChE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,OAAO,CAAA;IAC3B,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;QACxC,GAAG;QACH,IAAI;KACL,CAAA;AACH,CAAC,CAAA"}
@@ -17,5 +17,5 @@ export interface GetMarketSettingsParams {
17
17
  * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
18
18
  * @public
19
19
  */
20
- export declare const getMarketSettings: ({ client, apiUrl }: HyperliquidContext, params: GetMarketSettingsParams, options?: SDKRequestOptions) => Promise<MarketSettings | undefined>;
20
+ export declare const getMarketSettings: (context: HyperliquidContext, params: GetMarketSettingsParams, options?: SDKRequestOptions) => Promise<MarketSettings | undefined>;
21
21
  //# sourceMappingURL=getMarketSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMarketSettings.d.ts","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAIvD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,oBAAoB,kBAAkB,EACtC,QAAQ,uBAAuB,EAC/B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,GAAG,SAAS,CAuBpC,CAAA"}
1
+ {"version":3,"file":"getMarketSettings.d.ts","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGvD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,kBAAkB,EAC3B,QAAQ,uBAAuB,EAC/B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,GAAG,SAAS,CAoBpC,CAAA"}
@@ -1,22 +1,18 @@
1
1
  import { MarginMode, } from '@lifi/perps-types';
2
2
  import { SPOT_MARKET_ID } from '../constants.js';
3
- import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
3
+ import { fetchActiveAssetData } from './activeAssetData.js';
4
4
  /**
5
5
  * The user's venue-stored margin mode and leverage for one perps market,
6
6
  * read from `activeAssetData` — present whether or not a position is open.
7
7
  * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
8
8
  * @public
9
9
  */
10
- export const getMarketSettings = async ({ client, apiUrl }, params, options) => {
10
+ export const getMarketSettings = async (context, params, options) => {
11
11
  // Spot markets carry no leverage state on the venue.
12
12
  if (params.market.categoryId === SPOT_MARKET_ID) {
13
13
  return undefined;
14
14
  }
15
- const data = await infoRequest(apiUrl, {
16
- type: 'activeAssetData',
17
- user: params.address,
18
- coin: params.market.marketId,
19
- }, hlInfoOptions(client, options));
15
+ const data = await fetchActiveAssetData(context, params.address, params.market.marketId, options);
20
16
  const leverage = data.leverage;
21
17
  if (!leverage) {
22
18
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"getMarketSettings.js","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,GAGX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAYnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAA+B,EAC/B,OAA2B,EACU,EAAE;IACvC,qDAAqD;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,MAAM,EACN;QACE,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;KAC7B,EACD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/B,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,UAAU,EACR,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACvE,QAAQ,EAAE,QAAQ,CAAC,KAAK;KACzB,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getMarketSettings.js","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,GAGX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAY3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAA2B,EAC3B,MAA+B,EAC/B,OAA2B,EACU,EAAE;IACvC,qDAAqD;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,OAAO,EACP,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,UAAU,EACR,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACvE,QAAQ,EAAE,QAAQ,CAAC,KAAK;KACzB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { type ProviderGetWithdrawableBalancesParams, type ProviderWithdrawableBalance, type SDKRequestOptions } from '@lifi/perps-sdk';
2
+ import type { HyperliquidContext } from '../context.js';
3
+ /**
4
+ * Parameters for {@link getWithdrawableBalances}.
5
+ *
6
+ * @public
7
+ */
8
+ export type GetWithdrawableBalancesParams = ProviderGetWithdrawableBalancesParams;
9
+ /**
10
+ * The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
11
+ * read from the venue's own `withdrawable` and spot `total`/`hold` figures.
12
+ *
13
+ * Only the main perps dex is read: a withdrawal to L1 draws on that account,
14
+ * and a sub-dex balance reaches it through a transfer first.
15
+ *
16
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing
17
+ * failures, and `SDKError` when the market registry carries no main perps
18
+ * market to name the quote asset.
19
+ * @public
20
+ */
21
+ export declare const getWithdrawableBalances: ({ client, apiUrl }: HyperliquidContext, params: GetWithdrawableBalancesParams, options?: SDKRequestOptions) => Promise<ProviderWithdrawableBalance[]>;
22
+ //# sourceMappingURL=getWithdrawableBalances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getWithdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/services/getWithdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qCAAqC,EAC1C,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AASvD;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GACvC,qCAAqC,CAAA;AAEvC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,GAClC,oBAAoB,kBAAkB,EACtC,QAAQ,6BAA6B,EACrC,UAAU,iBAAiB,KAC1B,OAAO,CAAC,2BAA2B,EAAE,CAyCvC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { getMarketRegistry, PerpsError, } from '@lifi/perps-sdk';
2
+ import { PerpsErrorCode } from '@lifi/perps-types';
3
+ import { MAIN_MARKET_ID, PROVIDER_KEY } from '../constants.js';
4
+ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
5
+ import { hyperliquidWithdrawableBalances } from '../utils/withdrawableBalances.js';
6
+ /**
7
+ * The `(asset, route)` pairs `params.address` can withdraw from Hyperliquid,
8
+ * read from the venue's own `withdrawable` and spot `total`/`hold` figures.
9
+ *
10
+ * Only the main perps dex is read: a withdrawal to L1 draws on that account,
11
+ * and a sub-dex balance reaches it through a transfer first.
12
+ *
13
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing
14
+ * failures, and `SDKError` when the market registry carries no main perps
15
+ * market to name the quote asset.
16
+ * @public
17
+ */
18
+ export const getWithdrawableBalances = async ({ client, apiUrl }, params, options) => {
19
+ const registry = getMarketRegistry(client, PROVIDER_KEY);
20
+ const infoOpts = hlInfoOptions(client, options);
21
+ const [markets, abstraction, state, spotState] = await Promise.all([
22
+ registry.sync(),
23
+ infoRequest(apiUrl, { type: 'userAbstraction', user: params.address }, infoOpts),
24
+ infoRequest(apiUrl, { type: 'clearinghouseState', user: params.address }, infoOpts),
25
+ infoRequest(apiUrl, { type: 'spotClearinghouseState', user: params.address }, infoOpts),
26
+ ]);
27
+ const quoteAsset = markets.find((market) => market.categoryId === MAIN_MARKET_ID)?.quoteAsset;
28
+ if (quoteAsset === undefined) {
29
+ const error = new PerpsError(PerpsErrorCode.SDKError, `Hyperliquid market registry carries no '${MAIN_MARKET_ID}' market to name the withdrawal quote asset`);
30
+ error.tool = PROVIDER_KEY;
31
+ throw error;
32
+ }
33
+ return hyperliquidWithdrawableBalances(abstraction, state, spotState, quoteAsset.id);
34
+ };
35
+ //# sourceMappingURL=getWithdrawableBalances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getWithdrawableBalances.js","sourceRoot":"","sources":["../../../src/services/getWithdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,UAAU,GAIX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAO9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAUlF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAqC,EACrC,OAA2B,EACa,EAAE;IAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjE,QAAQ,CAAC,IAAI,EAAE;QACf,WAAW,CACT,MAAM,EACN,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACjD,QAAQ,CACT;QACD,WAAW,CACT,MAAM,EACN,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACpD,QAAQ,CACT;QACD,WAAW,CACT,MAAM,EACN,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACxD,QAAQ,CACT;KACF,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,CACjD,EAAE,UAAU,CAAA;IACb,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,cAAc,CAAC,QAAQ,EACvB,2CAA2C,cAAc,6CAA6C,CACvG,CAAA;QACD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;QACzB,MAAM,KAAK,CAAA;IACb,CAAC;IAED,OAAO,+BAA+B,CACpC,WAAW,EACX,KAAK,EACL,SAAS,EACT,UAAU,CAAC,EAAE,CACd,CAAA;AACH,CAAC,CAAA"}
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA0IvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACzB,CAAA"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/types/account.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAwJvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACzB,CAAA"}
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"abstractionMode.js","sourceRoot":"","sources":["../../../src/utils/abstractionMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,WAAqC,EAC5B,EAAE,CACX,WAAW,KAAK,iBAAiB,CAAC,eAAe;IACjD,WAAW,KAAK,iBAAiB,CAAC,gBAAgB,CAAA"}
1
+ {"version":3,"file":"abstractionMode.js","sourceRoot":"","sources":["../../../src/utils/abstractionMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,WAA8C,EACrC,EAAE,CACX,WAAW,KAAK,iBAAiB,CAAC,eAAe;IACjD,WAAW,KAAK,iBAAiB,CAAC,gBAAgB,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"}
@@ -19,4 +19,6 @@ export { priceStepToAggregation } from './priceStepToAggregation.js';
19
19
  export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
20
20
  export { partitionSpotBalances } from './spotCollateral.js';
21
21
  export { positionMarginConstraints } from './transferMargin.js';
22
+ export { perpsTotals, sumUnrealizedPnl, } from './venueTotals.js';
23
+ export { hyperliquidWithdrawableBalances } from './withdrawableBalances.js';
22
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,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;AAEtB,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,EAEL,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,EAAsB,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,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;AAEtB,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,EAEL,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,EAAsB,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAEL,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"}
@@ -21,9 +21,6 @@ export const mapPosition = (ap, market) => {
21
21
  const positionValue = new Big(pos.positionValue).abs();
22
22
  const leverage = new Big(pos.leverage.value);
23
23
  const marginMode = pos.leverage.type === 'cross' ? MarginMode.CROSS : MarginMode.ISOLATED;
24
- const marginUsed = marginMode === MarginMode.ISOLATED
25
- ? new Big(pos.marginUsed).minus(pos.unrealizedPnl).toFixed()
26
- : pos.marginUsed;
27
24
  return {
28
25
  market,
29
26
  side: szi.gte(0) ? PositionSide.LONG : PositionSide.SHORT,
@@ -34,7 +31,7 @@ export const mapPosition = (ap, market) => {
34
31
  unrealizedPnl: pos.unrealizedPnl,
35
32
  accruedFunding: new Big(pos.cumFunding.sinceOpen).neg().toFixed(),
36
33
  leverage: ap.position.leverage.value,
37
- marginUsed,
34
+ marginUsed: pos.marginUsed,
38
35
  initialMarginRequirement: positionValue.div(leverage).toFixed(),
39
36
  marginMode,
40
37
  };
@@ -1 +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;AAC5D,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB;;;;;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;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAmB,EACnB,MAA0B,EAChB,EAAE;IACZ,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,CAAA;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,UAAU,GACd,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAA;IACxE,MAAM,UAAU,GACd,UAAU,KAAK,UAAU,CAAC,QAAQ;QAChC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;QAC5D,CAAC,CAAC,GAAG,CAAC,UAAU,CAAA;IAEpB,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;QACzD,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QACzB,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG;QAC9B,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;QACnE,gBAAgB,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG;QAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,cAAc,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QACjE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QACpC,UAAU;QACV,wBAAwB,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;QAC/D,UAAU;KACX,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,GAAG,MAAM,QAAQ,CAAA;AAGxB;;;;;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;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAmB,EACnB,MAA0B,EAChB,EAAE;IACZ,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,CAAA;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,UAAU,GACd,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAA;IAExE,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;QACzD,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QACzB,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG;QAC9B,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;QACnE,gBAAgB,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG;QAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,cAAc,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QACjE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,wBAAwB,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;QAC/D,UAAU;KACX,CAAA;AACH,CAAC,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"}
@@ -1,23 +1,11 @@
1
1
  import { toWireBig } from './decimal.js';
2
2
  /**
3
- * Portfolio-margin collateral beyond the category quote assets, keyed by spot
4
- * display symbol with its loan-to-value weight. Hyperliquid credits these
5
- * toward buying power at the given fraction (0.5 for both today). Quote assets
6
- * (USDC/USDT) are already full-value collateral via the category model, so
7
- * they are not listed here.
8
- * https://hyperliquid.gitbook.io/hyperliquid-docs/trading/portfolio-margin
9
- */
10
- const PORTFOLIO_MARGIN_LTV = {
11
- HYPE: 0.5,
12
- UBTC: 0.5,
13
- };
14
- /**
15
- * Partition spot balances into collateral and ordinary holdings. Quote assets
16
- * are full-value collateral; portfolio-margin-supported assets retain their
17
- * LTV as `collateralWeight`.
3
+ * Partition spot balances into collateral and ordinary holdings. Category
4
+ * quote assets are collateral; every other token is an ordinary holding.
5
+ * Zero-unit rows are dropped from both lists.
18
6
  * @public
19
7
  */
20
- export const partitionSpotBalances = (spotBalances, quoteAssetIds, portfolioMargin) => {
8
+ export const partitionSpotBalances = (spotBalances, quoteAssetIds) => {
21
9
  const collateralBalances = [];
22
10
  const balances = [];
23
11
  for (const balance of spotBalances) {
@@ -26,13 +14,6 @@ export const partitionSpotBalances = (spotBalances, quoteAssetIds, portfolioMarg
26
14
  }
27
15
  if (quoteAssetIds.has(balance.asset.id)) {
28
16
  collateralBalances.push(balance);
29
- continue;
30
- }
31
- const ltv = portfolioMargin
32
- ? PORTFOLIO_MARGIN_LTV[balance.asset.displaySymbol]
33
- : undefined;
34
- if (ltv !== undefined) {
35
- collateralBalances.push({ ...balance, collateralWeight: ltv });
36
17
  }
37
18
  else {
38
19
  balances.push(balance);
@@ -1 +1 @@
1
- {"version":3,"file":"spotCollateral.js","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,oBAAoB,GAAqC;IAC7D,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAA;AAYD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,YAAgC,EAChC,aAAkC,EAClC,eAAwB,EACT,EAAE;IACjB,MAAM,kBAAkB,GAAc,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,SAAQ;QACV,CAAC;QACD,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChC,SAAQ;QACV,CAAC;QACD,MAAM,GAAG,GAAG,eAAe;YACzB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YACnD,CAAC,CAAC,SAAS,CAAA;QACb,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;AACzC,CAAC,CAAA"}
1
+ {"version":3,"file":"spotCollateral.js","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAYxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,YAAgC,EAChC,aAAkC,EACnB,EAAE;IACjB,MAAM,kBAAkB,GAAc,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,SAAQ;QACV,CAAC;QACD,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;AACzC,CAAC,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,26 @@
1
+ import Big from 'big.js';
2
+ import { toWireBig } from './decimal.js';
3
+ /**
4
+ * Sum the venue `marginSummary` totals over every perps sub-dex of an
5
+ * account. `accountValue` is total equity, so it already carries locked
6
+ * margin and unrealized PnL. An entry without a `marginSummary` adds nothing.
7
+ * @public
8
+ */
9
+ export const perpsTotals = (dexStates) => {
10
+ let accountValue = new Big(0);
11
+ let marginUsed = new Big(0);
12
+ for (const { marginSummary } of dexStates) {
13
+ if (marginSummary === undefined) {
14
+ continue;
15
+ }
16
+ accountValue = accountValue.plus(toWireBig(marginSummary.accountValue, 'marginSummary.accountValue'));
17
+ marginUsed = marginUsed.plus(toWireBig(marginSummary.totalMarginUsed, 'marginSummary.totalMarginUsed'));
18
+ }
19
+ return { accountValue, marginUsed };
20
+ };
21
+ /**
22
+ * Sum the unrealized PnL of every position, in quote-asset units.
23
+ * @public
24
+ */
25
+ export const sumUnrealizedPnl = (positions) => positions.reduce((sum, position) => sum.plus(toWireBig(position.unrealizedPnl, 'position.unrealizedPnl')), new Big(0));
26
+ //# sourceMappingURL=venueTotals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venueTotals.js","sourceRoot":"","sources":["../../../src/utils/venueTotals.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAWxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAsC,EACE,EAAE;IAC1C,IAAI,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3B,KAAK,MAAM,EAAE,aAAa,EAAE,IAAI,SAAS,EAAE,CAAC;QAC1C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,SAAQ;QACV,CAAC;QACD,YAAY,GAAG,YAAY,CAAC,IAAI,CAC9B,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE,4BAA4B,CAAC,CACpE,CAAA;QACD,UAAU,GAAG,UAAU,CAAC,IAAI,CAC1B,SAAS,CAAC,aAAa,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAC1E,CAAA;IACH,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAA;AACrC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAA8B,EAAO,EAAE,CACtE,SAAS,CAAC,MAAM,CACd,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAChB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,EACvE,IAAI,GAAG,CAAC,CAAC,CAAC,CACX,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"}
@@ -0,0 +1,41 @@
1
+ import { isUnifiedAbstraction } from './abstractionMode.js';
2
+ import { assetIsOutcome } from './assetId.js';
3
+ import { toWireBig } from './decimal.js';
4
+ /**
5
+ * Split a Hyperliquid account's venue figures into the routes a withdrawal
6
+ * draws on. A unified or portfolio-margin account holds its collateral in spot,
7
+ * so each spot token adds the part of `total` that no order or margin holds. A
8
+ * route with nothing left to draw carries no row, and the caller applies the
9
+ * per-asset venue minimum.
10
+ *
11
+ * @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
12
+ * @public
13
+ */
14
+ export const hyperliquidWithdrawableBalances = (abstraction, state, spotState, quoteAssetId) => {
15
+ const rows = [];
16
+ if (isUnifiedAbstraction(abstraction)) {
17
+ for (const balance of spotState.balances) {
18
+ if (assetIsOutcome(balance.coin)) {
19
+ continue;
20
+ }
21
+ const spot = toWireBig(balance.total, 'spotBalance.total').minus(toWireBig(balance.hold, 'spotBalance.hold'));
22
+ if (spot.gt(0)) {
23
+ rows.push({
24
+ assetId: String(balance.token),
25
+ route: 'spot',
26
+ available: spot.toFixed(),
27
+ });
28
+ }
29
+ }
30
+ }
31
+ const perps = toWireBig(state.withdrawable, 'clearinghouseState.withdrawable');
32
+ if (perps.gt(0)) {
33
+ rows.push({
34
+ assetId: quoteAssetId,
35
+ route: 'perps',
36
+ available: perps.toFixed(),
37
+ });
38
+ }
39
+ return rows;
40
+ };
41
+ //# sourceMappingURL=withdrawableBalances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,WAAqC,EACrC,KAA2B,EAC3B,SAAmC,EACnC,YAAoB,EACW,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAE9C,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAC9D,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAC5C,CAAA;YACD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC;oBACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC9B,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;iBAC1B,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC;YACR,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,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