@nktkas/hyperliquid 0.22.2 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +47 -49
  2. package/esm/src/base.d.ts +4 -1
  3. package/esm/src/base.d.ts.map +1 -1
  4. package/esm/src/base.js +2 -2
  5. package/esm/src/clients/exchange.d.ts +289 -207
  6. package/esm/src/clients/exchange.d.ts.map +1 -1
  7. package/esm/src/clients/exchange.js +605 -410
  8. package/esm/src/clients/info.d.ts +137 -41
  9. package/esm/src/clients/info.d.ts.map +1 -1
  10. package/esm/src/clients/info.js +124 -28
  11. package/esm/src/clients/multiSign.d.ts +285 -204
  12. package/esm/src/clients/multiSign.d.ts.map +1 -1
  13. package/esm/src/clients/multiSign.js +521 -493
  14. package/esm/src/clients/subscription.d.ts +38 -3
  15. package/esm/src/clients/subscription.d.ts.map +1 -1
  16. package/esm/src/clients/subscription.js +36 -3
  17. package/esm/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  18. package/esm/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  19. package/esm/src/signing/_signTypedData/mod.d.ts +35 -0
  20. package/esm/src/signing/_signTypedData/mod.d.ts.map +1 -0
  21. package/esm/src/signing/_signTypedData/mod.js +59 -0
  22. package/esm/src/signing/_signTypedData/private_key.d.ts +26 -0
  23. package/esm/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  24. package/esm/src/signing/_signTypedData/private_key.js +144 -0
  25. package/esm/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  26. package/esm/src/signing/_signTypedData/viem.d.ts.map +1 -0
  27. package/{script/src/signing/_window.d.ts → esm/src/signing/_signTypedData/window.d.ts} +18 -12
  28. package/esm/src/signing/_signTypedData/window.d.ts.map +1 -0
  29. package/esm/src/signing/{_window.js → _signTypedData/window.js} +3 -2
  30. package/esm/src/signing/_sorter.d.ts +56 -82
  31. package/esm/src/signing/_sorter.d.ts.map +1 -1
  32. package/esm/src/signing/_sorter.js +36 -49
  33. package/esm/src/signing/mod.d.ts +151 -130
  34. package/esm/src/signing/mod.d.ts.map +1 -1
  35. package/esm/src/signing/mod.js +182 -228
  36. package/esm/src/transports/base.d.ts +1 -1
  37. package/esm/src/transports/base.d.ts.map +1 -1
  38. package/esm/src/transports/base.js +2 -2
  39. package/esm/src/transports/http/http_transport.d.ts +9 -15
  40. package/esm/src/transports/http/http_transport.d.ts.map +1 -1
  41. package/esm/src/transports/http/http_transport.js +64 -59
  42. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  43. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  44. package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -1
  45. package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  46. package/esm/src/transports/websocket/_reconnecting_websocket.js +17 -4
  47. package/esm/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  48. package/esm/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  49. package/esm/src/transports/websocket/_websocket_async_request.js +14 -20
  50. package/esm/src/transports/websocket/websocket_transport.d.ts +8 -4
  51. package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  52. package/esm/src/transports/websocket/websocket_transport.js +83 -54
  53. package/esm/src/types/exchange/requests.d.ts +27 -51
  54. package/esm/src/types/exchange/requests.d.ts.map +1 -1
  55. package/esm/src/types/explorer/requests.d.ts +5 -8
  56. package/esm/src/types/explorer/requests.d.ts.map +1 -1
  57. package/esm/src/types/info/accounts.d.ts +5 -5
  58. package/esm/src/types/info/accounts.d.ts.map +1 -1
  59. package/esm/src/types/info/delegations.d.ts +1 -1
  60. package/esm/src/types/info/delegations.d.ts.map +1 -1
  61. package/esm/src/types/info/orders.d.ts +1 -1
  62. package/esm/src/types/info/orders.d.ts.map +1 -1
  63. package/esm/src/types/info/requests.d.ts +49 -96
  64. package/esm/src/types/info/requests.d.ts.map +1 -1
  65. package/esm/src/types/subscriptions/requests.d.ts +72 -18
  66. package/esm/src/types/subscriptions/requests.d.ts.map +1 -1
  67. package/esm/src/types/subscriptions/responses.d.ts +2 -0
  68. package/esm/src/types/subscriptions/responses.d.ts.map +1 -1
  69. package/package.json +8 -5
  70. package/script/mod.js +13 -23
  71. package/script/src/base.d.ts +4 -1
  72. package/script/src/base.d.ts.map +1 -1
  73. package/script/src/base.js +10 -20
  74. package/script/src/clients/exchange.d.ts +289 -207
  75. package/script/src/clients/exchange.d.ts.map +1 -1
  76. package/script/src/clients/exchange.js +2000 -1815
  77. package/script/src/clients/info.d.ts +137 -41
  78. package/script/src/clients/info.d.ts.map +1 -1
  79. package/script/src/clients/info.js +1296 -1210
  80. package/script/src/clients/multiSign.d.ts +285 -204
  81. package/script/src/clients/multiSign.d.ts.map +1 -1
  82. package/script/src/clients/multiSign.js +2043 -2025
  83. package/script/src/clients/subscription.d.ts +38 -3
  84. package/script/src/clients/subscription.d.ts.map +1 -1
  85. package/script/src/clients/subscription.js +568 -545
  86. package/script/src/signing/{_ethers.d.ts → _signTypedData/ethers.d.ts} +1 -1
  87. package/script/src/signing/_signTypedData/ethers.d.ts.map +1 -0
  88. package/script/src/signing/_signTypedData/ethers.js +16 -0
  89. package/script/src/signing/_signTypedData/mod.d.ts +35 -0
  90. package/script/src/signing/_signTypedData/mod.d.ts.map +1 -0
  91. package/script/src/signing/_signTypedData/mod.js +67 -0
  92. package/script/src/signing/_signTypedData/private_key.d.ts +26 -0
  93. package/script/src/signing/_signTypedData/private_key.d.ts.map +1 -0
  94. package/script/src/signing/_signTypedData/private_key.js +148 -0
  95. package/script/src/signing/{_viem.d.ts → _signTypedData/viem.d.ts} +2 -2
  96. package/script/src/signing/_signTypedData/viem.d.ts.map +1 -0
  97. package/script/src/signing/_signTypedData/viem.js +9 -0
  98. package/{esm/src/signing/_window.d.ts → script/src/signing/_signTypedData/window.d.ts} +18 -12
  99. package/script/src/signing/_signTypedData/window.d.ts.map +1 -0
  100. package/script/src/signing/_signTypedData/window.js +34 -0
  101. package/script/src/signing/_sorter.d.ts +56 -82
  102. package/script/src/signing/_sorter.d.ts.map +1 -1
  103. package/script/src/signing/_sorter.js +655 -678
  104. package/script/src/signing/mod.d.ts +151 -130
  105. package/script/src/signing/mod.d.ts.map +1 -1
  106. package/script/src/signing/mod.js +286 -342
  107. package/script/src/transports/base.d.ts +1 -1
  108. package/script/src/transports/base.d.ts.map +1 -1
  109. package/script/src/transports/base.js +11 -21
  110. package/script/src/transports/http/http_transport.d.ts +9 -15
  111. package/script/src/transports/http/http_transport.d.ts.map +1 -1
  112. package/script/src/transports/http/http_transport.js +97 -102
  113. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  114. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  115. package/script/src/transports/websocket/_hyperliquid_event_target.js +51 -61
  116. package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  117. package/script/src/transports/websocket/_reconnecting_websocket.js +271 -268
  118. package/script/src/transports/websocket/_websocket_async_request.d.ts +0 -9
  119. package/script/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  120. package/script/src/transports/websocket/_websocket_async_request.js +157 -174
  121. package/script/src/transports/websocket/websocket_transport.d.ts +8 -4
  122. package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  123. package/script/src/transports/websocket/websocket_transport.js +209 -189
  124. package/script/src/types/exchange/requests.d.ts +27 -51
  125. package/script/src/types/exchange/requests.d.ts.map +1 -1
  126. package/script/src/types/exchange/requests.js +2 -12
  127. package/script/src/types/exchange/responses.js +2 -12
  128. package/script/src/types/explorer/requests.d.ts +5 -8
  129. package/script/src/types/explorer/requests.d.ts.map +1 -1
  130. package/script/src/types/explorer/requests.js +2 -12
  131. package/script/src/types/explorer/responses.js +2 -12
  132. package/script/src/types/info/accounts.d.ts +5 -5
  133. package/script/src/types/info/accounts.d.ts.map +1 -1
  134. package/script/src/types/info/accounts.js +2 -12
  135. package/script/src/types/info/assets.js +2 -12
  136. package/script/src/types/info/delegations.d.ts +1 -1
  137. package/script/src/types/info/delegations.d.ts.map +1 -1
  138. package/script/src/types/info/delegations.js +2 -12
  139. package/script/src/types/info/markets.js +2 -12
  140. package/script/src/types/info/orders.d.ts +1 -1
  141. package/script/src/types/info/orders.d.ts.map +1 -1
  142. package/script/src/types/info/orders.js +2 -12
  143. package/script/src/types/info/requests.d.ts +49 -96
  144. package/script/src/types/info/requests.d.ts.map +1 -1
  145. package/script/src/types/info/requests.js +2 -12
  146. package/script/src/types/info/vaults.js +2 -12
  147. package/script/src/types/mod.js +2 -12
  148. package/script/src/types/subscriptions/requests.d.ts +72 -18
  149. package/script/src/types/subscriptions/requests.d.ts.map +1 -1
  150. package/script/src/types/subscriptions/requests.js +2 -12
  151. package/script/src/types/subscriptions/responses.d.ts +2 -0
  152. package/script/src/types/subscriptions/responses.d.ts.map +1 -1
  153. package/script/src/types/subscriptions/responses.js +2 -12
  154. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  155. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  156. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -1
  157. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  158. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  159. package/esm/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -10
  160. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  161. package/esm/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  162. package/esm/deps/jsr.io/@std/async/1.0.13/delay.js +0 -63
  163. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  164. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  165. package/esm/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -2
  166. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  167. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  168. package/esm/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -32
  169. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  170. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  171. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
  172. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  173. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  174. package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
  175. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  176. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  177. package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
  178. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  179. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  180. package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
  181. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  182. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  183. package/esm/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -2
  184. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  185. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  186. package/esm/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -237
  187. package/esm/src/signing/_ethers.d.ts.map +0 -1
  188. package/esm/src/signing/_private_key.d.ts +0 -22
  189. package/esm/src/signing/_private_key.d.ts.map +0 -1
  190. package/esm/src/signing/_private_key.js +0 -124
  191. package/esm/src/signing/_viem.d.ts.map +0 -1
  192. package/esm/src/signing/_window.d.ts.map +0 -1
  193. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts +0 -2
  194. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.d.ts.map +0 -1
  195. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/mod.js +0 -27
  196. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts +0 -95
  197. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.d.ts.map +0 -1
  198. package/script/deps/jsr.io/@derzade/typescript-event-target/1.1.1/src/TypedEventTarget.js +0 -24
  199. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts +0 -43
  200. package/script/deps/jsr.io/@std/async/1.0.13/delay.d.ts.map +0 -1
  201. package/script/deps/jsr.io/@std/async/1.0.13/delay.js +0 -76
  202. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts +0 -9
  203. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.d.ts.map +0 -1
  204. package/script/deps/jsr.io/@std/bytes/1.0.6/_types.js +0 -13
  205. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts +0 -21
  206. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.d.ts.map +0 -1
  207. package/script/deps/jsr.io/@std/bytes/1.0.6/concat.js +0 -45
  208. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
  209. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
  210. package/script/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -67
  211. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
  212. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
  213. package/script/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -26
  214. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
  215. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
  216. package/script/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -13
  217. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
  218. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
  219. package/script/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -101
  220. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts +0 -9
  221. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.d.ts.map +0 -1
  222. package/script/deps/jsr.io/@std/msgpack/1.0.3/_types.js +0 -13
  223. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts +0 -39
  224. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.d.ts.map +0 -1
  225. package/script/deps/jsr.io/@std/msgpack/1.0.3/encode.js +0 -250
  226. package/script/src/signing/_ethers.d.ts.map +0 -1
  227. package/script/src/signing/_ethers.js +0 -26
  228. package/script/src/signing/_private_key.d.ts +0 -22
  229. package/script/src/signing/_private_key.d.ts.map +0 -1
  230. package/script/src/signing/_private_key.js +0 -138
  231. package/script/src/signing/_viem.d.ts.map +0 -1
  232. package/script/src/signing/_viem.js +0 -19
  233. package/script/src/signing/_window.d.ts.map +0 -1
  234. package/script/src/signing/_window.js +0 -43
  235. /package/esm/src/signing/{_ethers.js → _signTypedData/ethers.js} +0 -0
  236. /package/esm/src/signing/{_viem.js → _signTypedData/viem.js} +0 -0
