@lifi/perps-sdk-provider-hyperliquid 13.0.0 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -0
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
- package/dist/cjs/HyperliquidProvider.js +1 -2
- package/dist/cjs/HyperliquidProvider.js.map +1 -1
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +2 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +16 -9
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/services/getActivity.d.ts.map +1 -1
- package/dist/cjs/services/getActivity.js +40 -7
- package/dist/cjs/services/getActivity.js.map +1 -1
- package/dist/cjs/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js +3 -0
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js +14 -3
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts +2 -7
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js +94 -31
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/services/getPositions.d.ts.map +1 -1
- package/dist/cjs/services/getPositions.js +1 -1
- package/dist/cjs/services/getPositions.js.map +1 -1
- package/dist/cjs/types/explorer.d.ts +10 -0
- package/dist/cjs/types/explorer.d.ts.map +1 -0
- package/dist/cjs/types/explorer.js +17 -0
- package/dist/cjs/types/explorer.js.map +1 -0
- package/dist/cjs/types/fill.d.ts +6 -0
- package/dist/cjs/types/fill.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/ledger.d.ts +24 -1
- package/dist/cjs/types/ledger.d.ts.map +1 -1
- package/dist/cjs/types/ledger.js +5 -1
- package/dist/cjs/types/ledger.js.map +1 -1
- package/dist/cjs/types/order.d.ts +24 -0
- package/dist/cjs/types/order.d.ts.map +1 -1
- package/dist/cjs/types/ws.d.ts +14 -0
- package/dist/cjs/types/ws.d.ts.map +1 -1
- package/dist/cjs/utils/assetId.d.ts +1 -0
- package/dist/cjs/utils/assetId.d.ts.map +1 -1
- package/dist/cjs/utils/assetId.js +6 -1
- package/dist/cjs/utils/assetId.js.map +1 -1
- package/dist/cjs/utils/explorer.d.ts +7 -0
- package/dist/cjs/utils/explorer.d.ts.map +1 -0
- package/dist/cjs/utils/explorer.js +49 -0
- package/dist/cjs/utils/explorer.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +4 -3
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -6
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/infoClient.d.ts +1 -0
- package/dist/cjs/utils/infoClient.d.ts.map +1 -1
- package/dist/cjs/utils/infoClient.js +16 -10
- package/dist/cjs/utils/infoClient.js.map +1 -1
- package/dist/cjs/utils/mapActivity.d.ts +5 -3
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -1
- package/dist/cjs/utils/mapActivity.js +116 -48
- package/dist/cjs/utils/mapActivity.js.map +1 -1
- package/dist/cjs/utils/mapFill.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.js +0 -1
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapOrder.d.ts +4 -9
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
- package/dist/cjs/utils/mapOrder.js +149 -135
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
- package/dist/cjs/utils/spotBalance.js +10 -6
- package/dist/cjs/utils/spotBalance.js.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +3 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +100 -29
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
- package/dist/esm/HyperliquidProvider.js +1 -2
- package/dist/esm/HyperliquidProvider.js.map +1 -1
- package/dist/esm/constants.d.ts +8 -0
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +8 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.d.ts +1 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +14 -10
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts +2 -2
- package/dist/esm/services/getActivity.d.ts.map +1 -1
- package/dist/esm/services/getActivity.js +44 -9
- package/dist/esm/services/getActivity.js.map +1 -1
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +4 -1
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js +15 -4
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts +4 -24
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js +115 -42
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/services/getPositions.d.ts.map +1 -1
- package/dist/esm/services/getPositions.js +2 -2
- package/dist/esm/services/getPositions.js.map +1 -1
- package/dist/esm/types/explorer.d.ts +27 -0
- package/dist/esm/types/explorer.d.ts.map +1 -0
- package/dist/esm/types/explorer.js +20 -0
- package/dist/esm/types/explorer.js.map +1 -0
- package/dist/esm/types/fill.d.ts +11 -0
- package/dist/esm/types/fill.d.ts.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/ledger.d.ts +28 -1
- package/dist/esm/types/ledger.d.ts.map +1 -1
- package/dist/esm/types/ledger.js +4 -0
- package/dist/esm/types/ledger.js.map +1 -1
- package/dist/esm/types/order.d.ts +26 -0
- package/dist/esm/types/order.d.ts.map +1 -1
- package/dist/esm/types/ws.d.ts +15 -0
- package/dist/esm/types/ws.d.ts.map +1 -1
- package/dist/esm/utils/assetId.d.ts +9 -0
- package/dist/esm/utils/assetId.d.ts.map +1 -1
- package/dist/esm/utils/assetId.js +13 -0
- package/dist/esm/utils/assetId.js.map +1 -1
- package/dist/esm/utils/explorer.d.ts +31 -0
- package/dist/esm/utils/explorer.d.ts.map +1 -0
- package/dist/esm/utils/explorer.js +68 -0
- package/dist/esm/utils/explorer.js.map +1 -0
- package/dist/esm/utils/index.d.ts +4 -3
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/infoClient.d.ts +14 -3
- package/dist/esm/utils/infoClient.d.ts.map +1 -1
- package/dist/esm/utils/infoClient.js +29 -14
- package/dist/esm/utils/infoClient.js.map +1 -1
- package/dist/esm/utils/mapActivity.d.ts +16 -13
- package/dist/esm/utils/mapActivity.d.ts.map +1 -1
- package/dist/esm/utils/mapActivity.js +128 -72
- package/dist/esm/utils/mapActivity.js.map +1 -1
- package/dist/esm/utils/mapFill.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.js +1 -2
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapOrder.d.ts +8 -73
- package/dist/esm/utils/mapOrder.d.ts.map +1 -1
- package/dist/esm/utils/mapOrder.js +148 -187
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/spotBalance.d.ts +1 -1
- package/dist/esm/utils/spotBalance.d.ts.map +1 -1
- package/dist/esm/utils/spotBalance.js +12 -7
- package/dist/esm/utils/spotBalance.js.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +5 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +105 -34
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/HyperliquidProvider.d.ts.map +1 -1
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getActivity.d.ts +2 -2
- package/dist/types/services/getActivity.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts +4 -24
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/services/getPositions.d.ts.map +1 -1
- package/dist/types/types/explorer.d.ts +27 -0
- package/dist/types/types/explorer.d.ts.map +1 -0
- package/dist/types/types/fill.d.ts +11 -0
- package/dist/types/types/fill.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/ledger.d.ts +28 -1
- package/dist/types/types/ledger.d.ts.map +1 -1
- package/dist/types/types/order.d.ts +26 -0
- package/dist/types/types/order.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +15 -0
- package/dist/types/types/ws.d.ts.map +1 -1
- package/dist/types/utils/assetId.d.ts +9 -0
- package/dist/types/utils/assetId.d.ts.map +1 -1
- package/dist/types/utils/explorer.d.ts +31 -0
- package/dist/types/utils/explorer.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +4 -3
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/infoClient.d.ts +14 -3
- package/dist/types/utils/infoClient.d.ts.map +1 -1
- package/dist/types/utils/mapActivity.d.ts +16 -13
- package/dist/types/utils/mapActivity.d.ts.map +1 -1
- package/dist/types/utils/mapFill.d.ts.map +1 -1
- package/dist/types/utils/mapOrder.d.ts +8 -73
- package/dist/types/utils/mapOrder.d.ts.map +1 -1
- package/dist/types/utils/spotBalance.d.ts +1 -1
- package/dist/types/utils/spotBalance.d.ts.map +1 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +5 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/HyperliquidProvider.ts +1 -13
- package/src/constants.ts +10 -0
- package/src/index.ts +1 -2
- package/src/services/getAccount.ts +22 -14
- package/src/services/getActivity.ts +81 -6
- package/src/services/getFills.ts +4 -1
- package/src/services/getOrder.ts +29 -5
- package/src/services/getOrders.ts +185 -70
- package/src/services/getPositions.ts +4 -1
- package/src/types/explorer.ts +39 -0
- package/src/types/fill.ts +12 -0
- package/src/types/index.ts +1 -0
- package/src/types/ledger.ts +37 -0
- package/src/types/order.ts +25 -0
- package/src/types/ws.ts +16 -0
- package/src/utils/assetId.ts +16 -0
- package/src/utils/explorer.ts +93 -0
- package/src/utils/index.ts +16 -7
- package/src/utils/infoClient.ts +46 -24
- package/src/utils/mapActivity.ts +163 -75
- package/src/utils/mapFill.ts +0 -2
- package/src/utils/mapOrder.ts +163 -212
- package/src/utils/spotBalance.ts +12 -7
- package/src/websocket/HyperliquidWsProvider.ts +127 -40
- package/dist/cjs/services/getRunningTwaps.d.ts +0 -10
- package/dist/cjs/services/getRunningTwaps.d.ts.map +0 -1
- package/dist/cjs/services/getRunningTwaps.js +0 -46
- package/dist/cjs/services/getRunningTwaps.js.map +0 -1
- package/dist/esm/services/getRunningTwaps.d.ts +0 -12
- package/dist/esm/services/getRunningTwaps.d.ts.map +0 -1
- package/dist/esm/services/getRunningTwaps.js +0 -40
- package/dist/esm/services/getRunningTwaps.js.map +0 -1
- package/dist/types/services/getRunningTwaps.d.ts +0 -12
- package/dist/types/services/getRunningTwaps.d.ts.map +0 -1
- package/src/services/getRunningTwaps.ts +0 -90
|
@@ -1,39 +1,42 @@
|
|
|
1
1
|
import { getMarketRegistry, getMarketsContext, stringToFloat, toPerpsMarketDisplay, } from '@lifi/perps-sdk';
|
|
2
|
+
import Big from 'big.js';
|
|
2
3
|
import { PROVIDER_KEY } from '../constants.js';
|
|
3
4
|
import { HlAbstractionMode, } from '../types/index.js';
|
|
4
5
|
import { isUnifiedAbstraction } from '../utils/abstractionMode.js';
|
|
5
6
|
import { toWireBig } from '../utils/decimal.js';
|
|
6
|
-
import { partitionSpotBalances, perpsDexNames, spotAssetFromToken, spotBalance, spotPriceById, } from '../utils/index.js';
|
|
7
|
+
import { assetIsOutcome, partitionSpotBalances, perpsDexNames, spotAssetFromToken, spotBalance, spotPriceById, } from '../utils/index.js';
|
|
7
8
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
8
9
|
import { isOpenAssetPosition, mapPosition } from '../utils/mapPosition.js';
|
|
9
10
|
// `marginSummary` covers the whole account (cross AND isolated positions);
|
|
10
11
|
// `crossMarginSummary` is the cross-only subset and would drop isolated
|
|
11
12
|
// equity/margin.
|
|
12
13
|
const getAccountValue = (state) => toWireBig(state.marginSummary.accountValue, 'marginSummary.accountValue');
|
|
13
|
-
const getTotalMarginUsed = (state) =>
|
|
14
|
+
const getTotalMarginUsed = (state) => toWireBig(state.marginSummary.totalMarginUsed, 'marginSummary.totalMarginUsed');
|
|
14
15
|
const getMarginUsed = (abstraction, positions, stateByDex) => {
|
|
15
16
|
if (abstraction === HlAbstractionMode.UNIFIED_ACCOUNT ||
|
|
16
17
|
abstraction === HlAbstractionMode.PORTFOLIO_MARGIN) {
|
|
17
18
|
// Per HL docs, individual per-dex states are not meaningful for these
|
|
18
19
|
// modes; derive total margin from the already-mapped positions.
|
|
19
|
-
const total = positions.reduce((sum,
|
|
20
|
-
return total.
|
|
20
|
+
const total = positions.reduce((sum, position) => sum.plus(toWireBig(position.marginUsed, 'positions.marginUsed')), new Big(0));
|
|
21
|
+
return total.toFixed();
|
|
21
22
|
}
|
|
22
23
|
if (abstraction === HlAbstractionMode.DEX_ABSTRACTION) {
|
|
23
|
-
let total = 0;
|
|
24
|
+
let total = new Big(0);
|
|
24
25
|
for (const [, state] of stateByDex) {
|
|
25
|
-
total
|
|
26
|
+
total = total.plus(getTotalMarginUsed(state));
|
|
26
27
|
}
|
|
27
|
-
return total.
|
|
28
|
+
return total.toFixed();
|
|
28
29
|
}
|
|
29
30
|
const mainState = stateByDex.get('');
|
|
30
31
|
if (!mainState) {
|
|
31
32
|
return '0';
|
|
32
33
|
}
|
|
33
|
-
return getTotalMarginUsed(mainState).
|
|
34
|
+
return getTotalMarginUsed(mainState).toFixed();
|
|
34
35
|
};
|
|
35
36
|
const buildBalances = (abstraction, spotState, stateByDex, quoteAssetIds, priceById, quoteAssetByCategory) => {
|
|
36
|
-
const { balances, collateralBalances } = partitionSpotBalances(spotState.balances
|
|
37
|
+
const { balances, collateralBalances } = partitionSpotBalances(spotState.balances
|
|
38
|
+
.filter((b) => !assetIsOutcome(b.coin))
|
|
39
|
+
.map((b) => spotBalance(spotAssetFromToken(b), b.total, priceById)), quoteAssetIds, abstraction === HlAbstractionMode.PORTFOLIO_MARGIN);
|
|
37
40
|
// Unified/portfolio modes hold everything in spot — per-dex equity would
|
|
38
41
|
// double-count. Only disabled/dexAbstraction carry separate venue collateral.
|
|
39
42
|
// `accountValue` is the dex's TOTAL equity: locked margin and unrealized
|
|
@@ -52,6 +55,7 @@ const buildBalances = (abstraction, spotState, stateByDex, quoteAssetIds, priceB
|
|
|
52
55
|
asset: quoteAssetByCategory.get(categoryId),
|
|
53
56
|
units: value.toFixed(),
|
|
54
57
|
valueUsd: value.toFixed(),
|
|
58
|
+
price: '1',
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
}
|
|
@@ -99,7 +103,7 @@ export const getAccount = async ({ client, apiUrl }, params, options) => {
|
|
|
99
103
|
]);
|
|
100
104
|
const priceById = spotPriceById(markets, new Map(prices.map((p) => [p.marketId, stringToFloat(p.markPrice)])));
|
|
101
105
|
const positions = stateResults.flatMap((state) => state.assetPositions
|
|
102
|
-
.filter(isOpenAssetPosition)
|
|
106
|
+
.filter((ap) => !assetIsOutcome(ap.position.coin) && isOpenAssetPosition(ap))
|
|
103
107
|
.map((ap) => mapPosition(ap, toPerpsMarketDisplay(registry.require(ap.position.coin)))));
|
|
104
108
|
const stateByDex = new Map();
|
|
105
109
|
stateResults.forEach((state, i) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EAGjB,aAAa,EACb,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"getAccount.js","sourceRoot":"","sources":["../../../src/services/getAccount.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,8 @@ export interface GetActivityParams {
|
|
|
24
24
|
/**
|
|
25
25
|
* Fetch a chronological activity feed (deposits, withdrawals, transfers,
|
|
26
26
|
* liquidations, funding) for `address`. Combines results from Hyperliquid's
|
|
27
|
-
* `userNonFundingLedgerUpdates` and `
|
|
28
|
-
* newest-first.
|
|
27
|
+
* `userNonFundingLedgerUpdates`, `userFunding`, and `userFills` endpoints,
|
|
28
|
+
* sorted newest-first.
|
|
29
29
|
*
|
|
30
30
|
* Cursor-based pagination uses the ms-since-epoch timestamp of the last item
|
|
31
31
|
* on the current page.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActivity.d.ts","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getActivity.d.ts","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AA0BvD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;CACtB;AAoHD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GACtB,oBAAoB,kBAAkB,EACtC,QAAQ,iBAAiB,EACzB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,kBAAkB,CAiE5B,CAAA"}
|
|
@@ -1,33 +1,63 @@
|
|
|
1
|
-
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
1
|
+
import { getAssetRegistry, getMarketRegistry, } from '@lifi/perps-sdk';
|
|
2
2
|
import { ActivityType } from '@lifi/perps-types';
|
|
3
3
|
import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, PROVIDER_KEY, } from '../constants.js';
|
|
4
|
-
import {
|
|
4
|
+
import { isCollateralTransferDelta, isDepositDelta, isLiquidationDelta, isSendAssetDelta, isSpotTransferDelta, isVaultTransferDelta, isWithdrawDelta, } from '../types/index.js';
|
|
5
|
+
import { mapFundingActivity, mapLedgerEntry, mapLiquidationFills, } from '../utils/index.js';
|
|
5
6
|
import { hlInfoOptions, infoRequest, } from '../utils/infoClient.js';
|
|
6
7
|
const MARKET_BEARING_TYPES = new Set([
|
|
7
8
|
ActivityType.FUNDING,
|
|
8
9
|
ActivityType.LIQUIDATION,
|
|
9
10
|
]);
|
|
11
|
+
const ASSET_BEARING_TYPES = new Set([
|
|
12
|
+
ActivityType.DEPOSIT,
|
|
13
|
+
ActivityType.WITHDRAWAL,
|
|
14
|
+
ActivityType.TRANSFER,
|
|
15
|
+
]);
|
|
10
16
|
const needsMarkets = (typeFilter) => !typeFilter || typeFilter.some((t) => MARKET_BEARING_TYPES.has(t));
|
|
11
|
-
const fetchActivityData = async (apiUrl, typeFilter, timeParams, resolveMarket, options) => {
|
|
17
|
+
const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry, resolveMarket, options) => {
|
|
12
18
|
const needLedger = !typeFilter || typeFilter.some((t) => t !== ActivityType.FUNDING);
|
|
13
19
|
const needFunding = !typeFilter || typeFilter.includes(ActivityType.FUNDING);
|
|
14
|
-
|
|
20
|
+
// A liquidation executed as a market order reaches the account as fills
|
|
21
|
+
// with a `liquidation` field and never as a ledger `liquidation` delta.
|
|
22
|
+
const needLiquidationFills = !typeFilter || typeFilter.includes(ActivityType.LIQUIDATION);
|
|
23
|
+
const [ledgerUpdates, fundingUpdates, fills] = await Promise.all([
|
|
15
24
|
needLedger
|
|
16
25
|
? infoRequest(apiUrl, { type: 'userNonFundingLedgerUpdates', ...timeParams }, options)
|
|
17
26
|
: Promise.resolve([]),
|
|
18
27
|
needFunding
|
|
19
28
|
? infoRequest(apiUrl, { type: 'userFunding', ...timeParams }, options)
|
|
20
29
|
: Promise.resolve([]),
|
|
30
|
+
needLiquidationFills
|
|
31
|
+
? infoRequest(apiUrl, timeParams.startTime === undefined
|
|
32
|
+
? { type: 'userFills', user: timeParams.user }
|
|
33
|
+
: { type: 'userFillsByTime', ...timeParams }, options)
|
|
34
|
+
: Promise.resolve([]),
|
|
21
35
|
]);
|
|
22
36
|
const ledgerItems = ledgerUpdates.flatMap((entry) => {
|
|
23
|
-
|
|
37
|
+
if (typeFilter !== undefined &&
|
|
38
|
+
((isDepositDelta(entry.delta) &&
|
|
39
|
+
!typeFilter.includes(ActivityType.DEPOSIT)) ||
|
|
40
|
+
(isWithdrawDelta(entry.delta) &&
|
|
41
|
+
!typeFilter.includes(ActivityType.WITHDRAWAL)) ||
|
|
42
|
+
(!typeFilter.includes(ActivityType.TRANSFER) &&
|
|
43
|
+
(isSpotTransferDelta(entry.delta) ||
|
|
44
|
+
isSendAssetDelta(entry.delta) ||
|
|
45
|
+
isCollateralTransferDelta(entry.delta) ||
|
|
46
|
+
isVaultTransferDelta(entry.delta))))) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const item = mapLedgerEntry(entry, PROVIDER_KEY, timeParams.user, assetRegistry, resolveMarket);
|
|
24
50
|
return item === null ? [] : [item];
|
|
25
51
|
});
|
|
26
52
|
const fundingItems = fundingUpdates.flatMap((entry) => {
|
|
27
53
|
const item = mapFundingActivity(entry, PROVIDER_KEY, resolveMarket);
|
|
28
54
|
return item === null ? [] : [item];
|
|
29
55
|
});
|
|
30
|
-
const
|
|
56
|
+
const ledgerLiquidationHashes = new Set(ledgerUpdates
|
|
57
|
+
.filter((entry) => isLiquidationDelta(entry.delta))
|
|
58
|
+
.map((entry) => entry.hash));
|
|
59
|
+
const liquidationItems = mapLiquidationFills(fills, PROVIDER_KEY, timeParams.user, resolveMarket, ledgerLiquidationHashes);
|
|
60
|
+
const merged = [...ledgerItems, ...fundingItems, ...liquidationItems].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
31
61
|
if (!typeFilter) {
|
|
32
62
|
return merged;
|
|
33
63
|
}
|
|
@@ -37,8 +67,8 @@ const fetchActivityData = async (apiUrl, typeFilter, timeParams, resolveMarket,
|
|
|
37
67
|
/**
|
|
38
68
|
* Fetch a chronological activity feed (deposits, withdrawals, transfers,
|
|
39
69
|
* liquidations, funding) for `address`. Combines results from Hyperliquid's
|
|
40
|
-
* `userNonFundingLedgerUpdates` and `
|
|
41
|
-
* newest-first.
|
|
70
|
+
* `userNonFundingLedgerUpdates`, `userFunding`, and `userFills` endpoints,
|
|
71
|
+
* sorted newest-first.
|
|
42
72
|
*
|
|
43
73
|
* Cursor-based pagination uses the ms-since-epoch timestamp of the last item
|
|
44
74
|
* on the current page.
|
|
@@ -52,6 +82,11 @@ export const getActivity = async ({ client, apiUrl }, params, options) => {
|
|
|
52
82
|
if (needsMarkets(params.type)) {
|
|
53
83
|
await registry.sync();
|
|
54
84
|
}
|
|
85
|
+
const assetRegistry = getAssetRegistry(client, PROVIDER_KEY);
|
|
86
|
+
if (params.type === undefined ||
|
|
87
|
+
params.type.some((type) => ASSET_BEARING_TYPES.has(type))) {
|
|
88
|
+
await assetRegistry.sync();
|
|
89
|
+
}
|
|
55
90
|
const infoOpts = hlInfoOptions(client, options);
|
|
56
91
|
const limit = Math.min(params.limit ?? DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT);
|
|
57
92
|
const timeParams = {
|
|
@@ -64,7 +99,7 @@ export const getActivity = async ({ client, apiUrl }, params, options) => {
|
|
|
64
99
|
// `get`, not `require`: a coin the backend market list does not hold drops
|
|
65
100
|
// only its own row instead of rejecting the whole feed. The registry warns
|
|
66
101
|
// once per unresolved id. A delisted market still resolves, so its rows stay.
|
|
67
|
-
const merged = await fetchActivityData(apiUrl, params.type, timeParams, (coin) => registry.get(coin), infoOpts);
|
|
102
|
+
const merged = await fetchActivityData(apiUrl, params.type, timeParams, assetRegistry, (coin) => registry.get(coin), infoOpts);
|
|
68
103
|
// Drop boundary items so the next page does not return the cursor row twice.
|
|
69
104
|
const filtered = params.cursor === undefined
|
|
70
105
|
? merged
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFills.d.ts","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AASvD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAoBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"getFills.d.ts","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AASvD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAoBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CA8DvB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
2
2
|
import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, PROVIDER_KEY, } from '../constants.js';
|
|
3
|
-
import { mapFill } from '../utils/index.js';
|
|
3
|
+
import { assetIsOutcome, mapFill } from '../utils/index.js';
|
|
4
4
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
5
|
// HL's docs specify neither newest-first ordering nor monotonic `tid` for
|
|
6
6
|
// `userFills`/`userFillsByTime`, so pagination can't rely on upstream order —
|
|
@@ -48,6 +48,9 @@ export const getFills = async ({ client, apiUrl }, params, options) => {
|
|
|
48
48
|
// only its own row instead of rejecting the whole page. The registry warns
|
|
49
49
|
// once per unresolved id. A delisted market still resolves, so its rows stay.
|
|
50
50
|
const items = page.flatMap((f) => {
|
|
51
|
+
if (assetIsOutcome(f.coin)) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
51
54
|
const market = registry.get(f.coin);
|
|
52
55
|
return market === undefined ? [] : [mapFill(f, market)];
|
|
53
56
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAA;AAG3E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAA;AAOxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrder.d.ts","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"getOrder.d.ts","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAQvD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,KAAK,CAkDf,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getMarketRegistry, PerpsError, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
3
|
import { PROVIDER_KEY } from '../constants.js';
|
|
4
|
-
import { mapOrder } from '../utils/index.js';
|
|
4
|
+
import { assetIsOutcome, mapOrder } from '../utils/index.js';
|
|
5
5
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
6
6
|
/**
|
|
7
7
|
* Read getOrder direct from the Hyperliquid REST API.
|
|
@@ -10,14 +10,25 @@ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
|
10
10
|
* @public
|
|
11
11
|
*/
|
|
12
12
|
export const getOrder = async ({ client, apiUrl }, params, options) => {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const isClientId = /^0x[0-9a-fA-F]{32}$/.test(params.id);
|
|
14
|
+
const oid = isClientId ? params.id : Number(params.id);
|
|
15
|
+
if (!isClientId &&
|
|
16
|
+
(!/^[0-9]+$/.test(params.id) || !Number.isSafeInteger(oid))) {
|
|
17
|
+
const err = new PerpsError(PerpsErrorCode.ValidationError, `Invalid order ID: ${params.id}. Expected a numeric oid or a 128-bit cloid.`);
|
|
16
18
|
err.tool = PROVIDER_KEY;
|
|
17
19
|
throw err;
|
|
18
20
|
}
|
|
19
21
|
const status = await infoRequest(apiUrl, { type: 'orderStatus', user: params.address, oid }, hlInfoOptions(client, options));
|
|
20
22
|
if (status.status !== 'order') {
|
|
23
|
+
const history = await infoRequest(apiUrl, { type: 'twapHistory', user: params.address }, hlInfoOptions(client, options));
|
|
24
|
+
const twap = history.find((entry) => String(entry.twapId) === params.id && !assetIsOutcome(entry.state.coin));
|
|
25
|
+
if (twap !== undefined) {
|
|
26
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
27
|
+
await registry.sync();
|
|
28
|
+
return mapOrder(twap, registry.require(twap.state.coin));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (status.status !== 'order' || assetIsOutcome(status.order.order.coin)) {
|
|
21
32
|
const err = new PerpsError(PerpsErrorCode.OrderNotFound, `Order not found: ${params.id}`);
|
|
22
33
|
err.tool = PROVIDER_KEY;
|
|
23
34
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrder.js","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,UAAU,GAGX,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"getOrder.js","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,8 @@
|
|
|
1
|
-
import { type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
1
|
+
import { type ProviderGetOrdersParams, type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
2
|
import type { OrdersResponse } from '@lifi/perps-types';
|
|
3
|
-
import type { Address } from 'viem';
|
|
4
3
|
import type { HyperliquidContext } from '../context.js';
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
export interface GetOrdersParams {
|
|
11
|
-
address: Address;
|
|
12
|
-
/** Optional filter using the normalized opaque `Market.id`. */
|
|
13
|
-
marketId?: string;
|
|
14
|
-
/** Page-size hint; Hyperliquid returns all open orders in one response. */
|
|
15
|
-
limit?: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Fetch open + trigger orders across every supported perps sub-dex for
|
|
19
|
-
* `address`, normalised into `OrdersResponse`. Trigger orders that appear as
|
|
20
|
-
* children of a parent limit order (Hyperliquid's `normalTpsl` flow) are
|
|
21
|
-
* extracted and surfaced alongside top-level trigger orders. The backend's
|
|
22
|
-
* enriched asset list supplies the sub-dex fan-out and display fields; only
|
|
23
|
-
* `frontendOpenOrders` is read direct.
|
|
24
|
-
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
25
|
-
* @public
|
|
26
|
-
*/
|
|
4
|
+
/** Parameters for a lifecycle-filtered Hyperliquid order read. */
|
|
5
|
+
export type GetOrdersParams = ProviderGetOrdersParams;
|
|
6
|
+
/** Read regular, trigger, and TWAP orders from the requested lifecycle feeds. */
|
|
27
7
|
export declare const getOrders: ({ client, apiUrl }: HyperliquidContext, params: GetOrdersParams, options?: SDKRequestOptions) => Promise<OrdersResponse>;
|
|
28
8
|
//# sourceMappingURL=getOrders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrders.d.ts","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getOrders.d.ts","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAoBvD,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAA;AA4ErD,iFAAiF;AACjF,eAAO,MAAM,SAAS,GACpB,oBAAoB,kBAAkB,EACtC,QAAQ,eAAe,EACvB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,CAoGxB,CAAA"}
|
|
@@ -1,57 +1,130 @@
|
|
|
1
|
-
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
1
|
+
import { ACTIVE_ORDER_STATUSES, createWarnOnce, ExplorerChainId, explorerTxUrl, getMarketRegistry, isActiveOrderStatus, PerpsError, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PROVIDER_KEY } from '../constants.js';
|
|
3
|
-
import {
|
|
4
|
-
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
3
|
+
import { assetIsOutcome, fetchUserTransactions, mapOrder, matchOrderActionHash, perpsDexNames, } from '../utils/index.js';
|
|
4
|
+
import { hlInfoOptions, infoRequest, } from '../utils/infoClient.js';
|
|
5
|
+
const warn = createWarnOnce();
|
|
6
|
+
const warnOnce = (key, detail) => {
|
|
7
|
+
warn(key, `[${PROVIDER_KEY}] ${detail === undefined ? key : `${key}: ${detail}`}`);
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Map one venue row, or drop it. An outcome market identity, a coin the backend
|
|
11
|
+
* market list does not hold, and a row the mapper rejects each drop only their
|
|
12
|
+
* own row instead of rejecting the whole page; each distinct mapper message
|
|
13
|
+
* warns once.
|
|
14
|
+
*/
|
|
15
|
+
const mapRow = (coin, registry, map) => {
|
|
16
|
+
if (assetIsOutcome(coin)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const market = registry.get(coin);
|
|
20
|
+
if (market === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return map(market);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (!(error instanceof PerpsError)) {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
warnOnce(`dropped order row: ${error.message}`);
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
5
34
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `frontendOpenOrders` is read direct.
|
|
12
|
-
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
13
|
-
* @public
|
|
35
|
+
* Set `explorerLink` on each row whose placement transaction the explorer
|
|
36
|
+
* window still holds. One explorer read serves the whole page, and it is
|
|
37
|
+
* skipped when no row carries a client order id to match on. The link is
|
|
38
|
+
* supplementary, so an explorer failure warns and leaves the rows unlinked
|
|
39
|
+
* instead of failing the order read.
|
|
14
40
|
*/
|
|
41
|
+
const withExplorerLinks = async (orders, address, options) => {
|
|
42
|
+
if (!orders.some((order) => order.clientOrderId !== undefined)) {
|
|
43
|
+
return orders;
|
|
44
|
+
}
|
|
45
|
+
let txs;
|
|
46
|
+
try {
|
|
47
|
+
txs = await fetchUserTransactions(address, options);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (!(error instanceof PerpsError)) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
// The message stays out of the key: a transport failure names hosts and
|
|
54
|
+
// ports, so keying on it would let the dedupe set grow without bound.
|
|
55
|
+
warnOnce('explorer link lookup failed', error.message);
|
|
56
|
+
return orders;
|
|
57
|
+
}
|
|
58
|
+
return orders.map((order) => {
|
|
59
|
+
const explorerLink = explorerTxUrl(ExplorerChainId.HYPERLIQUID, matchOrderActionHash(txs, order));
|
|
60
|
+
return explorerLink === undefined ? order : { ...order, explorerLink };
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
/** Read regular, trigger, and TWAP orders from the requested lifecycle feeds. */
|
|
15
64
|
export const getOrders = async ({ client, apiUrl }, params, options) => {
|
|
65
|
+
const statuses = params.statuses ?? [...ACTIVE_ORDER_STATUSES];
|
|
66
|
+
if (statuses.length === 0) {
|
|
67
|
+
return {
|
|
68
|
+
provider: PROVIDER_KEY,
|
|
69
|
+
orders: [],
|
|
70
|
+
pagination: { limit: params.limit ?? 0, hasMore: false },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
16
73
|
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
17
74
|
const markets = await registry.sync();
|
|
18
75
|
const infoOpts = hlInfoOptions(client, options);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
76
|
+
const active = statuses.some(isActiveOrderStatus);
|
|
77
|
+
const terminal = statuses.some((status) => !isActiveOrderStatus(status));
|
|
78
|
+
const [open, historical, twaps] = await Promise.all([
|
|
79
|
+
active
|
|
80
|
+
? Promise.all(perpsDexNames(markets).map((name) => infoRequest(apiUrl, {
|
|
81
|
+
type: 'frontendOpenOrders',
|
|
82
|
+
user: params.address,
|
|
83
|
+
...(name ? { dex: name } : {}),
|
|
84
|
+
}, infoOpts)))
|
|
85
|
+
: [],
|
|
86
|
+
terminal
|
|
87
|
+
? infoRequest(apiUrl, { type: 'historicalOrders', user: params.address }, infoOpts)
|
|
88
|
+
: [],
|
|
89
|
+
infoRequest(apiUrl, { type: 'twapHistory', user: params.address }, infoOpts),
|
|
90
|
+
]);
|
|
91
|
+
const rows = new Map();
|
|
92
|
+
const keep = (key, order) => {
|
|
93
|
+
if (order !== undefined) {
|
|
94
|
+
rows.set(key, order);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
for (const detail of historical) {
|
|
98
|
+
const key = String(detail.order.oid);
|
|
99
|
+
// The feed carries one row per lifecycle transition, newest first, and a
|
|
100
|
+
// terminal row shares its timestamp with the `open` row beneath it, so
|
|
101
|
+
// only the first row of an id states that order's current status.
|
|
102
|
+
if (rows.has(key)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
keep(key, mapRow(detail.order.coin, registry, (market) => mapOrder(detail, market)));
|
|
106
|
+
}
|
|
107
|
+
const raw = open.flat();
|
|
108
|
+
const childIds = new Set(raw.flatMap((order) => (order.children ?? []).map((child) => child.oid)));
|
|
109
|
+
for (const order of raw) {
|
|
110
|
+
if (!childIds.has(order.oid)) {
|
|
111
|
+
keep(String(order.oid), mapRow(order.coin, registry, (market) => mapOrder(order, market)));
|
|
112
|
+
}
|
|
113
|
+
for (const child of order.children ?? []) {
|
|
114
|
+
keep(String(child.oid), mapRow(child.coin, registry, (market) => mapOrder(child, market, String(order.oid))));
|
|
29
115
|
}
|
|
30
116
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
.map((o) => mapOpenOrder(o, registry.require(o.coin)));
|
|
35
|
-
let triggerOrders = [
|
|
36
|
-
...nonChild
|
|
37
|
-
.filter((o) => isTriggerOrder(o))
|
|
38
|
-
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
39
|
-
...raw
|
|
40
|
-
.filter((o) => childOids.has(o.oid))
|
|
41
|
-
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
42
|
-
];
|
|
43
|
-
if (params.marketId !== undefined) {
|
|
44
|
-
openOrders = openOrders.filter((o) => o.market.id === params.marketId);
|
|
45
|
-
triggerOrders = triggerOrders.filter((o) => o.market.id === params.marketId);
|
|
117
|
+
// TWAP ids and regular order ids occupy separate venue namespaces.
|
|
118
|
+
for (const twap of twaps) {
|
|
119
|
+
keep(`twap:${twap.twapId}`, mapRow(twap.state.coin, registry, (market) => mapOrder(twap, market)));
|
|
46
120
|
}
|
|
121
|
+
const matching = [...rows.values()].filter((order) => statuses.includes(order.status) &&
|
|
122
|
+
(params.marketId === undefined || order.market.id === params.marketId));
|
|
123
|
+
const orders = await withExplorerLinks(matching, params.address, infoOpts);
|
|
47
124
|
return {
|
|
48
125
|
provider: PROVIDER_KEY,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
pagination: {
|
|
52
|
-
limit: params.limit ?? openOrders.length + triggerOrders.length,
|
|
53
|
-
hasMore: false,
|
|
54
|
-
},
|
|
126
|
+
orders,
|
|
127
|
+
pagination: { limit: params.limit ?? orders.length, hasMore: false },
|
|
55
128
|
};
|
|
56
129
|
};
|
|
57
130
|
//# sourceMappingURL=getOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOrders.js","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"getOrders.js","sourceRoot":"","sources":["../../../src/services/getOrders.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;
|
|
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;AAUvD;;;;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,CA4C3B,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getMarketRegistry, toPerpsMarketDisplay, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PROVIDER_KEY } from '../constants.js';
|
|
3
|
-
import { isOpenAssetPosition, mapPosition, perpsDexNames, } from '../utils/index.js';
|
|
3
|
+
import { assetIsOutcome, isOpenAssetPosition, mapPosition, perpsDexNames, } from '../utils/index.js';
|
|
4
4
|
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
5
|
/**
|
|
6
6
|
* Fetch open positions across every supported perps sub-dex for `address`,
|
|
@@ -20,7 +20,7 @@ export const getPositions = async ({ client, apiUrl }, params, options) => {
|
|
|
20
20
|
...(name ? { dex: name } : {}),
|
|
21
21
|
}, infoOpts)));
|
|
22
22
|
let positions = stateResults.flatMap((state) => state.assetPositions
|
|
23
|
-
.filter(isOpenAssetPosition)
|
|
23
|
+
.filter((ap) => !assetIsOutcome(ap.position.coin) && isOpenAssetPosition(ap))
|
|
24
24
|
.map((ap) => mapPosition(ap, toPerpsMarketDisplay(registry.require(ap.position.coin)))));
|
|
25
25
|
if (params.marketId !== undefined) {
|
|
26
26
|
positions = positions.filter((p) => p.market.id === params.marketId);
|