@nktkas/hyperliquid 0.22.2 → 0.23.1

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.
Files changed (256) hide show
  1. package/README.md +79 -67
  2. package/esm/mod.d.ts +1 -1
  3. package/esm/mod.d.ts.map +1 -1
  4. package/esm/src/base.d.ts +4 -1
  5. package/esm/src/base.d.ts.map +1 -1
  6. package/esm/src/base.js +2 -2
  7. package/esm/src/clients/exchange.d.ts +289 -207
  8. package/esm/src/clients/exchange.d.ts.map +1 -1
  9. package/esm/src/clients/exchange.js +605 -410
  10. package/esm/src/clients/info.d.ts +264 -48
  11. package/esm/src/clients/info.d.ts.map +1 -1
  12. package/esm/src/clients/info.js +273 -31
  13. package/esm/src/clients/multiSign.d.ts +285 -204
  14. package/esm/src/clients/multiSign.d.ts.map +1 -1
  15. package/esm/src/clients/multiSign.js +521 -493
  16. package/esm/src/clients/subscription.d.ts +38 -3
  17. package/esm/src/clients/subscription.d.ts.map +1 -1
  18. package/esm/src/clients/subscription.js +36 -3
  19. package/esm/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  20. package/esm/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  21. package/esm/src/signing/_signTypedData/mod.d.ts +35 -0
  22. package/esm/src/signing/_signTypedData/mod.d.ts.map +1 -0
  23. package/esm/src/signing/_signTypedData/mod.js +59 -0
  24. package/esm/src/signing/_signTypedData/private_key.d.ts +26 -0
  25. package/esm/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  26. package/esm/src/signing/_signTypedData/private_key.js +144 -0
  27. package/esm/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  28. package/esm/src/signing/_signTypedData/viem.d.ts.map +1 -0
  29. package/{script/src/signing/_window.d.ts → esm/src/signing/_signTypedData/window.d.ts} +18 -12
  30. package/esm/src/signing/_signTypedData/window.d.ts.map +1 -0
  31. package/esm/src/signing/{_window.js → _signTypedData/window.js} +3 -2
  32. package/esm/src/signing/_sorter.d.ts +56 -82
  33. package/esm/src/signing/_sorter.d.ts.map +1 -1
  34. package/esm/src/signing/_sorter.js +36 -49
  35. package/esm/src/signing/mod.d.ts +151 -130
  36. package/esm/src/signing/mod.d.ts.map +1 -1
  37. package/esm/src/signing/mod.js +182 -228
  38. package/esm/src/transports/base.d.ts +1 -1
  39. package/esm/src/transports/base.d.ts.map +1 -1
  40. package/esm/src/transports/base.js +2 -2
  41. package/esm/src/transports/http/http_transport.d.ts +9 -15
  42. package/esm/src/transports/http/http_transport.d.ts.map +1 -1
  43. package/esm/src/transports/http/http_transport.js +64 -59
  44. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  45. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  46. package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -1
  47. package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  48. package/esm/src/transports/websocket/_reconnecting_websocket.js +17 -4
  49. package/esm/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  50. package/esm/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  51. package/esm/src/transports/websocket/_websocket_async_request.js +14 -20
  52. package/esm/src/transports/websocket/websocket_transport.d.ts +8 -4
  53. package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  54. package/esm/src/transports/websocket/websocket_transport.js +83 -54
  55. package/esm/src/types/exchange/requests.d.ts +27 -51
  56. package/esm/src/types/exchange/requests.d.ts.map +1 -1
  57. package/esm/src/types/explorer/requests.d.ts +5 -8
  58. package/esm/src/types/explorer/requests.d.ts.map +1 -1
  59. package/esm/src/types/info/accounts.d.ts +5 -5
  60. package/esm/src/types/info/accounts.d.ts.map +1 -1
  61. package/esm/src/types/info/markets.d.ts +6 -0
  62. package/esm/src/types/info/markets.d.ts.map +1 -1
  63. package/esm/src/types/info/orders.d.ts +1 -1
  64. package/esm/src/types/info/orders.d.ts.map +1 -1
  65. package/esm/src/types/info/requests.d.ts +129 -124
  66. package/esm/src/types/info/requests.d.ts.map +1 -1
  67. package/{script/src/types/info/delegations.d.ts → esm/src/types/info/validators.d.ts} +2 -2
  68. package/esm/src/types/info/validators.d.ts.map +1 -0
  69. package/esm/src/types/info/vaults.d.ts +7 -0
  70. package/esm/src/types/info/vaults.d.ts.map +1 -1
  71. package/esm/src/types/mod.d.ts +1 -1
  72. package/esm/src/types/mod.d.ts.map +1 -1
  73. package/esm/src/types/subscriptions/requests.d.ts +72 -18
  74. package/esm/src/types/subscriptions/requests.d.ts.map +1 -1
  75. package/esm/src/types/subscriptions/responses.d.ts +2 -0
  76. package/esm/src/types/subscriptions/responses.d.ts.map +1 -1
  77. package/package.json +8 -5
  78. package/script/mod.d.ts +1 -1
  79. package/script/mod.d.ts.map +1 -1
  80. package/script/mod.js +13 -23
  81. package/script/src/base.d.ts +4 -1
  82. package/script/src/base.d.ts.map +1 -1
  83. package/script/src/base.js +10 -20
  84. package/script/src/clients/exchange.d.ts +289 -207
  85. package/script/src/clients/exchange.d.ts.map +1 -1
  86. package/script/src/clients/exchange.js +2000 -1815
  87. package/script/src/clients/info.d.ts +264 -48
  88. package/script/src/clients/info.d.ts.map +1 -1
  89. package/script/src/clients/info.js +1442 -1210
  90. package/script/src/clients/multiSign.d.ts +285 -204
  91. package/script/src/clients/multiSign.d.ts.map +1 -1
  92. package/script/src/clients/multiSign.js +2043 -2025
  93. package/script/src/clients/subscription.d.ts +38 -3
  94. package/script/src/clients/subscription.d.ts.map +1 -1
  95. package/script/src/clients/subscription.js +568 -545
  96. package/script/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  97. package/script/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  98. package/script/src/signing/_signTypedData/ethers.js +16 -0
  99. package/script/src/signing/_signTypedData/mod.d.ts +35 -0
  100. package/script/src/signing/_signTypedData/mod.d.ts.map +1 -0
  101. package/script/src/signing/_signTypedData/mod.js +67 -0
  102. package/script/src/signing/_signTypedData/private_key.d.ts +26 -0
  103. package/script/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  104. package/script/src/signing/_signTypedData/private_key.js +148 -0
  105. package/script/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  106. package/script/src/signing/_signTypedData/viem.d.ts.map +1 -0
  107. package/script/src/signing/_signTypedData/viem.js +9 -0
  108. package/{esm/src/signing/_window.d.ts → script/src/signing/_signTypedData/window.d.ts} +18 -12
  109. package/script/src/signing/_signTypedData/window.d.ts.map +1 -0
  110. package/script/src/signing/_signTypedData/window.js +34 -0
  111. package/script/src/signing/_sorter.d.ts +56 -82
  112. package/script/src/signing/_sorter.d.ts.map +1 -1
  113. package/script/src/signing/_sorter.js +655 -678
  114. package/script/src/signing/mod.d.ts +151 -130
  115. package/script/src/signing/mod.d.ts.map +1 -1
  116. package/script/src/signing/mod.js +286 -342
  117. package/script/src/transports/base.d.ts +1 -1
  118. package/script/src/transports/base.d.ts.map +1 -1
  119. package/script/src/transports/base.js +11 -21
  120. package/script/src/transports/http/http_transport.d.ts +9 -15
  121. package/script/src/transports/http/http_transport.d.ts.map +1 -1
  122. package/script/src/transports/http/http_transport.js +97 -102
  123. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  124. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  125. package/script/src/transports/websocket/_hyperliquid_event_target.js +51 -61
  126. package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  127. package/script/src/transports/websocket/_reconnecting_websocket.js +271 -268
  128. package/script/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  129. package/script/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  130. package/script/src/transports/websocket/_websocket_async_request.js +157 -174
  131. package/script/src/transports/websocket/websocket_transport.d.ts +8 -4
  132. package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  133. package/script/src/transports/websocket/websocket_transport.js +209 -189
  134. package/script/src/types/exchange/requests.d.ts +27 -51
  135. package/script/src/types/exchange/requests.d.ts.map +1 -1
  136. package/script/src/types/exchange/requests.js +2 -12
  137. package/script/src/types/exchange/responses.js +2 -12
  138. package/script/src/types/explorer/requests.d.ts +5 -8
  139. package/script/src/types/explorer/requests.d.ts.map +1 -1
  140. package/script/src/types/explorer/requests.js +2 -12
  141. package/script/src/types/explorer/responses.js +2 -12
  142. package/script/src/types/info/accounts.d.ts +5 -5
  143. package/script/src/types/info/accounts.d.ts.map +1 -1
  144. package/script/src/types/info/accounts.js +2 -12
  145. package/script/src/types/info/assets.js +2 -12
  146. package/script/src/types/info/markets.d.ts +6 -0
  147. package/script/src/types/info/markets.d.ts.map +1 -1
  148. package/script/src/types/info/markets.js +2 -12
  149. package/script/src/types/info/orders.d.ts +1 -1
  150. package/script/src/types/info/orders.d.ts.map +1 -1
  151. package/script/src/types/info/orders.js +2 -12
  152. package/script/src/types/info/requests.d.ts +129 -124
  153. package/script/src/types/info/requests.d.ts.map +1 -1
  154. package/script/src/types/info/requests.js +2 -12
  155. package/{esm/src/types/info/delegations.d.ts → script/src/types/info/validators.d.ts} +2 -2
  156. package/script/src/types/info/validators.d.ts.map +1 -0
  157. package/script/src/types/info/validators.js +2 -0
  158. package/script/src/types/info/vaults.d.ts +7 -0
  159. package/script/src/types/info/vaults.d.ts.map +1 -1
  160. package/script/src/types/info/vaults.js +2 -12
  161. package/script/src/types/mod.d.ts +1 -1
  162. package/script/src/types/mod.d.ts.map +1 -1
  163. package/script/src/types/mod.js +2 -12
  164. package/script/src/types/subscriptions/requests.d.ts +72 -18
  165. package/script/src/types/subscriptions/requests.d.ts.map +1 -1
  166. package/script/src/types/subscriptions/requests.js +2 -12
  167. package/script/src/types/subscriptions/responses.d.ts +2 -0
  168. package/script/src/types/subscriptions/responses.d.ts.map +1 -1
  169. package/script/src/types/subscriptions/responses.js +2 -12
  170. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  171. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  172. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -1
  173. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  174. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  175. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -10
  176. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  177. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  178. package/esm/deps/jsr.io/@std/async/1.0.13/delay.js +0 -63
  179. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  180. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  181. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -2
  182. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  183. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  184. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -32
  185. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  186. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  187. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
  188. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  189. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  190. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
  191. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  192. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  193. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
  194. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  195. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  196. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
  197. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  198. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  199. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -2
  200. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  201. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  202. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -237
  203. package/esm/src/signing/_ethers.d.ts.map +0 -1
  204. package/esm/src/signing/_private_key.d.ts +0 -22
  205. package/esm/src/signing/_private_key.d.ts.map +0 -1
  206. package/esm/src/signing/_private_key.js +0 -124
  207. package/esm/src/signing/_viem.d.ts.map +0 -1
  208. package/esm/src/signing/_window.d.ts.map +0 -1
  209. package/esm/src/types/info/delegations.d.ts.map +0 -1
  210. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  211. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  212. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -27
  213. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  214. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  215. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -24
  216. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  217. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  218. package/script/deps/jsr.io/@std/async/1.0.13/delay.js +0 -76
  219. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  220. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  221. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -13
  222. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  223. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  224. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -45
  225. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  226. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  227. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -67
  228. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  229. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  230. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -26
  231. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  232. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  233. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -13
  234. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  235. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  236. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -101
  237. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  238. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  239. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -13
  240. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  241. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  242. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -250
  243. package/script/src/signing/_ethers.d.ts.map +0 -1
  244. package/script/src/signing/_ethers.js +0 -26
  245. package/script/src/signing/_private_key.d.ts +0 -22
  246. package/script/src/signing/_private_key.d.ts.map +0 -1
  247. package/script/src/signing/_private_key.js +0 -138
  248. package/script/src/signing/_viem.d.ts.map +0 -1
  249. package/script/src/signing/_viem.js +0 -19
  250. package/script/src/signing/_window.d.ts.map +0 -1
  251. package/script/src/signing/_window.js +0 -43
  252. package/script/src/types/info/delegations.d.ts.map +0 -1
  253. package/script/src/types/info/delegations.js +0 -12
  254. /package/esm/src/signing/{_ethers.js → _signTypedData/ethers.js} +0 -0
  255. /package/esm/src/signing/{_viem.js → _signTypedData/viem.js} +0 -0
  256. /package/esm/src/types/info/{delegations.js → validators.js} +0 -0
