@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
@@ -1,5 +1,10 @@
1
- import type { Market, MarketDisplay, MarketsResponse } from '@lifi/perps-types'
2
- import { PerpsErrorCode } from '@lifi/perps-types'
1
+ import type {
2
+ Market,
3
+ MarketDisplay,
4
+ MarketsResponse,
5
+ PerpsMarketDisplay,
6
+ } from '@lifi/perps-types'
7
+ import { PerpsErrorCode, PositionMarginAdjustment } from '@lifi/perps-types'
3
8
  import { PerpsError } from '../errors/PerpsError.js'
4
9
  import { buildUrl, request } from '../transport/request.js'
5
10
  import type { PerpsSDKClient } from '../types/provider.js'
@@ -18,12 +23,20 @@ export class MarketRegistry extends ReferenceDataRegistry<Market> {
18
23
  super(client, provider, 'market')
19
24
  }
20
25
 
21
- /** The most recently synced market list. Empty before the first {@link sync}. */
26
+ /**
27
+ * The most recently synced market list. Empty before the first {@link sync}.
28
+ *
29
+ * @public
30
+ */
22
31
  get markets(): readonly Market[] {
23
32
  return this.items
24
33
  }
25
34
 
26
- /** The synced markets that are available for live and write operations. */
35
+ /**
36
+ * The synced markets that are available for live and write operations.
37
+ *
38
+ * @public
39
+ */
27
40
  get activeMarkets(): readonly Market[] {
28
41
  return this.items.filter(isActiveMarket)
29
42
  }
