@nktkas/hyperliquid 0.24.3 → 0.25.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/README.md +141 -32
  2. package/esm/mod.d.ts +11 -11
  3. package/esm/mod.d.ts.map +1 -1
  4. package/esm/mod.js +2 -1
  5. package/esm/mod.js.map +1 -0
  6. package/esm/src/clients/exchange.d.ts +29 -25
  7. package/esm/src/clients/exchange.d.ts.map +1 -1
  8. package/esm/src/clients/exchange.js +54 -53
  9. package/esm/src/clients/exchange.js.map +1 -0
  10. package/esm/src/clients/info.d.ts +80 -20
  11. package/esm/src/clients/info.d.ts.map +1 -1
  12. package/esm/src/clients/info.js +312 -73
  13. package/esm/src/clients/info.js.map +1 -0
  14. package/esm/src/clients/multiSign.d.ts +11 -7
  15. package/esm/src/clients/multiSign.d.ts.map +1 -1
  16. package/esm/src/clients/multiSign.js +2 -1
  17. package/esm/src/clients/multiSign.js.map +1 -0
  18. package/esm/src/clients/subscription.d.ts +9 -9
  19. package/esm/src/clients/subscription.d.ts.map +1 -1
  20. package/esm/src/clients/subscription.js +29 -27
  21. package/esm/src/clients/subscription.js.map +1 -0
  22. package/esm/src/{base.d.ts → errors.d.ts} +1 -1
  23. package/esm/src/errors.d.ts.map +1 -0
  24. package/esm/src/{base.js → errors.js} +1 -0
  25. package/esm/src/errors.js.map +1 -0
  26. package/esm/src/schemas/_base.d.ts +14 -0
  27. package/esm/src/schemas/_base.d.ts.map +1 -0
  28. package/esm/src/schemas/_base.js +15 -0
  29. package/esm/src/schemas/_base.js.map +1 -0
  30. package/esm/src/schemas/exchange/requests.d.ts +8953 -0
  31. package/esm/src/schemas/exchange/requests.d.ts.map +1 -0
  32. package/esm/src/schemas/exchange/requests.js +1414 -0
  33. package/esm/src/schemas/exchange/requests.js.map +1 -0
  34. package/esm/src/schemas/exchange/responses.d.ts +567 -0
  35. package/esm/src/schemas/exchange/responses.d.ts.map +1 -0
  36. package/esm/src/schemas/exchange/responses.js +244 -0
  37. package/esm/src/schemas/exchange/responses.js.map +1 -0
  38. package/esm/src/schemas/explorer/requests.d.ts +44 -0
  39. package/esm/src/schemas/explorer/requests.d.ts.map +1 -0
  40. package/esm/src/schemas/explorer/requests.js +33 -0
  41. package/esm/src/schemas/explorer/requests.js.map +1 -0
  42. package/esm/src/schemas/explorer/responses.d.ts +360 -0
  43. package/esm/src/schemas/explorer/responses.d.ts.map +1 -0
  44. package/esm/src/schemas/explorer/responses.js +57 -0
  45. package/esm/src/schemas/explorer/responses.js.map +1 -0
  46. package/esm/src/schemas/info/accounts.d.ts +2159 -0
  47. package/esm/src/schemas/info/accounts.d.ts.map +1 -0
  48. package/esm/src/schemas/info/accounts.js +623 -0
  49. package/esm/src/schemas/info/accounts.js.map +1 -0
  50. package/esm/src/schemas/info/assets.d.ts +974 -0
  51. package/esm/src/schemas/info/assets.d.ts.map +1 -0
  52. package/esm/src/schemas/info/assets.js +285 -0
  53. package/esm/src/schemas/info/assets.js.map +1 -0
  54. package/esm/src/schemas/info/markets.d.ts +155 -0
  55. package/esm/src/schemas/info/markets.d.ts.map +1 -0
  56. package/esm/src/schemas/info/markets.js +70 -0
  57. package/esm/src/schemas/info/markets.js.map +1 -0
  58. package/esm/src/schemas/info/orders.d.ts +957 -0
  59. package/esm/src/schemas/info/orders.d.ts.map +1 -0
  60. package/esm/src/schemas/info/orders.js +298 -0
  61. package/esm/src/schemas/info/orders.js.map +1 -0
  62. package/esm/src/schemas/info/requests.d.ts +924 -0
  63. package/esm/src/schemas/info/requests.d.ts.map +1 -0
  64. package/esm/src/schemas/info/requests.js +687 -0
  65. package/esm/src/schemas/info/requests.js.map +1 -0
  66. package/esm/src/schemas/info/validators.d.ts +326 -0
  67. package/esm/src/schemas/info/validators.d.ts.map +1 -0
  68. package/esm/src/schemas/info/validators.js +126 -0
  69. package/esm/src/schemas/info/validators.js.map +1 -0
  70. package/esm/src/schemas/info/vaults.d.ts +447 -0
  71. package/esm/src/schemas/info/vaults.d.ts.map +1 -0
  72. package/esm/src/schemas/info/vaults.js +111 -0
  73. package/esm/src/schemas/info/vaults.js.map +1 -0
  74. package/esm/src/schemas/mod.d.ts +101 -0
  75. package/esm/src/schemas/mod.d.ts.map +1 -0
  76. package/esm/src/schemas/mod.js +115 -0
  77. package/esm/src/schemas/mod.js.map +1 -0
  78. package/esm/src/schemas/subscriptions/requests.d.ts +332 -0
  79. package/esm/src/schemas/subscriptions/requests.d.ts.map +1 -0
  80. package/esm/src/schemas/subscriptions/requests.js +259 -0
  81. package/esm/src/schemas/subscriptions/requests.js.map +1 -0
  82. package/esm/src/schemas/subscriptions/responses.d.ts +3643 -0
  83. package/esm/src/schemas/subscriptions/responses.d.ts.map +1 -0
  84. package/esm/src/schemas/subscriptions/responses.js +234 -0
  85. package/esm/src/schemas/subscriptions/responses.js.map +1 -0
  86. package/esm/src/signing/_signTypedData/ethers.js +1 -0
  87. package/esm/src/signing/_signTypedData/ethers.js.map +1 -0
  88. package/esm/src/signing/_signTypedData/mod.js +1 -0
  89. package/esm/src/signing/_signTypedData/mod.js.map +1 -0
  90. package/esm/src/signing/_signTypedData/private_key.js +1 -0
  91. package/esm/src/signing/_signTypedData/private_key.js.map +1 -0
  92. package/esm/src/signing/_signTypedData/viem.js +1 -0
  93. package/esm/src/signing/_signTypedData/viem.js.map +1 -0
  94. package/esm/src/signing/mod.d.ts +109 -29
  95. package/esm/src/signing/mod.d.ts.map +1 -1
  96. package/esm/src/signing/mod.js +136 -29
  97. package/esm/src/signing/mod.js.map +1 -0
  98. package/esm/src/transports/base.d.ts +4 -4
  99. package/esm/src/transports/base.d.ts.map +1 -1
  100. package/esm/src/transports/base.js +3 -2
  101. package/esm/src/transports/base.js.map +1 -0
  102. package/esm/src/transports/http/http_transport.d.ts +3 -2
  103. package/esm/src/transports/http/http_transport.d.ts.map +1 -1
  104. package/esm/src/transports/http/http_transport.js +1 -0
  105. package/esm/src/transports/http/http_transport.js.map +1 -0
  106. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  107. package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  108. package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -0
  109. package/esm/src/transports/websocket/_hyperliquid_event_target.js.map +1 -0
  110. package/esm/src/transports/websocket/_reconnecting_websocket.js +1 -0
  111. package/esm/src/transports/websocket/_reconnecting_websocket.js.map +1 -0
  112. package/esm/src/transports/websocket/_websocket_async_request.js +1 -0
  113. package/esm/src/transports/websocket/_websocket_async_request.js.map +1 -0
  114. package/esm/src/transports/websocket/websocket_transport.d.ts +9 -1
  115. package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  116. package/esm/src/transports/websocket/websocket_transport.js +4 -0
  117. package/esm/src/transports/websocket/websocket_transport.js.map +1 -0
  118. package/package.json +6 -5
  119. package/script/mod.d.ts +11 -11
  120. package/script/mod.d.ts.map +1 -1
  121. package/script/mod.js +2 -1
  122. package/script/mod.js.map +1 -0
  123. package/script/src/clients/exchange.d.ts +29 -25
  124. package/script/src/clients/exchange.d.ts.map +1 -1
  125. package/script/src/clients/exchange.js +60 -59
  126. package/script/src/clients/exchange.js.map +1 -0
  127. package/script/src/clients/info.d.ts +80 -20
  128. package/script/src/clients/info.d.ts.map +1 -1
  129. package/script/src/clients/info.js +312 -73
  130. package/script/src/clients/info.js.map +1 -0
  131. package/script/src/clients/multiSign.d.ts +11 -7
  132. package/script/src/clients/multiSign.d.ts.map +1 -1
  133. package/script/src/clients/multiSign.js +2 -1
  134. package/script/src/clients/multiSign.js.map +1 -0
  135. package/script/src/clients/subscription.d.ts +9 -9
  136. package/script/src/clients/subscription.d.ts.map +1 -1
  137. package/script/src/clients/subscription.js +29 -27
  138. package/script/src/clients/subscription.js.map +1 -0
  139. package/script/src/{base.d.ts → errors.d.ts} +1 -1
  140. package/script/src/errors.d.ts.map +1 -0
  141. package/script/src/{base.js → errors.js} +1 -0
  142. package/script/src/errors.js.map +1 -0
  143. package/script/src/schemas/_base.d.ts +14 -0
  144. package/script/src/schemas/_base.d.ts.map +1 -0
  145. package/script/src/schemas/_base.js +51 -0
  146. package/script/src/schemas/_base.js.map +1 -0
  147. package/script/src/schemas/exchange/requests.d.ts +8953 -0
  148. package/script/src/schemas/exchange/requests.d.ts.map +1 -0
  149. package/script/src/schemas/exchange/requests.js +1450 -0
  150. package/script/src/schemas/exchange/requests.js.map +1 -0
  151. package/script/src/schemas/exchange/responses.d.ts +567 -0
  152. package/script/src/schemas/exchange/responses.d.ts.map +1 -0
  153. package/script/src/schemas/exchange/responses.js +280 -0
  154. package/script/src/schemas/exchange/responses.js.map +1 -0
  155. package/script/src/schemas/explorer/requests.d.ts +44 -0
  156. package/script/src/schemas/explorer/requests.d.ts.map +1 -0
  157. package/script/src/schemas/explorer/requests.js +69 -0
  158. package/script/src/schemas/explorer/requests.js.map +1 -0
  159. package/script/src/schemas/explorer/responses.d.ts +360 -0
  160. package/script/src/schemas/explorer/responses.d.ts.map +1 -0
  161. package/script/src/schemas/explorer/responses.js +93 -0
  162. package/script/src/schemas/explorer/responses.js.map +1 -0
  163. package/script/src/schemas/info/accounts.d.ts +2159 -0
  164. package/script/src/schemas/info/accounts.d.ts.map +1 -0
  165. package/script/src/schemas/info/accounts.js +659 -0
  166. package/script/src/schemas/info/accounts.js.map +1 -0
  167. package/script/src/schemas/info/assets.d.ts +974 -0
  168. package/script/src/schemas/info/assets.d.ts.map +1 -0
  169. package/script/src/schemas/info/assets.js +321 -0
  170. package/script/src/schemas/info/assets.js.map +1 -0
  171. package/script/src/schemas/info/markets.d.ts +155 -0
  172. package/script/src/schemas/info/markets.d.ts.map +1 -0
  173. package/script/src/schemas/info/markets.js +106 -0
  174. package/script/src/schemas/info/markets.js.map +1 -0
  175. package/script/src/schemas/info/orders.d.ts +957 -0
  176. package/script/src/schemas/info/orders.d.ts.map +1 -0
  177. package/script/src/schemas/info/orders.js +334 -0
  178. package/script/src/schemas/info/orders.js.map +1 -0
  179. package/script/src/schemas/info/requests.d.ts +924 -0
  180. package/script/src/schemas/info/requests.d.ts.map +1 -0
  181. package/script/src/schemas/info/requests.js +724 -0
  182. package/script/src/schemas/info/requests.js.map +1 -0
  183. package/script/src/schemas/info/validators.d.ts +326 -0
  184. package/script/src/schemas/info/validators.d.ts.map +1 -0
  185. package/script/src/schemas/info/validators.js +162 -0
  186. package/script/src/schemas/info/validators.js.map +1 -0
  187. package/script/src/schemas/info/vaults.d.ts +447 -0
  188. package/script/src/schemas/info/vaults.d.ts.map +1 -0
  189. package/script/src/schemas/info/vaults.js +147 -0
  190. package/script/src/schemas/info/vaults.js.map +1 -0
  191. package/script/src/schemas/mod.d.ts +101 -0
  192. package/script/src/schemas/mod.d.ts.map +1 -0
  193. package/script/src/schemas/mod.js +157 -0
  194. package/script/src/schemas/mod.js.map +1 -0
  195. package/script/src/schemas/subscriptions/requests.d.ts +332 -0
  196. package/script/src/schemas/subscriptions/requests.d.ts.map +1 -0
  197. package/script/src/schemas/subscriptions/requests.js +295 -0
  198. package/script/src/schemas/subscriptions/requests.js.map +1 -0
  199. package/script/src/schemas/subscriptions/responses.d.ts +3643 -0
  200. package/script/src/schemas/subscriptions/responses.d.ts.map +1 -0
  201. package/script/src/schemas/subscriptions/responses.js +270 -0
  202. package/script/src/schemas/subscriptions/responses.js.map +1 -0
  203. package/script/src/signing/_signTypedData/ethers.js +1 -0
  204. package/script/src/signing/_signTypedData/ethers.js.map +1 -0
  205. package/script/src/signing/_signTypedData/mod.js +1 -0
  206. package/script/src/signing/_signTypedData/mod.js.map +1 -0
  207. package/script/src/signing/_signTypedData/private_key.js +1 -0
  208. package/script/src/signing/_signTypedData/private_key.js.map +1 -0
  209. package/script/src/signing/_signTypedData/viem.js +1 -0
  210. package/script/src/signing/_signTypedData/viem.js.map +1 -0
  211. package/script/src/signing/mod.d.ts +109 -29
  212. package/script/src/signing/mod.d.ts.map +1 -1
  213. package/script/src/signing/mod.js +138 -33
  214. package/script/src/signing/mod.js.map +1 -0
  215. package/script/src/transports/base.d.ts +4 -4
  216. package/script/src/transports/base.d.ts.map +1 -1
  217. package/script/src/transports/base.js +4 -3
  218. package/script/src/transports/base.js.map +1 -0
  219. package/script/src/transports/http/http_transport.d.ts +3 -2
  220. package/script/src/transports/http/http_transport.d.ts.map +1 -1
  221. package/script/src/transports/http/http_transport.js +1 -0
  222. package/script/src/transports/http/http_transport.js.map +1 -0
  223. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
  224. package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
  225. package/script/src/transports/websocket/_hyperliquid_event_target.js +1 -0
  226. package/script/src/transports/websocket/_hyperliquid_event_target.js.map +1 -0
  227. package/script/src/transports/websocket/_reconnecting_websocket.js +1 -0
  228. package/script/src/transports/websocket/_reconnecting_websocket.js.map +1 -0
  229. package/script/src/transports/websocket/_websocket_async_request.js +1 -0
  230. package/script/src/transports/websocket/_websocket_async_request.js.map +1 -0
  231. package/script/src/transports/websocket/websocket_transport.d.ts +9 -1
  232. package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
  233. package/script/src/transports/websocket/websocket_transport.js +4 -0
  234. package/script/src/transports/websocket/websocket_transport.js.map +1 -0
  235. package/src/mod.ts +28 -0
  236. package/src/src/clients/exchange.ts +2246 -0
  237. package/src/src/clients/info.ts +2076 -0
  238. package/src/src/clients/multiSign.ts +183 -0
  239. package/src/src/clients/subscription.ts +841 -0
  240. package/src/src/errors.ts +7 -0
  241. package/src/src/schemas/_base.ts +43 -0
  242. package/src/src/schemas/exchange/requests.ts +3057 -0
  243. package/src/src/schemas/exchange/responses.ts +540 -0
  244. package/src/src/schemas/explorer/requests.ts +65 -0
  245. package/src/src/schemas/explorer/responses.ts +138 -0
  246. package/src/src/schemas/info/accounts.ts +1490 -0
  247. package/src/src/schemas/info/assets.ts +693 -0
  248. package/src/src/schemas/info/markets.ts +171 -0
  249. package/src/src/schemas/info/orders.ts +597 -0
  250. package/src/src/schemas/info/requests.ts +1369 -0
  251. package/src/src/schemas/info/validators.ts +299 -0
  252. package/src/src/schemas/info/vaults.ts +262 -0
  253. package/src/src/schemas/mod.ts +121 -0
  254. package/src/src/schemas/subscriptions/requests.ts +504 -0
  255. package/src/src/schemas/subscriptions/responses.ts +576 -0
  256. package/src/src/signing/_signTypedData/ethers.ts +59 -0
  257. package/src/src/signing/_signTypedData/mod.ts +121 -0
  258. package/src/src/signing/_signTypedData/private_key.ts +229 -0
  259. package/src/src/signing/_signTypedData/viem.ts +55 -0
  260. package/src/src/signing/mod.ts +572 -0
  261. package/src/src/transports/base.ts +54 -0
  262. package/src/src/transports/http/http_transport.ts +208 -0
  263. package/src/src/transports/websocket/_hyperliquid_event_target.ts +118 -0
  264. package/src/src/transports/websocket/_reconnecting_websocket.ts +404 -0
  265. package/src/src/transports/websocket/_websocket_async_request.ts +229 -0
  266. package/src/src/transports/websocket/websocket_transport.ts +394 -0
  267. package/esm/src/base.d.ts.map +0 -1
  268. package/esm/src/signing/_sorter.d.ts +0 -127
  269. package/esm/src/signing/_sorter.d.ts.map +0 -1
  270. package/esm/src/signing/_sorter.js +0 -693
  271. package/esm/src/types/exchange/requests.d.ts +0 -1345
  272. package/esm/src/types/exchange/requests.d.ts.map +0 -1
  273. package/esm/src/types/exchange/requests.js +0 -1
  274. package/esm/src/types/exchange/responses.d.ts +0 -233
  275. package/esm/src/types/exchange/responses.d.ts.map +0 -1
  276. package/esm/src/types/exchange/responses.js +0 -1
  277. package/esm/src/types/explorer/requests.d.ts +0 -32
  278. package/esm/src/types/explorer/requests.d.ts.map +0 -1
  279. package/esm/src/types/explorer/requests.js +0 -1
  280. package/esm/src/types/explorer/responses.d.ts +0 -58
  281. package/esm/src/types/explorer/responses.d.ts.map +0 -1
  282. package/esm/src/types/explorer/responses.js +0 -1
  283. package/esm/src/types/info/accounts.d.ts +0 -864
  284. package/esm/src/types/info/accounts.d.ts.map +0 -1
  285. package/esm/src/types/info/accounts.js +0 -1
  286. package/esm/src/types/info/assets.d.ts +0 -354
  287. package/esm/src/types/info/assets.d.ts.map +0 -1
  288. package/esm/src/types/info/assets.js +0 -1
  289. package/esm/src/types/info/markets.d.ts +0 -79
  290. package/esm/src/types/info/markets.d.ts.map +0 -1
  291. package/esm/src/types/info/markets.js +0 -1
  292. package/esm/src/types/info/orders.d.ts +0 -266
  293. package/esm/src/types/info/orders.d.ts.map +0 -1
  294. package/esm/src/types/info/orders.js +0 -1
  295. package/esm/src/types/info/requests.d.ts +0 -640
  296. package/esm/src/types/info/requests.d.ts.map +0 -1
  297. package/esm/src/types/info/requests.js +0 -1
  298. package/esm/src/types/info/validators.d.ts +0 -147
  299. package/esm/src/types/info/validators.d.ts.map +0 -1
  300. package/esm/src/types/info/validators.js +0 -1
  301. package/esm/src/types/info/vaults.d.ts +0 -119
  302. package/esm/src/types/info/vaults.d.ts.map +0 -1
  303. package/esm/src/types/info/vaults.js +0 -1
  304. package/esm/src/types/mod.d.ts +0 -38
  305. package/esm/src/types/mod.d.ts.map +0 -1
  306. package/esm/src/types/mod.js +0 -24
  307. package/esm/src/types/subscriptions/requests.d.ts +0 -154
  308. package/esm/src/types/subscriptions/requests.d.ts.map +0 -1
  309. package/esm/src/types/subscriptions/requests.js +0 -1
  310. package/esm/src/types/subscriptions/responses.d.ts +0 -238
  311. package/esm/src/types/subscriptions/responses.d.ts.map +0 -1
  312. package/esm/src/types/subscriptions/responses.js +0 -1
  313. package/script/src/base.d.ts.map +0 -1
  314. package/script/src/signing/_sorter.d.ts +0 -127
  315. package/script/src/signing/_sorter.d.ts.map +0 -1
  316. package/script/src/signing/_sorter.js +0 -696
  317. package/script/src/types/exchange/requests.d.ts +0 -1345
  318. package/script/src/types/exchange/requests.d.ts.map +0 -1
  319. package/script/src/types/exchange/requests.js +0 -2
  320. package/script/src/types/exchange/responses.d.ts +0 -233
  321. package/script/src/types/exchange/responses.d.ts.map +0 -1
  322. package/script/src/types/exchange/responses.js +0 -2
  323. package/script/src/types/explorer/requests.d.ts +0 -32
  324. package/script/src/types/explorer/requests.d.ts.map +0 -1
  325. package/script/src/types/explorer/requests.js +0 -2
  326. package/script/src/types/explorer/responses.d.ts +0 -58
  327. package/script/src/types/explorer/responses.d.ts.map +0 -1
  328. package/script/src/types/explorer/responses.js +0 -2
  329. package/script/src/types/info/accounts.d.ts +0 -864
  330. package/script/src/types/info/accounts.d.ts.map +0 -1
  331. package/script/src/types/info/accounts.js +0 -2
  332. package/script/src/types/info/assets.d.ts +0 -354
  333. package/script/src/types/info/assets.d.ts.map +0 -1
  334. package/script/src/types/info/assets.js +0 -2
  335. package/script/src/types/info/markets.d.ts +0 -79
  336. package/script/src/types/info/markets.d.ts.map +0 -1
  337. package/script/src/types/info/markets.js +0 -2
  338. package/script/src/types/info/orders.d.ts +0 -266
  339. package/script/src/types/info/orders.d.ts.map +0 -1
  340. package/script/src/types/info/orders.js +0 -2
  341. package/script/src/types/info/requests.d.ts +0 -640
  342. package/script/src/types/info/requests.d.ts.map +0 -1
  343. package/script/src/types/info/requests.js +0 -2
  344. package/script/src/types/info/validators.d.ts +0 -147
  345. package/script/src/types/info/validators.d.ts.map +0 -1
  346. package/script/src/types/info/validators.js +0 -2
  347. package/script/src/types/info/vaults.d.ts +0 -119
  348. package/script/src/types/info/vaults.d.ts.map +0 -1
  349. package/script/src/types/info/vaults.js +0 -2
  350. package/script/src/types/mod.d.ts +0 -38
  351. package/script/src/types/mod.d.ts.map +0 -1
  352. package/script/src/types/mod.js +0 -25
  353. package/script/src/types/subscriptions/requests.d.ts +0 -154
  354. package/script/src/types/subscriptions/requests.d.ts.map +0 -1
  355. package/script/src/types/subscriptions/requests.js +0 -2
  356. package/script/src/types/subscriptions/responses.d.ts +0 -238
  357. package/script/src/types/subscriptions/responses.d.ts.map +0 -1
  358. package/script/src/types/subscriptions/responses.js +0 -2
