@lifi/perps-sdk-provider-hyperliquid 20.0.0 → 20.1.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 +45 -0
- package/dist/cjs/services/getActivity.d.ts.map +1 -1
- package/dist/cjs/services/getActivity.js +68 -44
- 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 +30 -38
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/historyPagination.d.ts +22 -0
- package/dist/cjs/services/historyPagination.d.ts.map +1 -0
- package/dist/cjs/services/historyPagination.js +125 -0
- package/dist/cjs/services/historyPagination.js.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +6 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +129 -37
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts +3 -13
- package/dist/esm/services/getActivity.d.ts.map +1 -1
- package/dist/esm/services/getActivity.js +74 -64
- package/dist/esm/services/getActivity.js.map +1 -1
- package/dist/esm/services/getFills.d.ts +2 -14
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +32 -58
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/historyPagination.d.ts +22 -0
- package/dist/esm/services/historyPagination.d.ts.map +1 -0
- package/dist/esm/services/historyPagination.js +121 -0
- package/dist/esm/services/historyPagination.js.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +6 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +131 -49
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/services/getActivity.d.ts +3 -13
- package/dist/types/services/getActivity.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts +2 -14
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/historyPagination.d.ts +22 -0
- package/dist/types/services/historyPagination.d.ts.map +1 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +6 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/services/getActivity.ts +133 -104
- package/src/services/getFills.ts +42 -95
- package/src/services/historyPagination.ts +169 -0
- package/src/websocket/HyperliquidWsProvider.ts +141 -63
package/README.md
CHANGED
|
@@ -35,6 +35,18 @@ Setup registers an agent keypair whose private key signs orders locally, so trad
|
|
|
35
35
|
|
|
36
36
|
The keypair is persisted through a `StorageAdapter`. The default adapter encrypts values with AES-GCM before writing to browser `localStorage`, holding the master key as a non-extractable `CryptoKey` handle in IndexedDB, so key material is never stored as plaintext. Pass your own `StorageAdapter` to the `HyperliquidAgentStore` constructor to use a different backend — a custom adapter bypasses this encryption and is responsible for protecting the key at rest.
|
|
37
37
|
|
|
38
|
+
## Live portfolio valuation
|
|
39
|
+
|
|
40
|
+
`spotBalances` and spot-funded `accountSummary` subscriptions own their shared
|
|
41
|
+
price feeds; neither requires a separate `marketsContext` subscriber. Price
|
|
42
|
+
updates revalue the latest spot snapshot without waiting for another balance
|
|
43
|
+
frame. Releasing another market consumer does not interrupt portfolio pricing.
|
|
44
|
+
|
|
45
|
+
For a held token with a listed spot market, balance and summary emissions wait
|
|
46
|
+
for its first price rather than reporting a zero USD value. Tokens without a
|
|
47
|
+
listed market retain their unpriced balances. Unified and portfolio-margin
|
|
48
|
+
summaries also wait for clearinghouse state and venue-reported buying power.
|
|
49
|
+
|
|
38
50
|
## Ledger asset identity
|
|
39
51
|
|
|
40
52
|
Transfers carry the backend registry `Asset`, including its logo, numeric `id`,
|
|
@@ -98,6 +110,39 @@ Unknown future delta types remain outside the supported activity model.
|
|
|
98
110
|
These exclusions do not apply to missing assets in supported transfer rows:
|
|
99
111
|
the mapper rejects those rows with an error instead of silently omitting them.
|
|
100
112
|
|
|
113
|
+
## History pagination
|
|
114
|
+
|
|
115
|
+
`getFills` and `getActivity` return deterministic newest-first pages. Pass the
|
|
116
|
+
opaque `pagination.cursor` back unchanged with the same address, time bounds
|
|
117
|
+
and activity filters. Malformed cursors and timestamp or `time:trade-id` cursors
|
|
118
|
+
from older provider releases are rejected with `PerpsErrorCode.ValidationError`.
|
|
119
|
+
Discard those stored cursors and restart the traversal without a cursor.
|
|
120
|
+
|
|
121
|
+
Both time bounds are inclusive. Activity cursors distinguish different event
|
|
122
|
+
types and IDs at the same timestamp; fill cursors also distinguish trade IDs.
|
|
123
|
+
Subsequent pages exclude newer arrivals beyond the first page's time boundary.
|
|
124
|
+
|
|
125
|
+
`limit` must be a positive safe integer; invalid values raise
|
|
126
|
+
`PerpsErrorCode.ValidationError`. It defaults to 50, and valid values above 200
|
|
127
|
+
are capped at 200.
|
|
128
|
+
|
|
129
|
+
Hyperliquid's [info endpoint](https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint)
|
|
130
|
+
paginates time ranges forwards and caps funding/ledger responses at 500 entries
|
|
131
|
+
or blocks, and fills at 2,000. The provider narrows saturated time windows before
|
|
132
|
+
returning newest-first pages. A single millisecond that saturates the venue cap
|
|
133
|
+
raises an error because the upstream time-only API cannot prove completeness.
|
|
134
|
+
Failures and cancellation reject the request rather than returning a partial page.
|
|
135
|
+
|
|
136
|
+
Only the latest 10,000 fills are available upstream, including liquidation fills;
|
|
137
|
+
pagination cannot recover older venue-discarded history. Liquidation-inclusive
|
|
138
|
+
activity reads scan this bounded retained fill history on each SDK page so all
|
|
139
|
+
fills of an order are aggregated before pagination. Matching ledger liquidations
|
|
140
|
+
are excluded using ledger history between the earliest and latest retained
|
|
141
|
+
liquidation fills, independently of the current SDK page. Their cursors retain
|
|
142
|
+
the original upper time bound, preventing subsequent pages from regrouping an
|
|
143
|
+
order using newly arriving fills. Funding/ledger-only activity and ordinary fill
|
|
144
|
+
pages use bounded newest-first windows instead of repeatedly downloading full history.
|
|
145
|
+
|
|
101
146
|
## Order reads
|
|
102
147
|
|
|
103
148
|
`getOrders` returns `{ provider, orders, pagination }`. Each `Order` carries a
|
|
@@ -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,EAKL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAkCvD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;CACtB;AA8KD,eAAO,MAAM,WAAW,GACtB,oBAAoB,kBAAkB,EACtC,QAAQ,iBAAiB,EACzB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,kBAAkB,CAmD5B,CAAA"}
|
|
@@ -7,6 +7,7 @@ const constants_js_1 = require("../constants.js");
|
|
|
7
7
|
const index_js_1 = require("../types/index.js");
|
|
8
8
|
const index_js_2 = require("../utils/index.js");
|
|
9
9
|
const infoClient_js_1 = require("../utils/infoClient.js");
|
|
10
|
+
const historyPagination_js_1 = require("./historyPagination.js");
|
|
10
11
|
const MARKET_BEARING_TYPES = new Set([
|
|
11
12
|
perps_types_1.ActivityType.FUNDING,
|
|
12
13
|
perps_types_1.ActivityType.LIQUIDATION,
|
|
@@ -17,23 +18,64 @@ const ASSET_BEARING_TYPES = new Set([
|
|
|
17
18
|
perps_types_1.ActivityType.TRANSFER,
|
|
18
19
|
]);
|
|
19
20
|
const needsMarkets = (typeFilter) => !typeFilter || typeFilter.some((t) => MARKET_BEARING_TYPES.has(t));
|
|
20
|
-
const
|
|
21
|
+
const fetchLiquidationHistory = async (apiUrl, user, startTime, endTime, resolveMarket, options) => {
|
|
22
|
+
const retained = new Map();
|
|
23
|
+
while (startTime <= endTime) {
|
|
24
|
+
options?.signal?.throwIfAborted();
|
|
25
|
+
const fills = await (0, infoClient_js_1.infoRequest)(apiUrl, { type: 'userFillsByTime', user, startTime, endTime }, options);
|
|
26
|
+
options?.signal?.throwIfAborted();
|
|
27
|
+
let latest = startTime;
|
|
28
|
+
for (const fill of fills) {
|
|
29
|
+
retained.set(fill.tid, fill);
|
|
30
|
+
latest = Math.max(latest, fill.time);
|
|
31
|
+
}
|
|
32
|
+
if (fills.length < 2000 || retained.size >= 10000) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
if (latest === startTime) {
|
|
36
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ThirdPartyError, 'Hyperliquid fills saturate a single millisecond; liquidation history cannot be paginated safely');
|
|
37
|
+
}
|
|
38
|
+
startTime = latest;
|
|
39
|
+
}
|
|
40
|
+
const queried = user.toLowerCase();
|
|
41
|
+
const fills = [...retained.values()].filter((fill) => fill.liquidation?.liquidatedUser.toLowerCase() === queried);
|
|
42
|
+
if (fills.length === 0) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const hashes = new Set();
|
|
46
|
+
let firstTime = Infinity;
|
|
47
|
+
let lastTime = 0;
|
|
48
|
+
for (const fill of fills) {
|
|
49
|
+
if (fill.hash !== undefined) {
|
|
50
|
+
hashes.add(fill.hash);
|
|
51
|
+
}
|
|
52
|
+
firstTime = Math.min(firstTime, fill.time);
|
|
53
|
+
lastTime = Math.max(lastTime, fill.time);
|
|
54
|
+
}
|
|
55
|
+
const ledger = await (0, historyPagination_js_1.historyPage)({ startTime: firstTime, endTime: lastTime }, Number.MAX_SAFE_INTEGER, async (startTime, endTime) => {
|
|
56
|
+
const updates = await (0, infoClient_js_1.infoRequest)(apiUrl, { type: 'userNonFundingLedgerUpdates', user, startTime, endTime }, options);
|
|
57
|
+
return {
|
|
58
|
+
items: updates.filter((entry) => (0, index_js_1.isLiquidationDelta)(entry.delta) && hashes.has(entry.hash)),
|
|
59
|
+
saturated: updates.length >= 500,
|
|
60
|
+
};
|
|
61
|
+
}, (entry) => ({ time: entry.time, key: entry.hash }), options?.signal);
|
|
62
|
+
return (0, index_js_2.mapLiquidationFills)(fills, constants_js_1.PROVIDER_KEY, user, resolveMarket, new Set(ledger.items.map((entry) => entry.hash)));
|
|
63
|
+
};
|
|
64
|
+
const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry, resolveMarket, liquidationHistory, options) => {
|
|
21
65
|
const needLedger = !typeFilter || typeFilter.some((t) => t !== perps_types_1.ActivityType.FUNDING);
|
|
22
66
|
const needFunding = !typeFilter || typeFilter.includes(perps_types_1.ActivityType.FUNDING);
|
|
23
|
-
const
|
|
24
|
-
const [ledgerUpdates, fundingUpdates, fills] = await Promise.all([
|
|
67
|
+
const [ledgerUpdates, fundingUpdates, liquidations] = await Promise.all([
|
|
25
68
|
needLedger
|
|
26
69
|
? (0, infoClient_js_1.infoRequest)(apiUrl, { type: 'userNonFundingLedgerUpdates', ...timeParams }, options)
|
|
27
70
|
: Promise.resolve([]),
|
|
28
71
|
needFunding
|
|
29
72
|
? (0, infoClient_js_1.infoRequest)(apiUrl, { type: 'userFunding', ...timeParams }, options)
|
|
30
73
|
: Promise.resolve([]),
|
|
31
|
-
|
|
32
|
-
? (0, infoClient_js_1.infoRequest)(apiUrl, timeParams.startTime === undefined
|
|
33
|
-
? { type: 'userFills', user: timeParams.user }
|
|
34
|
-
: { type: 'userFillsByTime', ...timeParams }, options)
|
|
35
|
-
: Promise.resolve([]),
|
|
74
|
+
liquidationHistory,
|
|
36
75
|
]);
|
|
76
|
+
if (ledgerUpdates.length >= 500 || fundingUpdates.length >= 500) {
|
|
77
|
+
return { items: [], saturated: true };
|
|
78
|
+
}
|
|
37
79
|
const ledgerItems = ledgerUpdates.flatMap((entry) => {
|
|
38
80
|
if (typeFilter !== undefined &&
|
|
39
81
|
(((0, index_js_1.isDepositDelta)(entry.delta) &&
|
|
@@ -56,18 +98,14 @@ const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry,
|
|
|
56
98
|
const item = (0, index_js_2.mapFundingActivity)(entry, constants_js_1.PROVIDER_KEY, resolveMarket);
|
|
57
99
|
return item === null ? [] : [item];
|
|
58
100
|
});
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (!typeFilter) {
|
|
65
|
-
return merged;
|
|
66
|
-
}
|
|
67
|
-
const typeSet = new Set(typeFilter);
|
|
68
|
-
return merged.filter((item) => typeSet.has(item.type));
|
|
101
|
+
const merged = [...ledgerItems, ...fundingItems, ...(liquidations ?? [])];
|
|
102
|
+
const items = typeFilter
|
|
103
|
+
? merged.filter((item) => typeFilter.includes(item.type))
|
|
104
|
+
: merged;
|
|
105
|
+
return { items, saturated: false };
|
|
69
106
|
};
|
|
70
107
|
const getActivity = async ({ client, apiUrl }, params, options) => {
|
|
108
|
+
const limit = (0, historyPagination_js_1.getHistoryLimit)(params.limit);
|
|
71
109
|
const registry = (0, perps_sdk_1.getMarketRegistry)(client, constants_js_1.PROVIDER_KEY);
|
|
72
110
|
if (needsMarkets(params.type)) {
|
|
73
111
|
await registry.sync();
|
|
@@ -78,32 +116,18 @@ const getActivity = async ({ client, apiUrl }, params, options) => {
|
|
|
78
116
|
await assetRegistry.sync();
|
|
79
117
|
}
|
|
80
118
|
const infoOpts = (0, infoClient_js_1.hlInfoOptions)(client, options);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
Number.parseInt(params.cursor, 10));
|
|
94
|
-
const hasMore = filtered.length > limit;
|
|
95
|
-
const items = filtered.slice(0, limit);
|
|
96
|
-
return {
|
|
97
|
-
provider: constants_js_1.PROVIDER_KEY,
|
|
98
|
-
items,
|
|
99
|
-
pagination: {
|
|
100
|
-
limit,
|
|
101
|
-
hasMore,
|
|
102
|
-
cursor: items.length > 0
|
|
103
|
-
? String(new Date(items[items.length - 1].timestamp).getTime())
|
|
104
|
-
: undefined,
|
|
105
|
-
},
|
|
106
|
-
};
|
|
119
|
+
const needLiquidationFills = !params.type || params.type.includes(perps_types_1.ActivityType.LIQUIDATION);
|
|
120
|
+
let liquidationHistory;
|
|
121
|
+
const page = await (0, historyPagination_js_1.historyPage)(params, limit, (startTime, endTime, snapshotEnd) => {
|
|
122
|
+
if (needLiquidationFills && liquidationHistory === undefined) {
|
|
123
|
+
liquidationHistory = fetchLiquidationHistory(apiUrl, params.address, params.startTime ?? 0, snapshotEnd, (coin) => registry.get(coin), infoOpts);
|
|
124
|
+
}
|
|
125
|
+
return fetchActivityData(apiUrl, params.type, { user: params.address, startTime, endTime }, assetRegistry, (coin) => registry.get(coin), liquidationHistory, infoOpts);
|
|
126
|
+
}, (item) => ({
|
|
127
|
+
time: new Date(item.timestamp).getTime(),
|
|
128
|
+
key: `${item.type}:${item.id}`,
|
|
129
|
+
}), options?.signal);
|
|
130
|
+
return { provider: constants_js_1.PROVIDER_KEY, ...page };
|
|
107
131
|
};
|
|
108
132
|
exports.getActivity = getActivity;
|
|
109
133
|
//# sourceMappingURL=getActivity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":";;;AAAA,+
|
|
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;
|
|
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;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAWvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAGD,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CA8CvB,CAAA"}
|
|
@@ -5,49 +5,41 @@ const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
|
5
5
|
const constants_js_1 = require("../constants.js");
|
|
6
6
|
const index_js_1 = require("../utils/index.js");
|
|
7
7
|
const infoClient_js_1 = require("../utils/infoClient.js");
|
|
8
|
-
const
|
|
9
|
-
const encodeCursor = (fill) => `${fill.time}:${fill.tid}`;
|
|
10
|
-
const decodeCursor = (cursor) => {
|
|
11
|
-
const [time, tid] = cursor.split(':').map(Number);
|
|
12
|
-
return { time, tid };
|
|
13
|
-
};
|
|
8
|
+
const historyPagination_js_1 = require("./historyPagination.js");
|
|
14
9
|
const getFills = async ({ client, apiUrl }, params, options) => {
|
|
10
|
+
const limit = (0, historyPagination_js_1.getHistoryLimit)(params.limit);
|
|
15
11
|
const registry = (0, perps_sdk_1.getMarketRegistry)(client, constants_js_1.PROVIDER_KEY);
|
|
16
12
|
await registry.sync();
|
|
17
13
|
const infoOpts = (0, infoClient_js_1.hlInfoOptions)(client, options);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
user: params.address
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const page = filtered.slice(0, limit);
|
|
34
|
-
const items = page.flatMap((f) => {
|
|
35
|
-
if ((0, index_js_1.assetIsOutcome)(f.coin)) {
|
|
36
|
-
return [];
|
|
14
|
+
let useRecent = params.cursor === undefined &&
|
|
15
|
+
params.startTime === undefined &&
|
|
16
|
+
params.endTime === undefined;
|
|
17
|
+
const page = await (0, historyPagination_js_1.historyPage)(params, limit, async (startTime, endTime) => {
|
|
18
|
+
const fills = await (0, infoClient_js_1.infoRequest)(apiUrl, useRecent
|
|
19
|
+
? { type: 'userFills', user: params.address }
|
|
20
|
+
: {
|
|
21
|
+
type: 'userFillsByTime',
|
|
22
|
+
user: params.address,
|
|
23
|
+
startTime,
|
|
24
|
+
endTime,
|
|
25
|
+
}, infoOpts);
|
|
26
|
+
useRecent = false;
|
|
27
|
+
if (fills.length >= 2000) {
|
|
28
|
+
return { items: [], saturated: true };
|
|
37
29
|
}
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
};
|
|
30
|
+
const items = fills.flatMap((fill) => {
|
|
31
|
+
if ((0, index_js_1.assetIsOutcome)(fill.coin)) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const market = registry.get(fill.coin);
|
|
35
|
+
return market === undefined ? [] : [(0, index_js_1.mapFill)(fill, market)];
|
|
36
|
+
});
|
|
37
|
+
return { items, saturated: false };
|
|
38
|
+
}, (fill) => ({
|
|
39
|
+
time: new Date(fill.createdAt).getTime(),
|
|
40
|
+
key: Number(fill.id),
|
|
41
|
+
}), options?.signal);
|
|
42
|
+
return { provider: constants_js_1.PROVIDER_KEY, ...page };
|
|
51
43
|
};
|
|
52
44
|
exports.getFills = getFills;
|
|
53
45
|
//# sourceMappingURL=getFills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":";;;AAAA,+CAA2E;AAG3E,
|
|
1
|
+
{"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":";;;AAAA,+CAA2E;AAG3E,kDAA8C;AAG9C,gDAA2D;AAC3D,0DAAmE;AACnE,iEAAqE;AAoB9D,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAsB,EACtB,OAA2B,EACH,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAA,sCAAe,EAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,2BAAY,CAAC,CAAA;IACxD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrB,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,IAAI,SAAS,GACX,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,OAAO,KAAK,SAAS,CAAA;IAC9B,MAAM,IAAI,GAAG,MAAM,IAAA,kCAAW,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAW,EAC7B,MAAM,EACN,SAAS;YACP,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7C,CAAC,CAAC;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,SAAS;gBACT,OAAO;aACR,EACL,QAAQ,CACT,CAAA;QACD,SAAS,GAAG,KAAK,CAAA;QACjB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QACvC,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAU,EAAE;YAC3C,IAAI,IAAA,yBAAc,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,CAAA;YACX,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACpC,CAAC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACT,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QACxC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;KACrB,CAAC,EACF,OAAO,EAAE,MAAM,CAChB,CAAA;IACD,OAAO,EAAE,QAAQ,EAAE,2BAAY,EAAE,GAAG,IAAI,EAAE,CAAA;AAC5C,CAAC,CAAA;AAlDY,QAAA,QAAQ,YAkDpB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type HistoryKey = string | number;
|
|
2
|
+
export declare const getHistoryLimit: (limit?: number) => number;
|
|
3
|
+
export declare function historyPage<T>(params: {
|
|
4
|
+
startTime?: number;
|
|
5
|
+
endTime?: number;
|
|
6
|
+
cursor?: string;
|
|
7
|
+
}, limit: number, fetchWindow: (startTime: number, endTime: number, snapshotEnd: number) => Promise<{
|
|
8
|
+
items: T[];
|
|
9
|
+
saturated: boolean;
|
|
10
|
+
}>, identify: (item: T) => {
|
|
11
|
+
time: number;
|
|
12
|
+
key: HistoryKey;
|
|
13
|
+
}, signal?: AbortSignal): Promise<{
|
|
14
|
+
items: T[];
|
|
15
|
+
pagination: {
|
|
16
|
+
limit: number;
|
|
17
|
+
hasMore: boolean;
|
|
18
|
+
cursor?: string;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=historyPagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyPagination.d.ts","sourceRoot":"","sources":["../../../src/services/historyPagination.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAiBjC,eAAO,MAAM,eAAe,GAAI,cAA6B,KAAG,MAQ/D,CAAA;AAmCD,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACjE,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,EAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,EACxD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IACT,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACjE,CAAC,CA2FD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getHistoryLimit = void 0;
|
|
4
|
+
exports.historyPage = historyPage;
|
|
5
|
+
const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
6
|
+
const perps_types_1 = require("@lifi/perps-types");
|
|
7
|
+
const constants_js_1 = require("../constants.js");
|
|
8
|
+
const compareKeys = (a, b) => typeof a === 'number' && typeof b === 'number'
|
|
9
|
+
? b - a
|
|
10
|
+
: a < b
|
|
11
|
+
? 1
|
|
12
|
+
: a > b
|
|
13
|
+
? -1
|
|
14
|
+
: 0;
|
|
15
|
+
const getHistoryLimit = (limit = constants_js_1.DEFAULT_HISTORY_LIMIT) => {
|
|
16
|
+
if (!Number.isSafeInteger(limit) || limit < 1) {
|
|
17
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, 'Hyperliquid history limit must be a positive safe integer');
|
|
18
|
+
}
|
|
19
|
+
return Math.min(limit, constants_js_1.MAX_HISTORY_LIMIT);
|
|
20
|
+
};
|
|
21
|
+
exports.getHistoryLimit = getHistoryLimit;
|
|
22
|
+
const decodeCursor = (cursor) => {
|
|
23
|
+
let value;
|
|
24
|
+
try {
|
|
25
|
+
value = JSON.parse(cursor);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, 'Invalid Hyperliquid history cursor');
|
|
29
|
+
}
|
|
30
|
+
if (!Array.isArray(value) ||
|
|
31
|
+
value.length !== 4 ||
|
|
32
|
+
!Number.isSafeInteger(value[0]) ||
|
|
33
|
+
(typeof value[1] !== 'string' && typeof value[1] !== 'number') ||
|
|
34
|
+
!Number.isSafeInteger(value[2]) ||
|
|
35
|
+
value[2] > value[0] ||
|
|
36
|
+
!Number.isSafeInteger(value[3]) ||
|
|
37
|
+
value[3] < value[0]) {
|
|
38
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, 'Invalid Hyperliquid history cursor');
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
time: value[0],
|
|
42
|
+
key: value[1],
|
|
43
|
+
startTime: value[2],
|
|
44
|
+
endTime: value[3],
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
async function historyPage(params, limit, fetchWindow, identify, signal) {
|
|
48
|
+
const boundary = params.cursor === undefined ? undefined : decodeCursor(params.cursor);
|
|
49
|
+
const lower = params.startTime ?? 0;
|
|
50
|
+
const snapshotEnd = boundary?.endTime ?? params.endTime ?? Date.now();
|
|
51
|
+
const upper = Math.min(snapshotEnd, boundary?.time ?? Infinity);
|
|
52
|
+
const windows = [];
|
|
53
|
+
if (boundary && boundary.startTime > lower) {
|
|
54
|
+
windows.push({ startTime: lower, endTime: boundary.startTime - 1 });
|
|
55
|
+
}
|
|
56
|
+
windows.push({
|
|
57
|
+
startTime: Math.max(lower, boundary?.startTime ?? lower),
|
|
58
|
+
endTime: upper,
|
|
59
|
+
});
|
|
60
|
+
const items = [];
|
|
61
|
+
let last;
|
|
62
|
+
while (windows.length > 0) {
|
|
63
|
+
signal?.throwIfAborted();
|
|
64
|
+
const window = windows.pop();
|
|
65
|
+
if (window.startTime > window.endTime) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const result = await fetchWindow(window.startTime, window.endTime, snapshotEnd);
|
|
69
|
+
signal?.throwIfAborted();
|
|
70
|
+
if (result.saturated) {
|
|
71
|
+
if (window.startTime === window.endTime) {
|
|
72
|
+
throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ThirdPartyError, 'Hyperliquid history saturates a single millisecond; its time-only API cannot paginate this timestamp safely');
|
|
73
|
+
}
|
|
74
|
+
const midpoint = window.startTime + Math.floor((window.endTime - window.startTime) / 2);
|
|
75
|
+
windows.push({ startTime: window.startTime, endTime: midpoint });
|
|
76
|
+
windows.push({ startTime: midpoint + 1, endTime: window.endTime });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const sorted = result.items.sort((a, b) => {
|
|
80
|
+
const left = identify(a);
|
|
81
|
+
const right = identify(b);
|
|
82
|
+
return right.time - left.time || compareKeys(left.key, right.key);
|
|
83
|
+
});
|
|
84
|
+
for (const item of sorted) {
|
|
85
|
+
const identity = identify(item);
|
|
86
|
+
if (identity.time < window.startTime || identity.time > window.endTime) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (boundary &&
|
|
90
|
+
(identity.time > boundary.time ||
|
|
91
|
+
(identity.time === boundary.time &&
|
|
92
|
+
compareKeys(identity.key, boundary.key) <= 0))) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (items.length === limit) {
|
|
96
|
+
return {
|
|
97
|
+
items,
|
|
98
|
+
pagination: {
|
|
99
|
+
limit,
|
|
100
|
+
hasMore: true,
|
|
101
|
+
cursor: last &&
|
|
102
|
+
JSON.stringify([
|
|
103
|
+
last.time,
|
|
104
|
+
last.key,
|
|
105
|
+
last.startTime,
|
|
106
|
+
last.endTime,
|
|
107
|
+
]),
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
items.push(item);
|
|
112
|
+
last = { ...identity, startTime: window.startTime, endTime: snapshotEnd };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
items,
|
|
117
|
+
pagination: {
|
|
118
|
+
limit,
|
|
119
|
+
hasMore: false,
|
|
120
|
+
cursor: last &&
|
|
121
|
+
JSON.stringify([last.time, last.key, last.startTime, last.endTime]),
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=historyPagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyPagination.js","sourceRoot":"","sources":["../../../src/services/historyPagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,12 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
9
9
|
private readonly client;
|
|
10
10
|
private readonly registry;
|
|
11
11
|
private readonly abstractionByUser;
|
|
12
|
+
private readonly summaryUsers;
|
|
13
|
+
private readonly abstractionReadsByUser;
|
|
12
14
|
private readonly spotRefs;
|
|
15
|
+
private spotWireEpoch;
|
|
16
|
+
private readonly latestSpotByUser;
|
|
17
|
+
private readonly revalueSpotBalances;
|
|
13
18
|
private readonly unifiedSummaryByUser;
|
|
14
19
|
private readonly latestPerpsByUser;
|
|
15
20
|
private readonly heldSummaryByUser;
|
|
@@ -72,6 +77,7 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
72
77
|
private fetchAbstractionMode;
|
|
73
78
|
private handleActiveAssetData;
|
|
74
79
|
private handleSpotState;
|
|
80
|
+
private emitSpotBalances;
|
|
75
81
|
private fetchAvailableAfterMaintenance;
|
|
76
82
|
}
|
|
77
83
|
//# sourceMappingURL=HyperliquidWsProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAGzB,cAAc,EACd,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAOV,YAAY,EACb,MAAM,mBAAmB,CAAA;AAkF1B,eAAO,MAAM,qBAAqB,QAAO,iBAKtC,CAAA;AAgBH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;
|
|
1
|
+
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
|