@@ -32,10 +45,10 @@ export class MarketRegistry extends ReferenceDataRegistry<Market> {
32
45
  * Lookup by `Market.id`, throwing when the backend list does not know the
33
46
  * id. The list is the source of truth for enriched historical and live
34
47
  * market metadata, so an id the venue references but the backend does not
35
- * know is a hard error —
36
- * never a silent fallback to an unenriched stand-in.
48
+ * know is a hard error — never a silent fallback to an unenriched stand-in.
37
49
  *
38
50
  * @throws {PerpsError} `MarketNotFound`.
51
+ * @public
39
52
  */
40
53
  require(marketId: string): Market {
41
54
  const market = this.get(marketId)
@@ -56,6 +69,7 @@ export class MarketRegistry extends ReferenceDataRegistry<Market> {
56
69
  * rejects them.
57
70
  *
58
71
  * @throws {PerpsError} `MarketNotFound` when the market is absent or delisted.
72
+ * @public
59
73
  */
60
74
  requireActive(marketId: string): Market {
61
75
  const market = this.require(marketId)
@@ -86,7 +100,12 @@ export class MarketRegistry extends ReferenceDataRegistry<Market> {
86
100
 
87
101
  const registries = new WeakMap<PerpsSDKClient, Map<string, MarketRegistry>>()
88
102
 
89
- /** A market is active unless the provider explicitly marks it delisted. */
103
+ /**
104
+ * Return whether a market is available for live quoting and trading. A market
105
+ * remains active unless the backend explicitly sets `isDelisted` to `true`.
106
+ *
107
+ * @public
108
+ */
90
109
  export const isActiveMarket = (market: Market): boolean =>
91
110
  market.isDelisted !== true
92
111
 
@@ -127,3 +146,41 @@ export const toMarketDisplay = (market: Market): MarketDisplay => ({
127
146
  quoteAsset: market.quoteAsset,
128
147
  ...(market.isDelisted === undefined ? {} : { isDelisted: market.isDelisted }),
129
148
  })
149
+
150
+ /**
151
+ * Project a perpetual {@link Market} to the identity embedded on a
152
+ * {@link Position}, preserving its individual-margin capability.
153
+ *
154
+ * @throws {PerpsError} `ValidationError` when passed a spot market.
155
+ * @public
156
+ */
157
+ export const toPerpsMarketDisplay = (market: Market): PerpsMarketDisplay => {
158
+ if (!('positionMarginAdjustment' in market)) {
159
+ throw new PerpsError(
160
+ PerpsErrorCode.ValidationError,
161
+ `Market '${market.id}' is not a perpetual market.`
162
+ )
163
+ }
164
+ const capability = market.positionMarginAdjustment
165
+ if (
166
+ capability !== PositionMarginAdjustment.NONE &&
167
+ capability !== PositionMarginAdjustment.ADD_ONLY &&
168
+ capability !== PositionMarginAdjustment.ADD_AND_REMOVE
169
+ ) {
170
+ throw new PerpsError(
171
+ PerpsErrorCode.ValidationError,
172
+ `Market '${market.id}' is not a perpetual market.`
173
+ )
174
+ }
175
+ return {
176
+ providerId: market.providerId,
177
+ id: market.id,
178
+ categoryId: market.categoryId,
179
+ baseAsset: market.baseAsset,
180
+ quoteAsset: market.quoteAsset,
181
+ ...(market.isDelisted === undefined
182
+ ? {}
183
+ : { isDelisted: market.isDelisted }),
184
+ positionMarginAdjustment: capability,
185
+ }
186
+ }
@@ -16,8 +16,10 @@ import type { PerpsSDKClient } from '../types/provider.js'
16
16
  export interface CreateActionParams<T extends ActionType = ActionType> {
17
17
  provider: string
18
18
  address: Address
19
+ /** Optional provider-owned signer address sent to the backend. */
19
20
  signerAddress?: Address
20
21
  action: T
22
+ /** Action-specific payload matching `action`. */
21
23
  params: ActionParamsMap[T]
22
24
  }
23
25
 
@@ -16,7 +16,9 @@ import type { PerpsSDKClient } from '../types/provider.js'
16
16
  export interface ExecuteActionParams {
17
17
  provider: string
18
18
  address: Address
19
+ /** Optional provider-owned signer address used for submission. */
19
20
  signerAddress?: Address
21
+ /** Action descriptor shared by the signed steps. */
20
22
  action: ActionType
21
23
  actions: SignedActionStep[]
22
24
  }
@@ -12,11 +12,13 @@ import type { PerpsSDKClient } from '../types/provider.js'
12
12
  export interface GetActivityParams {
13
13
  provider: string
14
14
  address: Address
15
+ /** Maximum items returned; provider defaults and caps apply. */
15
16
  limit?: number
17
+ /** Opaque pagination cursor from the previous response. */
16
18
  cursor?: string
17
- /** Filter: activity after this timestamp (ms) */
19
+ /** Include activity at or after this Unix timestamp in milliseconds. */
18
20
  startTime?: number
19
- /** Filter: activity before this timestamp (ms) */
21
+ /** Include activity at or before this Unix timestamp in milliseconds. */
20
22
  endTime?: number
21
23
  type?: ActivityType[]
22
24
  }
@@ -12,11 +12,13 @@ import type { PerpsSDKClient } from '../types/provider.js'
12
12
  export interface GetFillsParams {
13
13
  provider: string
14
14
  address: Address
15
+ /** Maximum items returned; provider defaults and caps apply. */
15
16
  limit?: number
17
+ /** Opaque pagination cursor from the previous response. */
16
18
  cursor?: string
17
- /** Filter: fills after this timestamp (ms) */
19
+ /** Include fills at or after this Unix timestamp in milliseconds. */
18
20
  startTime?: number
19
- /** Filter: fills before this timestamp (ms) */
21
+ /** Include fills at or before this Unix timestamp in milliseconds. */
20
22
  endTime?: number
21
23
  }
22
24
 
@@ -11,7 +11,7 @@ import type { PerpsSDKClient } from '../types/provider.js'
11
11
  */
12
12
  export interface GetMarketsParams {
13
13
  provider: string
14
- /** Optional filter — opaque `Market.id`s (not display symbols). */
14
+ /** Optional comma-joined filter of opaque `Market.id`s. */
15
15
  marketIds?: string[]
16
16
  }
17
17
 
@@ -10,7 +10,7 @@ import type { PerpsSDKClient } from '../types/provider.js'
10
10
  */
11
11
  export interface GetMarketsContextParams {
12
12
  provider: string
13
- /** Optional filter — opaque `Market.id`s (not display symbols). */
13
+ /** Optional filter of opaque `Market.id`s (not display symbols). */
14
14
  marketIds?: string[]
15
15
  }
16
16
 
@@ -10,13 +10,14 @@ import type { PerpsSDKClient } from '../types/provider.js'
10
10
  */
11
11
  export interface GetOhlcvParams {
12
12
  provider: string
13
- /** Opaque provider `Market.id` (not `displaySymbol`). */
13
+ /** Opaque provider `Market.id`, not a display symbol. */
14
14
  marketId: string
15
15
  interval: OhlcvInterval
16
- /** Unix timestamp in milliseconds */
16
+ /** Unix timestamp in milliseconds for the start bound. */
17
17
  startTime?: number
18
- /** Unix timestamp in milliseconds */
18
+ /** Unix timestamp in milliseconds for the end bound. */
19
19
  endTime?: number
20
+ /** Maximum candles returned; provider defaults and caps apply. */
20
21
  limit?: number
21
22
  }
22
23
 
@@ -12,6 +12,7 @@ import type { PerpsSDKClient } from '../types/provider.js'
12
12
  export interface GetOrderParams {
13
13
  provider: string
14
14
  address: Address
15
+ /** Venue order id, opaque to the SDK. */
15
16
  id: string
16
17
  }
17
18
 
@@ -10,9 +10,9 @@ import type { PerpsSDKClient } from '../types/provider.js'
10
10
  */
11
11
  export interface GetOrderbookParams {
12
12
  provider: string
13
- /** Opaque provider `Market.id` (not `displaySymbol`). */
13
+ /** Opaque provider `Market.id`, not a display symbol. */
14
14
  marketId: string
15
- /** Number of levels to return (default varies by DEX) */
15
+ /** Optional number of price levels; venue defaults apply when omitted. */
16
16
  depth?: number
17
17
  }
18
18
 
@@ -12,9 +12,11 @@ import type { PerpsSDKClient } from '../types/provider.js'
12
12
  export interface GetOrdersParams {
13
13
  provider: string
14
14
  address: Address
15
- /** Optional filter — opaque `Market.id` (not `displaySymbol`) */
15
+ /** Optional opaque `Market.id` filter, not a display symbol. */
16
16
  marketId?: string
17
+ /** Maximum items returned; provider defaults and caps apply. */
17
18
  limit?: number
19
+ /** Opaque pagination cursor from the previous response. */
18
20
  cursor?: string
19
21
  }
20
22
 
@@ -12,9 +12,11 @@ import type { PerpsSDKClient } from '../types/provider.js'
12
12
  export interface GetPositionsParams {
13
13
  provider: string
14
14
  address: Address
15
- /** Optional filter — opaque `Market.id` (not `displaySymbol`) */
15
+ /** Optional opaque `Market.id` filter, not a display symbol. */
16
16
  marketId?: string
17
+ /** Maximum items returned; provider defaults and caps apply. */
17
18
  limit?: number
19
+ /** Opaque pagination cursor from the previous response. */
18
20
  cursor?: string
19
21
  }
20
22
 
@@ -10,11 +10,13 @@ import type { PerpsSDKClient } from '../types/provider.js'
10
10
  */
11
11
  export interface GetQuoteParams {
12
12
  provider: string
13
- /** Human `displaySymbol`, e.g. `"BTC"`. */
13
+ /** Human `displaySymbol`, e.g. `"BTC"`, resolved by the provider. */
14
14
  symbol: string
15
+ /** Buy consumes asks; sell consumes bids. */
15
16
  side: QuoteSide
16
17
  /** USD notional to fill. */
17
18
  size: number
19
+ /** Product family used to distinguish spot and perpetual markets. */
18
20
  type: TradeType
19
21
  }
20
22
 
@@ -15,6 +15,8 @@ import type { StorageAdapter } from './types.js'
15
15
  *
16
16
  * @param raw Stored string, or `null` when the key is absent.
17
17
  * @param isValid Shape guard run against the parsed value.
18
+ *
19
+ * @public
18
20
  */
19
21
  export function parseStoredRecord<T>(
20
22
  raw: string | null,
@@ -40,6 +42,8 @@ export function parseStoredRecord<T>(
40
42
  * Returns `null` for both the genuine-absence and the evicted-poison cases;
41
43
  * callers that must distinguish them should compare against the pre-read
42
44
  * presence of the key themselves.
45
+ *
46
+ * @public
43
47
  */
44
48
  export async function readValidatedRecord<T>(
45
49
  storage: StorageAdapter,
@@ -1,13 +1,17 @@
1
1
  /**
2
- * Storage adapter interface for persisting SDK session credentials (provider
3
- * agent keypairs, API keys, read-only tokens). Implement this to use custom
4
- * storage (e.g. encrypted storage, a database, async key-value stores).
2
+ * Asynchronous key-value storage for SDK session credentials (provider agent
3
+ * keypairs, API keys, and read-only tokens). Values are opaque strings; an
4
+ * adapter should preserve them exactly and return `null` when a key is absent.
5
+ * Implement this interface for encrypted storage, a database, or another
6
+ * application-owned store.
7
+ *
8
+ * @public
5
9
  */
6
10
  export interface StorageAdapter {
7
- /** Get a value by key. */
11
+ /** Read the value for `key`, or `null` when the key is absent. */
8
12
  get(key: string): Promise<string | null>
9
- /** Set a value by key. */
13
+ /** Persist `value` under `key`, replacing any existing value. */
10
14
  set(key: string, value: string): Promise<void>
11
- /** Remove a value by key. */
15
+ /** Remove `key`; resolving successfully when it is already absent. */
12
16
  remove(key: string): Promise<void>
13
17
  }
@@ -7,8 +7,11 @@ import type { ResolvedRetryPolicy, RetryClassification } from './retryPolicy.js'
7
7
  * @public
8
8
  */
9
9
  export interface FetchWithRetryOptions {
10
+ /** Fully resolved retry policy controlling attempts, delays, and classification. */
10
11
  policy: ResolvedRetryPolicy
12
+ /** Optional fetch implementation; defaults to the global `fetch`. */
11
13
  fetchImpl?: typeof fetch
14
+ /** Abort signal; cancellation is propagated without retrying. */
12
15
  signal?: AbortSignal
13
16
  }
14
17
 
@@ -24,6 +24,7 @@ export type RetryClassification =
24
24
  * @public
25
25
  */
26
26
  export interface RetryClassifyContext {
27
+ /** Non-2xx response being classified for retry or terminal failure. */
27
28
  response: Response
28
29
  }
29
30
 
@@ -34,9 +35,13 @@ export interface RetryClassifyContext {
34
35
  * @public
35
36
  */
36
37
  export interface RetryAttemptContext {
38
+ /** Zero-based attempt index for the response/error. */
37
39
  attempt: number
40
+ /** Response received, when the attempt reached the server. */
38
41
  response?: Response
42
+ /** Network error thrown before a response was received. */
39
43
  error?: unknown
44
+ /** Classification returned by the policy's classifier. */
40
45
  classification: RetryClassification
41
46
  }
42
47
 
@@ -50,11 +55,17 @@ export interface RetryAttemptContext {
50
55
  * @public
51
56
  */
52
57
  export interface RetryPolicy {
58
+ /** Maximum total attempts, including the initial request. */
53
59
  maxAttempts?: number
60
+ /** Initial exponential-backoff ceiling in milliseconds. */
54
61
  baseDelayMs?: number
62
+ /** Maximum backoff delay in milliseconds. */
55
63
  maxDelayMs?: number
64
+ /** Whether a valid `Retry-After` response header takes precedence. */
56
65
  respectRetryAfter?: boolean
66
+ /** Classify a response; `undefined` delegates to the base classifier. */
57
67
  classify?: (ctx: RetryClassifyContext) => RetryClassification | undefined
68
+ /** Final per-attempt veto after classification requests a retry. */
58
69
  shouldRetry?: (ctx: RetryAttemptContext) => boolean | Promise<boolean>
59
70
  }
60
71
 
@@ -65,12 +76,19 @@ export interface RetryPolicy {
65
76
  * @public
66
77
  */
67
78
  export interface ResolvedRetryPolicy {
79
+ /** Whether retries are enabled. */
68
80
  enabled: boolean
81
+ /** Maximum total attempts, including the initial request. */
69
82
  maxAttempts: number
83
+ /** Initial exponential-backoff ceiling in milliseconds. */
70
84
  baseDelayMs: number
85
+ /** Maximum backoff delay in milliseconds. */
71
86
  maxDelayMs: number
87
+ /** Whether a valid `Retry-After` header is honored. */
72
88
  respectRetryAfter: boolean
89
+ /** Final response classifier used for each failed attempt. */
73
90
  classify: (ctx: RetryClassifyContext) => RetryClassification
91
+ /** Optional final veto after classification requests a retry. */
74
92
  shouldRetry?: (ctx: RetryAttemptContext) => boolean | Promise<boolean>
75
93
  }
76
94
 
@@ -82,7 +100,9 @@ export interface ResolvedRetryPolicy {
82
100
  * @public
83
101
  */
84
102
  export interface ProviderRetryConfig {
103
+ /** Fallback policy for providers without an explicit key. */
85
104
  default?: RetryPolicy | false
105
+ /** Override keyed by provider type, or `lifi` for backend requests. */
86
106
  [providerKey: string]: RetryPolicy | false | undefined
87
107
  }
88
108
 
package/src/types/api.ts CHANGED
@@ -3,6 +3,7 @@ import type {
3
3
  AccountResponse,
4
4
  ActionStep,
5
5
  ExecuteActionResponse,
6
+ MarginMode,
6
7
  MarketRef,
7
8
  ModifyOrderInput,
8
9
  OrderSide,
@@ -27,10 +28,15 @@ import type { PerpsProviderPlugin } from './provider.js'
27
28
  * @public
28
29
  */
29
30
  export interface PerpsConfig {
31
+ /** Integrator identifier sent in the `x-lifi-integrator` request header. */
30
32
  integrator: string
33
+ /** LI.FI API key used for authenticated backend requests. */
31
34
  apiKey: string
35
+ /** Perps API base URL; defaults to {@link DEFAULT_API_URL}. */
32
36
  apiUrl?: string
37
+ /** Skip the SDK-version compatibility check when set. */
33
38
  disableVersionCheck?: boolean
39
+ /** Hook that can rewrite URL/request options before transport. */
34
40
  requestInterceptor?: RequestInterceptor
35
41
  /**
36
42
  * Provider plugins or per-provider config. Two shapes are accepted:
@@ -78,10 +84,11 @@ export interface PerpsConfig {
78
84
  * @public
79
85
  */
80
86
  export interface PerpsClientOptions {
87
+ /** Integrator identifier sent in the `x-lifi-integrator` request header. */
81
88
  integrator: string
82
- /** API key for authenticated requests (get one at https://portal.li.fi/) */
89
+ /** API key for authenticated requests (get one at https://portal.li.fi/). */
83
90
  apiKey: string
84
- /** Defaults to DEFAULT_API_URL */
91
+ /** Perps API base URL; defaults to {@link DEFAULT_API_URL}. */
85
92
  apiUrl?: string
86
93
  /**
87
94
  * Provider plugins or per-provider config. Accepts the same two shapes as
@@ -116,14 +123,27 @@ export interface BuildProviderSetupParams {
116
123
  export interface PlaceOrderParams {
117
124
  provider: string
118
125
  address: Address
126
+ /** Opaque provider market reference. */
119
127
  market: MarketRef
120
128
  side: OrderSide
121
129
  type: OrderType
130
+ /** Base-asset size as a decimal wire string. */
122
131
  size: string
132
+ /** Limit price as a decimal wire string; required by limit-style orders. */
123
133
  price: string
134
+ /** Optional leverage multiplier; provider defaults apply when omitted. */
124
135
  leverage?: number
136
+ /**
137
+ * Margin mode the order trades under; omitted falls to the venue's cross
138
+ * default. Lighter's order tx carries the mode directly; Hyperliquid
139
+ * applies it via a prepended leverage update (requires `leverage`).
140
+ */
141
+ marginMode?: MarginMode
142
+ /** Whether the order may only reduce an existing position. */
125
143
  reduceOnly?: boolean
144
+ /** Time-in-force policy; provider defaults apply when omitted. */
126
145
  timeInForce?: TimeInForce
146
+ /** Optional Unix timestamp or provider wire expiry string. */
127
147
  expiresAt?: string
128
148
  takeProfit?: TriggerOrderInput
129
149
  stopLoss?: TriggerOrderInput
@@ -138,6 +158,7 @@ export interface PlaceOrderParams {
138
158
  export interface PlaceTriggerOrderParams {
139
159
  provider: string
140
160
  address: Address
161
+ /** Opaque provider market reference. */
141
162
  market: MarketRef
142
163
  side: OrderSide
143
164
  takeProfit?: TriggerOrderInput
@@ -152,6 +173,7 @@ export interface PlaceTriggerOrderParams {
152
173
  export interface WithdrawParams {
153
174
  provider: string
154
175
  address: Address
176
+ /** Provider-specific withdrawal payload, including amount/destination. */
155
177
  withdrawal: WithdrawalParams
156
178
  }
157
179
 
@@ -165,11 +187,13 @@ export interface WithdrawParams {
165
187
  export interface SendAssetActionParams {
166
188
  provider: string
167
189
  address: Address
168
- /** Canonical `Asset.id` of the asset being moved (for Hyperliquid spot
169
- * assets, the token index as a string) — never a display symbol. */
190
+ /** Canonical `Asset.id` (Hyperliquid spot uses the token index as a string); never a display symbol. */
170
191
  collateral: string
192
+ /** Source DEX/account identifier understood by the provider. */
171
193
  sourceDex: string
194
+ /** Destination DEX/account identifier understood by the provider. */
172
195
  destinationDex: string
196
+ /** Transfer amount as a provider-compatible decimal wire string. */
173
197
  amount: string
174
198
  }
175
199
 
@@ -181,10 +205,9 @@ export interface SendAssetActionParams {
181
205
  export interface CancelOrdersParams {
182
206
  provider: string
183
207
  address: Address
184
- /** Venue order ids. Venues whose ids are scoped per market (e.g. Lighter's
185
- * `order_index`) also accept the composite `"<market_id>:<order_id>"`. */
208
+ /** Venue order ids. Market-scoped venues such as Lighter also accept `"<market_id>:<order_id>"`. */
186
209
  ids: string[]
187
- /** Market context for per-market order ids; the order's `market.id`. */
210
+ /** Market context for per-market order ids; use the order's opaque `market.id`. */
188
211
  assetId?: string
189
212
  }
190
213
 
@@ -196,6 +219,7 @@ export interface CancelOrdersParams {
196
219
  export interface ModifyOrdersParams {
197
220
  provider: string
198
221
  address: Address
222
+ /** Provider-specific order modifications. */
199
223
  modifications: ModifyOrderInput[]
200
224
  }
201
225
 
@@ -250,9 +274,7 @@ export interface ProviderSetup {
250
274
  * Parameters for the internal `PerpsClient.executeProviderSetup` batch submit.
251
275
  */
252
276
  export interface ExecuteProviderSetupParams {
253
- /** Provider to satisfy setup for */
254
277
  provider: string
255
- /** User wallet address */
256
278
  address: Address
257
279
  /** The unsatisfied setup steps from checkSetup() */
258
280
  setup: ActionStep[]
@@ -30,6 +30,7 @@ export type SwitchChainHook = (
30
30
  * @public
31
31
  */
32
32
  export interface ProviderConfig {
33
+ /** Optional provider category/market ids used to filter WS subscriptions. */
33
34
  markets?: string[]
34
35
  }
35
36
 
@@ -64,6 +65,7 @@ export type RequestInterceptor = (
64
65
  * @public
65
66
  */
66
67
  export interface SDKRequestOptions {
68
+ /** Abort the request and any pending backoff delay. */
67
69
  signal?: AbortSignal
68
70
  /**
69
71
  * Lighter auth token consumed by provider-direct venue reads (getOrders,
@@ -85,12 +87,20 @@ export interface SDKRequestOptions {
85
87
  * @public
86
88
  */
87
89
  export interface PerpsBaseConfig {
90
+ /** Integrator identifier sent in the `x-lifi-integrator` header. */
88
91
  integrator: string
92
+ /** API key applied to backend requests when non-empty. */
89
93
  apiKey: string
94
+ /** Resolved perps API base URL. */
90
95
  apiUrl: string
96
+ /** Whether SDK version compatibility checks are disabled. */
91
97
  disableVersionCheck?: boolean
98
+ /** Optional outgoing-request URL/options interceptor. */
92
99
  requestInterceptor?: RequestInterceptor
100
+ /** Optional per-provider WS market filters. */
93
101
  providers?: ProviderConfigs
102
+ /** Optional global or per-provider retry configuration. */
94
103
  retry?: RetryConfig
104
+ /** Fetch implementation used by core HTTP transport. */
95
105
  fetch?: typeof fetch
96
106
  }
@@ -9,9 +9,11 @@ import type { Address } from 'viem'
9
9
  * @public
10
10
  */
11
11
  export interface DeclaredDepositAsset {
12
+ /** EVM chain id on which the asset is held or broadcast. */
12
13
  chainId: number
13
- /** EIP-55 checksummed address; the zero address denotes the chain's native gas token. */
14
+ /** EIP-55 checksummed address; the zero address denotes native gas. */
14
15
  address: Address
16
+ /** Decimal places used by the token; native gas assets use 18. */
15
17
  decimals: number
16
18
  }
17
19
 
@@ -25,6 +27,7 @@ export interface DeclaredDepositAsset {
25
27
  */
26
28
  export interface DepositFlowLifiSwap {
27
29
  kind: 'lifiSwap'
30
+ /** Destination collateral token and its full chain identity. */
28
31
  destination: DeclaredDepositAsset
29
32
  /**
30
33
  * Credited address when it is not the user's own — a venue-provisioned
@@ -43,10 +46,13 @@ export interface DepositFlowLifiSwap {
43
46
  */
44
47
  export interface DepositFlowFirstDepositPipeline {
45
48
  kind: 'firstDepositPipeline'
46
- /** Chain the deposit legs broadcast on; the user's wallet must be switched to it. */
49
+ /** Chain on which the deposit legs broadcast; the wallet must be switched here. */
47
50
  chainId: number
51
+ /** Native gas asset needed to broadcast the deposit legs. */
48
52
  gasAsset: DeclaredDepositAsset
53
+ /** Collateral asset credited by the first deposit. */
49
54
  collateral: DeclaredDepositAsset
55
+ /** Action type used to stage the deposit pipeline. */
50
56
  bridgeAction: ActionType.DEPOSIT
51
57
  }
52
58
 
@@ -59,7 +65,7 @@ export interface DepositFlowFirstDepositPipeline {
59
65
  */
60
66
  export interface DepositFlowSetupRequired {
61
67
  kind: 'setupRequired'
62
- /** Outstanding `Provider.setup` action types, in the order they must be run. */
68
+ /** Setup action types that must be completed, in execution order. */
63
69
  setup: ActionType[]
64
70
  }
65
71