@@ -1,292 +1,295 @@
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;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReconnectingWebSocket = exports.ReconnectingWebSocketError = void 0;
4
+ const base_js_1 = require("../base.js");
5
+ /** Simple FIFO (First In, First Out) buffer implementation. */
6
+ class FIFOMessageBuffer {
7
+ queue = [];
8
+ push(data, signal) {
9
+ this.queue.push({ data, signal });
5
10
  }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "../../../deps/jsr.io/@std/async/1.0.13/delay.js", "../base.js"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ReconnectingWebSocket = exports.ReconnectingWebSocketError = void 0;
13
- // deno-lint-ignore-file no-explicit-any
14
- const delay_js_1 = require("../../../deps/jsr.io/@std/async/1.0.13/delay.js");
15
- const base_js_1 = require("../base.js");
16
- /** Simple FIFO (First In, First Out) buffer implementation. */
17
- class FIFOMessageBuffer {
18
- queue = [];
19
- push(data, signal) {
20
- this.queue.push({ data, signal });
21
- }
22
- *[Symbol.iterator]() {
23
- while (this.queue.length > 0) {
24
- const { data, signal } = this.queue.shift();
25
- if (signal?.aborted)
26
- continue;
27
- yield data;
28
- }
11
+ *[Symbol.iterator]() {
12
+ while (this.queue.length > 0) {
13
+ const { data, signal } = this.queue.shift();
14
+ if (signal?.aborted)
15
+ continue;
16
+ yield data;
29
17
  }
30
18
  }
31
- /** Error thrown when reconnection problems occur. */
32
- class ReconnectingWebSocketError extends base_js_1.TransportError {
33
- code;
34
- constructor(code, cause) {
35
- super(`Error when reconnecting WebSocket: ${code}`);
36
- this.code = code;
37
- this.name = "ReconnectingWebSocketError";
38
- this.cause = cause;
39
- }
19
+ }
20
+ /** Error thrown when reconnection problems occur. */
21
+ class ReconnectingWebSocketError extends base_js_1.TransportError {
22
+ code;
23
+ constructor(code, cause) {
24
+ super(`Error when reconnecting WebSocket: ${code}`);
25
+ this.code = code;
26
+ this.name = "ReconnectingWebSocketError";
27
+ this.cause = cause;
40
28
  }
41
- exports.ReconnectingWebSocketError = ReconnectingWebSocketError;
42
- /**
43
- * A WebSocket that automatically reconnects when disconnected.
44
- * Fully compatible with standard WebSocket API.
45
- */
46
- class ReconnectingWebSocket {
47
- _socket;
48
- _protocols;
49
- _listeners = [];
50
- _attempt = 0;
51
- reconnectOptions;
52
- reconnectAbortController = new AbortController();
53
- constructor(url, protocols, options) {
54
- this.reconnectOptions = {
55
- maxRetries: options?.maxRetries ?? 3,
56
- connectionTimeout: options?.connectionTimeout === undefined ? 10_000 : options.connectionTimeout,
57
- connectionDelay: options?.connectionDelay ?? ((n) => Math.min(~~(1 << n) * 150, 10_000)),
58
- shouldReconnect: options?.shouldReconnect ?? (() => true),
59
- messageBuffer: options?.messageBuffer ?? new FIFOMessageBuffer(),
60
- };
61
- this._socket = this._createSocket(url, protocols);
62
- this._protocols = protocols;
63
- this._setupEventListeners();
64
- }
65
- _createSocket(url, protocols) {
66
- const socket = new WebSocket(url, protocols);
67
- if (this.reconnectOptions.connectionTimeout === null)
68
- return socket;
69
- const timeoutId = setTimeout(() => {
70
- socket.removeEventListener("open", openHandler);
71
- socket.removeEventListener("close", closeHandler);
72
- socket.close(3008, "Timeout"); // https://www.iana.org/assignments/websocket/websocket.xml#close-code-number
73
- }, this.reconnectOptions.connectionTimeout);
74
- const openHandler = () => {
75
- socket.removeEventListener("close", closeHandler);
76
- clearTimeout(timeoutId);
77
- };
78
- const closeHandler = () => {
79
- socket.removeEventListener("open", openHandler);
80
- clearTimeout(timeoutId);
81
- };
82
- socket.addEventListener("open", openHandler, { once: true });
83
- socket.addEventListener("close", closeHandler, { once: true });
29
+ }
30
+ exports.ReconnectingWebSocketError = ReconnectingWebSocketError;
31
+ /**
32
+ * A WebSocket that automatically reconnects when disconnected.
33
+ * Fully compatible with standard WebSocket API.
34
+ */
35
+ class ReconnectingWebSocket {
36
+ _socket;
37
+ _protocols;
38
+ _listeners = [];
39
+ _attempt = 0;
40
+ reconnectOptions;
41
+ reconnectAbortController = new AbortController();
42
+ constructor(url, protocols, options) {
43
+ this.reconnectOptions = {
44
+ maxRetries: options?.maxRetries ?? 3,
45
+ connectionTimeout: options?.connectionTimeout === undefined ? 10_000 : options.connectionTimeout,
46
+ connectionDelay: options?.connectionDelay ?? ((n) => Math.min(~~(1 << n) * 150, 10_000)),
47
+ shouldReconnect: options?.shouldReconnect ?? (() => true),
48
+ messageBuffer: options?.messageBuffer ?? new FIFOMessageBuffer(),
49
+ };
50
+ this._socket = this._createSocket(url, protocols);
51
+ this._protocols = protocols;
52
+ this._setupEventListeners();
53
+ }
54
+ _createSocket(url, protocols) {
55
+ const socket = new WebSocket(url, protocols);
56
+ if (this.reconnectOptions.connectionTimeout === null)
84
57
  return socket;
85
- }
86
- /** Initializes the internal event listeners for the socket. */
87
- _setupEventListeners() {
88
- this._socket.addEventListener("open", this._open, { once: true });
89
- this._socket.addEventListener("close", this._close, { once: true });
90
- }
91
- _open = () => {
92
- // Reset the attempt counter
93
- this._attempt = 0;
94
- // Send all buffered messages
95
- for (const message of this.reconnectOptions.messageBuffer) {
96
- this._socket.send(message);
97
- }
58
+ const timeoutId = setTimeout(() => {
59
+ socket.removeEventListener("open", openHandler);
60
+ socket.removeEventListener("close", closeHandler);
61
+ socket.close(3008, "Timeout"); // https://www.iana.org/assignments/websocket/websocket.xml#close-code-number
62
+ }, this.reconnectOptions.connectionTimeout);
63
+ const openHandler = () => {
64
+ socket.removeEventListener("close", closeHandler);
65
+ clearTimeout(timeoutId);
98
66
  };
99
- _close = async (event) => {
100
- try {
101
- // If the event was triggered but the socket is not closing, ignore it
102
- if (this._socket.readyState !== ReconnectingWebSocket.CLOSING &&
103
- this._socket.readyState !== ReconnectingWebSocket.CLOSED)
104
- return;
105
- // If the instance is terminated, do not attempt to reconnect
106
- if (this.reconnectAbortController.signal.aborted)
107
- return;
108
- // Check if reconnection should be attempted
109
- if (++this._attempt > this.reconnectOptions.maxRetries) {
110
- this._cleanup("RECONNECTION_LIMIT_REACHED");
111
- return;
112
- }
113
- const userDecision = await this.reconnectOptions.shouldReconnect(event, this.reconnectAbortController.signal);
114
- if (this.reconnectAbortController.signal.aborted)
115
- return;
116
- if (!userDecision) {
117
- this._cleanup("RECONNECTION_STOPPED_BY_USER");
118
- return;
119
- }
120
- // Delay before reconnecting
121
- const reconnectDelay = typeof this.reconnectOptions.connectionDelay === "number"
122
- ? this.reconnectOptions.connectionDelay
123
- : await this.reconnectOptions.connectionDelay(this._attempt, this.reconnectAbortController.signal);
124
- if (this.reconnectAbortController.signal.aborted)
125
- return;
126
- await (0, delay_js_1.delay)(reconnectDelay, { signal: this.reconnectAbortController.signal });
127
- // Create a new WebSocket instance
128
- const { onclose, onerror, onmessage, onopen } = this._socket;
129
- this._socket = this._createSocket(this._socket.url, this._protocols);
130
- // Reconnect all listeners
131
- this._setupEventListeners();
132
- this._listeners.forEach(({ type, listenerProxy, options }) => {
133
- this._socket.addEventListener(type, listenerProxy, options);
134
- });
135
- this._socket.onclose = onclose;
136
- this._socket.onerror = onerror;
137
- this._socket.onmessage = onmessage;
138
- this._socket.onopen = onopen;
139
- }
140
- catch (error) {
141
- this._cleanup("UNKNOWN_ERROR", error);
142
- }
67
+ const closeHandler = () => {
68
+ socket.removeEventListener("open", openHandler);
69
+ clearTimeout(timeoutId);
143
70
  };
144
- /** Clean up internal resources. */
145
- _cleanup(code, cause) {
146
- this.reconnectAbortController.abort(new ReconnectingWebSocketError(code, cause));
147
- this._listeners = [];
148
- this._socket.close();
149
- }
150
- // WebSocket property implementations
151
- get url() {
152
- return this._socket.url;
153
- }
154
- get readyState() {
155
- return this._socket.readyState;
156
- }
157
- get bufferedAmount() {
158
- return this._socket.bufferedAmount;
159
- }
160
- get extensions() {
161
- return this._socket.extensions;
162
- }
163
- get protocol() {
164
- return this._socket.protocol;
165
- }
166
- get binaryType() {
167
- return this._socket.binaryType;
168
- }
169
- set binaryType(value) {
170
- this._socket.binaryType = value;
171
- }
172
- CONNECTING = 0;
173
- OPEN = 1;
174
- CLOSING = 2;
175
- CLOSED = 3;
176
- static CONNECTING = 0;
177
- static OPEN = 1;
178
- static CLOSING = 2;
179
- static CLOSED = 3;
180
- get onclose() {
181
- return this._socket.onclose;
182
- }
183
- set onclose(value) {
184
- this._socket.onclose = value;
185
- }
186
- get onerror() {
187
- return this._socket.onerror;
188
- }
189
- set onerror(value) {
190
- this._socket.onerror = value;
191
- }
192
- get onmessage() {
193
- return this._socket.onmessage;
71
+ socket.addEventListener("open", openHandler, { once: true });
72
+ socket.addEventListener("close", closeHandler, { once: true });
73
+ return socket;
74
+ }
75
+ /** Initializes the internal event listeners for the socket. */
76
+ _setupEventListeners() {
77
+ this._socket.addEventListener("open", this._open, { once: true });
78
+ this._socket.addEventListener("close", this._close, { once: true });
79
+ }
80
+ _open = () => {
81
+ // Reset the attempt counter
82
+ this._attempt = 0;
83
+ // Send all buffered messages
84
+ for (const message of this.reconnectOptions.messageBuffer) {
85
+ this._socket.send(message);
194
86
  }
195
- set onmessage(value) {
196
- this._socket.onmessage = value;
87
+ };
88
+ _close = async (event) => {
89
+ try {
90
+ // If the event was triggered but the socket is not closing, ignore it
91
+ if (this._socket.readyState !== ReconnectingWebSocket.CLOSING &&
92
+ this._socket.readyState !== ReconnectingWebSocket.CLOSED)
93
+ return;
94
+ // If the instance is terminated, do not attempt to reconnect
95
+ if (this.reconnectAbortController.signal.aborted)
96
+ return;
97
+ // Check if reconnection should be attempted
98
+ if (++this._attempt > this.reconnectOptions.maxRetries) {
99
+ this._cleanup("RECONNECTION_LIMIT_REACHED");
100
+ return;
101
+ }
102
+ const userDecision = await this.reconnectOptions.shouldReconnect(event, this.reconnectAbortController.signal);
103
+ if (this.reconnectAbortController.signal.aborted)
104
+ return;
105
+ if (!userDecision) {
106
+ this._cleanup("RECONNECTION_STOPPED_BY_USER");
107
+ return;
108
+ }
109
+ // Delay before reconnecting
110
+ const reconnectDelay = typeof this.reconnectOptions.connectionDelay === "number"
111
+ ? this.reconnectOptions.connectionDelay
112
+ : await this.reconnectOptions.connectionDelay(this._attempt, this.reconnectAbortController.signal);
113
+ if (this.reconnectAbortController.signal.aborted)
114
+ return;
115
+ await delay(reconnectDelay, this.reconnectAbortController.signal);
116
+ // Create a new WebSocket instance
117
+ const { onclose, onerror, onmessage, onopen } = this._socket;
118
+ this._socket = this._createSocket(this._socket.url, this._protocols);
119
+ // Reconnect all listeners
120
+ this._setupEventListeners();
121
+ this._listeners.forEach(({ type, listenerProxy, options }) => {
122
+ this._socket.addEventListener(type, listenerProxy, options);
123
+ });
124
+ this._socket.onclose = onclose;
125
+ this._socket.onerror = onerror;
126
+ this._socket.onmessage = onmessage;
127
+ this._socket.onopen = onopen;
197
128
  }
198
- get onopen() {
199
- return this._socket.onopen;
129
+ catch (error) {
130
+ this._cleanup("UNKNOWN_ERROR", error);
200
131
  }
201
- set onopen(value) {
202
- this._socket.onopen = value;
132
+ };
133
+ /** Clean up internal resources. */
134
+ _cleanup(code, cause) {
135
+ this.reconnectAbortController.abort(new ReconnectingWebSocketError(code, cause));
136
+ this._listeners = [];
137
+ this._socket.close();
138
+ }
139
+ // WebSocket property implementations
140
+ get url() {
141
+ return this._socket.url;
142
+ }
143
+ get readyState() {
144
+ return this._socket.readyState;
145
+ }
146
+ get bufferedAmount() {
147
+ return this._socket.bufferedAmount;
148
+ }
149
+ get extensions() {
150
+ return this._socket.extensions;
151
+ }
152
+ get protocol() {
153
+ return this._socket.protocol;
154
+ }
155
+ get binaryType() {
156
+ return this._socket.binaryType;
157
+ }
158
+ set binaryType(value) {
159
+ this._socket.binaryType = value;
160
+ }
161
+ CONNECTING = 0;
162
+ OPEN = 1;
163
+ CLOSING = 2;
164
+ CLOSED = 3;
165
+ static CONNECTING = 0;
166
+ static OPEN = 1;
167
+ static CLOSING = 2;
168
+ static CLOSED = 3;
169
+ get onclose() {
170
+ return this._socket.onclose;
171
+ }
172
+ set onclose(value) {
173
+ this._socket.onclose = value;
174
+ }
175
+ get onerror() {
176
+ return this._socket.onerror;
177
+ }
178
+ set onerror(value) {
179
+ this._socket.onerror = value;
180
+ }
181
+ get onmessage() {
182
+ return this._socket.onmessage;
183
+ }
184
+ set onmessage(value) {
185
+ this._socket.onmessage = value;
186
+ }
187
+ get onopen() {
188
+ return this._socket.onopen;
189
+ }
190
+ set onopen(value) {
191
+ this._socket.onopen = value;
192
+ }
193
+ /**
194
+ * @param permanently - If `true`, the connection will be permanently closed. Default is `true`.
195
+ */
196
+ close(code, reason, permanently = true) {
197
+ this._socket.close(code, reason);
198
+ if (permanently)
199
+ this._cleanup("USER_INITIATED_CLOSE");
200
+ }
201
+ /**
202
+ * @param signal - `AbortSignal` to cancel sending a message if it was in the buffer.
203
+ * @note If the connection is not open, the data will be buffered and sent when the connection is established.
204
+ */
205
+ send(data, signal) {
206
+ if (signal?.aborted)
207
+ return;
208
+ if (this._socket.readyState !== ReconnectingWebSocket.OPEN && !this.reconnectAbortController.signal.aborted) {
209
+ this.reconnectOptions.messageBuffer.push(data, signal);
203
210
  }
204
- /**
205
- * @param permanently - If `true`, the connection will be permanently closed. Default is `true`.
206
- */
207
- close(code, reason, permanently = true) {
208
- this._socket.close(code, reason);
209
- if (permanently)
210
- this._cleanup("USER_INITIATED_CLOSE");
211
+ else {
212
+ this._socket.send(data);
211
213
  }
212
- /**
213
- * @param signal - `AbortSignal` to cancel sending a message if it was in the buffer.
214
- * @note If the connection is not open, the data will be buffered and sent when the connection is established.
215
- */
216
- send(data, signal) {
217
- if (signal?.aborted)
218
- return;
219
- if (this._socket.readyState !== ReconnectingWebSocket.OPEN && !this.reconnectAbortController.signal.aborted) {
220
- this.reconnectOptions.messageBuffer.push(data, signal);
221
- }
222
- else {
223
- this._socket.send(data);
224
- }
214
+ }
215
+ addEventListener(type, listener, options) {
216
+ // Wrap the listener to handle reconnection
217
+ let listenerProxy;
218
+ if (this.reconnectAbortController.signal.aborted) {
219
+ // If the instance is terminated, use the original listener
220
+ listenerProxy = listener;
225
221
  }
226
- addEventListener(type, listener, options) {
227
- // Wrap the listener to handle reconnection
228
- let listenerProxy;
229
- if (this.reconnectAbortController.signal.aborted) {
230
- // If the instance is terminated, use the original listener
231
- listenerProxy = listener;
222
+ else {
223
+ // Check if the listener is already registered
224
+ const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
225
+ if (index !== -1) {
226
+ // Use the existing listener proxy
227
+ listenerProxy = this._listeners[index].listenerProxy;
232
228
  }
233
229
  else {
234
- // Check if the listener is already registered
235
- const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
236
- if (index !== -1) {
237
- // Use the existing listener proxy
238
- listenerProxy = this._listeners[index].listenerProxy;
239
- }
240
- else {
241
- // Wrap the original listener to follow the once option when reconnecting
242
- listenerProxy = (event) => {
243
- try {
244
- if (typeof listener === "function") {
245
- listener.call(this, event);
246
- }
247
- else {
248
- listener.handleEvent(event);
249
- }
230
+ // Wrap the original listener to follow the once option when reconnecting
231
+ listenerProxy = (event) => {
232
+ try {
233
+ if (typeof listener === "function") {
234
+ listener.call(this, event);
250
235
  }
251
- finally {
252
- // If the listener is marked as once, remove it after the first invocation
253
- if (typeof options === "object" && options.once === true) {
254
- const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
255
- if (index !== -1) {
256
- this._listeners.splice(index, 1);
257
- }
236
+ else {
237
+ listener.handleEvent(event);
238
+ }
239
+ }
240
+ finally {
241
+ // If the listener is marked as once, remove it after the first invocation
242
+ if (typeof options === "object" && options.once === true) {
243
+ const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
244
+ if (index !== -1) {
245
+ this._listeners.splice(index, 1);
258
246
  }
259
247
  }
260
- };
261
- this._listeners.push({ type, listener, options, listenerProxy });
262
- }
248
+ }
249
+ };
250
+ this._listeners.push({ type, listener, options, listenerProxy });
263
251
  }
264
- // Add the wrapped (or original) listener
265
- this._socket.addEventListener(type, listenerProxy, options);
266
252
  }
267
- removeEventListener(type, listener, options) {
268
- // Remove a wrapped listener, not an original listener
269
- const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
270
- if (index !== -1) {
271
- const { listenerProxy } = this._listeners[index];
272
- this._socket.removeEventListener(type, listenerProxy, options);
273
- this._listeners.splice(index, 1);
274
- }
275
- else {
276
- // If the wrapped listener is not found, remove the original listener
277
- this._socket.removeEventListener(type, listener, options);
278
- }
253
+ // Add the wrapped (or original) listener
254
+ this._socket.addEventListener(type, listenerProxy, options);
255
+ }
256
+ removeEventListener(type, listener, options) {
257
+ // Remove a wrapped listener, not an original listener
258
+ const index = this._listeners.findIndex((e) => listenersMatch(e, { type, listener, options }));
259
+ if (index !== -1) {
260
+ const { listenerProxy } = this._listeners[index];
261
+ this._socket.removeEventListener(type, listenerProxy, options);
262
+ this._listeners.splice(index, 1);
279
263
  }
280
- dispatchEvent(event) {
281
- return this._socket.dispatchEvent(event);
264
+ else {
265
+ // If the wrapped listener is not found, remove the original listener
266
+ this._socket.removeEventListener(type, listener, options);
282
267
  }
283
268
  }
284
- exports.ReconnectingWebSocket = ReconnectingWebSocket;
285
- /** Check if two event listeners are the same (just like EventTarget). */
286
- function listenersMatch(a, b) {
287
- // EventTarget only compares capture in options, even if one is an object and the other is boolean
288
- const aCapture = Boolean(typeof a.options === "object" ? a.options.capture : a.options);
289
- const bCapture = Boolean(typeof b.options === "object" ? b.options.capture : b.options);
290
- return a.type === b.type && a.listener === b.listener && aCapture === bCapture;
269
+ dispatchEvent(event) {
270
+ return this._socket.dispatchEvent(event);
291
271
  }
292
- });
272
+ }
273
+ exports.ReconnectingWebSocket = ReconnectingWebSocket;
274
+ function listenersMatch(a, b) {
275
+ // EventTarget only compares capture in options, even if one is an object and the other is boolean
276
+ const aCapture = Boolean(typeof a.options === "object" ? a.options.capture : a.options);
277
+ const bCapture = Boolean(typeof b.options === "object" ? b.options.capture : b.options);
278
+ return a.type === b.type && a.listener === b.listener && aCapture === bCapture;
279
+ }
280
+ function delay(ms, signal) {
281
+ if (signal?.aborted)
282
+ return Promise.reject(signal.reason);
283
+ return new Promise((resolve, reject) => {
284
+ const onAbort = () => {
285
+ clearTimeout(timer);
286
+ reject(signal?.reason);
287
+ };
288
+ const onTimeout = () => {
289
+ signal?.removeEventListener("abort", onAbort);
290
+ resolve();
291
+ };
292
+ const timer = setTimeout(onTimeout, ms);
293
+ signal?.addEventListener("abort", onAbort, { once: true });
294
+ });
295
+ }
@@ -1,14 +1,5 @@
1
- import { TransportError } from "../base.js";
2
1
  import type { ReconnectingWebSocket } from "./_reconnecting_websocket.js";
3
2
  import type { HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
4
- /**
5
- * Error thrown when a WebSocket request fails:
6
- * - When the WebSocket connection is closed
7
- * - When the server responds with an error message
8
- */
9
- export declare class WebSocketRequestError extends TransportError {
10
- constructor(message: string);
11
- }
12
3
  /**
13
4
  * Manages WebSocket requests to the Hyperliquid API.
14
5
  * Handles request creation, sending, and mapping responses to their corresponding requests.
@@ -1 +1 @@
1
- {"version":3,"file":"_websocket_async_request.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_websocket_async_request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAiB7E;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;gBACzC,OAAO,EAAE,MAAM;CAI9B;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAgBlB,SAAS,CAAC,MAAM,EAAE,qBAAqB;IAfnD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAC7B,SAAS,CAAC,KAAK,EAAE;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAEpB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAE/B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAClC,EAAE,CAAM;IACT,eAAe,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;gBACmB,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,sBAAsB;IAsFrF;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA6ClH,6DAA6D;IAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAK7C"}
1
+ {"version":3,"file":"_websocket_async_request.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_websocket_async_request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAkB7E;;;GAGG;AACH,qBAAa,qBAAqB;IAgBlB,SAAS,CAAC,MAAM,EAAE,qBAAqB;IAfnD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAC7B,SAAS,CAAC,KAAK,EAAE;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAEpB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAE/B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAClC,EAAE,CAAM;IACT,eAAe,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;gBACmB,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,sBAAsB;IAiFrF;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA6ClH,6DAA6D;IAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAK7C"}