@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.
- package/README.md +141 -32
- package/esm/mod.d.ts +11 -11
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +2 -1
- package/esm/mod.js.map +1 -0
- package/esm/src/clients/exchange.d.ts +29 -25
- package/esm/src/clients/exchange.d.ts.map +1 -1
- package/esm/src/clients/exchange.js +54 -53
- package/esm/src/clients/exchange.js.map +1 -0
- package/esm/src/clients/info.d.ts +80 -20
- package/esm/src/clients/info.d.ts.map +1 -1
- package/esm/src/clients/info.js +312 -73
- package/esm/src/clients/info.js.map +1 -0
- package/esm/src/clients/multiSign.d.ts +11 -7
- package/esm/src/clients/multiSign.d.ts.map +1 -1
- package/esm/src/clients/multiSign.js +2 -1
- package/esm/src/clients/multiSign.js.map +1 -0
- package/esm/src/clients/subscription.d.ts +9 -9
- package/esm/src/clients/subscription.d.ts.map +1 -1
- package/esm/src/clients/subscription.js +29 -27
- package/esm/src/clients/subscription.js.map +1 -0
- package/esm/src/{base.d.ts → errors.d.ts} +1 -1
- package/esm/src/errors.d.ts.map +1 -0
- package/esm/src/{base.js → errors.js} +1 -0
- package/esm/src/errors.js.map +1 -0
- package/esm/src/schemas/_base.d.ts +14 -0
- package/esm/src/schemas/_base.d.ts.map +1 -0
- package/esm/src/schemas/_base.js +15 -0
- package/esm/src/schemas/_base.js.map +1 -0
- package/esm/src/schemas/exchange/requests.d.ts +8953 -0
- package/esm/src/schemas/exchange/requests.d.ts.map +1 -0
- package/esm/src/schemas/exchange/requests.js +1414 -0
- package/esm/src/schemas/exchange/requests.js.map +1 -0
- package/esm/src/schemas/exchange/responses.d.ts +567 -0
- package/esm/src/schemas/exchange/responses.d.ts.map +1 -0
- package/esm/src/schemas/exchange/responses.js +244 -0
- package/esm/src/schemas/exchange/responses.js.map +1 -0
- package/esm/src/schemas/explorer/requests.d.ts +44 -0
- package/esm/src/schemas/explorer/requests.d.ts.map +1 -0
- package/esm/src/schemas/explorer/requests.js +33 -0
- package/esm/src/schemas/explorer/requests.js.map +1 -0
- package/esm/src/schemas/explorer/responses.d.ts +360 -0
- package/esm/src/schemas/explorer/responses.d.ts.map +1 -0
- package/esm/src/schemas/explorer/responses.js +57 -0
- package/esm/src/schemas/explorer/responses.js.map +1 -0
- package/esm/src/schemas/info/accounts.d.ts +2159 -0
- package/esm/src/schemas/info/accounts.d.ts.map +1 -0
- package/esm/src/schemas/info/accounts.js +623 -0
- package/esm/src/schemas/info/accounts.js.map +1 -0
- package/esm/src/schemas/info/assets.d.ts +974 -0
- package/esm/src/schemas/info/assets.d.ts.map +1 -0
- package/esm/src/schemas/info/assets.js +285 -0
- package/esm/src/schemas/info/assets.js.map +1 -0
- package/esm/src/schemas/info/markets.d.ts +155 -0
- package/esm/src/schemas/info/markets.d.ts.map +1 -0
- package/esm/src/schemas/info/markets.js +70 -0
- package/esm/src/schemas/info/markets.js.map +1 -0
- package/esm/src/schemas/info/orders.d.ts +957 -0
- package/esm/src/schemas/info/orders.d.ts.map +1 -0
- package/esm/src/schemas/info/orders.js +298 -0
- package/esm/src/schemas/info/orders.js.map +1 -0
- package/esm/src/schemas/info/requests.d.ts +924 -0
- package/esm/src/schemas/info/requests.d.ts.map +1 -0
- package/esm/src/schemas/info/requests.js +687 -0
- package/esm/src/schemas/info/requests.js.map +1 -0
- package/esm/src/schemas/info/validators.d.ts +326 -0
- package/esm/src/schemas/info/validators.d.ts.map +1 -0
- package/esm/src/schemas/info/validators.js +126 -0
- package/esm/src/schemas/info/validators.js.map +1 -0
- package/esm/src/schemas/info/vaults.d.ts +447 -0
- package/esm/src/schemas/info/vaults.d.ts.map +1 -0
- package/esm/src/schemas/info/vaults.js +111 -0
- package/esm/src/schemas/info/vaults.js.map +1 -0
- package/esm/src/schemas/mod.d.ts +101 -0
- package/esm/src/schemas/mod.d.ts.map +1 -0
- package/esm/src/schemas/mod.js +115 -0
- package/esm/src/schemas/mod.js.map +1 -0
- package/esm/src/schemas/subscriptions/requests.d.ts +332 -0
- package/esm/src/schemas/subscriptions/requests.d.ts.map +1 -0
- package/esm/src/schemas/subscriptions/requests.js +259 -0
- package/esm/src/schemas/subscriptions/requests.js.map +1 -0
- package/esm/src/schemas/subscriptions/responses.d.ts +3643 -0
- package/esm/src/schemas/subscriptions/responses.d.ts.map +1 -0
- package/esm/src/schemas/subscriptions/responses.js +234 -0
- package/esm/src/schemas/subscriptions/responses.js.map +1 -0
- package/esm/src/signing/_signTypedData/ethers.js +1 -0
- package/esm/src/signing/_signTypedData/ethers.js.map +1 -0
- package/esm/src/signing/_signTypedData/mod.js +1 -0
- package/esm/src/signing/_signTypedData/mod.js.map +1 -0
- package/esm/src/signing/_signTypedData/private_key.js +1 -0
- package/esm/src/signing/_signTypedData/private_key.js.map +1 -0
- package/esm/src/signing/_signTypedData/viem.js +1 -0
- package/esm/src/signing/_signTypedData/viem.js.map +1 -0
- package/esm/src/signing/mod.d.ts +109 -29
- package/esm/src/signing/mod.d.ts.map +1 -1
- package/esm/src/signing/mod.js +136 -29
- package/esm/src/signing/mod.js.map +1 -0
- package/esm/src/transports/base.d.ts +4 -4
- package/esm/src/transports/base.d.ts.map +1 -1
- package/esm/src/transports/base.js +3 -2
- package/esm/src/transports/base.js.map +1 -0
- package/esm/src/transports/http/http_transport.d.ts +3 -2
- package/esm/src/transports/http/http_transport.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.js +1 -0
- package/esm/src/transports/http/http_transport.js.map +1 -0
- package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
- package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
- package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -0
- package/esm/src/transports/websocket/_hyperliquid_event_target.js.map +1 -0
- package/esm/src/transports/websocket/_reconnecting_websocket.js +1 -0
- package/esm/src/transports/websocket/_reconnecting_websocket.js.map +1 -0
- package/esm/src/transports/websocket/_websocket_async_request.js +1 -0
- package/esm/src/transports/websocket/_websocket_async_request.js.map +1 -0
- package/esm/src/transports/websocket/websocket_transport.d.ts +9 -1
- package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/esm/src/transports/websocket/websocket_transport.js +4 -0
- package/esm/src/transports/websocket/websocket_transport.js.map +1 -0
- package/package.json +6 -5
- package/script/mod.d.ts +11 -11
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +2 -1
- package/script/mod.js.map +1 -0
- package/script/src/clients/exchange.d.ts +29 -25
- package/script/src/clients/exchange.d.ts.map +1 -1
- package/script/src/clients/exchange.js +60 -59
- package/script/src/clients/exchange.js.map +1 -0
- package/script/src/clients/info.d.ts +80 -20
- package/script/src/clients/info.d.ts.map +1 -1
- package/script/src/clients/info.js +312 -73
- package/script/src/clients/info.js.map +1 -0
- package/script/src/clients/multiSign.d.ts +11 -7
- package/script/src/clients/multiSign.d.ts.map +1 -1
- package/script/src/clients/multiSign.js +2 -1
- package/script/src/clients/multiSign.js.map +1 -0
- package/script/src/clients/subscription.d.ts +9 -9
- package/script/src/clients/subscription.d.ts.map +1 -1
- package/script/src/clients/subscription.js +29 -27
- package/script/src/clients/subscription.js.map +1 -0
- package/script/src/{base.d.ts → errors.d.ts} +1 -1
- package/script/src/errors.d.ts.map +1 -0
- package/script/src/{base.js → errors.js} +1 -0
- package/script/src/errors.js.map +1 -0
- package/script/src/schemas/_base.d.ts +14 -0
- package/script/src/schemas/_base.d.ts.map +1 -0
- package/script/src/schemas/_base.js +51 -0
- package/script/src/schemas/_base.js.map +1 -0
- package/script/src/schemas/exchange/requests.d.ts +8953 -0
- package/script/src/schemas/exchange/requests.d.ts.map +1 -0
- package/script/src/schemas/exchange/requests.js +1450 -0
- package/script/src/schemas/exchange/requests.js.map +1 -0
- package/script/src/schemas/exchange/responses.d.ts +567 -0
- package/script/src/schemas/exchange/responses.d.ts.map +1 -0
- package/script/src/schemas/exchange/responses.js +280 -0
- package/script/src/schemas/exchange/responses.js.map +1 -0
- package/script/src/schemas/explorer/requests.d.ts +44 -0
- package/script/src/schemas/explorer/requests.d.ts.map +1 -0
- package/script/src/schemas/explorer/requests.js +69 -0
- package/script/src/schemas/explorer/requests.js.map +1 -0
- package/script/src/schemas/explorer/responses.d.ts +360 -0
- package/script/src/schemas/explorer/responses.d.ts.map +1 -0
- package/script/src/schemas/explorer/responses.js +93 -0
- package/script/src/schemas/explorer/responses.js.map +1 -0
- package/script/src/schemas/info/accounts.d.ts +2159 -0
- package/script/src/schemas/info/accounts.d.ts.map +1 -0
- package/script/src/schemas/info/accounts.js +659 -0
- package/script/src/schemas/info/accounts.js.map +1 -0
- package/script/src/schemas/info/assets.d.ts +974 -0
- package/script/src/schemas/info/assets.d.ts.map +1 -0
- package/script/src/schemas/info/assets.js +321 -0
- package/script/src/schemas/info/assets.js.map +1 -0
- package/script/src/schemas/info/markets.d.ts +155 -0
- package/script/src/schemas/info/markets.d.ts.map +1 -0
- package/script/src/schemas/info/markets.js +106 -0
- package/script/src/schemas/info/markets.js.map +1 -0
- package/script/src/schemas/info/orders.d.ts +957 -0
- package/script/src/schemas/info/orders.d.ts.map +1 -0
- package/script/src/schemas/info/orders.js +334 -0
- package/script/src/schemas/info/orders.js.map +1 -0
- package/script/src/schemas/info/requests.d.ts +924 -0
- package/script/src/schemas/info/requests.d.ts.map +1 -0
- package/script/src/schemas/info/requests.js +724 -0
- package/script/src/schemas/info/requests.js.map +1 -0
- package/script/src/schemas/info/validators.d.ts +326 -0
- package/script/src/schemas/info/validators.d.ts.map +1 -0
- package/script/src/schemas/info/validators.js +162 -0
- package/script/src/schemas/info/validators.js.map +1 -0
- package/script/src/schemas/info/vaults.d.ts +447 -0
- package/script/src/schemas/info/vaults.d.ts.map +1 -0
- package/script/src/schemas/info/vaults.js +147 -0
- package/script/src/schemas/info/vaults.js.map +1 -0
- package/script/src/schemas/mod.d.ts +101 -0
- package/script/src/schemas/mod.d.ts.map +1 -0
- package/script/src/schemas/mod.js +157 -0
- package/script/src/schemas/mod.js.map +1 -0
- package/script/src/schemas/subscriptions/requests.d.ts +332 -0
- package/script/src/schemas/subscriptions/requests.d.ts.map +1 -0
- package/script/src/schemas/subscriptions/requests.js +295 -0
- package/script/src/schemas/subscriptions/requests.js.map +1 -0
- package/script/src/schemas/subscriptions/responses.d.ts +3643 -0
- package/script/src/schemas/subscriptions/responses.d.ts.map +1 -0
- package/script/src/schemas/subscriptions/responses.js +270 -0
- package/script/src/schemas/subscriptions/responses.js.map +1 -0
- package/script/src/signing/_signTypedData/ethers.js +1 -0
- package/script/src/signing/_signTypedData/ethers.js.map +1 -0
- package/script/src/signing/_signTypedData/mod.js +1 -0
- package/script/src/signing/_signTypedData/mod.js.map +1 -0
- package/script/src/signing/_signTypedData/private_key.js +1 -0
- package/script/src/signing/_signTypedData/private_key.js.map +1 -0
- package/script/src/signing/_signTypedData/viem.js +1 -0
- package/script/src/signing/_signTypedData/viem.js.map +1 -0
- package/script/src/signing/mod.d.ts +109 -29
- package/script/src/signing/mod.d.ts.map +1 -1
- package/script/src/signing/mod.js +138 -33
- package/script/src/signing/mod.js.map +1 -0
- package/script/src/transports/base.d.ts +4 -4
- package/script/src/transports/base.d.ts.map +1 -1
- package/script/src/transports/base.js +4 -3
- package/script/src/transports/base.js.map +1 -0
- package/script/src/transports/http/http_transport.d.ts +3 -2
- package/script/src/transports/http/http_transport.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.js +1 -0
- package/script/src/transports/http/http_transport.js.map +1 -0
- package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +1 -1
- package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
- package/script/src/transports/websocket/_hyperliquid_event_target.js +1 -0
- package/script/src/transports/websocket/_hyperliquid_event_target.js.map +1 -0
- package/script/src/transports/websocket/_reconnecting_websocket.js +1 -0
- package/script/src/transports/websocket/_reconnecting_websocket.js.map +1 -0
- package/script/src/transports/websocket/_websocket_async_request.js +1 -0
- package/script/src/transports/websocket/_websocket_async_request.js.map +1 -0
- package/script/src/transports/websocket/websocket_transport.d.ts +9 -1
- package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/script/src/transports/websocket/websocket_transport.js +4 -0
- package/script/src/transports/websocket/websocket_transport.js.map +1 -0
- package/src/mod.ts +28 -0
- package/src/src/clients/exchange.ts +2246 -0
- package/src/src/clients/info.ts +2076 -0
- package/src/src/clients/multiSign.ts +183 -0
- package/src/src/clients/subscription.ts +841 -0
- package/src/src/errors.ts +7 -0
- package/src/src/schemas/_base.ts +43 -0
- package/src/src/schemas/exchange/requests.ts +3057 -0
- package/src/src/schemas/exchange/responses.ts +540 -0
- package/src/src/schemas/explorer/requests.ts +65 -0
- package/src/src/schemas/explorer/responses.ts +138 -0
- package/src/src/schemas/info/accounts.ts +1490 -0
- package/src/src/schemas/info/assets.ts +693 -0
- package/src/src/schemas/info/markets.ts +171 -0
- package/src/src/schemas/info/orders.ts +597 -0
- package/src/src/schemas/info/requests.ts +1369 -0
- package/src/src/schemas/info/validators.ts +299 -0
- package/src/src/schemas/info/vaults.ts +262 -0
- package/src/src/schemas/mod.ts +121 -0
- package/src/src/schemas/subscriptions/requests.ts +504 -0
- package/src/src/schemas/subscriptions/responses.ts +576 -0
- package/src/src/signing/_signTypedData/ethers.ts +59 -0
- package/src/src/signing/_signTypedData/mod.ts +121 -0
- package/src/src/signing/_signTypedData/private_key.ts +229 -0
- package/src/src/signing/_signTypedData/viem.ts +55 -0
- package/src/src/signing/mod.ts +572 -0
- package/src/src/transports/base.ts +54 -0
- package/src/src/transports/http/http_transport.ts +208 -0
- package/src/src/transports/websocket/_hyperliquid_event_target.ts +118 -0
- package/src/src/transports/websocket/_reconnecting_websocket.ts +404 -0
- package/src/src/transports/websocket/_websocket_async_request.ts +229 -0
- package/src/src/transports/websocket/websocket_transport.ts +394 -0
- package/esm/src/base.d.ts.map +0 -1
- package/esm/src/signing/_sorter.d.ts +0 -127
- package/esm/src/signing/_sorter.d.ts.map +0 -1
- package/esm/src/signing/_sorter.js +0 -693
- package/esm/src/types/exchange/requests.d.ts +0 -1345
- package/esm/src/types/exchange/requests.d.ts.map +0 -1
- package/esm/src/types/exchange/requests.js +0 -1
- package/esm/src/types/exchange/responses.d.ts +0 -233
- package/esm/src/types/exchange/responses.d.ts.map +0 -1
- package/esm/src/types/exchange/responses.js +0 -1
- package/esm/src/types/explorer/requests.d.ts +0 -32
- package/esm/src/types/explorer/requests.d.ts.map +0 -1
- package/esm/src/types/explorer/requests.js +0 -1
- package/esm/src/types/explorer/responses.d.ts +0 -58
- package/esm/src/types/explorer/responses.d.ts.map +0 -1
- package/esm/src/types/explorer/responses.js +0 -1
- package/esm/src/types/info/accounts.d.ts +0 -864
- package/esm/src/types/info/accounts.d.ts.map +0 -1
- package/esm/src/types/info/accounts.js +0 -1
- package/esm/src/types/info/assets.d.ts +0 -354
- package/esm/src/types/info/assets.d.ts.map +0 -1
- package/esm/src/types/info/assets.js +0 -1
- package/esm/src/types/info/markets.d.ts +0 -79
- package/esm/src/types/info/markets.d.ts.map +0 -1
- package/esm/src/types/info/markets.js +0 -1
- package/esm/src/types/info/orders.d.ts +0 -266
- package/esm/src/types/info/orders.d.ts.map +0 -1
- package/esm/src/types/info/orders.js +0 -1
- package/esm/src/types/info/requests.d.ts +0 -640
- package/esm/src/types/info/requests.d.ts.map +0 -1
- package/esm/src/types/info/requests.js +0 -1
- package/esm/src/types/info/validators.d.ts +0 -147
- package/esm/src/types/info/validators.d.ts.map +0 -1
- package/esm/src/types/info/validators.js +0 -1
- package/esm/src/types/info/vaults.d.ts +0 -119
- package/esm/src/types/info/vaults.d.ts.map +0 -1
- package/esm/src/types/info/vaults.js +0 -1
- package/esm/src/types/mod.d.ts +0 -38
- package/esm/src/types/mod.d.ts.map +0 -1
- package/esm/src/types/mod.js +0 -24
- package/esm/src/types/subscriptions/requests.d.ts +0 -154
- package/esm/src/types/subscriptions/requests.d.ts.map +0 -1
- package/esm/src/types/subscriptions/requests.js +0 -1
- package/esm/src/types/subscriptions/responses.d.ts +0 -238
- package/esm/src/types/subscriptions/responses.d.ts.map +0 -1
- package/esm/src/types/subscriptions/responses.js +0 -1
- package/script/src/base.d.ts.map +0 -1
- package/script/src/signing/_sorter.d.ts +0 -127
- package/script/src/signing/_sorter.d.ts.map +0 -1
- package/script/src/signing/_sorter.js +0 -696
- package/script/src/types/exchange/requests.d.ts +0 -1345
- package/script/src/types/exchange/requests.d.ts.map +0 -1
- package/script/src/types/exchange/requests.js +0 -2
- package/script/src/types/exchange/responses.d.ts +0 -233
- package/script/src/types/exchange/responses.d.ts.map +0 -1
- package/script/src/types/exchange/responses.js +0 -2
- package/script/src/types/explorer/requests.d.ts +0 -32
- package/script/src/types/explorer/requests.d.ts.map +0 -1
- package/script/src/types/explorer/requests.js +0 -2
- package/script/src/types/explorer/responses.d.ts +0 -58
- package/script/src/types/explorer/responses.d.ts.map +0 -1
- package/script/src/types/explorer/responses.js +0 -2
- package/script/src/types/info/accounts.d.ts +0 -864
- package/script/src/types/info/accounts.d.ts.map +0 -1
- package/script/src/types/info/accounts.js +0 -2
- package/script/src/types/info/assets.d.ts +0 -354
- package/script/src/types/info/assets.d.ts.map +0 -1
- package/script/src/types/info/assets.js +0 -2
- package/script/src/types/info/markets.d.ts +0 -79
- package/script/src/types/info/markets.d.ts.map +0 -1
- package/script/src/types/info/markets.js +0 -2
- package/script/src/types/info/orders.d.ts +0 -266
- package/script/src/types/info/orders.d.ts.map +0 -1
- package/script/src/types/info/orders.js +0 -2
- package/script/src/types/info/requests.d.ts +0 -640
- package/script/src/types/info/requests.d.ts.map +0 -1
- package/script/src/types/info/requests.js +0 -2
- package/script/src/types/info/validators.d.ts +0 -147
- package/script/src/types/info/validators.d.ts.map +0 -1
- package/script/src/types/info/validators.js +0 -2
- package/script/src/types/info/vaults.d.ts +0 -119
- package/script/src/types/info/vaults.d.ts.map +0 -1
- package/script/src/types/info/vaults.js +0 -2
- package/script/src/types/mod.d.ts +0 -38
- package/script/src/types/mod.d.ts.map +0 -1
- package/script/src/types/mod.js +0 -25
- package/script/src/types/subscriptions/requests.d.ts +0 -154
- package/script/src/types/subscriptions/requests.d.ts.map +0 -1
- package/script/src/types/subscriptions/requests.js +0 -2
- package/script/src/types/subscriptions/responses.d.ts +0 -238
- package/script/src/types/subscriptions/responses.d.ts.map +0 -1
- 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
|
+
}
|