@lifi/perps-sdk-provider-hyperliquid 25.0.0 → 26.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 (233) hide show
  1. package/dist/cjs/accountSummary.d.ts.map +1 -1
  2. package/dist/cjs/accountSummary.js +8 -14
  3. package/dist/cjs/accountSummary.js.map +1 -1
  4. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  5. package/dist/cjs/services/getAccount.js +19 -16
  6. package/dist/cjs/services/getAccount.js.map +1 -1
  7. package/dist/cjs/services/getFills.d.ts.map +1 -1
  8. package/dist/cjs/services/getFills.js +2 -1
  9. package/dist/cjs/services/getFills.js.map +1 -1
  10. package/dist/cjs/services/getMarketSettings.d.ts.map +1 -1
  11. package/dist/cjs/services/getMarketSettings.js +1 -1
  12. package/dist/cjs/services/getMarketSettings.js.map +1 -1
  13. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  14. package/dist/cjs/services/getOrder.js +14 -4
  15. package/dist/cjs/services/getOrder.js.map +1 -1
  16. package/dist/cjs/services/getOrders.d.ts.map +1 -1
  17. package/dist/cjs/services/getOrders.js +3 -1
  18. package/dist/cjs/services/getOrders.js.map +1 -1
  19. package/dist/cjs/services/getPortfolioHistory.d.ts.map +1 -1
  20. package/dist/cjs/services/getPortfolioHistory.js +15 -6
  21. package/dist/cjs/services/getPortfolioHistory.js.map +1 -1
  22. package/dist/cjs/services/getPositions.d.ts.map +1 -1
  23. package/dist/cjs/services/getPositions.js +4 -1
  24. package/dist/cjs/services/getPositions.js.map +1 -1
  25. package/dist/cjs/types/ws.d.ts +3 -2
  26. package/dist/cjs/types/ws.d.ts.map +1 -1
  27. package/dist/cjs/utils/liquidation.d.ts +1 -1
  28. package/dist/cjs/utils/liquidation.d.ts.map +1 -1
  29. package/dist/cjs/utils/liquidation.js +3 -4
  30. package/dist/cjs/utils/liquidation.js.map +1 -1
  31. package/dist/cjs/utils/mapActivity.d.ts.map +1 -1
  32. package/dist/cjs/utils/mapActivity.js +32 -23
  33. package/dist/cjs/utils/mapActivity.js.map +1 -1
  34. package/dist/cjs/utils/mapFill.d.ts +1 -1
  35. package/dist/cjs/utils/mapFill.d.ts.map +1 -1
  36. package/dist/cjs/utils/mapFill.js +14 -6
  37. package/dist/cjs/utils/mapFill.js.map +1 -1
  38. package/dist/cjs/utils/mapMarket.d.ts.map +1 -1
  39. package/dist/cjs/utils/mapMarket.js +8 -12
  40. package/dist/cjs/utils/mapMarket.js.map +1 -1
  41. package/dist/cjs/utils/mapMarketContext.d.ts.map +1 -1
  42. package/dist/cjs/utils/mapMarketContext.js +3 -12
  43. package/dist/cjs/utils/mapMarketContext.js.map +1 -1
  44. package/dist/cjs/utils/mapOrder.d.ts +1 -1
  45. package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
  46. package/dist/cjs/utils/mapOrder.js +60 -18
  47. package/dist/cjs/utils/mapOrder.js.map +1 -1
  48. package/dist/cjs/utils/mapPosition.d.ts +1 -1
  49. package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
  50. package/dist/cjs/utils/mapPosition.js +40 -14
  51. package/dist/cjs/utils/mapPosition.js.map +1 -1
  52. package/dist/cjs/utils/rowTimestamp.d.ts +2 -0
  53. package/dist/cjs/utils/rowTimestamp.d.ts.map +1 -0
  54. package/dist/cjs/utils/rowTimestamp.js +14 -0
  55. package/dist/cjs/utils/rowTimestamp.js.map +1 -0
  56. package/dist/cjs/utils/spotBalance.d.ts +3 -3
  57. package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
  58. package/dist/cjs/utils/spotBalance.js +6 -5
  59. package/dist/cjs/utils/spotBalance.js.map +1 -1
  60. package/dist/cjs/utils/spotCollateral.d.ts.map +1 -1
  61. package/dist/cjs/utils/spotCollateral.js +3 -2
  62. package/dist/cjs/utils/spotCollateral.js.map +1 -1
  63. package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
  64. package/dist/cjs/utils/transferMargin.js +16 -19
  65. package/dist/cjs/utils/transferMargin.js.map +1 -1
  66. package/dist/cjs/utils/venueTotals.d.ts +5 -5
  67. package/dist/cjs/utils/venueTotals.d.ts.map +1 -1
  68. package/dist/cjs/utils/venueTotals.js +10 -11
  69. package/dist/cjs/utils/venueTotals.js.map +1 -1
  70. package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
  71. package/dist/cjs/utils/withdrawableBalances.js +10 -10
  72. package/dist/cjs/utils/withdrawableBalances.js.map +1 -1
  73. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  74. package/dist/cjs/websocket/HyperliquidWsProvider.js +109 -89
  75. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  76. package/dist/esm/accountSummary.d.ts +2 -1
  77. package/dist/esm/accountSummary.d.ts.map +1 -1
  78. package/dist/esm/accountSummary.js +11 -13
  79. package/dist/esm/accountSummary.js.map +1 -1
  80. package/dist/esm/services/getAccount.d.ts.map +1 -1
  81. package/dist/esm/services/getAccount.js +24 -21
  82. package/dist/esm/services/getAccount.js.map +1 -1
  83. package/dist/esm/services/getFills.d.ts.map +1 -1
  84. package/dist/esm/services/getFills.js +2 -1
  85. package/dist/esm/services/getFills.js.map +1 -1
  86. package/dist/esm/services/getMarketSettings.d.ts.map +1 -1
  87. package/dist/esm/services/getMarketSettings.js +2 -2
  88. package/dist/esm/services/getMarketSettings.js.map +1 -1
  89. package/dist/esm/services/getOrder.d.ts.map +1 -1
  90. package/dist/esm/services/getOrder.js +14 -4
  91. package/dist/esm/services/getOrder.js.map +1 -1
  92. package/dist/esm/services/getOrders.d.ts.map +1 -1
  93. package/dist/esm/services/getOrders.js +5 -2
  94. package/dist/esm/services/getOrders.js.map +1 -1
  95. package/dist/esm/services/getPortfolioHistory.d.ts.map +1 -1
  96. package/dist/esm/services/getPortfolioHistory.js +17 -7
  97. package/dist/esm/services/getPortfolioHistory.js.map +1 -1
  98. package/dist/esm/services/getPositions.d.ts.map +1 -1
  99. package/dist/esm/services/getPositions.js +4 -1
  100. package/dist/esm/services/getPositions.js.map +1 -1
  101. package/dist/esm/services/getWithdrawableBalances.d.ts +1 -1
  102. package/dist/esm/services/getWithdrawableBalances.js +1 -1
  103. package/dist/esm/types/ws.d.ts +3 -2
  104. package/dist/esm/types/ws.d.ts.map +1 -1
  105. package/dist/esm/utils/liquidation.d.ts +1 -1
  106. package/dist/esm/utils/liquidation.d.ts.map +1 -1
  107. package/dist/esm/utils/liquidation.js +4 -5
  108. package/dist/esm/utils/liquidation.js.map +1 -1
  109. package/dist/esm/utils/mapActivity.d.ts +2 -1
  110. package/dist/esm/utils/mapActivity.d.ts.map +1 -1
  111. package/dist/esm/utils/mapActivity.js +35 -22
  112. package/dist/esm/utils/mapActivity.js.map +1 -1
  113. package/dist/esm/utils/mapFill.d.ts +3 -2
  114. package/dist/esm/utils/mapFill.d.ts.map +1 -1
  115. package/dist/esm/utils/mapFill.js +18 -9
  116. package/dist/esm/utils/mapFill.js.map +1 -1
  117. package/dist/esm/utils/mapMarket.d.ts +2 -2
  118. package/dist/esm/utils/mapMarket.d.ts.map +1 -1
  119. package/dist/esm/utils/mapMarket.js +10 -11
  120. package/dist/esm/utils/mapMarket.js.map +1 -1
  121. package/dist/esm/utils/mapMarketContext.d.ts.map +1 -1
  122. package/dist/esm/utils/mapMarketContext.js +3 -9
  123. package/dist/esm/utils/mapMarketContext.js.map +1 -1
  124. package/dist/esm/utils/mapOrder.d.ts +5 -2
  125. package/dist/esm/utils/mapOrder.d.ts.map +1 -1
  126. package/dist/esm/utils/mapOrder.js +65 -17
  127. package/dist/esm/utils/mapOrder.js.map +1 -1
  128. package/dist/esm/utils/mapPosition.d.ts +4 -2
  129. package/dist/esm/utils/mapPosition.d.ts.map +1 -1
  130. package/dist/esm/utils/mapPosition.js +43 -12
  131. package/dist/esm/utils/mapPosition.js.map +1 -1
  132. package/dist/esm/utils/rowTimestamp.d.ts +6 -0
  133. package/dist/esm/utils/rowTimestamp.d.ts.map +1 -0
  134. package/dist/esm/utils/rowTimestamp.js +14 -0
  135. package/dist/esm/utils/rowTimestamp.js.map +1 -0
  136. package/dist/esm/utils/spotBalance.d.ts +5 -5
  137. package/dist/esm/utils/spotBalance.d.ts.map +1 -1
  138. package/dist/esm/utils/spotBalance.js +9 -8
  139. package/dist/esm/utils/spotBalance.js.map +1 -1
  140. package/dist/esm/utils/spotCollateral.d.ts.map +1 -1
  141. package/dist/esm/utils/spotCollateral.js +3 -2
  142. package/dist/esm/utils/spotCollateral.js.map +1 -1
  143. package/dist/esm/utils/transferMargin.d.ts +2 -1
  144. package/dist/esm/utils/transferMargin.d.ts.map +1 -1
  145. package/dist/esm/utils/transferMargin.js +19 -18
  146. package/dist/esm/utils/transferMargin.js.map +1 -1
  147. package/dist/esm/utils/venueTotals.d.ts +10 -5
  148. package/dist/esm/utils/venueTotals.d.ts.map +1 -1
  149. package/dist/esm/utils/venueTotals.js +13 -7
  150. package/dist/esm/utils/venueTotals.js.map +1 -1
  151. package/dist/esm/utils/withdrawableBalances.d.ts +6 -4
  152. package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
  153. package/dist/esm/utils/withdrawableBalances.js +17 -15
  154. package/dist/esm/utils/withdrawableBalances.js.map +1 -1
  155. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +2 -0
  156. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  157. package/dist/esm/websocket/HyperliquidWsProvider.js +119 -88
  158. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  159. package/dist/types/accountSummary.d.ts +2 -1
  160. package/dist/types/accountSummary.d.ts.map +1 -1
  161. package/dist/types/services/getAccount.d.ts.map +1 -1
  162. package/dist/types/services/getFills.d.ts.map +1 -1
  163. package/dist/types/services/getMarketSettings.d.ts.map +1 -1
  164. package/dist/types/services/getOrder.d.ts.map +1 -1
  165. package/dist/types/services/getOrders.d.ts.map +1 -1
  166. package/dist/types/services/getPortfolioHistory.d.ts.map +1 -1
  167. package/dist/types/services/getPositions.d.ts.map +1 -1
  168. package/dist/types/services/getWithdrawableBalances.d.ts +1 -1
  169. package/dist/types/types/ws.d.ts +3 -2
  170. package/dist/types/types/ws.d.ts.map +1 -1
  171. package/dist/types/utils/liquidation.d.ts +1 -1
  172. package/dist/types/utils/liquidation.d.ts.map +1 -1
  173. package/dist/types/utils/mapActivity.d.ts +2 -1
  174. package/dist/types/utils/mapActivity.d.ts.map +1 -1
  175. package/dist/types/utils/mapFill.d.ts +3 -2
  176. package/dist/types/utils/mapFill.d.ts.map +1 -1
  177. package/dist/types/utils/mapMarket.d.ts +2 -2
  178. package/dist/types/utils/mapMarket.d.ts.map +1 -1
  179. package/dist/types/utils/mapMarketContext.d.ts.map +1 -1
  180. package/dist/types/utils/mapOrder.d.ts +5 -2
  181. package/dist/types/utils/mapOrder.d.ts.map +1 -1
  182. package/dist/types/utils/mapPosition.d.ts +4 -2
  183. package/dist/types/utils/mapPosition.d.ts.map +1 -1
  184. package/dist/types/utils/rowTimestamp.d.ts +6 -0
  185. package/dist/types/utils/rowTimestamp.d.ts.map +1 -0
  186. package/dist/types/utils/spotBalance.d.ts +5 -5
  187. package/dist/types/utils/spotBalance.d.ts.map +1 -1
  188. package/dist/types/utils/spotCollateral.d.ts.map +1 -1
  189. package/dist/types/utils/transferMargin.d.ts +2 -1
  190. package/dist/types/utils/transferMargin.d.ts.map +1 -1
  191. package/dist/types/utils/venueTotals.d.ts +10 -5
  192. package/dist/types/utils/venueTotals.d.ts.map +1 -1
  193. package/dist/types/utils/withdrawableBalances.d.ts +6 -4
  194. package/dist/types/utils/withdrawableBalances.d.ts.map +1 -1
  195. package/dist/types/websocket/HyperliquidWsProvider.d.ts +2 -0
  196. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  197. package/package.json +3 -3
  198. package/src/HyperliquidProvider.ts +1 -1
  199. package/src/accountSummary.ts +35 -23
  200. package/src/services/getAccount.ts +50 -33
  201. package/src/services/getFills.ts +2 -1
  202. package/src/services/getMarketSettings.ts +6 -2
  203. package/src/services/getOrder.ts +18 -7
  204. package/src/services/getOrders.ts +6 -3
  205. package/src/services/getPortfolioHistory.ts +38 -7
  206. package/src/services/getPositions.ts +4 -3
  207. package/src/services/getWithdrawableBalances.ts +1 -1
  208. package/src/types/ws.ts +3 -2
  209. package/src/utils/liquidation.ts +14 -8
  210. package/src/utils/mapActivity.ts +42 -20
  211. package/src/utils/mapFill.ts +22 -9
  212. package/src/utils/mapMarket.ts +12 -10
  213. package/src/utils/mapMarketContext.ts +6 -8
  214. package/src/utils/mapOrder.ts +81 -20
  215. package/src/utils/mapPosition.ts +67 -13
  216. package/src/utils/rowTimestamp.ts +15 -0
  217. package/src/utils/spotBalance.ts +19 -16
  218. package/src/utils/spotCollateral.ts +15 -2
  219. package/src/utils/transferMargin.ts +40 -18
  220. package/src/utils/venueTotals.ts +54 -13
  221. package/src/utils/withdrawableBalances.ts +33 -15
  222. package/src/websocket/HyperliquidWsProvider.ts +169 -102
  223. package/dist/cjs/utils/decimal.d.ts +0 -3
  224. package/dist/cjs/utils/decimal.d.ts.map +0 -1
  225. package/dist/cjs/utils/decimal.js +0 -19
  226. package/dist/cjs/utils/decimal.js.map +0 -1
  227. package/dist/esm/utils/decimal.d.ts +0 -10
  228. package/dist/esm/utils/decimal.d.ts.map +0 -1
  229. package/dist/esm/utils/decimal.js +0 -19
  230. package/dist/esm/utils/decimal.js.map +0 -1
  231. package/dist/types/utils/decimal.d.ts +0 -10
  232. package/dist/types/utils/decimal.d.ts.map +0 -1
  233. package/src/utils/decimal.ts +0 -21
