@lifi/perps-sdk-provider-lighter 36.0.0 → 37.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/dist/cjs/LighterProvider.d.ts.map +1 -1
- package/dist/cjs/LighterProvider.js +4 -6
- package/dist/cjs/LighterProvider.js.map +1 -1
- package/dist/cjs/accountSummary.d.ts.map +1 -1
- package/dist/cjs/accountSummary.js +13 -6
- package/dist/cjs/accountSummary.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 +1 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/mapFill.js +1 -1
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapOpenPositions.d.ts +1 -2
- package/dist/cjs/utils/mapOpenPositions.d.ts.map +1 -1
- package/dist/cjs/utils/mapOpenPositions.js +1 -13
- package/dist/cjs/utils/mapOpenPositions.js.map +1 -1
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
- package/dist/cjs/utils/mapOrder.js +26 -43
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
- package/dist/cjs/utils/mapPosition.js +34 -16
- package/dist/cjs/utils/mapPosition.js.map +1 -1
- package/dist/cjs/utils/transferMargin.js +1 -1
- package/dist/cjs/utils/transferMargin.js.map +1 -1
- package/dist/cjs/utils/wireEncoding.d.ts +0 -2
- package/dist/cjs/utils/wireEncoding.d.ts.map +1 -1
- package/dist/cjs/utils/wireEncoding.js +1 -15
- package/dist/cjs/utils/wireEncoding.js.map +1 -1
- package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/LighterWsProvider.js +46 -26
- package/dist/cjs/websocket/LighterWsProvider.js.map +1 -1
- package/dist/cjs/websocket/orderBookSide.d.ts +2 -1
- package/dist/cjs/websocket/orderBookSide.d.ts.map +1 -1
- package/dist/cjs/websocket/orderBookSide.js +5 -3
- package/dist/cjs/websocket/orderBookSide.js.map +1 -1
- package/dist/esm/LighterProvider.d.ts.map +1 -1
- package/dist/esm/LighterProvider.js +5 -8
- package/dist/esm/LighterProvider.js.map +1 -1
- package/dist/esm/accountSummary.d.ts.map +1 -1
- package/dist/esm/accountSummary.js +14 -7
- package/dist/esm/accountSummary.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.js +1 -1
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapOpenPositions.d.ts +1 -8
- package/dist/esm/utils/mapOpenPositions.d.ts.map +1 -1
- package/dist/esm/utils/mapOpenPositions.js +1 -18
- package/dist/esm/utils/mapOpenPositions.js.map +1 -1
- package/dist/esm/utils/mapOrder.d.ts +6 -3
- package/dist/esm/utils/mapOrder.d.ts.map +1 -1
- package/dist/esm/utils/mapOrder.js +33 -47
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/mapPortfolioHistory.d.ts +2 -2
- package/dist/esm/utils/mapPortfolioHistory.js +2 -2
- package/dist/esm/utils/mapPosition.d.ts +4 -3
- package/dist/esm/utils/mapPosition.d.ts.map +1 -1
- package/dist/esm/utils/mapPosition.js +39 -20
- package/dist/esm/utils/mapPosition.js.map +1 -1
- package/dist/esm/utils/transferMargin.js +1 -1
- package/dist/esm/utils/transferMargin.js.map +1 -1
- package/dist/esm/utils/wireEncoding.d.ts +2 -28
- package/dist/esm/utils/wireEncoding.d.ts.map +1 -1
- package/dist/esm/utils/wireEncoding.js +2 -38
- package/dist/esm/utils/wireEncoding.js.map +1 -1
- package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/LighterWsProvider.js +56 -27
- package/dist/esm/websocket/LighterWsProvider.js.map +1 -1
- package/dist/esm/websocket/orderBookSide.d.ts +3 -2
- package/dist/esm/websocket/orderBookSide.d.ts.map +1 -1
- package/dist/esm/websocket/orderBookSide.js +5 -3
- package/dist/esm/websocket/orderBookSide.js.map +1 -1
- package/dist/types/LighterProvider.d.ts.map +1 -1
- package/dist/types/accountSummary.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/mapOpenPositions.d.ts +1 -8
- package/dist/types/utils/mapOpenPositions.d.ts.map +1 -1
- package/dist/types/utils/mapOrder.d.ts +6 -3
- package/dist/types/utils/mapOrder.d.ts.map +1 -1
- package/dist/types/utils/mapPortfolioHistory.d.ts +2 -2
- package/dist/types/utils/mapPosition.d.ts +4 -3
- package/dist/types/utils/mapPosition.d.ts.map +1 -1
- package/dist/types/utils/wireEncoding.d.ts +2 -28
- package/dist/types/utils/wireEncoding.d.ts.map +1 -1
- package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -1
- package/dist/types/websocket/orderBookSide.d.ts +3 -2
- package/dist/types/websocket/orderBookSide.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/LighterProvider.ts +14 -16
- package/src/accountSummary.ts +27 -6
- package/src/utils/index.ts +0 -2
- package/src/utils/mapFill.ts +1 -1
- package/src/utils/mapOpenPositions.ts +2 -30
- package/src/utils/mapOrder.ts +46 -67
- package/src/utils/mapPortfolioHistory.ts +2 -2
- package/src/utils/mapPosition.ts +50 -23
- package/src/utils/transferMargin.ts +1 -1
- package/src/utils/wireEncoding.ts +2 -43
- package/src/websocket/LighterWsProvider.ts +100 -60
- package/src/websocket/orderBookSide.ts +17 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderBookSide.js","sourceRoot":"","sources":["../../../src/websocket/orderBookSide.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,KAAK,GACN,MAAM,iBAAiB,CAAA;AAUxB,MAAM,CAAC,MAAM,QAAQ,GAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAOzE;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKL;IACA;
|
|
1
|
+
{"version":3,"file":"orderBookSide.js","sourceRoot":"","sources":["../../../src/websocket/orderBookSide.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAiBL,KAAK,mBAAmB,EAsBxB,KAAK,cAAc,EAQpB,MAAM,iBAAiB,CAAA;AAkCxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQnC,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAsLvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAcD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,iBAAiB,EAC7B,UAAS,sBAA2B,KACnC,oBAioDF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,oBACyD,CAAA;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAS,sBAA2B,KACnC,oBAA6E,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,OAAO,aA7BT,sBAAsB,KAC9B,oBA4BmC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../src/accountSummary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../src/accountSummary.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAS1B;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,eAAe,KACvB,oBAYF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,EACnB,kBAAkB,SAAS,MAAM,EAAE,KAClC,MAQA,CAAA;AAkBH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,QAAQ,EAAE,GACpB,cAAc,CAgDhB"}
|
|
@@ -15,7 +15,7 @@ export { mapInterval } from './ohlcvInterval.js';
|
|
|
15
15
|
export { snapOrderPrice, snapOrderSize } from './orderFormatting.js';
|
|
16
16
|
export { toIsoFromMs, toIsoFromSeconds } from './time.js';
|
|
17
17
|
export { positionRemovableMargin } from './transferMargin.js';
|
|
18
|
-
export {
|
|
18
|
+
export { mapOrderTypeToInt, mapTimeInForceToInt, orderExpiryForTif, resolveTimeInForce, } from './wireEncoding.js';
|
|
19
19
|
export { lighterWithdrawableBalances } from './withdrawableBalances.js';
|
|
20
20
|
export type { LighterFastWithdrawal, LighterWithdrawalOptions, } from './withdrawalTypes.js';
|
|
21
21
|
export { lighterFastWithdrawal, lighterWithdrawalTypes, } from './withdrawalTypes.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,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxE,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,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EACL,
|
|
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,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxE,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,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AACvE,YAAY,EACV,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { PerpsMarketDisplay, Position } from '@lifi/perps-types';
|
|
2
2
|
import type { LtAccountPosition } from '../types/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* True when the Lighter position row has a non-zero size. A malformed size
|
|
@@ -15,11 +15,4 @@ export declare const isOpenPosition: (p: LtAccountPosition) => boolean;
|
|
|
15
15
|
* @public
|
|
16
16
|
*/
|
|
17
17
|
export declare const mapOpenPositions: (positions: LtAccountPosition[], resolveMarket: (marketId: number) => PerpsMarketDisplay) => Position[];
|
|
18
|
-
/**
|
|
19
|
-
* Map every open Lighter position for account totals, which must not leave a
|
|
20
|
-
* position out.
|
|
21
|
-
*
|
|
22
|
-
* @throws {PerpsError} `SDKError` when `mapPosition` skips an open row.
|
|
23
|
-
*/
|
|
24
|
-
export declare const requireOpenPositions: (positions: LtAccountPosition[], resolveMarket: (marketId: number) => PerpsMarketDisplay) => Position[];
|
|
25
18
|
//# sourceMappingURL=mapOpenPositions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOpenPositions.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOpenPositions.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"mapOpenPositions.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOpenPositions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,GAAG,iBAAiB,KAAG,OACR,CAAA;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,iBAAiB,EAAE,EAC9B,eAAe,CAAC,QAAQ,EAAE,MAAM,KAAK,kBAAkB,KACtD,QAAQ,EAIP,CAAA"}
|
|
@@ -2,11 +2,14 @@ import type { MarketDisplay, Order } from '@lifi/perps-types';
|
|
|
2
2
|
import type { LtOrder } from '../types/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Map a Lighter order with its venue identity, lifecycle, and execution fields.
|
|
5
|
-
* A row with an invalid
|
|
6
|
-
*
|
|
5
|
+
* Venue sizes and prices pass verbatim. A row with an invalid time gives
|
|
6
|
+
* `undefined`. An average price that cannot be derived is omitted.
|
|
7
7
|
*/
|
|
8
8
|
export declare const mapOrder: (order: LtOrder, market: MarketDisplay) => Order | undefined;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Include terminal rows and their ids so consumers can update history and
|
|
11
|
+
* active caches. A row the mapper rejects is dropped and warns once.
|
|
12
|
+
*/
|
|
10
13
|
export declare const mapOrderUpdates: (rawOrders: LtOrder[], resolveMarket: (marketIndex: number) => MarketDisplay | undefined) => {
|
|
11
14
|
orders: Order[];
|
|
12
15
|
terminated: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAa,MAAM,mBAAmB,CAAA;AASxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAa,MAAM,mBAAmB,CAAA;AASxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AA+FhD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GACnB,OAAO,OAAO,EACd,QAAQ,aAAa,KACpB,KAAK,GAAG,SAwEV,CAAA;AAED;;;GAGG;AACH,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;CA6BzC,CAAA"}
|
|
@@ -5,8 +5,8 @@ import type { LtPnLEntry } from '../types/pnl.js';
|
|
|
5
5
|
* Historical account values are anchored to the current account value. A
|
|
6
6
|
* snapshot with a non-finite value is skipped.
|
|
7
7
|
*
|
|
8
|
-
* @throws {PerpsError} `ValidationError` when `currentValue`
|
|
9
|
-
*
|
|
8
|
+
* @throws {PerpsError} `ValidationError` when `currentValue` does not match the
|
|
9
|
+
* decimal pattern.
|
|
10
10
|
*/
|
|
11
11
|
export declare const mapPortfolioHistory: (range: PortfolioHistoryRange, snapshots: LtPnLEntry[], currentValue: string) => PortfolioHistoryResponse;
|
|
12
12
|
//# sourceMappingURL=mapPortfolioHistory.d.ts.map
|
|
@@ -18,9 +18,10 @@ export declare const leverageFromImf: (imf: string) => string | undefined;
|
|
|
18
18
|
export declare const leverageFromScaledImf: (imf: number) => string | undefined;
|
|
19
19
|
/**
|
|
20
20
|
* Map a raw Lighter account position to the generic Position type. A row with
|
|
21
|
-
* an invalid size
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* an invalid size gives `undefined`. An invalid position value or a
|
|
22
|
+
* non-positive initial margin fraction keeps the row, leaves `leverage` and
|
|
23
|
+
* `initialMarginRequirement` absent, sets a cross `marginUsed` to `'0'` and
|
|
24
|
+
* warns once. Prices, PnL, funding and isolated margin pass through raw.
|
|
24
25
|
* @param market - Backend-resolved market identity for `pos.market_id`.
|
|
25
26
|
* @public
|
|
26
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAOrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAQtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAO5D,CAAA;AAsBD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,QAAQ,kBAAkB,KACzB,QAAQ,GAAG,SA+Cb,CAAA"}
|
|
@@ -1,33 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lighter wire encoding for the WASM signer:
|
|
3
|
-
*
|
|
2
|
+
* Lighter wire encoding for the WASM signer: order-type/time-in-force/expiry
|
|
3
|
+
* resolution mirroring lighter-go's rules.
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
* Convert Lighter's initial-margin fraction to the largest whole-number
|
|
7
|
-
* leverage exposed by the provider.
|
|
8
|
-
*
|
|
9
|
-
* Lighter expresses margin fractions in basis points (`10_000` = 100%), so
|
|
10
|
-
* the conversion is `floor(10_000 / fraction)`. Non-finite or non-positive
|
|
11
|
-
* input uses the safe `1x` fallback.
|
|
12
|
-
*
|
|
13
|
-
* @param fraction - Lighter's basis-point initial-margin fraction.
|
|
14
|
-
* @returns The floored maximum leverage, or `1` for invalid input.
|
|
15
|
-
* @public
|
|
16
|
-
*/
|
|
17
|
-
export declare const marginFractionToMaxLeverage: (fraction: number) => number;
|
|
18
|
-
/**
|
|
19
|
-
* Convert requested leverage to Lighter's basis-point margin fraction.
|
|
20
|
-
*
|
|
21
|
-
* The signer expects `round(10_000 / leverage)`, where the result is the
|
|
22
|
-
* margin requirement in basis points.
|
|
23
|
-
*
|
|
24
|
-
* @param leverage - Requested leverage multiplier.
|
|
25
|
-
* @returns The rounded basis-point margin fraction.
|
|
26
|
-
* @throws {PerpsError} With `ValidationError` when leverage is less than
|
|
27
|
-
* or equal to zero.
|
|
28
|
-
* @public
|
|
29
|
-
*/
|
|
30
|
-
export declare const leverageToFraction: (leverage: number) => number;
|
|
31
5
|
/**
|
|
32
6
|
* Map a LI.FI `OrderType` value to Lighter's integer wire type.
|
|
33
7
|
* Supported mappings are LIMIT → 0, MARKET → 1, STOP_MARKET → 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wireEncoding.d.ts","sourceRoot":"","sources":["../../../src/utils/wireEncoding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH
|
|
1
|
+
{"version":3,"file":"wireEncoding.d.ts","sourceRoot":"","sources":["../../../src/utils/wireEncoding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MAWjD,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,MAAM,EACpB,MAAM,MAAM,KACX,MAgBF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAOlD,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAKlD,CAAA"}
|
|
@@ -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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"}
|
|
@@ -2,7 +2,7 @@ import type { LtWsOrderBook } from '../types/index.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Orders two decimal-string prices: a negative result puts `a` before `b`.
|
|
4
4
|
*
|
|
5
|
-
* @throws {PerpsError} `ValidationError` when a price
|
|
5
|
+
* @throws {PerpsError} `ValidationError` when a price does not match the decimal pattern.
|
|
6
6
|
*/
|
|
7
7
|
export type PriceOrder = (a: string, b: string) => number;
|
|
8
8
|
export declare const bidOrder: PriceOrder;
|
|
@@ -14,9 +14,10 @@ export declare const askOrder: PriceOrder;
|
|
|
14
14
|
export declare class OrderBookSide {
|
|
15
15
|
private readonly order;
|
|
16
16
|
private readonly providerKey;
|
|
17
|
+
private readonly marketId;
|
|
17
18
|
private readonly byPrice;
|
|
18
19
|
private readonly levels;
|
|
19
|
-
constructor(order: PriceOrder, providerKey: string);
|
|
20
|
+
constructor(order: PriceOrder, providerKey: string, marketId: string);
|
|
20
21
|
/**
|
|
21
22
|
* Applies snapshot or delta levels; a zero size deletes the level. A level
|
|
22
23
|
* with an invalid size also deletes the level at its price, so the book
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderBookSide.d.ts","sourceRoot":"","sources":["../../../src/websocket/orderBookSide.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AAEzD,eAAO,MAAM,QAAQ,EAAE,UAAkD,CAAA;AACzE,eAAO,MAAM,QAAQ,EAAE,UAAkD,CAAA;AAOzE;;;GAGG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"orderBookSide.d.ts","sourceRoot":"","sources":["../../../src/websocket/orderBookSide.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AAEzD,eAAO,MAAM,QAAQ,EAAE,UAAkD,CAAA;AACzE,eAAO,MAAM,QAAQ,EAAE,UAAkD,CAAA;AAOzE;;;GAGG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAGtB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM;IAGnC;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IA4C3C,QAAQ,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlD,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,KAAK;CAad"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-lighter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "37.0.0",
|
|
4
4
|
"description": "Lighter provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"big.js": "^7.0.1",
|
|
46
46
|
"viem": "^2.55.18",
|
|
47
|
-
"@lifi/perps-types": "^
|
|
47
|
+
"@lifi/perps-types": "^22.0.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@lifi/perps-sdk": "^
|
|
50
|
+
"@lifi/perps-sdk": "^25.0.0"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
package/src/LighterProvider.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
ACTIVE_ORDER_STATUSES,
|
|
3
3
|
calculateTransferable,
|
|
4
4
|
type DepositFlow,
|
|
5
|
+
divideDecimalString,
|
|
5
6
|
estimateLiquidationPriceAtMarketRate,
|
|
6
7
|
explorerTxUrl,
|
|
7
8
|
explorerTxUrlFromBase,
|
|
@@ -38,7 +39,7 @@ import {
|
|
|
38
39
|
type SignActionsContext,
|
|
39
40
|
type StorageAdapter,
|
|
40
41
|
safeAbsDecimalString,
|
|
41
|
-
|
|
42
|
+
safeAddDecimalStrings,
|
|
42
43
|
safeMultiplyDecimalString,
|
|
43
44
|
subtractDecimalString,
|
|
44
45
|
toPerpsMarketDisplay,
|
|
@@ -168,7 +169,6 @@ import {
|
|
|
168
169
|
toIsoFromMs,
|
|
169
170
|
toIsoFromSeconds,
|
|
170
171
|
} from './utils/index.js'
|
|
171
|
-
import { requireOpenPositions } from './utils/mapOpenPositions.js'
|
|
172
172
|
import {
|
|
173
173
|
fetchRegisteredApiKey,
|
|
174
174
|
normalizeLighterPublicKey,
|
|
@@ -184,16 +184,11 @@ import { wireList } from './utils/wireList.js'
|
|
|
184
184
|
|
|
185
185
|
const ZERO_FEE_TIER = { maker: '0', taker: '0' }
|
|
186
186
|
|
|
187
|
-
/** The sum of `values`, or `undefined` when any term is not a decimal string. */
|
|
188
|
-
const safeSum = (values: readonly string[]): string | undefined =>
|
|
189
|
-
values.reduce<string | undefined>(
|
|
190
|
-
(sum, value) =>
|
|
191
|
-
sum === undefined ? undefined : safeAddDecimalString(sum, value),
|
|
192
|
-
'0'
|
|
193
|
-
)
|
|
194
|
-
|
|
195
187
|
const tickToFeeString = (tick: number): string =>
|
|
196
|
-
|
|
188
|
+
divideDecimalString(
|
|
189
|
+
numberToDecimalString(tick),
|
|
190
|
+
numberToDecimalString(LIGHTER_FEE_TICK_SCALE)
|
|
191
|
+
)
|
|
197
192
|
|
|
198
193
|
const projectFeeTier = (
|
|
199
194
|
limits: LtAccountLimits
|
|
@@ -1095,13 +1090,16 @@ export const createLighterProvider = (
|
|
|
1095
1090
|
? readOnlyTokenManager.get(params.address, localKey.accountIndex)
|
|
1096
1091
|
: Promise.resolve(undefined),
|
|
1097
1092
|
])
|
|
1098
|
-
const positions: Position[] =
|
|
1099
|
-
|
|
1100
|
-
(id) => toPerpsMarketDisplay(registry.require(String(id)))
|
|
1093
|
+
const positions: Position[] = mapOpenPositions(account.positions, (id) =>
|
|
1094
|
+
toPerpsMarketDisplay(registry.require(String(id)))
|
|
1101
1095
|
)
|
|
1102
1096
|
|
|
1103
|
-
const totalMarginUsed =
|
|
1104
|
-
|
|
1097
|
+
const totalMarginUsed = safeAddDecimalStrings(
|
|
1098
|
+
positions.map((p) => p.marginUsed)
|
|
1099
|
+
)
|
|
1100
|
+
const totalUnrealizedPnl = safeAddDecimalStrings(
|
|
1101
|
+
positions.map((p) => p.unrealizedPnl)
|
|
1102
|
+
)
|
|
1105
1103
|
|
|
1106
1104
|
const instanceMeta = providers.find((p) => p.key === providerKey)
|
|
1107
1105
|
const categories = instanceMeta?.categories ?? []
|
package/src/accountSummary.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addDecimalString,
|
|
3
|
+
createWarnOnce,
|
|
4
|
+
isDecimalString,
|
|
3
5
|
PerpsError,
|
|
6
|
+
safeAddDecimalStrings,
|
|
4
7
|
subtractDecimalString,
|
|
5
8
|
unknownToDecimalString,
|
|
6
9
|
} from '@lifi/perps-sdk'
|
|
@@ -55,6 +58,22 @@ export const lighterPortfolioValue = (
|
|
|
55
58
|
perpsEquity
|
|
56
59
|
)
|
|
57
60
|
|
|
61
|
+
const warnSkippedTermOnce = createWarnOnce()
|
|
62
|
+
|
|
63
|
+
const sumReadableTerms = (terms: readonly string[], field: string): string => {
|
|
64
|
+
const readable = terms.filter((term) => {
|
|
65
|
+
if (isDecimalString(term)) {
|
|
66
|
+
return true
|
|
67
|
+
}
|
|
68
|
+
warnSkippedTermOnce(
|
|
69
|
+
`${LIGHTER_PROVIDER_KEY}|${field}`,
|
|
70
|
+
`[${LIGHTER_PROVIDER_KEY}] skipping a \`${field}\` term that does not match the decimal pattern: '${String(term).slice(0, 64)}'`
|
|
71
|
+
)
|
|
72
|
+
return false
|
|
73
|
+
})
|
|
74
|
+
return safeAddDecimalStrings(readable) ?? '0'
|
|
75
|
+
}
|
|
76
|
+
|
|
58
77
|
/**
|
|
59
78
|
* Roll up settlement equity, spot holdings and non-settlement margin holdings.
|
|
60
79
|
* The settlement asset counts as `totalAssetValue` plus its spot-route balance,
|
|
@@ -105,11 +124,13 @@ export function getAccountSummary(
|
|
|
105
124
|
)
|
|
106
125
|
)
|
|
107
126
|
),
|
|
108
|
-
marginUsed:
|
|
109
|
-
.map((p) => p.marginUsed)
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
.
|
|
127
|
+
marginUsed: sumReadableTerms(
|
|
128
|
+
positions.map((p) => p.marginUsed),
|
|
129
|
+
'position.marginUsed'
|
|
130
|
+
),
|
|
131
|
+
unrealizedPnl: sumReadableTerms(
|
|
132
|
+
positions.map((p) => p.unrealizedPnl),
|
|
133
|
+
'position.unrealizedPnl'
|
|
134
|
+
),
|
|
114
135
|
}
|
|
115
136
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -23,10 +23,8 @@ export { snapOrderPrice, snapOrderSize } from './orderFormatting.js'
|
|
|
23
23
|
export { toIsoFromMs, toIsoFromSeconds } from './time.js'
|
|
24
24
|
export { positionRemovableMargin } from './transferMargin.js'
|
|
25
25
|
export {
|
|
26
|
-
leverageToFraction,
|
|
27
26
|
mapOrderTypeToInt,
|
|
28
27
|
mapTimeInForceToInt,
|
|
29
|
-
marginFractionToMaxLeverage,
|
|
30
28
|
orderExpiryForTif,
|
|
31
29
|
resolveTimeInForce,
|
|
32
30
|
} from './wireEncoding.js'
|
package/src/utils/mapFill.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
PerpsErrorCode,
|
|
4
|
-
type PerpsMarketDisplay,
|
|
5
|
-
type Position,
|
|
6
|
-
} from '@lifi/perps-types'
|
|
7
|
-
import { LIGHTER_PROVIDER_KEY } from '../constants.js'
|
|
1
|
+
import { safeIsDecimalStringZero } from '@lifi/perps-sdk'
|
|
2
|
+
import type { PerpsMarketDisplay, Position } from '@lifi/perps-types'
|
|
8
3
|
import type { LtAccountPosition } from '../types/index.js'
|
|
9
4
|
import { mapPosition } from './mapPosition.js'
|
|
10
5
|
|
|
@@ -32,26 +27,3 @@ export const mapOpenPositions = (
|
|
|
32
27
|
const position = mapPosition(p, resolveMarket(p.market_id))
|
|
33
28
|
return position === undefined ? [] : [position]
|
|
34
29
|
})
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Map every open Lighter position for account totals, which must not leave a
|
|
38
|
-
* position out.
|
|
39
|
-
*
|
|
40
|
-
* @throws {PerpsError} `SDKError` when `mapPosition` skips an open row.
|
|
41
|
-
*/
|
|
42
|
-
export const requireOpenPositions = (
|
|
43
|
-
positions: LtAccountPosition[],
|
|
44
|
-
resolveMarket: (marketId: number) => PerpsMarketDisplay
|
|
45
|
-
): Position[] =>
|
|
46
|
-
positions.filter(isOpenPosition).map((p) => {
|
|
47
|
-
const position = mapPosition(p, resolveMarket(p.market_id))
|
|
48
|
-
if (position !== undefined) {
|
|
49
|
-
return position
|
|
50
|
-
}
|
|
51
|
-
const error = new PerpsError(
|
|
52
|
-
PerpsErrorCode.SDKError,
|
|
53
|
-
`${LIGHTER_PROVIDER_KEY} position for market ${p.market_id} is not valid, so the account totals are unknown.`
|
|
54
|
-
)
|
|
55
|
-
error.tool = LIGHTER_PROVIDER_KEY
|
|
56
|
-
throw error
|
|
57
|
-
})
|
package/src/utils/mapOrder.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isActiveOrderStatus,
|
|
3
|
-
isDecimalStringGreaterThan,
|
|
4
3
|
PerpsError,
|
|
5
4
|
safeDivideDecimalString,
|
|
5
|
+
safeIsDecimalStringGreaterThan,
|
|
6
6
|
safeTimestampToIsoString,
|
|
7
7
|
triggerConditionFor,
|
|
8
|
-
unknownToDecimalString,
|
|
9
8
|
warnSkippedVenueRow,
|
|
9
|
+
wsLog,
|
|
10
10
|
} from '@lifi/perps-sdk'
|
|
11
11
|
import type { MarketDisplay, Order, OrderBase } from '@lifi/perps-types'
|
|
12
12
|
import {
|
|
@@ -62,18 +62,8 @@ const mapTimeInForce = (tif: string): TimeInForce => {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
return unknownToDecimalString(value, field, LIGHTER_PROVIDER_KEY)
|
|
68
|
-
} catch {
|
|
69
|
-
return undefined
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const hasFill = (order: LtOrder): boolean => {
|
|
74
|
-
const filled = venueDecimal(order.filled_base_amount, 'filled_base_amount')
|
|
75
|
-
return filled !== undefined && isDecimalStringGreaterThan(filled, '0')
|
|
76
|
-
}
|
|
65
|
+
const hasFill = (order: LtOrder): boolean =>
|
|
66
|
+
safeIsDecimalStringGreaterThan(order.filled_base_amount, '0') === true
|
|
77
67
|
|
|
78
68
|
const mapOrderStatus = (order: LtOrder): OrderStatus => {
|
|
79
69
|
switch (order.status) {
|
|
@@ -113,67 +103,39 @@ const mapOrderStatus = (order: LtOrder): OrderStatus => {
|
|
|
113
103
|
}
|
|
114
104
|
}
|
|
115
105
|
|
|
116
|
-
const skipOrder = (
|
|
117
|
-
|
|
106
|
+
const skipOrder = (
|
|
107
|
+
marketId: string,
|
|
108
|
+
field: string,
|
|
109
|
+
value: unknown
|
|
110
|
+
): undefined => {
|
|
111
|
+
warnSkippedVenueRow(LIGHTER_PROVIDER_KEY, 'order', field, value, { marketId })
|
|
118
112
|
return undefined
|
|
119
113
|
}
|
|
120
114
|
|
|
121
|
-
const orderSizeOrSkip = (
|
|
122
|
-
field: 'initial_base_amount' | 'remaining_base_amount' | 'filled_base_amount',
|
|
123
|
-
value: string
|
|
124
|
-
): string | undefined =>
|
|
125
|
-
venueDecimal(value, field) === undefined ? skipOrder(field, value) : value
|
|
126
|
-
|
|
127
115
|
/**
|
|
128
116
|
* Map a Lighter order with its venue identity, lifecycle, and execution fields.
|
|
129
|
-
* A row with an invalid
|
|
130
|
-
*
|
|
117
|
+
* Venue sizes and prices pass verbatim. A row with an invalid time gives
|
|
118
|
+
* `undefined`. An average price that cannot be derived is omitted.
|
|
131
119
|
*/
|
|
132
120
|
export const mapOrder = (
|
|
133
121
|
order: LtOrder,
|
|
134
122
|
market: MarketDisplay
|
|
135
123
|
): Order | undefined => {
|
|
136
124
|
const type = mapOrderType(order.type)
|
|
137
|
-
const originalSize = orderSizeOrSkip(
|
|
138
|
-
'initial_base_amount',
|
|
139
|
-
order.initial_base_amount
|
|
140
|
-
)
|
|
141
|
-
if (originalSize === undefined) {
|
|
142
|
-
return undefined
|
|
143
|
-
}
|
|
144
|
-
const remainingSize = orderSizeOrSkip(
|
|
145
|
-
'remaining_base_amount',
|
|
146
|
-
order.remaining_base_amount
|
|
147
|
-
)
|
|
148
|
-
if (remainingSize === undefined) {
|
|
149
|
-
return undefined
|
|
150
|
-
}
|
|
151
|
-
const filledSize = orderSizeOrSkip(
|
|
152
|
-
'filled_base_amount',
|
|
153
|
-
order.filled_base_amount
|
|
154
|
-
)
|
|
155
|
-
if (filledSize === undefined) {
|
|
156
|
-
return undefined
|
|
157
|
-
}
|
|
158
125
|
const createdAt = rowTimestampToIsoStringOrUndefined(order.created_at * 1000)
|
|
159
126
|
if (createdAt === undefined) {
|
|
160
|
-
return skipOrder('created_at', order.created_at)
|
|
127
|
+
return skipOrder(market.id, 'created_at', order.created_at)
|
|
161
128
|
}
|
|
162
129
|
const updatedAt = rowTimestampToIsoStringOrUndefined(order.updated_at * 1000)
|
|
163
130
|
if (updatedAt === undefined) {
|
|
164
|
-
return skipOrder('updated_at', order.updated_at)
|
|
131
|
+
return skipOrder(market.id, 'updated_at', order.updated_at)
|
|
165
132
|
}
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
filledQuote !== undefined &&
|
|
173
|
-
filledAmount !== undefined &&
|
|
174
|
-
isDecimalStringGreaterThan(filledAmount, '0')
|
|
175
|
-
? safeDivideDecimalString(filledQuote, filledAmount)
|
|
176
|
-
: undefined
|
|
133
|
+
const averagePrice = hasFill(order)
|
|
134
|
+
? safeDivideDecimalString(
|
|
135
|
+
order.filled_quote_amount,
|
|
136
|
+
order.filled_base_amount
|
|
137
|
+
)
|
|
138
|
+
: undefined
|
|
177
139
|
const expiresAt =
|
|
178
140
|
order.order_expiry > 0
|
|
179
141
|
? safeTimestampToIsoString(order.order_expiry)
|
|
@@ -188,9 +150,9 @@ export const mapOrder = (
|
|
|
188
150
|
side: order.is_ask ? OrderSide.SELL : OrderSide.BUY,
|
|
189
151
|
status,
|
|
190
152
|
...(status === OrderStatus.CANCELLED ? { statusReason: order.status } : {}),
|
|
191
|
-
originalSize,
|
|
192
|
-
remainingSize,
|
|
193
|
-
filledSize,
|
|
153
|
+
originalSize: order.initial_base_amount,
|
|
154
|
+
remainingSize: order.remaining_base_amount,
|
|
155
|
+
filledSize: order.filled_base_amount,
|
|
194
156
|
...(averagePrice === undefined ? {} : { averagePrice }),
|
|
195
157
|
reduceOnly: order.reduce_only,
|
|
196
158
|
...(order.parent_order_id ? { parentOrderId: order.parent_order_id } : {}),
|
|
@@ -214,9 +176,8 @@ export const mapOrder = (
|
|
|
214
176
|
type,
|
|
215
177
|
triggerPrice: order.trigger_price,
|
|
216
178
|
triggerCondition: triggerConditionFor(type, base.side),
|
|
217
|
-
...(
|
|
218
|
-
|
|
219
|
-
venueDecimal(order.price, 'price') !== undefined
|
|
179
|
+
...(type === OrderType.STOP_LIMIT ||
|
|
180
|
+
type === OrderType.TAKE_PROFIT_LIMIT
|
|
220
181
|
? { limitPrice: order.price }
|
|
221
182
|
: {}),
|
|
222
183
|
}
|
|
@@ -233,7 +194,10 @@ export const mapOrder = (
|
|
|
233
194
|
}
|
|
234
195
|
}
|
|
235
196
|
|
|
236
|
-
/**
|
|
197
|
+
/**
|
|
198
|
+
* Include terminal rows and their ids so consumers can update history and
|
|
199
|
+
* active caches. A row the mapper rejects is dropped and warns once.
|
|
200
|
+
*/
|
|
237
201
|
export const mapOrderUpdates = (
|
|
238
202
|
rawOrders: LtOrder[],
|
|
239
203
|
resolveMarket: (marketIndex: number) => MarketDisplay | undefined
|
|
@@ -242,8 +206,23 @@ export const mapOrderUpdates = (
|
|
|
242
206
|
const terminated: string[] = []
|
|
243
207
|
for (const raw of rawOrders) {
|
|
244
208
|
const market = resolveMarket(raw.market_index)
|
|
245
|
-
|
|
246
|
-
|
|
209
|
+
let order: Order | undefined
|
|
210
|
+
let status: OrderStatus
|
|
211
|
+
try {
|
|
212
|
+
order = market === undefined ? undefined : mapOrder(raw, market)
|
|
213
|
+
status = order?.status ?? mapOrderStatus(raw)
|
|
214
|
+
} catch (error) {
|
|
215
|
+
if (!(error instanceof PerpsError)) {
|
|
216
|
+
throw error
|
|
217
|
+
}
|
|
218
|
+
wsLog.droppedRow(
|
|
219
|
+
LIGHTER_PROVIDER_KEY,
|
|
220
|
+
'order',
|
|
221
|
+
`${raw.order_index}: ${error.message}`
|
|
222
|
+
)
|
|
223
|
+
continue
|
|
224
|
+
}
|
|
225
|
+
if (!isActiveOrderStatus(status)) {
|
|
247
226
|
terminated.push(String(raw.order_index))
|
|
248
227
|
}
|
|
249
228
|
if (order !== undefined) {
|
|
@@ -69,8 +69,8 @@ function getCumulativeNetFlow(snapshot: LtPnLEntry): string {
|
|
|
69
69
|
* Historical account values are anchored to the current account value. A
|
|
70
70
|
* snapshot with a non-finite value is skipped.
|
|
71
71
|
*
|
|
72
|
-
* @throws {PerpsError} `ValidationError` when `currentValue`
|
|
73
|
-
*
|
|
72
|
+
* @throws {PerpsError} `ValidationError` when `currentValue` does not match the
|
|
73
|
+
* decimal pattern.
|
|
74
74
|
*/
|
|
75
75
|
export const mapPortfolioHistory = (
|
|
76
76
|
range: PortfolioHistoryRange,
|