@lifi/perps-sdk 5.0.0 → 6.1.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 (281) hide show
  1. package/dist/cjs/client/PerpsClient.d.ts +7 -1
  2. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  3. package/dist/cjs/client/PerpsClient.js +10 -0
  4. package/dist/cjs/client/PerpsClient.js.map +1 -1
  5. package/dist/cjs/errors/PerpsError.d.ts.map +1 -1
  6. package/dist/cjs/errors/PerpsError.js.map +1 -1
  7. package/dist/cjs/index.d.ts +5 -3
  8. package/dist/cjs/index.d.ts.map +1 -1
  9. package/dist/cjs/index.js +6 -4
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/registry/assetRegistry.d.ts.map +1 -1
  12. package/dist/cjs/registry/assetRegistry.js.map +1 -1
  13. package/dist/cjs/registry/marketRegistry.d.ts +2 -1
  14. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -1
  15. package/dist/cjs/registry/marketRegistry.js +24 -1
  16. package/dist/cjs/registry/marketRegistry.js.map +1 -1
  17. package/dist/cjs/services/createAction.d.ts.map +1 -1
  18. package/dist/cjs/services/createAction.js.map +1 -1
  19. package/dist/cjs/services/executeAction.d.ts.map +1 -1
  20. package/dist/cjs/services/executeAction.js.map +1 -1
  21. package/dist/cjs/services/getActivity.d.ts.map +1 -1
  22. package/dist/cjs/services/getActivity.js.map +1 -1
  23. package/dist/cjs/services/getFills.d.ts.map +1 -1
  24. package/dist/cjs/services/getFills.js.map +1 -1
  25. package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
  26. package/dist/cjs/services/getOhlcv.js.map +1 -1
  27. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  28. package/dist/cjs/services/getOrder.js.map +1 -1
  29. package/dist/cjs/services/getOrders.d.ts.map +1 -1
  30. package/dist/cjs/services/getOrders.js.map +1 -1
  31. package/dist/cjs/services/getPositions.d.ts.map +1 -1
  32. package/dist/cjs/services/getPositions.js.map +1 -1
  33. package/dist/cjs/services/getQuote.d.ts.map +1 -1
  34. package/dist/cjs/services/getQuote.js.map +1 -1
  35. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -1
  36. package/dist/cjs/storage/parseStoredRecord.js.map +1 -1
  37. package/dist/cjs/storage/types.d.ts.map +1 -1
  38. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -1
  39. package/dist/cjs/transport/fetchWithRetry.js.map +1 -1
  40. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -1
  41. package/dist/cjs/transport/retryPolicy.js.map +1 -1
  42. package/dist/cjs/types/api.d.ts +2 -1
  43. package/dist/cjs/types/api.d.ts.map +1 -1
  44. package/dist/cjs/types/config.d.ts.map +1 -1
  45. package/dist/cjs/types/deposit.d.ts.map +1 -1
  46. package/dist/cjs/types/provider.d.ts +7 -1
  47. package/dist/cjs/types/provider.d.ts.map +1 -1
  48. package/dist/cjs/utils/calculations.d.ts +0 -5
  49. package/dist/cjs/utils/calculations.d.ts.map +1 -1
  50. package/dist/cjs/utils/calculations.js +0 -9
  51. package/dist/cjs/utils/calculations.js.map +1 -1
  52. package/dist/cjs/utils/format.d.ts.map +1 -1
  53. package/dist/cjs/utils/format.js.map +1 -1
  54. package/dist/cjs/utils/orderClassification.d.ts.map +1 -1
  55. package/dist/cjs/utils/orderClassification.js.map +1 -1
  56. package/dist/cjs/utils/transferMargin.d.ts +7 -0
  57. package/dist/cjs/utils/transferMargin.d.ts.map +1 -0
  58. package/dist/cjs/utils/transferMargin.js +50 -0
  59. package/dist/cjs/utils/transferMargin.js.map +1 -0
  60. package/dist/cjs/version.d.ts +1 -1
  61. package/dist/cjs/version.js +1 -1
  62. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
  63. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
  64. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  65. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -1
  66. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -1
  67. package/dist/cjs/websocket/WsProviderBase.js.map +1 -1
  68. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -1
  69. package/dist/cjs/websocket/cachePromise.js.map +1 -1
  70. package/dist/cjs/websocket/types.d.ts.map +1 -1
  71. package/dist/esm/client/PerpsClient.d.ts +24 -1
  72. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  73. package/dist/esm/client/PerpsClient.js +27 -0
  74. package/dist/esm/client/PerpsClient.js.map +1 -1
  75. package/dist/esm/errors/PerpsError.d.ts +7 -0
  76. package/dist/esm/errors/PerpsError.d.ts.map +1 -1
  77. package/dist/esm/errors/PerpsError.js +7 -0
  78. package/dist/esm/errors/PerpsError.js.map +1 -1
  79. package/dist/esm/index.d.ts +5 -3
  80. package/dist/esm/index.d.ts.map +1 -1
  81. package/dist/esm/index.js +3 -2
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/registry/assetRegistry.d.ts +5 -1
  84. package/dist/esm/registry/assetRegistry.d.ts.map +1 -1
  85. package/dist/esm/registry/assetRegistry.js +5 -1
  86. package/dist/esm/registry/assetRegistry.js.map +1 -1
  87. package/dist/esm/registry/marketRegistry.d.ts +28 -6
  88. package/dist/esm/registry/marketRegistry.d.ts.map +1 -1
  89. package/dist/esm/registry/marketRegistry.js +49 -6
  90. package/dist/esm/registry/marketRegistry.js.map +1 -1
  91. package/dist/esm/services/createAction.d.ts +2 -0
  92. package/dist/esm/services/createAction.d.ts.map +1 -1
  93. package/dist/esm/services/createAction.js.map +1 -1
  94. package/dist/esm/services/executeAction.d.ts +2 -0
  95. package/dist/esm/services/executeAction.d.ts.map +1 -1
  96. package/dist/esm/services/executeAction.js.map +1 -1
  97. package/dist/esm/services/getActivity.d.ts +4 -2
  98. package/dist/esm/services/getActivity.d.ts.map +1 -1
  99. package/dist/esm/services/getActivity.js.map +1 -1
  100. package/dist/esm/services/getFills.d.ts +4 -2
  101. package/dist/esm/services/getFills.d.ts.map +1 -1
  102. package/dist/esm/services/getFills.js.map +1 -1
  103. package/dist/esm/services/getMarkets.d.ts +1 -1
  104. package/dist/esm/services/getMarkets.d.ts.map +1 -1
  105. package/dist/esm/services/getMarketsContext.d.ts +1 -1
  106. package/dist/esm/services/getMarketsContext.d.ts.map +1 -1
  107. package/dist/esm/services/getOhlcv.d.ts +4 -3
  108. package/dist/esm/services/getOhlcv.d.ts.map +1 -1
  109. package/dist/esm/services/getOhlcv.js.map +1 -1
  110. package/dist/esm/services/getOrder.d.ts +1 -0
  111. package/dist/esm/services/getOrder.d.ts.map +1 -1
  112. package/dist/esm/services/getOrder.js.map +1 -1
  113. package/dist/esm/services/getOrderbook.d.ts +2 -2
  114. package/dist/esm/services/getOrderbook.d.ts.map +1 -1
  115. package/dist/esm/services/getOrders.d.ts +3 -1
  116. package/dist/esm/services/getOrders.d.ts.map +1 -1
  117. package/dist/esm/services/getOrders.js.map +1 -1
  118. package/dist/esm/services/getPositions.d.ts +3 -1
  119. package/dist/esm/services/getPositions.d.ts.map +1 -1
  120. package/dist/esm/services/getPositions.js.map +1 -1
  121. package/dist/esm/services/getQuote.d.ts +3 -1
  122. package/dist/esm/services/getQuote.d.ts.map +1 -1
  123. package/dist/esm/services/getQuote.js.map +1 -1
  124. package/dist/esm/storage/parseStoredRecord.d.ts +4 -0
  125. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -1
  126. package/dist/esm/storage/parseStoredRecord.js +4 -0
  127. package/dist/esm/storage/parseStoredRecord.js.map +1 -1
  128. package/dist/esm/storage/types.d.ts +10 -6
  129. package/dist/esm/storage/types.d.ts.map +1 -1
  130. package/dist/esm/transport/fetchWithRetry.d.ts +3 -0
  131. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -1
  132. package/dist/esm/transport/fetchWithRetry.js.map +1 -1
  133. package/dist/esm/transport/retryPolicy.d.ts +20 -0
  134. package/dist/esm/transport/retryPolicy.d.ts.map +1 -1
  135. package/dist/esm/transport/retryPolicy.js.map +1 -1
  136. package/dist/esm/types/api.d.ts +31 -10
  137. package/dist/esm/types/api.d.ts.map +1 -1
  138. package/dist/esm/types/config.d.ts +10 -0
  139. package/dist/esm/types/config.d.ts.map +1 -1
  140. package/dist/esm/types/deposit.d.ts +9 -3
  141. package/dist/esm/types/deposit.d.ts.map +1 -1
  142. package/dist/esm/types/provider.d.ts +63 -18
  143. package/dist/esm/types/provider.d.ts.map +1 -1
  144. package/dist/esm/utils/calculations.d.ts +2 -20
  145. package/dist/esm/utils/calculations.d.ts.map +1 -1
  146. package/dist/esm/utils/calculations.js +0 -23
  147. package/dist/esm/utils/calculations.js.map +1 -1
  148. package/dist/esm/utils/format.d.ts +5 -1
  149. package/dist/esm/utils/format.d.ts.map +1 -1
  150. package/dist/esm/utils/format.js.map +1 -1
  151. package/dist/esm/utils/orderClassification.d.ts +5 -0
  152. package/dist/esm/utils/orderClassification.d.ts.map +1 -1
  153. package/dist/esm/utils/orderClassification.js +5 -0
  154. package/dist/esm/utils/orderClassification.js.map +1 -1
  155. package/dist/esm/utils/transferMargin.d.ts +24 -0
  156. package/dist/esm/utils/transferMargin.d.ts.map +1 -0
  157. package/dist/esm/utils/transferMargin.js +56 -0
  158. package/dist/esm/utils/transferMargin.js.map +1 -0
  159. package/dist/esm/version.d.ts +1 -1
  160. package/dist/esm/version.js +1 -1
  161. package/dist/esm/websocket/PerpsWsClient.d.ts +0 -1
  162. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
  163. package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
  164. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +5 -3
  165. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  166. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -1
  167. package/dist/esm/websocket/WsProviderBase.d.ts +17 -0
  168. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -1
  169. package/dist/esm/websocket/WsProviderBase.js +17 -0
  170. package/dist/esm/websocket/WsProviderBase.js.map +1 -1
  171. package/dist/esm/websocket/cachePromise.d.ts +2 -0
  172. package/dist/esm/websocket/cachePromise.d.ts.map +1 -1
  173. package/dist/esm/websocket/cachePromise.js +2 -0
  174. package/dist/esm/websocket/cachePromise.js.map +1 -1
  175. package/dist/esm/websocket/types.d.ts +5 -0
  176. package/dist/esm/websocket/types.d.ts.map +1 -1
  177. package/dist/types/client/PerpsClient.d.ts +24 -1
  178. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  179. package/dist/types/errors/PerpsError.d.ts +7 -0
  180. package/dist/types/errors/PerpsError.d.ts.map +1 -1
  181. package/dist/types/index.d.ts +5 -3
  182. package/dist/types/index.d.ts.map +1 -1
  183. package/dist/types/registry/assetRegistry.d.ts +5 -1
  184. package/dist/types/registry/assetRegistry.d.ts.map +1 -1
  185. package/dist/types/registry/marketRegistry.d.ts +28 -6
  186. package/dist/types/registry/marketRegistry.d.ts.map +1 -1
  187. package/dist/types/services/createAction.d.ts +2 -0
  188. package/dist/types/services/createAction.d.ts.map +1 -1
  189. package/dist/types/services/executeAction.d.ts +2 -0
  190. package/dist/types/services/executeAction.d.ts.map +1 -1
  191. package/dist/types/services/getActivity.d.ts +4 -2
  192. package/dist/types/services/getActivity.d.ts.map +1 -1
  193. package/dist/types/services/getFills.d.ts +4 -2
  194. package/dist/types/services/getFills.d.ts.map +1 -1
  195. package/dist/types/services/getMarkets.d.ts +1 -1
  196. package/dist/types/services/getMarkets.d.ts.map +1 -1
  197. package/dist/types/services/getMarketsContext.d.ts +1 -1
  198. package/dist/types/services/getMarketsContext.d.ts.map +1 -1
  199. package/dist/types/services/getOhlcv.d.ts +4 -3
  200. package/dist/types/services/getOhlcv.d.ts.map +1 -1
  201. package/dist/types/services/getOrder.d.ts +1 -0
  202. package/dist/types/services/getOrder.d.ts.map +1 -1
  203. package/dist/types/services/getOrderbook.d.ts +2 -2
  204. package/dist/types/services/getOrderbook.d.ts.map +1 -1
  205. package/dist/types/services/getOrders.d.ts +3 -1
  206. package/dist/types/services/getOrders.d.ts.map +1 -1
  207. package/dist/types/services/getPositions.d.ts +3 -1
  208. package/dist/types/services/getPositions.d.ts.map +1 -1
  209. package/dist/types/services/getQuote.d.ts +3 -1
  210. package/dist/types/services/getQuote.d.ts.map +1 -1
  211. package/dist/types/storage/parseStoredRecord.d.ts +4 -0
  212. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -1
  213. package/dist/types/storage/types.d.ts +10 -6
  214. package/dist/types/storage/types.d.ts.map +1 -1
  215. package/dist/types/transport/fetchWithRetry.d.ts +3 -0
  216. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -1
  217. package/dist/types/transport/retryPolicy.d.ts +20 -0
  218. package/dist/types/transport/retryPolicy.d.ts.map +1 -1
  219. package/dist/types/types/api.d.ts +31 -10
  220. package/dist/types/types/api.d.ts.map +1 -1
  221. package/dist/types/types/config.d.ts +10 -0
  222. package/dist/types/types/config.d.ts.map +1 -1
  223. package/dist/types/types/deposit.d.ts +9 -3
  224. package/dist/types/types/deposit.d.ts.map +1 -1
  225. package/dist/types/types/provider.d.ts +63 -18
  226. package/dist/types/types/provider.d.ts.map +1 -1
  227. package/dist/types/utils/calculations.d.ts +2 -20
  228. package/dist/types/utils/calculations.d.ts.map +1 -1
  229. package/dist/types/utils/format.d.ts +5 -1
  230. package/dist/types/utils/format.d.ts.map +1 -1
  231. package/dist/types/utils/orderClassification.d.ts +5 -0
  232. package/dist/types/utils/orderClassification.d.ts.map +1 -1
  233. package/dist/types/utils/transferMargin.d.ts +24 -0
  234. package/dist/types/utils/transferMargin.d.ts.map +1 -0
  235. package/dist/types/version.d.ts +1 -1
  236. package/dist/types/websocket/PerpsWsClient.d.ts +0 -1
  237. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
  238. package/dist/types/websocket/ReconnectingWebSocket.d.ts +5 -3
  239. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  240. package/dist/types/websocket/WsProviderBase.d.ts +17 -0
  241. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -1
  242. package/dist/types/websocket/cachePromise.d.ts +2 -0
  243. package/dist/types/websocket/cachePromise.d.ts.map +1 -1
  244. package/dist/types/websocket/types.d.ts +5 -0
  245. package/dist/types/websocket/types.d.ts.map +1 -1
  246. package/package.json +2 -2
  247. package/src/client/PerpsClient.ts +39 -0
  248. package/src/errors/PerpsError.ts +7 -0
  249. package/src/index.ts +4 -1
  250. package/src/registry/assetRegistry.ts +5 -1
  251. package/src/registry/marketRegistry.ts +64 -7
  252. package/src/services/createAction.ts +2 -0
  253. package/src/services/executeAction.ts +2 -0
  254. package/src/services/getActivity.ts +4 -2
  255. package/src/services/getFills.ts +4 -2
  256. package/src/services/getMarkets.ts +1 -1
  257. package/src/services/getMarketsContext.ts +1 -1
  258. package/src/services/getOhlcv.ts +4 -3
  259. package/src/services/getOrder.ts +1 -0
  260. package/src/services/getOrderbook.ts +2 -2
  261. package/src/services/getOrders.ts +3 -1
  262. package/src/services/getPositions.ts +3 -1
  263. package/src/services/getQuote.ts +3 -1
  264. package/src/storage/parseStoredRecord.ts +4 -0
  265. package/src/storage/types.ts +10 -6
  266. package/src/transport/fetchWithRetry.ts +3 -0
  267. package/src/transport/retryPolicy.ts +20 -0
  268. package/src/types/api.ts +31 -9
  269. package/src/types/config.ts +10 -0
  270. package/src/types/deposit.ts +9 -3
  271. package/src/types/provider.ts +73 -17
  272. package/src/utils/calculations.ts +2 -28
  273. package/src/utils/format.ts +5 -1
  274. package/src/utils/orderClassification.ts +5 -0
  275. package/src/utils/transferMargin.ts +98 -0
  276. package/src/version.ts +1 -1
  277. package/src/websocket/PerpsWsClient.ts +0 -1
  278. package/src/websocket/ReconnectingWebSocket.ts +5 -3
  279. package/src/websocket/WsProviderBase.ts +17 -0
  280. package/src/websocket/cachePromise.ts +2 -0
  281. package/src/websocket/types.ts +5 -0