@@ -1,38 +1,69 @@
1
+ import { absDecimalString, createWarnOnce, isDecimalString, isDecimalStringGreaterThan, isDecimalStringZero, safeAbsDecimalString, safeDivideDecimalString, safeIsDecimalStringZero, safeNumberToDecimalString, safeSubtractDecimalString, warnSkippedVenueRow, } from '@lifi/perps-sdk';
1
2
  import { MarginMode, PositionSide } from '@lifi/perps-types';
2
- import Big from 'big.js';
3
+ import { PROVIDER_KEY } from '../constants.js';
4
+ const warnNonPositiveLeverageOnce = createWarnOnce();
5
+ const skipPosition = (field, value) => {
6
+ warnSkippedVenueRow(PROVIDER_KEY, 'position', field, value);
7
+ return undefined;
8
+ };
3
9
  /**
4
10
  * True when the assetPosition has non-zero size. Hyperliquid keeps zero-size
5
11
  * rows in clearinghouse states after a close; both the REST and WS positions
6
12
  * paths drop them so a close surfaces as absence from the open set.
7
13
  * @public
8
14
  */
9
- export const isOpenAssetPosition = (ap) => Number.parseFloat(ap.position.szi) !== 0;
15
+ export const isOpenAssetPosition = (ap) => safeIsDecimalStringZero(ap.position.szi) !== true;
10
16
  /**
11
17
  * Map a non-zero Hyperliquid position payload to the SDK's normalized
12
18
  * position. Signed wire size determines side; decimal strings remain strings
13
19
  * in the normalized response. `cumFunding.sinceOpen` is negated because
14
20
  * Hyperliquid signs funding paid as positive and `accruedFunding` signs it as
15
- * negative.
21
+ * negative. A row with an invalid size gives `undefined`; an invalid position
22
+ * value, a non-positive leverage or an invalid funding leaves the derived field
23
+ * absent.
16
24
  * @public
17
25
  */