@@ -1,192 +1,175 @@
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.WebSocketAsyncRequest = exports.WebSocketRequestError = void 0;
13
- const base_js_1 = require("../base.js");
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketAsyncRequest = void 0;
4
+ const websocket_transport_js_1 = require("./websocket_transport.js");
5
+ /**
6
+ * Manages WebSocket requests to the Hyperliquid API.
7
+ * Handles request creation, sending, and mapping responses to their corresponding requests.
8
+ */
9
+ class WebSocketAsyncRequest {
10
+ socket;
11
+ lastId = 0;
12
+ queue = [];
13
+ lastRequestTime = 0;
14
14
  /**
15
- * Error thrown when a WebSocket request fails:
16
- * - When the WebSocket connection is closed
17
- * - When the server responds with an error message
15
+ * Creates a new WebSocket async request handler.
16
+ * @param socket - WebSocket connection instance for sending requests to the Hyperliquid WebSocket API
17
+ * @param hlEvents - Used to recognize Hyperliquid responses and match them with sent requests
18
18
  */
19
- class WebSocketRequestError extends base_js_1.TransportError {
20
- constructor(message) {
21
- super(message);
22
- this.name = "WebSocketRequestError";
23
- }
24
- }
25
- exports.WebSocketRequestError = WebSocketRequestError;
26
- /**
27
- * Manages WebSocket requests to the Hyperliquid API.
28
- * Handles request creation, sending, and mapping responses to their corresponding requests.
29
- */
30
- class WebSocketAsyncRequest {
31
- socket;
32
- lastId = 0;
33
- queue = [];
34
- lastRequestTime = 0;
35
- /**
36
- * Creates a new WebSocket async request handler.
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
- this.socket = socket;
42
- // Monitor responses and match the pending request
43
- hlEvents.addEventListener("subscriptionResponse", (event) => {
44
- // Use a stringified request as an id
45
- const id = WebSocketAsyncRequest.requestToId(event.detail);
46
- this.queue.findLast((item) => item.id === id)?.resolve(event.detail);
47
- });
48
- hlEvents.addEventListener("post", (event) => {
49
- const data = event.detail.response.type === "info"
50
- ? event.detail.response.payload.data
51
- : event.detail.response.payload;
52
- this.queue.findLast((item) => item.id === event.detail.id)?.resolve(data);
53
- });
54
- hlEvents.addEventListener("pong", () => {
55
- this.queue.findLast((item) => item.id === "ping")?.resolve();
56
- });
57
- hlEvents.addEventListener("error", (event) => {
58
- try {
59
- // Error event doesn't have an id, use original request to match
60
- const request = event.detail.match(/{.*}/)?.[0];
61
- if (!request)
62
- return;
63
- const parsedRequest = JSON.parse(request);
64
- // For `post` requests
65
- if ("id" in parsedRequest && typeof parsedRequest.id === "number") {
66
- this.queue.findLast((item) => item.id === parsedRequest.id)?.reject(new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
67
- return;
68
- }
69
- // For `subscribe` and `unsubscribe` requests
70
- if ("subscription" in parsedRequest &&
71
- typeof parsedRequest.subscription === "object" && parsedRequest.subscription !== null) {
72
- const id = WebSocketAsyncRequest.requestToId(parsedRequest);
73
- this.queue.findLast((item) => item.id === id)?.reject(new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
74
- return;
75
- }
76
- // For already/invalid subscribed requests
77
- if (event.detail.startsWith("Already subscribed") || event.detail.startsWith("Invalid subscription")) {
78
- const id = WebSocketAsyncRequest.requestToId({
79
- method: "subscribe",
80
- subscription: parsedRequest,
81
- });
82
- this.queue.findLast((item) => item.id === id)?.reject(new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
83
- return;
84
- }
85
- // For already unsubscribed requests
86
- if (event.detail.startsWith("Already unsubscribed")) {
87
- const id = WebSocketAsyncRequest.requestToId({
88
- method: "unsubscribe",
89
- subscription: parsedRequest,
90
- });
91
- this.queue.findLast((item) => item.id === id)?.reject(new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
92
- return;
93
- }
94
- // For unknown requests
19
+ constructor(socket, hlEvents) {
20
+ this.socket = socket;
21
+ // Monitor responses and match the pending request
22
+ hlEvents.addEventListener("subscriptionResponse", (event) => {
23
+ // Use a stringified request as an id
24
+ const id = WebSocketAsyncRequest.requestToId(event.detail);
25
+ this.queue.findLast((item) => item.id === id)?.resolve(event.detail);
26
+ });
27
+ hlEvents.addEventListener("post", (event) => {
28
+ const data = event.detail.response.type === "info"
29
+ ? event.detail.response.payload.data
30
+ : event.detail.response.payload;
31
+ this.queue.findLast((item) => item.id === event.detail.id)?.resolve(data);
32
+ });
33
+ hlEvents.addEventListener("pong", () => {
34
+ this.queue.findLast((item) => item.id === "ping")?.resolve();
35
+ });
36
+ hlEvents.addEventListener("error", (event) => {
37
+ try {
38
+ // Error event doesn't have an id, use original request to match
39
+ const request = event.detail.match(/{.*}/)?.[0];
40
+ if (!request)
41
+ return;
42
+ const parsedRequest = JSON.parse(request);
43
+ // For `post` requests
44
+ if ("id" in parsedRequest && typeof parsedRequest.id === "number") {
45
+ this.queue.findLast((item) => item.id === parsedRequest.id)
46
+ ?.reject(new websocket_transport_js_1.WebSocketRequestError(`Server error: ${event.detail}`, { cause: event.detail }));
47
+ return;
48
+ }
49
+ // For `subscribe` and `unsubscribe` requests
50
+ if ("subscription" in parsedRequest &&
51
+ typeof parsedRequest.subscription === "object" && parsedRequest.subscription !== null) {
95
52
  const id = WebSocketAsyncRequest.requestToId(parsedRequest);
96
- this.queue.findLast((item) => item.id === id)?.reject(new WebSocketRequestError(`Cannot complete WebSocket request: ${event.detail}`));
53
+ this.queue.findLast((item) => item.id === id)
54
+ ?.reject(new websocket_transport_js_1.WebSocketRequestError(`Server error: ${event.detail}`, { cause: event.detail }));
55
+ return;
97
56
  }
98
- catch {
99
- // Ignore JSON parsing errors
57
+ // For `Already subscribed` and `Invalid subscription` requests
58
+ if (event.detail.startsWith("Already subscribed") || event.detail.startsWith("Invalid subscription")) {
59
+ const id = WebSocketAsyncRequest.requestToId({
60
+ method: "subscribe",
61
+ subscription: parsedRequest,
62
+ });
63
+ this.queue.findLast((item) => item.id === id)
64
+ ?.reject(new websocket_transport_js_1.WebSocketRequestError(`Server error: ${event.detail}`, { cause: event.detail }));
65
+ return;
100
66
  }
101
- });
102
- // Throws all pending requests if the connection is dropped
103
- socket.addEventListener("close", () => {
104
- this.queue.forEach(({ reject }) => {
105
- reject(new WebSocketRequestError("Cannot complete WebSocket request: connection is closed"));
106
- });
107
- this.queue = [];
108
- });
109
- }
110
- async request(method, payload_or_signal, maybeSignal) {
111
- const payload = payload_or_signal instanceof AbortSignal ? undefined : payload_or_signal;
112
- const signal = payload_or_signal instanceof AbortSignal ? payload_or_signal : maybeSignal;
113
- // Reject the request if the signal is aborted
114
- if (signal?.aborted)
115
- return Promise.reject(signal.reason);
116
- // Create a request
117
- let id;
118
- let request;
119
- if (method === "post") {
120
- id = ++this.lastId;
121
- request = { method, id, request: payload };
122
- }
123
- else if (method === "ping") {
124
- id = "ping";
125
- request = { method };
67
+ // For `Already unsubscribed` requests
68
+ if (event.detail.startsWith("Already unsubscribed")) {
69
+ const id = WebSocketAsyncRequest.requestToId({
70
+ method: "unsubscribe",
71
+ subscription: parsedRequest,
72
+ });
73
+ this.queue.findLast((item) => item.id === id)
74
+ ?.reject(new websocket_transport_js_1.WebSocketRequestError(`Server error: ${event.detail}`, { cause: event.detail }));
75
+ return;
76
+ }
77
+ // For unknown requests
78
+ const id = WebSocketAsyncRequest.requestToId(parsedRequest);
79
+ this.queue.findLast((item) => item.id === id)
80
+ ?.reject(new websocket_transport_js_1.WebSocketRequestError(`Server error: ${event.detail}`, { cause: event.detail }));
126
81
  }
127
- else {
128
- request = { method, subscription: payload };
129
- id = WebSocketAsyncRequest.requestToId(request);
82
+ catch {
83
+ // Ignore JSON parsing errors
130
84
  }
131
- // Send the request
132
- this.socket.send(JSON.stringify(request), signal);
133
- this.lastRequestTime = Date.now();
134
- // Wait for a response
135
- const { promise, resolve, reject } = Promise.withResolvers();
136
- this.queue.push({ id, resolve, reject });
137
- const onAbort = () => reject(signal?.reason);
138
- signal?.addEventListener("abort", onAbort, { once: true });
139
- return await promise.finally(() => {
140
- const index = this.queue.findLastIndex((item) => item.id === id);
141
- if (index !== -1)
142
- this.queue.splice(index, 1);
143
- signal?.removeEventListener("abort", onAbort);
85
+ });
86
+ // Throws all pending requests if the connection is dropped
87
+ socket.addEventListener("close", () => {
88
+ this.queue.forEach(({ reject }) => {
89
+ reject(new websocket_transport_js_1.WebSocketRequestError("WebSocket connection closed."));
144
90
  });
145
- }
146
- /** Normalizes an object and then converts it to a string. */
147
- static requestToId(value) {
148
- const lowerHex = containsUppercaseHex(value) ? deepLowerHex(value) : value;
149
- const sorted = deepSortKeys(lowerHex);
150
- return JSON.stringify(sorted); // Also removes undefined
151
- }
91
+ this.queue = [];
92
+ });
152
93
  }
