bybit-api 3.5.0-beta.0 → 3.5.1

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.
@@ -1,4 +1,4 @@
1
- import { APIMarket, WsKey } from '../types';
1
+ import { APIMarket, CategoryV5, WsKey } from '../types';
2
2
  interface NetworkMapV3 {
3
3
  livenet: string;
4
4
  livenet2?: string;
@@ -6,7 +6,17 @@ interface NetworkMapV3 {
6
6
  testnet2?: string;
7
7
  }
8
8
  declare type PublicPrivateNetwork = 'public' | 'private';
9
- export declare const WS_BASE_URL_MAP: Record<APIMarket | 'unifiedPerpUSDT' | 'unifiedPerpUSDC', Record<PublicPrivateNetwork, NetworkMapV3>>;
9
+ /**
10
+ * The following WS keys are logical.
11
+ *
12
+ * They're not directly used as a market. They usually have one private endpoint but many public ones,
13
+ * so they need a bit of extra handling for seamless messaging between endpoints.
14
+ *
15
+ * For the unified keys, the "split" happens using the symbol. Symbols suffixed with USDT are obviously USDT topics.
16
+ * For the v5 endpoints, the subscribe/unsubscribe call must specify the category the subscription should route to.
17
+ */
18
+ declare type PublicOnlyWsKeys = 'unifiedPerpUSDT' | 'unifiedPerpUSDC' | 'v5SpotPublic' | 'v5LinearPublic' | 'v5InversePublic' | 'v5OptionPublic';
19
+ export declare const WS_BASE_URL_MAP: Record<APIMarket, Record<PublicPrivateNetwork, NetworkMapV3>> & Record<PublicOnlyWsKeys, Record<'public', NetworkMapV3>>;
10
20
  export declare const WS_KEY_MAP: {
11
21
  readonly inverse: "inverse";
12
22
  readonly linearPrivate: "linearPrivate";
@@ -27,10 +37,17 @@ export declare const WS_KEY_MAP: {
27
37
  readonly contractUSDTPrivate: "contractUSDTPrivate";
28
38
  readonly contractInversePublic: "contractInversePublic";
29
39
  readonly contractInversePrivate: "contractInversePrivate";
40
+ readonly v5SpotPublic: "v5SpotPublic";
41
+ readonly v5LinearPublic: "v5LinearPublic";
42
+ readonly v5InversePublic: "v5InversePublic";
43
+ readonly v5OptionPublic: "v5OptionPublic";
44
+ readonly v5Private: "v5Private";
30
45
  };
31
46
  export declare const WS_AUTH_ON_CONNECT_KEYS: WsKey[];
32
47
  export declare const PUBLIC_WS_KEYS: string[];
33
- export declare function getWsKeyForTopic(market: APIMarket, topic: string, isPrivate?: boolean): WsKey;
48
+ export declare function isPrivateWsTopic(topic: string): boolean;
49
+ export declare function getWsKeyForTopic(market: APIMarket, topic: string, isPrivate?: boolean, category?: CategoryV5): WsKey;
50
+ export declare function getWsUrl(wsKey: WsKey, wsUrl: string | undefined, isTestnet: boolean): string;
34
51
  export declare function getMaxTopicsPerSubscribeEvent(market: APIMarket): number | null;
35
52
  export declare function getUsdcWsKeyForTopic(topic: string, subGroup: 'option' | 'perp'): WsKey;
36
53
  export declare const WS_ERROR_ENUM: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.neverGuard = exports.WS_ERROR_ENUM = exports.getUsdcWsKeyForTopic = exports.getMaxTopicsPerSubscribeEvent = exports.getWsKeyForTopic = exports.PUBLIC_WS_KEYS = exports.WS_AUTH_ON_CONNECT_KEYS = exports.WS_KEY_MAP = exports.WS_BASE_URL_MAP = void 0;
3
+ exports.neverGuard = exports.WS_ERROR_ENUM = exports.getUsdcWsKeyForTopic = exports.getMaxTopicsPerSubscribeEvent = exports.getWsUrl = exports.getWsKeyForTopic = exports.isPrivateWsTopic = exports.PUBLIC_WS_KEYS = exports.WS_AUTH_ON_CONNECT_KEYS = exports.WS_KEY_MAP = exports.WS_BASE_URL_MAP = void 0;
4
4
  exports.WS_BASE_URL_MAP = {
5
5
  inverse: {
6
6
  public: {
@@ -95,20 +95,12 @@ exports.WS_BASE_URL_MAP = {
95
95
  livenet: 'wss://stream.bybit.com/contract/usdt/public/v3',
96
96
  testnet: 'wss://stream-testnet.bybit.com/contract/usdt/public/v3',
97
97
  },
98
- private: {
99
- livenet: 'useUnifiedEndpoint',
100
- testnet: 'useUnifiedEndpoint',
101
- },
102
98
  },
103
99
  unifiedPerpUSDC: {
104
100
  public: {
105
101
  livenet: 'wss://stream.bybit.com/contract/usdc/public/v3',
106
102
  testnet: 'wss://stream-testnet.bybit.com/contract/usdc/public/v3',
107
103
  },
108
- private: {
109
- livenet: 'useUnifiedEndpoint',
110
- testnet: 'useUnifiedEndpoint',
111
- },
112
104
  },
113
105
  contractUSDT: {
114
106
  public: {
@@ -130,6 +122,40 @@ exports.WS_BASE_URL_MAP = {
130
122
  testnet: 'wss://stream-testnet.bybit.com/contract/private/v3',
131
123
  },
132
124
  },
125
+ v5: {
126
+ public: {
127
+ livenet: 'public topics are routed internally via the public wskeys',
128
+ testnet: 'public topics are routed internally via the public wskeys',
129
+ },
130
+ private: {
131
+ livenet: 'wss://stream.bybit.com/v5/private',
132
+ testnet: 'wss://stream-testnet.bybit.com/v5/private',
133
+ },
134
+ },
135
+ v5SpotPublic: {
136
+ public: {
137
+ livenet: 'wss://stream.bybit.com/v5/public/spot',
138
+ testnet: 'wss://stream-testnet.bybit.com/v5/public/spot',
139
+ },
140
+ },
141
+ v5LinearPublic: {
142
+ public: {
143
+ livenet: 'wss://stream.bybit.com/v5/public/linear',
144
+ testnet: 'wss://stream-testnet.bybit.com/v5/public/linear',
145
+ },
146
+ },
147
+ v5InversePublic: {
148
+ public: {
149
+ livenet: 'wss://stream.bybit.com/v5/public/inverse',
150
+ testnet: 'wss://stream-testnet.bybit.com/v5/public/inverse',
151
+ },
152
+ },
153
+ v5OptionPublic: {
154
+ public: {
155
+ livenet: 'wss://stream.bybit.com/v5/public/option',
156
+ testnet: 'wss://stream-testnet.bybit.com/v5/public/option',
157
+ },
158
+ },
133
159
  };
134
160
  exports.WS_KEY_MAP = {
135
161
  inverse: 'inverse',
@@ -151,6 +177,11 @@ exports.WS_KEY_MAP = {
151
177
  contractUSDTPrivate: 'contractUSDTPrivate',
152
178
  contractInversePublic: 'contractInversePublic',
153
179
  contractInversePrivate: 'contractInversePrivate',
180
+ v5SpotPublic: 'v5SpotPublic',
181
+ v5LinearPublic: 'v5LinearPublic',
182
+ v5InversePublic: 'v5InversePublic',
183
+ v5OptionPublic: 'v5OptionPublic',
184
+ v5Private: 'v5Private',
154
185
  };
155
186
  exports.WS_AUTH_ON_CONNECT_KEYS = [
156
187
  exports.WS_KEY_MAP.spotV3Private,
@@ -159,6 +190,7 @@ exports.WS_AUTH_ON_CONNECT_KEYS = [
159
190
  exports.WS_KEY_MAP.unifiedPrivate,
160
191
  exports.WS_KEY_MAP.contractUSDTPrivate,
161
192
  exports.WS_KEY_MAP.contractInversePrivate,
193
+ exports.WS_KEY_MAP.v5Private,
162
194
  ];
163
195
  exports.PUBLIC_WS_KEYS = [
164
196
  exports.WS_KEY_MAP.linearPublic,
@@ -171,14 +203,14 @@ exports.PUBLIC_WS_KEYS = [
171
203
  exports.WS_KEY_MAP.unifiedPerpUSDCPublic,
172
204
  exports.WS_KEY_MAP.contractUSDTPublic,
173
205
  exports.WS_KEY_MAP.contractInversePublic,
206
+ exports.WS_KEY_MAP.v5SpotPublic,
207
+ exports.WS_KEY_MAP.v5LinearPublic,
208
+ exports.WS_KEY_MAP.v5InversePublic,
209
+ exports.WS_KEY_MAP.v5OptionPublic,
174
210
  ];
175
211
  /** Used to automatically determine if a sub request should be to the public or private ws (when there's two) */
176
212
  const PRIVATE_TOPICS = [
177
- 'position',
178
- 'execution',
179
- 'order',
180
213
  'stop_order',
181
- 'wallet',
182
214
  'outboundAccountInfo',
183
215
  'executionReport',
184
216
  'ticketInfo',
@@ -211,8 +243,18 @@ const PRIVATE_TOPICS = [
211
243
  'user.execution.contractAccount',
212
244
  'user.order.contractAccount',
213
245
  'user.wallet.contractAccount',
246
+ // v5
247
+ 'position',
248
+ 'execution',
249
+ 'order',
250
+ 'wallet',
251
+ 'greeks',
214
252
  ];
215
- function getWsKeyForTopic(market, topic, isPrivate) {
253
+ function isPrivateWsTopic(topic) {
254
+ return PRIVATE_TOPICS.includes(topic);
255
+ }
256
+ exports.isPrivateWsTopic = isPrivateWsTopic;
257
+ function getWsKeyForTopic(market, topic, isPrivate, category) {
216
258
  const isPrivateTopic = isPrivate === true || PRIVATE_TOPICS.includes(topic);
217
259
  switch (market) {
218
260
  case 'inverse': {
@@ -270,12 +312,126 @@ function getWsKeyForTopic(market, topic, isPrivate) {
270
312
  ? exports.WS_KEY_MAP.contractUSDTPrivate
271
313
  : exports.WS_KEY_MAP.contractUSDTPublic;
272
314
  }
315
+ case 'v5': {
316
+ if (isPrivateTopic) {
317
+ return exports.WS_KEY_MAP.v5Private;
318
+ }
319
+ switch (category) {
320
+ case 'spot': {
321
+ return exports.WS_KEY_MAP.v5SpotPublic;
322
+ }
323
+ case 'linear': {
324
+ return exports.WS_KEY_MAP.v5LinearPublic;
325
+ }
326
+ case 'inverse': {
327
+ return exports.WS_KEY_MAP.v5InversePublic;
328
+ }
329
+ case 'option': {
330
+ return exports.WS_KEY_MAP.v5OptionPublic;
331
+ }
332
+ case undefined: {
333
+ throw new Error('Category cannot be undefined');
334
+ }
335
+ default: {
336
+ throw neverGuard(category, 'getWsKeyForTopic(v5): Unhandled v5 category');
337
+ }
338
+ }
339
+ }
273
340
  default: {
274
341
  throw neverGuard(market, 'getWsKeyForTopic(): Unhandled market');
275
342
  }
276
343
  }
277
344
  }
278
345
  exports.getWsKeyForTopic = getWsKeyForTopic;
346
+ function getWsUrl(wsKey, wsUrl, isTestnet) {
347
+ if (wsUrl) {
348
+ return wsUrl;
349
+ }
350
+ const networkKey = isTestnet ? 'testnet' : 'livenet';
351
+ switch (wsKey) {
352
+ case exports.WS_KEY_MAP.linearPublic: {
353
+ return exports.WS_BASE_URL_MAP.linear.public[networkKey];
354
+ }
355
+ case exports.WS_KEY_MAP.linearPrivate: {
356
+ return exports.WS_BASE_URL_MAP.linear.private[networkKey];
357
+ }
358
+ case exports.WS_KEY_MAP.spotPublic: {
359
+ return exports.WS_BASE_URL_MAP.spot.public[networkKey];
360
+ }
361
+ case exports.WS_KEY_MAP.spotPrivate: {
362
+ return exports.WS_BASE_URL_MAP.spot.private[networkKey];
363
+ }
364
+ case exports.WS_KEY_MAP.spotV3Public: {
365
+ return exports.WS_BASE_URL_MAP.spotv3.public[networkKey];
366
+ }
367
+ case exports.WS_KEY_MAP.spotV3Private: {
368
+ return exports.WS_BASE_URL_MAP.spotv3.private[networkKey];
369
+ }
370
+ case exports.WS_KEY_MAP.inverse: {
371
+ // private and public are on the same WS connection
372
+ return exports.WS_BASE_URL_MAP.inverse.public[networkKey];
373
+ }
374
+ case exports.WS_KEY_MAP.usdcOptionPublic: {
375
+ return exports.WS_BASE_URL_MAP.usdcOption.public[networkKey];
376
+ }
377
+ case exports.WS_KEY_MAP.usdcOptionPrivate: {
378
+ return exports.WS_BASE_URL_MAP.usdcOption.private[networkKey];
379
+ }
380
+ case exports.WS_KEY_MAP.usdcPerpPublic: {
381
+ return exports.WS_BASE_URL_MAP.usdcPerp.public[networkKey];
382
+ }
383
+ case exports.WS_KEY_MAP.usdcPerpPrivate: {
384
+ return exports.WS_BASE_URL_MAP.usdcPerp.private[networkKey];
385
+ }
386
+ case exports.WS_KEY_MAP.unifiedOptionPublic: {
387
+ return exports.WS_BASE_URL_MAP.unifiedOption.public[networkKey];
388
+ }
389
+ case exports.WS_KEY_MAP.unifiedPerpUSDTPublic: {
390
+ return exports.WS_BASE_URL_MAP.unifiedPerpUSDT.public[networkKey];
391
+ }
392
+ case exports.WS_KEY_MAP.unifiedPerpUSDCPublic: {
393
+ return exports.WS_BASE_URL_MAP.unifiedPerpUSDC.public[networkKey];
394
+ }
395
+ case exports.WS_KEY_MAP.unifiedPrivate: {
396
+ return exports.WS_BASE_URL_MAP.unifiedPerp.private[networkKey];
397
+ }
398
+ case exports.WS_KEY_MAP.contractInversePrivate: {
399
+ return exports.WS_BASE_URL_MAP.contractInverse.private[networkKey];
400
+ }
401
+ case exports.WS_KEY_MAP.contractInversePublic: {
402
+ return exports.WS_BASE_URL_MAP.contractInverse.public[networkKey];
403
+ }
404
+ case exports.WS_KEY_MAP.contractUSDTPrivate: {
405
+ return exports.WS_BASE_URL_MAP.contractUSDT.private[networkKey];
406
+ }
407
+ case exports.WS_KEY_MAP.contractUSDTPublic: {
408
+ return exports.WS_BASE_URL_MAP.contractUSDT.public[networkKey];
409
+ }
410
+ case exports.WS_KEY_MAP.v5Private: {
411
+ return exports.WS_BASE_URL_MAP.v5.private[networkKey];
412
+ }
413
+ case exports.WS_KEY_MAP.v5SpotPublic: {
414
+ return exports.WS_BASE_URL_MAP.v5SpotPublic.public[networkKey];
415
+ }
416
+ case exports.WS_KEY_MAP.v5LinearPublic: {
417
+ return exports.WS_BASE_URL_MAP.v5LinearPublic.public[networkKey];
418
+ }
419
+ case exports.WS_KEY_MAP.v5InversePublic: {
420
+ return exports.WS_BASE_URL_MAP.v5InversePublic.public[networkKey];
421
+ }
422
+ case exports.WS_KEY_MAP.v5OptionPublic: {
423
+ return exports.WS_BASE_URL_MAP.v5OptionPublic.public[networkKey];
424
+ }
425
+ default: {
426
+ this.logger.error('getWsUrl(): Unhandled wsKey: ', {
427
+ category: 'bybit-ws',
428
+ wsKey,
429
+ });
430
+ throw neverGuard(wsKey, 'getWsUrl(): Unhandled wsKey');
431
+ }
432
+ }
433
+ }
434
+ exports.getWsUrl = getWsUrl;
279
435
  function getMaxTopicsPerSubscribeEvent(market) {
280
436
  switch (market) {
281
437
  case 'inverse':
@@ -286,7 +442,8 @@ function getMaxTopicsPerSubscribeEvent(market) {
286
442
  case 'unifiedPerp':
287
443
  case 'spot':
288
444
  case 'contractInverse':
289
- case 'contractUSDT': {
445
+ case 'contractUSDT':
446
+ case 'v5': {
290
447
  return null;
291
448
  }
292
449
  case 'spotv3': {
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../src/util/websocket-util.ts"],"names":[],"mappings":";;;AAWa,QAAA,eAAe,GAGxB;IACF,OAAO,EAAE;QACP,MAAM,EAAE;YACN,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,yCAAyC;SACnD;QACD,OAAO,EAAE;YACP,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,yCAAyC;SACnD;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE;YACN,OAAO,EAAE,wCAAwC;YACjD,QAAQ,EAAE,yCAAyC;YACnD,OAAO,EAAE,gDAAgD;SAC1D;QACD,OAAO,EAAE;YACP,OAAO,EAAE,yCAAyC;YAClD,QAAQ,EAAE,0CAA0C;YACpD,OAAO,EAAE,iDAAiD;SAC3D;KACF;IACD,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,OAAO,EAAE,yCAAyC;YAClD,QAAQ,EAAE,yCAAyC;YACnD,OAAO,EAAE,iDAAiD;YAC1D,QAAQ,EAAE,iDAAiD;SAC5D;QACD,OAAO,EAAE;YACP,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,wCAAwC;SAClD;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE;YACN,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,+CAA+C;SACzD;QACD,OAAO,EAAE;YACP,OAAO,EAAE,wCAAwC;YACjD,OAAO,EAAE,gDAAgD;SAC1D;KACF;IACD,UAAU,EAAE;QACV,MAAM,EAAE;YACN,OAAO,EAAE,oDAAoD;YAC7D,QAAQ,EAAE,qDAAqD;YAC/D,OAAO,EAAE,4DAA4D;SACtE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,qDAAqD;YAC9D,QAAQ,EAAE,sDAAsD;YAChE,OAAO,EAAE,6DAA6D;SACvE;KACF;IACD,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,OAAO,EAAE,wDAAwD;YACjE,QAAQ,EAAE,yDAAyD;YACnE,OAAO,EAAE,gEAAgE;SAC1E;QACD,OAAO,EAAE;YACP,OAAO,EAAE,qDAAqD;YAC9D,QAAQ,EAAE,sDAAsD;YAChE,OAAO,EAAE,6DAA6D;SACvE;KACF;IACD,aAAa,EAAE;QACb,MAAM,EAAE;YACN,OAAO,EAAE,8CAA8C;YACvD,OAAO,EAAE,sDAAsD;SAChE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,mDAAmD;SAC7D;KACF;IACD,WAAW,EAAE;QACX,MAAM,EAAE;YACN,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,yBAAyB;SACnC;QACD,OAAO,EAAE;YACP,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,mDAAmD;SAC7D;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE;YACN,OAAO,EAAE,gDAAgD;YACzD,OAAO,EAAE,wDAAwD;SAClE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,oBAAoB;SAC9B;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE;YACN,OAAO,EAAE,gDAAgD;YACzD,OAAO,EAAE,wDAAwD;SAClE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,oBAAoB;SAC9B;KACF;IACD,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,OAAO,EAAE,gDAAgD;YACzD,OAAO,EAAE,wDAAwD;SAClE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,oDAAoD;SAC9D;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE;YACN,OAAO,EAAE,mDAAmD;YAC5D,OAAO,EAAE,2DAA2D;SACrE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,oDAAoD;SAC9D;KACF;CACF,CAAC;AAEW,QAAA,UAAU,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;CACxC,CAAC;AAEE,QAAA,uBAAuB,GAAY;IAC9C,kBAAU,CAAC,aAAa;IACxB,kBAAU,CAAC,iBAAiB;IAC5B,kBAAU,CAAC,eAAe;IAC1B,kBAAU,CAAC,cAAc;IACzB,kBAAU,CAAC,mBAAmB;IAC9B,kBAAU,CAAC,sBAAsB;CAClC,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,kBAAU,CAAC,YAAY;IACvB,kBAAU,CAAC,UAAU;IACrB,kBAAU,CAAC,YAAY;IACvB,kBAAU,CAAC,gBAAgB;IAC3B,kBAAU,CAAC,cAAc;IACzB,kBAAU,CAAC,mBAAmB;IAC9B,kBAAU,CAAC,qBAAqB;IAChC,kBAAU,CAAC,qBAAqB;IAChC,kBAAU,CAAC,kBAAkB;IAC7B,kBAAU,CAAC,qBAAqB;CACrB,CAAC;AAEd,gHAAgH;AAChH,MAAM,cAAc,GAAG;IACrB,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,qBAAqB;IACrB,iBAAiB;IACjB,YAAY;IACZ,oBAAoB;IACpB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,eAAe;IACf,8BAA8B;IAC9B,2BAA2B;IAC3B,YAAY;IACZ,2BAA2B;IAC3B,cAAc;IACd,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,4BAA4B;IAC5B,yBAAyB;IACzB,yBAAyB;IACzB,cAAc;IACd,iBAAiB;IACjB,8BAA8B;IAC9B,+BAA+B;IAC/B,2BAA2B;IAC3B,4BAA4B;IAC5B,4BAA4B;IAC5B,cAAc;IACd,+BAA+B;IAC/B,gCAAgC;IAChC,4BAA4B;IAC5B,6BAA6B;CAC9B,CAAC;AAEF,SAAgB,gBAAgB,CAC9B,MAAiB,EACjB,KAAa,EACb,SAAmB;IAEnB,MAAM,cAAc,GAAG,SAAS,KAAK,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,QAAQ,MAAM,EAAE;QACd,KAAK,SAAS,CAAC,CAAC;YACd,OAAO,kBAAU,CAAC,OAAO,CAAC;SAC3B;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,aAAa;gBAC1B,CAAC,CAAC,kBAAU,CAAC,YAAY,CAAC;SAC7B;QACD,KAAK,MAAM,CAAC,CAAC;YACX,OAAO,cAAc,CAAC,CAAC,CAAC,kBAAU,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAU,CAAC,UAAU,CAAC;SACxE;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,aAAa;gBAC1B,CAAC,CAAC,kBAAU,CAAC,YAAY,CAAC;SAC7B;QACD,KAAK,YAAY,CAAC,CAAC;YACjB,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,iBAAiB;gBAC9B,CAAC,CAAC,kBAAU,CAAC,gBAAgB,CAAC;SACjC;QACD,KAAK,UAAU,CAAC,CAAC;YACf,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,eAAe;gBAC5B,CAAC,CAAC,kBAAU,CAAC,cAAc,CAAC;SAC/B;QACD,KAAK,eAAe,CAAC,CAAC;YACpB,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,cAAc;gBAC3B,CAAC,CAAC,kBAAU,CAAC,mBAAmB,CAAC;SACpC;QACD,KAAK,aAAa,CAAC,CAAC;YAClB,IAAI,cAAc,EAAE;gBAClB,OAAO,kBAAU,CAAC,cAAc,CAAC;aAClC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,OAAO,kBAAU,CAAC,qBAAqB,CAAC;aACzC;YAED,IACE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACjC;gBACA,OAAO,kBAAU,CAAC,qBAAqB,CAAC;aACzC;YAED,MAAM,IAAI,KAAK,CACb,uDAAuD,KAAK,GAAG,CAChE,CAAC;SACH;QACD,KAAK,iBAAiB,CAAC,CAAC;YACtB,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,sBAAsB;gBACnC,CAAC,CAAC,kBAAU,CAAC,qBAAqB,CAAC;SACtC;QACD,KAAK,cAAc,CAAC,CAAC;YACnB,OAAO,cAAc;gBACnB,CAAC,CAAC,kBAAU,CAAC,mBAAmB;gBAChC,CAAC,CAAC,kBAAU,CAAC,kBAAkB,CAAC;SACnC;QACD,OAAO,CAAC,CAAC;YACP,MAAM,UAAU,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;SAClE;KACF;AACH,CAAC;AAzED,4CAyEC;AAED,SAAgB,6BAA6B,CAC3C,MAAiB;IAEjB,QAAQ,MAAM,EAAE;QACd,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe,CAAC;QACrB,KAAK,aAAa,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,iBAAiB,CAAC;QACvB,KAAK,cAAc,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;SACb;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,CAAC;YACP,MAAM,UAAU,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;SAClE;KACF;AACH,CAAC;AAtBD,sEAsBC;AAED,SAAgB,oBAAoB,CAClC,KAAa,EACb,QAA2B;IAE3B,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,QAAQ,KAAK,QAAQ,EAAE;QACzB,OAAO,cAAc;YACnB,CAAC,CAAC,kBAAU,CAAC,iBAAiB;YAC9B,CAAC,CAAC,kBAAU,CAAC,gBAAgB,CAAC;KACjC;IACD,OAAO,cAAc;QACnB,CAAC,CAAC,kBAAU,CAAC,iBAAiB;QAC9B,CAAC,CAAC,kBAAU,CAAC,gBAAgB,CAAC;IAChC,wBAAwB;IACxB,iCAAiC;IACjC,iCAAiC;AACnC,CAAC;AAhBD,oDAgBC;AAEY,QAAA,aAAa,GAAG;IAC3B,yBAAyB,EAAE,OAAO;IAClC,iBAAiB,EAAE,OAAO;IAC1B,oBAAoB,EAAE,OAAO;IAC7B,uBAAuB,EAAE,SAAS;CACnC,CAAC;AAEF,SAAgB,UAAU,CAAC,CAAQ,EAAE,GAAW;IAC9C,OAAO,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;AAC5D,CAAC;AAFD,gCAEC"}
1
+ {"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../src/util/websocket-util.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import { EventEmitter } from 'events';
3
3
  import WebSocket from 'isomorphic-ws';
4
4
  import WsStore from './util/WsStore';
5
- import { KlineInterval, WSClientConfigurableOptions, WsKey, WsTopic } from './types';
5
+ import { CategoryV5, KlineInterval, WSClientConfigurableOptions, WsKey, WsTopic } from './types';
6
6
  import { DefaultLogger } from './util';
7
7
  export declare type WsClientEvent = 'open' | 'update' | 'close' | 'error' | 'reconnect' | 'reconnected' | 'response';
8
8
  interface WebsocketClientEvents {
@@ -43,14 +43,38 @@ export declare class WebsocketClient extends EventEmitter {
43
43
  private options;
44
44
  private wsStore;
45
45
  constructor(options: WSClientConfigurableOptions, logger?: typeof DefaultLogger);
46
+ /** Get the WsStore that tracks websockets & topics */
47
+ getWsStore(): WsStore;
48
+ isTestnet(): boolean;
46
49
  /**
47
- * Subscribe to topics & track/persist them. They will be automatically resubscribed to if the connection drops/reconnects.
48
- * @param wsTopics topic or list of topics
50
+ * Subscribe to V5 topics & track/persist them.
51
+ * @param wsTopics - topic or list of topics
52
+ * @param category - the API category this topic is for (e.g. "linear"). The value is only important when connecting to public topics and will be ignored for private topics.
53
+ * @param isPrivateTopic - optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
54
+ */
55
+ subscribeV5(wsTopics: WsTopic[] | WsTopic, category: CategoryV5, isPrivateTopic?: boolean): void;
56
+ /**
57
+ * Subscribe to V1-V3 topics & track/persist them.
58
+ *
59
+ * Note: for public V5 topics use the `subscribeV5()` method.
60
+ *
61
+ * Topics will be automatically resubscribed to if the connection resets/drops/reconnects.
62
+ * @param wsTopics - topic or list of topics
49
63
  * @param isPrivateTopic optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
50
64
  */
51
65
  subscribe(wsTopics: WsTopic[] | WsTopic, isPrivateTopic?: boolean): void;
52
66
  /**
53
- * Unsubscribe from topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
67
+ * Unsubscribe from V5 topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
68
+ * @param wsTopics - topic or list of topics
69
+ * @param category - the API category this topic is for (e.g. "linear"). The value is only important when connecting to public topics and will be ignored for private topics.
70
+ * @param isPrivateTopic - optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
71
+ */
72
+ unsubscribeV5(wsTopics: WsTopic[] | WsTopic, category: CategoryV5, isPrivateTopic?: boolean): void;
73
+ /**
74
+ * Unsubscribe from V1-V3 topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
75
+ *
76
+ * Note: For public V5 topics, use `unsubscribeV5()` instead!
77
+ *
54
78
  * @param wsTopics topic or list of topics
55
79
  * @param isPrivateTopic optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
56
80
  */
@@ -60,9 +84,6 @@ export declare class WebsocketClient extends EventEmitter {
60
84
  * I've removed this for ftx and it's working great, tempted to remove this here
61
85
  */
62
86
  private prepareRESTClient;
63
- /** Get the WsStore that tracks websockets & topics */
64
- getWsStore(): WsStore;
65
- isTestnet(): boolean;
66
87
  close(wsKey: WsKey, force?: boolean): void;
67
88
  closeAll(force?: boolean): void;
68
89
  /**
@@ -105,7 +126,6 @@ export declare class WebsocketClient extends EventEmitter {
105
126
  private onWsClose;
106
127
  private getWs;
107
128
  private setWsState;
108
- private getWsUrl;
109
129
  private wrongMarketError;
110
130
  /** @deprecated use "market: 'spotv3" client */
111
131
  subscribePublicSpotTrades(symbol: string, binary?: boolean): void;
@@ -28,6 +28,7 @@ const contract_client_1 = require("./contract-client");
28
28
  const node_support_1 = require("./util/node-support");
29
29
  const WsStore_1 = __importDefault(require("./util/WsStore"));
30
30
  const util_1 = require("./util");
31
+ const rest_client_v5_1 = require("./rest-client-v5");
31
32
  const loggerCategory = { category: 'bybit-ws' };
32
33
  // eslint-disable-next-line no-redeclare
33
34
  class WebsocketClient extends events_1.EventEmitter {
@@ -42,13 +43,54 @@ class WebsocketClient extends events_1.EventEmitter {
42
43
  // eslint-disable-next-line @typescript-eslint/no-empty-function
43
44
  this.on('error', () => { });
44
45
  }
46
+ /** Get the WsStore that tracks websockets & topics */
47
+ getWsStore() {
48
+ return this.wsStore;
49
+ }
50
+ isTestnet() {
51
+ return this.options.testnet === true;
52
+ }
45
53
  /**
46
- * Subscribe to topics & track/persist them. They will be automatically resubscribed to if the connection drops/reconnects.
47
- * @param wsTopics topic or list of topics
54
+ * Subscribe to V5 topics & track/persist them.
55
+ * @param wsTopics - topic or list of topics
56
+ * @param category - the API category this topic is for (e.g. "linear"). The value is only important when connecting to public topics and will be ignored for private topics.
57
+ * @param isPrivateTopic - optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
58
+ */
59
+ subscribeV5(wsTopics, category, isPrivateTopic) {
60
+ const topics = Array.isArray(wsTopics) ? wsTopics : [wsTopics];
61
+ topics.forEach((topic) => {
62
+ const wsKey = util_1.getWsKeyForTopic(this.options.market, topic, isPrivateTopic, category);
63
+ // Persist topic for reconnects
64
+ this.wsStore.addTopic(wsKey, topic);
65
+ // if connected, send subscription request
66
+ if (this.wsStore.isConnectionState(wsKey, util_1.WsConnectionStateEnum.CONNECTED)) {
67
+ return this.requestSubscribeTopics(wsKey, [topic]);
68
+ }
69
+ // start connection process if it hasn't yet begun. Topics are automatically subscribed to on-connect
70
+ if (!this.wsStore.isConnectionState(wsKey, util_1.WsConnectionStateEnum.CONNECTING) &&
71
+ !this.wsStore.isConnectionState(wsKey, util_1.WsConnectionStateEnum.RECONNECTING)) {
72
+ return this.connect(wsKey);
73
+ }
74
+ });
75
+ }
76
+ /**
77
+ * Subscribe to V1-V3 topics & track/persist them.
78
+ *
79
+ * Note: for public V5 topics use the `subscribeV5()` method.
80
+ *
81
+ * Topics will be automatically resubscribed to if the connection resets/drops/reconnects.
82
+ * @param wsTopics - topic or list of topics
48
83
  * @param isPrivateTopic optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
49
84
  */
50
85
  subscribe(wsTopics, isPrivateTopic) {
51
86
  const topics = Array.isArray(wsTopics) ? wsTopics : [wsTopics];
87
+ if (this.options.market === 'v5') {
88
+ topics.forEach((topic) => {
89
+ if (!util_1.isPrivateWsTopic(topic)) {
90
+ throw new Error('For public "v5" websocket topics, use the subscribeV5() method & provide the category parameter');
91
+ }
92
+ });
93
+ }
52
94
  topics.forEach((topic) => {
53
95
  const wsKey = util_1.getWsKeyForTopic(this.options.market, topic, isPrivateTopic);
54
96
  // Persist topic for reconnects
@@ -65,12 +107,40 @@ class WebsocketClient extends events_1.EventEmitter {
65
107
  });
66
108
  }
67
109
  /**
68
- * Unsubscribe from topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
110
+ * Unsubscribe from V5 topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
111
+ * @param wsTopics - topic or list of topics
112
+ * @param category - the API category this topic is for (e.g. "linear"). The value is only important when connecting to public topics and will be ignored for private topics.
113
+ * @param isPrivateTopic - optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
114
+ */
115
+ unsubscribeV5(wsTopics, category, isPrivateTopic) {
116
+ const topics = Array.isArray(wsTopics) ? wsTopics : [wsTopics];
117
+ topics.forEach((topic) => {
118
+ const wsKey = util_1.getWsKeyForTopic(this.options.market, topic, isPrivateTopic, category);
119
+ // Remove topic from persistence for reconnects
120
+ this.wsStore.deleteTopic(wsKey, topic);
121
+ // unsubscribe request only necessary if active connection exists
122
+ if (this.wsStore.isConnectionState(wsKey, util_1.WsConnectionStateEnum.CONNECTED)) {
123
+ this.requestUnsubscribeTopics(wsKey, [topic]);
124
+ }
125
+ });
126
+ }
127
+ /**
128
+ * Unsubscribe from V1-V3 topics & remove them from memory. They won't be re-subscribed to if the connection reconnects.
129
+ *
130
+ * Note: For public V5 topics, use `unsubscribeV5()` instead!
131
+ *
69
132
  * @param wsTopics topic or list of topics
70
133
  * @param isPrivateTopic optional - the library will try to detect private topics, you can use this to mark a topic as private (if the topic isn't recognised yet)
71
134
  */
72
135
  unsubscribe(wsTopics, isPrivateTopic) {
73
136
  const topics = Array.isArray(wsTopics) ? wsTopics : [wsTopics];
137
+ if (this.options.market === 'v5') {
138
+ topics.forEach((topic) => {
139
+ if (!util_1.isPrivateWsTopic(topic)) {
140
+ throw new Error('For public "v5" websocket topics, use the unsubscribeV5() method & provide the category parameter');
141
+ }
142
+ });
143
+ }
74
144
  topics.forEach((topic) => {
75
145
  const wsKey = util_1.getWsKeyForTopic(this.options.market, topic, isPrivateTopic);
76
146
  // Remove topic from persistence for reconnects
@@ -122,18 +192,15 @@ class WebsocketClient extends events_1.EventEmitter {
122
192
  this.restClient = new contract_client_1.ContractClient(this.options.restOptions, this.options.requestOptions);
123
193
  break;
124
194
  }
195
+ case 'v5': {
196
+ this.restClient = new rest_client_v5_1.RestClientV5(this.options.restOptions, this.options.requestOptions);
197
+ break;
198
+ }
125
199
  default: {
126
200
  throw util_1.neverGuard(this.options.market, 'prepareRESTClient(): Unhandled market');
127
201
  }
128
202
  }
129
203
  }
130
- /** Get the WsStore that tracks websockets & topics */
131
- getWsStore() {
132
- return this.wsStore;
133
- }
134
- isTestnet() {
135
- return this.options.testnet === true;
136
- }
137
204
  close(wsKey, force) {
138
205
  this.logger.info('Closing connection', Object.assign(Object.assign({}, loggerCategory), { wsKey }));
139
206
  this.setWsState(wsKey, util_1.WsConnectionStateEnum.CLOSING);
@@ -172,6 +239,9 @@ class WebsocketClient extends events_1.EventEmitter {
172
239
  case 'contractInverse': {
173
240
  return [...this.connectPublic(), this.connectPrivate()];
174
241
  }
242
+ case 'v5': {
243
+ return [this.connectPrivate()];
244
+ }
175
245
  default: {
176
246
  throw util_1.neverGuard(this.options.market, 'connectAll(): Unhandled market');
177
247
  }
@@ -210,6 +280,14 @@ class WebsocketClient extends events_1.EventEmitter {
210
280
  return [this.connect(util_1.WS_KEY_MAP.contractUSDTPublic)];
211
281
  case 'contractInverse':
212
282
  return [this.connect(util_1.WS_KEY_MAP.contractInversePublic)];
283
+ case 'v5': {
284
+ return [
285
+ this.connect(util_1.WS_KEY_MAP.v5SpotPublic),
286
+ this.connect(util_1.WS_KEY_MAP.v5LinearPublic),
287
+ this.connect(util_1.WS_KEY_MAP.v5InversePublic),
288
+ this.connect(util_1.WS_KEY_MAP.v5OptionPublic),
289
+ ];
290
+ }
213
291
  default: {
214
292
  throw util_1.neverGuard(this.options.market, 'connectPublic(): Unhandled market');
215
293
  }
@@ -243,6 +321,9 @@ class WebsocketClient extends events_1.EventEmitter {
243
321
  return this.connect(util_1.WS_KEY_MAP.contractUSDTPrivate);
244
322
  case 'contractInverse':
245
323
  return this.connect(util_1.WS_KEY_MAP.contractInversePrivate);
324
+ case 'v5': {
325
+ return this.connect(util_1.WS_KEY_MAP.v5Private);
326
+ }
246
327
  default: {
247
328
  throw util_1.neverGuard(this.options.market, 'connectPrivate(): Unhandled market');
248
329
  }
@@ -264,8 +345,8 @@ class WebsocketClient extends events_1.EventEmitter {
264
345
  this.setWsState(wsKey, util_1.WsConnectionStateEnum.CONNECTING);
265
346
  }
266
347
  const authParams = yield this.getAuthParams(wsKey);
267
- const url = this.getWsUrl(wsKey) + authParams;
268
- const ws = this.connectToWsUrl(url, wsKey);
348
+ const url = util_1.getWsUrl(wsKey, this.options.wsUrl, this.isTestnet());
349
+ const ws = this.connectToWsUrl(url + authParams, wsKey);
269
350
  return this.wsStore.setWs(wsKey, ws);
270
351
  }
271
352
  catch (err) {
@@ -593,78 +674,8 @@ class WebsocketClient extends events_1.EventEmitter {
593
674
  setWsState(wsKey, state) {
594
675
  this.wsStore.setConnectionState(wsKey, state);
595
676
  }
596
- getWsUrl(wsKey) {
597
- if (this.options.wsUrl) {
598
- return this.options.wsUrl;
599
- }
600
- const networkKey = this.isTestnet() ? 'testnet' : 'livenet';
601
- switch (wsKey) {
602
- case util_1.WS_KEY_MAP.linearPublic: {
603
- return util_1.WS_BASE_URL_MAP.linear.public[networkKey];
604
- }
605
- case util_1.WS_KEY_MAP.linearPrivate: {
606
- return util_1.WS_BASE_URL_MAP.linear.private[networkKey];
607
- }
608
- case util_1.WS_KEY_MAP.spotPublic: {
609
- return util_1.WS_BASE_URL_MAP.spot.public[networkKey];
610
- }
611
- case util_1.WS_KEY_MAP.spotPrivate: {
612
- return util_1.WS_BASE_URL_MAP.spot.private[networkKey];
613
- }
614
- case util_1.WS_KEY_MAP.spotV3Public: {
615
- return util_1.WS_BASE_URL_MAP.spotv3.public[networkKey];
616
- }
617
- case util_1.WS_KEY_MAP.spotV3Private: {
618
- return util_1.WS_BASE_URL_MAP.spotv3.private[networkKey];
619
- }
620
- case util_1.WS_KEY_MAP.inverse: {
621
- // private and public are on the same WS connection
622
- return util_1.WS_BASE_URL_MAP.inverse.public[networkKey];
623
- }
624
- case util_1.WS_KEY_MAP.usdcOptionPublic: {
625
- return util_1.WS_BASE_URL_MAP.usdcOption.public[networkKey];
626
- }
627
- case util_1.WS_KEY_MAP.usdcOptionPrivate: {
628
- return util_1.WS_BASE_URL_MAP.usdcOption.private[networkKey];
629
- }
630
- case util_1.WS_KEY_MAP.usdcPerpPublic: {
631
- return util_1.WS_BASE_URL_MAP.usdcPerp.public[networkKey];
632
- }
633
- case util_1.WS_KEY_MAP.usdcPerpPrivate: {
634
- return util_1.WS_BASE_URL_MAP.usdcPerp.private[networkKey];
635
- }
636
- case util_1.WS_KEY_MAP.unifiedOptionPublic: {
637
- return util_1.WS_BASE_URL_MAP.unifiedOption.public[networkKey];
638
- }
639
- case util_1.WS_KEY_MAP.unifiedPerpUSDTPublic: {
640
- return util_1.WS_BASE_URL_MAP.unifiedPerpUSDT.public[networkKey];
641
- }
642
- case util_1.WS_KEY_MAP.unifiedPerpUSDCPublic: {
643
- return util_1.WS_BASE_URL_MAP.unifiedPerpUSDC.public[networkKey];
644
- }
645
- case util_1.WS_KEY_MAP.unifiedPrivate: {
646
- return util_1.WS_BASE_URL_MAP.unifiedPerp.private[networkKey];
647
- }
648
- case util_1.WS_KEY_MAP.contractInversePrivate: {
649
- return util_1.WS_BASE_URL_MAP.contractInverse.private[networkKey];
650
- }
651
- case util_1.WS_KEY_MAP.contractInversePublic: {
652
- return util_1.WS_BASE_URL_MAP.contractInverse.public[networkKey];
653
- }
654
- case util_1.WS_KEY_MAP.contractUSDTPrivate: {
655
- return util_1.WS_BASE_URL_MAP.contractUSDT.private[networkKey];
656
- }
657
- case util_1.WS_KEY_MAP.contractUSDTPublic: {
658
- return util_1.WS_BASE_URL_MAP.contractUSDT.public[networkKey];
659
- }
660
- default: {
661
- this.logger.error('getWsUrl(): Unhandled wsKey: ', Object.assign(Object.assign({}, loggerCategory), { wsKey }));
662
- throw util_1.neverGuard(wsKey, 'getWsUrl(): Unhandled wsKey');
663
- }
664
- }
665
- }
666
677
  wrongMarketError(market) {
667
- return new Error(`This WS client was instanced for the ${this.options.market} market. Make another WebsocketClient instance with "market: '${market}' to listen to spot topics`);
678
+ return new Error(`This WS client was instanced for the ${this.options.market} market. Make another WebsocketClient instance with "market: '${market}'" to listen to ${market} topics`);
668
679
  }
669
680
  /** @deprecated use "market: 'spotv3" client */
670
681
  subscribePublicSpotTrades(symbol, binary) {