@@ -10,11 +10,14 @@ import type {
10
10
  ActivityType,
11
11
  FillsResponse,
12
12
  Market,
13
+ MarketRef,
14
+ MarketSettings,
13
15
  Order,
14
16
  OrdersResponse,
15
17
  PerpsMarket,
16
18
  PerpsSigner,
17
19
  Position,
20
+ PositionMarginConstraints,
18
21
  PositionsResponse,
19
22
  ProviderAction,
20
23
  Quote,
@@ -40,22 +43,14 @@ import type { DepositFlow } from './deposit.js'
40
43
  */
41
44
  export interface PerpsSDKClient {
42
45
  readonly config: PerpsBaseConfig
43
- /** The end-user's wallet — accepts any viem WalletClient (browser, private key, mnemonic). */
46
+ /** End-user wallet for USER-signed or on-chain EVM legs, when configured. */
44
47
  readonly userWallet?: PerpsClientSigner
45
- /** Registered providers, bound to this client, in construction order. */
48
+ /** Providers bound to this client, in registration order. */
46
49
  readonly providers: PerpsProvider[]
47
- /** Look up a registered bound {@link PerpsProvider} by its `type` key. */
50
+ /** Look up a bound provider by its wire `type` key. */
48
51
  getProvider(key: string): PerpsProvider | undefined
49
52
  }
50
53
 
51
- /**
52
- * Per-call context passed by `PerpsClient` to a provider's {@link
53
- * PerpsProvider.signActions} method. Carries the end-user's wallet (when
54
- * configured); providers that own a session credential (e.g. the Hyperliquid
55
- * agent keypair, Lighter's API key) resolve it internally.
56
- *
57
- * @public
58
- */
59
54
  /**
60
55
  * Progress for one on-chain leg of an `EVM_TX` batch (e.g. a native deposit's
61
56
  * `approve` then `deposit`). Emitted twice per leg: `submitted` once the wallet
@@ -65,19 +60,26 @@ export interface PerpsSDKClient {
65
60
  * @public
66
61
  */
67
62
  export interface SignActionProgress {
68
- /** 0-based index of this leg within the batch. */
69
63
  index: number
70
- /** Total legs in the batch. */
71
64
  total: number
72
65
  action: ActionType
73
- /** Contract function the leg invokes, e.g. `"approve"` or the deposit method. */
74
66
  functionName: string
75
67
  chainId: number
68
+ /** Whether the transaction was broadcast or its receipt confirmed. */
76
69
  status: 'submitted' | 'confirmed'
77
70
  txHash: string
78
71
  }
79
72
 
73
+ /**
74
+ * Per-call context passed by `PerpsClient` to a provider's
75
+ * {@link PerpsProviderPlugin.signActions} implementation. Carries the
76
+ * configured end-user wallet, descriptor-declared signer roles, an optional
77
+ * chain-switch helper, and an optional progress callback.
78
+ *
79
+ * @public
80
+ */
80
81
  export interface SignActionsContext {
82
+ /** End-user wallet used for USER-signed or EVM transaction legs. */
81
83
  userWallet?: PerpsClientSigner
82
84
  /**
83
85
  * The signing batch's declared signers, from the action's `ProviderAction`
@@ -139,8 +141,10 @@ export interface ActionSignerContribution {
139
141
  * @public
140
142
  */
141
143
  export interface LiquidationEstimateParams {
144
+ /** Entry price in quote currency per base unit. */
142
145
  entryPrice: number
143
146
  leverage: number
147
+ /** `true` for long, `false` for short. */
144
148
  isLong: boolean
145
149
  }
146
150
 
@@ -179,12 +183,26 @@ export interface ProviderGetDepositFlowParams {
179
183
  */
180
184
  export interface ProviderGetPositionsParams {
181
185
  address: Address
182
- /** Optional filter — opaque `Market.id` (not `displaySymbol`). */
186
+ /** Optional opaque `Market.id` filter (not a display symbol). */
183
187
  marketId?: string
188
+ /** Maximum items returned; provider defaults and caps apply. */
184
189
  limit?: number
190
+ /** Opaque pagination cursor from the previous response. */
185
191
  cursor?: string
186
192
  }
187
193
 
194
+ /**
195
+ * Read params for {@link PerpsProviderPlugin.getMarketSettings}.
196
+ *
197
+ * @public
198
+ */
199
+ export interface ProviderGetMarketSettingsParams {
200
+ address: Address
201
+ /** The market's `id` and `categoryId`; the category identifies spot
202
+ * markets, which carry no venue leverage state. */
203
+ market: MarketRef
204
+ }
205
+
188
206
  /**
189
207
  * Read params for {@link PerpsProvider.getOrders}.
190
208
  *
@@ -192,9 +210,11 @@ export interface ProviderGetPositionsParams {
192
210
  */
193
211
  export interface ProviderGetOrdersParams {
194
212
  address: Address
195
- /** Optional filter — opaque `Market.id` (not `displaySymbol`). */
213
+ /** Optional opaque `Market.id` filter (not a display symbol). */
196
214
  marketId?: string
215
+ /** Maximum items returned; provider defaults and caps apply. */
197
216
  limit?: number
217
+ /** Opaque pagination cursor from the previous response. */
198
218
  cursor?: string
199
219
  }
200
220
 
@@ -205,6 +225,7 @@ export interface ProviderGetOrdersParams {
205
225
  */
206
226
  export interface ProviderGetOrderParams {
207
227
  address: Address
228
+ /** Venue order id, opaque to the SDK. */
208
229
  id: string
209
230
  }
210
231
 
@@ -215,9 +236,13 @@ export interface ProviderGetOrderParams {
215
236
  */
216
237
  export interface ProviderGetFillsParams {
217
238
  address: Address
239
+ /** Maximum items returned; provider defaults and caps apply. */
218
240
  limit?: number
241
+ /** Opaque pagination cursor from the previous response. */
219
242
  cursor?: string
243
+ /** Include fills at or after this Unix timestamp in milliseconds. */
220
244
  startTime?: number
245
+ /** Include fills at or before this Unix timestamp in milliseconds. */
221
246
  endTime?: number
222
247
  }
223
248
 
@@ -228,10 +253,15 @@ export interface ProviderGetFillsParams {
228
253
  */
229
254
  export interface ProviderGetActivityParams {
230
255
  address: Address
256
+ /** Maximum items returned; provider defaults and caps apply. */
231
257
  limit?: number
258
+ /** Opaque pagination cursor from the previous response. */
232
259
  cursor?: string
260
+ /** Include activity at or after this Unix timestamp in milliseconds. */
233
261
  startTime?: number
262
+ /** Include activity at or before this Unix timestamp in milliseconds. */
234
263
  endTime?: number
264
+ /** Optional filter for activity types. */
235
265
  type?: ActivityType[]
236
266
  }
237
267
 
@@ -242,11 +272,13 @@ export interface ProviderGetActivityParams {
242
272
  * @public
243
273
  */
244
274
  export interface ProviderGetQuoteParams {
245
- /** Human `displaySymbol`, e.g. `"BTC"`. Resolved against the provider's own markets, scoped by `type`. */
275
+ /** Human `displaySymbol`, resolved against this provider and `type`. */
246
276
  symbol: string
277
+ /** Trade direction used to choose asks for buys or bids for sells. */
247
278
  side: QuoteSide
248
279
  /** USD notional to fill. */
249
280
  size: number
281
+ /** Product family used to disambiguate spot and perpetual markets. */
250
282
  type: TradeType
251
283
  }
252
284
 
@@ -350,6 +382,18 @@ export interface PerpsProviderPlugin {
350
382
  options?: SDKRequestOptions
351
383
  ): Promise<PositionsResponse>
352
384
 
385
+ /**
386
+ * The user's current venue-side settings for one market — the margin mode
387
+ * and leverage the next order on it will use. Optional because venues
388
+ * expose this unevenly: Hyperliquid reads it directly (`activeAssetData`),
389
+ * Lighter only reports it on an account's position row. `undefined` means
390
+ * the venue has nothing to read for this market.
391
+ */
392
+ getMarketSettings?(
393
+ params: ProviderGetMarketSettingsParams,
394
+ options?: SDKRequestOptions
395
+ ): Promise<MarketSettings | undefined>
396
+
353
397
  getOrders(
354
398
  params: ProviderGetOrdersParams,
355
399
  options?: SDKRequestOptions
@@ -436,6 +480,18 @@ export interface PerpsProviderPlugin {
436
480
  params: LiquidationEstimateParams
437
481
  ): number | undefined
438
482
 
483
+ /**
484
+ * Exact venue-owned constraints for changing `position`'s dedicated margin.
485
+ * Pure — providers normalize raw venue quantities onto the position before
486
+ * returning these inputs.
487
+ *
488
+ * @returns `undefined` when this position has no individual margin
489
+ * adjustment (for example a cross position or a cross-only venue).
490
+ */
491
+ positionMarginConstraints(
492
+ position: Position
493
+ ): PositionMarginConstraints | undefined
494
+
439
495
  /**
440
496
  * Project a typed {@link AccountConfig} against the provider's `setup`
441
497
  * + `options` descriptors into `AccountConfigSetting[]`. Used by
@@ -169,41 +169,15 @@ export function effectiveLeverage(params: {
169
169
  return positionValueUsd / marginUsd
170
170
  }
171
171
 
172
- /**
173
- * Margin that can be removed from a position while keeping its leverage at or
174
- * below the asset's maximum.
175
- *
176
- * The minimum margin to stay within `maxLeverage` is the required margin for
177
- * the position's notional (see {@link calculateRequiredMargin}); anything above
178
- * that is removable.
179
- *
180
- * @param marginUsed - Margin currently backing the position in USD
181
- * @param positionValueUsd - Position notional value in USD
182
- * @param maxLeverage - Maximum leverage allowed for the asset
183
- * @returns Removable margin in USD (never negative); falls back to the full
184
- * `marginUsed` when `maxLeverage` is zero (no constraint available)
185
- * @public
186
- */
187
- export function removableMargin(params: {
188
- marginUsed: number
189
- positionValueUsd: number
190
- maxLeverage: number
191
- }): number {
192
- const { marginUsed, positionValueUsd, maxLeverage } = params
193
- if (maxLeverage === 0) {
194
- return marginUsed
195
- }
196
- const minMargin = calculateRequiredMargin(positionValueUsd, maxLeverage)
197
- return Math.max(0, marginUsed - minMargin)
198
- }
199
-
200
172
  /**
201
173
  * Signed expected PnL for a trigger price — see {@link calculateExpectedPnl}.
202
174
  *
203
175
  * @public
204
176
  */
205
177
  export interface ExpectedPnl {
178
+ /** Signed expected profit/loss in USD. */
206
179
  amount: number
180
+ /** Signed expected return as a percentage (10 means 10%). */
207
181
  percent: number
208
182
  }
209
183
 
@@ -19,7 +19,11 @@ export interface FormatOptions {
19
19
  rounding?: RoundingMode
20
20
  }
21
21
 
22
- /** Rounding mode for {@link FormatOptions.rounding}. */
22
+ /**
23
+ * Rounding mode for {@link FormatOptions.rounding}.
24
+ *
25
+ * @public
26
+ */
23
27
  export type RoundingMode = 'halfUp' | 'floor'
24
28
 
25
29
  const DEFAULT_PLACEHOLDER = '—'
@@ -15,6 +15,11 @@ import {
15
15
  } from '@lifi/perps-types'
16
16
  import { stringToFloat } from './parse.js'
17
17
 
18
+ /**
19
+ * Re-exported fill taxonomy used by {@link classifyFillFromPosition}.
20
+ *
21
+ * @public
22
+ */
18
23
  export { FillClassification }
19
24
 
20
25
  const TP_TYPES = new Set<OrderType>([
@@ -0,0 +1,98 @@
1
+ import {
2
+ PerpsErrorCode,
3
+ type Position,
4
+ type PositionMarginConstraints,
5
+ positionSupportsMarginRemoval,
6
+ } from '@lifi/perps-types'
7
+ import Big from 'big.js'
8
+ import { PerpsError } from '../errors/PerpsError.js'
9
+
10
+ function positionAmount(value: string, field: string): Big {
11
+ try {
12
+ return new Big(value)
13
+ } catch {
14
+ throw new PerpsError(
15
+ PerpsErrorCode.ValidationError,
16
+ `Invalid decimal string on Position.${field}: '${value}'`
17
+ )
18
+ }
19
+ }
20
+
21
+ function constraintAmount(value: string, field: string): Big {
22
+ try {
23
+ return new Big(value)
24
+ } catch {
25
+ throw new PerpsError(
26
+ PerpsErrorCode.ValidationError,
27
+ `Invalid decimal string on PositionMarginConstraints.${field}: '${value}'`
28
+ )
29
+ }
30
+ }
31
+
32
+ function requirePositive(value: Big, field: string): Big {
33
+ if (value.lte(0)) {
34
+ throw new PerpsError(
35
+ PerpsErrorCode.ValidationError,
36
+ `${field} must be greater than zero.`
37
+ )
38
+ }
39
+ return value
40
+ }
41
+
42
+ /**
43
+ * Exact inputs for {@link removableIsolatedMargin}.
44
+ *
45
+ * @public
46
+ */
47
+ export interface RemovableIsolatedMarginParams {
48
+ position: Position
49
+ constraints: PositionMarginConstraints
50
+ }
51
+
52
+ /**
53
+ * Calculate margin that can be removed from an isolated position using the
54
+ * provider's exact retained-margin requirement. Position equity is allocated
55
+ * margin plus unrealized PnL.
56
+ *
57
+ * The result snaps down to the provider's accepted amount increment. Markets
58
+ * that are add-only and cross-margined positions return `'0'`.
59
+ *
60
+ * @throws {PerpsError} `ValidationError` for malformed, non-positive, or
61
+ * inconsistent risk inputs.
62
+ * @public
63
+ */
64
+ export function removableIsolatedMargin({
65
+ position,
66
+ constraints,
67
+ }: RemovableIsolatedMarginParams): string {
68
+ if (!positionSupportsMarginRemoval(position)) {
69
+ return '0'
70
+ }
71
+
72
+ const marginUsed = requirePositive(
73
+ positionAmount(position.marginUsed, 'marginUsed'),
74
+ 'Position.marginUsed'
75
+ )
76
+ const unrealizedPnl = positionAmount(position.unrealizedPnl, 'unrealizedPnl')
77
+ const minimumMargin = requirePositive(
78
+ constraintAmount(
79
+ constraints.minimumMarginRequirement,
80
+ 'minimumMarginRequirement'
81
+ ),
82
+ 'PositionMarginConstraints.minimumMarginRequirement'
83
+ )
84
+ const amountIncrement = requirePositive(
85
+ constraintAmount(constraints.amountIncrement, 'amountIncrement'),
86
+ 'PositionMarginConstraints.amountIncrement'
87
+ )
88
+
89
+ const removable = marginUsed.plus(unrealizedPnl).minus(minimumMargin)
90
+ if (removable.lte(0)) {
91
+ return '0'
92
+ }
93
+ return removable
94
+ .div(amountIncrement)
95
+ .round(0, Big.roundDown)
96
+ .times(amountIncrement)
97
+ .toFixed()
98
+ }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/perps-sdk'
2
- export const version = '5.0.0'
2
+ export const version = '6.1.0'
@@ -18,7 +18,6 @@ import type {
18
18
  * @public
19
19
  */
20
20
  export type WsProviderFactory = (params: {
21
- /** Provider key (e.g. `'lighter'`, `'hyperliquid'`). */
22
21
  provider: string
23
22
  /** WS URL discovered from `/providers`. */
24
23
  wsUrl: string
@@ -44,7 +44,9 @@ const WS_PROVIDER_KEY = 'reconnecting-websocket'
44
44
  * @public
45
45
  */
46
46
  export interface ReconnectingWebSocketOptions {
47
+ /** Maximum reconnect attempts before status becomes `disconnected`; defaults to 10. */
47
48
  maxRetries?: number
49
+ /** Keepalive interval in milliseconds; defaults to 30,000. */
48
50
  pingIntervalMs?: number
49
51
  /**
50
52
  * Keepalive frame sent every `pingIntervalMs` while the socket is open.
@@ -52,9 +54,9 @@ export interface ReconnectingWebSocketOptions {
52
54
  */
53
55
  pingPayload?: string
54
56
  /**
55
- * Stale-stream watchdog window. With `pingPayload` configured, the socket is
56
- * force-reconnected when no inbound frame arrives within this window.
57
- * Defaults to 3× `pingIntervalMs`.
57
+ * Stale-stream watchdog window in milliseconds. With `pingPayload` configured,
58
+ * the socket is force-reconnected when no inbound frame arrives within this
59
+ * window. Defaults to 3× `pingIntervalMs`.
58
60
  */
59
61
  staleWindowMs?: number
60
62
  }
@@ -76,6 +76,13 @@ export abstract class WsProviderBase<TSub = unknown> implements WsProvider {
76
76
  })
77
77
  }
78
78
 
79
+ /**
80
+ * Acquire a ref-counted subscription to a provider channel and return an
81
+ * idempotent release function. Optional status listeners are reference-counted
82
+ * alongside the channel listener.
83
+ *
84
+ * @public
85
+ */
79
86
  async subscribe(
80
87
  sub: Subscription,
81
88
  listener: SubscriptionListener,
@@ -112,6 +119,11 @@ export abstract class WsProviderBase<TSub = unknown> implements WsProvider {
112
119
  }
113
120
  }
114
121
 
122
+ /**
123
+ * Reconnect the underlying socket only when it is terminally disconnected.
124
+ *
125
+ * @public
126
+ */
115
127
  reconnect(): void {
116
128
  if (this.rws.getStatus() !== 'disconnected') {
117
129
  return
@@ -119,6 +131,11 @@ export abstract class WsProviderBase<TSub = unknown> implements WsProvider {
119
131
  this.rws.reconnect()
120
132
  }
121
133
 
134
+ /**
135
+ * Release all channel and status listeners and close the underlying socket.
136
+ *
137
+ * @public
138
+ */
122
139
  close(): void {
123
140
  for (const entry of this.channels.values()) {
124
141
  if (entry.pendingTeardown !== undefined) {
@@ -9,6 +9,8 @@
9
9
  * @param read - Returns the currently cached promise, or `undefined` if none.
10
10
  * @param write - Stores (or with `undefined`, clears) the cached promise.
11
11
  * @param factory - Creates the promise when the slot is empty.
12
+ *
13
+ * @public
12
14
  */
13
15
  export function cachePromise<T>(
14
16
  read: () => Promise<T> | undefined,
@@ -50,6 +50,10 @@ export type WsStatusListener = (status: WsConnectionStatus) => void
50
50
  * @public
51
51
  */
52
52
  export interface WsProvider {
53
+ /**
54
+ * Subscribe to one venue channel and return an idempotent unsubscribe.
55
+ * `onStatus` receives the provider socket's health transitions.
56
+ */
53
57
  subscribe(
54
58
  sub: Subscription,
55
59
  listener: SubscriptionListener,
@@ -71,5 +75,6 @@ export interface WsProvider {
71
75
  params: ProviderGetQuoteParams,
72
76
  onQuote: QuoteListener
73
77
  ): Promise<() => void>
78
+ /** Permanently close the provider's realtime connection. */
74
79
  close(): void
75
80
  }