@nktkas/hyperliquid 0.13.0 → 0.13.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/LICENSE +20 -20
- package/README.md +42 -17
- package/esm/deps/jsr.io/@std/bytes/1.0.5/_types.d.ts +9 -0
- package/esm/deps/jsr.io/@std/bytes/1.0.5/_types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/bytes/1.0.5/_types.js +2 -0
- package/esm/deps/jsr.io/@std/bytes/{1.0.4 → 1.0.5}/concat.d.ts +3 -1
- package/esm/deps/jsr.io/@std/bytes/1.0.5/concat.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/bytes/{1.0.4 → 1.0.5}/concat.js +1 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.7/_types.d.ts +9 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.7/_types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.7/_types.js +2 -0
- package/esm/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/_validate_binary_like.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/_validate_binary_like.js +1 -1
- package/{script/deps/jsr.io/@std/encoding/1.0.6 → esm/deps/jsr.io/@std/encoding/1.0.7}/hex.d.ts +3 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.7/hex.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/hex.js +1 -1
- package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +9 -0
- package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.js +2 -0
- package/esm/deps/jsr.io/@std/msgpack/{1.0.2 → 1.0.3}/encode.d.ts +3 -1
- package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/msgpack/{1.0.2 → 1.0.3}/encode.js +2 -2
- package/esm/mod.d.ts +15 -14
- package/esm/mod.d.ts.map +1 -1
- package/esm/src/clients/event.d.ts +64 -21
- package/esm/src/clients/event.d.ts.map +1 -1
- package/esm/src/clients/event.js +76 -18
- package/esm/src/clients/public.d.ts +244 -52
- package/esm/src/clients/public.d.ts.map +1 -1
- package/esm/src/clients/public.js +243 -47
- package/esm/src/clients/wallet.d.ts +122 -53
- package/esm/src/clients/wallet.d.ts.map +1 -1
- package/esm/src/clients/wallet.js +201 -65
- package/esm/src/transports/http/http_transport.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.js +4 -1
- package/esm/src/transports/websocket/hyperliquid_event_target.d.ts +27 -21
- package/esm/src/transports/websocket/hyperliquid_event_target.d.ts.map +1 -1
- package/esm/src/transports/websocket/hyperliquid_event_target.js +37 -0
- package/esm/src/transports/websocket/websocket_request_dispatcher.d.ts.map +1 -1
- package/esm/src/transports/websocket/websocket_request_dispatcher.js +4 -4
- package/esm/src/transports/websocket/websocket_transport.d.ts +7 -10
- package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/esm/src/transports/websocket/websocket_transport.js +41 -35
- package/esm/src/types/common.d.ts +3 -0
- package/esm/src/types/common.d.ts.map +1 -0
- package/esm/src/types/common.js +1 -0
- package/esm/src/types/exchange/common.d.ts +36 -0
- package/esm/src/types/exchange/common.d.ts.map +1 -0
- package/esm/src/types/exchange/common.js +1 -0
- package/esm/src/types/exchange/requests.d.ts +502 -0
- package/esm/src/types/exchange/requests.d.ts.map +1 -0
- package/esm/src/types/exchange/requests.js +1 -0
- package/esm/src/types/exchange/responses.d.ts +141 -0
- package/esm/src/types/exchange/responses.d.ts.map +1 -0
- package/esm/src/types/exchange/responses.js +1 -0
- package/esm/src/types/explorer/common.d.ts +37 -0
- package/esm/src/types/explorer/common.d.ts.map +1 -0
- package/esm/src/types/explorer/common.js +1 -0
- package/esm/src/types/explorer/requests.d.ts +35 -0
- package/esm/src/types/explorer/requests.d.ts.map +1 -0
- package/esm/src/types/explorer/requests.js +1 -0
- package/esm/src/types/explorer/responses.d.ts +23 -0
- package/esm/src/types/explorer/responses.d.ts.map +1 -0
- package/esm/src/types/explorer/responses.js +1 -0
- package/esm/src/types/info/accounts.d.ts +489 -0
- package/esm/src/types/info/accounts.d.ts.map +1 -0
- package/esm/src/types/info/accounts.js +1 -0
- package/esm/src/types/info/assets.d.ts +275 -0
- package/esm/src/types/info/assets.d.ts.map +1 -0
- package/esm/src/types/info/assets.js +1 -0
- package/esm/src/types/info/delegations.d.ts +117 -0
- package/esm/src/types/info/delegations.d.ts.map +1 -0
- package/esm/src/types/info/delegations.js +1 -0
- package/esm/src/types/info/orders.d.ts +209 -0
- package/esm/src/types/info/orders.d.ts.map +1 -0
- package/esm/src/types/info/orders.js +1 -0
- package/esm/src/types/info/requests.d.ts +445 -0
- package/esm/src/types/info/requests.d.ts.map +1 -0
- package/esm/src/types/info/requests.js +1 -0
- package/esm/src/types/info/vaults.d.ts +90 -0
- package/esm/src/types/info/vaults.d.ts.map +1 -0
- package/esm/src/types/info/vaults.js +1 -0
- package/esm/src/types/subscriptions/common.d.ts +208 -0
- package/esm/src/types/subscriptions/common.d.ts.map +1 -0
- package/esm/src/types/subscriptions/common.js +1 -0
- package/esm/src/types/subscriptions/requests.d.ts +134 -0
- package/esm/src/types/subscriptions/requests.d.ts.map +1 -0
- package/esm/src/types/subscriptions/requests.js +1 -0
- package/esm/src/utils/key_sort.d.ts +3 -3
- package/esm/src/utils/key_sort.d.ts.map +1 -1
- package/esm/src/utils/signing.d.ts +1 -1
- package/esm/src/utils/signing.js +2 -2
- package/package.json +2 -2
- package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +13 -3
- package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +23 -13
- package/script/deps/jsr.io/@noble/hashes/1.7.1/src/_assert.js +55 -45
- package/script/deps/jsr.io/@noble/hashes/1.7.1/src/_u64.js +97 -87
- package/script/deps/jsr.io/@noble/hashes/1.7.1/src/crypto.js +14 -4
- package/script/deps/jsr.io/@noble/hashes/1.7.1/src/sha3.js +288 -278
- package/script/deps/jsr.io/@noble/hashes/1.7.1/src/utils.js +238 -228
- package/script/deps/jsr.io/@std/bytes/1.0.5/_types.d.ts +9 -0
- package/script/deps/jsr.io/@std/bytes/1.0.5/_types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/bytes/1.0.5/_types.js +13 -0
- package/script/deps/jsr.io/@std/bytes/{1.0.4 → 1.0.5}/concat.d.ts +3 -1
- package/script/deps/jsr.io/@std/bytes/1.0.5/concat.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/bytes/1.0.5/concat.js +45 -0
- package/script/deps/jsr.io/@std/encoding/1.0.7/_types.d.ts +9 -0
- package/script/deps/jsr.io/@std/encoding/1.0.7/_types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/encoding/1.0.7/_types.js +13 -0
- package/script/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/_validate_binary_like.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/encoding/1.0.7/_validate_binary_like.js +39 -0
- package/{esm/deps/jsr.io/@std/encoding/1.0.6 → script/deps/jsr.io/@std/encoding/1.0.7}/hex.d.ts +3 -1
- package/script/deps/jsr.io/@std/encoding/1.0.7/hex.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/encoding/1.0.7/hex.js +123 -0
- package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +9 -0
- package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.js +13 -0
- package/script/deps/jsr.io/@std/msgpack/{1.0.2 → 1.0.3}/encode.d.ts +3 -1
- package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.js +250 -0
- package/script/mod.d.ts +15 -14
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +23 -13
- package/script/src/clients/event.d.ts +64 -21
- package/script/src/clients/event.d.ts.map +1 -1
- package/script/src/clients/event.js +551 -483
- package/script/src/clients/public.d.ts +244 -52
- package/script/src/clients/public.d.ts.map +1 -1
- package/script/src/clients/public.js +914 -708
- package/script/src/clients/wallet.d.ts +122 -53
- package/script/src/clients/wallet.d.ts.map +1 -1
- package/script/src/clients/wallet.js +1121 -975
- package/script/src/transports/base.js +25 -15
- package/script/src/transports/http/http_transport.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.js +174 -161
- package/script/src/transports/websocket/hyperliquid_event_target.d.ts +27 -21
- package/script/src/transports/websocket/hyperliquid_event_target.d.ts.map +1 -1
- package/script/src/transports/websocket/hyperliquid_event_target.js +80 -33
- package/script/src/transports/websocket/reconnecting_websocket.js +364 -354
- package/script/src/transports/websocket/websocket_request_dispatcher.d.ts.map +1 -1
- package/script/src/transports/websocket/websocket_request_dispatcher.js +196 -186
- package/script/src/transports/websocket/websocket_transport.d.ts +7 -10
- package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/script/src/transports/websocket/websocket_transport.js +236 -220
- package/script/src/types/common.d.ts +3 -0
- package/script/src/types/common.d.ts.map +1 -0
- package/script/src/types/common.js +12 -0
- package/script/src/types/exchange/common.d.ts +36 -0
- package/script/src/types/exchange/common.d.ts.map +1 -0
- package/script/src/types/exchange/common.js +12 -0
- package/script/src/types/exchange/requests.d.ts +502 -0
- package/script/src/types/exchange/requests.d.ts.map +1 -0
- package/script/src/types/exchange/requests.js +12 -0
- package/script/src/types/exchange/responses.d.ts +141 -0
- package/script/src/types/exchange/responses.d.ts.map +1 -0
- package/script/src/types/exchange/responses.js +12 -0
- package/script/src/types/explorer/common.d.ts +37 -0
- package/script/src/types/explorer/common.d.ts.map +1 -0
- package/script/src/types/explorer/common.js +12 -0
- package/script/src/types/explorer/requests.d.ts +35 -0
- package/script/src/types/explorer/requests.d.ts.map +1 -0
- package/script/src/types/explorer/requests.js +12 -0
- package/script/src/types/explorer/responses.d.ts +23 -0
- package/script/src/types/explorer/responses.d.ts.map +1 -0
- package/script/src/types/explorer/responses.js +12 -0
- package/script/src/types/info/accounts.d.ts +489 -0
- package/script/src/types/info/accounts.d.ts.map +1 -0
- package/script/src/types/info/accounts.js +12 -0
- package/script/src/types/info/assets.d.ts +275 -0
- package/script/src/types/info/assets.d.ts.map +1 -0
- package/script/src/types/info/assets.js +12 -0
- package/script/src/types/info/delegations.d.ts +117 -0
- package/script/src/types/info/delegations.d.ts.map +1 -0
- package/script/src/types/info/delegations.js +12 -0
- package/script/src/types/info/orders.d.ts +209 -0
- package/script/src/types/info/orders.d.ts.map +1 -0
- package/script/src/types/info/orders.js +12 -0
- package/script/src/types/info/requests.d.ts +445 -0
- package/script/src/types/info/requests.d.ts.map +1 -0
- package/script/src/types/info/requests.js +12 -0
- package/script/src/types/info/vaults.d.ts +90 -0
- package/script/src/types/info/vaults.d.ts.map +1 -0
- package/script/src/types/info/vaults.js +12 -0
- package/script/src/types/subscriptions/common.d.ts +208 -0
- package/script/src/types/subscriptions/common.d.ts.map +1 -0
- package/script/src/types/subscriptions/common.js +12 -0
- package/script/src/types/subscriptions/requests.d.ts +134 -0
- package/script/src/types/subscriptions/requests.d.ts.map +1 -0
- package/script/src/types/subscriptions/requests.js +12 -0
- package/script/src/utils/key_sort.d.ts +3 -3
- package/script/src/utils/key_sort.d.ts.map +1 -1
- package/script/src/utils/key_sort.js +133 -123
- package/script/src/utils/signing.d.ts +1 -1
- package/script/src/utils/signing.js +172 -162
- package/esm/deps/jsr.io/@std/bytes/1.0.4/concat.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/encoding/1.0.6/hex.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/msgpack/1.0.2/encode.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/bytes/1.0.4/concat.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/bytes/1.0.4/concat.js +0 -35
- package/script/deps/jsr.io/@std/encoding/1.0.6/_validate_binary_like.js +0 -29
- package/script/deps/jsr.io/@std/encoding/1.0.6/hex.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/encoding/1.0.6/hex.js +0 -113
- package/script/deps/jsr.io/@std/msgpack/1.0.2/encode.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/msgpack/1.0.2/encode.js +0 -240
- /package/esm/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/_validate_binary_like.d.ts +0 -0
- /package/script/deps/jsr.io/@std/encoding/{1.0.6 → 1.0.7}/_validate_binary_like.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket_request_dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_request_dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IACrD;;;OAGG;gBACS,OAAO,EAAE,MAAM;CAI9B;AAED;;;GAGG;AACH,qBAAa,0BAA0B;IAevB,SAAS,CAAC,MAAM,EAAE,SAAS;IAdvC,2BAA2B;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAE7B,oDAAoD;IACpD,SAAS,CAAC,OAAO,EAAE,GAAG,CAClB,MAAM,GAAG,MAAM,EACf;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAC3E,CAAa;IAEd;;;;OAIG;gBACmB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"websocket_request_dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_request_dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IACrD;;;OAGG;gBACS,OAAO,EAAE,MAAM;CAI9B;AAED;;;GAGG;AACH,qBAAa,0BAA0B;IAevB,SAAS,CAAC,MAAM,EAAE,SAAS;IAdvC,2BAA2B;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAE7B,oDAAoD;IACpD,SAAS,CAAC,OAAO,EAAE,GAAG,CAClB,MAAM,GAAG,MAAM,EACf;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAC3E,CAAa;IAEd;;;;OAIG;gBACmB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB;IA2DzE,+BAA+B;IAC/B,SAAS,KAAK,MAAM,IAAI,MAAM,CAE7B;IAED;;;;;;OAMG;IACH,OAAO,CACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,EAC5C,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,OAAO,CAAC;IAkCnB;;;;OAIG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK5D;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAK5D;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAK7C"}
|
|
@@ -1,206 +1,216 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "../base.js"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.WebSocketRequestDispatcher = exports.WebSocketRequestError = void 0;
|
|
13
|
+
const base_js_1 = require("../base.js");
|
|
11
14
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
15
|
+
* Error thrown when a WebSocket request fails:
|
|
16
|
+
* - When the WebSocket connection is closed
|
|
17
|
+
* - When the server responds with an error message
|
|
14
18
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
class WebSocketRequestError extends base_js_1.TransportError {
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new WebSocket request error.
|
|
22
|
+
* @param message - The error message.
|
|
23
|
+
*/
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = "WebSocketRequestError";
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
|
-
|
|
20
|
-
exports.WebSocketRequestError = WebSocketRequestError;
|
|
21
|
-
/**
|
|
22
|
-
* Manages WebSocket requests to the Hyperliquid API.
|
|
23
|
-
* Handles request creation, sending, and mapping responses to their corresponding requests.
|
|
24
|
-
*/
|
|
25
|
-
class WebSocketRequestDispatcher {
|
|
29
|
+
exports.WebSocketRequestError = WebSocketRequestError;
|
|
26
30
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @param hlEvents - Used to recognize Hyperliquid responses and match them with sent requests
|
|
31
|
+
* Manages WebSocket requests to the Hyperliquid API.
|
|
32
|
+
* Handles request creation, sending, and mapping responses to their corresponding requests.
|
|
30
33
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
parsedRequest.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
34
|
+
class WebSocketRequestDispatcher {
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new WebSocket request dispatcher.
|
|
37
|
+
* @param socket - WebSocket connection instance for sending requests to the Hyperliquid WebSocket API
|
|
38
|
+
* @param hlEvents - Used to recognize Hyperliquid responses and match them with sent requests
|
|
39
|
+
*/
|
|
40
|
+
constructor(socket, hlEvents) {
|
|
41
|
+
Object.defineProperty(this, "socket", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: socket
|
|
46
|
+
});
|
|
47
|
+
/** Last used request ID */
|
|
48
|
+
Object.defineProperty(this, "lastId", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true,
|
|
52
|
+
value: 0
|
|
53
|
+
});
|
|
54
|
+
/** Map of pending requests waiting for responses */
|
|
55
|
+
Object.defineProperty(this, "pending", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true,
|
|
59
|
+
value: new Map()
|
|
60
|
+
});
|
|
61
|
+
// Monitor responses and match the pending request
|
|
62
|
+
hlEvents.addEventListener("subscriptionResponse", (event) => {
|
|
63
|
+
// Use a stringified request as an id
|
|
64
|
+
const id = WebSocketRequestDispatcher.requestToId(event.detail.subscription);
|
|
65
|
+
this.resolve(id, event.detail);
|
|
66
|
+
});
|
|
67
|
+
hlEvents.addEventListener("post", (event) => {
|
|
68
|
+
const data = event.detail.response.type === "info"
|
|
69
|
+
? event.detail.response.payload.data
|
|
70
|
+
: event.detail.response.payload;
|
|
71
|
+
this.resolve(event.detail.id, data);
|
|
72
|
+
});
|
|
73
|
+
hlEvents.addEventListener("error", (event) => {
|
|
74
|
+
try {
|
|
75
|
+
// Error event doesn't have an id, use original request to match
|
|
76
|
+
const request = event.detail.match(/{.*}/)?.[0];
|
|
77
|
+
if (request) {
|
|
78
|
+
const parsedRequest = JSON.parse(request);
|
|
79
|
+
if ("id" in parsedRequest && typeof parsedRequest.id === "number") {
|
|
80
|
+
// If a post request was sent, it is possible to get the id from the request
|
|
81
|
+
this.reject(parsedRequest.id, new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
|
|
82
|
+
}
|
|
83
|
+
else if ("subscription" in parsedRequest &&
|
|
84
|
+
typeof parsedRequest.subscription === "object" &&
|
|
85
|
+
parsedRequest.subscription !== null) {
|
|
86
|
+
// If a subscription/unsubscribe request was sent, use the request as an id
|
|
87
|
+
const id = WebSocketRequestDispatcher.requestToId(parsedRequest.subscription);
|
|
88
|
+
this.reject(id, new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// If the request is not recognized, use the parsed request as an id
|
|
92
|
+
const id = WebSocketRequestDispatcher.requestToId(parsedRequest);
|
|
93
|
+
this.reject(id, new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
|
|
94
|
+
}
|
|
85
95
|
}
|
|
86
96
|
}
|
|
97
|
+
catch {
|
|
98
|
+
// Ignore JSON parsing errors
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
// Throws all pending requests if the connection is dropped
|
|
102
|
+
socket.addEventListener("close", () => {
|
|
103
|
+
this.pending.forEach(({ reject }) => {
|
|
104
|
+
reject(new WebSocketRequestError("Cannot complete WebSocket request: connection is closed"));
|
|
105
|
+
});
|
|
106
|
+
this.pending.clear();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** Gets the next request ID */
|
|
110
|
+
get nextId() {
|
|
111
|
+
return ++this.lastId;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Sends a request to the Hyperliquid API.
|
|
115
|
+
* @param method - The method of websocket request.
|
|
116
|
+
* @param payload - The payload to send with the request.
|
|
117
|
+
* @param signal - An optional abort signal.
|
|
118
|
+
* @returns A promise that resolves with the parsed JSON response body.
|
|
119
|
+
*/
|
|
120
|
+
request(method, payload, signal) {
|
|
121
|
+
signal?.throwIfAborted();
|
|
122
|
+
// Create a request object
|
|
123
|
+
let id;
|
|
124
|
+
let request;
|
|
125
|
+
if (method === "post") {
|
|
126
|
+
id = this.nextId;
|
|
127
|
+
request = { method, id, request: payload };
|
|
87
128
|
}
|
|
88
|
-
|
|
89
|
-
|
|
129
|
+
else {
|
|
130
|
+
id = WebSocketRequestDispatcher.requestToId(payload);
|
|
131
|
+
request = { method, subscription: payload };
|
|
90
132
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
133
|
+
// Send the request
|
|
134
|
+
this.socket.send(JSON.stringify(request));
|
|
135
|
+
// Wait for a response
|
|
136
|
+
let onAbort;
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
// Add an abort listener
|
|
139
|
+
onAbort = () => reject(signal?.reason);
|
|
140
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
141
|
+
// Add the promise to the pending list
|
|
142
|
+
this.pending.set(id, { resolve, reject });
|
|
143
|
+
}).finally(() => {
|
|
144
|
+
// Remove the abort listener when the promise is settled
|
|
145
|
+
signal?.removeEventListener("abort", onAbort);
|
|
96
146
|
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Resolves a pending request.
|
|
150
|
+
* @param id - A request ID or a stringified request.
|
|
151
|
+
* @param value - A resolution value.
|
|
152
|
+
*/
|
|
153
|
+
resolve(id, value) {
|
|
154
|
+
this.pending.get(id)?.resolve(value);
|
|
155
|
+
this.pending.delete(id);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Rejects a pending request.
|
|
159
|
+
* @param id - A request ID or a stringified request.
|
|
160
|
+
* @param reason - A rejection reason.
|
|
161
|
+
*/
|
|
162
|
+
reject(id, reason) {
|
|
163
|
+
this.pending.get(id)?.reject(reason);
|
|
164
|
+
this.pending.delete(id);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Normalizes a request object to an ID.
|
|
168
|
+
* @param value - A request object.
|
|
169
|
+
* @returns A stringified request.
|
|
170
|
+
*/
|
|
171
|
+
static requestToId(value) {
|
|
172
|
+
const lowerHex = deepLowerHex(value);
|
|
173
|
+
const sorted = deepSortKeys(lowerHex);
|
|
174
|
+
return JSON.stringify(sorted);
|
|
175
|
+
}
|
|
103
176
|
}
|
|
177
|
+
exports.WebSocketRequestDispatcher = WebSocketRequestDispatcher;
|
|
104
178
|
/**
|
|
105
|
-
*
|
|
106
|
-
* @param
|
|
107
|
-
* @
|
|
108
|
-
* @param signal - An optional abort signal.
|
|
109
|
-
* @returns A promise that resolves with the parsed JSON response body.
|
|
179
|
+
* Convert all hexadecimal strings to lowercase in an object/array.
|
|
180
|
+
* @param obj - The object/array to convert hexadecimal strings to lowercase.
|
|
181
|
+
* @returns A new object/array with hexadecimal strings converted to lowercase.
|
|
110
182
|
*/
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
183
|
+
function deepLowerHex(obj) {
|
|
184
|
+
if (Array.isArray(obj)) {
|
|
185
|
+
return obj.map(deepLowerHex);
|
|
186
|
+
}
|
|
187
|
+
else if (obj && typeof obj === "object") {
|
|
188
|
+
return Object.entries(obj).reduce((acc, [key, val]) => ({
|
|
189
|
+
...acc,
|
|
190
|
+
[key]: deepLowerHex(val),
|
|
191
|
+
}), {});
|
|
192
|
+
}
|
|
193
|
+
else if (typeof obj === "string" && /^0x[0-9A-Fa-f]+$/.test(obj)) {
|
|
194
|
+
return obj.toLowerCase();
|
|
119
195
|
}
|
|
120
196
|
else {
|
|
121
|
-
|
|
122
|
-
request = { method, subscription: payload };
|
|
197
|
+
return obj;
|
|
123
198
|
}
|
|
124
|
-
// Send the request
|
|
125
|
-
this.socket.send(JSON.stringify(request));
|
|
126
|
-
// Wait for a response
|
|
127
|
-
let onAbort;
|
|
128
|
-
return new Promise((resolve, reject) => {
|
|
129
|
-
// Add an abort listener
|
|
130
|
-
onAbort = () => reject(signal?.reason);
|
|
131
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
132
|
-
// Add the promise to the pending list
|
|
133
|
-
this.pending.set(id, { resolve, reject });
|
|
134
|
-
}).finally(() => {
|
|
135
|
-
// Remove the abort listener when the promise is settled
|
|
136
|
-
signal?.removeEventListener("abort", onAbort);
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Resolves a pending request.
|
|
141
|
-
* @param id - A request ID or a stringified request.
|
|
142
|
-
* @param value - A resolution value.
|
|
143
|
-
*/
|
|
144
|
-
resolve(id, value) {
|
|
145
|
-
this.pending.get(id)?.resolve(value);
|
|
146
|
-
this.pending.delete(id);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Rejects a pending request.
|
|
150
|
-
* @param id - A request ID or a stringified request.
|
|
151
|
-
* @param reason - A rejection reason.
|
|
152
|
-
*/
|
|
153
|
-
reject(id, reason) {
|
|
154
|
-
this.pending.get(id)?.reject(reason);
|
|
155
|
-
this.pending.delete(id);
|
|
156
199
|
}
|
|
157
200
|
/**
|
|
158
|
-
*
|
|
159
|
-
* @param
|
|
160
|
-
* @returns A
|
|
201
|
+
* Deeply sort the keys of an object.
|
|
202
|
+
* @param obj - An object to sort the keys of.
|
|
203
|
+
* @returns A new object with sorted keys.
|
|
161
204
|
*/
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
* @returns A new object/array with hexadecimal strings converted to lowercase.
|
|
173
|
-
*/
|
|
174
|
-
function deepLowerHex(obj) {
|
|
175
|
-
if (Array.isArray(obj)) {
|
|
176
|
-
return obj.map(deepLowerHex);
|
|
177
|
-
}
|
|
178
|
-
else if (obj && typeof obj === "object") {
|
|
179
|
-
return Object.entries(obj).reduce((acc, [key, val]) => ({
|
|
180
|
-
...acc,
|
|
181
|
-
[key]: deepLowerHex(val),
|
|
182
|
-
}), {});
|
|
183
|
-
}
|
|
184
|
-
else if (typeof obj === "string" && /^0x[0-9A-Fa-f]+$/.test(obj)) {
|
|
185
|
-
return obj.toLowerCase();
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
return obj;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Deeply sort the keys of an object.
|
|
193
|
-
* @param obj - An object to sort the keys of.
|
|
194
|
-
* @returns A new object with sorted keys.
|
|
195
|
-
*/
|
|
196
|
-
function deepSortKeys(obj) {
|
|
197
|
-
if (obj === null || typeof obj !== "object") {
|
|
198
|
-
return obj;
|
|
199
|
-
}
|
|
200
|
-
if (Array.isArray(obj)) {
|
|
201
|
-
return obj.map(deepSortKeys);
|
|
205
|
+
function deepSortKeys(obj) {
|
|
206
|
+
if (obj === null || typeof obj !== "object") {
|
|
207
|
+
return obj;
|
|
208
|
+
}
|
|
209
|
+
if (Array.isArray(obj)) {
|
|
210
|
+
return obj.map(deepSortKeys);
|
|
211
|
+
}
|
|
212
|
+
return Object.fromEntries(Object.entries(obj)
|
|
213
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
214
|
+
.map(([k, v]) => [k, deepSortKeys(v)]));
|
|
202
215
|
}
|
|
203
|
-
|
|
204
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
205
|
-
.map(([k, v]) => [k, deepSortKeys(v)]));
|
|
206
|
-
}
|
|
216
|
+
});
|
|
@@ -48,12 +48,15 @@ export declare class WebSocketTransport implements IRequestTransport, ISubscript
|
|
|
48
48
|
protected _hlEvents: HyperliquidEventTarget;
|
|
49
49
|
/**
|
|
50
50
|
* Map of active subscriptions.
|
|
51
|
-
* - Key: Unique subscription identifier
|
|
52
|
-
* - Value: Subscription info containing
|
|
51
|
+
* - Key: Unique subscription identifier based on payload
|
|
52
|
+
* - Value: Subscription info containing the subscription request promise
|
|
53
|
+
* and a map of listeners to their metadata (channel + unsubscribe function).
|
|
53
54
|
*/
|
|
54
55
|
protected _subscriptions: Map<string, {
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
listeners: Map<(data: CustomEvent) => void, {
|
|
57
|
+
channel: string;
|
|
58
|
+
unsubscribe: (signal?: AbortSignal) => Promise<void>;
|
|
59
|
+
}>;
|
|
57
60
|
requestPromise: Promise<unknown>;
|
|
58
61
|
}>;
|
|
59
62
|
/**
|
|
@@ -107,11 +110,5 @@ export declare class WebSocketTransport implements IRequestTransport, ISubscript
|
|
|
107
110
|
* @returns A promise that resolves when the connection is fully closed.
|
|
108
111
|
*/
|
|
109
112
|
close(signal?: AbortSignal): Promise<void>;
|
|
110
|
-
/**
|
|
111
|
-
* Combines timeout and user-provided signal.
|
|
112
|
-
* @param signal - A user-provided signal.
|
|
113
|
-
* @returns An AbortSignal that triggers when either the timeout or user-provided signal aborts.
|
|
114
|
-
*/
|
|
115
|
-
protected combineSignals(signal?: AbortSignal): AbortSignal;
|
|
116
113
|
}
|
|
117
114
|
//# sourceMappingURL=websocket_transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE;QACR;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC;CAC5C;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB,EAAE,sBAAsB;IAChF,qDAAqD;IACrD,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9C,iDAAiD;IACjD,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAEnD,6CAA6C;IAC7C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAE5C
|
|
1
|
+
{"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE;QACR;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC;CAC5C;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB,EAAE,sBAAsB;IAChF,qDAAqD;IACrD,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9C,iDAAiD;IACjD,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAEnD,6CAA6C;IAC7C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAE5C;;;;;OAKG;IACH,SAAS,CAAC,cAAc,EAAE,GAAG,CACzB,MAAM,EACN;QACI,SAAS,EAAE,GAAG,CACV,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAC3B;YACI,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;SACxD,CACJ,CAAC;QACF,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,CACJ,CAAa;IAEd;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE;QAChB;;;WAGG;QACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC,CAAC;IAEF,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;OAGG;gBACS,OAAO,CAAC,EAAE,yBAAyB;IAwC/C;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAevG;;;;;;;OAOG;IACG,SAAS,CACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EACrC,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,CAAC;IAwExB;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB7C"}
|