18
26
  export const mapPosition = (ap, market) => {
19
27
  const pos = ap.position;
20
- const szi = new Big(pos.szi);
21
- const positionValue = new Big(pos.positionValue).abs();
22
- const leverage = new Big(pos.leverage.value);
28
+ if (!isDecimalString(pos.szi)) {
29
+ return skipPosition('szi', pos.szi);
30
+ }
31
+ const size = absDecimalString(pos.szi);
32
+ const positionValue = safeAbsDecimalString(pos.positionValue);
33
+ const markPrice = positionValue === undefined
34
+ ? undefined
35
+ : isDecimalStringZero(size)
36
+ ? '0'
37
+ : safeDivideDecimalString(positionValue, size);
38
+ const accruedFunding = safeSubtractDecimalString('0', pos.cumFunding.sinceOpen);
39
+ const venueLeverage = safeNumberToDecimalString(pos.leverage.value);
40
+ const leverage = venueLeverage !== undefined &&
41
+ isDecimalStringGreaterThan(venueLeverage, '0')
42
+ ? venueLeverage
43
+ : undefined;
44
+ if (venueLeverage !== undefined && leverage === undefined) {
45
+ warnNonPositiveLeverageOnce(venueLeverage, `[${PROVIDER_KEY}] position \`leverage.value\` is not positive: '${venueLeverage}'`);
46
+ }
47
+ const initialMarginRequirement = positionValue === undefined || leverage === undefined
48
+ ? undefined
49
+ : safeDivideDecimalString(positionValue, leverage);
23
50
  const marginMode = pos.leverage.type === 'cross' ? MarginMode.CROSS : MarginMode.ISOLATED;
24
51
  return {
25
52
  market,
26
- side: szi.gte(0) ? PositionSide.LONG : PositionSide.SHORT,
27
- size: szi.abs().toFixed(),
53
+ side: isDecimalStringGreaterThan('0', pos.szi)
54
+ ? PositionSide.SHORT
55
+ : PositionSide.LONG,
56
+ size,
28
57
  entryPrice: pos.entryPx ?? '0',
29
- markPrice: szi.eq(0) ? '0' : positionValue.div(szi.abs()).toFixed(),
58
+ ...(markPrice === undefined ? {} : { markPrice }),
30
59
  liquidationPrice: pos.liquidationPx ?? '0',
31
60
  unrealizedPnl: pos.unrealizedPnl,
32
- accruedFunding: new Big(pos.cumFunding.sinceOpen).neg().toFixed(),
33
- leverage: ap.position.leverage.value,
61
+ ...(accruedFunding === undefined ? {} : { accruedFunding }),
62
+ ...(leverage === undefined ? {} : { leverage }),
34
63
  marginUsed: pos.marginUsed,
35
- initialMarginRequirement: positionValue.div(leverage).toFixed(),
64
+ ...(initialMarginRequirement === undefined
65
+ ? {}
66
+ : { initialMarginRequirement }),
36
67
  marginMode,
37
68
  };
38
69
  };
