@nktkas/hyperliquid 0.15.1 → 0.15.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 +5 -5
- package/esm/src/signing.d.ts +3 -3
- package/esm/src/signing.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.d.ts +2 -6
- package/esm/src/transports/http/http_transport.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.js +2 -4
- package/esm/src/transports/websocket/_reconnecting_websocket.d.ts +22 -42
- package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
- package/esm/src/transports/websocket/_reconnecting_websocket.js +133 -82
- package/esm/src/transports/websocket/_websocket_request_dispatcher.d.ts +6 -11
- package/esm/src/transports/websocket/_websocket_request_dispatcher.d.ts.map +1 -1
- package/esm/src/transports/websocket/_websocket_request_dispatcher.js +8 -12
- package/esm/src/transports/websocket/websocket_transport.d.ts +2 -4
- package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/esm/src/transports/websocket/websocket_transport.js +14 -12
- package/package.json +1 -1
- package/script/src/signing.d.ts +3 -3
- package/script/src/signing.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.d.ts +2 -6
- package/script/src/transports/http/http_transport.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.js +2 -4
- package/script/src/transports/websocket/_reconnecting_websocket.d.ts +22 -42
- package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
- package/script/src/transports/websocket/_reconnecting_websocket.js +133 -82
- package/script/src/transports/websocket/_websocket_request_dispatcher.d.ts +6 -11
- package/script/src/transports/websocket/_websocket_request_dispatcher.d.ts.map +1 -1
- package/script/src/transports/websocket/_websocket_request_dispatcher.js +8 -12
- package/script/src/transports/websocket/websocket_transport.d.ts +2 -4
- package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/script/src/transports/websocket/websocket_transport.js +14 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_websocket_request_dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_websocket_request_dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"_websocket_request_dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_websocket_request_dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAY7E;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;gBACzC,OAAO,EAAE,MAAM;CAI9B;AAED;;;GAGG;AACH,qBAAa,0BAA0B;IAkBvB,OAAO,CAAC,MAAM;IAjB1B,gCAAgC;IAChC,OAAO,CAAC,MAAM,CAAa;IAE3B,oDAAoD;IACpD,OAAO,CAAC,OAAO,CAMD;IAEd;;;;OAIG;gBACiB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB;IA2DvE;;;;;;OAMG;IACG,OAAO,CACT,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,EAC5C,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,OAAO,CAAC;IAiCnB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAKf;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAKd;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAK7C"}
|
|
@@ -27,7 +27,7 @@ export class WebSocketRequestDispatcher {
|
|
|
27
27
|
writable: true,
|
|
28
28
|
value: socket
|
|
29
29
|
});
|
|
30
|
-
/** Last used request ID */
|
|
30
|
+
/** Last used post request ID */
|
|
31
31
|
Object.defineProperty(this, "lastId", {
|
|
32
32
|
enumerable: true,
|
|
33
33
|
configurable: true,
|
|
@@ -89,10 +89,6 @@ export class WebSocketRequestDispatcher {
|
|
|
89
89
|
this.pending.clear();
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
-
/** Gets the next request ID */
|
|
93
|
-
get nextId() {
|
|
94
|
-
return ++this.lastId;
|
|
95
|
-
}
|
|
96
92
|
/**
|
|
97
93
|
* Sends a request to the Hyperliquid API.
|
|
98
94
|
* @param method - The method of websocket request.
|
|
@@ -101,12 +97,14 @@ export class WebSocketRequestDispatcher {
|
|
|
101
97
|
* @returns A promise that resolves with the parsed JSON response body.
|
|
102
98
|
*/
|
|
103
99
|
async request(method, payload, signal) {
|
|
104
|
-
signal
|
|
100
|
+
// Reject the request if the signal is aborted
|
|
101
|
+
if (signal?.aborted)
|
|
102
|
+
return Promise.reject(signal.reason);
|
|
105
103
|
// Create a request object
|
|
106
104
|
let id;
|
|
107
105
|
let request;
|
|
108
106
|
if (method === "post") {
|
|
109
|
-
id = this.
|
|
107
|
+
id = ++this.lastId;
|
|
110
108
|
request = { method, id, request: payload };
|
|
111
109
|
}
|
|
112
110
|
else {
|
|
@@ -166,18 +164,16 @@ function deepLowerHex(obj) {
|
|
|
166
164
|
if (Array.isArray(obj)) {
|
|
167
165
|
return obj.map(deepLowerHex);
|
|
168
166
|
}
|
|
169
|
-
|
|
167
|
+
if (typeof obj === "object" && obj !== null) {
|
|
170
168
|
return Object.entries(obj).reduce((acc, [key, val]) => ({
|
|
171
169
|
...acc,
|
|
172
170
|
[key]: deepLowerHex(val),
|
|
173
171
|
}), {});
|
|
174
172
|
}
|
|
175
|
-
|
|
173
|
+
if (typeof obj === "string" && /^0x[0-9A-Fa-f]+$/.test(obj)) {
|
|
176
174
|
return obj.toLowerCase();
|
|
177
175
|
}
|
|
178
|
-
|
|
179
|
-
return obj;
|
|
180
|
-
}
|
|
176
|
+
return obj;
|
|
181
177
|
}
|
|
182
178
|
/**
|
|
183
179
|
* Deeply sort the keys of an object.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ReconnectingWebSocket, type ReconnectingWebSocketOptions } from "./_reconnecting_websocket.js";
|
|
1
|
+
import { type MessageBufferStrategy, ReconnectingWebSocket, ReconnectingWebSocketError, type ReconnectingWebSocketOptions } from "./_reconnecting_websocket.js";
|
|
2
2
|
import { HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
|
|
3
3
|
import { WebSocketRequestDispatcher, WebSocketRequestError } from "./_websocket_request_dispatcher.js";
|
|
4
4
|
import type { IRequestTransport, ISubscriptionTransport, Subscription } from "../../base.js";
|
|
5
5
|
export { WebSocketRequestError };
|
|
6
|
-
export type
|
|
6
|
+
export { type MessageBufferStrategy, ReconnectingWebSocketError, type ReconnectingWebSocketOptions };
|
|
7
7
|
/** Configuration options for the WebSocket transport layer. */
|
|
8
8
|
export interface WebSocketTransportOptions {
|
|
9
9
|
/**
|
|
@@ -105,7 +105,5 @@ export declare class WebSocketTransport implements IRequestTransport, ISubscript
|
|
|
105
105
|
* @returns A promise that resolves when the connection is fully closed.
|
|
106
106
|
*/
|
|
107
107
|
close(signal?: AbortSignal): Promise<void>;
|
|
108
|
-
/** Combines a timeout with an optional abort signal. */
|
|
109
|
-
protected _combineTimeoutWithSignal(timeout?: number | null, signal?: AbortSignal): AbortSignal | undefined;
|
|
110
108
|
}
|
|
111
109
|
//# sourceMappingURL=websocket_transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"websocket_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/websocket_transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,4BAA4B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7F,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,OAAO,EAAE,KAAK,qBAAqB,EAAE,0BAA0B,EAAE,KAAK,4BAA4B,EAAE,CAAC;AAErG,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACtC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE;QACR;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE,4BAA4B,CAAC;CAC5C;AAED,kFAAkF;AAClF,qBAAa,kBAAmB,YAAW,iBAAiB,EAAE,sBAAsB;IAChF,qDAAqD;IACrD,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhD,iDAAiD;IACjD,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAEnD,6CAA6C;IAC7C,SAAS,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAE5C;;;;;OAKG;IACH,SAAS,CAAC,cAAc,EAAE,GAAG,CACzB,MAAM,EACN;QACI,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,CACJ,CAAa;IAEd;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE;QAChB;;;WAGG;QACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC,CAAC;IAEF,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC;;;OAGG;gBACS,OAAO,CAAC,EAAE,yBAAyB;IAuC/C;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBzG;;;;;;;OAOG;IACG,SAAS,CACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,EACrC,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,CAAC;IAwExB;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB7C"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ReconnectingWebSocket } from "./_reconnecting_websocket.js";
|
|
1
|
+
import { ReconnectingWebSocket, ReconnectingWebSocketError, } from "./_reconnecting_websocket.js";
|
|
2
2
|
import { HyperliquidEventTarget } from "./_hyperliquid_event_target.js";
|
|
3
3
|
import { WebSocketRequestDispatcher, WebSocketRequestError } from "./_websocket_request_dispatcher.js";
|
|
4
4
|
export { WebSocketRequestError };
|
|
5
|
+
export { ReconnectingWebSocketError };
|
|
5
6
|
/** WebSocket implementation of the REST and Subscription transport interfaces. */
|
|
6
7
|
export class WebSocketTransport {
|
|
7
8
|
/**
|
|
@@ -111,7 +112,10 @@ export class WebSocketTransport {
|
|
|
111
112
|
return Promise.reject(new WebSocketRequestError("Explorer requests are not supported in the Hyperliquid WebSocket API."));
|
|
112
113
|
}
|
|
113
114
|
// Send the request and wait for a response
|
|
114
|
-
const
|
|
115
|
+
const timeoutSignal = this.timeout ? AbortSignal.timeout(this.timeout) : undefined;
|
|
116
|
+
const combinedSignal = signal && timeoutSignal
|
|
117
|
+
? AbortSignal.any([signal, timeoutSignal])
|
|
118
|
+
: signal ?? timeoutSignal;
|
|
115
119
|
return this._wsRequester.request("post", {
|
|
116
120
|
type: type === "exchange" ? "action" : type,
|
|
117
121
|
payload,
|
|
@@ -132,7 +136,10 @@ export class WebSocketTransport {
|
|
|
132
136
|
let subscription = this._subscriptions.get(id);
|
|
133
137
|
if (!subscription) {
|
|
134
138
|
// Send subscription request
|
|
135
|
-
const
|
|
139
|
+
const timeoutSignal = this.timeout ? AbortSignal.timeout(this.timeout) : undefined;
|
|
140
|
+
const combinedSignal = signal && timeoutSignal
|
|
141
|
+
? AbortSignal.any([signal, timeoutSignal])
|
|
142
|
+
: signal ?? timeoutSignal;
|
|
136
143
|
const requestPromise = this._wsRequester.request("subscribe", payload, combinedSignal);
|
|
137
144
|
// Cache subscription info
|
|
138
145
|
subscription = { listeners: new Map(), requestPromise };
|
|
@@ -153,7 +160,10 @@ export class WebSocketTransport {
|
|
|
153
160
|
this._subscriptions.delete(id);
|
|
154
161
|
// If the socket is open, send unsubscription request
|
|
155
162
|
if (this.socket.readyState === WebSocket.OPEN) {
|
|
156
|
-
const
|
|
163
|
+
const timeoutSignal = this.timeout ? AbortSignal.timeout(this.timeout) : undefined;
|
|
164
|
+
const combinedSignal = signal && timeoutSignal
|
|
165
|
+
? AbortSignal.any([signal, timeoutSignal])
|
|
166
|
+
: signal ?? timeoutSignal;
|
|
157
167
|
await this._wsRequester.request("unsubscribe", payload, combinedSignal);
|
|
158
168
|
}
|
|
159
169
|
}
|
|
@@ -228,12 +238,4 @@ export class WebSocketTransport {
|
|
|
228
238
|
this.socket.close();
|
|
229
239
|
});
|
|
230
240
|
}
|
|
231
|
-
/** Combines a timeout with an optional abort signal. */
|
|
232
|
-
_combineTimeoutWithSignal(timeout, signal) {
|
|
233
|
-
if (typeof timeout !== "number")
|
|
234
|
-
return signal;
|
|
235
|
-
if (!(signal instanceof AbortSignal))
|
|
236
|
-
return AbortSignal.timeout(timeout);
|
|
237
|
-
return AbortSignal.any([AbortSignal.timeout(timeout), signal]);
|
|
238
|
-
}
|
|
239
241
|
}
|
package/package.json
CHANGED
package/script/src/signing.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type ValueType } from "../deps/jsr.io/@std/msgpack/1.0.3/encode.js";
|
|
1
|
+
import { type ValueMap, type ValueType } from "../deps/jsr.io/@std/msgpack/1.0.3/encode.js";
|
|
2
2
|
import type { Hex } from "./base.js";
|
|
3
|
-
export type { Hex }
|
|
4
|
-
export type { ValueMap, ValueType }
|
|
3
|
+
export type { Hex };
|
|
4
|
+
export type { ValueMap, ValueType };
|
|
5
5
|
/** Abstract interface for a [viem wallet](https://viem.sh/docs/clients/wallet). */
|
|
6
6
|
export interface AbstractViemWalletClient {
|
|
7
7
|
signTypedData(params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/src/signing.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/src/signing.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,7 @@ export declare class HttpRequestError extends TransportError {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor(response: Response, responseBody?: string | undefined);
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Configuration options for the HTTP transport layer.
|
|
20
|
-
*/
|
|
18
|
+
/** Configuration options for the HTTP transport layer. */
|
|
21
19
|
export interface HttpTransportOptions {
|
|
22
20
|
/**
|
|
23
21
|
* Base URL for API endpoints.
|
|
@@ -47,9 +45,7 @@ export interface HttpTransportOptions {
|
|
|
47
45
|
*/
|
|
48
46
|
onResponse?: (response: Response) => MaybePromise<Response | void | null | undefined>;
|
|
49
47
|
}
|
|
50
|
-
/**
|
|
51
|
-
* HTTP implementation of the REST transport interface.
|
|
52
|
-
*/
|
|
48
|
+
/** HTTP implementation of the REST transport interface. */
|
|
53
49
|
export declare class HttpTransport implements IRequestTransport, HttpTransportOptions {
|
|
54
50
|
url: string | URL;
|
|
55
51
|
timeout: number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/http/http_transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvE,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAM7B,QAAQ,EAAE,QAAQ;IAAS,YAAY,CAAC,EAAE,MAAM;IALnE;;;;OAIG;gBACgB,QAAQ,EAAE,QAAQ,EAAS,YAAY,CAAC,EAAE,MAAM,YAAA;CAOtE;AAED
|
|
1
|
+
{"version":3,"file":"http_transport.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/http/http_transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvE,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAM7B,QAAQ,EAAE,QAAQ;IAAS,YAAY,CAAC,EAAE,MAAM;IALnE;;;;OAIG;gBACgB,QAAQ,EAAE,QAAQ,EAAS,YAAY,CAAC,EAAE,MAAM,YAAA;CAOtE;AAED,0DAA0D;AAC1D,MAAM,WAAW,oBAAoB;IACjC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,2IAA2I;IAC3I,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IAEpD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAElF;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,YAAY,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACzF;AAED,2DAA2D;AAC3D,qBAAa,aAAc,YAAW,iBAAiB,EAAE,oBAAoB;IACzE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAClF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,YAAY,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAEtF;;;OAGG;gBACS,OAAO,CAAC,EAAE,oBAAoB;IAQ1C;;;;;;;;OAQG;IACG,OAAO,CACT,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,EAC1C,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,OAAO,CAAC;CAqDtB"}
|
|
@@ -43,9 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.HttpRequestError = HttpRequestError;
|
|
46
|
-
/**
|
|
47
|
-
* HTTP implementation of the REST transport interface.
|
|
48
|
-
*/
|
|
46
|
+
/** HTTP implementation of the REST transport interface. */
|
|
49
47
|
class HttpTransport {
|
|
50
48
|
/**
|
|
51
49
|
* Creates a new HTTP transport instance.
|
|
@@ -102,7 +100,7 @@
|
|
|
102
100
|
const url = new URL(endpoint, this.url);
|
|
103
101
|
// FIXME: Temporary hack: replace `api.hyperliquid-testnet.xyz/explorer` with `rpc.hyperliquid-testnet.xyz/explorer`
|
|
104
102
|
// until the new rpc url becomes the standard for mainnet.
|
|
105
|
-
// Maybe after that should split the url property into api and rpc variants.
|
|
103
|
+
// TODO: Maybe after that should split the url property into api and rpc variants.
|
|
106
104
|
if (url.hostname === "api.hyperliquid-testnet.xyz" && url.pathname === "/explorer") {
|
|
107
105
|
url.hostname = "rpc.hyperliquid-testnet.xyz";
|
|
108
106
|
}
|
|
@@ -61,25 +61,28 @@ export declare class ReconnectingWebSocketError extends TransportError {
|
|
|
61
61
|
* Fully compatible with standard WebSocket API.
|
|
62
62
|
*/
|
|
63
63
|
export declare class ReconnectingWebSocket implements WebSocket {
|
|
64
|
-
/** Controller for handling connection termination */
|
|
65
|
-
|
|
66
|
-
/** WebSocket protocols */
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
|
|
64
|
+
/** Controller for handling connection termination. */
|
|
65
|
+
private _terminationController;
|
|
66
|
+
/** WebSocket protocols defined in constructor. */
|
|
67
|
+
private _protocols?;
|
|
68
|
+
/** Non-permanent original instance of WebSocket. */
|
|
69
|
+
private _socket;
|
|
70
70
|
/** Current number of reconnection attempts */
|
|
71
71
|
protected _reconnectCount: number;
|
|
72
|
-
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
/** The array of registered event listeners to recover from reconnection. */
|
|
73
|
+
private _eventListeners;
|
|
74
|
+
/** WebSocket event handlers for reconnection. */
|
|
75
|
+
private _onclose;
|
|
76
|
+
/** WebSocket event handlers for reconnection. */
|
|
77
|
+
private _onerror;
|
|
78
|
+
/** WebSocket event handlers for reconnection. */
|
|
79
|
+
private _onmessage;
|
|
80
|
+
/** WebSocket event handlers for reconnection. */
|
|
81
|
+
private _onopen;
|
|
82
|
+
/** Configuration options for WebSocket reconnection. */
|
|
80
83
|
reconnectOptions: Required<ReconnectingWebSocketOptions>;
|
|
81
|
-
/**
|
|
82
|
-
|
|
84
|
+
/** The signal that is aborted when the connection is permanently closed. */
|
|
85
|
+
terminationSignal: AbortSignal;
|
|
83
86
|
/**
|
|
84
87
|
* Creates a new reconnecting WebSocket.
|
|
85
88
|
* @param url - The WebSocket URL to connect to.
|
|
@@ -87,36 +90,13 @@ export declare class ReconnectingWebSocket implements WebSocket {
|
|
|
87
90
|
* @param options - The configuration options.
|
|
88
91
|
*/
|
|
89
92
|
constructor(url: string | URL, protocols?: string | string[], options?: ReconnectingWebSocketOptions);
|
|
90
|
-
/**
|
|
91
|
-
* Creates a WebSocket connection with timeout.
|
|
92
|
-
* @param url - The WebSocket URL to connect to.
|
|
93
|
-
* @param protocols - The WebSocket protocols to use.
|
|
94
|
-
* @param timeout - The connection timeout in ms.
|
|
95
|
-
* @returns A new WebSocket instance.
|
|
96
|
-
*/
|
|
97
|
-
protected _connectWithTimeout(url: string | URL, protocols: string | string[] | undefined, timeout: number): WebSocket;
|
|
98
93
|
/** Initializes the internal event listeners for the WebSocket. */
|
|
99
|
-
|
|
94
|
+
private _initEventListeners;
|
|
100
95
|
/**
|
|
101
96
|
* Clean up internal resources.
|
|
102
97
|
* @param reason - The reason for cleanup.
|
|
103
98
|
*/
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Check if two event listeners are the same (just like EventTarget).
|
|
107
|
-
* @param a - First event listener configuration.
|
|
108
|
-
* @param b - Second event listener configuration.
|
|
109
|
-
* @returns True if the listeners match.
|
|
110
|
-
*/
|
|
111
|
-
protected _isListenerMatch(a: {
|
|
112
|
-
type: string;
|
|
113
|
-
listener: EventListenerOrEventListenerObject;
|
|
114
|
-
options?: boolean | AddEventListenerOptions;
|
|
115
|
-
}, b: {
|
|
116
|
-
type: string;
|
|
117
|
-
listener: EventListenerOrEventListenerObject;
|
|
118
|
-
options?: boolean | AddEventListenerOptions;
|
|
119
|
-
}): boolean;
|
|
99
|
+
private _cleanup;
|
|
120
100
|
get url(): string;
|
|
121
101
|
get readyState(): number;
|
|
122
102
|
get bufferedAmount(): number;
|
|
@@ -141,7 +121,7 @@ export declare class ReconnectingWebSocket implements WebSocket {
|
|
|
141
121
|
get onopen(): ((this: WebSocket, ev: Event) => any) | null;
|
|
142
122
|
set onopen(value: ((this: WebSocket, ev: Event) => any) | null);
|
|
143
123
|
/**
|
|
144
|
-
* @param permanently - If true
|
|
124
|
+
* @param permanently - If `true`, the connection will be permanently closed. Default is `true`.
|
|
145
125
|
*/
|
|
146
126
|
close(code?: number, reason?: string, permanently?: boolean): void;
|
|
147
127
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_reconnecting_websocket.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_reconnecting_websocket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,WAAW,4BAA4B;IACzC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;IAE/D;;;OAGG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IAClC,kCAAkC;IAClC,QAAQ,EAAE,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC;IAChE;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC;IAEpE;;;OAGG;IACH,KAAK,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,CAAC,GAAG,SAAS,CAAC;IAEzE,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAAC;CACjB;AAiBD,qDAAqD;AACrD,qBAAa,0BAA2B,SAAQ,cAAc;IAE/C,IAAI,EACL,4BAA4B,GAC5B,8BAA8B,GAC9B,sBAAsB,GACtB,eAAe;IACd,aAAa,CAAC,EAAE,OAAO;gBALvB,IAAI,EACL,4BAA4B,GAC5B,8BAA8B,GAC9B,sBAAsB,GACtB,eAAe,EACd,aAAa,CAAC,EAAE,OAAO,YAAA;CAKrC;AAED;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IACnD,
|
|
1
|
+
{"version":3,"file":"_reconnecting_websocket.d.ts","sourceRoot":"","sources":["../../../../src/src/transports/websocket/_reconnecting_websocket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,WAAW,4BAA4B;IACzC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;IAE/D;;;OAGG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IAClC,kCAAkC;IAClC,QAAQ,EAAE,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC;IAChE;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC;IAEpE;;;OAGG;IACH,KAAK,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,CAAC,GAAG,SAAS,CAAC;IAEzE,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAAC;CACjB;AAiBD,qDAAqD;AACrD,qBAAa,0BAA2B,SAAQ,cAAc;IAE/C,IAAI,EACL,4BAA4B,GAC5B,8BAA8B,GAC9B,sBAAsB,GACtB,eAAe;IACd,aAAa,CAAC,EAAE,OAAO;gBALvB,IAAI,EACL,4BAA4B,GAC5B,8BAA8B,GAC9B,sBAAsB,GACtB,eAAe,EACd,aAAa,CAAC,EAAE,OAAO,YAAA;CAKrC;AAED;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IACnD,sDAAsD;IACtD,OAAO,CAAC,sBAAsB,CAA0C;IAExE,kDAAkD;IAClD,OAAO,CAAC,UAAU,CAAC,CAAoB;IAEvC,oDAAoD;IACpD,OAAO,CAAC,OAAO,CAAY;IAE3B,8CAA8C;IAC9C,SAAS,CAAC,eAAe,EAAE,MAAM,CAAK;IAEtC,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAKd;IAET,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAoD;IACpE,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAA+C;IAC/D,iDAAiD;IACjD,OAAO,CAAC,UAAU,CAA2D;IAC7E,iDAAiD;IACjD,OAAO,CAAC,OAAO,CAA+C;IAE9D,wDAAwD;IACjD,gBAAgB,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IAEhE,4EAA4E;IACrE,iBAAiB,EAAE,WAAW,CAAsC;IAE3E;;;;;OAKG;gBAEC,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,OAAO,CAAC,EAAE,4BAA4B;IA6B1C,kEAAkE;IAClE,OAAO,CAAC,mBAAmB;IAyD3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAQhB,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,cAAc,IAAI,MAAM,CAE3B;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,UAAU,IAAI,UAAU,CAE3B;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAE/B;IAED,QAAQ,CAAC,MAAM,IAAoB;IACnC,QAAQ,CAAC,OAAO,IAAqB;IACrC,QAAQ,CAAC,UAAU,IAAwB;IAC3C,QAAQ,CAAC,IAAI,IAAkB;IAE/B,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAoB;IAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAqB;IAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAwB;IAClD,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAkB;IAEtC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,IAAI,CAE/D;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,IAAI,EAGnE;IAED,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAE1D;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,EAG9D;IAED,IAAI,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAExE;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAG5E;IAED,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAEzD;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,EAG7D;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,IAAI;IAOxE;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,GAAG,IAAI;IAQnE,gBAAgB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAC9C,IAAI,EAAE,CAAC,EACP,QAAQ,EACF,CAAC,CAAC,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAChE;QAAE,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;KAAE,EAC3D,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC5C,IAAI;IA6CP,mBAAmB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EACF,CAAC,CAAC,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAChE;QAAE,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;KAAE,EAC3D,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACzC,IAAI;IAkBP,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;CAGvC"}
|