153
- exports.WebSocketAsyncRequest = WebSocketAsyncRequest;
154
- /** Deeply converts hexadecimal strings in an object/array to lowercase. */
155
- function deepLowerHex(obj) {
156
- if (typeof obj === "string") {
157
- return /^(0X[0-9a-fA-F]*|0x[0-9a-fA-F]*[A-F][0-9a-fA-F]*)$/.test(obj) ? obj.toLowerCase() : obj;
94
+ async request(method, payload_or_signal, maybeSignal) {
95
+ const payload = payload_or_signal instanceof AbortSignal ? undefined : payload_or_signal;
96
+ const signal = payload_or_signal instanceof AbortSignal ? payload_or_signal : maybeSignal;
97
+ // Reject the request if the signal is aborted
98
+ if (signal?.aborted)
99
+ return Promise.reject(signal.reason);
100
+ // Create a request
101
+ let id;
102
+ let request;
103
+ if (method === "post") {
104
+ id = ++this.lastId;
105
+ request = { method, id, request: payload };
158
106
  }
159
- if (Array.isArray(obj)) {
160
- return obj.map(deepLowerHex);
107
+ else if (method === "ping") {
108
+ id = "ping";
109
+ request = { method };
161
110
  }
162
- if (typeof obj === "object" && obj !== null) {
163
- const result = {};
164
- const entries = Object.entries(obj);
165
- for (const [key, value] of entries) {
166
- result[key] = deepLowerHex(value);
167
- }
168
- return result;
111
+ else {
112
+ request = { method, subscription: payload };
113
+ id = WebSocketAsyncRequest.requestToId(request);
169
114
  }
170
- return obj;
115
+ // Send the request
116
+ this.socket.send(JSON.stringify(request), signal);
117
+ this.lastRequestTime = Date.now();
118
+ // Wait for a response
119
+ const { promise, resolve, reject } = Promise.withResolvers();
120
+ this.queue.push({ id, resolve, reject });
121
+ const onAbort = () => reject(signal?.reason);
122
+ signal?.addEventListener("abort", onAbort, { once: true });
123
+ return await promise.finally(() => {
124
+ const index = this.queue.findLastIndex((item) => item.id === id);
125
+ if (index !== -1)
126
+ this.queue.splice(index, 1);
127
+ signal?.removeEventListener("abort", onAbort);
128
+ });
171
129
  }
172
- /** Check if an object contains uppercase hexadecimal strings. */
173
- function containsUppercaseHex(obj) {
174
- const str = JSON.stringify(obj);
175
- return /0X[0-9a-fA-F]*|0x[0-9a-fA-F]*[A-F][0-9a-fA-F]*/.test(str);
130
+ /** Normalizes an object and then converts it to a string. */
131
+ static requestToId(value) {
132
+ const lowerHex = containsUppercaseHex(value) ? deepLowerHex(value) : value;
133
+ const sorted = deepSortKeys(lowerHex);
134
+ return JSON.stringify(sorted); // Also removes undefined
176
135
  }
177
- /** Deeply sort the keys of an object. */
178
- function deepSortKeys(obj) {
179
- if (typeof obj !== "object" || obj === null) {
180
- return obj;
181
- }
182
- if (Array.isArray(obj)) {
183
- return obj.map(deepSortKeys);
184
- }
136
+ }
137
+ exports.WebSocketAsyncRequest = WebSocketAsyncRequest;
138
+ /** Deeply converts hexadecimal strings in an object/array to lowercase. */
139
+ function deepLowerHex(obj) {
140
+ if (typeof obj === "string") {
141
+ return /^(0X[0-9a-fA-F]*|0x[0-9a-fA-F]*[A-F][0-9a-fA-F]*)$/.test(obj) ? obj.toLowerCase() : obj;
142
+ }
143
+ if (Array.isArray(obj)) {
144
+ return obj.map(deepLowerHex);
145
+ }
146
+ if (typeof obj === "object" && obj !== null) {
185
147
  const result = {};
186
- const keys = Object.keys(obj).sort();
187
- for (const key of keys) {
188
- result[key] = deepSortKeys(obj[key]);
148
+ const entries = Object.entries(obj);
149
+ for (const [key, value] of entries) {
150
+ result[key] = deepLowerHex(value);
189
151
  }
190
152
  return result;
191
153
  }
192
- });
154
+ return obj;
155
+ }
156
+ /** Check if an object contains uppercase hexadecimal strings. */
157
+ function containsUppercaseHex(obj) {
158
+ const str = JSON.stringify(obj);
159
+ return /0X[0-9a-fA-F]*|0x[0-9a-fA-F]*[A-F][0-9a-fA-F]*/.test(str);
160
+ }
161
+ /** Deeply sort the keys of an object. */
162
+ function deepSortKeys(obj) {
163
+ if (typeof obj !== "object" || obj === null) {
164
+ return obj;
165
+ }
166
+ if (Array.isArray(obj)) {
167
+ return obj.map(deepSortKeys);
168
+ }
169
+ const result = {};
170
+ const keys = Object.keys(obj).sort();
171
+ for (const key of keys) {
172
+ result[key] = deepSortKeys(obj[key]);
173
+ }
174
+ return result;
175
+ }
@@ -1,8 +1,7 @@
1
+ import { type IRequestTransport, type ISubscriptionTransport, type Subscription, TransportError } from "../base.js";
1
2
  import { type MessageBufferStrategy, ReconnectingWebSocket, ReconnectingWebSocketError, type ReconnectingWebSocketOptions } from "./_reconnecting_websocket.js";
2
3
  import { HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
3
- import { WebSocketAsyncRequest, WebSocketRequestError } from "./_websocket_async_request.js";
4
- import type { IRequestTransport, ISubscriptionTransport, Subscription } from "../base.js";
5
- export { WebSocketRequestError };
4
+ import { WebSocketAsyncRequest } from "./_websocket_async_request.js";
6
5
  export { type MessageBufferStrategy, ReconnectingWebSocketError, type ReconnectingWebSocketOptions };
7
6
  /** Configuration options for the WebSocket transport layer. */
8
7
  export interface WebSocketTransportOptions {
@@ -46,6 +45,10 @@ export interface WebSocketTransportOptions {
46
45
  */
47
46
  autoResubscribe?: boolean;
48
47
  }
48
+ /** Error thrown when a WebSocket request fails. */
49
+ export declare class WebSocketRequestError extends TransportError {
50
+ constructor(message?: string, options?: ErrorOptions);
51
+ }
49
52
  /** WebSocket implementation of the REST and Subscription transport interfaces. */
50
53
  export declare class WebSocketTransport implements IRequestTransport, ISubscriptionTransport, AsyncDisposable {
51
54
  protected _wsRequester: WebSocketAsyncRequest;
@@ -95,18 +98,19 @@ export declare class WebSocketTransport implements IRequestTransport, ISubscript
95
98
  * @param payload - The payload to send with the request.
96
99
  * @param signal - An optional abort signal.
97
100
  * @returns A promise that resolves with parsed JSON response body.
101
+ *
98
102
  * @throws {WebSocketRequestError} - An error that occurs when a WebSocket request fails.
99
103
  */
100
104
  request<T>(type: "info" | "exchange" | "explorer", payload: unknown, signal?: AbortSignal): Promise<T>;
101
105
  /**
102
106
  * Subscribes to a Hyperliquid event channel.
103
- *
104
107
  * Sends a subscription request to the server and listens for events.
105
108
  *
106
109
  * @param channel - The event channel to listen to.
107
110
  * @param payload - A payload to send with the subscription request.
108
111
  * @param listener - A function to call when the event is dispatched.
109
112
  * @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
113
+ *
110
114
  * @throws {WebSocketRequestError} - An error that occurs when a WebSocket request fails.
111
115
  */
112
116
  subscribe<T>(channel: string, payload: unknown, listener: (data: CustomEvent<T>) => void): Promise<Subscription>;
@@ -1 +1 @@
1
- {"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"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"}