@@ -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;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"}
1
+ {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Read a venue row time as an ISO-8601 string, or `undefined` when the time is
3
+ * not valid. The caller logs the row skip, so this logs nothing.
4
+ */
5
+ export declare const rowTimestampToIsoStringOrUndefined: (value: string | number) => string | undefined;
6
+ //# sourceMappingURL=rowTimestamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowTimestamp.d.ts","sourceRoot":"","sources":["../../../src/utils/rowTimestamp.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,kCAAkC,GAC7C,OAAO,MAAM,GAAG,MAAM,KACrB,MAAM,GAAG,SAMX,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { timestampToIsoString } from '@lifi/perps-sdk';
2
+ /**
3
+ * Read a venue row time as an ISO-8601 string, or `undefined` when the time is
4
+ * not valid. The caller logs the row skip, so this logs nothing.
5
+ */
6
+ export const rowTimestampToIsoStringOrUndefined = (value) => {
7
+ try {
8
+ return timestampToIsoString(value);
9
+ }
10
+ catch {
11
+ return undefined;
12
+ }
13
+ };
14
+ //# sourceMappingURL=rowTimestamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowTimestamp.js","sourceRoot":"","sources":["../../../src/utils/rowTimestamp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAChD,KAAsB,EACF,EAAE;IACtB,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA"}
@@ -1,12 +1,12 @@
1
- import type { Asset, Balance, Market } from '@lifi/perps-types';
1
+ import type { Asset, Balance, DecimalString, Market } from '@lifi/perps-types';
2
2
  import type { HlSpotBalance } from '../types/index.js';
3
3
  /**
4
4
  * Build USD prices keyed by spot token asset ID. Base tokens use the supplied
5
- * market mark price; quote tokens default to exactly `$1`; missing base prices
6
- * default to `0`.
5
+ * market mark price; quote tokens default to exactly `$1`; missing or invalid
6
+ * base prices default to `0`.
7
7
  * @public
8
8
  */
9
- export declare const spotPriceById: (markets: readonly Market[], priceByMarketId: ReadonlyMap<string, number>) => Map<string, number>;
9
+ export declare const spotPriceById: (markets: readonly Market[], priceByMarketId: ReadonlyMap<string, DecimalString>) => Map<string, DecimalString>;
10
10
  /**
11
11
  * Convert a Hyperliquid spot balance's numeric token index into an SDK asset.
12
12
  * The balance payload has no `fullName`, so logo resolution uses the base
@@ -15,5 +15,5 @@ export declare const spotPriceById: (markets: readonly Market[], priceByMarketId
15
15
  */
16
16
  export declare const spotAssetFromToken: (b: HlSpotBalance) => Asset;
17
17
  /** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
18
- export declare const spotBalance: (asset: Asset, total: string, priceById: Map<string, number>) => Balance;
18
+ export declare const spotBalance: (asset: Asset, total: DecimalString, priceById: ReadonlyMap<string, DecimalString>) => Balance;
19
19
  //# sourceMappingURL=spotBalance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAapB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAIpD,CAAA;AAEF,qIAAqI;AACrI,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAYF,CAAA"}
1
+ {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAClD,GAAG,CAAC,MAAM,EAAE,aAAa,CAc3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAIpD,CAAA;AAEF,qIAAqI;AACrI,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,aAAa,EACpB,WAAW,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAC5C,OAUF,CAAA"}
@@ -1,23 +1,24 @@
1
- import { numberToDecimalString, parseDecimal } from '@lifi/perps-sdk';
1
+ import { isDecimalString, isDecimalStringGreaterThan, multiplyDecimalString, } from '@lifi/perps-sdk';
2
2
  import { SPOT_MARKET_ID } from '../constants.js';
3
3
  import { spotLogoURI } from './assetLogo.js';
4
4
  import { coinAsset } from './marketDisplay.js';
5
5
  /**
6
6
  * Build USD prices keyed by spot token asset ID. Base tokens use the supplied
7
- * market mark price; quote tokens default to exactly `$1`; missing base prices
8
- * default to `0`.
7
+ * market mark price; quote tokens default to exactly `$1`; missing or invalid
8
+ * base prices default to `0`.
9
9
  * @public
10
10
  */
11
11
  export const spotPriceById = (markets, priceByMarketId) => {
12
12
  const map = new Map();
13
13
  for (const m of markets) {
14
14
  if (m.categoryId === SPOT_MARKET_ID) {
15
- map.set(m.baseAsset.id, priceByMarketId.get(m.id) ?? 0);
15
+ const price = priceByMarketId.get(m.id);
16
+ map.set(m.baseAsset.id, isDecimalString(price) ? price : '0');
16
17
  }
17
18
  }
18
19
  for (const m of markets) {
19
20
  if (!map.has(m.quoteAsset.id)) {
20
- map.set(m.quoteAsset.id, 1);
21
+ map.set(m.quoteAsset.id, '1');
21
22
  }
22
23
  }
23
24
  return map;
@@ -35,14 +36,14 @@ export const spotAssetFromToken = (b) => ({
35
36
  });
36
37
  /** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
37
38
  export const spotBalance = (asset, total, priceById) => {
38
- const price = priceById.get(asset.id) ?? 0;
39
+ const price = priceById.get(asset.id) ?? '0';
39
40
  return {
40
41
  categoryId: SPOT_MARKET_ID,
41
42
  asset,
42
43
  units: total,
43
- valueUsd: numberToDecimalString((parseDecimal(total) ?? Number.NaN) * price),
44
+ valueUsd: multiplyDecimalString(total, price),
44
45
  // A zero entry means the map holds no mark for the asset, not a free asset.
45
- ...(price > 0 ? { price: numberToDecimalString(price) } : {}),
46
+ ...(isDecimalStringGreaterThan(price, '0') ? { price } : {}),
46
47
  };
47
48
  };
48
49
  //# sourceMappingURL=spotBalance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAA4C,EACvB,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;CAC7B,CAAC,CAAA;AAEF,qIAAqI;AACrI,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,KAAa,EACb,SAA8B,EACrB,EAAE;IACX,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,KAAK;QACL,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,qBAAqB,CAC7B,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAC5C;QACD,4EAA4E;QAC5E,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAAmD,EACvB,EAAE;IAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACvC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;CAC7B,CAAC,CAAA;AAEF,qIAAqI;AACrI,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,KAAoB,EACpB,SAA6C,EACpC,EAAE;IACX,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,CAAA;IAC5C,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,KAAK;QACL,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;QAC7C,4EAA4E;QAC5E,GAAG,CAAC,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAA;AACH,CAAC,CAAA"}
@@ -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;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
+ {"version":3,"file":"spotCollateral.d.ts","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AAIA,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,aAuBF,CAAA"}
@@ -1,4 +1,5 @@
1
- import { toWireBig } from './decimal.js';
1
+ import { isDecimalStringGreaterThan, unknownToDecimalString, } from '@lifi/perps-sdk';
2
+ import { PROVIDER_KEY } from '../constants.js';
2
3
  /**
3
4
  * Partition spot balances into collateral and ordinary holdings. Category
4
5
  * quote assets are collateral; every other token is an ordinary holding.
@@ -9,7 +10,7 @@ export const partitionSpotBalances = (spotBalances, quoteAssetIds) => {
9
10
  const collateralBalances = [];
10
11
  const balances = [];
11
12
  for (const balance of spotBalances) {
12
- if (!toWireBig(balance.units, 'spotBalance.units').gt(0)) {
13
+ if (!isDecimalStringGreaterThan(unknownToDecimalString(balance.units, 'spotBalance.units', PROVIDER_KEY), '0')) {
13
14
  continue;
14
15
  }
15
16
  if (quoteAssetIds.has(balance.asset.id)) {
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"spotCollateral.js","sourceRoot":"","sources":["../../../src/utils/spotCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAY9C;;;;;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,IACE,CAAC,0BAA0B,CACzB,sBAAsB,CACpB,OAAO,CAAC,KAAK,EACb,mBAAmB,EACnB,YAAY,CACb,EACD,GAAG,CACJ,EACD,CAAC;YACD,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"}
@@ -10,7 +10,8 @@ import { type DecimalString, type Position } from '@lifi/perps-types';
10
10
  * margin adjustment; `'0'` for add-only strict-isolated markets and when
11
11
  * nothing is removable.
12
12
  * @throws {PerpsError} `ValidationError` when a required `Position` decimal
13
- * is malformed, or when a size, price or requirement is not positive.
13
+ * is absent or malformed, or when a size, price or requirement is not
14
+ * positive.
14
15
  * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/margining
15
16
  * @public
16
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAqB1B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAwB3B"}
1
+ {"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAkC1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CA4B3B"}
@@ -1,17 +1,19 @@
1
- import { PerpsError, positionSupportsMarginAdjustment, positionSupportsMarginRemoval, validateDecimalString, } from '@lifi/perps-sdk';
1
+ import { isDecimalString, isDecimalStringGreaterThan, multiplyDecimalString, PerpsError, positionSupportsMarginAdjustment, positionSupportsMarginRemoval, roundDecimalString, subtractDecimalString, } from '@lifi/perps-sdk';
2
2
  import { PerpsErrorCode, } from '@lifi/perps-types';
3
- import Big from 'big.js';
4
3
  const NOTIONAL_FLOOR_RATIO = '0.1';
5
4
  const AMOUNT_DECIMALS = 6;
6
- function positionAmount(value, field) {
7
- return new Big(validateDecimalString(value, `Position.${field}`));
5
+ function requirePositionAmount(value, field) {
6
+ if (!isDecimalString(value)) {
7
+ throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid \`Position.${field}\`: '${value}' is not a decimal string.`);
8
+ }
9
+ return value;
8
10
  }
9
- function positivePositionAmount(value, field) {
10
- const amount = positionAmount(value, field);
11
- if (amount.lte(0)) {
11
+ function requirePositivePositionAmount(value, field) {
12
+ if (value === undefined ||
13
+ !isDecimalStringGreaterThan(requirePositionAmount(value, field), '0')) {
12
14
  throw new PerpsError(PerpsErrorCode.ValidationError, `Position.${field} must be greater than zero.`);
13
15
  }
14
- return amount;
16
+ return value;
15
17
  }
16
18
  /**
17
19
  * Hyperliquid removable isolated margin:
@@ -24,7 +26,8 @@ function positivePositionAmount(value, field) {
24
26
  * margin adjustment; `'0'` for add-only strict-isolated markets and when
25
27
  * nothing is removable.
26
28
  * @throws {PerpsError} `ValidationError` when a required `Position` decimal
27
- * is malformed, or when a size, price or requirement is not positive.
29
+ * is absent or malformed, or when a size, price or requirement is not
30
+ * positive.
28
31
  * @see https://hyperliquid.gitbook.io/hyperliquid-docs/trading/margining
29
32
  * @public
30
33
  */
@@ -35,18 +38,16 @@ export function positionRemovableMargin(position) {
35
38
  if (!positionSupportsMarginRemoval(position)) {
36
39
  return '0';
37
40
  }
38
- const marginUsed = positionAmount(position.marginUsed, 'marginUsed');
39
- const initialMargin = positivePositionAmount(position.initialMarginRequirement, 'initialMarginRequirement');
40
- const notionalFloor = positivePositionAmount(position.size, 'size')
41
- .times(positivePositionAmount(position.markPrice, 'markPrice'))
42
- .times(NOTIONAL_FLOOR_RATIO);
43
- const minimumMargin = initialMargin.gt(notionalFloor)
41
+ const marginUsed = requirePositionAmount(position.marginUsed, 'marginUsed');
42
+ const initialMargin = requirePositivePositionAmount(position.initialMarginRequirement, 'initialMarginRequirement');
43
+ const notionalFloor = multiplyDecimalString(multiplyDecimalString(requirePositivePositionAmount(position.size, 'size'), requirePositivePositionAmount(position.markPrice, 'markPrice')), NOTIONAL_FLOOR_RATIO);
44
+ const minimumMargin = isDecimalStringGreaterThan(initialMargin, notionalFloor)
44
45
  ? initialMargin
45
46
  : notionalFloor;
46
- const removable = marginUsed.minus(minimumMargin);
47
- if (removable.lte(0)) {
47
+ const removable = subtractDecimalString(marginUsed, minimumMargin);
48
+ if (!isDecimalStringGreaterThan(removable, '0')) {
48
49
  return '0';
49
50
  }
50
- return removable.round(AMOUNT_DECIMALS, Big.roundDown).toFixed();
51
+ return roundDecimalString(removable, AMOUNT_DECIMALS, 'truncate');
51
52
  }
52
53
  //# sourceMappingURL=transferMargin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAEL,cAAc,GAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAClC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAoB,EAAE,KAAa;IACzD,OAAO,IAAI,GAAG,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,sBAAsB,CAC1C,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CAAA;IACD,MAAM,aAAa,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SAChE,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC9D,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC;QACnD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACjD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,EACrB,UAAU,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAEL,cAAc,GAEf,MAAM,mBAAmB,CAAA;AAE1B,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAClC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,qBAAqB,CAC5B,KAAoB,EACpB,KAAa;IAEb,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,sBAAsB,KAAK,QAAQ,KAAK,4BAA4B,CACrE,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,6BAA6B,CACpC,KAAgC,EAChC,KAAa;IAEb,IACE,KAAK,KAAK,SAAS;QACnB,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,EACrE,CAAC;QACD,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC3E,MAAM,aAAa,GAAG,6BAA6B,CACjD,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CAAA;IACD,MAAM,aAAa,GAAG,qBAAqB,CACzC,qBAAqB,CACnB,6BAA6B,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EACpD,6BAA6B,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAC/D,EACD,oBAAoB,CACrB,CAAA;IACD,MAAM,aAAa,GAAG,0BAA0B,CAAC,aAAa,EAAE,aAAa,CAAC;QAC5E,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAClE,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,kBAAkB,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAA;AACnE,CAAC"}
@@ -1,5 +1,4 @@
1
- import type { HyperliquidMarginSummary, Position } from '@lifi/perps-types';
2
- import Big from 'big.js';
1
+ import type { DecimalString, HyperliquidMarginSummary, Position } from '@lifi/perps-types';
3
2
  /**
4
3
  * One perps sub-dex entry {@link perpsTotals} reads. The REST response always
5
4
  * carries `marginSummary`; a WebSocket frame may omit it.
@@ -12,15 +11,21 @@ export interface DexMarginSummary {
12
11
  * Sum the venue `marginSummary` totals over every perps sub-dex of an
13
12
  * account. `accountValue` is total equity, so it already carries locked
14
13
  * margin and unrealized PnL. An entry without a `marginSummary` adds nothing.
14
+ * @throws {PerpsError} `SDKError` when a venue figure is not a decimal.
15
15
  * @public
16
16
  */
17
17
  export declare const perpsTotals: (dexStates: readonly DexMarginSummary[]) => {
18
- accountValue: Big;
19
- marginUsed: Big;
18
+ accountValue: DecimalString;
19
+ marginUsed: DecimalString;
20
20
  };
21
21
  /**
22
22
  * Sum the unrealized PnL of every position, in quote-asset units.
23
23
  * @public
24
24
  */
25
- export declare const sumUnrealizedPnl: (positions: readonly Position[]) => Big;
25
+ export declare const sumUnrealizedPnl: (positions: readonly Position[]) => DecimalString;
26
+ /**
27
+ * Sum every term, or `undefined` with a warning when any term is not a
28
+ * decimal string. A bad term never gives a partial sum.
29
+ */
30
+ export declare const safeSumDecimalStrings: (terms: readonly string[]) => DecimalString | undefined;
26
31
  //# sourceMappingURL=venueTotals.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"venueTotals.d.ts","sourceRoot":"","sources":["../../../src/utils/venueTotals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACxB,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAG1B;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,wBAAwB,CAAA;CACzC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,SAAS,gBAAgB,EAAE,KACrC;IAAE,YAAY,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,aAAa,CAAA;CAyB1D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,SAAS,QAAQ,EAAE,KAC7B,aAYA,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,SAAS,MAAM,EAAE,KACvB,aAAa,GAAG,SAKhB,CAAA"}
@@ -1,20 +1,21 @@
1
- import Big from 'big.js';
2
- import { toWireBig } from './decimal.js';
1
+ import { addDecimalString, safeAddDecimalString, unknownToDecimalString, } from '@lifi/perps-sdk';
2
+ import { PROVIDER_KEY } from '../constants.js';
3
3
  /**
4
4
  * Sum the venue `marginSummary` totals over every perps sub-dex of an
5
5
  * account. `accountValue` is total equity, so it already carries locked
6
6
  * margin and unrealized PnL. An entry without a `marginSummary` adds nothing.
7
+ * @throws {PerpsError} `SDKError` when a venue figure is not a decimal.
7
8
  * @public
8
9
  */
9
10
  export const perpsTotals = (dexStates) => {
10
- let accountValue = new Big(0);
11
- let marginUsed = new Big(0);
11
+ let accountValue = '0';
12
+ let marginUsed = '0';
12
13
  for (const { marginSummary } of dexStates) {
13
14
  if (marginSummary === undefined) {
14
15
  continue;
15
16
  }
16
- accountValue = accountValue.plus(toWireBig(marginSummary.accountValue, 'marginSummary.accountValue'));
17
- marginUsed = marginUsed.plus(toWireBig(marginSummary.totalMarginUsed, 'marginSummary.totalMarginUsed'));
17
+ accountValue = addDecimalString(accountValue, unknownToDecimalString(marginSummary.accountValue, 'marginSummary.accountValue', PROVIDER_KEY));
18
+ marginUsed = addDecimalString(marginUsed, unknownToDecimalString(marginSummary.totalMarginUsed, 'marginSummary.totalMarginUsed', PROVIDER_KEY));
18
19
  }
19
20
  return { accountValue, marginUsed };
20
21
  };
@@ -22,5 +23,10 @@ export const perpsTotals = (dexStates) => {
22
23
  * Sum the unrealized PnL of every position, in quote-asset units.
23
24
  * @public
24
25
  */
25
- export const sumUnrealizedPnl = (positions) => positions.reduce((sum, position) => sum.plus(toWireBig(position.unrealizedPnl, 'position.unrealizedPnl')), new Big(0));
26
+ export const sumUnrealizedPnl = (positions) => positions.reduce((sum, position) => addDecimalString(sum, unknownToDecimalString(position.unrealizedPnl, 'position.unrealizedPnl', PROVIDER_KEY)), '0');
27
+ /**
28
+ * Sum every term, or `undefined` with a warning when any term is not a
29
+ * decimal string. A bad term never gives a partial sum.
30
+ */
31
+ export const safeSumDecimalStrings = (terms) => terms.reduce((sum, term) => sum === undefined ? undefined : safeAddDecimalString(sum, term), '0');
26
32
  //# sourceMappingURL=venueTotals.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"venueTotals.js","sourceRoot":"","sources":["../../../src/utils/venueTotals.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAW9C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAsC,EACsB,EAAE;IAC9D,IAAI,YAAY,GAAG,GAAG,CAAA;IACtB,IAAI,UAAU,GAAG,GAAG,CAAA;IACpB,KAAK,MAAM,EAAE,aAAa,EAAE,IAAI,SAAS,EAAE,CAAC;QAC1C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,SAAQ;QACV,CAAC;QACD,YAAY,GAAG,gBAAgB,CAC7B,YAAY,EACZ,sBAAsB,CACpB,aAAa,CAAC,YAAY,EAC1B,4BAA4B,EAC5B,YAAY,CACb,CACF,CAAA;QACD,UAAU,GAAG,gBAAgB,CAC3B,UAAU,EACV,sBAAsB,CACpB,aAAa,CAAC,eAAe,EAC7B,+BAA+B,EAC/B,YAAY,CACb,CACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAA;AACrC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAA8B,EACf,EAAE,CACjB,SAAS,CAAC,MAAM,CACd,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAChB,gBAAgB,CACd,GAAG,EACH,sBAAsB,CACpB,QAAQ,CAAC,aAAa,EACtB,wBAAwB,EACxB,YAAY,CACb,CACF,EACH,GAAG,CACJ,CAAA;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAwB,EACG,EAAE,CAC7B,KAAK,CAAC,MAAM,CACV,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACZ,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,EACjE,GAAG,CACJ,CAAA"}
@@ -1,16 +1,18 @@
1
1
  import { type ProviderWithdrawableBalance } from '@lifi/perps-sdk';
2
2
  import type { HlAbstractionMode, HlClearinghouseState, HlSpotClearinghouseState } from '../types/index.js';
3
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,
4
+ * Split a Hyperliquid account's venue figures into the categories a
5
+ * withdrawal draws on. A unified or portfolio-margin account holds its collateral in spot,
6
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
7
+ * category with nothing left to draw carries no row, and the caller applies the
8
8
  * per-asset venue minimum.
9
9
  *
10
- * @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
10
+ * @param quoteAssetId - `Asset.id` the perps-category row is keyed by.
11
11
  * @param withdrawalFee - Flat venue fee in quote-asset units, set on every
12
12
  * quote-asset row. Hyperliquid deducts it from the requested amount. Absent
13
13
  * leaves every row without a fee.
14
+ * @throws {PerpsError} `SDKError` when the fee or a venue figure is not a
15
+ * decimal.
14
16
  * @public
15
17
  */
16
18
  export declare const hyperliquidWithdrawableBalances: (abstraction: HlAbstractionMode | null, state: HlClearinghouseState, spotState: HlSpotClearinghouseState, quoteAssetId: string, withdrawalFee?: string) => ProviderWithdrawableBalance[];
@@ -1 +1 @@
1
- {"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAK1B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,EACpB,gBAAgB,MAAM,KACrB,2BAA2B,EA8C7B,CAAA"}
1
+ {"version":3,"file":"withdrawableBalances.d.ts","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,2BAA2B,EAGjC,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAI1B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,+BAA+B,GAC1C,aAAa,iBAAiB,GAAG,IAAI,EACrC,OAAO,oBAAoB,EAC3B,WAAW,wBAAwB,EACnC,cAAc,MAAM,EACpB,gBAAgB,MAAM,KACrB,2BAA2B,EA2D7B,CAAA"}
@@ -1,25 +1,27 @@
1
- import { calculateWithdrawMax, } from '@lifi/perps-sdk';
1
+ import { calculateWithdrawMax, isDecimalStringGreaterThan, subtractDecimalString, unknownToDecimalString, } from '@lifi/perps-sdk';
2
+ import { PROVIDER_KEY, SPOT_MARKET_ID } from '../constants.js';
2
3
  import { isUnifiedAbstraction } from './abstractionMode.js';
3
4
  import { assetIsOutcome } from './assetId.js';
4
- import { toWireBig } from './decimal.js';
5
5
  /**
6
- * Split a Hyperliquid account's venue figures into the routes a withdrawal
7
- * draws on. A unified or portfolio-margin account holds its collateral in spot,
6
+ * Split a Hyperliquid account's venue figures into the categories a
7
+ * withdrawal draws on. A unified or portfolio-margin account holds its collateral in spot,
8
8
  * so each spot token adds the part of `total` that no order or margin holds. A
9
- * route with nothing left to draw carries no row, and the caller applies the
9
+ * category with nothing left to draw carries no row, and the caller applies the
10
10
  * per-asset venue minimum.
11
11
  *
12
- * @param quoteAssetId - `Asset.id` the perps-route row is keyed by.
12
+ * @param quoteAssetId - `Asset.id` the perps-category row is keyed by.
13
13
  * @param withdrawalFee - Flat venue fee in quote-asset units, set on every
14
14
  * quote-asset row. Hyperliquid deducts it from the requested amount. Absent
15
15
  * leaves every row without a fee.
16
+ * @throws {PerpsError} `SDKError` when the fee or a venue figure is not a
17
+ * decimal.
16
18
  * @public
17
19
  */
18
20
  export const hyperliquidWithdrawableBalances = (abstraction, state, spotState, quoteAssetId, withdrawalFee) => {
19
21
  const rows = [];
20
22
  const fee = withdrawalFee === undefined
21
23
  ? undefined
22
- : toWireBig(withdrawalFee, 'providers.withdrawalFeeUsd').toFixed();
24
+ : unknownToDecimalString(withdrawalFee, 'providers.withdrawalFeeUsd', PROVIDER_KEY);
23
25
  const feeFor = (assetId) => fee === undefined || assetId !== quoteAssetId
24
26
  ? {}
25
27
  : { withdrawalFee: fee, isFeeDeducted: true };
@@ -28,25 +30,25 @@ export const hyperliquidWithdrawableBalances = (abstraction, state, spotState, q
28
30
  if (assetIsOutcome(balance.coin)) {
29
31
  continue;
30
32
  }
31
- const spot = toWireBig(balance.total, 'spotBalance.total').minus(toWireBig(balance.hold, 'spotBalance.hold'));
32
- if (spot.gt(0)) {
33
+ const spot = subtractDecimalString(unknownToDecimalString(balance.total, 'spotBalance.total', PROVIDER_KEY), unknownToDecimalString(balance.hold, 'spotBalance.hold', PROVIDER_KEY));
34
+ if (isDecimalStringGreaterThan(spot, '0')) {
33
35
  const assetId = String(balance.token);
34
36
  const row = {
35
37
  assetId,
36
- route: 'spot',
37
- available: spot.toFixed(),
38
+ categoryId: SPOT_MARKET_ID,
39
+ available: spot,
38
40
  ...feeFor(assetId),
39
41
  };
40
42
  rows.push({ ...row, max: calculateWithdrawMax(row) });
41
43
  }
42
44
  }
43
45
  }
44
- const perps = toWireBig(state.withdrawable, 'clearinghouseState.withdrawable');
45
- if (perps.gt(0)) {
46
+ const perps = unknownToDecimalString(state.withdrawable, 'clearinghouseState.withdrawable', PROVIDER_KEY);
47
+ if (isDecimalStringGreaterThan(perps, '0')) {
46
48
  const row = {
47
49
  assetId: quoteAssetId,
48
- route: 'perps',
49
- available: perps.toFixed(),
50
+ categoryId: PROVIDER_KEY,
51
+ available: perps,
50
52
  ...feeFor(quoteAssetId),
51
53
  };
52
54
  rows.push({ ...row, max: calculateWithdrawMax(row) });
@@ -1 +1 @@
1
- {"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,WAAqC,EACrC,KAA2B,EAC3B,SAAmC,EACnC,YAAoB,EACpB,aAAsB,EACS,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAC9C,MAAM,GAAG,GACP,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAA;IACtE,MAAM,MAAM,GAAG,CACb,OAAe,EACuD,EAAE,CACxE,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY;QAC3C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;IAEjD,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,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACrC,MAAM,GAAG,GAAG;oBACV,OAAO;oBACP,KAAK,EAAE,MAAe;oBACtB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;oBACzB,GAAG,MAAM,CAAC,OAAO,CAAC;iBACnB,CAAA;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvD,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,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,OAAgB;YACvB,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE;YAC1B,GAAG,MAAM,CAAC,YAAY,CAAC;SACxB,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"withdrawableBalances.js","sourceRoot":"","sources":["../../../src/utils/withdrawableBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAE1B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAM9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,WAAqC,EACrC,KAA2B,EAC3B,SAAmC,EACnC,YAAoB,EACpB,aAAsB,EACS,EAAE;IACjC,MAAM,IAAI,GAAkC,EAAE,CAAA;IAC9C,MAAM,GAAG,GACP,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,sBAAsB,CACpB,aAAa,EACb,4BAA4B,EAC5B,YAAY,CACb,CAAA;IACP,MAAM,MAAM,GAAG,CACb,OAAe,EACuD,EAAE,CACxE,GAAG,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY;QAC3C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;IAEjD,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,qBAAqB,CAChC,sBAAsB,CACpB,OAAO,CAAC,KAAK,EACb,mBAAmB,EACnB,YAAY,CACb,EACD,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY,CAAC,CACvE,CAAA;YACD,IAAI,0BAA0B,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACrC,MAAM,GAAG,GAAG;oBACV,OAAO;oBACP,UAAU,EAAE,cAAc;oBAC1B,SAAS,EAAE,IAAI;oBACf,GAAG,MAAM,CAAC,OAAO,CAAC;iBACnB,CAAA;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAClC,KAAK,CAAC,YAAY,EAClB,iCAAiC,EACjC,YAAY,CACb,CAAA;IACD,IAAI,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,YAAY;YACxB,SAAS,EAAE,KAAK;YAChB,GAAG,MAAM,CAAC,YAAY,CAAC;SACxB,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -114,6 +114,8 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
114
114
  private handleActiveAssetCtx;
115
115
  private handleActiveSpotAssetCtx;
116
116
  /** Latest mid per `Market.id` across asset-context and fast feeds. */
117
+ /** Latest mid per `Market.id` across asset-context and fast feeds; a mid
118
+ * that is not a decimal string is left out. */
117
119
  private mergedMids;
118
120
  private orderbookReferencePrice;
119
121
  private handleL2Book;
@@ -1 +1 @@
1
- {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}