@lifi/perps-sdk-provider-lighter 40.0.0 → 40.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/LighterProvider.d.ts.map +1 -1
- package/dist/cjs/LighterProvider.js +2 -2
- package/dist/cjs/LighterProvider.js.map +1 -1
- package/dist/cjs/signers/LighterSigner.d.ts.map +1 -1
- package/dist/cjs/signers/LighterSigner.js +1 -20
- package/dist/cjs/signers/LighterSigner.js.map +1 -1
- package/dist/cjs/types/action.d.ts +14 -0
- package/dist/cjs/types/action.d.ts.map +1 -1
- package/dist/cjs/types/action.js +33 -1
- package/dist/cjs/types/action.js.map +1 -1
- package/dist/cjs/types/ws.d.ts +5 -0
- package/dist/cjs/types/ws.d.ts.map +1 -1
- package/dist/cjs/websocket/LighterWsProvider.d.ts +1 -0
- package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/LighterWsProvider.js +45 -11
- package/dist/cjs/websocket/LighterWsProvider.js.map +1 -1
- package/dist/esm/LighterProvider.d.ts.map +1 -1
- package/dist/esm/LighterProvider.js +2 -2
- package/dist/esm/LighterProvider.js.map +1 -1
- package/dist/esm/signers/LighterSigner.d.ts.map +1 -1
- package/dist/esm/signers/LighterSigner.js +2 -22
- package/dist/esm/signers/LighterSigner.js.map +1 -1
- package/dist/esm/types/action.d.ts +67 -0
- package/dist/esm/types/action.d.ts.map +1 -1
- package/dist/esm/types/action.js +86 -3
- package/dist/esm/types/action.js.map +1 -1
- package/dist/esm/types/ws.d.ts +12 -0
- package/dist/esm/types/ws.d.ts.map +1 -1
- package/dist/esm/websocket/LighterWsProvider.d.ts +7 -2
- package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/LighterWsProvider.js +57 -17
- package/dist/esm/websocket/LighterWsProvider.js.map +1 -1
- package/dist/types/LighterProvider.d.ts.map +1 -1
- package/dist/types/signers/LighterSigner.d.ts.map +1 -1
- package/dist/types/types/action.d.ts +67 -0
- package/dist/types/types/action.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +12 -0
- package/dist/types/types/ws.d.ts.map +1 -1
- package/dist/types/websocket/LighterWsProvider.d.ts +7 -2
- package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/LighterProvider.ts +16 -8
- package/src/signers/LighterSigner.ts +6 -23
- package/src/types/action.ts +91 -0
- package/src/types/ws.ts +14 -0
- package/src/websocket/LighterWsProvider.ts +65 -19
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ActionType } from '@lifi/perps-types';
|
|
1
2
|
/**
|
|
2
3
|
* Backend-provided params for SignCreateOrder.
|
|
3
4
|
*
|
|
@@ -232,4 +233,70 @@ export declare const LT_NIL_TRIGGER_PRICE = 0;
|
|
|
232
233
|
* @public
|
|
233
234
|
*/
|
|
234
235
|
export declare const LT_DEFAULT_ORDER_EXPIRY = -1;
|
|
236
|
+
/**
|
|
237
|
+
* Lighter tx type `TxTypeL2ChangePubKey`.
|
|
238
|
+
* @public
|
|
239
|
+
*/
|
|
240
|
+
export declare const LT_TX_TYPE_CHANGE_PUB_KEY = 8;
|
|
241
|
+
/**
|
|
242
|
+
* Lighter tx type `TxTypeL2Transfer`.
|
|
243
|
+
* @public
|
|
244
|
+
*/
|
|
245
|
+
export declare const LT_TX_TYPE_TRANSFER = 12;
|
|
246
|
+
/**
|
|
247
|
+
* Lighter tx type `TxTypeL2Withdraw`.
|
|
248
|
+
* @public
|
|
249
|
+
*/
|
|
250
|
+
export declare const LT_TX_TYPE_WITHDRAW = 13;
|
|
251
|
+
/**
|
|
252
|
+
* Lighter tx type `TxTypeL2CreateOrder`.
|
|
253
|
+
* @public
|
|
254
|
+
*/
|
|
255
|
+
export declare const LT_TX_TYPE_CREATE_ORDER = 14;
|
|
256
|
+
/**
|
|
257
|
+
* Lighter tx type `TxTypeL2CancelOrder`.
|
|
258
|
+
* @public
|
|
259
|
+
*/
|
|
260
|
+
export declare const LT_TX_TYPE_CANCEL_ORDER = 15;
|
|
261
|
+
/**
|
|
262
|
+
* Lighter tx type `TxTypeL2CancelAllOrders`.
|
|
263
|
+
* @public
|
|
264
|
+
*/
|
|
265
|
+
export declare const LT_TX_TYPE_CANCEL_ALL_ORDERS = 16;
|
|
266
|
+
/**
|
|
267
|
+
* Lighter tx type `TxTypeL2ModifyOrder`.
|
|
268
|
+
* @public
|
|
269
|
+
*/
|
|
270
|
+
export declare const LT_TX_TYPE_MODIFY_ORDER = 17;
|
|
271
|
+
/**
|
|
272
|
+
* Lighter tx type `TxTypeL2UpdateLeverage`.
|
|
273
|
+
* @public
|
|
274
|
+
*/
|
|
275
|
+
export declare const LT_TX_TYPE_UPDATE_LEVERAGE = 20;
|
|
276
|
+
/**
|
|
277
|
+
* Lighter tx type `TxTypeL2UpdateMargin`.
|
|
278
|
+
* @public
|
|
279
|
+
*/
|
|
280
|
+
export declare const LT_TX_TYPE_UPDATE_MARGIN = 29;
|
|
281
|
+
/**
|
|
282
|
+
* Lighter tx type `TxTypeL2UpdateAccountConfig`.
|
|
283
|
+
* @public
|
|
284
|
+
*/
|
|
285
|
+
export declare const LT_TX_TYPE_UPDATE_ACCOUNT_CONFIG = 41;
|
|
286
|
+
/**
|
|
287
|
+
* Lighter tx type `TxTypeL2UpdateAccountAssetConfig`.
|
|
288
|
+
* @public
|
|
289
|
+
*/
|
|
290
|
+
export declare const LT_TX_TYPE_UPDATE_ACCOUNT_ASSET_CONFIG = 42;
|
|
291
|
+
/**
|
|
292
|
+
* Lighter tx type `TxTypeL2ApproveIntegrator`.
|
|
293
|
+
* @public
|
|
294
|
+
*/
|
|
295
|
+
export declare const LT_TX_TYPE_APPROVE_INTEGRATOR = 45;
|
|
296
|
+
/**
|
|
297
|
+
* Lighter tx type of the signed tx the SDK's WASM signer emits for each
|
|
298
|
+
* action. An action without an entry has no Lighter signing path.
|
|
299
|
+
* @public
|
|
300
|
+
*/
|
|
301
|
+
export declare const LT_TX_TYPE_BY_ACTION: Readonly<Partial<Record<ActionType, number>>>;
|
|
235
302
|
//# sourceMappingURL=action.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/types/action.ts"],"names":[],"mappings":"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"}
|
package/dist/types/types/ws.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LtAccountAsset } from './account.js';
|
|
2
|
+
import type { LtCandle } from './asset.js';
|
|
2
3
|
/**
|
|
3
4
|
* Common envelope fields on every Lighter WebSocket frame.
|
|
4
5
|
*
|
|
@@ -133,6 +134,17 @@ export type LtWsTradeMessage = LtWsMessage & {
|
|
|
133
134
|
type: 'subscribed/trade' | 'update/trade';
|
|
134
135
|
trades?: LtWsTrade[];
|
|
135
136
|
};
|
|
137
|
+
/**
|
|
138
|
+
* Subscription or update frame of the public `candle/{market_id}/{resolution}`
|
|
139
|
+
* channel. The reply `channel` uses colons (`candle:1:1m`). Each bar also
|
|
140
|
+
* carries the quote volume `V` and a sequence `i`, which the SDK does not read.
|
|
141
|
+
*
|
|
142
|
+
* @public
|
|
143
|
+
*/
|
|
144
|
+
export type LtWsCandleMessage = LtWsMessage & {
|
|
145
|
+
type: 'subscribed/candle' | 'update/candle';
|
|
146
|
+
candles?: LtCandle[];
|
|
147
|
+
};
|
|
136
148
|
/**
|
|
137
149
|
* Auth-channel payloads.
|
|
138
150
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAgB1C;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,sDAAsD;IACtD,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;IAChC,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG;IACpD,IAAI,EAAE,yBAAyB,GAAG,qBAAqB,CAAA;IACvD,YAAY,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACjE,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;IAChC,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG;IACxD,IAAI,EAAE,8BAA8B,GAAG,0BAA0B,CAAA;IACjE,iBAAiB,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAC9E,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,kBAAkB,EAAE,CAAA;IAC1B,IAAI,EAAE,kBAAkB,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC/C,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAAA;IACnD,UAAU,EAAE,aAAa,CAAA;CAC1B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAA;IACzC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;CACrB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,IAAI,EAAE,mBAAmB,GAAG,eAAe,CAAA;IAC3C,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG;IACtD,IAAI,EAAE,+BAA+B,GAAG,2BAA2B,CAAA;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAA;IAC9C,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAA;KAAE,CAAA;CAC1D,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG;IACtD,IAAI,EAAE,+BAA+B,GAAG,2BAA2B,CAAA;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAA;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAA;KAAE,CAAA;CAC1D,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC/C,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,WAAW,CAAC,EAAE;YACZ,UAAU,EAAE,MAAM,CAAA;YAClB,eAAe,EAAE,MAAM,CAAA;YACvB,iBAAiB,EAAE,MAAM,CAAA;SAC1B,CAAA;KACF,CAAA;CACF,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAChD,IAAI,EACA,wBAAwB,GACxB,oBAAoB,GACpB,+BAA+B,GAC/B,2BAA2B,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC,GACxE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAClD,GAAG,IAAI,CAAA;CACT,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG,WAAW,GAAG;IACzD,IAAI,EAAE,kCAAkC,GAAG,8BAA8B,CAAA;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAC/C,CAAA"}
|
|
@@ -42,8 +42,8 @@ export interface LighterWsProviderOptions {
|
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Lighter WebSocket provider (extends {@link WsProviderBase}): subscribes to
|
|
45
|
-
* Lighter's WS channels (orderbook, marketsContext, orders,
|
|
46
|
-
* tokens to gated channels. Construct via {@link lighterWsProvider}.
|
|
45
|
+
* Lighter's WS channels (orderbook, candle, marketsContext, orders,
|
|
46
|
+
* positions), attaching auth tokens to gated channels. Construct via {@link lighterWsProvider}.
|
|
47
47
|
*
|
|
48
48
|
* @public
|
|
49
49
|
*/
|
|
@@ -123,6 +123,11 @@ export declare class LighterWsProvider extends WsProviderBase<SubState> {
|
|
|
123
123
|
private handleMarketStats;
|
|
124
124
|
private handleOrderBook;
|
|
125
125
|
private handleTrades;
|
|
126
|
+
/**
|
|
127
|
+
* One emit per bar. The reply channel (`candle:1:1m`) names the interval,
|
|
128
|
+
* because Lighter resolution strings equal the `OhlcvInterval` values.
|
|
129
|
+
*/
|
|
130
|
+
private handleCandles;
|
|
126
131
|
private marketIdFromChannel;
|
|
127
132
|
}
|
|
128
133
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/LighterWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"LighterWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/LighterWsProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-lighter",
|
|
3
|
-
"version": "40.
|
|
3
|
+
"version": "40.2.0",
|
|
4
4
|
"description": "Lighter provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@lifi/perps-types": "^24.0.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@lifi/perps-sdk": "^27.
|
|
50
|
+
"@lifi/perps-sdk": "^27.2.0"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
package/src/LighterProvider.ts
CHANGED
|
@@ -1000,12 +1000,16 @@ export const createLighterProvider = (
|
|
|
1000
1000
|
const limits =
|
|
1001
1001
|
token === undefined
|
|
1002
1002
|
? undefined
|
|
1003
|
-
: await
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1003
|
+
: await retryWithStandardToken(
|
|
1004
|
+
address,
|
|
1005
|
+
localKey,
|
|
1006
|
+
token,
|
|
1007
|
+
(resolvedToken) =>
|
|
1008
|
+
fetchAccountLimits(
|
|
1009
|
+
apiClient(),
|
|
1010
|
+
localKey.accountIndex,
|
|
1011
|
+
resolvedToken
|
|
1012
|
+
)
|
|
1009
1013
|
)
|
|
1010
1014
|
userTierName = limits?.user_tier_name
|
|
1011
1015
|
} catch (err) {
|
|
@@ -1082,8 +1086,12 @@ export const createLighterProvider = (
|
|
|
1082
1086
|
getMarketsContext(requireClient(), { provider: providerKey }, opts),
|
|
1083
1087
|
token === undefined
|
|
1084
1088
|
? Promise.resolve(undefined)
|
|
1085
|
-
:
|
|
1086
|
-
|
|
1089
|
+
: retryWithStandardToken(
|
|
1090
|
+
params.address,
|
|
1091
|
+
localKey,
|
|
1092
|
+
token,
|
|
1093
|
+
(resolvedToken) =>
|
|
1094
|
+
fetchAccountLimits(client, account.index, resolvedToken)
|
|
1087
1095
|
),
|
|
1088
1096
|
apiKeyRegistered
|
|
1089
1097
|
? readOnlyTokenManager.get(params.address, localKey.accountIndex)
|
|
@@ -4,7 +4,11 @@ import {
|
|
|
4
4
|
PerpsError,
|
|
5
5
|
} from '@lifi/perps-sdk'
|
|
6
6
|
import { ActionType, PerpsErrorCode } from '@lifi/perps-types'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
LT_ROUTE_PERP,
|
|
9
|
+
LT_ROUTE_SPOT,
|
|
10
|
+
LT_TX_TYPE_BY_ACTION,
|
|
11
|
+
} from '../types/action.js'
|
|
8
12
|
import { assetMarginModeInt } from '../utils/assetCollateral.js'
|
|
9
13
|
import {
|
|
10
14
|
callLighterWasm,
|
|
@@ -78,27 +82,6 @@ export type LighterL1CountersignedAction =
|
|
|
78
82
|
| ActionType.APPROVE_INTEGRATOR
|
|
79
83
|
| ActionType.TRANSFER
|
|
80
84
|
|
|
81
|
-
// lighter-go `types/txtypes/constants.go`.
|
|
82
|
-
const TX_TYPE_BY_ACTION: Partial<Record<ActionType, number>> = {
|
|
83
|
-
[ActionType.REGISTER_API_KEY]: 8,
|
|
84
|
-
[ActionType.TRANSFER]: 12,
|
|
85
|
-
[ActionType.SEND_ASSET]: 12,
|
|
86
|
-
[ActionType.WITHDRAWAL]: 13,
|
|
87
|
-
[ActionType.PLACE_ORDER]: 14,
|
|
88
|
-
[ActionType.PLACE_TRIGGER_ORDER]: 14,
|
|
89
|
-
[ActionType.PLACE_TWAP_ORDER]: 14,
|
|
90
|
-
[ActionType.CANCEL_ORDER]: 15,
|
|
91
|
-
[ActionType.CANCEL_TWAP_ORDER]: 15,
|
|
92
|
-
[ActionType.CANCEL_ALL_ORDERS]: 16,
|
|
93
|
-
[ActionType.MODIFY_ORDER]: 17,
|
|
94
|
-
[ActionType.UPDATE_LEVERAGE]: 20,
|
|
95
|
-
[ActionType.UPDATE_POSITION_MARGIN]: 29,
|
|
96
|
-
[ActionType.ACCOUNT_MODE]: 41,
|
|
97
|
-
[ActionType.UPDATE_ASSET_COLLATERAL]: 42,
|
|
98
|
-
[ActionType.APPROVE_INTEGRATOR]: 45,
|
|
99
|
-
[ActionType.REVOKE_INTEGRATOR]: 45,
|
|
100
|
-
}
|
|
101
|
-
|
|
102
85
|
// Nil sentinels from lighter-go `types/txtypes/constants.go`: the Go side
|
|
103
86
|
// leaves the matching `L2TxAttributes` entry unset.
|
|
104
87
|
const NIL_INTEGRATOR_INDEX = 0
|
|
@@ -389,7 +372,7 @@ export class LighterSigner {
|
|
|
389
372
|
skipNonce: boolean,
|
|
390
373
|
call: LighterWasmCall<LighterWasmTx>
|
|
391
374
|
): Promise<LighterSignedBlob> {
|
|
392
|
-
const txType =
|
|
375
|
+
const txType = LT_TX_TYPE_BY_ACTION[action]
|
|
393
376
|
if (txType === undefined) {
|
|
394
377
|
throw new PerpsError(
|
|
395
378
|
PerpsErrorCode.ValidationError,
|
package/src/types/action.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ActionType } from '@lifi/perps-types'
|
|
2
|
+
|
|
1
3
|
// Shapes of `wasmSignParams` per action. The backend populates these and the
|
|
2
4
|
// SDK passes them to the WASM signer alongside SDK-managed fields (nonce,
|
|
3
5
|
// account_index, api_key_index).
|
|
@@ -252,3 +254,92 @@ export const LT_NIL_TRIGGER_PRICE = 0
|
|
|
252
254
|
* @public
|
|
253
255
|
*/
|
|
254
256
|
export const LT_DEFAULT_ORDER_EXPIRY = -1
|
|
257
|
+
|
|
258
|
+
// Tx type values from lighter-go `types/txtypes/constants.go`.
|
|
259
|
+
/**
|
|
260
|
+
* Lighter tx type `TxTypeL2ChangePubKey`.
|
|
261
|
+
* @public
|
|
262
|
+
*/
|
|
263
|
+
export const LT_TX_TYPE_CHANGE_PUB_KEY = 8
|
|
264
|
+
/**
|
|
265
|
+
* Lighter tx type `TxTypeL2Transfer`.
|
|
266
|
+
* @public
|
|
267
|
+
*/
|
|
268
|
+
export const LT_TX_TYPE_TRANSFER = 12
|
|
269
|
+
/**
|
|
270
|
+
* Lighter tx type `TxTypeL2Withdraw`.
|
|
271
|
+
* @public
|
|
272
|
+
*/
|
|
273
|
+
export const LT_TX_TYPE_WITHDRAW = 13
|
|
274
|
+
/**
|
|
275
|
+
* Lighter tx type `TxTypeL2CreateOrder`.
|
|
276
|
+
* @public
|
|
277
|
+
*/
|
|
278
|
+
export const LT_TX_TYPE_CREATE_ORDER = 14
|
|
279
|
+
/**
|
|
280
|
+
* Lighter tx type `TxTypeL2CancelOrder`.
|
|
281
|
+
* @public
|
|
282
|
+
*/
|
|
283
|
+
export const LT_TX_TYPE_CANCEL_ORDER = 15
|
|
284
|
+
/**
|
|
285
|
+
* Lighter tx type `TxTypeL2CancelAllOrders`.
|
|
286
|
+
* @public
|
|
287
|
+
*/
|
|
288
|
+
export const LT_TX_TYPE_CANCEL_ALL_ORDERS = 16
|
|
289
|
+
/**
|
|
290
|
+
* Lighter tx type `TxTypeL2ModifyOrder`.
|
|
291
|
+
* @public
|
|
292
|
+
*/
|
|
293
|
+
export const LT_TX_TYPE_MODIFY_ORDER = 17
|
|
294
|
+
/**
|
|
295
|
+
* Lighter tx type `TxTypeL2UpdateLeverage`.
|
|
296
|
+
* @public
|
|
297
|
+
*/
|
|
298
|
+
export const LT_TX_TYPE_UPDATE_LEVERAGE = 20
|
|
299
|
+
/**
|
|
300
|
+
* Lighter tx type `TxTypeL2UpdateMargin`.
|
|
301
|
+
* @public
|
|
302
|
+
*/
|
|
303
|
+
export const LT_TX_TYPE_UPDATE_MARGIN = 29
|
|
304
|
+
/**
|
|
305
|
+
* Lighter tx type `TxTypeL2UpdateAccountConfig`.
|
|
306
|
+
* @public
|
|
307
|
+
*/
|
|
308
|
+
export const LT_TX_TYPE_UPDATE_ACCOUNT_CONFIG = 41
|
|
309
|
+
/**
|
|
310
|
+
* Lighter tx type `TxTypeL2UpdateAccountAssetConfig`.
|
|
311
|
+
* @public
|
|
312
|
+
*/
|
|
313
|
+
export const LT_TX_TYPE_UPDATE_ACCOUNT_ASSET_CONFIG = 42
|
|
314
|
+
/**
|
|
315
|
+
* Lighter tx type `TxTypeL2ApproveIntegrator`.
|
|
316
|
+
* @public
|
|
317
|
+
*/
|
|
318
|
+
export const LT_TX_TYPE_APPROVE_INTEGRATOR = 45
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Lighter tx type of the signed tx the SDK's WASM signer emits for each
|
|
322
|
+
* action. An action without an entry has no Lighter signing path.
|
|
323
|
+
* @public
|
|
324
|
+
*/
|
|
325
|
+
export const LT_TX_TYPE_BY_ACTION: Readonly<
|
|
326
|
+
Partial<Record<ActionType, number>>
|
|
327
|
+
> = Object.freeze({
|
|
328
|
+
[ActionType.REGISTER_API_KEY]: LT_TX_TYPE_CHANGE_PUB_KEY,
|
|
329
|
+
[ActionType.TRANSFER]: LT_TX_TYPE_TRANSFER,
|
|
330
|
+
[ActionType.SEND_ASSET]: LT_TX_TYPE_TRANSFER,
|
|
331
|
+
[ActionType.WITHDRAWAL]: LT_TX_TYPE_WITHDRAW,
|
|
332
|
+
[ActionType.PLACE_ORDER]: LT_TX_TYPE_CREATE_ORDER,
|
|
333
|
+
[ActionType.PLACE_TRIGGER_ORDER]: LT_TX_TYPE_CREATE_ORDER,
|
|
334
|
+
[ActionType.PLACE_TWAP_ORDER]: LT_TX_TYPE_CREATE_ORDER,
|
|
335
|
+
[ActionType.CANCEL_ORDER]: LT_TX_TYPE_CANCEL_ORDER,
|
|
336
|
+
[ActionType.CANCEL_TWAP_ORDER]: LT_TX_TYPE_CANCEL_ORDER,
|
|
337
|
+
[ActionType.CANCEL_ALL_ORDERS]: LT_TX_TYPE_CANCEL_ALL_ORDERS,
|
|
338
|
+
[ActionType.MODIFY_ORDER]: LT_TX_TYPE_MODIFY_ORDER,
|
|
339
|
+
[ActionType.UPDATE_LEVERAGE]: LT_TX_TYPE_UPDATE_LEVERAGE,
|
|
340
|
+
[ActionType.UPDATE_POSITION_MARGIN]: LT_TX_TYPE_UPDATE_MARGIN,
|
|
341
|
+
[ActionType.ACCOUNT_MODE]: LT_TX_TYPE_UPDATE_ACCOUNT_CONFIG,
|
|
342
|
+
[ActionType.UPDATE_ASSET_COLLATERAL]: LT_TX_TYPE_UPDATE_ACCOUNT_ASSET_CONFIG,
|
|
343
|
+
[ActionType.APPROVE_INTEGRATOR]: LT_TX_TYPE_APPROVE_INTEGRATOR,
|
|
344
|
+
[ActionType.REVOKE_INTEGRATOR]: LT_TX_TYPE_APPROVE_INTEGRATOR,
|
|
345
|
+
})
|
package/src/types/ws.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LtAccountAsset } from './account.js'
|
|
2
|
+
import type { LtCandle } from './asset.js'
|
|
2
3
|
|
|
3
4
|
// The Lighter stream server sends JSON messages of shape:
|
|
4
5
|
// { type: 'subscribed/<channel>' | 'update/<channel>' | 'ping',
|
|
@@ -11,6 +12,7 @@ import type { LtAccountAsset } from './account.js'
|
|
|
11
12
|
// - spot_market_stats/all → context across all spot markets
|
|
12
13
|
// - spot_market_stats/{id} → context for one spot market
|
|
13
14
|
// - order_book/{market_id} → bids/asks per market (stateful with deltas)
|
|
15
|
+
// - candle/{market_id}/{resolution} → OHLCV bars per market and resolution
|
|
14
16
|
// - account_all/{account} → per-asset spot and margin-route balances
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -156,6 +158,18 @@ export type LtWsTradeMessage = LtWsMessage & {
|
|
|
156
158
|
trades?: LtWsTrade[]
|
|
157
159
|
}
|
|
158
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Subscription or update frame of the public `candle/{market_id}/{resolution}`
|
|
163
|
+
* channel. The reply `channel` uses colons (`candle:1:1m`). Each bar also
|
|
164
|
+
* carries the quote volume `V` and a sequence `i`, which the SDK does not read.
|
|
165
|
+
*
|
|
166
|
+
* @public
|
|
167
|
+
*/
|
|
168
|
+
export type LtWsCandleMessage = LtWsMessage & {
|
|
169
|
+
type: 'subscribed/candle' | 'update/candle'
|
|
170
|
+
candles?: LtCandle[]
|
|
171
|
+
}
|
|
172
|
+
|
|
159
173
|
/**
|
|
160
174
|
* Auth-channel payloads.
|
|
161
175
|
*
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
getMarketRegistry,
|
|
6
6
|
isDecimalStringGreaterThan,
|
|
7
7
|
type MarketRegistry,
|
|
8
|
+
numberToDecimalString,
|
|
8
9
|
PerpsError,
|
|
9
10
|
type PerpsProvider,
|
|
10
11
|
type PerpsSDKClient,
|
|
@@ -51,6 +52,7 @@ import type {
|
|
|
51
52
|
LtWsAccountAllOrdersMessage,
|
|
52
53
|
LtWsAccountAllPositionsMessage,
|
|
53
54
|
LtWsAccountAllTradesMessage,
|
|
55
|
+
LtWsCandleMessage,
|
|
54
56
|
LtWsMarketStats,
|
|
55
57
|
LtWsMarketStatsAllMessage,
|
|
56
58
|
LtWsMessage,
|
|
@@ -65,6 +67,7 @@ import {
|
|
|
65
67
|
fetchDetailedAccount,
|
|
66
68
|
isOpenPosition,
|
|
67
69
|
mapFill,
|
|
70
|
+
mapInterval,
|
|
68
71
|
mapMarketContext,
|
|
69
72
|
mapOrderUpdates,
|
|
70
73
|
mapPosition,
|
|
@@ -74,8 +77,9 @@ import { askOrder, bidOrder, OrderBookSide } from './orderBookSide.js'
|
|
|
74
77
|
|
|
75
78
|
// Public channels: `marketsContext` (market_stats/all + spot_market_stats/all),
|
|
76
79
|
// `marketContext` (market_stats/N or spot_market_stats/N), `orderbook`
|
|
77
|
-
// (order_book/N), `trades` (trade/N), `
|
|
78
|
-
// account_all/N, priced by the
|
|
80
|
+
// (order_book/N), `trades` (trade/N), `candle` (candle/N/resolution),
|
|
81
|
+
// `accountSummary` (user_stats/N + account_all/N, priced by the
|
|
82
|
+
// `marketsContext` spot marks).
|
|
79
83
|
// Authenticated channels (resolve an auth token per subscribe send):
|
|
80
84
|
// - orderUpdates → account_all_orders/{account_index}
|
|
81
85
|
// - fills → account_all_trades/{account_index}
|
|
@@ -228,8 +232,8 @@ const safeHeldPortfolioValue = createSafeFunction(
|
|
|
228
232
|
|
|
229
233
|
/**
|
|
230
234
|
* Lighter WebSocket provider (extends {@link WsProviderBase}): subscribes to
|
|
231
|
-
* Lighter's WS channels (orderbook, marketsContext, orders,
|
|
232
|
-
* tokens to gated channels. Construct via {@link lighterWsProvider}.
|
|
235
|
+
* Lighter's WS channels (orderbook, candle, marketsContext, orders,
|
|
236
|
+
* positions), attaching auth tokens to gated channels. Construct via {@link lighterWsProvider}.
|
|
233
237
|
*
|
|
234
238
|
* @public
|
|
235
239
|
*/
|
|
@@ -488,6 +492,7 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
|
|
|
488
492
|
case 'accountSummary':
|
|
489
493
|
return `accountSummary:${sub.address.toLowerCase()}`
|
|
490
494
|
case 'candle':
|
|
495
|
+
return `candle:${sub.marketId}:${sub.interval}`
|
|
491
496
|
case 'spotBalances':
|
|
492
497
|
case 'availableToTrade':
|
|
493
498
|
throw new Error(`Lighter WS does not support channel: ${sub.channel}.`)
|
|
@@ -528,25 +533,18 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
|
|
|
528
533
|
return [{ channel: `${prefix}/${market.id}`, needsAuth: false }]
|
|
529
534
|
}
|
|
530
535
|
if (sub.channel === 'orderbook') {
|
|
531
|
-
const id =
|
|
532
|
-
if (!Number.isFinite(id)) {
|
|
533
|
-
throw new Error(
|
|
534
|
-
`Lighter WS: unknown market for marketId '${sub.marketId}'. ` +
|
|
535
|
-
'MarketId must be a numeric market_id string.'
|
|
536
|
-
)
|
|
537
|
-
}
|
|
536
|
+
const id = numericMarketId(sub.marketId)
|
|
538
537
|
return [{ channel: `order_book/${id}`, needsAuth: false }]
|
|
539
538
|
}
|
|
540
539
|
if (sub.channel === 'trades') {
|
|
541
|
-
const id =
|
|
542
|
-
if (!Number.isFinite(id)) {
|
|
543
|
-
throw new Error(
|
|
544
|
-
`Lighter WS: unknown market for marketId '${sub.marketId}'. ` +
|
|
545
|
-
'MarketId must be a numeric market_id string.'
|
|
546
|
-
)
|
|
547
|
-
}
|
|
540
|
+
const id = numericMarketId(sub.marketId)
|
|
548
541
|
return [{ channel: `trade/${id}`, needsAuth: false }]
|
|
549
542
|
}
|
|
543
|
+
if (sub.channel === 'candle') {
|
|
544
|
+
const id = numericMarketId(sub.marketId)
|
|
545
|
+
const resolution = mapInterval(sub.interval)
|
|
546
|
+
return [{ channel: `candle/${id}/${resolution}`, needsAuth: false }]
|
|
547
|
+
}
|
|
550
548
|
if (sub.channel === 'accountSummary') {
|
|
551
549
|
// Rejects the subscribe for a provider key with no settlement asset,
|
|
552
550
|
// instead of every later frame.
|
|
@@ -691,6 +689,11 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
|
|
|
691
689
|
return
|
|
692
690
|
}
|
|
693
691
|
|
|
692
|
+
if (msg.type === 'subscribed/candle' || msg.type === 'update/candle') {
|
|
693
|
+
this.handleCandles(msg as LtWsCandleMessage)
|
|
694
|
+
return
|
|
695
|
+
}
|
|
696
|
+
|
|
694
697
|
if (
|
|
695
698
|
msg.type === 'subscribed/account_all_orders' ||
|
|
696
699
|
msg.type === 'update/account_all_orders'
|
|
@@ -1103,6 +1106,37 @@ export class LighterWsProvider extends WsProviderBase<SubState> {
|
|
|
1103
1106
|
})
|
|
1104
1107
|
}
|
|
1105
1108
|
|
|
1109
|
+
/**
|
|
1110
|
+
* One emit per bar. The reply channel (`candle:1:1m`) names the interval,
|
|
1111
|
+
* because Lighter resolution strings equal the `OhlcvInterval` values.
|
|
1112
|
+
*/
|
|
1113
|
+
private handleCandles(msg: LtWsCandleMessage): void {
|
|
1114
|
+
const [prefix, rawMarketId, interval] = msg.channel?.split(/[:/]/) ?? []
|
|
1115
|
+
const marketId = Number(rawMarketId)
|
|
1116
|
+
if (
|
|
1117
|
+
prefix !== 'candle' ||
|
|
1118
|
+
!rawMarketId ||
|
|
1119
|
+
!Number.isFinite(marketId) ||
|
|
1120
|
+
!interval
|
|
1121
|
+
) {
|
|
1122
|
+
return
|
|
1123
|
+
}
|
|
1124
|
+
const key = `candle:${marketId}:${interval}`
|
|
1125
|
+
for (const bar of msg.candles ?? []) {
|
|
1126
|
+
this.emit(key, {
|
|
1127
|
+
channel: 'candle',
|
|
1128
|
+
data: {
|
|
1129
|
+
t: bar.t,
|
|
1130
|
+
o: numberToDecimalString(bar.o),
|
|
1131
|
+
h: numberToDecimalString(bar.h),
|
|
1132
|
+
l: numberToDecimalString(bar.l),
|
|
1133
|
+
c: numberToDecimalString(bar.c),
|
|
1134
|
+
v: numberToDecimalString(bar.v),
|
|
1135
|
+
},
|
|
1136
|
+
})
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1106
1140
|
private marketIdFromChannel(
|
|
1107
1141
|
channel: string | undefined,
|
|
1108
1142
|
prefix = 'order_book'
|
|
@@ -1133,6 +1167,18 @@ function hasAuthTokenResolver(
|
|
|
1133
1167
|
)
|
|
1134
1168
|
}
|
|
1135
1169
|
|
|
1170
|
+
/** The numeric Lighter `market_id` of a public-channel subscription. */
|
|
1171
|
+
function numericMarketId(marketId: string): number {
|
|
1172
|
+
const id = Number(marketId)
|
|
1173
|
+
if (!Number.isFinite(id)) {
|
|
1174
|
+
throw new Error(
|
|
1175
|
+
`Lighter WS: unknown market for marketId '${marketId}'. ` +
|
|
1176
|
+
'MarketId must be a numeric market_id string.'
|
|
1177
|
+
)
|
|
1178
|
+
}
|
|
1179
|
+
return id
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1136
1182
|
const isObject = (v: unknown): v is Record<string, unknown> =>
|
|
1137
1183
|
typeof v === 'object' && v !== null
|
|
1138
1184
|
|
|
@@ -1238,5 +1284,5 @@ export const lighterWsProvider = (
|
|
|
1238
1284
|
Object.assign(
|
|
1239
1285
|
({ provider, wsUrl, client }: WsProviderFactoryParams) =>
|
|
1240
1286
|
new LighterWsProvider(wsUrl, provider, options, client),
|
|
1241
|
-
{ streamsCandles:
|
|
1287
|
+
{ streamsCandles: true, streamsAvailableToTrade: false }
|
|
1242
1288
|
)
|