@lifi/perps-sdk-provider-lighter 24.0.2 → 26.0.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/README.md +55 -0
- package/dist/cjs/LighterProvider.d.ts.map +1 -1
- package/dist/cjs/LighterProvider.js +71 -56
- package/dist/cjs/LighterProvider.js.map +1 -1
- package/dist/cjs/accountConfig.d.ts.map +1 -1
- package/dist/cjs/accountConfig.js +1 -7
- package/dist/cjs/accountConfig.js.map +1 -1
- package/dist/cjs/constants.d.ts +2 -0
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +3 -0
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/signers/LighterSigner.d.ts.map +1 -1
- package/dist/cjs/signers/LighterSigner.js +2 -1
- package/dist/cjs/signers/LighterSigner.js.map +1 -1
- package/dist/cjs/types/submit.d.ts.map +1 -1
- package/dist/cjs/utils/activityCursor.d.ts.map +1 -1
- package/dist/cjs/utils/activityCursor.js +29 -6
- package/dist/cjs/utils/activityCursor.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -1
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +2 -7
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/mapFill.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.js +4 -2
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapOrder.d.ts +4 -11
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
- package/dist/cjs/utils/mapOrder.js +112 -120
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/txHash.d.ts +2 -0
- package/dist/cjs/utils/txHash.d.ts.map +1 -0
- package/dist/cjs/utils/txHash.js +10 -0
- package/dist/cjs/utils/txHash.js.map +1 -0
- package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/LighterWsProvider.js +11 -9
- package/dist/cjs/websocket/LighterWsProvider.js.map +1 -1
- package/dist/esm/LighterProvider.d.ts.map +1 -1
- package/dist/esm/LighterProvider.js +78 -65
- package/dist/esm/LighterProvider.js.map +1 -1
- package/dist/esm/accountConfig.d.ts.map +1 -1
- package/dist/esm/accountConfig.js +5 -16
- package/dist/esm/accountConfig.js.map +1 -1
- package/dist/esm/constants.d.ts +9 -3
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +6 -3
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/signers/LighterSigner.d.ts.map +1 -1
- package/dist/esm/signers/LighterSigner.js +2 -1
- package/dist/esm/signers/LighterSigner.js.map +1 -1
- package/dist/esm/types/submit.d.ts +16 -6
- package/dist/esm/types/submit.d.ts.map +1 -1
- package/dist/esm/types/ws.d.ts +1 -1
- package/dist/esm/utils/activityCursor.d.ts +2 -11
- package/dist/esm/utils/activityCursor.d.ts.map +1 -1
- package/dist/esm/utils/activityCursor.js +35 -7
- package/dist/esm/utils/activityCursor.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/mapFill.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.js +5 -3
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapOrder.d.ts +6 -68
- package/dist/esm/utils/mapOrder.d.ts.map +1 -1
- package/dist/esm/utils/mapOrder.js +111 -180
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/txHash.d.ts +8 -0
- package/dist/esm/utils/txHash.d.ts.map +1 -0
- package/dist/esm/utils/txHash.js +18 -0
- package/dist/esm/utils/txHash.js.map +1 -0
- package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/LighterWsProvider.js +20 -16
- package/dist/esm/websocket/LighterWsProvider.js.map +1 -1
- package/dist/types/LighterProvider.d.ts.map +1 -1
- package/dist/types/accountConfig.d.ts.map +1 -1
- package/dist/types/constants.d.ts +9 -3
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/signers/LighterSigner.d.ts.map +1 -1
- package/dist/types/types/submit.d.ts +16 -6
- package/dist/types/types/submit.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +1 -1
- package/dist/types/utils/activityCursor.d.ts +2 -11
- package/dist/types/utils/activityCursor.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/mapFill.d.ts.map +1 -1
- package/dist/types/utils/mapOrder.d.ts +6 -68
- package/dist/types/utils/mapOrder.d.ts.map +1 -1
- package/dist/types/utils/txHash.d.ts +8 -0
- package/dist/types/utils/txHash.d.ts.map +1 -0
- package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/wasm/lighter-signer.wasm +0 -0
- package/package.json +3 -3
- package/src/LighterProvider.ts +87 -98
- package/src/accountConfig.ts +5 -18
- package/src/constants.ts +11 -3
- package/src/signers/LighterSigner.ts +2 -0
- package/src/types/submit.ts +16 -6
- package/src/types/ws.ts +1 -1
- package/src/utils/activityCursor.ts +50 -18
- package/src/utils/index.ts +1 -9
- package/src/utils/mapFill.ts +5 -8
- package/src/utils/mapOrder.ts +130 -207
- package/src/utils/txHash.ts +20 -0
- package/src/websocket/LighterWsProvider.ts +22 -17
- package/dist/cjs/utils/mapTwap.d.ts +0 -4
- package/dist/cjs/utils/mapTwap.d.ts.map +0 -1
- package/dist/cjs/utils/mapTwap.js +0 -31
- package/dist/cjs/utils/mapTwap.js.map +0 -1
- package/dist/esm/utils/mapTwap.d.ts +0 -5
- package/dist/esm/utils/mapTwap.d.ts.map +0 -1
- package/dist/esm/utils/mapTwap.js +0 -25
- package/dist/esm/utils/mapTwap.js.map +0 -1
- package/dist/types/utils/mapTwap.d.ts +0 -5
- package/dist/types/utils/mapTwap.d.ts.map +0 -1
- package/src/utils/mapTwap.ts +0 -31
|
@@ -9,7 +9,7 @@ export { estimateLiquidationPrice } from './liquidation.js';
|
|
|
9
9
|
export { mapFill } from './mapFill.js';
|
|
10
10
|
export { mapMarketContext } from './mapMarketContext.js';
|
|
11
11
|
export { mapOpenPositions } from './mapOpenPositions.js';
|
|
12
|
-
export {
|
|
12
|
+
export { mapOrder, mapOrderUpdates } from './mapOrder.js';
|
|
13
13
|
export { mapPortfolioHistory } from './mapPortfolioHistory.js';
|
|
14
14
|
export { leverageFromImf, mapPosition } from './mapPosition.js';
|
|
15
15
|
export { mapMarketOrderLimits } from './marketLimits.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -11,7 +11,7 @@ export { estimateLiquidationPrice } from './liquidation.js';
|
|
|
11
11
|
export { mapFill } from './mapFill.js';
|
|
12
12
|
export { mapMarketContext } from './mapMarketContext.js';
|
|
13
13
|
export { mapOpenPositions } from './mapOpenPositions.js';
|
|
14
|
-
export {
|
|
14
|
+
export { mapOrder, mapOrderUpdates } from './mapOrder.js';
|
|
15
15
|
export { mapPortfolioHistory } from './mapPortfolioHistory.js';
|
|
16
16
|
export { leverageFromImf, mapPosition } from './mapPosition.js';
|
|
17
17
|
export { mapMarketOrderLimits } from './marketLimits.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,oDAAoD;AAGpD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,oDAAoD;AAGpD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAO5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AA4EhD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,OAAO,EACd,cAAc,MAAM,EACpB,QAAQ,aAAa,KACpB,IAiEF,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { classifyFillFromPosition, ExplorerChainId, explorerTxUrl, } from '@lifi/perps-sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { LiquidityRole, OrderSide, OrderType } from '@lifi/perps-types';
|
|
3
3
|
import Big from 'big.js';
|
|
4
4
|
import { LIGHTER_FEE_TICK_SCALE, LIGHTER_IMF_PERCENT_SCALE, } from '../constants.js';
|
|
5
5
|
import { leverageFromImf } from './mapPosition.js';
|
|
6
|
+
import { isPlaceholderTxHash } from './txHash.js';
|
|
6
7
|
/**
|
|
7
8
|
* Fee charged on a fill, in the market's quote asset. Lighter publishes the
|
|
8
9
|
* side's fee *rate* as an integer tick on `LIGHTER_FEE_TICK_SCALE` rather than
|
|
@@ -92,7 +93,6 @@ export const mapFill = (trade, accountIndex, market) => {
|
|
|
92
93
|
type: OrderType.LIMIT,
|
|
93
94
|
size: trade.size,
|
|
94
95
|
price: trade.price,
|
|
95
|
-
status: FillStatus.FILLED,
|
|
96
96
|
liquidity: isMaker ? LiquidityRole.MAKER : LiquidityRole.TAKER,
|
|
97
97
|
// Lighter charges the fill fee in the market's quote asset.
|
|
98
98
|
fee: feeTick === undefined
|
|
@@ -108,7 +108,9 @@ export const mapFill = (trade, accountIndex, market) => {
|
|
|
108
108
|
// anything else for sell.
|
|
109
109
|
classification: classifyFillFromPosition(startPosition, isBuyer ? 'B' : 'A', trade.size),
|
|
110
110
|
createdAt: new Date(trade.timestamp).toISOString(),
|
|
111
|
-
explorerLink:
|
|
111
|
+
explorerLink: isPlaceholderTxHash(trade.tx_hash)
|
|
112
|
+
? undefined
|
|
113
|
+
: explorerTxUrl(ExplorerChainId.LIGHTER, trade.tx_hash),
|
|
112
114
|
};
|
|
113
115
|
};
|
|
114
116
|
//# sourceMappingURL=mapFill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +1,10 @@
|
|
|
1
|
-
import type { MarketDisplay,
|
|
2
|
-
import { OrderType } from '@lifi/perps-types';
|
|
1
|
+
import type { MarketDisplay, Order } from '@lifi/perps-types';
|
|
3
2
|
import type { LtOrder } from '../types/index.js';
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
export declare const mapStatusReason: (status: string) => string | undefined;
|
|
11
|
-
/**
|
|
12
|
-
* True for order types Lighter exposes as TP/SL legs. Mirrors the
|
|
13
|
-
* Hyperliquid helper of the same name so the backend can split a raw
|
|
14
|
-
* Lighter order list into the same `openOrders` / `triggerOrders`
|
|
15
|
-
* buckets the SDK declares on `OrdersResponse`.
|
|
16
|
-
* @public
|
|
17
|
-
*/
|
|
18
|
-
export declare const isTriggerType: (type: OrderType) => boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Decide whether a raw Lighter order belongs in the cross-provider
|
|
21
|
-
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
22
|
-
* `getOrders` path and the `account_all_orders` WS handler.
|
|
23
|
-
*
|
|
24
|
-
* Authoritative signals, in order:
|
|
25
|
-
* 1. `trigger_status` — Lighter's own enum. `'ready' | 'mark-price' |
|
|
26
|
-
* 'parent-order'` all mean "this order has trigger semantics" (TP/SL
|
|
27
|
-
* waiting on price, or a TP/SL leg of a parent placeOrder). `'twap'`
|
|
28
|
-
* is intentionally excluded — TWAP child orders are scheduled resting
|
|
29
|
-
* limits, not TP/SL triggers. `'na'` is "regular order".
|
|
30
|
-
* 2. `trigger_price > 0` — catches cases where `trigger_status`
|
|
31
|
-
* momentarily lags during state transitions (e.g. right after an OCO
|
|
32
|
-
* sibling cancels).
|
|
33
|
-
* 3. `type` — final fallback via the mapped `OrderType`.
|
|
34
|
-
* @public
|
|
35
|
-
*/
|
|
36
|
-
export declare const isTriggerOrder: (raw: LtOrder) => boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Map a raw Lighter trigger order (stop/take-profit, market or limit) to
|
|
39
|
-
* the generic `TriggerOrder` shape. For market variants the `limitPrice`
|
|
40
|
-
* field is omitted; for limit variants `order.price` is the limit and
|
|
41
|
-
* `order.trigger_price` is the activation level.
|
|
42
|
-
* @public
|
|
43
|
-
*/
|
|
44
|
-
export declare const mapTriggerOrder: (order: LtOrder, market: MarketDisplay) => TriggerOrder;
|
|
45
|
-
/**
|
|
46
|
-
* Map a raw Lighter order to the generic OpenOrder type.
|
|
47
|
-
* @param market - Backend-resolved market identity for `order.market_index`.
|
|
48
|
-
* @public
|
|
49
|
-
*/
|
|
50
|
-
export declare const mapOrder: (order: LtOrder, market: MarketDisplay) => OpenOrder;
|
|
51
|
-
/**
|
|
52
|
-
* Walk a flat list of raw Lighter orders and bucket each into the
|
|
53
|
-
* `OpenOrder` / `TriggerOrder` arrays the cross-provider `OrdersResponse`
|
|
54
|
-
* declares, plus a `terminated` list of orderIds whose status has reached
|
|
55
|
-
* a terminal state (filled / cancelled / rejected / expired) — consumers
|
|
56
|
-
* applying WS deltas evict those from the cached buckets. REST callers
|
|
57
|
-
* see `terminated: []` because `accountActiveOrders` returns active only.
|
|
58
|
-
* An order whose market the resolver does not know is skipped.
|
|
59
|
-
* @public
|
|
60
|
-
*/
|
|
61
|
-
export declare const classifyAndMapOrders: (orders: LtOrder[], resolveMarket: (marketIndex: number) => MarketDisplay | undefined) => {
|
|
62
|
-
openOrders: OpenOrder[];
|
|
63
|
-
triggerOrders: TriggerOrder[];
|
|
3
|
+
/** Map a Lighter order with its venue identity, lifecycle, and execution fields. */
|
|
4
|
+
export declare const mapOrder: (order: LtOrder, market: MarketDisplay) => Order;
|
|
5
|
+
/** Include terminal rows and their ids so consumers can update history and active caches. */
|
|
6
|
+
export declare const mapOrderUpdates: (rawOrders: LtOrder[], resolveMarket: (marketIndex: number) => MarketDisplay | undefined) => {
|
|
7
|
+
orders: Order[];
|
|
64
8
|
terminated: string[];
|
|
65
9
|
};
|
|
66
|
-
/**
|
|
67
|
-
* Map a raw Lighter order to the rich Order type — adds status, time-in-force
|
|
68
|
-
* and remaining/filled sizes on top of the OpenOrder fields.
|
|
69
|
-
* @public
|
|
70
|
-
*/
|
|
71
|
-
export declare const mapOrderDetail: (order: LtOrder, market: MarketDisplay) => Order;
|
|
72
10
|
//# sourceMappingURL=mapOrder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAa,MAAM,mBAAmB,CAAA;AASxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAoFhD,oFAAoF;AACpF,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,QAAQ,aAAa,KAAG,KA8DhE,CAAA;AAED,6FAA6F;AAC7F,eAAO,MAAM,eAAe,GAC1B,WAAW,OAAO,EAAE,EACpB,eAAe,CAAC,WAAW,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KAChE;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAczC,CAAA"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import { isActiveOrderStatus } from '@lifi/perps-sdk';
|
|
2
|
-
import { OrderSide, OrderStatus, OrderType, TimeInForce, } from '@lifi/perps-types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
limit:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { isActiveOrderStatus, PerpsError, triggerConditionFor, } from '@lifi/perps-sdk';
|
|
2
|
+
import { OrderSide, OrderStatus, OrderType, PerpsErrorCode, TimeInForce, } from '@lifi/perps-types';
|
|
3
|
+
import Big from 'big.js';
|
|
4
|
+
const mapOrderType = (type) => {
|
|
5
|
+
switch (type.replace(/-/g, '_')) {
|
|
6
|
+
case 'market':
|
|
7
|
+
case 'liquidation':
|
|
8
|
+
return OrderType.MARKET;
|
|
9
|
+
case 'limit':
|
|
10
|
+
case 'twap_sub':
|
|
11
|
+
return OrderType.LIMIT;
|
|
12
|
+
case 'stop_loss':
|
|
13
|
+
return OrderType.STOP_MARKET;
|
|
14
|
+
case 'stop_loss_limit':
|
|
15
|
+
return OrderType.STOP_LIMIT;
|
|
16
|
+
case 'take_profit':
|
|
17
|
+
return OrderType.TAKE_PROFIT_MARKET;
|
|
18
|
+
case 'take_profit_limit':
|
|
19
|
+
return OrderType.TAKE_PROFIT_LIMIT;
|
|
20
|
+
case 'twap':
|
|
21
|
+
return OrderType.TWAP;
|
|
22
|
+
default:
|
|
23
|
+
throw new PerpsError(PerpsErrorCode.SDKError, `Unknown Lighter order type: ${type}`);
|
|
24
|
+
}
|
|
17
25
|
};
|
|
18
26
|
const mapTimeInForce = (tif) => {
|
|
19
27
|
switch (tif.replace(/-/g, '_')) {
|
|
@@ -24,197 +32,120 @@ const mapTimeInForce = (tif) => {
|
|
|
24
32
|
case 'post_only':
|
|
25
33
|
return TimeInForce.POST_ONLY;
|
|
26
34
|
default:
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
const mapOrderStatus = (status) => {
|
|
31
|
-
if (status === 'open' ||
|
|
32
|
-
status === 'in-progress' ||
|
|
33
|
-
status === 'in_progress') {
|
|
34
|
-
return OrderStatus.OPEN;
|
|
35
|
-
}
|
|
36
|
-
if (status === 'pending') {
|
|
37
|
-
return OrderStatus.PENDING;
|
|
38
|
-
}
|
|
39
|
-
if (status === 'filled') {
|
|
40
|
-
return OrderStatus.FILLED;
|
|
41
|
-
}
|
|
42
|
-
if (status.startsWith('canceled')) {
|
|
43
|
-
return OrderStatus.CANCELLED;
|
|
35
|
+
throw new PerpsError(PerpsErrorCode.SDKError, `Unknown Lighter time in force: ${tif}`);
|
|
44
36
|
}
|
|
45
|
-
return OrderStatus.OPEN;
|
|
46
37
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
const mapOrderStatus = (order, filledSize = new Big(order.filled_base_amount)) => {
|
|
39
|
+
switch (order.status) {
|
|
40
|
+
case 'pending':
|
|
41
|
+
case 'in-progress':
|
|
42
|
+
return OrderStatus.ACCEPTED;
|
|
43
|
+
case 'open':
|
|
44
|
+
if (order.trigger_status === 'parent-order') {
|
|
45
|
+
return OrderStatus.PENDING;
|
|
46
|
+
}
|
|
47
|
+
return filledSize.gt(0) ? OrderStatus.PARTIALLY_FILLED : OrderStatus.OPEN;
|
|
48
|
+
case 'triggered':
|
|
49
|
+
return OrderStatus.TRIGGERED;
|
|
50
|
+
case 'filled':
|
|
51
|
+
return OrderStatus.FILLED;
|
|
52
|
+
case 'canceled-expired':
|
|
53
|
+
return OrderStatus.EXPIRED;
|
|
55
54
|
case 'canceled':
|
|
56
|
-
return 'Order cancelled.';
|
|
57
55
|
case 'canceled-post-only':
|
|
58
|
-
return 'Order cancelled: post-only order would have crossed the book.';
|
|
59
56
|
case 'canceled-reduce-only':
|
|
60
|
-
return 'Order cancelled: would not reduce your position.';
|
|
61
57
|
case 'canceled-position-not-allowed':
|
|
62
|
-
return 'Order cancelled: position not allowed.';
|
|
63
58
|
case 'canceled-margin-not-allowed':
|
|
64
|
-
return 'Order cancelled: insufficient margin.';
|
|
65
59
|
case 'canceled-too-much-slippage':
|
|
66
|
-
return 'Order cancelled: slippage exceeded tolerance.';
|
|
67
60
|
case 'canceled-not-enough-liquidity':
|
|
68
|
-
return 'Order cancelled: not enough liquidity to fill.';
|
|
69
61
|
case 'canceled-self-trade':
|
|
70
|
-
return 'Order cancelled: would self-trade against your own resting order.';
|
|
71
|
-
case 'canceled-expired':
|
|
72
|
-
return 'Order expired.';
|
|
73
62
|
case 'canceled-oco':
|
|
74
|
-
return 'Order cancelled: sibling OCO order filled or cancelled first.';
|
|
75
63
|
case 'canceled-child':
|
|
76
|
-
return 'Order cancelled: parent order was cancelled.';
|
|
77
64
|
case 'canceled-liquidation':
|
|
78
|
-
return 'Order cancelled: account was liquidated.';
|
|
79
65
|
case 'canceled-invalid-balance':
|
|
80
|
-
return
|
|
66
|
+
return OrderStatus.CANCELLED;
|
|
81
67
|
default:
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
/**
|
|
86
|
-
* True for order types Lighter exposes as TP/SL legs. Mirrors the
|
|
87
|
-
* Hyperliquid helper of the same name so the backend can split a raw
|
|
88
|
-
* Lighter order list into the same `openOrders` / `triggerOrders`
|
|
89
|
-
* buckets the SDK declares on `OrdersResponse`.
|
|
90
|
-
* @public
|
|
91
|
-
*/
|
|
92
|
-
export const isTriggerType = (type) => type === OrderType.TAKE_PROFIT_MARKET ||
|
|
93
|
-
type === OrderType.TAKE_PROFIT_LIMIT ||
|
|
94
|
-
type === OrderType.STOP_MARKET ||
|
|
95
|
-
type === OrderType.STOP_LIMIT;
|
|
96
|
-
/**
|
|
97
|
-
* Decide whether a raw Lighter order belongs in the cross-provider
|
|
98
|
-
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
99
|
-
* `getOrders` path and the `account_all_orders` WS handler.
|
|
100
|
-
*
|
|
101
|
-
* Authoritative signals, in order:
|
|
102
|
-
* 1. `trigger_status` — Lighter's own enum. `'ready' | 'mark-price' |
|
|
103
|
-
* 'parent-order'` all mean "this order has trigger semantics" (TP/SL
|
|
104
|
-
* waiting on price, or a TP/SL leg of a parent placeOrder). `'twap'`
|
|
105
|
-
* is intentionally excluded — TWAP child orders are scheduled resting
|
|
106
|
-
* limits, not TP/SL triggers. `'na'` is "regular order".
|
|
107
|
-
* 2. `trigger_price > 0` — catches cases where `trigger_status`
|
|
108
|
-
* momentarily lags during state transitions (e.g. right after an OCO
|
|
109
|
-
* sibling cancels).
|
|
110
|
-
* 3. `type` — final fallback via the mapped `OrderType`.
|
|
111
|
-
* @public
|
|
112
|
-
*/
|
|
113
|
-
export const isTriggerOrder = (raw) => {
|
|
114
|
-
if (raw.trigger_status === 'ready' ||
|
|
115
|
-
raw.trigger_status === 'mark-price' ||
|
|
116
|
-
raw.trigger_status === 'parent-order') {
|
|
117
|
-
return true;
|
|
68
|
+
throw new PerpsError(PerpsErrorCode.SDKError, `Unknown Lighter order status: ${order.status}`);
|
|
118
69
|
}
|
|
119
|
-
if (raw.trigger_price !== '' && parseFloat(raw.trigger_price) > 0) {
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
return isTriggerType(mapOrderType(raw.type));
|
|
123
70
|
};
|
|
124
|
-
/**
|
|
125
|
-
|
|
126
|
-
* the generic `TriggerOrder` shape. For market variants the `limitPrice`
|
|
127
|
-
* field is omitted; for limit variants `order.price` is the limit and
|
|
128
|
-
* `order.trigger_price` is the activation level.
|
|
129
|
-
* @public
|
|
130
|
-
*/
|
|
131
|
-
export const mapTriggerOrder = (order, market) => {
|
|
71
|
+
/** Map a Lighter order with its venue identity, lifecycle, and execution fields. */
|
|
72
|
+
export const mapOrder = (order, market) => {
|
|
132
73
|
const type = mapOrderType(order.type);
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// mutating txs (cancel, modify) require. The matching-engine string
|
|
137
|
-
// label `order_id` is internal to the SDK provider and never crosses
|
|
138
|
-
// this boundary — combined with `market.id` (=market_index), the
|
|
139
|
-
// numeric `order_index` uniquely pins a Lighter order.
|
|
74
|
+
const filledSize = new Big(order.filled_base_amount);
|
|
75
|
+
const status = mapOrderStatus(order, filledSize);
|
|
76
|
+
const base = {
|
|
140
77
|
orderId: String(order.order_index),
|
|
78
|
+
...(order.client_order_index === 0
|
|
79
|
+
? {}
|
|
80
|
+
: { clientOrderId: String(order.client_order_index) }),
|
|
141
81
|
market,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
82
|
+
side: order.is_ask ? OrderSide.SELL : OrderSide.BUY,
|
|
83
|
+
status,
|
|
84
|
+
...(status === OrderStatus.CANCELLED ? { statusReason: order.status } : {}),
|
|
85
|
+
originalSize: order.initial_base_amount,
|
|
86
|
+
remainingSize: order.remaining_base_amount,
|
|
87
|
+
filledSize: order.filled_base_amount,
|
|
88
|
+
...(filledSize.gt(0)
|
|
89
|
+
? {
|
|
90
|
+
averagePrice: new Big(order.filled_quote_amount)
|
|
91
|
+
.div(filledSize)
|
|
92
|
+
.toString(),
|
|
93
|
+
}
|
|
94
|
+
: {}),
|
|
95
|
+
reduceOnly: order.reduce_only,
|
|
96
|
+
...(order.parent_order_id ? { parentOrderId: order.parent_order_id } : {}),
|
|
146
97
|
createdAt: new Date(order.created_at * 1000).toISOString(),
|
|
98
|
+
updatedAt: new Date(order.updated_at * 1000).toISOString(),
|
|
147
99
|
};
|
|
100
|
+
switch (type) {
|
|
101
|
+
case OrderType.TWAP:
|
|
102
|
+
return {
|
|
103
|
+
...base,
|
|
104
|
+
type,
|
|
105
|
+
durationSeconds: order.order_expiry / 1000 - order.created_at,
|
|
106
|
+
startedAt: base.createdAt,
|
|
107
|
+
};
|
|
108
|
+
case OrderType.STOP_MARKET:
|
|
109
|
+
case OrderType.STOP_LIMIT:
|
|
110
|
+
case OrderType.TAKE_PROFIT_MARKET:
|
|
111
|
+
case OrderType.TAKE_PROFIT_LIMIT:
|
|
112
|
+
return {
|
|
113
|
+
...base,
|
|
114
|
+
type,
|
|
115
|
+
triggerPrice: order.trigger_price,
|
|
116
|
+
triggerCondition: triggerConditionFor(type, base.side),
|
|
117
|
+
...(type === OrderType.STOP_LIMIT ||
|
|
118
|
+
type === OrderType.TAKE_PROFIT_LIMIT
|
|
119
|
+
? { limitPrice: order.price }
|
|
120
|
+
: {}),
|
|
121
|
+
};
|
|
122
|
+
case OrderType.MARKET:
|
|
123
|
+
case OrderType.LIMIT:
|
|
124
|
+
return {
|
|
125
|
+
...base,
|
|
126
|
+
type,
|
|
127
|
+
price: order.price,
|
|
128
|
+
timeInForce: mapTimeInForce(order.time_in_force),
|
|
129
|
+
...(order.order_expiry > 0
|
|
130
|
+
? { expiresAt: new Date(order.order_expiry).toISOString() }
|
|
131
|
+
: {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
148
134
|
};
|
|
149
|
-
/**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
* @public
|
|
153
|
-
*/
|
|
154
|
-
export const mapOrder = (order, market) => ({
|
|
155
|
-
orderId: String(order.order_index),
|
|
156
|
-
market,
|
|
157
|
-
side: order.is_ask ? OrderSide.SELL : OrderSide.BUY,
|
|
158
|
-
type: mapOrderType(order.type),
|
|
159
|
-
originalSize: order.initial_base_amount,
|
|
160
|
-
remainingSize: order.remaining_base_amount,
|
|
161
|
-
price: order.price,
|
|
162
|
-
filledSize: order.filled_base_amount,
|
|
163
|
-
reduceOnly: order.reduce_only,
|
|
164
|
-
createdAt: new Date(order.created_at * 1000).toISOString(),
|
|
165
|
-
});
|
|
166
|
-
/**
|
|
167
|
-
* Walk a flat list of raw Lighter orders and bucket each into the
|
|
168
|
-
* `OpenOrder` / `TriggerOrder` arrays the cross-provider `OrdersResponse`
|
|
169
|
-
* declares, plus a `terminated` list of orderIds whose status has reached
|
|
170
|
-
* a terminal state (filled / cancelled / rejected / expired) — consumers
|
|
171
|
-
* applying WS deltas evict those from the cached buckets. REST callers
|
|
172
|
-
* see `terminated: []` because `accountActiveOrders` returns active only.
|
|
173
|
-
* An order whose market the resolver does not know is skipped.
|
|
174
|
-
* @public
|
|
175
|
-
*/
|
|
176
|
-
export const classifyAndMapOrders = (orders, resolveMarket) => {
|
|
177
|
-
const openOrders = [];
|
|
178
|
-
const triggerOrders = [];
|
|
135
|
+
/** Include terminal rows and their ids so consumers can update history and active caches. */
|
|
136
|
+
export const mapOrderUpdates = (rawOrders, resolveMarket) => {
|
|
137
|
+
const orders = [];
|
|
179
138
|
const terminated = [];
|
|
180
|
-
for (const raw of
|
|
181
|
-
const orderId = String(raw.order_index);
|
|
182
|
-
if (!isActiveOrderStatus(mapOrderStatus(raw.status))) {
|
|
183
|
-
terminated.push(orderId);
|
|
184
|
-
continue;
|
|
185
|
-
}
|
|
139
|
+
for (const raw of rawOrders) {
|
|
186
140
|
const market = resolveMarket(raw.market_index);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (isTriggerOrder(raw)) {
|
|
191
|
-
triggerOrders.push(mapTriggerOrder(raw, market));
|
|
141
|
+
const order = market === undefined ? undefined : mapOrder(raw, market);
|
|
142
|
+
if (!isActiveOrderStatus(order?.status ?? mapOrderStatus(raw))) {
|
|
143
|
+
terminated.push(String(raw.order_index));
|
|
192
144
|
}
|
|
193
|
-
|
|
194
|
-
|
|
145
|
+
if (order !== undefined) {
|
|
146
|
+
orders.push(order);
|
|
195
147
|
}
|
|
196
148
|
}
|
|
197
|
-
return {
|
|
149
|
+
return { orders, terminated };
|
|
198
150
|
};
|
|
199
|
-
/**
|
|
200
|
-
* Map a raw Lighter order to the rich Order type — adds status, time-in-force
|
|
201
|
-
* and remaining/filled sizes on top of the OpenOrder fields.
|
|
202
|
-
* @public
|
|
203
|
-
*/
|
|
204
|
-
export const mapOrderDetail = (order, market) => ({
|
|
205
|
-
orderId: String(order.order_index),
|
|
206
|
-
market,
|
|
207
|
-
side: order.is_ask ? OrderSide.SELL : OrderSide.BUY,
|
|
208
|
-
type: mapOrderType(order.type),
|
|
209
|
-
price: order.price,
|
|
210
|
-
originalSize: order.initial_base_amount,
|
|
211
|
-
remainingSize: order.remaining_base_amount,
|
|
212
|
-
filledSize: order.filled_base_amount,
|
|
213
|
-
timeInForce: mapTimeInForce(order.time_in_force),
|
|
214
|
-
reduceOnly: order.reduce_only,
|
|
215
|
-
status: mapOrderStatus(order.status),
|
|
216
|
-
statusReason: mapStatusReason(order.status),
|
|
217
|
-
createdAt: new Date(order.created_at * 1000).toISOString(),
|
|
218
|
-
updatedAt: new Date(order.updated_at * 1000).toISOString(),
|
|
219
|
-
});
|
|
220
151
|
//# sourceMappingURL=mapOrder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report whether a Lighter `tx_hash` is the placeholder the venue sends for a
|
|
3
|
+
* row that settled no transaction. Such a row resolves to no explorer link.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare const isPlaceholderTxHash: (txHash: string | undefined) => boolean;
|
|
8
|
+
//# sourceMappingURL=txHash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txHash.d.ts","sourceRoot":"","sources":["../../../src/utils/txHash.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,GAAG,SAAS,KAAG,OAGH,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trailing hex characters a Lighter placeholder `tx_hash` leaves zero. Lighter
|
|
3
|
+
* reports a 40-byte hash on every fill and transfer row, and a row that settled
|
|
4
|
+
* no transaction carries a sequence pair in the leading 16 bytes and zero in
|
|
5
|
+
* the remaining 24. A settled row fills all 40 bytes.
|
|
6
|
+
*/
|
|
7
|
+
const PLACEHOLDER_ZERO_SUFFIX_LENGTH = 48;
|
|
8
|
+
const ALL_ZERO = /^0+$/;
|
|
9
|
+
/**
|
|
10
|
+
* Report whether a Lighter `tx_hash` is the placeholder the venue sends for a
|
|
11
|
+
* row that settled no transaction. Such a row resolves to no explorer link.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export const isPlaceholderTxHash = (txHash) => txHash !== undefined &&
|
|
16
|
+
txHash.length > PLACEHOLDER_ZERO_SUFFIX_LENGTH &&
|
|
17
|
+
ALL_ZERO.test(txHash.slice(-PLACEHOLDER_ZERO_SUFFIX_LENGTH));
|
|
18
|
+
//# sourceMappingURL=txHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txHash.js","sourceRoot":"","sources":["../../../src/utils/txHash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,8BAA8B,GAAG,EAAE,CAAA;AAEzC,MAAM,QAAQ,GAAG,MAAM,CAAA;AAEvB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAA0B,EAAW,EAAE,CACzE,MAAM,KAAK,SAAS;IACpB,MAAM,CAAC,MAAM,GAAG,8BAA8B;IAC9C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/LighterWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAKlB,cAAc,EACd,KAAK,iBAAiB,EAGvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"LighterWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/LighterWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAKlB,cAAc,EACd,KAAK,iBAAiB,EAGvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AA8EnC;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;AAEhC,UAAU,QAAQ;IAChB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAA;CACnB;AAkBD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,wBAAwB,CAAA;CAC5C;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAE5B;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAEnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,cAAc,CAAoC;IAE1D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2C;IAE9E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAErD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqC;gBAGxE,KAAK,GAAE,MAA+B,EACtC,WAAW,GAAE,MAA6B,EAC1C,OAAO,GAAE,wBAA6B,EACtC,MAAM,CAAC,EAAE,cAAc;IAsBzB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;OAKG;IACG,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;cA6ChD,OAAO,IAAI,IAAI;cAMlB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,OAAO,GACR,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3B;;;;;;OAMG;YACW,gBAAgB;IAsB9B,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;YAwB5B,cAAc;YAyFd,mBAAmB;YAqBnB,iBAAiB;IAK/B,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAqB1C,OAAO,CAAC,QAAQ;IAkFhB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,sBAAsB;IAiC9B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,mBAAmB;CAc5B;AAkID;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,wBAAwB,KACjC,iBAKA,CAAA"}
|