@lifi/perps-sdk 0.0.0-preview-64fca0d → 0.0.0-preview-873c740
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/services/resolveQuote.d.ts +2 -1
- package/dist/cjs/services/resolveQuote.d.ts.map +1 -1
- package/dist/cjs/services/resolveQuote.js +16 -2
- package/dist/cjs/services/resolveQuote.js.map +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.js +2 -0
- package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/cjs/utils/calculations.d.ts +2 -1
- package/dist/cjs/utils/calculations.d.ts.map +1 -1
- package/dist/cjs/utils/calculations.js +4 -5
- package/dist/cjs/utils/calculations.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/services/resolveQuote.d.ts +11 -1
- package/dist/esm/services/resolveQuote.d.ts.map +1 -1
- package/dist/esm/services/resolveQuote.js +24 -2
- package/dist/esm/services/resolveQuote.js.map +1 -1
- package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/esm/services/resolveSubscribeQuote.js +3 -1
- package/dist/esm/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/esm/utils/calculations.d.ts +8 -6
- package/dist/esm/utils/calculations.d.ts.map +1 -1
- package/dist/esm/utils/calculations.js +9 -9
- package/dist/esm/utils/calculations.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/services/resolveQuote.d.ts +11 -1
- package/dist/types/services/resolveQuote.d.ts.map +1 -1
- package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/types/utils/calculations.d.ts +8 -6
- package/dist/types/utils/calculations.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/services/resolveQuote.ts +38 -6
- package/src/services/resolveSubscribeQuote.ts +3 -1
- package/src/utils/calculations.ts +12 -13
- package/src/version.ts +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type FeeTier, type Market, type Quote } from '@lifi/perps-types';
|
|
1
|
+
import { type FeeTier, type Market, type MarketPrice, type Quote } from '@lifi/perps-types';
|
|
2
2
|
import type { SDKRequestOptions } from '../types/config.js';
|
|
3
3
|
import type { PerpsSDKClient, ProviderGetQuoteParams } from '../types/provider.js';
|
|
4
4
|
export declare function resolveQuote(client: PerpsSDKClient, provider: string, params: ProviderGetQuoteParams, feeTier: FeeTier, options?: SDKRequestOptions): Promise<Quote>;
|
|
5
5
|
export declare function resolveQuoteMarket(client: PerpsSDKClient, provider: string, params: Pick<ProviderGetQuoteParams, 'symbol' | 'type'>, options?: SDKRequestOptions): Promise<Market>;
|
|
6
|
+
export declare function resolveQuotePrice(client: PerpsSDKClient, provider: string, marketId: string, options?: SDKRequestOptions): Promise<MarketPrice>;
|
|
6
7
|
//# sourceMappingURL=resolveQuote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,WAAW,EAEhB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,sBAAsB,CAAA;AAiB7B,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,KAAK,CAAC,CAqBhB;AAWD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,CAAC,EACvD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAgBD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CActB"}
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveQuote = resolveQuote;
|
|
4
4
|
exports.resolveQuoteMarket = resolveQuoteMarket;
|
|
5
|
+
exports.resolveQuotePrice = resolveQuotePrice;
|
|
5
6
|
const perps_types_1 = require("@lifi/perps-types");
|
|
6
7
|
const PerpsError_js_1 = require("../errors/PerpsError.js");
|
|
7
8
|
const calculations_js_1 = require("../utils/calculations.js");
|
|
8
9
|
const getMarkets_js_1 = require("./getMarkets.js");
|
|
9
10
|
const getOrderbook_js_1 = require("./getOrderbook.js");
|
|
11
|
+
const getPrices_js_1 = require("./getPrices.js");
|
|
10
12
|
async function resolveQuote(client, provider, params, feeTier, options) {
|
|
11
13
|
const market = await resolveQuoteMarket(client, provider, params, options);
|
|
12
|
-
const { bids, asks } = await
|
|
14
|
+
const [{ bids, asks }, price] = await Promise.all([
|
|
15
|
+
(0, getOrderbook_js_1.getOrderbook)(client, { provider, marketId: market.id }, options),
|
|
16
|
+
resolveQuotePrice(client, provider, market.id, options),
|
|
17
|
+
]);
|
|
13
18
|
return (0, calculations_js_1.buildQuote)({
|
|
14
19
|
provider,
|
|
15
20
|
symbol: params.symbol,
|
|
@@ -17,6 +22,7 @@ async function resolveQuote(client, provider, params, feeTier, options) {
|
|
|
17
22
|
side: params.side,
|
|
18
23
|
sizeUsd: params.size,
|
|
19
24
|
market,
|
|
25
|
+
price,
|
|
20
26
|
bids,
|
|
21
27
|
asks,
|
|
22
28
|
feeTier,
|
|
@@ -32,5 +38,13 @@ async function resolveQuoteMarket(client, provider, params, options) {
|
|
|
32
38
|
}
|
|
33
39
|
return market;
|
|
34
40
|
}
|
|
35
|
-
const isMarketOfType = (market, type) => ('
|
|
41
|
+
const isMarketOfType = (market, type) => ('maxLeverage' in market ? type === 'perps' : type === 'spot');
|
|
42
|
+
async function resolveQuotePrice(client, provider, marketId, options) {
|
|
43
|
+
const { prices } = await (0, getPrices_js_1.getPrices)(client, { provider, marketIds: [marketId] }, options);
|
|
44
|
+
const price = prices.find((p) => p.marketId === marketId);
|
|
45
|
+
if (price === undefined) {
|
|
46
|
+
throw new PerpsError_js_1.PerpsError(perps_types_1.PerpsErrorCode.ServerError, `No price returned by '${provider}' for marketId '${marketId}'.`);
|
|
47
|
+
}
|
|
48
|
+
return price;
|
|
49
|
+
}
|
|
36
50
|
//# sourceMappingURL=resolveQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveQuote.js","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resolveQuote.js","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":";;AA6BA,oCA2BC;AAWD,gDAmBC;AAgBD,8CAmBC;AAzHD,mDAM0B;AAC1B,2DAAoD;AAMpD,8DAAqD;AACrD,mDAA4C;AAC5C,uDAAgD;AAChD,iDAA0C;AAanC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,QAAgB,EAChB,MAA8B,EAC9B,OAAgB,EAChB,OAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAE1E,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,IAAA,8BAAY,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;QAChE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;KACxD,CAAC,CAAA;IAEF,OAAO,IAAA,4BAAU,EAAC;QAChB,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,MAAM;QACN,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAA;AACJ,CAAC;AAWM,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,QAAgB,EAChB,MAAuD,EACvD,OAA2B;IAE3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,0BAAU,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,CAAC,aAAa,KAAK,MAAM,CAAC,MAAM;QAC3C,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CACjC,CAAA;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,0BAAU,CAClB,4BAAc,CAAC,cAAc,EAC7B,MAAM,MAAM,CAAC,IAAI,qBAAqB,QAAQ,iBAAiB,MAAM,CAAC,MAAM,IAAI,CACjF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,MAAc,EACd,IAAoC,EAC3B,EAAE,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;AAWrE,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,QAAgB,EAChB,QAAgB,EAChB,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAS,EAChC,MAAM,EACN,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,EACnC,OAAO,CACR,CAAA;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;IACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,0BAAU,CAClB,4BAAc,CAAC,WAAW,EAC1B,yBAAyB,QAAQ,mBAAmB,QAAQ,IAAI,CACjE,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAUvD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAoBpC,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAUvD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAoBpC,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,CAgErB"}
|
|
@@ -7,6 +7,7 @@ const resolveQuote_js_1 = require("./resolveQuote.js");
|
|
|
7
7
|
exports.QUOTE_THROTTLE_MS = 100;
|
|
8
8
|
async function resolveSubscribeQuote(client, provider, ws, params, feeTier, onQuote) {
|
|
9
9
|
const market = await (0, resolveQuote_js_1.resolveQuoteMarket)(client, provider, params);
|
|
10
|
+
const price = await (0, resolveQuote_js_1.resolveQuotePrice)(client, provider, market.id);
|
|
10
11
|
let latestBook;
|
|
11
12
|
let lastEmitAt = Number.NEGATIVE_INFINITY;
|
|
12
13
|
let trailing;
|
|
@@ -22,6 +23,7 @@ async function resolveSubscribeQuote(client, provider, ws, params, feeTier, onQu
|
|
|
22
23
|
side: params.side,
|
|
23
24
|
sizeUsd: params.size,
|
|
24
25
|
market,
|
|
26
|
+
price,
|
|
25
27
|
bids: latestBook.bids,
|
|
26
28
|
asks: latestBook.asks,
|
|
27
29
|
feeTier,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSubscribeQuote.js","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":";;;AAqCA,
|
|
1
|
+
{"version":3,"file":"resolveSubscribeQuote.js","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":";;;AAqCA,sDAuEC;AAtGD,8DAAqD;AAErD,uDAAyE;AAS5D,QAAA,iBAAiB,GAAG,GAAG,CAAA;AAoB7B,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,QAAgB,EAChB,EAAiC,EACjC,MAA8B,EAC9B,OAAgB,EAChB,OAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAkB,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,MAAM,IAAA,mCAAiB,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IAElE,IAAI,UAAyC,CAAA;IAC7C,IAAI,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACzC,IAAI,QAAmD,CAAA;IAEvD,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACvB,OAAO,CACL,IAAA,4BAAU,EAAC;YACT,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,MAAM;YACN,KAAK;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,SAAS,CACpC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EAC5D,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAClC,OAAM;QACR,CAAC;QACD,UAAU,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,yBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAA;QAC1D,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,IAAI,EAAE,CAAA;QACR,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBACzB,QAAQ,GAAG,SAAS,CAAA;gBACpB,IAAI,EAAE,CAAA;YACR,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;IACH,CAAC,CACF,CAAA;IAED,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QACD,QAAQ,GAAG,IAAI,CAAA;QACf,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,CAAC,CAAA;YACtB,QAAQ,GAAG,SAAS,CAAA;QACtB,CAAC;QACD,WAAW,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FeeTier, Market, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
1
|
+
import type { FeeTier, Market, MarketPrice, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
2
2
|
export declare function calculatePositionSize(marginUsd: number, leverage: number, price: number): number;
|
|
3
3
|
export declare function calculateNotionalValue(size: number, price: number): number;
|
|
4
4
|
export declare function calculateUnrealizedPnl(entryPrice: number, currentPrice: number, size: number): number;
|
|
@@ -41,6 +41,7 @@ interface BuildQuoteInput {
|
|
|
41
41
|
side: QuoteSide;
|
|
42
42
|
sizeUsd: number;
|
|
43
43
|
market: Market;
|
|
44
|
+
price: MarketPrice;
|
|
44
45
|
bids: OrderbookLevel[];
|
|
45
46
|
asks: OrderbookLevel[];
|
|
46
47
|
feeTier: FeeTier;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,cAAc,
|
|
1
|
+
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,10 +117,9 @@ function walkOrderbook(levels, sizeUsd) {
|
|
|
117
117
|
insufficientLiquidity: remaining > 0,
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
-
const isPerpsMarket = (market) => 'funding' in market;
|
|
121
120
|
function buildQuote(input) {
|
|
122
|
-
const { market, side, sizeUsd, feeTier } = input;
|
|
123
|
-
const markPrice = Number.parseFloat(
|
|
121
|
+
const { market, price, side, sizeUsd, feeTier } = input;
|
|
122
|
+
const markPrice = Number.parseFloat(price.markPrice);
|
|
124
123
|
const levels = side === 'buy' ? input.asks : input.bids;
|
|
125
124
|
const walk = walkOrderbook(levels, sizeUsd);
|
|
126
125
|
const priceImpactBps = markPrice === 0 || walk.vwap === 0
|
|
@@ -135,13 +134,13 @@ function buildQuote(input) {
|
|
|
135
134
|
side,
|
|
136
135
|
sizeUsd: sizeUsd.toString(),
|
|
137
136
|
baseSize: walk.baseSize.toString(),
|
|
138
|
-
markPrice:
|
|
137
|
+
markPrice: price.markPrice,
|
|
139
138
|
expectedFillPrice: walk.vwap.toString(),
|
|
140
139
|
priceImpactBps: priceImpactBps.toString(),
|
|
141
140
|
feeTier,
|
|
142
141
|
isDefaultFeeTier: true,
|
|
143
142
|
feeUsd: feeUsd.toString(),
|
|
144
|
-
funding:
|
|
143
|
+
funding: price.funding ?? null,
|
|
145
144
|
insufficientLiquidity: walk.insufficientLiquidity,
|
|
146
145
|
timestamp: input.timestamp,
|
|
147
146
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":";;AA+BA,sDAMC;AAUD,wDAEC;AAWD,wDAMC;AAUD,oCAKC;AAUD,0DAKC;AAUD,oCAEC;AAWD,sCAOC;AAWD,gEASC;AAYD,8CASC;AAiBD,0CAWC;AAuBD,oDAgBC;AAWD,4CAWC;AAWD,4CAWC;AAWD,kEAUC;AAwBD,sCAwBC;
|
|
1
|
+
{"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type FeeTier, type Market, type Quote } from '@lifi/perps-types';
|
|
1
|
+
import { type FeeTier, type Market, type MarketPrice, type Quote } from '@lifi/perps-types';
|
|
2
2
|
import type { SDKRequestOptions } from '../types/config.js';
|
|
3
3
|
import type { PerpsSDKClient, ProviderGetQuoteParams } from '../types/provider.js';
|
|
4
4
|
/**
|
|
@@ -23,4 +23,14 @@ export declare function resolveQuote(client: PerpsSDKClient, provider: string, p
|
|
|
23
23
|
* @internal
|
|
24
24
|
*/
|
|
25
25
|
export declare function resolveQuoteMarket(client: PerpsSDKClient, provider: string, params: Pick<ProviderGetQuoteParams, 'symbol' | 'type'>, options?: SDKRequestOptions): Promise<Market>;
|
|
26
|
+
/**
|
|
27
|
+
* Fetch the live {@link MarketPrice} for `marketId` on `provider`, the source
|
|
28
|
+
* of the `markPrice` and `funding` a {@link Quote} carries. Shared by the
|
|
29
|
+
* one-shot {@link resolveQuote} and the streaming quote subscription.
|
|
30
|
+
*
|
|
31
|
+
* @throws {PerpsError} `ServerError` when the provider returns no price for the
|
|
32
|
+
* market.
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveQuotePrice(client: PerpsSDKClient, provider: string, marketId: string, options?: SDKRequestOptions): Promise<MarketPrice>;
|
|
26
36
|
//# sourceMappingURL=resolveQuote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,WAAW,EAEhB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,sBAAsB,CAAA;AAM7B;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,KAAK,CAAC,CAqBhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,CAAC,EACvD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAOD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CActB"}
|
|
@@ -3,6 +3,7 @@ import { PerpsError } from '../errors/PerpsError.js';
|
|
|
3
3
|
import { buildQuote } from '../utils/calculations.js';
|
|
4
4
|
import { getMarkets } from './getMarkets.js';
|
|
5
5
|
import { getOrderbook } from './getOrderbook.js';
|
|
6
|
+
import { getPrices } from './getPrices.js';
|
|
6
7
|
/**
|
|
7
8
|
* Shared provider-side `getQuote` implementation: resolve `params.symbol` to a
|
|
8
9
|
* market on `provider` (matching `baseAsset.displaySymbol`, scoped by
|
|
@@ -16,7 +17,10 @@ import { getOrderbook } from './getOrderbook.js';
|
|
|
16
17
|
*/
|
|
17
18
|
export async function resolveQuote(client, provider, params, feeTier, options) {
|
|
18
19
|
const market = await resolveQuoteMarket(client, provider, params, options);
|
|
19
|
-
const { bids, asks } = await
|
|
20
|
+
const [{ bids, asks }, price] = await Promise.all([
|
|
21
|
+
getOrderbook(client, { provider, marketId: market.id }, options),
|
|
22
|
+
resolveQuotePrice(client, provider, market.id, options),
|
|
23
|
+
]);
|
|
20
24
|
return buildQuote({
|
|
21
25
|
provider,
|
|
22
26
|
symbol: params.symbol,
|
|
@@ -24,6 +28,7 @@ export async function resolveQuote(client, provider, params, feeTier, options) {
|
|
|
24
28
|
side: params.side,
|
|
25
29
|
sizeUsd: params.size,
|
|
26
30
|
market,
|
|
31
|
+
price,
|
|
27
32
|
bids,
|
|
28
33
|
asks,
|
|
29
34
|
feeTier,
|
|
@@ -48,5 +53,22 @@ export async function resolveQuoteMarket(client, provider, params, options) {
|
|
|
48
53
|
}
|
|
49
54
|
return market;
|
|
50
55
|
}
|
|
51
|
-
const isMarketOfType = (market, type) => ('
|
|
56
|
+
const isMarketOfType = (market, type) => ('maxLeverage' in market ? type === 'perps' : type === 'spot');
|
|
57
|
+
/**
|
|
58
|
+
* Fetch the live {@link MarketPrice} for `marketId` on `provider`, the source
|
|
59
|
+
* of the `markPrice` and `funding` a {@link Quote} carries. Shared by the
|
|
60
|
+
* one-shot {@link resolveQuote} and the streaming quote subscription.
|
|
61
|
+
*
|
|
62
|
+
* @throws {PerpsError} `ServerError` when the provider returns no price for the
|
|
63
|
+
* market.
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export async function resolveQuotePrice(client, provider, marketId, options) {
|
|
67
|
+
const { prices } = await getPrices(client, { provider, marketIds: [marketId] }, options);
|
|
68
|
+
const price = prices.find((p) => p.marketId === marketId);
|
|
69
|
+
if (price === undefined) {
|
|
70
|
+
throw new PerpsError(PerpsErrorCode.ServerError, `No price returned by '${provider}' for marketId '${marketId}'.`);
|
|
71
|
+
}
|
|
72
|
+
return price;
|
|
73
|
+
}
|
|
52
74
|
//# sourceMappingURL=resolveQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveQuote.js","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolveQuote.js","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,CAgErB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { buildQuote } from '../utils/calculations.js';
|
|
2
|
-
import { resolveQuoteMarket } from './resolveQuote.js';
|
|
2
|
+
import { resolveQuoteMarket, resolveQuotePrice } from './resolveQuote.js';
|
|
3
3
|
/**
|
|
4
4
|
* Minimum gap between successive streamed {@link Quote} emissions — the same
|
|
5
5
|
* 100 ms pacing applied to streamed orderbook rendering, so a quote ticks no
|
|
@@ -28,6 +28,7 @@ export const QUOTE_THROTTLE_MS = 100;
|
|
|
28
28
|
*/
|
|
29
29
|
export async function resolveSubscribeQuote(client, provider, ws, params, feeTier, onQuote) {
|
|
30
30
|
const market = await resolveQuoteMarket(client, provider, params);
|
|
31
|
+
const price = await resolveQuotePrice(client, provider, market.id);
|
|
31
32
|
let latestBook;
|
|
32
33
|
let lastEmitAt = Number.NEGATIVE_INFINITY;
|
|
33
34
|
let trailing;
|
|
@@ -43,6 +44,7 @@ export async function resolveSubscribeQuote(client, provider, ws, params, feeTie
|
|
|
43
44
|
side: params.side,
|
|
44
45
|
sizeUsd: params.size,
|
|
45
46
|
market,
|
|
47
|
+
price,
|
|
46
48
|
bids: latestBook.bids,
|
|
47
49
|
asks: latestBook.asks,
|
|
48
50
|
feeTier,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSubscribeQuote.js","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"resolveSubscribeQuote.js","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,QAAgB,EAChB,EAAiC,EACjC,MAA8B,EAC9B,OAAgB,EAChB,OAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IAElE,IAAI,UAAyC,CAAA;IAC7C,IAAI,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACzC,IAAI,QAAmD,CAAA;IAEvD,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACvB,OAAO,CACL,UAAU,CAAC;YACT,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,MAAM;YACN,KAAK;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,SAAS,CACpC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EAC5D,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAClC,OAAM;QACR,CAAC;QACD,UAAU,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAA;QAC1D,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,IAAI,EAAE,CAAA;QACR,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBACzB,QAAQ,GAAG,SAAS,CAAA;gBACpB,IAAI,EAAE,CAAA;YACR,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;IACH,CAAC,CACF,CAAA;IAED,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QACD,QAAQ,GAAG,IAAI,CAAA;QACf,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,CAAC,CAAA;YACtB,QAAQ,GAAG,SAAS,CAAA;QACtB,CAAC;QACD,WAAW,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* of the perps SDK would need. All parameters are required — no default
|
|
6
6
|
* values for critical financial parameters.
|
|
7
7
|
*/
|
|
8
|
-
import type { FeeTier, Market, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
8
|
+
import type { FeeTier, Market, MarketPrice, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
9
9
|
/**
|
|
10
10
|
* Calculate position size in asset units from margin.
|
|
11
11
|
*
|
|
@@ -196,7 +196,7 @@ interface BookWalk {
|
|
|
196
196
|
* @public
|
|
197
197
|
*/
|
|
198
198
|
export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd: number): BookWalk;
|
|
199
|
-
/** Inputs to {@link buildQuote} — the resolved market, its book, and the trade ask. */
|
|
199
|
+
/** Inputs to {@link buildQuote} — the resolved market, its live price, its book, and the trade ask. */
|
|
200
200
|
interface BuildQuoteInput {
|
|
201
201
|
provider: string;
|
|
202
202
|
symbol: string;
|
|
@@ -204,6 +204,7 @@ interface BuildQuoteInput {
|
|
|
204
204
|
side: QuoteSide;
|
|
205
205
|
sizeUsd: number;
|
|
206
206
|
market: Market;
|
|
207
|
+
price: MarketPrice;
|
|
207
208
|
bids: OrderbookLevel[];
|
|
208
209
|
asks: OrderbookLevel[];
|
|
209
210
|
/** Public base-tier fees for the venue; `isDefaultFeeTier` is always set true. */
|
|
@@ -211,10 +212,11 @@ interface BuildQuoteInput {
|
|
|
211
212
|
timestamp: number;
|
|
212
213
|
}
|
|
213
214
|
/**
|
|
214
|
-
* Build a {@link Quote} from a resolved market
|
|
215
|
-
* walks the relevant side (buy → asks,
|
|
216
|
-
*
|
|
217
|
-
* the filled notional, and carries
|
|
215
|
+
* Build a {@link Quote} from a resolved market, its live {@link MarketPrice},
|
|
216
|
+
* and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
|
|
217
|
+
* sell → bids) for the VWAP fill, derives the price impact in basis points
|
|
218
|
+
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
219
|
+
* the market's `funding` (`null` for spot, which has none).
|
|
218
220
|
*
|
|
219
221
|
* @public
|
|
220
222
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,cAAc,
|
|
1
|
+
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
|
|
@@ -251,18 +251,18 @@ export function walkOrderbook(levels, sizeUsd) {
|
|
|
251
251
|
insufficientLiquidity: remaining > 0,
|
|
252
252
|
};
|
|
253
253
|
}
|
|
254
|
-
const isPerpsMarket = (market) => 'funding' in market;
|
|
255
254
|
/**
|
|
256
|
-
* Build a {@link Quote} from a resolved market
|
|
257
|
-
* walks the relevant side (buy → asks,
|
|
258
|
-
*
|
|
259
|
-
* the filled notional, and carries
|
|
255
|
+
* Build a {@link Quote} from a resolved market, its live {@link MarketPrice},
|
|
256
|
+
* and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
|
|
257
|
+
* sell → bids) for the VWAP fill, derives the price impact in basis points
|
|
258
|
+
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
259
|
+
* the market's `funding` (`null` for spot, which has none).
|
|
260
260
|
*
|
|
261
261
|
* @public
|
|
262
262
|
*/
|
|
263
263
|
export function buildQuote(input) {
|
|
264
|
-
const { market, side, sizeUsd, feeTier } = input;
|
|
265
|
-
const markPrice = Number.parseFloat(
|
|
264
|
+
const { market, price, side, sizeUsd, feeTier } = input;
|
|
265
|
+
const markPrice = Number.parseFloat(price.markPrice);
|
|
266
266
|
const levels = side === 'buy' ? input.asks : input.bids;
|
|
267
267
|
const walk = walkOrderbook(levels, sizeUsd);
|
|
268
268
|
const priceImpactBps = markPrice === 0 || walk.vwap === 0
|
|
@@ -277,13 +277,13 @@ export function buildQuote(input) {
|
|
|
277
277
|
side,
|
|
278
278
|
sizeUsd: sizeUsd.toString(),
|
|
279
279
|
baseSize: walk.baseSize.toString(),
|
|
280
|
-
markPrice:
|
|
280
|
+
markPrice: price.markPrice,
|
|
281
281
|
expectedFillPrice: walk.vwap.toString(),
|
|
282
282
|
priceImpactBps: priceImpactBps.toString(),
|
|
283
283
|
feeTier,
|
|
284
284
|
isDefaultFeeTier: true,
|
|
285
285
|
feeUsd: feeUsd.toString(),
|
|
286
|
-
funding:
|
|
286
|
+
funding: price.funding ?? null,
|
|
287
287
|
insufficientLiquidity: walk.insufficientLiquidity,
|
|
288
288
|
timestamp: input.timestamp,
|
|
289
289
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type FeeTier, type Market, type Quote } from '@lifi/perps-types';
|
|
1
|
+
import { type FeeTier, type Market, type MarketPrice, type Quote } from '@lifi/perps-types';
|
|
2
2
|
import type { SDKRequestOptions } from '../types/config.js';
|
|
3
3
|
import type { PerpsSDKClient, ProviderGetQuoteParams } from '../types/provider.js';
|
|
4
4
|
/**
|
|
@@ -23,4 +23,14 @@ export declare function resolveQuote(client: PerpsSDKClient, provider: string, p
|
|
|
23
23
|
* @internal
|
|
24
24
|
*/
|
|
25
25
|
export declare function resolveQuoteMarket(client: PerpsSDKClient, provider: string, params: Pick<ProviderGetQuoteParams, 'symbol' | 'type'>, options?: SDKRequestOptions): Promise<Market>;
|
|
26
|
+
/**
|
|
27
|
+
* Fetch the live {@link MarketPrice} for `marketId` on `provider`, the source
|
|
28
|
+
* of the `markPrice` and `funding` a {@link Quote} carries. Shared by the
|
|
29
|
+
* one-shot {@link resolveQuote} and the streaming quote subscription.
|
|
30
|
+
*
|
|
31
|
+
* @throws {PerpsError} `ServerError` when the provider returns no price for the
|
|
32
|
+
* market.
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveQuotePrice(client: PerpsSDKClient, provider: string, marketId: string, options?: SDKRequestOptions): Promise<MarketPrice>;
|
|
26
36
|
//# sourceMappingURL=resolveQuote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"resolveQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,WAAW,EAEhB,KAAK,KAAK,EACX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,sBAAsB,CAAA;AAM7B;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,KAAK,CAAC,CAqBhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,CAAC,EACvD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAOD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,CAAC,CActB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"resolveSubscribeQuote.d.ts","sourceRoot":"","sources":["../../../src/services/resolveSubscribeQuote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC,CAgErB"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* of the perps SDK would need. All parameters are required — no default
|
|
6
6
|
* values for critical financial parameters.
|
|
7
7
|
*/
|
|
8
|
-
import type { FeeTier, Market, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
8
|
+
import type { FeeTier, Market, MarketPrice, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
|
|
9
9
|
/**
|
|
10
10
|
* Calculate position size in asset units from margin.
|
|
11
11
|
*
|
|
@@ -196,7 +196,7 @@ interface BookWalk {
|
|
|
196
196
|
* @public
|
|
197
197
|
*/
|
|
198
198
|
export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd: number): BookWalk;
|
|
199
|
-
/** Inputs to {@link buildQuote} — the resolved market, its book, and the trade ask. */
|
|
199
|
+
/** Inputs to {@link buildQuote} — the resolved market, its live price, its book, and the trade ask. */
|
|
200
200
|
interface BuildQuoteInput {
|
|
201
201
|
provider: string;
|
|
202
202
|
symbol: string;
|
|
@@ -204,6 +204,7 @@ interface BuildQuoteInput {
|
|
|
204
204
|
side: QuoteSide;
|
|
205
205
|
sizeUsd: number;
|
|
206
206
|
market: Market;
|
|
207
|
+
price: MarketPrice;
|
|
207
208
|
bids: OrderbookLevel[];
|
|
208
209
|
asks: OrderbookLevel[];
|
|
209
210
|
/** Public base-tier fees for the venue; `isDefaultFeeTier` is always set true. */
|
|
@@ -211,10 +212,11 @@ interface BuildQuoteInput {
|
|
|
211
212
|
timestamp: number;
|
|
212
213
|
}
|
|
213
214
|
/**
|
|
214
|
-
* Build a {@link Quote} from a resolved market
|
|
215
|
-
* walks the relevant side (buy → asks,
|
|
216
|
-
*
|
|
217
|
-
* the filled notional, and carries
|
|
215
|
+
* Build a {@link Quote} from a resolved market, its live {@link MarketPrice},
|
|
216
|
+
* and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
|
|
217
|
+
* sell → bids) for the VWAP fill, derives the price impact in basis points
|
|
218
|
+
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
219
|
+
* the market's `funding` (`null` for spot, which has none).
|
|
218
220
|
*
|
|
219
221
|
* @public
|
|
220
222
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,cAAc,
|
|
1
|
+
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,WAAW,EACX,cAAc,EACd,KAAK,EACL,SAAS,EACT,SAAS,EACV,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,GACb,MAAM,CAGR;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,MAAM,CAMT;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CAMT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,MAAM,CAOT;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,GACb,WAAW,GAAG,IAAI,CAUpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR;AAED,mFAAmF;AACnF,UAAU,QAAQ;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,cAAc,EAAE,MAAM,CAAA;IACtB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,QAAQ,CAqBV;AAED,uGAAuG;AACvG,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,kFAAkF;IAClF,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CA+BxD"}
|
package/dist/types/version.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk",
|
|
3
|
-
"version": "0.0.0-preview-
|
|
3
|
+
"version": "0.0.0-preview-873c740",
|
|
4
4
|
"description": "LI.FI Perps SDK for perpetuals trading",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@lifi/types": "17.82.1",
|
|
45
45
|
"partysocket": "^1.1.19",
|
|
46
46
|
"viem": "^2.48.8",
|
|
47
|
-
"@lifi/perps-types": "0.0.0-preview-
|
|
47
|
+
"@lifi/perps-types": "0.0.0-preview-873c740"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type FeeTier,
|
|
3
3
|
type Market,
|
|
4
|
+
type MarketPrice,
|
|
4
5
|
PerpsErrorCode,
|
|
5
6
|
type Quote,
|
|
6
7
|
} from '@lifi/perps-types'
|
|
@@ -13,6 +14,7 @@ import type {
|
|
|
13
14
|
import { buildQuote } from '../utils/calculations.js'
|
|
14
15
|
import { getMarkets } from './getMarkets.js'
|
|
15
16
|
import { getOrderbook } from './getOrderbook.js'
|
|
17
|
+
import { getPrices } from './getPrices.js'
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Shared provider-side `getQuote` implementation: resolve `params.symbol` to a
|
|
@@ -34,11 +36,10 @@ export async function resolveQuote(
|
|
|
34
36
|
): Promise<Quote> {
|
|
35
37
|
const market = await resolveQuoteMarket(client, provider, params, options)
|
|
36
38
|
|
|
37
|
-
const { bids, asks } = await
|
|
38
|
-
client,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
)
|
|
39
|
+
const [{ bids, asks }, price] = await Promise.all([
|
|
40
|
+
getOrderbook(client, { provider, marketId: market.id }, options),
|
|
41
|
+
resolveQuotePrice(client, provider, market.id, options),
|
|
42
|
+
])
|
|
42
43
|
|
|
43
44
|
return buildQuote({
|
|
44
45
|
provider,
|
|
@@ -47,6 +48,7 @@ export async function resolveQuote(
|
|
|
47
48
|
side: params.side,
|
|
48
49
|
sizeUsd: params.size,
|
|
49
50
|
market,
|
|
51
|
+
price,
|
|
50
52
|
bids,
|
|
51
53
|
asks,
|
|
52
54
|
feeTier,
|
|
@@ -87,4 +89,34 @@ export async function resolveQuoteMarket(
|
|
|
87
89
|
const isMarketOfType = (
|
|
88
90
|
market: Market,
|
|
89
91
|
type: ProviderGetQuoteParams['type']
|
|
90
|
-
): boolean => ('
|
|
92
|
+
): boolean => ('maxLeverage' in market ? type === 'perps' : type === 'spot')
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Fetch the live {@link MarketPrice} for `marketId` on `provider`, the source
|
|
96
|
+
* of the `markPrice` and `funding` a {@link Quote} carries. Shared by the
|
|
97
|
+
* one-shot {@link resolveQuote} and the streaming quote subscription.
|
|
98
|
+
*
|
|
99
|
+
* @throws {PerpsError} `ServerError` when the provider returns no price for the
|
|
100
|
+
* market.
|
|
101
|
+
* @internal
|
|
102
|
+
*/
|
|
103
|
+
export async function resolveQuotePrice(
|
|
104
|
+
client: PerpsSDKClient,
|
|
105
|
+
provider: string,
|
|
106
|
+
marketId: string,
|
|
107
|
+
options?: SDKRequestOptions
|
|
108
|
+
): Promise<MarketPrice> {
|
|
109
|
+
const { prices } = await getPrices(
|
|
110
|
+
client,
|
|
111
|
+
{ provider, marketIds: [marketId] },
|
|
112
|
+
options
|
|
113
|
+
)
|
|
114
|
+
const price = prices.find((p) => p.marketId === marketId)
|
|
115
|
+
if (price === undefined) {
|
|
116
|
+
throw new PerpsError(
|
|
117
|
+
PerpsErrorCode.ServerError,
|
|
118
|
+
`No price returned by '${provider}' for marketId '${marketId}'.`
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
return price
|
|
122
|
+
}
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
} from '../types/provider.js'
|
|
7
7
|
import { buildQuote } from '../utils/calculations.js'
|
|
8
8
|
import type { WsProvider } from '../websocket/types.js'
|
|
9
|
-
import { resolveQuoteMarket } from './resolveQuote.js'
|
|
9
|
+
import { resolveQuoteMarket, resolveQuotePrice } from './resolveQuote.js'
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Minimum gap between successive streamed {@link Quote} emissions — the same
|
|
@@ -44,6 +44,7 @@ export async function resolveSubscribeQuote(
|
|
|
44
44
|
onQuote: QuoteListener
|
|
45
45
|
): Promise<() => void> {
|
|
46
46
|
const market = await resolveQuoteMarket(client, provider, params)
|
|
47
|
+
const price = await resolveQuotePrice(client, provider, market.id)
|
|
47
48
|
|
|
48
49
|
let latestBook: OrderbookResponse | undefined
|
|
49
50
|
let lastEmitAt = Number.NEGATIVE_INFINITY
|
|
@@ -62,6 +63,7 @@ export async function resolveSubscribeQuote(
|
|
|
62
63
|
side: params.side,
|
|
63
64
|
sizeUsd: params.size,
|
|
64
65
|
market,
|
|
66
|
+
price,
|
|
65
67
|
bids: latestBook.bids,
|
|
66
68
|
asks: latestBook.asks,
|
|
67
69
|
feeTier,
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
import type {
|
|
10
10
|
FeeTier,
|
|
11
11
|
Market,
|
|
12
|
+
MarketPrice,
|
|
12
13
|
OrderbookLevel,
|
|
13
|
-
PerpsMarket,
|
|
14
14
|
Quote,
|
|
15
15
|
QuoteSide,
|
|
16
16
|
TradeType,
|
|
@@ -347,7 +347,7 @@ export function walkOrderbook(
|
|
|
347
347
|
}
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
/** Inputs to {@link buildQuote} — the resolved market, its book, and the trade ask. */
|
|
350
|
+
/** Inputs to {@link buildQuote} — the resolved market, its live price, its book, and the trade ask. */
|
|
351
351
|
interface BuildQuoteInput {
|
|
352
352
|
provider: string
|
|
353
353
|
symbol: string
|
|
@@ -355,6 +355,7 @@ interface BuildQuoteInput {
|
|
|
355
355
|
side: QuoteSide
|
|
356
356
|
sizeUsd: number
|
|
357
357
|
market: Market
|
|
358
|
+
price: MarketPrice
|
|
358
359
|
bids: OrderbookLevel[]
|
|
359
360
|
asks: OrderbookLevel[]
|
|
360
361
|
/** Public base-tier fees for the venue; `isDefaultFeeTier` is always set true. */
|
|
@@ -362,20 +363,18 @@ interface BuildQuoteInput {
|
|
|
362
363
|
timestamp: number
|
|
363
364
|
}
|
|
364
365
|
|
|
365
|
-
const isPerpsMarket = (market: Market): market is PerpsMarket =>
|
|
366
|
-
'funding' in market
|
|
367
|
-
|
|
368
366
|
/**
|
|
369
|
-
* Build a {@link Quote} from a resolved market
|
|
370
|
-
* walks the relevant side (buy → asks,
|
|
371
|
-
*
|
|
372
|
-
* the filled notional, and carries
|
|
367
|
+
* Build a {@link Quote} from a resolved market, its live {@link MarketPrice},
|
|
368
|
+
* and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
|
|
369
|
+
* sell → bids) for the VWAP fill, derives the price impact in basis points
|
|
370
|
+
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
371
|
+
* the market's `funding` (`null` for spot, which has none).
|
|
373
372
|
*
|
|
374
373
|
* @public
|
|
375
374
|
*/
|
|
376
375
|
export function buildQuote(input: BuildQuoteInput): Quote {
|
|
377
|
-
const { market, side, sizeUsd, feeTier } = input
|
|
378
|
-
const markPrice = Number.parseFloat(
|
|
376
|
+
const { market, price, side, sizeUsd, feeTier } = input
|
|
377
|
+
const markPrice = Number.parseFloat(price.markPrice)
|
|
379
378
|
const levels = side === 'buy' ? input.asks : input.bids
|
|
380
379
|
const walk = walkOrderbook(levels, sizeUsd)
|
|
381
380
|
const priceImpactBps =
|
|
@@ -394,13 +393,13 @@ export function buildQuote(input: BuildQuoteInput): Quote {
|
|
|
394
393
|
side,
|
|
395
394
|
sizeUsd: sizeUsd.toString(),
|
|
396
395
|
baseSize: walk.baseSize.toString(),
|
|
397
|
-
markPrice:
|
|
396
|
+
markPrice: price.markPrice,
|
|
398
397
|
expectedFillPrice: walk.vwap.toString(),
|
|
399
398
|
priceImpactBps: priceImpactBps.toString(),
|
|
400
399
|
feeTier,
|
|
401
400
|
isDefaultFeeTier: true,
|
|
402
401
|
feeUsd: feeUsd.toString(),
|
|
403
|
-
funding:
|
|
402
|
+
funding: price.funding ?? null,
|
|
404
403
|
insufficientLiquidity: walk.insufficientLiquidity,
|
|
405
404
|
timestamp: input.timestamp,
|
|
406
405
|
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/perps-sdk'
|
|
2
|
-
export const version = '0.0.0-preview-
|
|
2
|
+
export const version = '0.0.0-preview-873c740'
|