@lifi/perps-sdk-provider-hyperliquid 25.0.0 → 27.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/accountSummary.d.ts.map +1 -1
- package/dist/cjs/accountSummary.js +8 -14
- package/dist/cjs/accountSummary.js.map +1 -1
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +18 -16
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js +2 -1
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/getMarketSettings.d.ts.map +1 -1
- package/dist/cjs/services/getMarketSettings.js +1 -1
- package/dist/cjs/services/getMarketSettings.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js +14 -4
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js +8 -28
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/cjs/services/getPortfolioHistory.js +17 -6
- package/dist/cjs/services/getPortfolioHistory.js.map +1 -1
- package/dist/cjs/services/getPositions.d.ts.map +1 -1
- package/dist/cjs/services/getPositions.js +4 -1
- package/dist/cjs/services/getPositions.js.map +1 -1
- package/dist/cjs/types/ws.d.ts +3 -2
- package/dist/cjs/types/ws.d.ts.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 +3 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/liquidation.d.ts +5 -2
- package/dist/cjs/utils/liquidation.d.ts.map +1 -1
- package/dist/cjs/utils/liquidation.js +8 -8
- package/dist/cjs/utils/liquidation.js.map +1 -1
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -1
- package/dist/cjs/utils/mapActivity.js +38 -23
- package/dist/cjs/utils/mapActivity.js.map +1 -1
- package/dist/cjs/utils/mapFill.d.ts +1 -1
- package/dist/cjs/utils/mapFill.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.js +17 -6
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapMarket.d.ts.map +1 -1
- package/dist/cjs/utils/mapMarket.js +9 -13
- package/dist/cjs/utils/mapMarket.js.map +1 -1
- package/dist/cjs/utils/mapMarketContext.d.ts.map +1 -1
- package/dist/cjs/utils/mapMarketContext.js +3 -12
- package/dist/cjs/utils/mapMarketContext.js.map +1 -1
- package/dist/cjs/utils/mapOrder.d.ts +3 -1
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
- package/dist/cjs/utils/mapOrder.js +73 -19
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/mapPosition.d.ts +1 -1
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
- package/dist/cjs/utils/mapPosition.js +41 -15
- package/dist/cjs/utils/mapPosition.js.map +1 -1
- package/dist/cjs/utils/rowTimestamp.d.ts +2 -0
- package/dist/cjs/utils/rowTimestamp.d.ts.map +1 -0
- package/dist/cjs/utils/rowTimestamp.js +14 -0
- package/dist/cjs/utils/rowTimestamp.js.map +1 -0
- package/dist/cjs/utils/spotBalance.d.ts +3 -3
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
- package/dist/cjs/utils/spotBalance.js +6 -5
- package/dist/cjs/utils/spotBalance.js.map +1 -1
- package/dist/cjs/utils/spotCollateral.d.ts.map +1 -1
- package/dist/cjs/utils/spotCollateral.js +3 -2
- package/dist/cjs/utils/spotCollateral.js.map +1 -1
- package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
- package/dist/cjs/utils/transferMargin.js +16 -19
- package/dist/cjs/utils/transferMargin.js.map +1 -1
- package/dist/cjs/utils/venueTotals.d.ts +4 -5
- package/dist/cjs/utils/venueTotals.d.ts.map +1 -1
- package/dist/cjs/utils/venueTotals.js +18 -10
- package/dist/cjs/utils/venueTotals.js.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.js +10 -10
- package/dist/cjs/utils/withdrawableBalances.js.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +144 -115
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/accountSummary.d.ts +2 -1
- package/dist/esm/accountSummary.d.ts.map +1 -1
- package/dist/esm/accountSummary.js +11 -13
- package/dist/esm/accountSummary.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +23 -21
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +2 -1
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/getMarketSettings.d.ts.map +1 -1
- package/dist/esm/services/getMarketSettings.js +2 -2
- package/dist/esm/services/getMarketSettings.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js +14 -4
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js +12 -37
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/esm/services/getPortfolioHistory.js +19 -7
- package/dist/esm/services/getPortfolioHistory.js.map +1 -1
- package/dist/esm/services/getPositions.d.ts.map +1 -1
- package/dist/esm/services/getPositions.js +4 -1
- package/dist/esm/services/getPositions.js.map +1 -1
- package/dist/esm/services/getWithdrawableBalances.d.ts +1 -1
- package/dist/esm/services/getWithdrawableBalances.js +1 -1
- package/dist/esm/types/ws.d.ts +3 -2
- package/dist/esm/types/ws.d.ts.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/liquidation.d.ts +23 -24
- package/dist/esm/utils/liquidation.d.ts.map +1 -1
- package/dist/esm/utils/liquidation.js +26 -31
- package/dist/esm/utils/liquidation.js.map +1 -1
- package/dist/esm/utils/mapActivity.d.ts +2 -1
- package/dist/esm/utils/mapActivity.d.ts.map +1 -1
- package/dist/esm/utils/mapActivity.js +41 -22
- package/dist/esm/utils/mapActivity.js.map +1 -1
- package/dist/esm/utils/mapFill.d.ts +3 -2
- package/dist/esm/utils/mapFill.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.js +21 -9
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapMarket.d.ts +2 -2
- package/dist/esm/utils/mapMarket.d.ts.map +1 -1
- package/dist/esm/utils/mapMarket.js +12 -13
- package/dist/esm/utils/mapMarket.js.map +1 -1
- package/dist/esm/utils/mapMarketContext.d.ts.map +1 -1
- package/dist/esm/utils/mapMarketContext.js +3 -9
- package/dist/esm/utils/mapMarketContext.js.map +1 -1
- package/dist/esm/utils/mapOrder.d.ts +12 -2
- package/dist/esm/utils/mapOrder.d.ts.map +1 -1
- package/dist/esm/utils/mapOrder.js +81 -17
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/mapPosition.d.ts +4 -2
- package/dist/esm/utils/mapPosition.d.ts.map +1 -1
- package/dist/esm/utils/mapPosition.js +44 -13
- package/dist/esm/utils/mapPosition.js.map +1 -1
- package/dist/esm/utils/rowTimestamp.d.ts +6 -0
- package/dist/esm/utils/rowTimestamp.d.ts.map +1 -0
- package/dist/esm/utils/rowTimestamp.js +14 -0
- package/dist/esm/utils/rowTimestamp.js.map +1 -0
- package/dist/esm/utils/spotBalance.d.ts +5 -5
- package/dist/esm/utils/spotBalance.d.ts.map +1 -1
- package/dist/esm/utils/spotBalance.js +9 -8
- package/dist/esm/utils/spotBalance.js.map +1 -1
- package/dist/esm/utils/spotCollateral.d.ts.map +1 -1
- package/dist/esm/utils/spotCollateral.js +3 -2
- package/dist/esm/utils/spotCollateral.js.map +1 -1
- package/dist/esm/utils/transferMargin.d.ts +2 -1
- package/dist/esm/utils/transferMargin.d.ts.map +1 -1
- package/dist/esm/utils/transferMargin.js +19 -18
- package/dist/esm/utils/transferMargin.js.map +1 -1
- package/dist/esm/utils/venueTotals.d.ts +7 -6
- package/dist/esm/utils/venueTotals.d.ts.map +1 -1
- package/dist/esm/utils/venueTotals.js +21 -8
- package/dist/esm/utils/venueTotals.js.map +1 -1
- package/dist/esm/utils/withdrawableBalances.d.ts +6 -4
- package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/esm/utils/withdrawableBalances.js +17 -15
- package/dist/esm/utils/withdrawableBalances.js.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +3 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +155 -115
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/accountSummary.d.ts +2 -1
- package/dist/types/accountSummary.d.ts.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/getMarketSettings.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/types/services/getPositions.d.ts.map +1 -1
- package/dist/types/services/getWithdrawableBalances.d.ts +1 -1
- package/dist/types/types/ws.d.ts +3 -2
- package/dist/types/types/ws.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/liquidation.d.ts +23 -24
- package/dist/types/utils/liquidation.d.ts.map +1 -1
- package/dist/types/utils/mapActivity.d.ts +2 -1
- package/dist/types/utils/mapActivity.d.ts.map +1 -1
- package/dist/types/utils/mapFill.d.ts +3 -2
- package/dist/types/utils/mapFill.d.ts.map +1 -1
- package/dist/types/utils/mapMarket.d.ts +2 -2
- package/dist/types/utils/mapMarket.d.ts.map +1 -1
- package/dist/types/utils/mapMarketContext.d.ts.map +1 -1
- package/dist/types/utils/mapOrder.d.ts +12 -2
- package/dist/types/utils/mapOrder.d.ts.map +1 -1
- package/dist/types/utils/mapPosition.d.ts +4 -2
- package/dist/types/utils/mapPosition.d.ts.map +1 -1
- package/dist/types/utils/rowTimestamp.d.ts +6 -0
- package/dist/types/utils/rowTimestamp.d.ts.map +1 -0
- package/dist/types/utils/spotBalance.d.ts +5 -5
- package/dist/types/utils/spotBalance.d.ts.map +1 -1
- package/dist/types/utils/spotCollateral.d.ts.map +1 -1
- package/dist/types/utils/transferMargin.d.ts +2 -1
- package/dist/types/utils/transferMargin.d.ts.map +1 -1
- package/dist/types/utils/venueTotals.d.ts +7 -6
- package/dist/types/utils/venueTotals.d.ts.map +1 -1
- package/dist/types/utils/withdrawableBalances.d.ts +6 -4
- package/dist/types/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +3 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/HyperliquidProvider.ts +1 -1
- package/src/accountSummary.ts +35 -23
- package/src/services/getAccount.ts +50 -33
- package/src/services/getFills.ts +2 -1
- package/src/services/getMarketSettings.ts +6 -2
- package/src/services/getOrder.ts +18 -7
- package/src/services/getOrders.ts +14 -46
- package/src/services/getPortfolioHistory.ts +34 -7
- package/src/services/getPositions.ts +4 -3
- package/src/services/getWithdrawableBalances.ts +1 -1
- package/src/types/ws.ts +3 -2
- package/src/utils/index.ts +2 -0
- package/src/utils/liquidation.ts +46 -34
- package/src/utils/mapActivity.ts +48 -20
- package/src/utils/mapFill.ts +25 -9
- package/src/utils/mapMarket.ts +16 -12
- package/src/utils/mapMarketContext.ts +6 -8
- package/src/utils/mapOrder.ts +107 -20
- package/src/utils/mapPosition.ts +72 -14
- package/src/utils/rowTimestamp.ts +15 -0
- package/src/utils/spotBalance.ts +19 -16
- package/src/utils/spotCollateral.ts +15 -2
- package/src/utils/transferMargin.ts +40 -18
- package/src/utils/venueTotals.ts +51 -17
- package/src/utils/withdrawableBalances.ts +33 -15
- package/src/websocket/HyperliquidWsProvider.ts +224 -133
- package/dist/cjs/utils/decimal.d.ts +0 -3
- package/dist/cjs/utils/decimal.d.ts.map +0 -1
- package/dist/cjs/utils/decimal.js +0 -19
- package/dist/cjs/utils/decimal.js.map +0 -1
- package/dist/esm/utils/decimal.d.ts +0 -10
- package/dist/esm/utils/decimal.d.ts.map +0 -1
- package/dist/esm/utils/decimal.js +0 -19
- package/dist/esm/utils/decimal.js.map +0 -1
- package/dist/types/utils/decimal.d.ts +0 -10
- package/dist/types/utils/decimal.d.ts.map +0 -1
- package/src/utils/decimal.ts +0 -21
|
@@ -1,38 +1,10 @@
|
|
|
1
|
-
import { ACTIVE_ORDER_STATUSES,
|
|
1
|
+
import { ACTIVE_ORDER_STATUSES, getMarketRegistry, isActiveOrderStatus, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PROVIDER_KEY } from '../constants.js';
|
|
3
3
|
import { withExplorerLinks } from '../utils/explorer.js';
|
|
4
|
-
import {
|
|
4
|
+
import { mapOrder, perpsDexNames } from '../utils/index.js';
|
|
5
5
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
6
|
+
import { mapOrderRow } from '../utils/mapOrder.js';
|
|
6
7
|
import { requireAccountExists } from './getAccountExists.js';
|
|
7
|
-
const warn = createWarnOnce();
|
|
8
|
-
const warnOnce = (key) => {
|
|
9
|
-
warn(key, `[${PROVIDER_KEY}] ${key}`);
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Map one venue row, or drop it. An outcome market identity, a coin the backend
|
|
13
|
-
* market list does not hold, and a row the mapper rejects each drop only their
|
|
14
|
-
* own row instead of rejecting the whole page; each distinct mapper message
|
|
15
|
-
* warns once.
|
|
16
|
-
*/
|
|
17
|
-
const mapRow = (coin, registry, map) => {
|
|
18
|
-
if (assetIsOutcome(coin)) {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
const market = registry.get(coin);
|
|
22
|
-
if (market === undefined) {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
return map(market);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
if (!(error instanceof PerpsError)) {
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
warnOnce(`dropped order row: ${error.message}`);
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
8
|
/** Read regular, trigger, and TWAP orders from the requested lifecycle feeds. */
|
|
37
9
|
export const getOrders = async ({ client, apiUrl }, params, options) => {
|
|
38
10
|
const statuses = params.statuses ?? [...ACTIVE_ORDER_STATUSES];
|
|
@@ -68,29 +40,32 @@ export const getOrders = async ({ client, apiUrl }, params, options) => {
|
|
|
68
40
|
rows.set(key, order);
|
|
69
41
|
}
|
|
70
42
|
};
|
|
43
|
+
const seenHistorical = new Set();
|
|
71
44
|
for (const detail of historical) {
|
|
72
45
|
const key = String(detail.order.oid);
|
|
73
46
|
// The feed carries one row per lifecycle transition, newest first, and a
|
|
74
47
|
// terminal row shares its timestamp with the `open` row beneath it, so
|
|
75
|
-
// only the first row of an id states that order's current status
|
|
76
|
-
|
|
48
|
+
// only the first row of an id states that order's current status, even
|
|
49
|
+
// when the mapper skips that row.
|
|
50
|
+
if (seenHistorical.has(key)) {
|
|
77
51
|
continue;
|
|
78
52
|
}
|
|
79
|
-
|
|
53
|
+
seenHistorical.add(key);
|
|
54
|
+
keep(key, mapOrderRow(detail.order.coin, registry, (market) => mapOrder(detail, market)));
|
|
80
55
|
}
|
|
81
56
|
const raw = open.flat();
|
|
82
57
|
const childIds = new Set(raw.flatMap((order) => (order.children ?? []).map((child) => child.oid)));
|
|
83
58
|
for (const order of raw) {
|
|
84
59
|
if (!childIds.has(order.oid)) {
|
|
85
|
-
keep(String(order.oid),
|
|
60
|
+
keep(String(order.oid), mapOrderRow(order.coin, registry, (market) => mapOrder(order, market)));
|
|
86
61
|
}
|
|
87
62
|
for (const child of order.children ?? []) {
|
|
88
|
-
keep(String(child.oid),
|
|
63
|
+
keep(String(child.oid), mapOrderRow(child.coin, registry, (market) => mapOrder(child, market, String(order.oid))));
|
|
89
64
|
}
|
|
90
65
|
}
|
|
91
66
|
// TWAP ids and regular order ids occupy separate venue namespaces.
|
|
92
67
|
for (const twap of twaps) {
|
|
93
|
-
keep(`twap:${twap.twapId}`,
|
|
68
|
+
keep(`twap:${twap.twapId}`, mapOrderRow(twap.state.coin, registry, (market) => mapOrder(twap, market)));
|
|
94
69
|
}
|
|
95
70
|
const matching = [...rows.values()].filter((order) => statuses.includes(order.status) &&
|
|
96
71
|
(params.marketId === undefined || order.market.id === params.marketId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrders.js","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"getOrders.js","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPortfolioHistory.d.ts","sourceRoot":"","sources":["../../../src/services/getPortfolioHistory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getPortfolioHistory.d.ts","sourceRoot":"","sources":["../../../src/services/getPortfolioHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAWvD,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,qBAAqB,CAAA;CAC7B;AAiED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,wBAAwB,CAAC,CAyCnC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { PerpsError } from '@lifi/perps-sdk';
|
|
1
|
+
import { PerpsError, warnSkippedVenueRow, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PerpsErrorCode, } from '@lifi/perps-types';
|
|
3
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
3
4
|
import { isUnifiedAbstraction } from '../utils/abstractionMode.js';
|
|
4
5
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
6
|
import { requireAccountExists } from './getAccountExists.js';
|
|
@@ -15,16 +16,26 @@ const PERP_PERIOD_BY_RANGE = {
|
|
|
15
16
|
'30d': 'perpMonth',
|
|
16
17
|
all: 'perpAllTime',
|
|
17
18
|
};
|
|
19
|
+
/** The samples with a finite timestamp; each other sample is skipped. */
|
|
20
|
+
const validSamples = (samples, row) => samples.flatMap(([timestamp, value]) => {
|
|
21
|
+
if (!Number.isFinite(timestamp)) {
|
|
22
|
+
warnSkippedVenueRow(PROVIDER_KEY, row, 'timestamp', timestamp, {
|
|
23
|
+
expected: 'timestamp',
|
|
24
|
+
});
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return [[timestamp, value]];
|
|
28
|
+
});
|
|
18
29
|
/**
|
|
19
30
|
* Join the window's two series on their timestamps. `pnlHistory` is cumulative
|
|
20
31
|
* from the window's start, so a point with no PnL sample carries the last
|
|
21
32
|
* sampled value — `'0'` before the first one.
|
|
22
33
|
*/
|
|
23
|
-
const joinWindow = (
|
|
24
|
-
const pnlByTimestamp = new Map(
|
|
34
|
+
const joinWindow = (accountValueHistory, pnlHistory, period) => {
|
|
35
|
+
const pnlByTimestamp = new Map(pnlHistory);
|
|
25
36
|
let matched = 0;
|
|
26
37
|
let cumulative = '0';
|
|
27
|
-
const points =
|
|
38
|
+
const points = accountValueHistory.map(([timestamp, accountValue]) => {
|
|
28
39
|
const sample = pnlByTimestamp.get(timestamp);
|
|
29
40
|
if (sample !== undefined) {
|
|
30
41
|
matched += 1;
|
|
@@ -32,7 +43,7 @@ const joinWindow = (window, period) => {
|
|
|
32
43
|
}
|
|
33
44
|
return { timestamp, accountValue, pnl: cumulative };
|
|
34
45
|
});
|
|
35
|
-
if (points.length > 0 &&
|
|
46
|
+
if (points.length > 0 && pnlHistory.length > 0 && matched === 0) {
|
|
36
47
|
throw new PerpsError(PerpsErrorCode.ThirdPartyError, `Hyperliquid portfolio window '${period}' samples PnL on no ` +
|
|
37
48
|
'account-value timestamp.');
|
|
38
49
|
}
|
|
@@ -63,11 +74,12 @@ export async function getPortfolioHistory(ctx, params, options) {
|
|
|
63
74
|
if (window === undefined) {
|
|
64
75
|
throw new PerpsError(PerpsErrorCode.ThirdPartyError, `Hyperliquid portfolio response has no '${period}' window.`);
|
|
65
76
|
}
|
|
77
|
+
const pnlHistory = validSamples(window.pnlHistory, 'portfolio PnL sample');
|
|
66
78
|
return {
|
|
67
79
|
range: params.range,
|
|
68
|
-
points: joinWindow(window, period),
|
|
80
|
+
points: joinWindow(validSamples(window.accountValueHistory, 'portfolio value sample'), pnlHistory, period),
|
|
69
81
|
volume: window.vlm,
|
|
70
|
-
totalPnl:
|
|
82
|
+
totalPnl: pnlHistory.at(-1)?.[1],
|
|
71
83
|
};
|
|
72
84
|
}
|
|
73
85
|
//# sourceMappingURL=getPortfolioHistory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPortfolioHistory.js","sourceRoot":"","sources":["../../../src/services/getPortfolioHistory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getPortfolioHistory.js","sourceRoot":"","sources":["../../../src/services/getPortfolioHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPositions.d.ts","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAWvD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,oBAAoB,kBAAkB,EACtC,QAAQ,kBAAkB,EAC1B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"getPositions.d.ts","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAWvD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,oBAAoB,kBAAkB,EACtC,QAAQ,kBAAkB,EAC1B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,iBAAiB,CA8C3B,CAAA"}
|
|
@@ -23,7 +23,10 @@ export const getPositions = async ({ client, apiUrl }, params, options) => {
|
|
|
23
23
|
}, infoOpts)));
|
|
24
24
|
let positions = stateResults.flatMap((state) => state.assetPositions
|
|
25
25
|
.filter((ap) => !assetIsOutcome(ap.position.coin) && isOpenAssetPosition(ap))
|
|
26
|
-
.
|
|
26
|
+
.flatMap((ap) => {
|
|
27
|
+
const position = mapPosition(ap, toPerpsMarketDisplay(registry.require(ap.position.coin)));
|
|
28
|
+
return position === undefined ? [] : [position];
|
|
29
|
+
}));
|
|
27
30
|
if (params.marketId !== undefined) {
|
|
28
31
|
positions = positions.filter((p) => p.market.id === params.marketId);
|
|
29
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAe5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAA0B,EAC1B,OAA2B,EACC,EAAE;IAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAErC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,WAAW,CACT,MAAM,EACN;QACE,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/B,EACD,QAAQ,CACT,CACF,CACF,CAAA;IAED,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,cAAc;SACjB,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC,CACrE;SACA,
|
|
1
|
+
{"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAe5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAA0B,EAC1B,OAA2B,EACC,EAAE;IAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAErC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,WAAW,CACT,MAAM,EACN;QACE,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/B,EACD,QAAQ,CACT,CACF,CACF,CAAA;IAED,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,cAAc;SACjB,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC,CACrE;SACA,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACd,MAAM,QAAQ,GAAG,WAAW,CAC1B,EAAE,EACF,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACzD,CAAA;QACD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IACjD,CAAC,CAAC,CACL,CAAA;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAA;IACtE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,SAAS;QACT,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM;YACvC,OAAO,EAAE,KAAK;SACf;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -7,7 +7,7 @@ import type { HyperliquidContext } from '../context.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export type GetWithdrawableBalancesParams = ProviderGetWithdrawableBalancesParams;
|
|
9
9
|
/**
|
|
10
|
-
* The `(asset,
|
|
10
|
+
* The `(asset, category)` pairs `params.address` can withdraw from Hyperliquid,
|
|
11
11
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
12
12
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
13
13
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
|
@@ -5,7 +5,7 @@ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
|
5
5
|
import { hyperliquidWithdrawableBalances } from '../utils/withdrawableBalances.js';
|
|
6
6
|
import { requireAccountExists } from './getAccountExists.js';
|
|
7
7
|
/**
|
|
8
|
-
* The `(asset,
|
|
8
|
+
* The `(asset, category)` pairs `params.address` can withdraw from Hyperliquid,
|
|
9
9
|
* read from the venue's own `withdrawable` and spot `total`/`hold` figures.
|
|
10
10
|
* Hyperliquid charges its flat withdrawal fee in USDC, so the backend's
|
|
11
11
|
* `withdrawalFeeUsd` is the fee in quote-asset units on every USDC row.
|
package/dist/esm/types/ws.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DecimalString } from '@lifi/perps-types';
|
|
1
2
|
import type { HlClearinghouseState, HlSpotBalance } from './account.js';
|
|
2
3
|
import type { HlCandle, HlL2Book } from './asset.js';
|
|
3
4
|
import type { HlUserFill } from './fill.js';
|
|
@@ -67,8 +68,8 @@ export type HlWsMessage = {
|
|
|
67
68
|
* @public
|
|
68
69
|
*/
|
|
69
70
|
export type HlWsFastAssetCtx = {
|
|
70
|
-
markPx?:
|
|
71
|
-
midPx?:
|
|
71
|
+
markPx?: DecimalString;
|
|
72
|
+
midPx?: DecimalString | null;
|
|
72
73
|
};
|
|
73
74
|
/**
|
|
74
75
|
* Incremental spot asset context. Hyperliquid may encode numeric fields as
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvC,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;QACX,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAE/D;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAA;IAC1C,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAA;CAC7C,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAA;AAE/D,qHAAqH;AACrH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export { decodeCompressedJson, decodeFastAssetCtxs, } from './decodeFastAssetCtx
|
|
|
4
4
|
export { fetchUserTransactions, getClientOrderIds, matchOrderActionHash, } from './explorer.js';
|
|
5
5
|
export type { InfoRequestOptions } from './infoClient.js';
|
|
6
6
|
export { hlInfoOptions, infoRequest } from './infoClient.js';
|
|
7
|
-
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
|
|
7
|
+
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, safeCalculateLiquidationPrice, safeCalculateMaintenanceMarginRate, } from './liquidation.js';
|
|
8
8
|
export { mapFundingActivity, mapLedgerEntry, mapLiquidationFills, } from './mapActivity.js';
|
|
9
9
|
export { classifyFillFromPosition, mapFill } from './mapFill.js';
|
|
10
10
|
export { mapMarket } from './mapMarket.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EACL,KAAK,gBAAgB,EACrB,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export { applyLogoOverride, spotLogoURI, UNIT_TOKEN_NAMES, } from './assetLogo.j
|
|
|
6
6
|
export { decodeCompressedJson, decodeFastAssetCtxs, } from './decodeFastAssetCtxs.js';
|
|
7
7
|
export { fetchUserTransactions, getClientOrderIds, matchOrderActionHash, } from './explorer.js';
|
|
8
8
|
export { hlInfoOptions, infoRequest } from './infoClient.js';
|
|
9
|
-
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
|
|
9
|
+
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, safeCalculateLiquidationPrice, safeCalculateMaintenanceMarginRate, } from './liquidation.js';
|
|
10
10
|
export { mapFundingActivity, mapLedgerEntry, mapLiquidationFills, } from './mapActivity.js';
|
|
11
11
|
export { classifyFillFromPosition, mapFill } from './mapFill.js';
|
|
12
12
|
export { mapMarket } from './mapMarket.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAEL,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,qBAAqB,EAAsB,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAEL,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -11,38 +11,37 @@
|
|
|
11
11
|
* - side = 1 (long) or -1 (short)
|
|
12
12
|
* - margin_available = isolated_margin - maintenance_margin_required
|
|
13
13
|
*/
|
|
14
|
+
import { type DecimalString } from '@lifi/perps-types';
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* Maintenance margin is half of the initial margin at max leverage.
|
|
16
|
+
* Maintenance margin fraction for a Hyperliquid asset: half of the initial
|
|
17
|
+
* margin at max leverage, `1 / (2 × maxLeverage)`.
|
|
18
18
|
*
|
|
19
19
|
* @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
|
|
20
|
-
* @returns Maintenance margin fraction (
|
|
21
|
-
*
|
|
20
|
+
* @returns Maintenance margin fraction (`'0.01'` for 50x max leverage)
|
|
21
|
+
* @throws {PerpsError} `ValidationError` when `maxLeverage` is not a finite
|
|
22
|
+
* number above zero.
|
|
22
23
|
* @public
|
|
23
24
|
*/
|
|
24
|
-
export declare function calculateMaintenanceMarginRate(maxLeverage: number):
|
|
25
|
+
export declare function calculateMaintenanceMarginRate(maxLeverage: number): DecimalString;
|
|
26
|
+
/** @public */
|
|
27
|
+
export declare const safeCalculateMaintenanceMarginRate: (maxLeverage: number) => string | undefined;
|
|
25
28
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* prefer Position.liquidationPrice from the API.
|
|
29
|
+
* Liquidation price of a new isolated position with the exact Hyperliquid
|
|
30
|
+
* formula. For an existing position, prefer `Position.liquidationPrice` from
|
|
31
|
+
* the API.
|
|
30
32
|
*
|
|
31
33
|
* Formula derivation (isolated margin, single position):
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* @param leverage - User-selected leverage (e.g., 10)
|
|
41
|
-
* @param isLong - True if long position, false if short
|
|
42
|
-
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
|
|
43
|
-
* the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
|
|
44
|
-
* @returns Estimated liquidation price, or undefined if inputs are invalid
|
|
34
|
+
* margin_available = entryPrice × (1 / leverage - mmr)
|
|
35
|
+
* liq_price = entryPrice - side × margin_available / (1 - mmr × side)
|
|
36
|
+
*
|
|
37
|
+
* @param leverage - User-selected leverage (e.g., `'10'`)
|
|
38
|
+
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Sets
|
|
39
|
+
* mmr = 1 / (2 × maxLeverage).
|
|
40
|
+
* @throws {PerpsError} `ValidationError` when `maxLeverage` is not a finite
|
|
41
|
+
* number above zero, or on an input that `estimateLiquidationPrice` rejects.
|
|
45
42
|
* @public
|
|
46
43
|
*/
|
|
47
|
-
export declare function calculateLiquidationPrice(entryPrice:
|
|
44
|
+
export declare function calculateLiquidationPrice(entryPrice: string, leverage: string, isLong: boolean, maxLeverage: number): string;
|
|
45
|
+
/** @public */
|
|
46
|
+
export declare const safeCalculateLiquidationPrice: (entryPrice: string, leverage: string, isLong: boolean, maxLeverage: number) => string | undefined;
|
|
48
47
|
//# sourceMappingURL=liquidation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,mBAAmB,CAAA;AAEtE;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,aAAa,CAQf;AAED,cAAc;AACd,eAAO,MAAM,kCAAkC,6CAG9C,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAOR;AAED,cAAc;AACd,eAAO,MAAM,6BAA6B,oGAGzC,CAAA"}
|
|
@@ -11,55 +11,50 @@
|
|
|
11
11
|
* - side = 1 (long) or -1 (short)
|
|
12
12
|
* - margin_available = isolated_margin - maintenance_margin_required
|
|
13
13
|
*/
|
|
14
|
-
import { estimateLiquidationPrice } from '@lifi/perps-sdk';
|
|
14
|
+
import { createSafeFunction, divideDecimalString, estimateLiquidationPrice, numberToDecimalString, PerpsError, } from '@lifi/perps-sdk';
|
|
15
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
15
16
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* Maintenance margin is half of the initial margin at max leverage.
|
|
17
|
+
* Maintenance margin fraction for a Hyperliquid asset: half of the initial
|
|
18
|
+
* margin at max leverage, `1 / (2 × maxLeverage)`.
|
|
19
19
|
*
|
|
20
20
|
* @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
|
|
21
|
-
* @returns Maintenance margin fraction (
|
|
22
|
-
*
|
|
21
|
+
* @returns Maintenance margin fraction (`'0.01'` for 50x max leverage)
|
|
22
|
+
* @throws {PerpsError} `ValidationError` when `maxLeverage` is not a finite
|
|
23
|
+
* number above zero.
|
|
23
24
|
* @public
|
|
24
25
|
*/
|
|
25
26
|
export function calculateMaintenanceMarginRate(maxLeverage) {
|
|
26
|
-
if (maxLeverage
|
|
27
|
-
|
|
27
|
+
if (!Number.isFinite(maxLeverage) || maxLeverage <= 0) {
|
|
28
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, `\`maxLeverage\` must be a finite number above zero, got ${maxLeverage}.`);
|
|
28
29
|
}
|
|
29
|
-
return 1
|
|
30
|
+
return divideDecimalString('1', numberToDecimalString(2 * maxLeverage));
|
|
30
31
|
}
|
|
32
|
+
/** @public */
|
|
33
|
+
export const safeCalculateMaintenanceMarginRate = createSafeFunction('calculateMaintenanceMarginRate', calculateMaintenanceMarginRate);
|
|
31
34
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* prefer Position.liquidationPrice from the API.
|
|
35
|
+
* Liquidation price of a new isolated position with the exact Hyperliquid
|
|
36
|
+
* formula. For an existing position, prefer `Position.liquidationPrice` from
|
|
37
|
+
* the API.
|
|
36
38
|
*
|
|
37
39
|
* Formula derivation (isolated margin, single position):
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* @param leverage - User-selected leverage (e.g., 10)
|
|
47
|
-
* @param isLong - True if long position, false if short
|
|
48
|
-
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
|
|
49
|
-
* the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
|
|
50
|
-
* @returns Estimated liquidation price, or undefined if inputs are invalid
|
|
40
|
+
* margin_available = entryPrice × (1 / leverage - mmr)
|
|
41
|
+
* liq_price = entryPrice - side × margin_available / (1 - mmr × side)
|
|
42
|
+
*
|
|
43
|
+
* @param leverage - User-selected leverage (e.g., `'10'`)
|
|
44
|
+
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Sets
|
|
45
|
+
* mmr = 1 / (2 × maxLeverage).
|
|
46
|
+
* @throws {PerpsError} `ValidationError` when `maxLeverage` is not a finite
|
|
47
|
+
* number above zero, or on an input that `estimateLiquidationPrice` rejects.
|
|
51
48
|
* @public
|
|
52
49
|
*/
|
|
53
50
|
export function calculateLiquidationPrice(entryPrice, leverage, isLong, maxLeverage) {
|
|
54
|
-
const mmr = calculateMaintenanceMarginRate(maxLeverage);
|
|
55
|
-
if (mmr === undefined) {
|
|
56
|
-
return undefined;
|
|
57
|
-
}
|
|
58
51
|
return estimateLiquidationPrice({
|
|
59
52
|
entryPrice,
|
|
60
53
|
leverage,
|
|
61
54
|
isLong,
|
|
62
|
-
maintenanceMarginRate:
|
|
55
|
+
maintenanceMarginRate: calculateMaintenanceMarginRate(maxLeverage),
|
|
63
56
|
});
|
|
64
57
|
}
|
|
58
|
+
/** @public */
|
|
59
|
+
export const safeCalculateLiquidationPrice = createSafeFunction('calculateLiquidationPrice', calculateLiquidationPrice);
|
|
65
60
|
//# sourceMappingURL=liquidation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liquidation.js","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"liquidation.js","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,UAAU,GACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,WAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,2DAA2D,WAAW,GAAG,CAC1E,CAAA;IACH,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AACzE,CAAC;AAED,cAAc;AACd,MAAM,CAAC,MAAM,kCAAkC,GAAG,kBAAkB,CAClE,gCAAgC,EAChC,8BAA8B,CAC/B,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,QAAgB,EAChB,MAAe,EACf,WAAmB;IAEnB,OAAO,wBAAwB,CAAC;QAC9B,UAAU;QACV,QAAQ;QACR,MAAM;QACN,qBAAqB,EAAE,8BAA8B,CAAC,WAAW,CAAC;KACnE,CAAC,CAAA;AACJ,CAAC;AAED,cAAc;AACd,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAC7D,2BAA2B,EAC3B,yBAAyB,CAC1B,CAAA"}
|
|
@@ -26,7 +26,8 @@ export declare const mapFundingActivity: (entry: HlFundingUpdate, providerKey: s
|
|
|
26
26
|
* parties, so only fills whose `liquidatedUser` is the queried address count.
|
|
27
27
|
* A fill whose hash a ledger liquidation row already carries is the same
|
|
28
28
|
* event and is skipped. The size sign follows the closed position: a sell
|
|
29
|
-
* fill closes a long. Groups whose market does not resolve are
|
|
29
|
+
* fill closes a long. Groups whose market or time does not resolve are
|
|
30
|
+
* dropped; an invalid fill size or price leaves the derived field absent.
|
|
30
31
|
* @public
|
|
31
32
|
*/
|
|
32
33
|
export declare const mapLiquidationFills: (fills: HlUserFill[], providerKey: string, queriedAddress: string, resolveMarket: (coin: string) => MarketDisplay | undefined, ledgerHashes: ReadonlySet<string>) => LiquidationActivity[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAQnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,YAAY,EAIZ,eAAe,EACf,mBAAmB,EACnB,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,mBAAmB,CAAA;AA4D1B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,cAAc,EACrB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,aAAa,EAC5B,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KACzD,YAAY,GAAG,IA0MjB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EACtB,aAAa,MAAM,EACnB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KACzD,eAAe,GAAG,IAsBpB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EAAE,EACnB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,EAC1D,cAAc,WAAW,CAAC,MAAM,CAAC,KAChC,mBAAmB,EA0DrB,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ExplorerChainId, explorerTxUrl, PerpsError, } from '@lifi/perps-sdk';
|
|
1
|
+
import { ExplorerChainId, explorerTxUrl, PerpsError, safeAddDecimalString, safeMultiplyDecimalString, safeSubtractDecimalString, warnSkippedVenueRow, } from '@lifi/perps-sdk';
|
|
2
2
|
import { ActivityType, PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
-
import Big from 'big.js';
|
|
4
3
|
import { zeroHash } from 'viem';
|
|
5
4
|
import { isBorrowLendDelta, isCollateralTransferDelta, isCStakingTransferDelta, isDepositDelta, isLiquidationDelta, isSendAssetDelta, isSpotTransferDelta, isVaultTransferDelta, isWithdrawDelta, } from '../types/index.js';
|
|
5
|
+
import { rowTimestampToIsoStringOrUndefined } from './rowTimestamp.js';
|
|
6
6
|
/**
|
|
7
7
|
* Hyperliquid settles every perp deposit and withdrawal in USDC, and charges
|
|
8
8
|
* the `spotTransfer` fee in USDC too — that delta carries no `feeToken`.
|
|
@@ -47,11 +47,14 @@ const resolveLedgerAsset = (symbol, registry) => {
|
|
|
47
47
|
*/
|
|
48
48
|
export const mapLedgerEntry = (entry, providerKey, queriedAddress, assetRegistry, resolveMarket) => {
|
|
49
49
|
const { delta } = entry;
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
const timestamp = rowTimestampToIsoStringOrUndefined(entry.time);
|
|
51
|
+
if (timestamp === undefined) {
|
|
52
|
+
warnSkippedVenueRow(providerKey, 'ledger', 'time', entry.time, {
|
|
53
|
+
expected: 'timestamp',
|
|
54
|
+
});
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const base = { id: entry.hash, provider: providerKey, timestamp };
|
|
55
58
|
if (isSpotTransferDelta(delta) ||
|
|
56
59
|
isSendAssetDelta(delta) ||
|
|
57
60
|
isCollateralTransferDelta(delta)) {
|
|
@@ -238,7 +241,13 @@ export const mapFundingActivity = (entry, providerKey, resolveMarket) => {
|
|
|
238
241
|
if (market === undefined) {
|
|
239
242
|
return null;
|
|
240
243
|
}
|
|
241
|
-
const timestamp =
|
|
244
|
+
const timestamp = rowTimestampToIsoStringOrUndefined(entry.time);
|
|
245
|
+
if (timestamp === undefined) {
|
|
246
|
+
warnSkippedVenueRow(providerKey, 'funding', 'time', entry.time, {
|
|
247
|
+
expected: 'timestamp',
|
|
248
|
+
});
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
242
251
|
return {
|
|
243
252
|
id: `funding:${entry.delta.coin}:${timestamp}`,
|
|
244
253
|
provider: providerKey,
|
|
@@ -256,7 +265,8 @@ export const mapFundingActivity = (entry, providerKey, resolveMarket) => {
|
|
|
256
265
|
* parties, so only fills whose `liquidatedUser` is the queried address count.
|
|
257
266
|
* A fill whose hash a ledger liquidation row already carries is the same
|
|
258
267
|
* event and is skipped. The size sign follows the closed position: a sell
|
|
259
|
-
* fill closes a long. Groups whose market does not resolve are
|
|
268
|
+
* fill closes a long. Groups whose market or time does not resolve are
|
|
269
|
+
* dropped; an invalid fill size or price leaves the derived field absent.
|
|
260
270
|
* @public
|
|
261
271
|
*/
|
|
262
272
|
export const mapLiquidationFills = (fills, providerKey, queriedAddress, resolveMarket, ledgerHashes) => {
|
|
@@ -277,26 +287,35 @@ export const mapLiquidationFills = (fills, providerKey, queriedAddress, resolveM
|
|
|
277
287
|
if (market === undefined) {
|
|
278
288
|
return [];
|
|
279
289
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
290
|
+
const size = group.reduce((sum, fill) => sum === undefined ? undefined : safeAddDecimalString(sum, fill.sz), '0');
|
|
291
|
+
const notional = group.reduce((sum, fill) => {
|
|
292
|
+
const fillNotional = safeMultiplyDecimalString(fill.px, fill.sz);
|
|
293
|
+
return sum === undefined || fillNotional === undefined
|
|
294
|
+
? undefined
|
|
295
|
+
: safeAddDecimalString(sum, fillNotional);
|
|
296
|
+
}, '0');
|
|
297
|
+
const time = Math.max(...group.map((fill) => fill.time));
|
|
298
|
+
const timestamp = rowTimestampToIsoStringOrUndefined(time);
|
|
299
|
+
if (timestamp === undefined) {
|
|
300
|
+
warnSkippedVenueRow(providerKey, 'liquidation', 'time', time, {
|
|
301
|
+
expected: 'timestamp',
|
|
302
|
+
});
|
|
303
|
+
return [];
|
|
287
304
|
}
|
|
305
|
+
const closedSize = size === undefined || first.side === 'A'
|
|
306
|
+
? size
|
|
307
|
+
: safeSubtractDecimalString('0', size);
|
|
288
308
|
return [
|
|
289
309
|
{
|
|
290
310
|
id: `liquidation:${oid}`,
|
|
291
311
|
provider: providerKey,
|
|
292
|
-
timestamp
|
|
312
|
+
timestamp,
|
|
293
313
|
type: ActivityType.LIQUIDATION,
|
|
294
|
-
|
|
314
|
+
...(notional === undefined
|
|
315
|
+
? {}
|
|
316
|
+
: { liquidatedNotionalPosition: notional }),
|
|
295
317
|
liquidatedPositions: [
|
|
296
|
-
{
|
|
297
|
-
market,
|
|
298
|
-
size: (first.side === 'A' ? size : size.neg()).toFixed(),
|
|
299
|
-
},
|
|
318
|
+
{ market, ...(closedSize === undefined ? {} : { size: closedSize }) },
|
|
300
319
|
],
|
|
301
320
|
},
|
|
302
321
|
];
|