kucoin-api 2.1.22 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -14
- package/dist/cjs/FuturesClient.d.ts +9 -0
- package/dist/cjs/FuturesClient.js +7 -0
- package/dist/cjs/FuturesClient.js.map +1 -1
- package/dist/cjs/WebsocketAPIClient.d.ts +123 -0
- package/dist/cjs/WebsocketAPIClient.js +147 -0
- package/dist/cjs/WebsocketAPIClient.js.map +1 -0
- package/dist/cjs/WebsocketClient.d.ts +14 -9
- package/dist/cjs/WebsocketClient.js +277 -37
- package/dist/cjs/WebsocketClient.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +4 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/BaseRestClient.d.ts +16 -0
- package/dist/cjs/lib/BaseRestClient.js +46 -12
- package/dist/cjs/lib/BaseRestClient.js.map +1 -1
- package/dist/cjs/lib/BaseWSClient.d.ts +30 -17
- package/dist/cjs/lib/BaseWSClient.js +248 -55
- package/dist/cjs/lib/BaseWSClient.js.map +1 -1
- package/dist/cjs/lib/requestUtils.d.ts +11 -0
- package/dist/cjs/lib/requestUtils.js.map +1 -1
- package/dist/cjs/lib/websocket/WsStore.d.ts +15 -3
- package/dist/cjs/lib/websocket/WsStore.js +61 -12
- package/dist/cjs/lib/websocket/WsStore.js.map +1 -1
- package/dist/cjs/lib/websocket/WsStore.types.d.ts +6 -4
- package/dist/cjs/lib/websocket/WsStore.types.js +2 -2
- package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -1
- package/dist/cjs/lib/websocket/logger.d.ts +1 -0
- package/dist/cjs/lib/websocket/websocket-util.d.ts +12 -6
- package/dist/cjs/lib/websocket/websocket-util.js +17 -8
- package/dist/cjs/lib/websocket/websocket-util.js.map +1 -1
- package/dist/cjs/types/request/futures.types.d.ts +1 -0
- package/dist/cjs/types/response/futures.types.d.ts +1 -0
- package/dist/cjs/types/websockets/ws-api.d.ts +123 -0
- package/dist/cjs/types/websockets/ws-api.js +22 -0
- package/dist/cjs/types/websockets/ws-api.js.map +1 -0
- package/dist/cjs/types/websockets/ws-events.d.ts +11 -0
- package/dist/cjs/types/websockets/ws-events.js +11 -0
- package/dist/cjs/types/websockets/ws-events.js.map +1 -0
- package/dist/cjs/types/websockets/{client.d.ts → ws-general.d.ts} +5 -0
- package/dist/cjs/types/websockets/{events.js → ws-general.js} +1 -1
- package/dist/cjs/types/websockets/ws-general.js.map +1 -0
- package/dist/mjs/FuturesClient.d.ts +9 -0
- package/dist/mjs/FuturesClient.js +7 -0
- package/dist/mjs/FuturesClient.js.map +1 -1
- package/dist/mjs/WebsocketAPIClient.d.ts +123 -0
- package/dist/mjs/WebsocketAPIClient.js +143 -0
- package/dist/mjs/WebsocketAPIClient.js.map +1 -0
- package/dist/mjs/WebsocketClient.d.ts +14 -9
- package/dist/mjs/WebsocketClient.js +278 -38
- package/dist/mjs/WebsocketClient.js.map +1 -1
- package/dist/mjs/index.d.ts +4 -3
- package/dist/mjs/index.js +4 -3
- package/dist/mjs/index.js.map +1 -1
- package/dist/mjs/lib/BaseRestClient.d.ts +16 -0
- package/dist/mjs/lib/BaseRestClient.js +47 -13
- package/dist/mjs/lib/BaseRestClient.js.map +1 -1
- package/dist/mjs/lib/BaseWSClient.d.ts +30 -17
- package/dist/mjs/lib/BaseWSClient.js +248 -55
- package/dist/mjs/lib/BaseWSClient.js.map +1 -1
- package/dist/mjs/lib/requestUtils.d.ts +11 -0
- package/dist/mjs/lib/requestUtils.js.map +1 -1
- package/dist/mjs/lib/websocket/WsStore.d.ts +15 -3
- package/dist/mjs/lib/websocket/WsStore.js +61 -12
- package/dist/mjs/lib/websocket/WsStore.js.map +1 -1
- package/dist/mjs/lib/websocket/WsStore.types.d.ts +6 -4
- package/dist/mjs/lib/websocket/WsStore.types.js +2 -2
- package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -1
- package/dist/mjs/lib/websocket/logger.d.ts +1 -0
- package/dist/mjs/lib/websocket/websocket-util.d.ts +12 -6
- package/dist/mjs/lib/websocket/websocket-util.js +15 -7
- package/dist/mjs/lib/websocket/websocket-util.js.map +1 -1
- package/dist/mjs/types/request/futures.types.d.ts +1 -0
- package/dist/mjs/types/response/futures.types.d.ts +1 -0
- package/dist/mjs/types/websockets/ws-api.d.ts +123 -0
- package/dist/mjs/types/websockets/ws-api.js +19 -0
- package/dist/mjs/types/websockets/ws-api.js.map +1 -0
- package/dist/mjs/types/websockets/ws-events.d.ts +11 -0
- package/dist/mjs/types/websockets/ws-events.js +8 -0
- package/dist/mjs/types/websockets/ws-events.js.map +1 -0
- package/dist/mjs/types/websockets/{client.d.ts → ws-general.d.ts} +5 -0
- package/dist/mjs/types/websockets/ws-general.js +2 -0
- package/dist/mjs/types/websockets/ws-general.js.map +1 -0
- package/llms.txt +6632 -5613
- package/package.json +6 -4
- package/dist/cjs/types/websockets/client.js +0 -3
- package/dist/cjs/types/websockets/client.js.map +0 -1
- package/dist/cjs/types/websockets/events.d.ts +0 -5
- package/dist/cjs/types/websockets/events.js.map +0 -1
- package/dist/cjs/types/websockets/requests.d.ts +0 -8
- package/dist/cjs/types/websockets/requests.js +0 -3
- package/dist/cjs/types/websockets/requests.js.map +0 -1
- package/dist/cjs/types/websockets/wsAPI.d.ts +0 -9
- package/dist/cjs/types/websockets/wsAPI.js +0 -3
- package/dist/cjs/types/websockets/wsAPI.js.map +0 -1
- package/dist/mjs/types/websockets/client.js +0 -2
- package/dist/mjs/types/websockets/client.js.map +0 -1
- package/dist/mjs/types/websockets/events.d.ts +0 -5
- package/dist/mjs/types/websockets/events.js +0 -2
- package/dist/mjs/types/websockets/events.js.map +0 -1
- package/dist/mjs/types/websockets/requests.d.ts +0 -8
- package/dist/mjs/types/websockets/requests.js +0 -2
- package/dist/mjs/types/websockets/requests.js.map +0 -1
- package/dist/mjs/types/websockets/wsAPI.d.ts +0 -9
- package/dist/mjs/types/websockets/wsAPI.js +0 -2
- package/dist/mjs/types/websockets/wsAPI.js.map +0 -1
|
@@ -48,6 +48,7 @@ class BaseRestClient {
|
|
|
48
48
|
apiKey;
|
|
49
49
|
apiSecret;
|
|
50
50
|
apiPassphrase;
|
|
51
|
+
apiAccessToken;
|
|
51
52
|
/**
|
|
52
53
|
* Create an instance of the REST client. Pass API credentials in the object in the first parameter.
|
|
53
54
|
* @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
|
|
@@ -87,6 +88,7 @@ class BaseRestClient {
|
|
|
87
88
|
this.apiKey = this.options.apiKey;
|
|
88
89
|
this.apiSecret = this.options.apiSecret;
|
|
89
90
|
this.apiPassphrase = this.options.apiPassphrase;
|
|
91
|
+
this.apiAccessToken = this.options.apiAccessToken;
|
|
90
92
|
// Check Web Crypto API support when credentials are provided
|
|
91
93
|
if (this.apiKey && this.apiSecret && this.apiPassphrase) {
|
|
92
94
|
(0, webCryptoAPI_js_1.checkWebCryptoAPISupported)();
|
|
@@ -111,6 +113,16 @@ class BaseRestClient {
|
|
|
111
113
|
}
|
|
112
114
|
return Date.now();
|
|
113
115
|
}
|
|
116
|
+
hasValidCredentials() {
|
|
117
|
+
const hasAll3APICredentials = this.apiKey && this.apiSecret && this.apiPassphrase;
|
|
118
|
+
return this.hasAccessToken() || hasAll3APICredentials;
|
|
119
|
+
}
|
|
120
|
+
setAccessToken(newAccessToken) {
|
|
121
|
+
this.apiAccessToken = newAccessToken;
|
|
122
|
+
}
|
|
123
|
+
hasAccessToken() {
|
|
124
|
+
return !!this.apiAccessToken;
|
|
125
|
+
}
|
|
114
126
|
get(endpoint, params) {
|
|
115
127
|
return this._call('GET', endpoint, params, true);
|
|
116
128
|
}
|
|
@@ -186,6 +198,12 @@ class BaseRestClient {
|
|
|
186
198
|
requestParams,
|
|
187
199
|
};
|
|
188
200
|
}
|
|
201
|
+
async signMessage(paramsStr, secret, method, algorithm) {
|
|
202
|
+
if (typeof this.options.customSignMessageFn === 'function') {
|
|
203
|
+
return this.options.customSignMessageFn(paramsStr, secret);
|
|
204
|
+
}
|
|
205
|
+
return await (0, webCryptoAPI_js_1.signMessage)(paramsStr, secret, method, algorithm);
|
|
206
|
+
}
|
|
189
207
|
/**
|
|
190
208
|
* @private sign request and set recv window
|
|
191
209
|
*/
|
|
@@ -201,7 +219,7 @@ class BaseRestClient {
|
|
|
201
219
|
serializedParams: '',
|
|
202
220
|
queryParamsWithSign: '',
|
|
203
221
|
};
|
|
204
|
-
if (!this.
|
|
222
|
+
if (!this.hasValidCredentials()) {
|
|
205
223
|
return res;
|
|
206
224
|
}
|
|
207
225
|
const strictParamValidation = this.options.strictParamValidation;
|
|
@@ -211,11 +229,14 @@ class BaseRestClient {
|
|
|
211
229
|
? (0, requestUtils_js_1.serializeParams)(data, strictParamValidation, encodeQueryStringValues, '?')
|
|
212
230
|
: JSON.stringify(data) || '';
|
|
213
231
|
const paramsStr = `${timestamp}${method}/${endpoint}${signRequestParams}`;
|
|
214
|
-
|
|
232
|
+
// Only sign when no access token is provided
|
|
233
|
+
if (!this.hasAccessToken()) {
|
|
234
|
+
res.sign = await this.signMessage(paramsStr, this.apiSecret, 'base64', 'SHA-256');
|
|
235
|
+
}
|
|
215
236
|
res.queryParamsWithSign = signRequestParams;
|
|
216
237
|
return res;
|
|
217
238
|
}
|
|
218
|
-
console.error(new Date(), (0, misc_util_js_1.neverGuard)(signMethod, `Unhandled sign method: "${
|
|
239
|
+
console.error(new Date(), (0, misc_util_js_1.neverGuard)(signMethod, `Unhandled sign method: "${signMethod}"`));
|
|
219
240
|
return res;
|
|
220
241
|
}
|
|
221
242
|
async prepareSignParams(method, endpoint, signMethod, params, isPublicApi) {
|
|
@@ -225,7 +246,7 @@ class BaseRestClient {
|
|
|
225
246
|
paramsWithSign: params,
|
|
226
247
|
};
|
|
227
248
|
}
|
|
228
|
-
if (!this.
|
|
249
|
+
if (!this.hasValidCredentials()) {
|
|
229
250
|
throw new Error(MISSING_API_KEYS_ERROR);
|
|
230
251
|
}
|
|
231
252
|
return this.signRequest(params, endpoint, method, signMethod);
|
|
@@ -261,17 +282,32 @@ class BaseRestClient {
|
|
|
261
282
|
const partnerSign = this.getClientType() === requestUtils_js_1.REST_CLIENT_TYPE_ENUM.main
|
|
262
283
|
? requestUtils_js_1.APIIDMainSign
|
|
263
284
|
: requestUtils_js_1.APIIDFuturesSign;
|
|
264
|
-
const partnerSignResult = await
|
|
265
|
-
const signedPassphrase = await
|
|
285
|
+
const partnerSignResult = await this.signMessage(partnerSignParam, partnerSign, 'base64', 'SHA-256');
|
|
286
|
+
const signedPassphrase = await this.signMessage(this.apiPassphrase, this.apiSecret, 'base64', 'SHA-256');
|
|
287
|
+
let signHeaders = {};
|
|
288
|
+
// Support for Authorization header, if provided:
|
|
289
|
+
// https://github.com/tiagosiebler/kucoin-api/issues/2
|
|
290
|
+
// Use restClient.setAccessToken(newToken), if you need to store a new access token
|
|
291
|
+
if (this.apiAccessToken) {
|
|
292
|
+
signHeaders = {
|
|
293
|
+
Authorization: this.apiAccessToken,
|
|
294
|
+
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
signHeaders = {
|
|
299
|
+
'KC-API-SIGN': signResult.sign,
|
|
300
|
+
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
301
|
+
'KC-API-PASSPHRASE': signedPassphrase,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
266
304
|
if (method === 'GET' || method === 'DELETE') {
|
|
267
305
|
return {
|
|
268
306
|
...options,
|
|
269
307
|
headers: {
|
|
270
308
|
...authHeaders,
|
|
271
309
|
...options.headers,
|
|
272
|
-
|
|
273
|
-
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
274
|
-
'KC-API-PASSPHRASE': signedPassphrase,
|
|
310
|
+
...signHeaders,
|
|
275
311
|
},
|
|
276
312
|
url: options.url + signResult.queryParamsWithSign,
|
|
277
313
|
};
|
|
@@ -281,9 +317,7 @@ class BaseRestClient {
|
|
|
281
317
|
headers: {
|
|
282
318
|
...authHeaders,
|
|
283
319
|
...options.headers,
|
|
284
|
-
|
|
285
|
-
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
286
|
-
'KC-API-PASSPHRASE': signedPassphrase,
|
|
320
|
+
...signHeaders,
|
|
287
321
|
},
|
|
288
322
|
data: params,
|
|
289
323
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../../src/lib/BaseRestClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyE;AACzE,kDAA0B;AAE1B,iDAA4C;AAC5C,uDAU2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../../src/lib/BaseRestClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
2
|
import WebSocket from 'isomorphic-ws';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { WsOperation } from '../types/websockets/ws-api.js';
|
|
4
|
+
import { MessageEventLike } from '../types/websockets/ws-events.js';
|
|
5
|
+
import { WebsocketClientOptions, WSClientConfigurableOptions } from '../types/websockets/ws-general.js';
|
|
5
6
|
import { DefaultLogger } from './websocket/logger.js';
|
|
6
|
-
import {
|
|
7
|
+
import { WsTopicRequest, WsTopicRequestOrStringTopic } from './websocket/websocket-util.js';
|
|
7
8
|
import { WsStore } from './websocket/WsStore.js';
|
|
8
9
|
import { WSConnectedResult } from './websocket/WsStore.types.js';
|
|
10
|
+
type UseTheExceptionEventInstead = never;
|
|
9
11
|
interface WSClientEventMap<WsKey extends string> {
|
|
10
12
|
/** Connection opened. If this connection was previously opened and reconnected, expect the reconnected event instead */
|
|
11
13
|
open: (evt: {
|
|
12
14
|
wsKey: WsKey;
|
|
13
15
|
event: any;
|
|
16
|
+
wsUrl: string;
|
|
17
|
+
ws: WebSocket;
|
|
14
18
|
}) => void;
|
|
15
19
|
/** Reconnecting a dropped connection */
|
|
16
20
|
reconnect: (evt: {
|
|
@@ -21,6 +25,8 @@ interface WSClientEventMap<WsKey extends string> {
|
|
|
21
25
|
reconnected: (evt: {
|
|
22
26
|
wsKey: WsKey;
|
|
23
27
|
event: any;
|
|
28
|
+
wsUrl: string;
|
|
29
|
+
ws: WebSocket;
|
|
24
30
|
}) => void;
|
|
25
31
|
/** Connection closed */
|
|
26
32
|
close: (evt: {
|
|
@@ -39,9 +45,11 @@ interface WSClientEventMap<WsKey extends string> {
|
|
|
39
45
|
exception: (response: any & {
|
|
40
46
|
wsKey: WsKey;
|
|
41
47
|
}) => void;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
/**
|
|
49
|
+
* See for more information: https://github.com/tiagosiebler/bybit-api/issues/413
|
|
50
|
+
* @deprecated Use the 'exception' event instead. The 'error' event had the unintended consequence of throwing an unhandled promise rejection.
|
|
51
|
+
*/
|
|
52
|
+
error: UseTheExceptionEventInstead;
|
|
45
53
|
/** Confirmation that a connection successfully authenticated */
|
|
46
54
|
authenticated: (event: {
|
|
47
55
|
wsKey: WsKey;
|
|
@@ -49,8 +57,9 @@ interface WSClientEventMap<WsKey extends string> {
|
|
|
49
57
|
}) => void;
|
|
50
58
|
}
|
|
51
59
|
export interface EmittableEvent<TEvent = any> {
|
|
52
|
-
eventType: 'response' | 'update' | 'exception' | 'authenticated' | 'connectionReady';
|
|
60
|
+
eventType: 'response' | 'update' | 'exception' | 'connectionReadyForAuth' | 'authenticated' | 'connectionReady';
|
|
53
61
|
event: TEvent;
|
|
62
|
+
isWSAPIResponse?: boolean;
|
|
54
63
|
}
|
|
55
64
|
export interface BaseWebsocketClient<TWSKey extends string> {
|
|
56
65
|
on<U extends keyof WSClientEventMap<TWSKey>>(event: U, listener: WSClientEventMap<TWSKey>[U]): this;
|
|
@@ -59,15 +68,15 @@ export interface BaseWebsocketClient<TWSKey extends string> {
|
|
|
59
68
|
type WSTopic = string;
|
|
60
69
|
export declare abstract class BaseWebsocketClient<TWSKey extends string> extends EventEmitter {
|
|
61
70
|
private wsStore;
|
|
62
|
-
protected logger:
|
|
71
|
+
protected logger: DefaultLogger;
|
|
63
72
|
protected options: WebsocketClientOptions;
|
|
64
73
|
private wsApiRequestId;
|
|
65
|
-
constructor(options?: WSClientConfigurableOptions, logger?:
|
|
74
|
+
constructor(options?: WSClientConfigurableOptions, logger?: DefaultLogger);
|
|
66
75
|
protected abstract sendPingEvent(wsKey: TWSKey, ws: WebSocket): void;
|
|
67
76
|
protected abstract sendPongEvent(wsKey: TWSKey, ws: WebSocket): void;
|
|
68
|
-
protected abstract isWsPong(data: any): boolean;
|
|
69
77
|
protected abstract isWsPing(data: any): boolean;
|
|
70
|
-
protected abstract
|
|
78
|
+
protected abstract isWsPong(data: any): boolean;
|
|
79
|
+
protected abstract getWsAuthRequestEvent(wsKey: TWSKey, eventToAuth?: object): Promise<object | string | 'waitForEvent' | void>;
|
|
71
80
|
protected abstract isPrivateTopicRequest(request: WsTopicRequest<WSTopic>, wsKey: TWSKey): boolean;
|
|
72
81
|
/**
|
|
73
82
|
* Returns a list of string events that can be individually sent upstream to complete subscribing/unsubscribing/etc to these topics
|
|
@@ -87,8 +96,6 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
87
96
|
protected isPrivateWsKey(wsKey: TWSKey): boolean;
|
|
88
97
|
/** Returns auto-incrementing request ID, used to track promise references for async requests */
|
|
89
98
|
protected getNewRequestId(): string;
|
|
90
|
-
protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: WSTopic, params?: any): Promise<unknown>;
|
|
91
|
-
protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: WSTopic, params: any): Promise<unknown>;
|
|
92
99
|
/**
|
|
93
100
|
* Subscribe to one or more topics on a WS connection (identified by WS Key).
|
|
94
101
|
*
|
|
@@ -100,8 +107,8 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
100
107
|
* @param wsTopicRequests array of topics to subscribe to
|
|
101
108
|
* @param wsKey ws key referring to the ws connection these topics should be subscribed on
|
|
102
109
|
*/
|
|
103
|
-
subscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<WSTopic>[], wsKey: TWSKey):
|
|
104
|
-
protected unsubscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): void;
|
|
110
|
+
subscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<WSTopic>[], wsKey: TWSKey): boolean | Promise<void> | Promise<WSConnectedResult | undefined>;
|
|
111
|
+
protected unsubscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): Promise<void> | undefined;
|
|
105
112
|
/**
|
|
106
113
|
* Splits topic requests into two groups, public & private topic requests
|
|
107
114
|
*/
|
|
@@ -114,7 +121,7 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
114
121
|
/**
|
|
115
122
|
* Request connection to a specific websocket, instead of waiting for automatic connection.
|
|
116
123
|
*/
|
|
117
|
-
connect(wsKey: TWSKey): Promise<WSConnectedResult | undefined>;
|
|
124
|
+
connect(wsKey: TWSKey, customUrl?: string | undefined, throwOnError?: boolean): Promise<WSConnectedResult | undefined>;
|
|
118
125
|
private connectToWsUrl;
|
|
119
126
|
private parseWsError;
|
|
120
127
|
/** Get a signature, build the auth request and send it */
|
|
@@ -139,7 +146,7 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
139
146
|
/**
|
|
140
147
|
* Try sending a string event on a WS connection (identified by the WS Key)
|
|
141
148
|
*/
|
|
142
|
-
tryWsSend(wsKey: TWSKey, wsMessage: string): void;
|
|
149
|
+
tryWsSend(wsKey: TWSKey, wsMessage: string, throwExceptions?: boolean): void;
|
|
143
150
|
private onWsOpen;
|
|
144
151
|
/**
|
|
145
152
|
* Called automatically once a connection is ready.
|
|
@@ -155,6 +162,8 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
155
162
|
* Only used for exchanges that require auth before sending private topic subscription requests
|
|
156
163
|
*/
|
|
157
164
|
private onWsAuthenticated;
|
|
165
|
+
private onWsPing;
|
|
166
|
+
private onWsPong;
|
|
158
167
|
private onWsMessage;
|
|
159
168
|
private onWsClose;
|
|
160
169
|
private getWs;
|
|
@@ -163,5 +172,9 @@ export declare abstract class BaseWebsocketClient<TWSKey extends string> extends
|
|
|
163
172
|
* Promise-driven method to assert that a ws has successfully connected (will await until connection is open)
|
|
164
173
|
*/
|
|
165
174
|
protected assertIsConnected(wsKey: TWSKey): Promise<unknown>;
|
|
175
|
+
/**
|
|
176
|
+
* Promise-driven method to assert that a ws has been successfully authenticated (will await until auth is confirmed)
|
|
177
|
+
*/
|
|
178
|
+
assertIsAuthenticated(wsKey: TWSKey): Promise<unknown>;
|
|
166
179
|
}
|
|
167
180
|
export {};
|