@lifi/perps-sdk-provider-lighter 6.0.0 → 8.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 (116) hide show
  1. package/dist/cjs/LighterProvider.d.ts.map +1 -1
  2. package/dist/cjs/LighterProvider.js +77 -37
  3. package/dist/cjs/LighterProvider.js.map +1 -1
  4. package/dist/cjs/accountSummary.d.ts.map +1 -1
  5. package/dist/cjs/accountSummary.js +33 -2
  6. package/dist/cjs/accountSummary.js.map +1 -1
  7. package/dist/cjs/depositFlow.d.ts +4 -0
  8. package/dist/cjs/depositFlow.d.ts.map +1 -0
  9. package/dist/cjs/depositFlow.js +32 -0
  10. package/dist/cjs/depositFlow.js.map +1 -0
  11. package/dist/cjs/index.d.ts +1 -0
  12. package/dist/cjs/index.d.ts.map +1 -1
  13. package/dist/cjs/index.js +3 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/types/account.d.ts +1 -0
  16. package/dist/cjs/types/account.d.ts.map +1 -1
  17. package/dist/cjs/types/ws.d.ts +5 -0
  18. package/dist/cjs/types/ws.d.ts.map +1 -1
  19. package/dist/cjs/utils/decimal.d.ts +5 -0
  20. package/dist/cjs/utils/decimal.d.ts.map +1 -0
  21. package/dist/cjs/utils/decimal.js +38 -0
  22. package/dist/cjs/utils/decimal.js.map +1 -0
  23. package/dist/cjs/utils/index.d.ts +3 -1
  24. package/dist/cjs/utils/index.d.ts.map +1 -1
  25. package/dist/cjs/utils/index.js +7 -1
  26. package/dist/cjs/utils/index.js.map +1 -1
  27. package/dist/cjs/utils/mapOpenPositions.d.ts +2 -2
  28. package/dist/cjs/utils/mapOpenPositions.d.ts.map +1 -1
  29. package/dist/cjs/utils/mapOpenPositions.js.map +1 -1
  30. package/dist/cjs/utils/mapPosition.d.ts +3 -2
  31. package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
  32. package/dist/cjs/utils/mapPosition.js +30 -9
  33. package/dist/cjs/utils/mapPosition.js.map +1 -1
  34. package/dist/cjs/utils/transferMargin.d.ts +3 -0
  35. package/dist/cjs/utils/transferMargin.d.ts.map +1 -0
  36. package/dist/cjs/utils/transferMargin.js +17 -0
  37. package/dist/cjs/utils/transferMargin.js.map +1 -0
  38. package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -1
  39. package/dist/cjs/websocket/LighterWsProvider.js +20 -9
  40. package/dist/cjs/websocket/LighterWsProvider.js.map +1 -1
  41. package/dist/esm/LighterProvider.d.ts.map +1 -1
  42. package/dist/esm/LighterProvider.js +67 -22
  43. package/dist/esm/LighterProvider.js.map +1 -1
  44. package/dist/esm/accountSummary.d.ts +5 -4
  45. package/dist/esm/accountSummary.d.ts.map +1 -1
  46. package/dist/esm/accountSummary.js +35 -6
  47. package/dist/esm/accountSummary.js.map +1 -1
  48. package/dist/esm/depositFlow.d.ts +12 -0
  49. package/dist/esm/depositFlow.d.ts.map +1 -0
  50. package/dist/esm/depositFlow.js +37 -0
  51. package/dist/esm/depositFlow.js.map +1 -0
  52. package/dist/esm/index.d.ts +1 -0
  53. package/dist/esm/index.d.ts.map +1 -1
  54. package/dist/esm/index.js +1 -0
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/types/account.d.ts +3 -0
  57. package/dist/esm/types/account.d.ts.map +1 -1
  58. package/dist/esm/types/ws.d.ts +9 -1
  59. package/dist/esm/types/ws.d.ts.map +1 -1
  60. package/dist/esm/utils/decimal.d.ts +15 -0
  61. package/dist/esm/utils/decimal.d.ts.map +1 -0
  62. package/dist/esm/utils/decimal.js +39 -0
  63. package/dist/esm/utils/decimal.js.map +1 -0
  64. package/dist/esm/utils/index.d.ts +3 -1
  65. package/dist/esm/utils/index.d.ts.map +1 -1
  66. package/dist/esm/utils/index.js +3 -1
  67. package/dist/esm/utils/index.js.map +1 -1
  68. package/dist/esm/utils/mapOpenPositions.d.ts +2 -2
  69. package/dist/esm/utils/mapOpenPositions.d.ts.map +1 -1
  70. package/dist/esm/utils/mapOpenPositions.js.map +1 -1
  71. package/dist/esm/utils/mapPosition.d.ts +10 -2
  72. package/dist/esm/utils/mapPosition.d.ts.map +1 -1
  73. package/dist/esm/utils/mapPosition.js +32 -11
  74. package/dist/esm/utils/mapPosition.js.map +1 -1
  75. package/dist/esm/utils/transferMargin.d.ts +11 -0
  76. package/dist/esm/utils/transferMargin.d.ts.map +1 -0
  77. package/dist/esm/utils/transferMargin.js +22 -0
  78. package/dist/esm/utils/transferMargin.js.map +1 -0
  79. package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -1
  80. package/dist/esm/websocket/LighterWsProvider.js +24 -13
  81. package/dist/esm/websocket/LighterWsProvider.js.map +1 -1
  82. package/dist/types/LighterProvider.d.ts.map +1 -1
  83. package/dist/types/accountSummary.d.ts +5 -4
  84. package/dist/types/accountSummary.d.ts.map +1 -1
  85. package/dist/types/depositFlow.d.ts +12 -0
  86. package/dist/types/depositFlow.d.ts.map +1 -0
  87. package/dist/types/index.d.ts +1 -0
  88. package/dist/types/index.d.ts.map +1 -1
  89. package/dist/types/types/account.d.ts +3 -0
  90. package/dist/types/types/account.d.ts.map +1 -1
  91. package/dist/types/types/ws.d.ts +9 -1
  92. package/dist/types/types/ws.d.ts.map +1 -1
  93. package/dist/types/utils/decimal.d.ts +15 -0
  94. package/dist/types/utils/decimal.d.ts.map +1 -0
  95. package/dist/types/utils/index.d.ts +3 -1
  96. package/dist/types/utils/index.d.ts.map +1 -1
  97. package/dist/types/utils/mapOpenPositions.d.ts +2 -2
  98. package/dist/types/utils/mapOpenPositions.d.ts.map +1 -1
  99. package/dist/types/utils/mapPosition.d.ts +10 -2
  100. package/dist/types/utils/mapPosition.d.ts.map +1 -1
  101. package/dist/types/utils/transferMargin.d.ts +11 -0
  102. package/dist/types/utils/transferMargin.d.ts.map +1 -0
  103. package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -1
  104. package/package.json +3 -3
  105. package/src/LighterProvider.ts +107 -21
  106. package/src/accountSummary.ts +38 -6
  107. package/src/depositFlow.ts +59 -0
  108. package/src/index.ts +1 -0
  109. package/src/types/account.ts +3 -0
  110. package/src/types/ws.ts +9 -1
  111. package/src/utils/decimal.ts +52 -0
  112. package/src/utils/index.ts +3 -1
  113. package/src/utils/mapOpenPositions.ts +2 -2
  114. package/src/utils/mapPosition.ts +40 -14
  115. package/src/utils/transferMargin.ts +35 -0
  116. package/src/websocket/LighterWsProvider.ts +41 -11
