@lifi/perps-sdk 6.0.0 → 6.2.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 (261) hide show
  1. package/dist/cjs/client/PerpsClient.d.ts +1 -0
  2. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  3. package/dist/cjs/client/PerpsClient.js +22 -6
  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/registry/assetRegistry.d.ts.map +1 -1
  8. package/dist/cjs/registry/assetRegistry.js.map +1 -1
  9. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -1
  10. package/dist/cjs/registry/marketRegistry.js.map +1 -1
  11. package/dist/cjs/services/createAction.d.ts.map +1 -1
  12. package/dist/cjs/services/createAction.js.map +1 -1
  13. package/dist/cjs/services/executeAction.d.ts.map +1 -1
  14. package/dist/cjs/services/executeAction.js.map +1 -1
  15. package/dist/cjs/services/getActivity.d.ts.map +1 -1
  16. package/dist/cjs/services/getActivity.js.map +1 -1
  17. package/dist/cjs/services/getFills.d.ts.map +1 -1
  18. package/dist/cjs/services/getFills.js.map +1 -1
  19. package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
  20. package/dist/cjs/services/getOhlcv.js.map +1 -1
  21. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  22. package/dist/cjs/services/getOrder.js.map +1 -1
  23. package/dist/cjs/services/getOrders.d.ts.map +1 -1
  24. package/dist/cjs/services/getOrders.js.map +1 -1
  25. package/dist/cjs/services/getPositions.d.ts.map +1 -1
  26. package/dist/cjs/services/getPositions.js.map +1 -1
  27. package/dist/cjs/services/getQuote.d.ts.map +1 -1
  28. package/dist/cjs/services/getQuote.js.map +1 -1
  29. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -1
  30. package/dist/cjs/storage/parseStoredRecord.js.map +1 -1
  31. package/dist/cjs/storage/types.d.ts.map +1 -1
  32. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -1
  33. package/dist/cjs/transport/fetchWithRetry.js.map +1 -1
  34. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -1
  35. package/dist/cjs/transport/retryPolicy.js.map +1 -1
  36. package/dist/cjs/types/api.d.ts.map +1 -1
  37. package/dist/cjs/types/config.d.ts.map +1 -1
  38. package/dist/cjs/types/deposit.d.ts.map +1 -1
  39. package/dist/cjs/types/provider.d.ts +1 -0
  40. package/dist/cjs/types/provider.d.ts.map +1 -1
  41. package/dist/cjs/utils/calculations.d.ts.map +1 -1
  42. package/dist/cjs/utils/calculations.js.map +1 -1
  43. package/dist/cjs/utils/format.d.ts.map +1 -1
  44. package/dist/cjs/utils/format.js.map +1 -1
  45. package/dist/cjs/utils/orderClassification.d.ts.map +1 -1
  46. package/dist/cjs/utils/orderClassification.js.map +1 -1
  47. package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
  48. package/dist/cjs/utils/transferMargin.js +1 -3
  49. package/dist/cjs/utils/transferMargin.js.map +1 -1
  50. package/dist/cjs/version.d.ts +1 -1
  51. package/dist/cjs/version.js +1 -1
  52. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
  53. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
  54. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  55. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -1
  56. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -1
  57. package/dist/cjs/websocket/WsProviderBase.js.map +1 -1
  58. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -1
  59. package/dist/cjs/websocket/cachePromise.js.map +1 -1
  60. package/dist/cjs/websocket/types.d.ts.map +1 -1
  61. package/dist/esm/client/PerpsClient.d.ts +8 -0
  62. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  63. package/dist/esm/client/PerpsClient.js +29 -6
  64. package/dist/esm/client/PerpsClient.js.map +1 -1
  65. package/dist/esm/errors/PerpsError.d.ts +7 -0
  66. package/dist/esm/errors/PerpsError.d.ts.map +1 -1
  67. package/dist/esm/errors/PerpsError.js +7 -0
  68. package/dist/esm/errors/PerpsError.js.map +1 -1
  69. package/dist/esm/registry/assetRegistry.d.ts +5 -1
  70. package/dist/esm/registry/assetRegistry.d.ts.map +1 -1
  71. package/dist/esm/registry/assetRegistry.js +5 -1
  72. package/dist/esm/registry/assetRegistry.js.map +1 -1
  73. package/dist/esm/registry/marketRegistry.d.ts +19 -5
  74. package/dist/esm/registry/marketRegistry.d.ts.map +1 -1
  75. package/dist/esm/registry/marketRegistry.js +19 -5
  76. package/dist/esm/registry/marketRegistry.js.map +1 -1
  77. package/dist/esm/services/createAction.d.ts +2 -0
  78. package/dist/esm/services/createAction.d.ts.map +1 -1
  79. package/dist/esm/services/createAction.js.map +1 -1
  80. package/dist/esm/services/executeAction.d.ts +2 -0
  81. package/dist/esm/services/executeAction.d.ts.map +1 -1
  82. package/dist/esm/services/executeAction.js.map +1 -1
  83. package/dist/esm/services/getActivity.d.ts +4 -2
  84. package/dist/esm/services/getActivity.d.ts.map +1 -1
  85. package/dist/esm/services/getActivity.js.map +1 -1
  86. package/dist/esm/services/getFills.d.ts +4 -2
  87. package/dist/esm/services/getFills.d.ts.map +1 -1
  88. package/dist/esm/services/getFills.js.map +1 -1
  89. package/dist/esm/services/getMarkets.d.ts +1 -1
  90. package/dist/esm/services/getMarkets.d.ts.map +1 -1
  91. package/dist/esm/services/getMarketsContext.d.ts +1 -1
  92. package/dist/esm/services/getMarketsContext.d.ts.map +1 -1
  93. package/dist/esm/services/getOhlcv.d.ts +4 -3
  94. package/dist/esm/services/getOhlcv.d.ts.map +1 -1
  95. package/dist/esm/services/getOhlcv.js.map +1 -1
  96. package/dist/esm/services/getOrder.d.ts +1 -0
  97. package/dist/esm/services/getOrder.d.ts.map +1 -1
  98. package/dist/esm/services/getOrder.js.map +1 -1
  99. package/dist/esm/services/getOrderbook.d.ts +2 -2
  100. package/dist/esm/services/getOrderbook.d.ts.map +1 -1
  101. package/dist/esm/services/getOrders.d.ts +3 -1
  102. package/dist/esm/services/getOrders.d.ts.map +1 -1
  103. package/dist/esm/services/getOrders.js.map +1 -1
  104. package/dist/esm/services/getPositions.d.ts +3 -1
  105. package/dist/esm/services/getPositions.d.ts.map +1 -1
  106. package/dist/esm/services/getPositions.js.map +1 -1
  107. package/dist/esm/services/getQuote.d.ts +3 -1
  108. package/dist/esm/services/getQuote.d.ts.map +1 -1
  109. package/dist/esm/services/getQuote.js.map +1 -1
  110. package/dist/esm/storage/parseStoredRecord.d.ts +4 -0
  111. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -1
  112. package/dist/esm/storage/parseStoredRecord.js +4 -0
  113. package/dist/esm/storage/parseStoredRecord.js.map +1 -1
  114. package/dist/esm/storage/types.d.ts +10 -6
  115. package/dist/esm/storage/types.d.ts.map +1 -1
  116. package/dist/esm/transport/fetchWithRetry.d.ts +3 -0
  117. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -1
  118. package/dist/esm/transport/fetchWithRetry.js.map +1 -1
  119. package/dist/esm/transport/retryPolicy.d.ts +20 -0
  120. package/dist/esm/transport/retryPolicy.d.ts.map +1 -1
  121. package/dist/esm/transport/retryPolicy.js.map +1 -1
  122. package/dist/esm/types/api.d.ts +24 -9
  123. package/dist/esm/types/api.d.ts.map +1 -1
  124. package/dist/esm/types/config.d.ts +10 -0
  125. package/dist/esm/types/config.d.ts.map +1 -1
  126. package/dist/esm/types/deposit.d.ts +9 -3
  127. package/dist/esm/types/deposit.d.ts.map +1 -1
  128. package/dist/esm/types/provider.d.ts +44 -17
  129. package/dist/esm/types/provider.d.ts.map +1 -1
  130. package/dist/esm/utils/calculations.d.ts +2 -0
  131. package/dist/esm/utils/calculations.d.ts.map +1 -1
  132. package/dist/esm/utils/calculations.js.map +1 -1
  133. package/dist/esm/utils/format.d.ts +5 -1
  134. package/dist/esm/utils/format.d.ts.map +1 -1
  135. package/dist/esm/utils/format.js.map +1 -1
  136. package/dist/esm/utils/orderClassification.d.ts +5 -0
  137. package/dist/esm/utils/orderClassification.d.ts.map +1 -1
  138. package/dist/esm/utils/orderClassification.js +5 -0
  139. package/dist/esm/utils/orderClassification.js.map +1 -1
  140. package/dist/esm/utils/transferMargin.d.ts.map +1 -1
  141. package/dist/esm/utils/transferMargin.js +2 -4
  142. package/dist/esm/utils/transferMargin.js.map +1 -1
  143. package/dist/esm/version.d.ts +1 -1
  144. package/dist/esm/version.js +1 -1
  145. package/dist/esm/websocket/PerpsWsClient.d.ts +0 -1
  146. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
  147. package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
  148. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +5 -3
  149. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  150. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -1
  151. package/dist/esm/websocket/WsProviderBase.d.ts +17 -0
  152. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -1
  153. package/dist/esm/websocket/WsProviderBase.js +17 -0
  154. package/dist/esm/websocket/WsProviderBase.js.map +1 -1
  155. package/dist/esm/websocket/cachePromise.d.ts +2 -0
  156. package/dist/esm/websocket/cachePromise.d.ts.map +1 -1
  157. package/dist/esm/websocket/cachePromise.js +2 -0
  158. package/dist/esm/websocket/cachePromise.js.map +1 -1
  159. package/dist/esm/websocket/types.d.ts +5 -0
  160. package/dist/esm/websocket/types.d.ts.map +1 -1
  161. package/dist/types/client/PerpsClient.d.ts +8 -0
  162. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  163. package/dist/types/errors/PerpsError.d.ts +7 -0
  164. package/dist/types/errors/PerpsError.d.ts.map +1 -1
  165. package/dist/types/registry/assetRegistry.d.ts +5 -1
  166. package/dist/types/registry/assetRegistry.d.ts.map +1 -1
  167. package/dist/types/registry/marketRegistry.d.ts +19 -5
  168. package/dist/types/registry/marketRegistry.d.ts.map +1 -1
  169. package/dist/types/services/createAction.d.ts +2 -0
  170. package/dist/types/services/createAction.d.ts.map +1 -1
  171. package/dist/types/services/executeAction.d.ts +2 -0
  172. package/dist/types/services/executeAction.d.ts.map +1 -1
  173. package/dist/types/services/getActivity.d.ts +4 -2
  174. package/dist/types/services/getActivity.d.ts.map +1 -1
  175. package/dist/types/services/getFills.d.ts +4 -2
  176. package/dist/types/services/getFills.d.ts.map +1 -1
  177. package/dist/types/services/getMarkets.d.ts +1 -1
  178. package/dist/types/services/getMarkets.d.ts.map +1 -1
  179. package/dist/types/services/getMarketsContext.d.ts +1 -1
  180. package/dist/types/services/getMarketsContext.d.ts.map +1 -1
  181. package/dist/types/services/getOhlcv.d.ts +4 -3
  182. package/dist/types/services/getOhlcv.d.ts.map +1 -1
  183. package/dist/types/services/getOrder.d.ts +1 -0
  184. package/dist/types/services/getOrder.d.ts.map +1 -1
  185. package/dist/types/services/getOrderbook.d.ts +2 -2
  186. package/dist/types/services/getOrderbook.d.ts.map +1 -1
  187. package/dist/types/services/getOrders.d.ts +3 -1
  188. package/dist/types/services/getOrders.d.ts.map +1 -1
  189. package/dist/types/services/getPositions.d.ts +3 -1
  190. package/dist/types/services/getPositions.d.ts.map +1 -1
  191. package/dist/types/services/getQuote.d.ts +3 -1
  192. package/dist/types/services/getQuote.d.ts.map +1 -1
  193. package/dist/types/storage/parseStoredRecord.d.ts +4 -0
  194. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -1
  195. package/dist/types/storage/types.d.ts +10 -6
  196. package/dist/types/storage/types.d.ts.map +1 -1
  197. package/dist/types/transport/fetchWithRetry.d.ts +3 -0
  198. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -1
  199. package/dist/types/transport/retryPolicy.d.ts +20 -0
  200. package/dist/types/transport/retryPolicy.d.ts.map +1 -1
  201. package/dist/types/types/api.d.ts +24 -9
  202. package/dist/types/types/api.d.ts.map +1 -1
  203. package/dist/types/types/config.d.ts +10 -0
  204. package/dist/types/types/config.d.ts.map +1 -1
  205. package/dist/types/types/deposit.d.ts +9 -3
  206. package/dist/types/types/deposit.d.ts.map +1 -1
  207. package/dist/types/types/provider.d.ts +44 -17
  208. package/dist/types/types/provider.d.ts.map +1 -1
  209. package/dist/types/utils/calculations.d.ts +2 -0
  210. package/dist/types/utils/calculations.d.ts.map +1 -1
  211. package/dist/types/utils/format.d.ts +5 -1
  212. package/dist/types/utils/format.d.ts.map +1 -1
  213. package/dist/types/utils/orderClassification.d.ts +5 -0
  214. package/dist/types/utils/orderClassification.d.ts.map +1 -1
  215. package/dist/types/utils/transferMargin.d.ts.map +1 -1
  216. package/dist/types/version.d.ts +1 -1
  217. package/dist/types/websocket/PerpsWsClient.d.ts +0 -1
  218. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
  219. package/dist/types/websocket/ReconnectingWebSocket.d.ts +5 -3
  220. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -1
  221. package/dist/types/websocket/WsProviderBase.d.ts +17 -0
  222. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -1
  223. package/dist/types/websocket/cachePromise.d.ts +2 -0
  224. package/dist/types/websocket/cachePromise.d.ts.map +1 -1
  225. package/dist/types/websocket/types.d.ts +5 -0
  226. package/dist/types/websocket/types.d.ts.map +1 -1
  227. package/package.json +2 -2
  228. package/src/client/PerpsClient.ts +35 -6
  229. package/src/errors/PerpsError.ts +7 -0
  230. package/src/registry/assetRegistry.ts +5 -1
  231. package/src/registry/marketRegistry.ts +19 -5
  232. package/src/services/createAction.ts +2 -0
  233. package/src/services/executeAction.ts +2 -0
  234. package/src/services/getActivity.ts +4 -2
  235. package/src/services/getFills.ts +4 -2
  236. package/src/services/getMarkets.ts +1 -1
  237. package/src/services/getMarketsContext.ts +1 -1
  238. package/src/services/getOhlcv.ts +4 -3
  239. package/src/services/getOrder.ts +1 -0
  240. package/src/services/getOrderbook.ts +2 -2
  241. package/src/services/getOrders.ts +3 -1
  242. package/src/services/getPositions.ts +3 -1
  243. package/src/services/getQuote.ts +3 -1
  244. package/src/storage/parseStoredRecord.ts +4 -0
  245. package/src/storage/types.ts +10 -6
  246. package/src/transport/fetchWithRetry.ts +3 -0
  247. package/src/transport/retryPolicy.ts +20 -0
  248. package/src/types/api.ts +24 -9
  249. package/src/types/config.ts +10 -0
  250. package/src/types/deposit.ts +9 -3
  251. package/src/types/provider.ts +45 -17
  252. package/src/utils/calculations.ts +2 -0
  253. package/src/utils/format.ts +5 -1
  254. package/src/utils/orderClassification.ts +5 -0
  255. package/src/utils/transferMargin.ts +2 -7
  256. package/src/version.ts +1 -1
  257. package/src/websocket/PerpsWsClient.ts +0 -1
  258. package/src/websocket/ReconnectingWebSocket.ts +5 -3
  259. package/src/websocket/WsProviderBase.ts +17 -0
  260. package/src/websocket/cachePromise.ts +2 -0
  261. package/src/websocket/types.ts +5 -0