@@ -0,0 +1,208 @@
1
+ import { TransportError } from "../base.js";
2
+ import type { IRequestTransport } from "../base.js";
3
+
4
+ type MaybePromise<T> = T | Promise<T>;
5
+
6
+ /** Error thrown when an HTTP request fails. */
7
+ export class HttpRequestError extends TransportError {
8
+ response?: Response;
9
+ body?: string;
10
+
11
+ constructor(args?: { response?: Response; body?: string }, options?: ErrorOptions) {
12
+ const { response, body } = args ?? {};
13
+
14
+ let message: string;
15
+ if (response) {
16
+ message = `${response.status} ${response.statusText}`.trim();
17
+ if (body) message += ` - ${body}`;
18
+ } else {
19
+ message = `Unknown error while making an HTTP request: ${options?.cause}`;
20
+ }
21
+
22
+ super(message, options);
23
+ this.name = "HttpRequestError";
24
+ this.response = response;
25
+ this.body = body;
26
+ }
27
+ }
28
+
29
+ /** Configuration options for the HTTP transport layer. */
30
+ export interface HttpTransportOptions {
31
+ /**
32
+ * Specifies whether to use the testnet API endpoints from the {@linkcode server} property.
33
+ * @defaultValue `false`
34
+ */
35
+ isTestnet?: boolean;
36
+
37
+ /**
38
+ * Request timeout in ms. Set to `null` to disable.
39
+ * @defaultValue `10_000`
40
+ */
41
+ timeout?: number | null;
42
+
43
+ /**
44
+ * Custom server to use for API requests.
45
+ * @defaultValue `https://api.hyperliquid.xyz` for mainnet and `https://api.hyperliquid-testnet.xyz` for testnet.
46
+ */
47
+ server?: {
48
+ mainnet?: { api?: string | URL; rpc?: string | URL };
49
+ testnet?: { api?: string | URL; rpc?: string | URL };
50
+ };
51
+
52
+ /** A custom {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/RequestInit | RequestInit} that is merged with a fetch request. */
53
+ fetchOptions?: Omit<RequestInit, "body" | "method">;
54
+
55
+ /**
56
+ * A callback function that is called before the request is sent.
57
+ * @param request - An original request to send.
58
+ * @returns If returned a {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/Request/Request | Request}, it will replace the original request.
59
+ */
60
+ onRequest?: (request: Request) => MaybePromise<Request | void | null | undefined>;
61
+
62
+ /**
63
+ * A callback function that is called after the response is received.
64
+ * @param response - An original response to process.
65
+ * @returns If returned a {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/Response/Response | Response}, it will replace the original response.
66
+ */
67
+ onResponse?: (response: Response) => MaybePromise<Response | void | null | undefined>;
68
+ }
69
+
70
+ /** HTTP implementation of the REST transport interface. */
71
+ export class HttpTransport implements IRequestTransport, HttpTransportOptions {
72
+ isTestnet: boolean;
73
+ timeout: number | null;
74
+ server: {
75
+ mainnet: { api: string | URL; rpc: string | URL };
76
+ testnet: { api: string | URL; rpc: string | URL };
77
+ };
78
+ fetchOptions: Omit<RequestInit, "body" | "method">;
79
+ onRequest?: (request: Request) => MaybePromise<Request | void | null | undefined>;
80
+ onResponse?: (response: Response) => MaybePromise<Response | void | null | undefined>;
81
+
82
+ /**
83
+ * Creates a new HTTP transport instance.
84
+ * @param options - Configuration options for the HTTP transport layer.
85
+ */
86
+ constructor(options?: HttpTransportOptions) {
87
+ this.isTestnet = options?.isTestnet ?? false;
88
+ this.timeout = options?.timeout === undefined ? 10_000 : options.timeout;
89
+ this.server = {
90
+ mainnet: {
91
+ api: options?.server?.mainnet?.api ?? "https://api.hyperliquid.xyz",
92
+ rpc: options?.server?.mainnet?.rpc ?? "https://rpc.hyperliquid.xyz",
93
+ },
94
+ testnet: {
95
+ api: options?.server?.testnet?.api ?? "https://api.hyperliquid-testnet.xyz",
96
+ rpc: options?.server?.testnet?.rpc ?? "https://rpc.hyperliquid-testnet.xyz",
97
+ },
98
+ };
99
+ this.fetchOptions = options?.fetchOptions ?? {};
100
+ this.onRequest = options?.onRequest;
101
+ this.onResponse = options?.onResponse;
102
+ }
103
+
104
+ /**
105
+ * Sends a request to the Hyperliquid API via fetch.
106
+ * @param endpoint - The API endpoint to send the request to.
107
+ * @param payload - The payload to send with the request.
108
+ * @param signal - An {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal | AbortSignal}. If this option is set, the request can be canceled by calling {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort | abort()} on the corresponding {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/AbortController | AbortController}.
109
+ * @returns A promise that resolves with parsed JSON response body.
110
+ *
111
+ * @throws {HttpRequestError} Thrown when the HTTP request fails.
112
+ */
113
+ async request<T>(endpoint: "info" | "exchange" | "explorer", payload: unknown, signal?: AbortSignal): Promise<T> {
114
+ try {
115
+ // Construct a Request
116
+ const url = new URL(
117
+ endpoint,
118
+ this.server[this.isTestnet ? "testnet" : "mainnet"][endpoint === "explorer" ? "rpc" : "api"],
119
+ );
120
+ const init = mergeRequestInit(
121
+ {
122
+ body: JSON.stringify(payload),
123
+ headers: {
124
+ "Accept-Encoding": "gzip, deflate, br, zstd",
125
+ "Content-Type": "application/json",
126
+ },
127
+ keepalive: true,
128
+ method: "POST",
129
+ signal: this.timeout ? AbortSignal.timeout(this.timeout) : undefined,
130
+ },
131
+ this.fetchOptions,
132
+ { signal },
133
+ );
134
+ let request = new Request(url, init);
135
+
136
+ // Call the onRequest callback, if provided
137
+ if (this.onRequest) {
138
+ const customRequest = await this.onRequest(request);
139
+ if (customRequest instanceof Request) request = customRequest;
140
+ }
141
+
142
+ // Send the Request and wait for a Response
143
+ let response = await fetch(request);
144
+
145
+ // Call the onResponse callback, if provided
146
+ if (this.onResponse) {
147
+ const customResponse = await this.onResponse(response);
148
+ if (customResponse instanceof Response) response = customResponse;
149
+ }
150
+
151
+ // Validate the Response
152
+ if (!response.ok || !response.headers.get("Content-Type")?.includes("application/json")) {
153
+ // Unload the response body to prevent memory leaks
154
+ const body = await response.text().catch(() => undefined);
155
+ throw new HttpRequestError({ response, body });
156
+ }
157
+
158
+ // Parse the response body
159
+ const body = await response.json();
160
+
161
+ // Check if the response is an error
162
+ if (body?.type === "error") {
163
+ throw new HttpRequestError({ response, body: body?.message });
164
+ }
165
+
166
+ // Return the response body
167
+ return body;
168
+ } catch (error) {
169
+ if (error instanceof TransportError) throw error; // Re-throw known errors
170
+ throw new HttpRequestError(undefined, { cause: error });
171
+ }
172
+ }
173
+ }
174
+
175
+ /** Merges multiple {@linkcode HeadersInit} into one {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers | Headers}. */
176
+ function mergeHeadersInit(...inits: HeadersInit[]): Headers {
177
+ if (inits.length === 0 || inits.length === 1) {
178
+ return new Headers(inits[0] as HeadersInit | undefined);
179
+ }
180
+
181
+ const merged = new Headers();
182
+ for (const headers of inits) {
183
+ const iterator = Symbol.iterator in headers ? headers : Object.entries(headers);
184
+ for (const [key, value] of iterator) {
185
+ merged.set(key, value);
186
+ }
187
+ }
188
+ return merged;
189
+ }
190
+
191
+ /** Merges multiple {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/RequestInit | RequestInit} into one {@linkcode https://developer.mozilla.org/en-US/docs/Web/API/RequestInit | RequestInit}. */
192
+ function mergeRequestInit(...inits: RequestInit[]): RequestInit {
193
+ const merged = inits.reduce((acc, init) => ({ ...acc, ...init }), {});
194
+
195
+ const headersList = inits.map((init) => init.headers)
196
+ .filter((headers) => typeof headers === "object");
197
+ if (headersList.length > 0) {
198
+ merged.headers = mergeHeadersInit(...headersList);
199
+ }
200
+
201
+ const signals = inits.map((init) => init.signal)
202
+ .filter((signal) => signal instanceof AbortSignal);
203
+ if (signals.length > 0) {
204
+ merged.signal = signals.length > 1 ? AbortSignal.any(signals) : signals[0];
205
+ }
206
+
207
+ return merged;
208
+ }
@@ -0,0 +1,118 @@
1
+ import type { BlockDetails, TxDetails } from "../../schemas/mod.js";
2
+
3
+ /** Represents a message from the Hyperliquid WebSocket API. */
4
+ interface HyperliquidMsg {
5
+ /** Event channel name. */
6
+ channel: string;
7
+ /** Channel-specific data. */
8
+ data: unknown;
9
+ }
10
+
11
+ /** Response to subscribe to or unsubscribe from an event. */
12
+ interface SubscriptionResponse {
13
+ /** Type of subscription operation. */
14
+ method: "subscribe" | "unsubscribe";
15
+ /** Original subscription request. */
16
+ subscription: unknown;
17
+ }
18
+
19
+ /** Response to post request. */
20
+ interface PostResponse {
21
+ /** Unique request identifier. */
22
+ id: number;
23
+ /** Server response. */
24
+ response:
25
+ /** Response containing requested information. */
26
+ | {
27
+ /** Indicates that this is an informational response. */
28
+ type: "info";
29
+ /** Contains the information data. */
30
+ payload: {
31
+ /** Type of information being returned. */
32
+ type: string;
33
+ /** Information specific data. */
34
+ data: unknown;
35
+ };
36
+ }
37
+ /** Response containing action result. */
38
+ | {
39
+ /** Indicates that this is an action response. */
40
+ type: "action";
41
+ /** Action result. */
42
+ payload: {
43
+ /** Response status indicating success or failure of the action. */
44
+ status: "ok" | "err";
45
+ /** Success data or error message. */
46
+ response:
47
+ | {
48
+ /** Type of operation. */
49
+ type: string;
50
+ /** Specific data for the action. */
51
+ data?: unknown;
52
+ }
53
+ | string;
54
+ };
55
+ };
56
+ }
57
+
58
+ /** Base system events and dynamic channel events for Hyperliquid WebSocket API. */
59
+ export interface HyperliquidEventMap {
60
+ subscriptionResponse: CustomEvent<SubscriptionResponse>;
61
+ post: CustomEvent<PostResponse>;
62
+ error: CustomEvent<string>;
63
+ pong: CustomEvent<undefined>;
64
+ _explorerBlock: CustomEvent<Omit<BlockDetails, "txs">[]>;
65
+ _explorerTxs: CustomEvent<TxDetails[]>;
66
+ // deno-lint-ignore no-explicit-any
67
+ [key: string]: CustomEvent<any>;
68
+ }
69
+
70
+ /** Listens for WebSocket messages and sends them as Hyperliquid typed events. */
71
+ export class HyperliquidEventTarget extends EventTarget {
72
+ constructor(socket: WebSocket) {
73
+ super();
74
+ socket.addEventListener("message", (event) => {
75
+ try {
76
+ const msg = JSON.parse(event.data) as unknown;
77
+ if (isHyperliquidMsg(msg)) {
78
+ this.dispatchEvent(new CustomEvent(msg.channel, { detail: msg.data }));
79
+ } else if (isExplorerBlockMsg(msg)) {
80
+ this.dispatchEvent(new CustomEvent("_explorerBlock", { detail: msg }));
81
+ } else if (isExplorerTxsMsg(msg)) {
82
+ this.dispatchEvent(new CustomEvent("_explorerTxs", { detail: msg }));
83
+ }
84
+ } catch {
85
+ // Ignore JSON parsing errors
86
+ }
87
+ });
88
+ }
89
+ }
90
+
91
+ /** Type guard for Hyperliquid messages. */
92
+ function isHyperliquidMsg(value: unknown): value is HyperliquidMsg {
93
+ return typeof value === "object" && value !== null &&
94
+ "channel" in value && typeof value.channel === "string";
95
+ }
96
+
97
+ /** Type guard for explorer block messages. */
98
+ function isExplorerBlockMsg(value: unknown): value is Omit<BlockDetails, "txs">[] {
99
+ return Array.isArray(value) && value.length > 0 &&
100
+ (typeof value[0] === "object" && value[0] !== null && !Array.isArray(value[0]) &&
101
+ "height" in value[0] && typeof value[0].height === "number" &&
102
+ "blockTime" in value[0] && typeof value[0].blockTime === "number" &&
103
+ "hash" in value[0] && typeof value[0].hash === "string" &&
104
+ "proposer" in value[0] && typeof value[0].proposer === "string" &&
105
+ "numTxs" in value[0] && typeof value[0].numTxs === "number");
106
+ }
107
+
108
+ /** Type guard for explorer transactions messages. */
109
+ function isExplorerTxsMsg(value: unknown): value is TxDetails[] {
110
+ return Array.isArray(value) && value.length > 0 &&
111
+ (typeof value[0] === "object" && value[0] !== null && !Array.isArray(value[0]) &&
112
+ "action" in value[0] && typeof value[0].action === "object" && value[0].action !== null &&
113
+ "block" in value[0] && typeof value[0].block === "number" &&
114
+ "error" in value[0] && (typeof value[0].error === "string" || value[0].error === null) &&
115
+ "hash" in value[0] && typeof value[0].hash === "string" &&
116
+ "time" in value[0] && typeof value[0].time === "number" &&
117
+ "user" in value[0] && typeof value[0].user === "string");
118
+ }