@lifi/perps-sdk-provider-hyperliquid 31.0.1 → 31.0.2
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 +20 -0
- 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/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js +14 -11
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/twapSliceFills.d.ts.map +1 -1
- package/dist/cjs/services/twapSliceFills.js +3 -3
- package/dist/cjs/services/twapSliceFills.js.map +1 -1
- package/dist/cjs/types/ws.d.ts +6 -1
- package/dist/cjs/types/ws.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.js +2 -1
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +4 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +59 -31
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/constants.d.ts +6 -0
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +6 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/services/getFills.d.ts +6 -3
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +19 -13
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/twapSliceFills.d.ts.map +1 -1
- package/dist/esm/services/twapSliceFills.js +3 -4
- package/dist/esm/services/twapSliceFills.js.map +1 -1
- package/dist/esm/types/ws.d.ts +7 -1
- package/dist/esm/types/ws.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.js +3 -1
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +10 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +68 -31
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/constants.d.ts +6 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts +6 -3
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/twapSliceFills.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +7 -1
- package/dist/types/types/ws.d.ts.map +1 -1
- package/dist/types/utils/mapFill.d.ts.map +1 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +10 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/constants.ts +6 -0
- package/src/services/getFills.ts +37 -25
- package/src/services/twapSliceFills.ts +3 -5
- package/src/types/ws.ts +8 -1
- package/src/utils/mapFill.ts +6 -1
- package/src/websocket/HyperliquidWsProvider.ts +88 -32
package/README.md
CHANGED
|
@@ -162,6 +162,26 @@ the original upper time bound, preventing subsequent pages from regrouping an
|
|
|
162
162
|
order using newly arriving fills. Funding/ledger-only activity and ordinary fill
|
|
163
163
|
pages use bounded newest-first windows instead of repeatedly downloading full history.
|
|
164
164
|
|
|
165
|
+
### TWAP slice fills
|
|
166
|
+
|
|
167
|
+
Hyperliquid reports the executions of a TWAP on separate feeds. The regular
|
|
168
|
+
feeds (`userFills` and `userFillsByTime`) omit them. `getFills` reads
|
|
169
|
+
`userTwapSliceFills` or `userTwapSliceFillsByTime` next to the regular feed
|
|
170
|
+
of each window, and merges both into one newest-first page. A slice fill
|
|
171
|
+
appears regardless of the lifecycle state of its parent TWAP. The cap of 2,000
|
|
172
|
+
rows applies to each feed: a window that saturates either feed narrows. A
|
|
173
|
+
failed request on either feed rejects the read.
|
|
174
|
+
|
|
175
|
+
A slice fill maps with the same fields as a regular fill. `Fill.orderId` is
|
|
176
|
+
the child order ID of the slice, not the TWAP ID. The venue gives a slice fill
|
|
177
|
+
the zero transaction hash, so the row carries no `explorerLink`.
|
|
178
|
+
|
|
179
|
+
One `fills` WebSocket subscription opens both the `userFills` and the
|
|
180
|
+
`userTwapSliceFills` venue channels. Listeners share the pair, the last
|
|
181
|
+
release closes both, and a reconnect replays both. The snapshot frame of each
|
|
182
|
+
channel emits an empty event. A live `userTwapSliceFills` frame can omit
|
|
183
|
+
`isSnapshot`.
|
|
184
|
+
|
|
165
185
|
## Order reads
|
|
166
186
|
|
|
167
187
|
`getOrders` returns `{ provider, orders, pagination }`. Each `Order` carries a
|
package/dist/cjs/constants.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const HYPERLIQUID_EXPLORER_RPC_URL = "https://rpc.hyperliquid.xyz
|
|
|
5
5
|
export declare const HYPERLIQUID_FEE_TIER_FALLBACK: FeeTier;
|
|
6
6
|
export declare const DEFAULT_HISTORY_LIMIT = 50;
|
|
7
7
|
export declare const MAX_HISTORY_LIMIT = 200;
|
|
8
|
+
export declare const FILL_ROWS_CAP = 2000;
|
|
8
9
|
export declare const MAIN_DEX_NAME = "";
|
|
9
10
|
export declare const MAIN_MARKET_ID = "hyperliquid";
|
|
10
11
|
export declare const SPOT_MARKET_ID = "spot";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAQhD,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAOzC,eAAO,MAAM,2BAA2B,gCAAgC,CAAA;AASxE,eAAO,MAAM,4BAA4B,yCACD,CAAA;AASxC,eAAO,MAAM,6BAA6B,EAAE,OAG3C,CAAA;AAGD,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC,eAAO,MAAM,iBAAiB,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAQhD,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAOzC,eAAO,MAAM,2BAA2B,gCAAgC,CAAA;AASxE,eAAO,MAAM,4BAA4B,yCACD,CAAA;AASxC,eAAO,MAAM,6BAA6B,EAAE,OAG3C,CAAA;AAGD,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAMpC,eAAO,MAAM,aAAa,OAAO,CAAA;AAQjC,eAAO,MAAM,aAAa,KAAK,CAAA;AAE/B,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAE3C,eAAO,MAAM,cAAc,SAAS,CAAA"}
|
package/dist/cjs/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SPOT_MARKET_ID = exports.MAIN_MARKET_ID = exports.MAIN_DEX_NAME = exports.MAX_HISTORY_LIMIT = exports.DEFAULT_HISTORY_LIMIT = exports.HYPERLIQUID_FEE_TIER_FALLBACK = exports.HYPERLIQUID_EXPLORER_RPC_URL = exports.DEFAULT_HYPERLIQUID_API_URL = exports.PROVIDER_KEY = void 0;
|
|
3
|
+
exports.SPOT_MARKET_ID = exports.MAIN_MARKET_ID = exports.MAIN_DEX_NAME = exports.FILL_ROWS_CAP = exports.MAX_HISTORY_LIMIT = exports.DEFAULT_HISTORY_LIMIT = exports.HYPERLIQUID_FEE_TIER_FALLBACK = exports.HYPERLIQUID_EXPLORER_RPC_URL = exports.DEFAULT_HYPERLIQUID_API_URL = exports.PROVIDER_KEY = void 0;
|
|
4
4
|
exports.PROVIDER_KEY = 'hyperliquid';
|
|
5
5
|
exports.DEFAULT_HYPERLIQUID_API_URL = 'https://api.hyperliquid.xyz';
|
|
6
6
|
exports.HYPERLIQUID_EXPLORER_RPC_URL = 'https://rpc.hyperliquid.xyz/explorer';
|
|
@@ -10,6 +10,7 @@ exports.HYPERLIQUID_FEE_TIER_FALLBACK = {
|
|
|
10
10
|
};
|
|
11
11
|
exports.DEFAULT_HISTORY_LIMIT = 50;
|
|
12
12
|
exports.MAX_HISTORY_LIMIT = 200;
|
|
13
|
+
exports.FILL_ROWS_CAP = 2000;
|
|
13
14
|
exports.MAIN_DEX_NAME = '';
|
|
14
15
|
exports.MAIN_MARKET_ID = 'hyperliquid';
|
|
15
16
|
exports.SPOT_MARKET_ID = 'spot';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAQa,QAAA,YAAY,GAAG,aAAa,CAAA;AAO5B,QAAA,2BAA2B,GAAG,6BAA6B,CAAA;AAS3D,QAAA,4BAA4B,GACvC,sCAAsC,CAAA;AAS3B,QAAA,6BAA6B,GAAY;IACpD,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;CACjB,CAAA;AAGY,QAAA,qBAAqB,GAAG,EAAE,CAAA;AAE1B,QAAA,iBAAiB,GAAG,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAQa,QAAA,YAAY,GAAG,aAAa,CAAA;AAO5B,QAAA,2BAA2B,GAAG,6BAA6B,CAAA;AAS3D,QAAA,4BAA4B,GACvC,sCAAsC,CAAA;AAS3B,QAAA,6BAA6B,GAAY;IACpD,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;CACjB,CAAA;AAGY,QAAA,qBAAqB,GAAG,EAAE,CAAA;AAE1B,QAAA,iBAAiB,GAAG,GAAG,CAAA;AAMvB,QAAA,aAAa,GAAG,IAAI,CAAA;AAQpB,QAAA,aAAa,GAAG,EAAE,CAAA;AAElB,QAAA,cAAc,GAAG,aAAa,CAAA;AAE9B,QAAA,cAAc,GAAG,MAAM,CAAA"}
|
|
@@ -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;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAYvD,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;
|
|
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;AAYvD,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;AAMD,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CAyDvB,CAAA"}
|
|
@@ -17,22 +17,25 @@ const getFills = async ({ client, apiUrl }, params, options) => {
|
|
|
17
17
|
params.startTime === undefined &&
|
|
18
18
|
params.endTime === undefined;
|
|
19
19
|
const page = await (0, historyPagination_js_1.historyPage)(params, limit, async (startTime, endTime) => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
type: '
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
const user = params.address;
|
|
21
|
+
const [fills, sliceFills] = await Promise.all([
|
|
22
|
+
(0, infoClient_js_1.infoRequest)(apiUrl, useRecent
|
|
23
|
+
? { type: 'userFills', user }
|
|
24
|
+
: { type: 'userFillsByTime', user, startTime, endTime }, infoOpts),
|
|
25
|
+
(0, infoClient_js_1.infoRequest)(apiUrl, useRecent
|
|
26
|
+
? { type: 'userTwapSliceFills', user }
|
|
27
|
+
: { type: 'userTwapSliceFillsByTime', user, startTime, endTime }, infoOpts),
|
|
28
|
+
]);
|
|
28
29
|
useRecent = false;
|
|
29
|
-
if (fills.length >=
|
|
30
|
+
if (fills.length >= constants_js_1.FILL_ROWS_CAP || sliceFills.length >= constants_js_1.FILL_ROWS_CAP) {
|
|
30
31
|
return { items: [], saturated: true };
|
|
31
32
|
}
|
|
32
|
-
const
|
|
33
|
-
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
const items = [...fills, ...sliceFills.map(({ fill }) => fill)].flatMap((fill) => {
|
|
35
|
+
if ((0, index_js_1.assetIsOutcome)(fill.coin) || seen.has(fill.tid)) {
|
|
34
36
|
return [];
|
|
35
37
|
}
|
|
38
|
+
seen.add(fill.tid);
|
|
36
39
|
const market = registry.get(fill.coin);
|
|
37
40
|
const mapped = market && (0, index_js_1.mapFill)(fill, market, params.address);
|
|
38
41
|
return mapped ? [mapped] : [];
|
|
@@ -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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twapSliceFills.d.ts","sourceRoot":"","sources":["../../../src/services/twapSliceFills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"twapSliceFills.d.ts","sourceRoot":"","sources":["../../../src/services/twapSliceFills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,KAAK,kBAAkB,EAAe,MAAM,wBAAwB,CAAA;AAS7E,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,MAAM,OAAO,EACb,SAAS,SAAS,kBAAkB,EAAE,EACtC,UAAU,kBAAkB,KAC3B,OAAO,CAAC,eAAe,EAAE,CA6C3B,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fetchTwapSliceFills = void 0;
|
|
4
|
+
const constants_js_1 = require("../constants.js");
|
|
4
5
|
const infoClient_js_1 = require("../utils/infoClient.js");
|
|
5
6
|
const historyPagination_js_1 = require("./historyPagination.js");
|
|
6
|
-
const TWAP_SLICE_FILLS_CAP = 2000;
|
|
7
7
|
const fetchTwapSliceFills = async (apiUrl, user, entries, options) => {
|
|
8
8
|
const starts = entries.flatMap((entry) => entry.twapId !== undefined && entry.status.status === 'activated'
|
|
9
9
|
? [entry.state.timestamp]
|
|
@@ -12,7 +12,7 @@ const fetchTwapSliceFills = async (apiUrl, user, entries, options) => {
|
|
|
12
12
|
return [];
|
|
13
13
|
}
|
|
14
14
|
const window = await (0, infoClient_js_1.infoRequest)(apiUrl, { type: 'userTwapSliceFills', user }, options);
|
|
15
|
-
if (window.length <
|
|
15
|
+
if (window.length < constants_js_1.FILL_ROWS_CAP) {
|
|
16
16
|
return window;
|
|
17
17
|
}
|
|
18
18
|
const oldest = Math.min(...window.map(({ fill }) => fill.time));
|
|
@@ -27,7 +27,7 @@ const fetchTwapSliceFills = async (apiUrl, user, entries, options) => {
|
|
|
27
27
|
startTime: rangeStart,
|
|
28
28
|
endTime: rangeEnd,
|
|
29
29
|
}, options);
|
|
30
|
-
return fills.length >=
|
|
30
|
+
return fills.length >= constants_js_1.FILL_ROWS_CAP
|
|
31
31
|
? { items: [], saturated: true }
|
|
32
32
|
: { items: fills, saturated: false };
|
|
33
33
|
}, ({ fill }) => ({ time: fill.time, key: fill.tid }), options?.signal);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twapSliceFills.js","sourceRoot":"","sources":["../../../src/services/twapSliceFills.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"twapSliceFills.js","sourceRoot":"","sources":["../../../src/services/twapSliceFills.ts"],"names":[],"mappings":";;;AACA,kDAA+C;AAE/C,0DAA6E;AAC7E,iEAAoD;AAQ7C,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,IAAa,EACb,OAAsC,EACtC,OAA4B,EACA,EAAE;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;QAC/D,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,EAAE,CACP,CAAA;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAW,EAC9B,MAAM,EACN,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EACpC,OAAO,CACR,CAAA;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,4BAAa,EAAE,CAAC;QAClC,OAAO,MAAM,CAAA;IACf,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IACrC,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;QACvB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,kCAAW,EAC7B,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAC9B,MAAM,CAAC,gBAAgB,EACvB,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAW,EAC7B,MAAM,EACN;YACE,IAAI,EAAE,0BAA0B;YAChC,IAAI;YACJ,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;SAClB,EACD,OAAO,CACR,CAAA;QACD,OAAO,KAAK,CAAC,MAAM,IAAI,4BAAa;YAClC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;YAChC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACxC,CAAC,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAClD,OAAO,EAAE,MAAM,CAChB,CAAA;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC,CAAA;AAlDY,QAAA,mBAAmB,uBAkD/B"}
|
package/dist/cjs/types/ws.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DecimalString } from '@lifi/perps-types';
|
|
2
2
|
import type { HlClearinghouseState, HlSpotBalance } from './account.js';
|
|
3
3
|
import type { HlCandle, HlL2Book } from './asset.js';
|
|
4
|
-
import type { HlUserFill } from './fill.js';
|
|
4
|
+
import type { HlTwapSliceFill, HlUserFill } from './fill.js';
|
|
5
5
|
type HlWsNumberString = string | number;
|
|
6
6
|
export interface HlWsOrder {
|
|
7
7
|
order: {
|
|
@@ -105,6 +105,11 @@ export type HlWsUserFillsData = {
|
|
|
105
105
|
user: string;
|
|
106
106
|
fills: HlUserFill[];
|
|
107
107
|
};
|
|
108
|
+
export type HlWsUserTwapSliceFillsData = {
|
|
109
|
+
isSnapshot?: boolean;
|
|
110
|
+
user: string;
|
|
111
|
+
twapSliceFills: HlTwapSliceFill[];
|
|
112
|
+
};
|
|
108
113
|
export type HlWsDexClearinghouseState = Pick<HlClearinghouseState, 'assetPositions'> & Partial<Pick<HlClearinghouseState, 'marginSummary'>>;
|
|
109
114
|
export type HlWsAllDexsClearinghouseStateData = {
|
|
110
115
|
user: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,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;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAIzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAmB,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAIzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAmB,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS7E,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAItE,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAsCnC,eAAO,MAAM,OAAO,GAClB,MAAM,UAAU,EAChB,QAAQ,aAAa,EACrB,SAAS,MAAM,KACd,IAAI,GAAG,SAmDT,CAAA"}
|
|
@@ -4,6 +4,7 @@ exports.mapFill = exports.classifyFillFromPosition = void 0;
|
|
|
4
4
|
const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
5
5
|
Object.defineProperty(exports, "classifyFillFromPosition", { enumerable: true, get: function () { return perps_sdk_1.classifyFillFromPosition; } });
|
|
6
6
|
const perps_types_1 = require("@lifi/perps-types");
|
|
7
|
+
const viem_1 = require("viem");
|
|
7
8
|
const constants_js_1 = require("../constants.js");
|
|
8
9
|
const rowTimestamp_js_1 = require("./rowTimestamp.js");
|
|
9
10
|
const mapLiquidationMethod = (method) => {
|
|
@@ -61,7 +62,7 @@ const mapFill = (fill, market, address) => {
|
|
|
61
62
|
? undefined
|
|
62
63
|
: { amount: fill.builderFee, asset: feeAsset },
|
|
63
64
|
startPosition: fill.startPosition,
|
|
64
|
-
explorerLink: (0, perps_sdk_1.explorerTxUrl)(perps_sdk_1.ExplorerChainId.HYPERLIQUID, fill.hash),
|
|
65
|
+
explorerLink: (0, perps_sdk_1.explorerTxUrl)(perps_sdk_1.ExplorerChainId.HYPERLIQUID, fill.hash === viem_1.zeroHash ? undefined : fill.hash),
|
|
65
66
|
classification: market.categoryId === constants_js_1.SPOT_MARKET_ID
|
|
66
67
|
? side === perps_types_1.OrderSide.BUY
|
|
67
68
|
? perps_types_1.FillClassification.SPOT_BUY
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":";;;AAAA,+CAKwB;
|
|
1
|
+
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,8 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
40
40
|
private claimOrderUpdatesKey;
|
|
41
41
|
private claimOrderbookKey;
|
|
42
42
|
private getMarketsContextSubEntries;
|
|
43
|
+
private getFillsSubEntries;
|
|
44
|
+
private openWireEntries;
|
|
43
45
|
private registerOrderbook;
|
|
44
46
|
private releaseOrderbook;
|
|
45
47
|
protected onClose(): void;
|
|
@@ -70,6 +72,8 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
70
72
|
private handleOrderUpdates;
|
|
71
73
|
private readOrderDetail;
|
|
72
74
|
private handleUserFills;
|
|
75
|
+
private handleUserTwapSliceFills;
|
|
76
|
+
private emitFills;
|
|
73
77
|
private handleAllDexsClearinghouseState;
|
|
74
78
|
private static summaryComputableFor;
|
|
75
79
|
private acquireSpotWire;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAazB,cAAc,EACd,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,36 +125,15 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
|
|
|
125
125
|
await registry.sync();
|
|
126
126
|
}
|
|
127
127
|
if (sub.channel === 'marketsContext') {
|
|
128
|
-
|
|
129
|
-
const entries = this.getMarketsContextSubEntries();
|
|
130
|
-
let acquired = 0;
|
|
131
|
-
const release = () => {
|
|
132
|
-
if (epoch !== this.spotWireEpoch) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
for (let index = 0; index < acquired; index++) {
|
|
136
|
-
const { subKey, payload } = entries[index];
|
|
137
|
-
this.unregisterSub(subKey);
|
|
138
|
-
this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
|
|
139
|
-
}
|
|
128
|
+
return this.openWireEntries(this.getMarketsContextSubEntries(), () => {
|
|
140
129
|
this.perpCtxBySubDex.clear();
|
|
141
130
|
this.spotCtxByMarketId = {};
|
|
142
131
|
this.fastCtxByMarketId = {};
|
|
143
132
|
this.marketsContextByMarketId = {};
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
await this.registerSub(subKey, payload);
|
|
149
|
-
acquired++;
|
|
150
|
-
}
|
|
151
|
-
await this.rws.ready();
|
|
152
|
-
return release;
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
release();
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (sub.channel === 'fills') {
|
|
136
|
+
return this.openWireEntries(this.getFillsSubEntries(sub.address));
|
|
158
137
|
}
|
|
159
138
|
if (sub.channel === 'spotBalances') {
|
|
160
139
|
return this.acquireSpotWire(sub.address);
|
|
@@ -254,6 +233,44 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
|
|
|
254
233
|
{ subKey: 'fastAssetCtxs', payload: { type: 'fastAssetCtxs' } },
|
|
255
234
|
];
|
|
256
235
|
}
|
|
236
|
+
getFillsSubEntries(address) {
|
|
237
|
+
const user = normalizeHlAddress(address);
|
|
238
|
+
return [
|
|
239
|
+
{ subKey: `userFills:${user}`, payload: { type: 'userFills', user } },
|
|
240
|
+
{
|
|
241
|
+
subKey: `userTwapSliceFills:${user}`,
|
|
242
|
+
payload: { type: 'userTwapSliceFills', user },
|
|
243
|
+
},
|
|
244
|
+
];
|
|
245
|
+
}
|
|
246
|
+
async openWireEntries(entries, onRelease) {
|
|
247
|
+
const epoch = this.spotWireEpoch;
|
|
248
|
+
let acquired = 0;
|
|
249
|
+
const release = () => {
|
|
250
|
+
if (epoch !== this.spotWireEpoch) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
for (let index = 0; index < acquired; index++) {
|
|
254
|
+
const { subKey, payload } = entries[index];
|
|
255
|
+
this.unregisterSub(subKey);
|
|
256
|
+
this.rws.send(JSON.stringify({ method: 'unsubscribe', subscription: payload }));
|
|
257
|
+
}
|
|
258
|
+
acquired = 0;
|
|
259
|
+
onRelease?.();
|
|
260
|
+
};
|
|
261
|
+
try {
|
|
262
|
+
for (const { subKey, payload } of entries) {
|
|
263
|
+
await this.registerSub(subKey, payload);
|
|
264
|
+
acquired++;
|
|
265
|
+
}
|
|
266
|
+
await this.rws.ready();
|
|
267
|
+
return release;
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
release();
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
257
274
|
registerOrderbook(marketId, orderbookKey) {
|
|
258
275
|
let activeKeys = this.orderbookKeysByMarketId.get(marketId);
|
|
259
276
|
if (activeKeys === undefined) {
|
|
@@ -316,7 +333,7 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
|
|
|
316
333
|
case 'orderUpdates':
|
|
317
334
|
return `orderUpdates:${sub.address.toLowerCase()}`;
|
|
318
335
|
case 'fills':
|
|
319
|
-
return `
|
|
336
|
+
return `fills:${sub.address.toLowerCase()}`;
|
|
320
337
|
case 'positions':
|
|
321
338
|
return `positions:${sub.address.toLowerCase()}`;
|
|
322
339
|
case 'accountSummary':
|
|
@@ -458,6 +475,9 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
|
|
|
458
475
|
case 'userFills':
|
|
459
476
|
this.handleUserFills(msg.data);
|
|
460
477
|
break;
|
|
478
|
+
case 'userTwapSliceFills':
|
|
479
|
+
this.handleUserTwapSliceFills(msg.data);
|
|
480
|
+
break;
|
|
461
481
|
case 'allDexsClearinghouseState':
|
|
462
482
|
this.handleAllDexsClearinghouseState(msg.data);
|
|
463
483
|
break;
|
|
@@ -826,17 +846,23 @@ class HyperliquidWsProvider extends perps_sdk_1.WsProviderBase {
|
|
|
826
846
|
};
|
|
827
847
|
}
|
|
828
848
|
handleUserFills(data) {
|
|
829
|
-
|
|
849
|
+
this.emitFills(data.user, data.isSnapshot, data.fills);
|
|
850
|
+
}
|
|
851
|
+
handleUserTwapSliceFills(data) {
|
|
852
|
+
this.emitFills(data.user, data.isSnapshot, data.twapSliceFills.map(({ fill }) => fill));
|
|
853
|
+
}
|
|
854
|
+
emitFills(user, isSnapshot, fills) {
|
|
855
|
+
const items = isSnapshot
|
|
830
856
|
? []
|
|
831
|
-
:
|
|
857
|
+
: fills.flatMap((f) => {
|
|
832
858
|
if ((0, index_js_2.assetIsOutcome)(f.coin)) {
|
|
833
859
|
return [];
|
|
834
860
|
}
|
|
835
861
|
const market = this.registry?.get(f.coin);
|
|
836
|
-
const mapped = market && (0, index_js_2.mapFill)(f, market,
|
|
862
|
+
const mapped = market && (0, index_js_2.mapFill)(f, market, user);
|
|
837
863
|
return mapped ? [mapped] : [];
|
|
838
864
|
});
|
|
839
|
-
this.emit(`
|
|
865
|
+
this.emit(`fills:${user.toLowerCase()}`, {
|
|
840
866
|
channel: 'fills',
|
|
841
867
|
data: items,
|
|
842
868
|
});
|
|
@@ -1302,6 +1328,8 @@ function isValidHlFrame(channel, data) {
|
|
|
1302
1328
|
return Array.isArray(data);
|
|
1303
1329
|
case 'userFills':
|
|
1304
1330
|
return typeof data.user === 'string' && Array.isArray(data.fills);
|
|
1331
|
+
case 'userTwapSliceFills':
|
|
1332
|
+
return typeof data.user === 'string' && Array.isArray(data.twapSliceFills);
|
|
1305
1333
|
case 'allDexsClearinghouseState':
|
|
1306
1334
|
return (typeof data.user === 'string' && Array.isArray(data.clearinghouseStates));
|
|
1307
1335
|
case 'spotState':
|