kucoin-api 2.1.23 → 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/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/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/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/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 +5985 -4979
- 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
|
@@ -2,7 +2,7 @@ import axios from 'axios';
|
|
|
2
2
|
import https from 'https';
|
|
3
3
|
import { neverGuard } from './misc-util.js';
|
|
4
4
|
import { APIIDFutures, APIIDFuturesSign, APIIDMain, APIIDMainSign, getRestBaseUrl, REST_CLIENT_TYPE_ENUM, serializeParams, } from './requestUtils.js';
|
|
5
|
-
import { checkWebCryptoAPISupported, signMessage } from './webCryptoAPI.js';
|
|
5
|
+
import { checkWebCryptoAPISupported, signMessage, } from './webCryptoAPI.js';
|
|
6
6
|
const MISSING_API_KEYS_ERROR = 'API Key, Secret & API Passphrase are ALL required to use the authenticated REST client';
|
|
7
7
|
const ENABLE_HTTP_TRACE = typeof process === 'object' &&
|
|
8
8
|
typeof process.env === 'object' &&
|
|
@@ -42,6 +42,7 @@ export class BaseRestClient {
|
|
|
42
42
|
apiKey;
|
|
43
43
|
apiSecret;
|
|
44
44
|
apiPassphrase;
|
|
45
|
+
apiAccessToken;
|
|
45
46
|
/**
|
|
46
47
|
* Create an instance of the REST client. Pass API credentials in the object in the first parameter.
|
|
47
48
|
* @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
|
|
@@ -81,6 +82,7 @@ export class BaseRestClient {
|
|
|
81
82
|
this.apiKey = this.options.apiKey;
|
|
82
83
|
this.apiSecret = this.options.apiSecret;
|
|
83
84
|
this.apiPassphrase = this.options.apiPassphrase;
|
|
85
|
+
this.apiAccessToken = this.options.apiAccessToken;
|
|
84
86
|
// Check Web Crypto API support when credentials are provided
|
|
85
87
|
if (this.apiKey && this.apiSecret && this.apiPassphrase) {
|
|
86
88
|
checkWebCryptoAPISupported();
|
|
@@ -105,6 +107,16 @@ export class BaseRestClient {
|
|
|
105
107
|
}
|
|
106
108
|
return Date.now();
|
|
107
109
|
}
|
|
110
|
+
hasValidCredentials() {
|
|
111
|
+
const hasAll3APICredentials = this.apiKey && this.apiSecret && this.apiPassphrase;
|
|
112
|
+
return this.hasAccessToken() || hasAll3APICredentials;
|
|
113
|
+
}
|
|
114
|
+
setAccessToken(newAccessToken) {
|
|
115
|
+
this.apiAccessToken = newAccessToken;
|
|
116
|
+
}
|
|
117
|
+
hasAccessToken() {
|
|
118
|
+
return !!this.apiAccessToken;
|
|
119
|
+
}
|
|
108
120
|
get(endpoint, params) {
|
|
109
121
|
return this._call('GET', endpoint, params, true);
|
|
110
122
|
}
|
|
@@ -180,6 +192,12 @@ export class BaseRestClient {
|
|
|
180
192
|
requestParams,
|
|
181
193
|
};
|
|
182
194
|
}
|
|
195
|
+
async signMessage(paramsStr, secret, method, algorithm) {
|
|
196
|
+
if (typeof this.options.customSignMessageFn === 'function') {
|
|
197
|
+
return this.options.customSignMessageFn(paramsStr, secret);
|
|
198
|
+
}
|
|
199
|
+
return await signMessage(paramsStr, secret, method, algorithm);
|
|
200
|
+
}
|
|
183
201
|
/**
|
|
184
202
|
* @private sign request and set recv window
|
|
185
203
|
*/
|
|
@@ -195,7 +213,7 @@ export class BaseRestClient {
|
|
|
195
213
|
serializedParams: '',
|
|
196
214
|
queryParamsWithSign: '',
|
|
197
215
|
};
|
|
198
|
-
if (!this.
|
|
216
|
+
if (!this.hasValidCredentials()) {
|
|
199
217
|
return res;
|
|
200
218
|
}
|
|
201
219
|
const strictParamValidation = this.options.strictParamValidation;
|
|
@@ -205,11 +223,14 @@ export class BaseRestClient {
|
|
|
205
223
|
? serializeParams(data, strictParamValidation, encodeQueryStringValues, '?')
|
|
206
224
|
: JSON.stringify(data) || '';
|
|
207
225
|
const paramsStr = `${timestamp}${method}/${endpoint}${signRequestParams}`;
|
|
208
|
-
|
|
226
|
+
// Only sign when no access token is provided
|
|
227
|
+
if (!this.hasAccessToken()) {
|
|
228
|
+
res.sign = await this.signMessage(paramsStr, this.apiSecret, 'base64', 'SHA-256');
|
|
229
|
+
}
|
|
209
230
|
res.queryParamsWithSign = signRequestParams;
|
|
210
231
|
return res;
|
|
211
232
|
}
|
|
212
|
-
console.error(new Date(), neverGuard(signMethod, `Unhandled sign method: "${
|
|
233
|
+
console.error(new Date(), neverGuard(signMethod, `Unhandled sign method: "${signMethod}"`));
|
|
213
234
|
return res;
|
|
214
235
|
}
|
|
215
236
|
async prepareSignParams(method, endpoint, signMethod, params, isPublicApi) {
|
|
@@ -219,7 +240,7 @@ export class BaseRestClient {
|
|
|
219
240
|
paramsWithSign: params,
|
|
220
241
|
};
|
|
221
242
|
}
|
|
222
|
-
if (!this.
|
|
243
|
+
if (!this.hasValidCredentials()) {
|
|
223
244
|
throw new Error(MISSING_API_KEYS_ERROR);
|
|
224
245
|
}
|
|
225
246
|
return this.signRequest(params, endpoint, method, signMethod);
|
|
@@ -255,17 +276,32 @@ export class BaseRestClient {
|
|
|
255
276
|
const partnerSign = this.getClientType() === REST_CLIENT_TYPE_ENUM.main
|
|
256
277
|
? APIIDMainSign
|
|
257
278
|
: APIIDFuturesSign;
|
|
258
|
-
const partnerSignResult = await signMessage(partnerSignParam, partnerSign, 'base64', 'SHA-256');
|
|
259
|
-
const signedPassphrase = await signMessage(this.apiPassphrase, this.apiSecret, 'base64', 'SHA-256');
|
|
279
|
+
const partnerSignResult = await this.signMessage(partnerSignParam, partnerSign, 'base64', 'SHA-256');
|
|
280
|
+
const signedPassphrase = await this.signMessage(this.apiPassphrase, this.apiSecret, 'base64', 'SHA-256');
|
|
281
|
+
let signHeaders = {};
|
|
282
|
+
// Support for Authorization header, if provided:
|
|
283
|
+
// https://github.com/tiagosiebler/kucoin-api/issues/2
|
|
284
|
+
// Use restClient.setAccessToken(newToken), if you need to store a new access token
|
|
285
|
+
if (this.apiAccessToken) {
|
|
286
|
+
signHeaders = {
|
|
287
|
+
Authorization: this.apiAccessToken,
|
|
288
|
+
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
signHeaders = {
|
|
293
|
+
'KC-API-SIGN': signResult.sign,
|
|
294
|
+
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
295
|
+
'KC-API-PASSPHRASE': signedPassphrase,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
260
298
|
if (method === 'GET' || method === 'DELETE') {
|
|
261
299
|
return {
|
|
262
300
|
...options,
|
|
263
301
|
headers: {
|
|
264
302
|
...authHeaders,
|
|
265
303
|
...options.headers,
|
|
266
|
-
|
|
267
|
-
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
268
|
-
'KC-API-PASSPHRASE': signedPassphrase,
|
|
304
|
+
...signHeaders,
|
|
269
305
|
},
|
|
270
306
|
url: options.url + signResult.queryParamsWithSign,
|
|
271
307
|
};
|
|
@@ -275,9 +311,7 @@ export class BaseRestClient {
|
|
|
275
311
|
headers: {
|
|
276
312
|
...authHeaders,
|
|
277
313
|
...options.headers,
|
|
278
|
-
|
|
279
|
-
'KC-API-PARTNER-SIGN': partnerSignResult,
|
|
280
|
-
'KC-API-PASSPHRASE': signedPassphrase,
|
|
314
|
+
...signHeaders,
|
|
281
315
|
},
|
|
282
316
|
data: params,
|
|
283
317
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../../src/lib/BaseRestClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,cAAc,EACd,qBAAqB,EAGrB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,
|
|
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 {};
|