@nktkas/hyperliquid 0.25.0-beta.2 → 0.25.0-beta.4

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 (329) hide show
  1. package/README.md +114 -106
  2. package/esm/bin/_utils.d.ts +80 -0
  3. package/esm/bin/_utils.d.ts.map +1 -0
  4. package/esm/bin/_utils.js +112 -0
  5. package/esm/bin/_utils.js.map +1 -0
  6. package/esm/bin/cli.d.ts +3 -0
  7. package/esm/bin/cli.d.ts.map +1 -0
  8. package/esm/bin/cli.js +334 -0
  9. package/esm/bin/cli.js.map +1 -0
  10. package/esm/src/{errors.d.ts → _errors.d.ts} +1 -1
  11. package/esm/src/_errors.d.ts.map +1 -0
  12. package/esm/src/{errors.js → _errors.js} +1 -1
  13. package/esm/src/_errors.js.map +1 -0
  14. package/esm/src/clients/exchange.d.ts +91 -91
  15. package/esm/src/clients/exchange.d.ts.map +1 -1
  16. package/esm/src/clients/exchange.js +61 -56
  17. package/esm/src/clients/exchange.js.map +1 -1
  18. package/esm/src/clients/info.d.ts +134 -112
  19. package/esm/src/clients/info.d.ts.map +1 -1
  20. package/esm/src/clients/info.js +95 -72
  21. package/esm/src/clients/info.js.map +1 -1
  22. package/esm/src/clients/multiSign.d.ts +2 -2
  23. package/esm/src/clients/multiSign.d.ts.map +1 -1
  24. package/esm/src/clients/multiSign.js +3 -1
  25. package/esm/src/clients/multiSign.js.map +1 -1
  26. package/esm/src/clients/subscription.d.ts +23 -23
  27. package/esm/src/clients/subscription.d.ts.map +1 -1
  28. package/esm/src/clients/subscription.js +8 -11
  29. package/esm/src/clients/subscription.js.map +1 -1
  30. package/esm/src/mod.d.ts +21 -0
  31. package/esm/src/mod.d.ts.map +1 -0
  32. package/esm/src/mod.js +14 -0
  33. package/esm/src/mod.js.map +1 -0
  34. package/esm/src/schemas/_base.d.ts +8 -6
  35. package/esm/src/schemas/_base.d.ts.map +1 -1
  36. package/esm/src/schemas/_base.js +6 -4
  37. package/esm/src/schemas/_base.js.map +1 -1
  38. package/esm/src/schemas/exchange/requests.d.ts +332 -313
  39. package/esm/src/schemas/exchange/requests.d.ts.map +1 -1
  40. package/esm/src/schemas/exchange/requests.js +52 -61
  41. package/esm/src/schemas/exchange/requests.js.map +1 -1
  42. package/esm/src/schemas/exchange/responses.d.ts +10 -10
  43. package/esm/src/schemas/exchange/responses.js +3 -3
  44. package/esm/src/schemas/exchange/responses.js.map +1 -1
  45. package/esm/src/schemas/explorer/requests.d.ts +1 -1
  46. package/esm/src/schemas/explorer/requests.js +2 -2
  47. package/esm/src/schemas/explorer/requests.js.map +1 -1
  48. package/esm/src/schemas/explorer/responses.d.ts +16 -16
  49. package/esm/src/schemas/explorer/responses.js +3 -3
  50. package/esm/src/schemas/explorer/responses.js.map +1 -1
  51. package/esm/src/schemas/info/accounts.d.ts +975 -229
  52. package/esm/src/schemas/info/accounts.d.ts.map +1 -1
  53. package/esm/src/schemas/info/accounts.js +65 -21
  54. package/esm/src/schemas/info/accounts.js.map +1 -1
  55. package/esm/src/schemas/info/assets.d.ts +110 -110
  56. package/esm/src/schemas/info/assets.js +9 -9
  57. package/esm/src/schemas/info/assets.js.map +1 -1
  58. package/esm/src/schemas/info/markets.d.ts +25 -25
  59. package/esm/src/schemas/info/markets.js +3 -3
  60. package/esm/src/schemas/info/markets.js.map +1 -1
  61. package/esm/src/schemas/info/orders.d.ts +175 -175
  62. package/esm/src/schemas/info/orders.js +3 -3
  63. package/esm/src/schemas/info/orders.js.map +1 -1
  64. package/esm/src/schemas/info/requests.d.ts +31 -16
  65. package/esm/src/schemas/info/requests.d.ts.map +1 -1
  66. package/esm/src/schemas/info/requests.js +51 -40
  67. package/esm/src/schemas/info/requests.js.map +1 -1
  68. package/esm/src/schemas/info/validators.d.ts +30 -30
  69. package/esm/src/schemas/info/validators.d.ts.map +1 -1
  70. package/esm/src/schemas/info/validators.js +8 -8
  71. package/esm/src/schemas/info/validators.js.map +1 -1
  72. package/esm/src/schemas/info/vaults.d.ts +46 -46
  73. package/esm/src/schemas/info/vaults.js +10 -10
  74. package/esm/src/schemas/info/vaults.js.map +1 -1
  75. package/esm/src/schemas/mod.d.ts +3 -3
  76. package/esm/src/schemas/mod.d.ts.map +1 -1
  77. package/esm/src/schemas/mod.js +3 -3
  78. package/esm/src/schemas/mod.js.map +1 -1
  79. package/esm/src/schemas/subscriptions/requests.d.ts +4 -4
  80. package/esm/src/schemas/subscriptions/requests.d.ts.map +1 -1
  81. package/esm/src/schemas/subscriptions/requests.js +17 -17
  82. package/esm/src/schemas/subscriptions/requests.js.map +1 -1
  83. package/esm/src/schemas/subscriptions/responses.d.ts +618 -618
  84. package/esm/src/schemas/subscriptions/responses.js +14 -14
  85. package/esm/src/schemas/subscriptions/responses.js.map +1 -1
  86. package/esm/src/signing/mod.d.ts +1 -1
  87. package/esm/src/signing/mod.d.ts.map +1 -1
  88. package/esm/src/signing/mod.js +6 -6
  89. package/esm/src/signing/mod.js.map +1 -1
  90. package/esm/src/signing/signTypedData/ethers.d.ts.map +1 -0
  91. package/esm/src/signing/signTypedData/ethers.js.map +1 -0
  92. package/esm/src/signing/signTypedData/mod.d.ts.map +1 -0
  93. package/esm/src/signing/signTypedData/mod.js.map +1 -0
  94. package/esm/src/signing/signTypedData/private_key.d.ts.map +1 -0
  95. package/esm/src/signing/{_signTypedData → signTypedData}/private_key.js +18 -17
  96. package/esm/src/signing/signTypedData/private_key.js.map +1 -0
  97. package/esm/src/signing/signTypedData/viem.d.ts.map +1 -0
  98. package/esm/src/signing/signTypedData/viem.js.map +1 -0
  99. package/esm/src/transports/_polyfills.d.ts +12 -0
  100. package/esm/src/transports/_polyfills.d.ts.map +1 -0
  101. package/esm/src/transports/_polyfills.js +40 -0
  102. package/esm/src/transports/_polyfills.js.map +1 -0
  103. package/esm/src/transports/base.d.ts +8 -8
  104. package/esm/src/transports/base.d.ts.map +1 -1
  105. package/esm/src/transports/base.js +2 -2
  106. package/esm/src/transports/base.js.map +1 -1
  107. package/esm/src/transports/http/http_transport.d.ts +11 -4
  108. package/esm/src/transports/http/http_transport.d.ts.map +1 -1
  109. package/esm/src/transports/http/http_transport.js +17 -6
  110. package/esm/src/transports/http/http_transport.js.map +1 -1
  111. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +8 -7
  112. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  113. package/esm/src/transports/websocket/_hyperliquid_event_target.js +14 -33
  114. package/esm/src/transports/websocket/_hyperliquid_event_target.js.map +1 -1
  115. package/esm/src/transports/websocket/_reconnecting_websocket.d.ts +26 -29
  116. package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  117. package/esm/src/transports/websocket/_reconnecting_websocket.js +82 -76
  118. package/esm/src/transports/websocket/_reconnecting_websocket.js.map +1 -1
  119. package/esm/src/transports/websocket/_websocket_async_request.d.ts +6 -0
  120. package/esm/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  121. package/esm/src/transports/websocket/_websocket_async_request.js +49 -41
  122. package/esm/src/transports/websocket/_websocket_async_request.js.map +1 -1
  123. package/esm/src/transports/websocket/websocket_transport.d.ts +48 -70
  124. package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  125. package/esm/src/transports/websocket/websocket_transport.js +90 -103
  126. package/esm/src/transports/websocket/websocket_transport.js.map +1 -1
  127. package/package.json +12 -8
  128. package/script/bin/_utils.d.ts +80 -0
  129. package/script/bin/_utils.d.ts.map +1 -0
  130. package/script/bin/_utils.js +116 -0
  131. package/script/bin/_utils.js.map +1 -0
  132. package/script/bin/cli.d.ts +3 -0
  133. package/script/bin/cli.d.ts.map +1 -0
  134. package/script/bin/cli.js +369 -0
  135. package/script/bin/cli.js.map +1 -0
  136. package/script/src/{errors.d.ts → _errors.d.ts} +1 -1
  137. package/script/src/_errors.d.ts.map +1 -0
  138. package/script/src/{errors.js → _errors.js} +1 -1
  139. package/script/src/_errors.js.map +1 -0
  140. package/script/src/clients/exchange.d.ts +91 -91
  141. package/script/src/clients/exchange.d.ts.map +1 -1
  142. package/script/src/clients/exchange.js +61 -56
  143. package/script/src/clients/exchange.js.map +1 -1
  144. package/script/src/clients/info.d.ts +134 -112
  145. package/script/src/clients/info.d.ts.map +1 -1
  146. package/script/src/clients/info.js +94 -71
  147. package/script/src/clients/info.js.map +1 -1
  148. package/script/src/clients/multiSign.d.ts +2 -2
  149. package/script/src/clients/multiSign.d.ts.map +1 -1
  150. package/script/src/clients/multiSign.js +9 -7
  151. package/script/src/clients/multiSign.js.map +1 -1
  152. package/script/src/clients/subscription.d.ts +23 -23
  153. package/script/src/clients/subscription.d.ts.map +1 -1
  154. package/script/src/clients/subscription.js +8 -11
  155. package/script/src/clients/subscription.js.map +1 -1
  156. package/script/src/mod.d.ts +21 -0
  157. package/script/src/mod.d.ts.map +1 -0
  158. package/script/{mod.js → src/mod.js} +12 -8
  159. package/script/src/mod.js.map +1 -0
  160. package/script/src/schemas/_base.d.ts +8 -6
  161. package/script/src/schemas/_base.d.ts.map +1 -1
  162. package/script/src/schemas/_base.js +7 -5
  163. package/script/src/schemas/_base.js.map +1 -1
  164. package/script/src/schemas/exchange/requests.d.ts +332 -313
  165. package/script/src/schemas/exchange/requests.d.ts.map +1 -1
  166. package/script/src/schemas/exchange/requests.js +51 -60
  167. package/script/src/schemas/exchange/requests.js.map +1 -1
  168. package/script/src/schemas/exchange/responses.d.ts +10 -10
  169. package/script/src/schemas/exchange/responses.js +2 -2
  170. package/script/src/schemas/exchange/responses.js.map +1 -1
  171. package/script/src/schemas/explorer/requests.d.ts +1 -1
  172. package/script/src/schemas/explorer/requests.js +1 -1
  173. package/script/src/schemas/explorer/requests.js.map +1 -1
  174. package/script/src/schemas/explorer/responses.d.ts +16 -16
  175. package/script/src/schemas/explorer/responses.js +2 -2
  176. package/script/src/schemas/explorer/responses.js.map +1 -1
  177. package/script/src/schemas/info/accounts.d.ts +975 -229
  178. package/script/src/schemas/info/accounts.d.ts.map +1 -1
  179. package/script/src/schemas/info/accounts.js +65 -21
  180. package/script/src/schemas/info/accounts.js.map +1 -1
  181. package/script/src/schemas/info/assets.d.ts +110 -110
  182. package/script/src/schemas/info/assets.js +8 -8
  183. package/script/src/schemas/info/assets.js.map +1 -1
  184. package/script/src/schemas/info/markets.d.ts +25 -25
  185. package/script/src/schemas/info/markets.js +2 -2
  186. package/script/src/schemas/info/markets.js.map +1 -1
  187. package/script/src/schemas/info/orders.d.ts +175 -175
  188. package/script/src/schemas/info/orders.js +2 -2
  189. package/script/src/schemas/info/orders.js.map +1 -1
  190. package/script/src/schemas/info/requests.d.ts +31 -16
  191. package/script/src/schemas/info/requests.d.ts.map +1 -1
  192. package/script/src/schemas/info/requests.js +51 -40
  193. package/script/src/schemas/info/requests.js.map +1 -1
  194. package/script/src/schemas/info/validators.d.ts +30 -30
  195. package/script/src/schemas/info/validators.d.ts.map +1 -1
  196. package/script/src/schemas/info/validators.js +7 -7
  197. package/script/src/schemas/info/validators.js.map +1 -1
  198. package/script/src/schemas/info/vaults.d.ts +46 -46
  199. package/script/src/schemas/info/vaults.js +9 -9
  200. package/script/src/schemas/info/vaults.js.map +1 -1
  201. package/script/src/schemas/mod.d.ts +3 -3
  202. package/script/src/schemas/mod.d.ts.map +1 -1
  203. package/script/src/schemas/mod.js +4 -4
  204. package/script/src/schemas/mod.js.map +1 -1
  205. package/script/src/schemas/subscriptions/requests.d.ts +4 -4
  206. package/script/src/schemas/subscriptions/requests.d.ts.map +1 -1
  207. package/script/src/schemas/subscriptions/requests.js +16 -16
  208. package/script/src/schemas/subscriptions/requests.js.map +1 -1
  209. package/script/src/schemas/subscriptions/responses.d.ts +618 -618
  210. package/script/src/schemas/subscriptions/responses.js +13 -13
  211. package/script/src/schemas/subscriptions/responses.js.map +1 -1
  212. package/script/src/signing/mod.d.ts +1 -1
  213. package/script/src/signing/mod.d.ts.map +1 -1
  214. package/script/src/signing/mod.js +40 -7
  215. package/script/src/signing/mod.js.map +1 -1
  216. package/script/src/signing/signTypedData/ethers.d.ts.map +1 -0
  217. package/script/src/signing/signTypedData/ethers.js.map +1 -0
  218. package/script/src/signing/signTypedData/mod.d.ts.map +1 -0
  219. package/script/src/signing/signTypedData/mod.js.map +1 -0
  220. package/script/src/signing/signTypedData/private_key.d.ts.map +1 -0
  221. package/script/src/signing/{_signTypedData → signTypedData}/private_key.js +55 -21
  222. package/script/src/signing/signTypedData/private_key.js.map +1 -0
  223. package/script/src/signing/signTypedData/viem.d.ts.map +1 -0
  224. package/script/src/signing/signTypedData/viem.js.map +1 -0
  225. package/script/src/transports/_polyfills.d.ts +12 -0
  226. package/script/src/transports/_polyfills.d.ts.map +1 -0
  227. package/script/src/transports/_polyfills.js +43 -0
  228. package/script/src/transports/_polyfills.js.map +1 -0
  229. package/script/src/transports/base.d.ts +8 -8
  230. package/script/src/transports/base.d.ts.map +1 -1
  231. package/script/src/transports/base.js +3 -3
  232. package/script/src/transports/base.js.map +1 -1
  233. package/script/src/transports/http/http_transport.d.ts +11 -4
  234. package/script/src/transports/http/http_transport.d.ts.map +1 -1
  235. package/script/src/transports/http/http_transport.js +17 -6
  236. package/script/src/transports/http/http_transport.js.map +1 -1
  237. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +8 -7
  238. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  239. package/script/src/transports/websocket/_hyperliquid_event_target.js +47 -33
  240. package/script/src/transports/websocket/_hyperliquid_event_target.js.map +1 -1
  241. package/script/src/transports/websocket/_reconnecting_websocket.d.ts +26 -29
  242. package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
  243. package/script/src/transports/websocket/_reconnecting_websocket.js +82 -76
  244. package/script/src/transports/websocket/_reconnecting_websocket.js.map +1 -1
  245. package/script/src/transports/websocket/_websocket_async_request.d.ts +6 -0
  246. package/script/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
  247. package/script/src/transports/websocket/_websocket_async_request.js +52 -43
  248. package/script/src/transports/websocket/_websocket_async_request.js.map +1 -1
  249. package/script/src/transports/websocket/websocket_transport.d.ts +48 -70
  250. package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  251. package/script/src/transports/websocket/websocket_transport.js +92 -105
  252. package/script/src/transports/websocket/websocket_transport.js.map +1 -1
  253. package/src/bin/_utils.ts +185 -0
  254. package/src/bin/cli.ts +359 -0
  255. package/src/src/clients/exchange.ts +155 -144
  256. package/src/src/clients/info.ts +158 -124
  257. package/src/src/clients/multiSign.ts +13 -11
  258. package/src/src/clients/subscription.ts +32 -32
  259. package/src/src/mod.ts +29 -0
  260. package/src/src/schemas/_base.ts +25 -8
  261. package/src/src/schemas/exchange/requests.ts +59 -61
  262. package/src/src/schemas/exchange/responses.ts +3 -3
  263. package/src/src/schemas/explorer/requests.ts +2 -2
  264. package/src/src/schemas/explorer/responses.ts +3 -3
  265. package/src/src/schemas/info/accounts.ts +129 -21
  266. package/src/src/schemas/info/assets.ts +9 -9
  267. package/src/src/schemas/info/markets.ts +3 -3
  268. package/src/src/schemas/info/orders.ts +3 -3
  269. package/src/src/schemas/info/requests.ts +72 -40
  270. package/src/src/schemas/info/validators.ts +22 -24
  271. package/src/src/schemas/info/vaults.ts +10 -10
  272. package/src/src/schemas/mod.ts +3 -3
  273. package/src/src/schemas/subscriptions/requests.ts +27 -17
  274. package/src/src/schemas/subscriptions/responses.ts +14 -14
  275. package/src/src/signing/mod.ts +6 -6
  276. package/src/src/signing/{_signTypedData → signTypedData}/private_key.ts +22 -17
  277. package/src/src/transports/_polyfills.ts +41 -0
  278. package/src/src/transports/base.ts +8 -8
  279. package/src/src/transports/http/http_transport.ts +25 -14
  280. package/src/src/transports/websocket/_hyperliquid_event_target.ts +24 -51
  281. package/src/src/transports/websocket/_reconnecting_websocket.ts +107 -119
  282. package/src/src/transports/websocket/_websocket_async_request.ts +57 -59
  283. package/src/src/transports/websocket/websocket_transport.ts +126 -167
  284. package/esm/mod.d.ts +0 -20
  285. package/esm/mod.d.ts.map +0 -1
  286. package/esm/mod.js +0 -12
  287. package/esm/mod.js.map +0 -1
  288. package/esm/src/errors.d.ts.map +0 -1
  289. package/esm/src/errors.js.map +0 -1
  290. package/esm/src/signing/_signTypedData/ethers.d.ts.map +0 -1
  291. package/esm/src/signing/_signTypedData/ethers.js.map +0 -1
  292. package/esm/src/signing/_signTypedData/mod.d.ts.map +0 -1
  293. package/esm/src/signing/_signTypedData/mod.js.map +0 -1
  294. package/esm/src/signing/_signTypedData/private_key.d.ts.map +0 -1
  295. package/esm/src/signing/_signTypedData/private_key.js.map +0 -1
  296. package/esm/src/signing/_signTypedData/viem.d.ts.map +0 -1
  297. package/esm/src/signing/_signTypedData/viem.js.map +0 -1
  298. package/script/mod.d.ts +0 -20
  299. package/script/mod.d.ts.map +0 -1
  300. package/script/mod.js.map +0 -1
  301. package/script/src/errors.d.ts.map +0 -1
  302. package/script/src/errors.js.map +0 -1
  303. package/script/src/signing/_signTypedData/ethers.d.ts.map +0 -1
  304. package/script/src/signing/_signTypedData/ethers.js.map +0 -1
  305. package/script/src/signing/_signTypedData/mod.d.ts.map +0 -1
  306. package/script/src/signing/_signTypedData/mod.js.map +0 -1
  307. package/script/src/signing/_signTypedData/private_key.d.ts.map +0 -1
  308. package/script/src/signing/_signTypedData/private_key.js.map +0 -1
  309. package/script/src/signing/_signTypedData/viem.d.ts.map +0 -1
  310. package/script/src/signing/_signTypedData/viem.js.map +0 -1
  311. package/src/mod.ts +0 -28
  312. /package/esm/src/signing/{_signTypedData → signTypedData}/ethers.d.ts +0 -0
  313. /package/esm/src/signing/{_signTypedData → signTypedData}/ethers.js +0 -0
  314. /package/esm/src/signing/{_signTypedData → signTypedData}/mod.d.ts +0 -0
  315. /package/esm/src/signing/{_signTypedData → signTypedData}/mod.js +0 -0
  316. /package/esm/src/signing/{_signTypedData → signTypedData}/private_key.d.ts +0 -0
  317. /package/esm/src/signing/{_signTypedData → signTypedData}/viem.d.ts +0 -0
  318. /package/esm/src/signing/{_signTypedData → signTypedData}/viem.js +0 -0
  319. /package/script/src/signing/{_signTypedData → signTypedData}/ethers.d.ts +0 -0
  320. /package/script/src/signing/{_signTypedData → signTypedData}/ethers.js +0 -0
  321. /package/script/src/signing/{_signTypedData → signTypedData}/mod.d.ts +0 -0
  322. /package/script/src/signing/{_signTypedData → signTypedData}/mod.js +0 -0
  323. /package/script/src/signing/{_signTypedData → signTypedData}/private_key.d.ts +0 -0
  324. /package/script/src/signing/{_signTypedData → signTypedData}/viem.d.ts +0 -0
  325. /package/script/src/signing/{_signTypedData → signTypedData}/viem.js +0 -0
  326. /package/src/src/{errors.ts → _errors.ts} +0 -0
  327. /package/src/src/signing/{_signTypedData → signTypedData}/ethers.ts +0 -0
  328. /package/src/src/signing/{_signTypedData → signTypedData}/mod.ts +0 -0
  329. /package/src/src/signing/{_signTypedData → signTypedData}/viem.ts +0 -0