@@ -9,6 +9,7 @@ import {
9
9
  ReconnectingWebSocket,
10
10
  resolveRetryPolicy,
11
11
  resolveSubscribeQuote,
12
+ toPerpsMarketDisplay,
12
13
  WsProviderBase,
13
14
  type WsProviderFactory,
14
15
  wsLog,
@@ -51,6 +52,7 @@ import {
51
52
  mapFill,
52
53
  mapMarketContext,
53
54
  mapPosition,
55
+ toRequiredBig,
54
56
  } from '../utils/index.js'
55
57
 
56
58
  // Public channels: `marketsContext` (market_stats/all + spot_market_stats/all),
@@ -588,23 +590,51 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
588
590
  return
589
591
  }
590
592
  const stats = msg.stats
591
- const portfolio = Number.parseFloat(stats?.portfolio_value ?? '')
592
- const available = Number.parseFloat(stats?.available_balance ?? '')
593
- if (!Number.isFinite(portfolio) || !Number.isFinite(available)) {
593
+ if (stats === undefined) {
594
594
  return
595
595
  }
596
- // Identities of the REST 'net' semantics: `available_balance` nets locked
597
- // margin out with PnL marked in, and `collateral` is gross, PnL-exclusive.
598
- const collateral = Number.parseFloat(stats?.collateral ?? '')
596
+
597
+ const portfolio = toRequiredBig(
598
+ stats.portfolio_value,
599
+ 'stats.portfolio_value'
600
+ )
601
+ const collateral = toRequiredBig(stats.collateral, 'stats.collateral')
602
+
603
+ let available: Big
604
+ let marginUsed: Big
605
+ if (stats.cross_stats === undefined) {
606
+ // Compatibility with legacy gateways that omitted the entire
607
+ // cross_stats object.
608
+ available = toRequiredBig(
609
+ stats.available_balance,
610
+ 'stats.available_balance'
611
+ )
612
+ marginUsed = portfolio.minus(available)
613
+ } else {
614
+ const crossCollateral = toRequiredBig(
615
+ stats.cross_stats.collateral,
616
+ 'stats.cross_stats.collateral'
617
+ )
618
+ const crossPortfolio = toRequiredBig(
619
+ stats.cross_stats.portfolio_value,
620
+ 'stats.cross_stats.portfolio_value'
621
+ )
622
+ available = toRequiredBig(
623
+ stats.cross_stats.available_balance,
624
+ 'stats.cross_stats.available_balance'
625
+ )
626
+ const isolatedMargin = collateral.minus(crossCollateral)
627
+ const crossMargin = crossPortfolio.minus(available)
628
+ marginUsed = isolatedMargin.plus(crossMargin)
629
+ }
630
+
599
631
  this.emit(`accountSummary:${address}`, {
600
632
  channel: 'accountSummary',
601
633
  data: {
602
634
  portfolioValue: portfolio.toString(),
603
635
  availableMargin: available.toString(),
604
- marginUsed: Math.max(portfolio - available, 0).toString(),
605
- unrealizedPnl: Number.isFinite(collateral)
606
- ? (portfolio - collateral).toString()
607
- : '0',
636
+ marginUsed: marginUsed.toString(),
637
+ unrealizedPnl: portfolio.minus(collateral).toString(),
608
638
  },
609
639
  })
610
640
  }
@@ -649,7 +679,7 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
649
679
  } else {
650
680
  const market = this.registry?.get(String(p.market_id))
651
681
  if (market) {
652
- state.set(p.market_id, mapPosition(p, market))
682
+ state.set(p.market_id, mapPosition(p, toPerpsMarketDisplay(market)))
653
683
  }
654
684
  }
655
685
  }