@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.
- package/dist/cjs/client/PerpsClient.d.ts +1 -0
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +22 -6
- package/dist/cjs/client/PerpsClient.js.map +1 -1
- package/dist/cjs/errors/PerpsError.d.ts.map +1 -1
- package/dist/cjs/errors/PerpsError.js.map +1 -1
- package/dist/cjs/registry/assetRegistry.d.ts.map +1 -1
- package/dist/cjs/registry/assetRegistry.js.map +1 -1
- package/dist/cjs/registry/marketRegistry.d.ts.map +1 -1
- package/dist/cjs/registry/marketRegistry.js.map +1 -1
- package/dist/cjs/services/createAction.d.ts.map +1 -1
- package/dist/cjs/services/createAction.js.map +1 -1
- package/dist/cjs/services/executeAction.d.ts.map +1 -1
- package/dist/cjs/services/executeAction.js.map +1 -1
- package/dist/cjs/services/getActivity.d.ts.map +1 -1
- package/dist/cjs/services/getActivity.js.map +1 -1
- package/dist/cjs/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
- package/dist/cjs/services/getOhlcv.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/services/getPositions.d.ts.map +1 -1
- package/dist/cjs/services/getPositions.js.map +1 -1
- package/dist/cjs/services/getQuote.d.ts.map +1 -1
- package/dist/cjs/services/getQuote.js.map +1 -1
- package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -1
- package/dist/cjs/storage/parseStoredRecord.js.map +1 -1
- package/dist/cjs/storage/types.d.ts.map +1 -1
- package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/cjs/transport/fetchWithRetry.js.map +1 -1
- package/dist/cjs/transport/retryPolicy.d.ts.map +1 -1
- package/dist/cjs/transport/retryPolicy.js.map +1 -1
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/types/config.d.ts.map +1 -1
- package/dist/cjs/types/deposit.d.ts.map +1 -1
- package/dist/cjs/types/provider.d.ts +1 -0
- package/dist/cjs/types/provider.d.ts.map +1 -1
- package/dist/cjs/utils/calculations.d.ts.map +1 -1
- package/dist/cjs/utils/calculations.js.map +1 -1
- package/dist/cjs/utils/format.d.ts.map +1 -1
- package/dist/cjs/utils/format.js.map +1 -1
- package/dist/cjs/utils/orderClassification.d.ts.map +1 -1
- package/dist/cjs/utils/orderClassification.js.map +1 -1
- package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
- package/dist/cjs/utils/transferMargin.js +1 -3
- package/dist/cjs/utils/transferMargin.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
- package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -1
- package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -1
- package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -1
- package/dist/cjs/websocket/WsProviderBase.js.map +1 -1
- package/dist/cjs/websocket/cachePromise.d.ts.map +1 -1
- package/dist/cjs/websocket/cachePromise.js.map +1 -1
- package/dist/cjs/websocket/types.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.d.ts +8 -0
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +29 -6
- package/dist/esm/client/PerpsClient.js.map +1 -1
- package/dist/esm/errors/PerpsError.d.ts +7 -0
- package/dist/esm/errors/PerpsError.d.ts.map +1 -1
- package/dist/esm/errors/PerpsError.js +7 -0
- package/dist/esm/errors/PerpsError.js.map +1 -1
- package/dist/esm/registry/assetRegistry.d.ts +5 -1
- package/dist/esm/registry/assetRegistry.d.ts.map +1 -1
- package/dist/esm/registry/assetRegistry.js +5 -1
- package/dist/esm/registry/assetRegistry.js.map +1 -1
- package/dist/esm/registry/marketRegistry.d.ts +19 -5
- package/dist/esm/registry/marketRegistry.d.ts.map +1 -1
- package/dist/esm/registry/marketRegistry.js +19 -5
- package/dist/esm/registry/marketRegistry.js.map +1 -1
- package/dist/esm/services/createAction.d.ts +2 -0
- package/dist/esm/services/createAction.d.ts.map +1 -1
- package/dist/esm/services/createAction.js.map +1 -1
- package/dist/esm/services/executeAction.d.ts +2 -0
- package/dist/esm/services/executeAction.d.ts.map +1 -1
- package/dist/esm/services/executeAction.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts +4 -2
- package/dist/esm/services/getActivity.d.ts.map +1 -1
- package/dist/esm/services/getActivity.js.map +1 -1
- package/dist/esm/services/getFills.d.ts +4 -2
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/getMarkets.d.ts +1 -1
- package/dist/esm/services/getMarkets.d.ts.map +1 -1
- package/dist/esm/services/getMarketsContext.d.ts +1 -1
- package/dist/esm/services/getMarketsContext.d.ts.map +1 -1
- package/dist/esm/services/getOhlcv.d.ts +4 -3
- package/dist/esm/services/getOhlcv.d.ts.map +1 -1
- package/dist/esm/services/getOhlcv.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts +1 -0
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrderbook.d.ts +2 -2
- package/dist/esm/services/getOrderbook.d.ts.map +1 -1
- package/dist/esm/services/getOrders.d.ts +3 -1
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/services/getPositions.d.ts +3 -1
- package/dist/esm/services/getPositions.d.ts.map +1 -1
- package/dist/esm/services/getPositions.js.map +1 -1
- package/dist/esm/services/getQuote.d.ts +3 -1
- package/dist/esm/services/getQuote.d.ts.map +1 -1
- package/dist/esm/services/getQuote.js.map +1 -1
- package/dist/esm/storage/parseStoredRecord.d.ts +4 -0
- package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -1
- package/dist/esm/storage/parseStoredRecord.js +4 -0
- package/dist/esm/storage/parseStoredRecord.js.map +1 -1
- package/dist/esm/storage/types.d.ts +10 -6
- package/dist/esm/storage/types.d.ts.map +1 -1
- package/dist/esm/transport/fetchWithRetry.d.ts +3 -0
- package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/esm/transport/fetchWithRetry.js.map +1 -1
- package/dist/esm/transport/retryPolicy.d.ts +20 -0
- package/dist/esm/transport/retryPolicy.d.ts.map +1 -1
- package/dist/esm/transport/retryPolicy.js.map +1 -1
- package/dist/esm/types/api.d.ts +24 -9
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/types/config.d.ts +10 -0
- package/dist/esm/types/config.d.ts.map +1 -1
- package/dist/esm/types/deposit.d.ts +9 -3
- package/dist/esm/types/deposit.d.ts.map +1 -1
- package/dist/esm/types/provider.d.ts +44 -17
- package/dist/esm/types/provider.d.ts.map +1 -1
- package/dist/esm/utils/calculations.d.ts +2 -0
- package/dist/esm/utils/calculations.d.ts.map +1 -1
- package/dist/esm/utils/calculations.js.map +1 -1
- package/dist/esm/utils/format.d.ts +5 -1
- package/dist/esm/utils/format.d.ts.map +1 -1
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/orderClassification.d.ts +5 -0
- package/dist/esm/utils/orderClassification.d.ts.map +1 -1
- package/dist/esm/utils/orderClassification.js +5 -0
- package/dist/esm/utils/orderClassification.js.map +1 -1
- package/dist/esm/utils/transferMargin.d.ts.map +1 -1
- package/dist/esm/utils/transferMargin.js +2 -4
- package/dist/esm/utils/transferMargin.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/websocket/PerpsWsClient.d.ts +0 -1
- package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
- package/dist/esm/websocket/ReconnectingWebSocket.d.ts +5 -3
- package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -1
- package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -1
- package/dist/esm/websocket/WsProviderBase.d.ts +17 -0
- package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -1
- package/dist/esm/websocket/WsProviderBase.js +17 -0
- package/dist/esm/websocket/WsProviderBase.js.map +1 -1
- package/dist/esm/websocket/cachePromise.d.ts +2 -0
- package/dist/esm/websocket/cachePromise.d.ts.map +1 -1
- package/dist/esm/websocket/cachePromise.js +2 -0
- package/dist/esm/websocket/cachePromise.js.map +1 -1
- package/dist/esm/websocket/types.d.ts +5 -0
- package/dist/esm/websocket/types.d.ts.map +1 -1
- package/dist/types/client/PerpsClient.d.ts +8 -0
- package/dist/types/client/PerpsClient.d.ts.map +1 -1
- package/dist/types/errors/PerpsError.d.ts +7 -0
- package/dist/types/errors/PerpsError.d.ts.map +1 -1
- package/dist/types/registry/assetRegistry.d.ts +5 -1
- package/dist/types/registry/assetRegistry.d.ts.map +1 -1
- package/dist/types/registry/marketRegistry.d.ts +19 -5
- package/dist/types/registry/marketRegistry.d.ts.map +1 -1
- package/dist/types/services/createAction.d.ts +2 -0
- package/dist/types/services/createAction.d.ts.map +1 -1
- package/dist/types/services/executeAction.d.ts +2 -0
- package/dist/types/services/executeAction.d.ts.map +1 -1
- package/dist/types/services/getActivity.d.ts +4 -2
- package/dist/types/services/getActivity.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts +4 -2
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/getMarkets.d.ts +1 -1
- package/dist/types/services/getMarkets.d.ts.map +1 -1
- package/dist/types/services/getMarketsContext.d.ts +1 -1
- package/dist/types/services/getMarketsContext.d.ts.map +1 -1
- package/dist/types/services/getOhlcv.d.ts +4 -3
- package/dist/types/services/getOhlcv.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts +1 -0
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrderbook.d.ts +2 -2
- package/dist/types/services/getOrderbook.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts +3 -1
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/services/getPositions.d.ts +3 -1
- package/dist/types/services/getPositions.d.ts.map +1 -1
- package/dist/types/services/getQuote.d.ts +3 -1
- package/dist/types/services/getQuote.d.ts.map +1 -1
- package/dist/types/storage/parseStoredRecord.d.ts +4 -0
- package/dist/types/storage/parseStoredRecord.d.ts.map +1 -1
- package/dist/types/storage/types.d.ts +10 -6
- package/dist/types/storage/types.d.ts.map +1 -1
- package/dist/types/transport/fetchWithRetry.d.ts +3 -0
- package/dist/types/transport/fetchWithRetry.d.ts.map +1 -1
- package/dist/types/transport/retryPolicy.d.ts +20 -0
- package/dist/types/transport/retryPolicy.d.ts.map +1 -1
- package/dist/types/types/api.d.ts +24 -9
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/types/config.d.ts +10 -0
- package/dist/types/types/config.d.ts.map +1 -1
- package/dist/types/types/deposit.d.ts +9 -3
- package/dist/types/types/deposit.d.ts.map +1 -1
- package/dist/types/types/provider.d.ts +44 -17
- package/dist/types/types/provider.d.ts.map +1 -1
- package/dist/types/utils/calculations.d.ts +2 -0
- package/dist/types/utils/calculations.d.ts.map +1 -1
- package/dist/types/utils/format.d.ts +5 -1
- package/dist/types/utils/format.d.ts.map +1 -1
- package/dist/types/utils/orderClassification.d.ts +5 -0
- package/dist/types/utils/orderClassification.d.ts.map +1 -1
- package/dist/types/utils/transferMargin.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/websocket/PerpsWsClient.d.ts +0 -1
- package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/types/websocket/ReconnectingWebSocket.d.ts +5 -3
- package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -1
- package/dist/types/websocket/WsProviderBase.d.ts +17 -0
- package/dist/types/websocket/WsProviderBase.d.ts.map +1 -1
- package/dist/types/websocket/cachePromise.d.ts +2 -0
- package/dist/types/websocket/cachePromise.d.ts.map +1 -1
- package/dist/types/websocket/types.d.ts +5 -0
- package/dist/types/websocket/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/client/PerpsClient.ts +35 -6
- package/src/errors/PerpsError.ts +7 -0
- package/src/registry/assetRegistry.ts +5 -1
- package/src/registry/marketRegistry.ts +19 -5
- package/src/services/createAction.ts +2 -0
- package/src/services/executeAction.ts +2 -0
- package/src/services/getActivity.ts +4 -2
- package/src/services/getFills.ts +4 -2
- package/src/services/getMarkets.ts +1 -1
- package/src/services/getMarketsContext.ts +1 -1
- package/src/services/getOhlcv.ts +4 -3
- package/src/services/getOrder.ts +1 -0
- package/src/services/getOrderbook.ts +2 -2
- package/src/services/getOrders.ts +3 -1
- package/src/services/getPositions.ts +3 -1
- package/src/services/getQuote.ts +3 -1
- package/src/storage/parseStoredRecord.ts +4 -0
- package/src/storage/types.ts +10 -6
- package/src/transport/fetchWithRetry.ts +3 -0
- package/src/transport/retryPolicy.ts +20 -0
- package/src/types/api.ts +24 -9
- package/src/types/config.ts +10 -0
- package/src/types/deposit.ts +9 -3
- package/src/types/provider.ts +45 -17
- package/src/utils/calculations.ts +2 -0
- package/src/utils/format.ts +5 -1
- package/src/utils/orderClassification.ts +5 -0
- package/src/utils/transferMargin.ts +2 -7
- package/src/version.ts +1 -1
- package/src/websocket/PerpsWsClient.ts +0 -1
- package/src/websocket/ReconnectingWebSocket.ts +5 -3
- package/src/websocket/WsProviderBase.ts +17 -0
- package/src/websocket/cachePromise.ts +2 -0
- package/src/websocket/types.ts +5 -0
package/src/storage/types.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
-
/**
|
|
11
|
+
/** Read the value for `key`, or `null` when the key is absent. */
|
|
8
12
|
get(key: string): Promise<string | null>
|
|
9
|
-
/**
|
|
13
|
+
/** Persist `value` under `key`, replacing any existing value. */
|
|
10
14
|
set(key: string, value: string): Promise<void>
|
|
11
|
-
/** Remove
|
|
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
|
-
/**
|
|
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`
|
|
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.
|
|
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[]
|
package/src/types/config.ts
CHANGED
|
@@ -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
|
}
|
package/src/types/deposit.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
/**
|
|
68
|
+
/** Setup action types that must be completed, in execution order. */
|
|
63
69
|
setup: ActionType[]
|
|
64
70
|
}
|
|
65
71
|
|
package/src/types/provider.ts
CHANGED
|
@@ -43,22 +43,14 @@ import type { DepositFlow } from './deposit.js'
|
|
|
43
43
|
*/
|
|
44
44
|
export interface PerpsSDKClient {
|
|
45
45
|
readonly config: PerpsBaseConfig
|
|
46
|
-
/**
|
|
46
|
+
/** End-user wallet for USER-signed or on-chain EVM legs, when configured. */
|
|
47
47
|
readonly userWallet?: PerpsClientSigner
|
|
48
|
-
/**
|
|
48
|
+
/** Providers bound to this client, in registration order. */
|
|
49
49
|
readonly providers: PerpsProvider[]
|
|
50
|
-
/** Look up a
|
|
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
|
|
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
|
|
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`,
|
|
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
|
|
package/src/utils/format.ts
CHANGED
|
@@ -19,7 +19,11 @@ export interface FormatOptions {
|
|
|
19
19
|
rounding?: RoundingMode
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
/**
|
|
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.
|
|
2
|
+
export const version = '6.2.0'
|
|
@@ -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,
|
|
56
|
-
* force-reconnected when no inbound frame arrives within this
|
|
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,
|
package/src/websocket/types.ts
CHANGED
|
@@ -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
|
}
|