@@ -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
@@ -28,10 +28,15 @@ import type { PerpsProviderPlugin } from './provider.js'
28
28
  * @public
29
29
  */
30
30
  export interface PerpsConfig {
31
+ /** Integrator identifier sent in the `x-lifi-integrator` request header. */
31
32
  integrator: string
33
+ /** LI.FI API key used for authenticated backend requests. */
32
34
  apiKey: string
35
+ /** Perps API base URL; defaults to {@link DEFAULT_API_URL}. */
33
36
  apiUrl?: string
37
+ /** Skip the SDK-version compatibility check when set. */
34
38
  disableVersionCheck?: boolean
39
+ /** Hook that can rewrite URL/request options before transport. */
35
40
  requestInterceptor?: RequestInterceptor
36
41
  /**
37
42
  * Provider plugins or per-provider config. Two shapes are accepted:
@@ -79,10 +84,11 @@ export interface PerpsConfig {
79
84
  * @public
80
85
  */
81
86
  export interface PerpsClientOptions {
87
+ /** Integrator identifier sent in the `x-lifi-integrator` request header. */
82
88
  integrator: string
83
- /** 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/). */
84
90
  apiKey: string
85
- /** Defaults to DEFAULT_API_URL */
91
+ /** Perps API base URL; defaults to {@link DEFAULT_API_URL}. */
86
92
  apiUrl?: string
87
93
  /**
88
94
  * Provider plugins or per-provider config. Accepts the same two shapes as
@@ -117,11 +123,15 @@ export interface BuildProviderSetupParams {
117
123
  export interface PlaceOrderParams {
118
124
  provider: string
119
125
  address: Address
126
+ /** Opaque provider market reference. */
120
127
  market: MarketRef
121
128
  side: OrderSide
122
129
  type: OrderType
130
+ /** Base-asset size as a decimal wire string. */
123
131
  size: string
132
+ /** Limit price as a decimal wire string; required by limit-style orders. */
124
133
  price: string
134
+ /** Optional leverage multiplier; provider defaults apply when omitted. */
125
135
  leverage?: number
126
136
  /**
127
137
  * Margin mode the order trades under; omitted falls to the venue's cross
@@ -129,8 +139,11 @@ export interface PlaceOrderParams {
129
139
  * applies it via a prepended leverage update (requires `leverage`).
130
140
  */
131
141
  marginMode?: MarginMode
142
+ /** Whether the order may only reduce an existing position. */
132
143
  reduceOnly?: boolean
144
+ /** Time-in-force policy; provider defaults apply when omitted. */
133
145
  timeInForce?: TimeInForce
146
+ /** Optional Unix timestamp or provider wire expiry string. */
134
147
  expiresAt?: string
135
148
  takeProfit?: TriggerOrderInput
136
149
  stopLoss?: TriggerOrderInput
@@ -145,6 +158,7 @@ export interface PlaceOrderParams {
145
158
  export interface PlaceTriggerOrderParams {
146
159
  provider: string
147
160
  address: Address
161
+ /** Opaque provider market reference. */
148
162
  market: MarketRef
149
163
  side: OrderSide
150
164
  takeProfit?: TriggerOrderInput
@@ -159,6 +173,7 @@ export interface PlaceTriggerOrderParams {
159
173
  export interface WithdrawParams {
160
174
  provider: string
161
175
  address: Address
176
+ /** Provider-specific withdrawal payload, including amount/destination. */
162
177
  withdrawal: WithdrawalParams
163
178
  }
164
179
 
@@ -172,11 +187,13 @@ export interface WithdrawParams {
172
187
  export interface SendAssetActionParams {
173
188
  provider: string
174
189
  address: Address
175
- /** Canonical `Asset.id` of the asset being moved (for Hyperliquid spot
176
- * 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. */
177
191
  collateral: string
192
+ /** Source DEX/account identifier understood by the provider. */
178
193
  sourceDex: string
194
+ /** Destination DEX/account identifier understood by the provider. */
179
195
  destinationDex: string
196
+ /** Transfer amount as a provider-compatible decimal wire string. */
180
197
  amount: string
181
198
  }
182
199
 
@@ -188,10 +205,9 @@ export interface SendAssetActionParams {
188
205
  export interface CancelOrdersParams {
189
206
  provider: string
190
207
  address: Address
191
- /** Venue order ids. Venues whose ids are scoped per market (e.g. Lighter's
192
- * `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>"`. */
193
209
  ids: string[]
194
- /** 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`. */
195
211
  assetId?: string
196
212
  }
197
213
 
@@ -203,6 +219,7 @@ export interface CancelOrdersParams {
203
219
  export interface ModifyOrdersParams {
204
220
  provider: string
205
221
  address: Address
222
+ /** Provider-specific order modifications. */
206
223
  modifications: ModifyOrderInput[]
207
224
  }
208
225
 
@@ -257,9 +274,7 @@ export interface ProviderSetup {
257
274
  * Parameters for the internal `PerpsClient.executeProviderSetup` batch submit.
258
275
  */
259
276
  export interface ExecuteProviderSetupParams {
260
- /** Provider to satisfy setup for */
261
277
  provider: string
262
- /** User wallet address */
263
278
  address: Address
264
279
  /** The unsatisfied setup steps from checkSetup() */
265
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
 
@@ -43,22 +43,14 @@ import type { DepositFlow } from './deposit.js'
43
43
  */
44
44
  export interface PerpsSDKClient {
45
45
  readonly config: PerpsBaseConfig
46
- /** 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. */
47
47
  readonly userWallet?: PerpsClientSigner
48
- /** Registered providers, bound to this client, in construction order. */
48
+ /** Providers bound to this client, in registration order. */
49
49
  readonly providers: PerpsProvider[]
50
- /** Look up a registered bound {@link PerpsProvider} by its `type` key. */
50
+ /** Look up a bound provider by its wire `type` key. */
51
51
  getProvider(key: string): PerpsProvider | undefined
52
52
  }
53
53
 
54
- /**
55
- * Per-call context passed by `PerpsClient` to a provider's {@link
56
- * PerpsProvider.signActions} method. Carries the end-user's wallet (when
57
- * configured); providers that own a session credential (e.g. the Hyperliquid
58
- * agent keypair, Lighter's API key) resolve it internally.
59
- *
60
- * @public
61
- */
62
54
  /**
63
55
  * Progress for one on-chain leg of an `EVM_TX` batch (e.g. a native deposit's
64
56
  * `approve` then `deposit`). Emitted twice per leg: `submitted` once the wallet
@@ -68,19 +60,26 @@ export interface PerpsSDKClient {
68
60
  * @public
69
61
  */
70
62
  export interface SignActionProgress {
71
- /** 0-based index of this leg within the batch. */
72
63
  index: number
73
- /** Total legs in the batch. */
74
64
  total: number
75
65
  action: ActionType
76
- /** Contract function the leg invokes, e.g. `"approve"` or the deposit method. */
77
66
  functionName: string
78
67
  chainId: number
68
+ /** Whether the transaction was broadcast or its receipt confirmed. */
79
69
  status: 'submitted' | 'confirmed'
80
70
  txHash: string
81
71
  }
82
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
+ */
83
81
  export interface SignActionsContext {
82
+ /** End-user wallet used for USER-signed or EVM transaction legs. */
84
83
  userWallet?: PerpsClientSigner
85
84
  /**
86
85
  * The signing batch's declared signers, from the action's `ProviderAction`
@@ -142,8 +141,10 @@ export interface ActionSignerContribution {
142
141
  * @public
143
142
  */
144
143
  export interface LiquidationEstimateParams {
144
+ /** Entry price in quote currency per base unit. */
145
145
  entryPrice: number
146
146
  leverage: number
147
+ /** `true` for long, `false` for short. */
147
148
  isLong: boolean
148
149
  }
149
150
 
@@ -182,9 +183,11 @@ export interface ProviderGetDepositFlowParams {
182
183
  */
183
184
  export interface ProviderGetPositionsParams {
184
185
  address: Address
185
- /** Optional filter — opaque `Market.id` (not `displaySymbol`). */
186
+ /** Optional opaque `Market.id` filter (not a display symbol). */
186
187
  marketId?: string
188
+ /** Maximum items returned; provider defaults and caps apply. */
187
189
  limit?: number
190
+ /** Opaque pagination cursor from the previous response. */
188
191
  cursor?: string
189
192
  }
190
193
 
@@ -207,9 +210,11 @@ export interface ProviderGetMarketSettingsParams {
207
210
  */
208
211
  export interface ProviderGetOrdersParams {
209
212
  address: Address
210
- /** Optional filter — opaque `Market.id` (not `displaySymbol`). */
213
+ /** Optional opaque `Market.id` filter (not a display symbol). */
211
214
  marketId?: string
215
+ /** Maximum items returned; provider defaults and caps apply. */
212
216
  limit?: number
217
+ /** Opaque pagination cursor from the previous response. */
213
218
  cursor?: string
214
219
  }
215
220
 
@@ -220,6 +225,7 @@ export interface ProviderGetOrdersParams {
220
225
  */
221
226
  export interface ProviderGetOrderParams {
222
227
  address: Address
228
+ /** Venue order id, opaque to the SDK. */
223
229
  id: string
224
230
  }
225
231
 
@@ -230,9 +236,13 @@ export interface ProviderGetOrderParams {
230
236
  */
231
237
  export interface ProviderGetFillsParams {
232
238
  address: Address
239
+ /** Maximum items returned; provider defaults and caps apply. */
233
240
  limit?: number
241
+ /** Opaque pagination cursor from the previous response. */
234
242
  cursor?: string
243
+ /** Include fills at or after this Unix timestamp in milliseconds. */
235
244
  startTime?: number
245
+ /** Include fills at or before this Unix timestamp in milliseconds. */
236
246
  endTime?: number
237
247
  }
238
248
 
@@ -243,10 +253,15 @@ export interface ProviderGetFillsParams {
243
253
  */
244
254
  export interface ProviderGetActivityParams {
245
255
  address: Address
256
+ /** Maximum items returned; provider defaults and caps apply. */
246
257
  limit?: number
258
+ /** Opaque pagination cursor from the previous response. */
247
259
  cursor?: string
260
+ /** Include activity at or after this Unix timestamp in milliseconds. */
248
261
  startTime?: number
262
+ /** Include activity at or before this Unix timestamp in milliseconds. */
249
263
  endTime?: number
264
+ /** Optional filter for activity types. */
250
265
  type?: ActivityType[]
251
266
  }
252
267
 
@@ -257,11 +272,13 @@ export interface ProviderGetActivityParams {
257
272
  * @public
258
273
  */
259
274
  export interface ProviderGetQuoteParams {
260
- /** Human `displaySymbol`, e.g. `"BTC"`. Resolved against the provider's own markets, scoped by `type`. */
275
+ /** Human `displaySymbol`, resolved against this provider and `type`. */
261
276
  symbol: string
277
+ /** Trade direction used to choose asks for buys or bids for sells. */
262
278
  side: QuoteSide
263
279
  /** USD notional to fill. */
264
280
  size: number
281
+ /** Product family used to disambiguate spot and perpetual markets. */
265
282
  type: TradeType
266
283
  }
267
284
 
@@ -556,6 +573,17 @@ export interface PerpsProviderPlugin {
556
573
  * — e.g. evicting a locally stored credential the venue no longer accepts.
557
574
  */
558
575
  onExecuteResults?(address: Address, results: ActionResult[]): Promise<void>
576
+
577
+ /**
578
+ * Resolve a venue transaction hash to a block-explorer URL. Core calls it for
579
+ * every `/executeAction` result the backend returned a `txHash` on, so the
580
+ * explorer target stays provider-owned.
581
+ *
582
+ * Optional: a venue with no explorer (Ondo settles offchain) omits it, and
583
+ * results then carry the hash alone. May also return `undefined` for an
584
+ * instance whose explorer is not configured.
585
+ */
586
+ resolveExplorerLink?(txHash: string): string | undefined
559
587
  }
560
588
 
561
589
  /**
@@ -175,7 +175,9 @@ export function effectiveLeverage(params: {
175
175
  * @public
176
176
  */
177
177
  export interface ExpectedPnl {
178
+ /** Signed expected profit/loss in USD. */
178
179
  amount: number
180
+ /** Signed expected return as a percentage (10 means 10%). */
179
181
  percent: number
180
182
  }
181
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>([
@@ -1,9 +1,8 @@
1
1
  import {
2
- MarginMode,
3
2
  PerpsErrorCode,
4
3
  type Position,
5
- PositionMarginAdjustment,
6
4
  type PositionMarginConstraints,
5
+ positionSupportsMarginRemoval,
7
6
  } from '@lifi/perps-types'
8
7
  import Big from 'big.js'
9
8
  import { PerpsError } from '../errors/PerpsError.js'
@@ -66,11 +65,7 @@ export function removableIsolatedMargin({
66
65
  position,
67
66
  constraints,
68
67
  }: RemovableIsolatedMarginParams): string {
69
- if (
70
- position.marginMode !== MarginMode.ISOLATED ||
71
- position.market.positionMarginAdjustment !==
72
- PositionMarginAdjustment.ADD_AND_REMOVE
73
- ) {
68
+ if (!positionSupportsMarginRemoval(position)) {
74
69
  return '0'
75
70
  }
76
71
 
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/perps-sdk'
2
- export const version = '6.0.0'
2
+ export const version = '6.2.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
  }