@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.
- package/dist/cjs/client/PerpsClient.d.ts +7 -1
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +10 -0
- 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/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -4
- package/dist/cjs/index.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 +2 -1
- package/dist/cjs/registry/marketRegistry.d.ts.map +1 -1
- package/dist/cjs/registry/marketRegistry.js +24 -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 +2 -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 +7 -1
- package/dist/cjs/types/provider.d.ts.map +1 -1
- package/dist/cjs/utils/calculations.d.ts +0 -5
- package/dist/cjs/utils/calculations.d.ts.map +1 -1
- package/dist/cjs/utils/calculations.js +0 -9
- 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 +7 -0
- package/dist/cjs/utils/transferMargin.d.ts.map +1 -0
- package/dist/cjs/utils/transferMargin.js +50 -0
- package/dist/cjs/utils/transferMargin.js.map +1 -0
- 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 +24 -1
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +27 -0
- 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/index.d.ts +5 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.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 +28 -6
- package/dist/esm/registry/marketRegistry.d.ts.map +1 -1
- package/dist/esm/registry/marketRegistry.js +49 -6
- 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 +31 -10
- 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 +63 -18
- package/dist/esm/types/provider.d.ts.map +1 -1
- package/dist/esm/utils/calculations.d.ts +2 -20
- package/dist/esm/utils/calculations.d.ts.map +1 -1
- package/dist/esm/utils/calculations.js +0 -23
- 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 +24 -0
- package/dist/esm/utils/transferMargin.d.ts.map +1 -0
- package/dist/esm/utils/transferMargin.js +56 -0
- package/dist/esm/utils/transferMargin.js.map +1 -0
- 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 +24 -1
- 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/index.d.ts +5 -3
- package/dist/types/index.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 +28 -6
- 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 +31 -10
- 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 +63 -18
- package/dist/types/types/provider.d.ts.map +1 -1
- package/dist/types/utils/calculations.d.ts +2 -20
- 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 +24 -0
- package/dist/types/utils/transferMargin.d.ts.map +1 -0
- 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 +39 -0
- package/src/errors/PerpsError.ts +7 -0
- package/src/index.ts +4 -1
- package/src/registry/assetRegistry.ts +5 -1
- package/src/registry/marketRegistry.ts +64 -7
- 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 +31 -9
- package/src/types/config.ts +10 -0
- package/src/types/deposit.ts +9 -3
- package/src/types/provider.ts +73 -17
- package/src/utils/calculations.ts +2 -28
- package/src/utils/format.ts +5 -1
- package/src/utils/orderClassification.ts +5 -0
- package/src/utils/transferMargin.ts +98 -0
- 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/types/provider.ts
CHANGED
|
@@ -10,11 +10,14 @@ import type {
|
|
|
10
10
|
ActivityType,
|
|
11
11
|
FillsResponse,
|
|
12
12
|
Market,
|
|
13
|
+
MarketRef,
|
|
14
|
+
MarketSettings,
|
|
13
15
|
Order,
|
|
14
16
|
OrdersResponse,
|
|
15
17
|
PerpsMarket,
|
|
16
18
|
PerpsSigner,
|
|
17
19
|
Position,
|
|
20
|
+
PositionMarginConstraints,
|
|
18
21
|
PositionsResponse,
|
|
19
22
|
ProviderAction,
|
|
20
23
|
Quote,
|
|
@@ -40,22 +43,14 @@ import type { DepositFlow } from './deposit.js'
|
|
|
40
43
|
*/
|
|
41
44
|
export interface PerpsSDKClient {
|
|
42
45
|
readonly config: PerpsBaseConfig
|
|
43
|
-
/**
|
|
46
|
+
/** End-user wallet for USER-signed or on-chain EVM legs, when configured. */
|
|
44
47
|
readonly userWallet?: PerpsClientSigner
|
|
45
|
-
/**
|
|
48
|
+
/** Providers bound to this client, in registration order. */
|
|
46
49
|
readonly providers: PerpsProvider[]
|
|
47
|
-
/** Look up a
|
|
50
|
+
/** Look up a bound provider by its wire `type` key. */
|
|
48
51
|
getProvider(key: string): PerpsProvider | undefined
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
/**
|
|
52
|
-
* Per-call context passed by `PerpsClient` to a provider's {@link
|
|
53
|
-
* PerpsProvider.signActions} method. Carries the end-user's wallet (when
|
|
54
|
-
* configured); providers that own a session credential (e.g. the Hyperliquid
|
|
55
|
-
* agent keypair, Lighter's API key) resolve it internally.
|
|
56
|
-
*
|
|
57
|
-
* @public
|
|
58
|
-
*/
|
|
59
54
|
/**
|
|
60
55
|
* Progress for one on-chain leg of an `EVM_TX` batch (e.g. a native deposit's
|
|
61
56
|
* `approve` then `deposit`). Emitted twice per leg: `submitted` once the wallet
|
|
@@ -65,19 +60,26 @@ export interface PerpsSDKClient {
|
|
|
65
60
|
* @public
|
|
66
61
|
*/
|
|
67
62
|
export interface SignActionProgress {
|
|
68
|
-
/** 0-based index of this leg within the batch. */
|
|
69
63
|
index: number
|
|
70
|
-
/** Total legs in the batch. */
|
|
71
64
|
total: number
|
|
72
65
|
action: ActionType
|
|
73
|
-
/** Contract function the leg invokes, e.g. `"approve"` or the deposit method. */
|
|
74
66
|
functionName: string
|
|
75
67
|
chainId: number
|
|
68
|
+
/** Whether the transaction was broadcast or its receipt confirmed. */
|
|
76
69
|
status: 'submitted' | 'confirmed'
|
|
77
70
|
txHash: string
|
|
78
71
|
}
|
|
79
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Per-call context passed by `PerpsClient` to a provider's
|
|
75
|
+
* {@link PerpsProviderPlugin.signActions} implementation. Carries the
|
|
76
|
+
* configured end-user wallet, descriptor-declared signer roles, an optional
|
|
77
|
+
* chain-switch helper, and an optional progress callback.
|
|
78
|
+
*
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
80
81
|
export interface SignActionsContext {
|
|
82
|
+
/** End-user wallet used for USER-signed or EVM transaction legs. */
|
|
81
83
|
userWallet?: PerpsClientSigner
|
|
82
84
|
/**
|
|
83
85
|
* The signing batch's declared signers, from the action's `ProviderAction`
|
|
@@ -139,8 +141,10 @@ export interface ActionSignerContribution {
|
|
|
139
141
|
* @public
|
|
140
142
|
*/
|
|
141
143
|
export interface LiquidationEstimateParams {
|
|
144
|
+
/** Entry price in quote currency per base unit. */
|
|
142
145
|
entryPrice: number
|
|
143
146
|
leverage: number
|
|
147
|
+
/** `true` for long, `false` for short. */
|
|
144
148
|
isLong: boolean
|
|
145
149
|
}
|
|
146
150
|
|
|
@@ -179,12 +183,26 @@ export interface ProviderGetDepositFlowParams {
|
|
|
179
183
|
*/
|
|
180
184
|
export interface ProviderGetPositionsParams {
|
|
181
185
|
address: Address
|
|
182
|
-
/** Optional
|
|
186
|
+
/** Optional opaque `Market.id` filter (not a display symbol). */
|
|
183
187
|
marketId?: string
|
|
188
|
+
/** Maximum items returned; provider defaults and caps apply. */
|
|
184
189
|
limit?: number
|
|
190
|
+
/** Opaque pagination cursor from the previous response. */
|
|
185
191
|
cursor?: string
|
|
186
192
|
}
|
|
187
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Read params for {@link PerpsProviderPlugin.getMarketSettings}.
|
|
196
|
+
*
|
|
197
|
+
* @public
|
|
198
|
+
*/
|
|
199
|
+
export interface ProviderGetMarketSettingsParams {
|
|
200
|
+
address: Address
|
|
201
|
+
/** The market's `id` and `categoryId`; the category identifies spot
|
|
202
|
+
* markets, which carry no venue leverage state. */
|
|
203
|
+
market: MarketRef
|
|
204
|
+
}
|
|
205
|
+
|
|
188
206
|
/**
|
|
189
207
|
* Read params for {@link PerpsProvider.getOrders}.
|
|
190
208
|
*
|
|
@@ -192,9 +210,11 @@ export interface ProviderGetPositionsParams {
|
|
|
192
210
|
*/
|
|
193
211
|
export interface ProviderGetOrdersParams {
|
|
194
212
|
address: Address
|
|
195
|
-
/** Optional
|
|
213
|
+
/** Optional opaque `Market.id` filter (not a display symbol). */
|
|
196
214
|
marketId?: string
|
|
215
|
+
/** Maximum items returned; provider defaults and caps apply. */
|
|
197
216
|
limit?: number
|
|
217
|
+
/** Opaque pagination cursor from the previous response. */
|
|
198
218
|
cursor?: string
|
|
199
219
|
}
|
|
200
220
|
|
|
@@ -205,6 +225,7 @@ export interface ProviderGetOrdersParams {
|
|
|
205
225
|
*/
|
|
206
226
|
export interface ProviderGetOrderParams {
|
|
207
227
|
address: Address
|
|
228
|
+
/** Venue order id, opaque to the SDK. */
|
|
208
229
|
id: string
|
|
209
230
|
}
|
|
210
231
|
|
|
@@ -215,9 +236,13 @@ export interface ProviderGetOrderParams {
|
|
|
215
236
|
*/
|
|
216
237
|
export interface ProviderGetFillsParams {
|
|
217
238
|
address: Address
|
|
239
|
+
/** Maximum items returned; provider defaults and caps apply. */
|
|
218
240
|
limit?: number
|
|
241
|
+
/** Opaque pagination cursor from the previous response. */
|
|
219
242
|
cursor?: string
|
|
243
|
+
/** Include fills at or after this Unix timestamp in milliseconds. */
|
|
220
244
|
startTime?: number
|
|
245
|
+
/** Include fills at or before this Unix timestamp in milliseconds. */
|
|
221
246
|
endTime?: number
|
|
222
247
|
}
|
|
223
248
|
|
|
@@ -228,10 +253,15 @@ export interface ProviderGetFillsParams {
|
|
|
228
253
|
*/
|
|
229
254
|
export interface ProviderGetActivityParams {
|
|
230
255
|
address: Address
|
|
256
|
+
/** Maximum items returned; provider defaults and caps apply. */
|
|
231
257
|
limit?: number
|
|
258
|
+
/** Opaque pagination cursor from the previous response. */
|
|
232
259
|
cursor?: string
|
|
260
|
+
/** Include activity at or after this Unix timestamp in milliseconds. */
|
|
233
261
|
startTime?: number
|
|
262
|
+
/** Include activity at or before this Unix timestamp in milliseconds. */
|
|
234
263
|
endTime?: number
|
|
264
|
+
/** Optional filter for activity types. */
|
|
235
265
|
type?: ActivityType[]
|
|
236
266
|
}
|
|
237
267
|
|
|
@@ -242,11 +272,13 @@ export interface ProviderGetActivityParams {
|
|
|
242
272
|
* @public
|
|
243
273
|
*/
|
|
244
274
|
export interface ProviderGetQuoteParams {
|
|
245
|
-
/** Human `displaySymbol`,
|
|
275
|
+
/** Human `displaySymbol`, resolved against this provider and `type`. */
|
|
246
276
|
symbol: string
|
|
277
|
+
/** Trade direction used to choose asks for buys or bids for sells. */
|
|
247
278
|
side: QuoteSide
|
|
248
279
|
/** USD notional to fill. */
|
|
249
280
|
size: number
|
|
281
|
+
/** Product family used to disambiguate spot and perpetual markets. */
|
|
250
282
|
type: TradeType
|
|
251
283
|
}
|
|
252
284
|
|
|
@@ -350,6 +382,18 @@ export interface PerpsProviderPlugin {
|
|
|
350
382
|
options?: SDKRequestOptions
|
|
351
383
|
): Promise<PositionsResponse>
|
|
352
384
|
|
|
385
|
+
/**
|
|
386
|
+
* The user's current venue-side settings for one market — the margin mode
|
|
387
|
+
* and leverage the next order on it will use. Optional because venues
|
|
388
|
+
* expose this unevenly: Hyperliquid reads it directly (`activeAssetData`),
|
|
389
|
+
* Lighter only reports it on an account's position row. `undefined` means
|
|
390
|
+
* the venue has nothing to read for this market.
|
|
391
|
+
*/
|
|
392
|
+
getMarketSettings?(
|
|
393
|
+
params: ProviderGetMarketSettingsParams,
|
|
394
|
+
options?: SDKRequestOptions
|
|
395
|
+
): Promise<MarketSettings | undefined>
|
|
396
|
+
|
|
353
397
|
getOrders(
|
|
354
398
|
params: ProviderGetOrdersParams,
|
|
355
399
|
options?: SDKRequestOptions
|
|
@@ -436,6 +480,18 @@ export interface PerpsProviderPlugin {
|
|
|
436
480
|
params: LiquidationEstimateParams
|
|
437
481
|
): number | undefined
|
|
438
482
|
|
|
483
|
+
/**
|
|
484
|
+
* Exact venue-owned constraints for changing `position`'s dedicated margin.
|
|
485
|
+
* Pure — providers normalize raw venue quantities onto the position before
|
|
486
|
+
* returning these inputs.
|
|
487
|
+
*
|
|
488
|
+
* @returns `undefined` when this position has no individual margin
|
|
489
|
+
* adjustment (for example a cross position or a cross-only venue).
|
|
490
|
+
*/
|
|
491
|
+
positionMarginConstraints(
|
|
492
|
+
position: Position
|
|
493
|
+
): PositionMarginConstraints | undefined
|
|
494
|
+
|
|
439
495
|
/**
|
|
440
496
|
* Project a typed {@link AccountConfig} against the provider's `setup`
|
|
441
497
|
* + `options` descriptors into `AccountConfigSetting[]`. Used by
|
|
@@ -169,41 +169,15 @@ export function effectiveLeverage(params: {
|
|
|
169
169
|
return positionValueUsd / marginUsd
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
/**
|
|
173
|
-
* Margin that can be removed from a position while keeping its leverage at or
|
|
174
|
-
* below the asset's maximum.
|
|
175
|
-
*
|
|
176
|
-
* The minimum margin to stay within `maxLeverage` is the required margin for
|
|
177
|
-
* the position's notional (see {@link calculateRequiredMargin}); anything above
|
|
178
|
-
* that is removable.
|
|
179
|
-
*
|
|
180
|
-
* @param marginUsed - Margin currently backing the position in USD
|
|
181
|
-
* @param positionValueUsd - Position notional value in USD
|
|
182
|
-
* @param maxLeverage - Maximum leverage allowed for the asset
|
|
183
|
-
* @returns Removable margin in USD (never negative); falls back to the full
|
|
184
|
-
* `marginUsed` when `maxLeverage` is zero (no constraint available)
|
|
185
|
-
* @public
|
|
186
|
-
*/
|
|
187
|
-
export function removableMargin(params: {
|
|
188
|
-
marginUsed: number
|
|
189
|
-
positionValueUsd: number
|
|
190
|
-
maxLeverage: number
|
|
191
|
-
}): number {
|
|
192
|
-
const { marginUsed, positionValueUsd, maxLeverage } = params
|
|
193
|
-
if (maxLeverage === 0) {
|
|
194
|
-
return marginUsed
|
|
195
|
-
}
|
|
196
|
-
const minMargin = calculateRequiredMargin(positionValueUsd, maxLeverage)
|
|
197
|
-
return Math.max(0, marginUsed - minMargin)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
172
|
/**
|
|
201
173
|
* Signed expected PnL for a trigger price — see {@link calculateExpectedPnl}.
|
|
202
174
|
*
|
|
203
175
|
* @public
|
|
204
176
|
*/
|
|
205
177
|
export interface ExpectedPnl {
|
|
178
|
+
/** Signed expected profit/loss in USD. */
|
|
206
179
|
amount: number
|
|
180
|
+
/** Signed expected return as a percentage (10 means 10%). */
|
|
207
181
|
percent: number
|
|
208
182
|
}
|
|
209
183
|
|
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>([
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PerpsErrorCode,
|
|
3
|
+
type Position,
|
|
4
|
+
type PositionMarginConstraints,
|
|
5
|
+
positionSupportsMarginRemoval,
|
|
6
|
+
} from '@lifi/perps-types'
|
|
7
|
+
import Big from 'big.js'
|
|
8
|
+
import { PerpsError } from '../errors/PerpsError.js'
|
|
9
|
+
|
|
10
|
+
function positionAmount(value: string, field: string): Big {
|
|
11
|
+
try {
|
|
12
|
+
return new Big(value)
|
|
13
|
+
} catch {
|
|
14
|
+
throw new PerpsError(
|
|
15
|
+
PerpsErrorCode.ValidationError,
|
|
16
|
+
`Invalid decimal string on Position.${field}: '${value}'`
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function constraintAmount(value: string, field: string): Big {
|
|
22
|
+
try {
|
|
23
|
+
return new Big(value)
|
|
24
|
+
} catch {
|
|
25
|
+
throw new PerpsError(
|
|
26
|
+
PerpsErrorCode.ValidationError,
|
|
27
|
+
`Invalid decimal string on PositionMarginConstraints.${field}: '${value}'`
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function requirePositive(value: Big, field: string): Big {
|
|
33
|
+
if (value.lte(0)) {
|
|
34
|
+
throw new PerpsError(
|
|
35
|
+
PerpsErrorCode.ValidationError,
|
|
36
|
+
`${field} must be greater than zero.`
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
return value
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Exact inputs for {@link removableIsolatedMargin}.
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export interface RemovableIsolatedMarginParams {
|
|
48
|
+
position: Position
|
|
49
|
+
constraints: PositionMarginConstraints
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Calculate margin that can be removed from an isolated position using the
|
|
54
|
+
* provider's exact retained-margin requirement. Position equity is allocated
|
|
55
|
+
* margin plus unrealized PnL.
|
|
56
|
+
*
|
|
57
|
+
* The result snaps down to the provider's accepted amount increment. Markets
|
|
58
|
+
* that are add-only and cross-margined positions return `'0'`.
|
|
59
|
+
*
|
|
60
|
+
* @throws {PerpsError} `ValidationError` for malformed, non-positive, or
|
|
61
|
+
* inconsistent risk inputs.
|
|
62
|
+
* @public
|
|
63
|
+
*/
|
|
64
|
+
export function removableIsolatedMargin({
|
|
65
|
+
position,
|
|
66
|
+
constraints,
|
|
67
|
+
}: RemovableIsolatedMarginParams): string {
|
|
68
|
+
if (!positionSupportsMarginRemoval(position)) {
|
|
69
|
+
return '0'
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const marginUsed = requirePositive(
|
|
73
|
+
positionAmount(position.marginUsed, 'marginUsed'),
|
|
74
|
+
'Position.marginUsed'
|
|
75
|
+
)
|
|
76
|
+
const unrealizedPnl = positionAmount(position.unrealizedPnl, 'unrealizedPnl')
|
|
77
|
+
const minimumMargin = requirePositive(
|
|
78
|
+
constraintAmount(
|
|
79
|
+
constraints.minimumMarginRequirement,
|
|
80
|
+
'minimumMarginRequirement'
|
|
81
|
+
),
|
|
82
|
+
'PositionMarginConstraints.minimumMarginRequirement'
|
|
83
|
+
)
|
|
84
|
+
const amountIncrement = requirePositive(
|
|
85
|
+
constraintAmount(constraints.amountIncrement, 'amountIncrement'),
|
|
86
|
+
'PositionMarginConstraints.amountIncrement'
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
const removable = marginUsed.plus(unrealizedPnl).minus(minimumMargin)
|
|
90
|
+
if (removable.lte(0)) {
|
|
91
|
+
return '0'
|
|
92
|
+
}
|
|
93
|
+
return removable
|
|
94
|
+
.div(amountIncrement)
|
|
95
|
+
.round(0, Big.roundDown)
|
|
96
|
+
.times(amountIncrement)
|
|
97
|
+
.toFixed()
|
|
98
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/perps-sdk'
|
|
2
|
-
export const version = '
|
|
2
|
+
export const version = '6.1.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
|
}
|