@@ -1,28 +1,35 @@
1
+ import { TransportError } from "../base.js";
2
+ import { Promise_ } from "../_polyfills.js";
1
3
  import type { ReconnectingWebSocket } from "./_reconnecting_websocket.js";
2
- import type { HyperliquidEventMap, HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
3
- import { WebSocketRequestError } from "./websocket_transport.js";
4
+ import type { HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
4
5
 
5
6
  interface PostRequest {
6
7
  method: "post";
7
8
  id: number;
8
9
  request: unknown;
9
10
  }
10
-
11
11
  interface SubscribeUnsubscribeRequest {
12
12
  method: "subscribe" | "unsubscribe";
13
13
  subscription: unknown;
14
14
  }
15
-
16
15
  interface PingRequest {
17
16
  method: "ping";
18
17
  }
19
18
 
19
+ /** Error thrown when a WebSocket request fails. */
20
+ export class WebSocketRequestError extends TransportError {
21
+ constructor(message?: string, options?: ErrorOptions) {
22
+ super(message, options);
23
+ this.name = "WebSocketRequestError";
24
+ }
25
+ }
26
+
20
27
  /**
21
28
  * Manages WebSocket requests to the Hyperliquid API.
22
29
  * Handles request creation, sending, and mapping responses to their corresponding requests.
23
30
  */
24
31
  export class WebSocketAsyncRequest {
25
- protected lastId: number = 0;
32
+ protected lastId = 0;
26
33
  protected queue: {
27
34
  id: number | string;
28
35
  // deno-lint-ignore no-explicit-any
@@ -30,7 +37,8 @@ export class WebSocketAsyncRequest {
30
37
  // deno-lint-ignore no-explicit-any
31
38
  reject: (reason?: any) => void;
32
39
  }[] = [];
33
- lastRequestTime: number = 0;
40
+ /** Timestamp of the last request sent. */
41
+ lastRequestTime = 0;
34
42
 
35
43
  /**
36
44
  * Creates a new WebSocket async request handler.
@@ -40,35 +48,30 @@ export class WebSocketAsyncRequest {
40
48
  constructor(protected socket: ReconnectingWebSocket, hlEvents: HyperliquidEventTarget) {
41
49
  // Monitor responses and match the pending request
42
50
  hlEvents.addEventListener("subscriptionResponse", (event) => {
43
- const detail = (event as HyperliquidEventMap["subscriptionResponse"]).detail;
44
-
45
- // Use a stringified request as an id
46
- const id = WebSocketAsyncRequest.requestToId(detail);
47
- this.queue.findLast((item) => item.id === id)?.resolve(detail);
51
+ const id = WebSocketAsyncRequest.requestToId(event.detail);
52
+ this.queue.find((x) => x.id === id)?.resolve(event.detail);
48
53
  });
49
54
  hlEvents.addEventListener("post", (event) => {
50
- const detail = (event as HyperliquidEventMap["post"]).detail;
51
-
52
- const data = detail.response.type === "info" ? detail.response.payload.data : detail.response.payload;
53
- this.queue.findLast((item) => item.id === detail.id)?.resolve(data);
55
+ const data = event.detail.response.type === "info"
56
+ ? event.detail.response.payload.data
57
+ : event.detail.response.payload;
58
+ this.queue.find((x) => x.id === event.detail.id)?.resolve(data);
54
59
  });
55
60
  hlEvents.addEventListener("pong", () => {
56
- this.queue.findLast((item) => item.id === "ping")?.resolve();
61
+ this.queue.find((x) => x.id === "ping")?.resolve();
57
62
  });
58
63
  hlEvents.addEventListener("error", (event) => {
59
- const detail = (event as HyperliquidEventMap["error"]).detail;
60
-
61
64
  try {
62
65
  // Error event doesn't have an id, use original request to match
63
- const request = detail.match(/{.*}/)?.[0];
66
+ const request = event.detail.match(/{.*}/)?.[0];
64
67
  if (!request) return;
65
68
 
66
- const parsedRequest = JSON.parse(request) as Record<string, unknown>;
69
+ const parsedRequest = JSON.parse(request);
67
70
 
68
71
  // For `post` requests
69
72
  if ("id" in parsedRequest && typeof parsedRequest.id === "number") {
70
- this.queue.findLast((item) => item.id === parsedRequest.id)
71
- ?.reject(new WebSocketRequestError(`Server error: ${detail}`, { cause: detail }));
73
+ this.queue.find((x) => x.id === parsedRequest.id)
74
+ ?.reject(new WebSocketRequestError(event.detail));
72
75
  return;
73
76
  }
74
77
 
@@ -78,48 +81,54 @@ export class WebSocketAsyncRequest {
78
81
  typeof parsedRequest.subscription === "object" && parsedRequest.subscription !== null
79
82
  ) {
80
83
  const id = WebSocketAsyncRequest.requestToId(parsedRequest);
81
- this.queue.findLast((item) => item.id === id)
82
- ?.reject(new WebSocketRequestError(`Server error: ${detail}`, { cause: detail }));
84
+ this.queue.find((x) => x.id === id)
85
+ ?.reject(new WebSocketRequestError(event.detail));
83
86
  return;
84
87
  }
85
88
 
86
89
  // For `Already subscribed` and `Invalid subscription` requests
87
- if (detail.startsWith("Already subscribed") || detail.startsWith("Invalid subscription")) {
90
+ if (
91
+ event.detail.startsWith("Already subscribed") ||
92
+ event.detail.startsWith("Invalid subscription")
93
+ ) {
88
94
  const id = WebSocketAsyncRequest.requestToId({
89
95
  method: "subscribe",
90
96
  subscription: parsedRequest,
91
97
  });
92
- this.queue.findLast((item) => item.id === id)
93
- ?.reject(new WebSocketRequestError(`Server error: ${detail}`, { cause: detail }));
98
+ this.queue.find((x) => x.id === id)
99
+ ?.reject(new WebSocketRequestError(event.detail));
94
100
  return;
95
101
  }
102
+
96
103
  // For `Already unsubscribed` requests
97
- if (detail.startsWith("Already unsubscribed")) {
104
+ if (event.detail.startsWith("Already unsubscribed")) {
98
105
  const id = WebSocketAsyncRequest.requestToId({
99
106
  method: "unsubscribe",
100
107
  subscription: parsedRequest,
101
108
  });
102
- this.queue.findLast((item) => item.id === id)
103
- ?.reject(new WebSocketRequestError(`Server error: ${detail}`, { cause: detail }));
109
+ this.queue.find((x) => x.id === id)
110
+ ?.reject(new WebSocketRequestError(event.detail));
104
111
  return;
105
112
  }
106
113
 
107
114
  // For unknown requests
108
115
  const id = WebSocketAsyncRequest.requestToId(parsedRequest);
109
- this.queue.findLast((item) => item.id === id)
110
- ?.reject(new WebSocketRequestError(`Server error: ${detail}`, { cause: detail }));
116
+ this.queue.find((x) => x.id === id)
117
+ ?.reject(new WebSocketRequestError(event.detail));
111
118
  } catch {
112
119
  // Ignore JSON parsing errors
113
120
  }
114
121
  });
115
122
 
116
123
  // Throws all pending requests if the connection is dropped
117
- socket.addEventListener("close", () => {
124
+ const handleClose = () => {
118
125
  this.queue.forEach(({ reject }) => {
119
126
  reject(new WebSocketRequestError("WebSocket connection closed."));
120
127
  });
121
128
  this.queue = [];
122
- });
129
+ };
130
+ socket.addEventListener("close", handleClose);
131
+ socket.addEventListener("error", handleClose);
123
132
  }
124
133
 
125
134
  /**
@@ -130,17 +139,17 @@ export class WebSocketAsyncRequest {
130
139
  async request<T>(method: "post" | "subscribe" | "unsubscribe", payload: unknown, signal?: AbortSignal): Promise<T>;
131
140
  async request<T>(
132
141
  method: "post" | "subscribe" | "unsubscribe" | "ping",
133
- payload_or_signal?: unknown | AbortSignal,
142
+ payloadOrSignal?: unknown | AbortSignal,
134
143
  maybeSignal?: AbortSignal,
135
144
  ): Promise<T> {
136
- const payload = payload_or_signal instanceof AbortSignal ? undefined : payload_or_signal;
137
- const signal = payload_or_signal instanceof AbortSignal ? payload_or_signal : maybeSignal;
145
+ const payload = payloadOrSignal instanceof AbortSignal ? undefined : payloadOrSignal;
146
+ const signal = payloadOrSignal instanceof AbortSignal ? payloadOrSignal : maybeSignal;
138
147
 
139
148
  // Reject the request if the signal is aborted
140
149
  if (signal?.aborted) return Promise.reject(signal.reason);
141
150
  // or if the WebSocket connection is permanently closed
142
- if (this.socket.reconnectAbortController.signal.aborted) {
143
- return Promise.reject(this.socket.reconnectAbortController.signal.reason);
151
+ if (this.socket.terminateSignal.aborted) {
152
+ return Promise.reject(this.socket.terminateSignal.reason);
144
153
  }
145
154
 
146
155
  // Create a request
@@ -162,14 +171,14 @@ export class WebSocketAsyncRequest {
162
171
  this.lastRequestTime = Date.now();
163
172
 
164
173
  // Wait for a response
165
- const { promise, resolve, reject } = Promise.withResolvers<T>();
174
+ const { promise, resolve, reject } = Promise_.withResolvers<T>();
166
175
  this.queue.push({ id, resolve, reject });
167
176
 
168
177
  const onAbort = () => reject(signal?.reason);
169
178
  signal?.addEventListener("abort", onAbort, { once: true });
170
179
 
171
180
  return await promise.finally(() => {
172
- const index = this.queue.findLastIndex((item) => item.id === id);
181
+ const index = this.queue.findIndex((item) => item.id === id);
173
182
  if (index !== -1) this.queue.splice(index, 1);
174
183
 
175
184
  signal?.removeEventListener("abort", onAbort);
@@ -179,51 +188,40 @@ export class WebSocketAsyncRequest {
179
188
  /** Normalizes an object and then converts it to a string. */
180
189
  static requestToId(value: unknown): string {
181
190
  const lowerHex = deepLowerHex(value);
182
- const sorted = deepSortKeys(lowerHex);
183
- return JSON.stringify(sorted); // Also removes undefined
191
+ const sortedKeys = deepSortKeys(lowerHex);
192
+ return JSON.stringify(sortedKeys); // also removes undefined
184
193
  }
185
194
  }
186
195
 
187
- /** Deeply converts hexadecimal strings in an object/array to lowercase. */
196
+ /** Deeply converts hexadecimal strings to lowercase in an object/array. */
188
197
  function deepLowerHex(obj: unknown): unknown {
189
198
  if (typeof obj === "string") {
190
- return /^(0X[0-9a-fA-F]*|0x[0-9a-fA-F]*[A-F][0-9a-fA-F]*)$/.test(obj) ? obj.toLowerCase() : obj;
199
+ return /^0[xX][0-9a-fA-F]+$/.test(obj) ? obj.toLowerCase() : obj;
191
200
  }
192
-
193
201
  if (Array.isArray(obj)) {
194
202
  return obj.map((value) => deepLowerHex(value));
195
203
  }
196
-
197
204
  if (typeof obj === "object" && obj !== null) {
198
205
  const result: Record<string, unknown> = {};
199
- const entries = Object.entries(obj);
200
-
201
- for (const [key, value] of entries) {
206
+ for (const [key, value] of Object.entries(obj)) {
202
207
  result[key] = deepLowerHex(value);
203
208
  }
204
-
205
209
  return result;
206
210
  }
207
-
208
211
  return obj;
209
212
  }
210
213
 
211
- /** Deeply sort the keys of an object. */
214
+ /** Deeply sort keys of an object alphabetically. */
212
215
  function deepSortKeys<T>(obj: T): T {
213
216
  if (typeof obj !== "object" || obj === null) {
214
217
  return obj;
215
218
  }
216
-
217
219
  if (Array.isArray(obj)) {
218
220
  return obj.map(deepSortKeys) as T;
219
221
  }
220
-
221
222
  const result: Record<string, unknown> = {};
222
- const keys = Object.keys(obj).sort();
223
-
224
- for (const key of keys) {
223
+ for (const key of Object.keys(obj).sort()) {
225
224
  result[key] = deepSortKeys((obj as Record<string, unknown>)[key]);
226
225
  }
227
-
228
226
  return result as T;
229
227
  }