@grvt/client 1.4.30 → 1.5.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/MDG/index.d.ts +2 -2
- package/MDG/index.js +76 -38
- package/TDG/index.d.ts +2 -42
- package/TDG/index.js +152 -150
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/interfaces/codegen/index.d.ts +0 -1
- package/interfaces/codegen/index.js +0 -1
- package/package.json +1 -1
- package/utils/index.d.ts +2 -2
- package/utils/index.js +2 -1
- package/ws/ws.d.ts +13 -3
- package/ws/ws.js +201 -70
- package/interfaces/codegen/schema-maps/index.d.ts +0 -332
- package/interfaces/codegen/schema-maps/index.js +0 -348
package/ws/ws.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { TWSRequest } from './interfaces';
|
|
2
|
+
export declare class WSError extends Error {
|
|
3
|
+
code?: number;
|
|
4
|
+
status?: number;
|
|
5
|
+
constructor(response: {
|
|
6
|
+
status?: number;
|
|
7
|
+
code?: number;
|
|
8
|
+
message?: string;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
2
11
|
interface IOptions {
|
|
3
12
|
url: string | URL;
|
|
4
13
|
protocols?: string | string[];
|
|
@@ -46,14 +55,15 @@ export declare class WS {
|
|
|
46
55
|
private readonly _onCloses;
|
|
47
56
|
onClose(callback: (e: CloseEvent) => void): () => void;
|
|
48
57
|
private readonly _onErrors;
|
|
49
|
-
onError(callback: (e: Event) => void): () => void;
|
|
58
|
+
onError(callback: (e: Event | WSError) => void): () => void;
|
|
50
59
|
private _subscribeCurrentPairs;
|
|
51
60
|
private _subscribe;
|
|
52
61
|
/**
|
|
53
62
|
* Only supports one feed
|
|
54
63
|
*/
|
|
55
64
|
subscribe(_options: TWSRequest): string;
|
|
56
|
-
|
|
65
|
+
subscribes(...subscriptions: TWSRequest[]): string[];
|
|
66
|
+
unsubscribe(...pairedConsumerKeys: string[]): this;
|
|
57
67
|
connect(): this;
|
|
58
68
|
disconnect(): this;
|
|
59
69
|
ready(delay?: number): Promise<unknown>;
|
package/ws/ws.js
CHANGED
|
@@ -20,10 +20,31 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
return t;
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.WS = void 0;
|
|
24
|
-
const
|
|
23
|
+
exports.WS = exports.WSError = void 0;
|
|
24
|
+
const ws_candlestick_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_candlestick_feed_data_v_1");
|
|
25
|
+
const ws_deposit_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_deposit_feed_data_v_1");
|
|
26
|
+
const ws_fill_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_fill_feed_data_v_1");
|
|
27
|
+
const ws_mini_ticker_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_mini_ticker_feed_data_v_1");
|
|
28
|
+
const ws_order_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_order_feed_data_v_1");
|
|
29
|
+
const ws_order_group_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_order_group_feed_data_v_1");
|
|
30
|
+
const ws_order_state_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_order_state_feed_data_v_1");
|
|
31
|
+
const ws_orderbook_levels_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_orderbook_levels_feed_data_v_1");
|
|
32
|
+
const ws_positions_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_positions_feed_data_v_1");
|
|
33
|
+
const ws_ticker_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_ticker_feed_data_v_1");
|
|
34
|
+
const ws_trade_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_trade_feed_data_v_1");
|
|
35
|
+
const ws_transfer_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_transfer_feed_data_v_1");
|
|
36
|
+
const ws_withdrawal_feed_data_v_1_1 = require("../interfaces/codegen/schema-maps/ws_withdrawal_feed_data_v_1");
|
|
25
37
|
const utils_1 = require("../utils");
|
|
26
|
-
const
|
|
38
|
+
const interfaces_1 = require("./interfaces");
|
|
39
|
+
class WSError extends Error {
|
|
40
|
+
constructor(response) {
|
|
41
|
+
super(response.message);
|
|
42
|
+
this.name = 'WSError';
|
|
43
|
+
this.code = response.code;
|
|
44
|
+
this.status = response.status;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.WSError = WSError;
|
|
27
48
|
const omitZeroStr = (str) => str === '0' ? '' : str;
|
|
28
49
|
class WS {
|
|
29
50
|
get _ws() {
|
|
@@ -128,7 +149,7 @@ class WS {
|
|
|
128
149
|
reconnect();
|
|
129
150
|
});
|
|
130
151
|
currentWs.addEventListener('message', (e) => {
|
|
131
|
-
var _a, _b, _c, _d, _e, _f;
|
|
152
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
132
153
|
// only keep the latest ws
|
|
133
154
|
if (currentWs !== this.__ws) {
|
|
134
155
|
this._close(currentWs);
|
|
@@ -140,17 +161,33 @@ class WS {
|
|
|
140
161
|
}
|
|
141
162
|
const message = utils_1.JsonUtils.parse(e.data);
|
|
142
163
|
/**
|
|
143
|
-
*
|
|
164
|
+
* Handle error response
|
|
144
165
|
*/
|
|
145
|
-
if (message.status
|
|
166
|
+
if ((_b = (_a = message.status) !== null && _a !== void 0 ? _a : message.c) !== null && _b !== void 0 ? _b : message.code) {
|
|
167
|
+
/**
|
|
168
|
+
* Ignore 1003 response "Request could not be processed due to malformed syntax"
|
|
169
|
+
* This happens when client send
|
|
170
|
+
*/
|
|
171
|
+
const code = (_c = message.c) !== null && _c !== void 0 ? _c : message.code;
|
|
172
|
+
if (code !== 1003) {
|
|
173
|
+
const error = new WSError(Object.assign(Object.assign({}, message), { code, message: (_d = message.m) !== null && _d !== void 0 ? _d : message.message }));
|
|
174
|
+
if (this._onErrors.length) {
|
|
175
|
+
for (const onError of this._onErrors) {
|
|
176
|
+
onError(error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.error(error);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
146
183
|
return;
|
|
147
184
|
}
|
|
148
|
-
const stream = message.s = (
|
|
185
|
+
const stream = message.s = (_f = (_e = message.s) === null || _e === void 0 ? void 0 : _e.replace) === null || _f === void 0 ? void 0 : _f.call(_e, `${this._version}.`, '');
|
|
149
186
|
const result = this._messageLiteToFull(message);
|
|
150
187
|
// no entity found
|
|
151
188
|
if (!result) {
|
|
152
189
|
// if no entity found and not a subscription message
|
|
153
|
-
if (!((
|
|
190
|
+
if (!((_g = message.s1) === null || _g === void 0 ? void 0 : _g.length)) {
|
|
154
191
|
console.warn('Error: something went wrong with message', message);
|
|
155
192
|
}
|
|
156
193
|
return;
|
|
@@ -159,7 +196,7 @@ class WS {
|
|
|
159
196
|
console.warn('Error: cannot parse stream or feed from message', message);
|
|
160
197
|
return;
|
|
161
198
|
}
|
|
162
|
-
const instrument = (
|
|
199
|
+
const instrument = (_k = (_j = (_h = result === null || result === void 0 ? void 0 : result.legs) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.instrument) !== null && _k !== void 0 ? _k : result === null || result === void 0 ? void 0 : result.instrument;
|
|
163
200
|
/**
|
|
164
201
|
* Handle subscriptions with instrument
|
|
165
202
|
*/
|
|
@@ -225,21 +262,21 @@ class WS {
|
|
|
225
262
|
].filter(Boolean).join('-');
|
|
226
263
|
const withdrawalFromAccountId = omitZeroStr(result.from_account_id);
|
|
227
264
|
switch (stream) {
|
|
228
|
-
case
|
|
265
|
+
case interfaces_1.EStream.GROUP:
|
|
229
266
|
return [...acc, ...Object.values(value)];
|
|
230
|
-
case
|
|
267
|
+
case interfaces_1.EStream.STATE:
|
|
231
268
|
return [...acc, ...Object.values(value)];
|
|
232
|
-
case
|
|
269
|
+
case interfaces_1.EStream.DEPOSIT:
|
|
233
270
|
if (depositDestinationAccountId && key.endsWith(depositDestinationAccountId)) {
|
|
234
271
|
return [...acc, ...Object.values(value)];
|
|
235
272
|
}
|
|
236
273
|
break;
|
|
237
|
-
case
|
|
274
|
+
case interfaces_1.EStream.TRANSFER:
|
|
238
275
|
if ((transferSourceKey && key.endsWith(transferSourceKey)) || (transferDestinationKey && key.endsWith(transferDestinationKey))) {
|
|
239
276
|
return [...acc, ...Object.values(value)];
|
|
240
277
|
}
|
|
241
278
|
break;
|
|
242
|
-
case
|
|
279
|
+
case interfaces_1.EStream.WITHDRAWAL:
|
|
243
280
|
if (withdrawalFromAccountId && key.endsWith(withdrawalFromAccountId)) {
|
|
244
281
|
return [...acc, ...Object.values(value)];
|
|
245
282
|
}
|
|
@@ -259,10 +296,10 @@ class WS {
|
|
|
259
296
|
return acc;
|
|
260
297
|
}
|
|
261
298
|
const hasSubAccountId = [
|
|
262
|
-
|
|
299
|
+
interfaces_1.EStream.ORDER,
|
|
263
300
|
// EStream.STATE,
|
|
264
|
-
|
|
265
|
-
|
|
301
|
+
interfaces_1.EStream.POSITION,
|
|
302
|
+
interfaces_1.EStream.FILL
|
|
266
303
|
// EStream.DEPOSIT,
|
|
267
304
|
// EStream.TRANSFER,
|
|
268
305
|
// EStream.WITHDRAWAL
|
|
@@ -415,76 +452,76 @@ class WS {
|
|
|
415
452
|
};
|
|
416
453
|
const { stream, params } = options;
|
|
417
454
|
switch (stream) {
|
|
418
|
-
case
|
|
455
|
+
case interfaces_1.EStream.CANDLE:
|
|
419
456
|
return {
|
|
420
457
|
stream,
|
|
421
458
|
feed: [candleFeed(params)]
|
|
422
459
|
};
|
|
423
|
-
case
|
|
424
|
-
case
|
|
460
|
+
case interfaces_1.EStream.ORDERBOOK_DELTA:
|
|
461
|
+
case interfaces_1.EStream.RPI_BOOK_DELTA:
|
|
425
462
|
return {
|
|
426
463
|
stream,
|
|
427
464
|
feed: [rpiBookDeltaFeed(params)]
|
|
428
465
|
};
|
|
429
|
-
case
|
|
430
|
-
case
|
|
466
|
+
case interfaces_1.EStream.ORDERBOOK_SNAP:
|
|
467
|
+
case interfaces_1.EStream.RPI_BOOK_SNAP:
|
|
431
468
|
return {
|
|
432
469
|
stream,
|
|
433
470
|
feed: [rpiBookFeed(params)]
|
|
434
471
|
};
|
|
435
|
-
case
|
|
436
|
-
case
|
|
472
|
+
case interfaces_1.EStream.MINI_DELTA:
|
|
473
|
+
case interfaces_1.EStream.MINI_SNAP:
|
|
437
474
|
return {
|
|
438
475
|
stream,
|
|
439
476
|
feed: [miniFeed(params)]
|
|
440
477
|
};
|
|
441
|
-
case
|
|
442
|
-
case
|
|
478
|
+
case interfaces_1.EStream.TICKER_DELTA:
|
|
479
|
+
case interfaces_1.EStream.TICKER_SNAP:
|
|
443
480
|
return {
|
|
444
481
|
stream,
|
|
445
482
|
feed: [tickerFeed(params)]
|
|
446
483
|
};
|
|
447
|
-
case
|
|
484
|
+
case interfaces_1.EStream.TRADE:
|
|
448
485
|
return {
|
|
449
486
|
stream,
|
|
450
487
|
feed: [publicTradesFeed(params)]
|
|
451
488
|
};
|
|
452
|
-
case
|
|
489
|
+
case interfaces_1.EStream.GROUP:
|
|
453
490
|
return {
|
|
454
491
|
stream,
|
|
455
492
|
feed: [orderGroupFeed(params)]
|
|
456
493
|
};
|
|
457
|
-
case
|
|
494
|
+
case interfaces_1.EStream.ORDER:
|
|
458
495
|
return {
|
|
459
496
|
stream,
|
|
460
497
|
feed: [orderFeed(params)]
|
|
461
498
|
};
|
|
462
|
-
case
|
|
499
|
+
case interfaces_1.EStream.STATE:
|
|
463
500
|
return {
|
|
464
501
|
stream,
|
|
465
502
|
feed: [orderStateFeed(params)]
|
|
466
503
|
};
|
|
467
|
-
case
|
|
504
|
+
case interfaces_1.EStream.POSITION:
|
|
468
505
|
return {
|
|
469
506
|
stream,
|
|
470
507
|
feed: [positionFeed(params)]
|
|
471
508
|
};
|
|
472
|
-
case
|
|
509
|
+
case interfaces_1.EStream.FILL:
|
|
473
510
|
return {
|
|
474
511
|
stream,
|
|
475
512
|
feed: [fillFeed(params)]
|
|
476
513
|
};
|
|
477
|
-
case
|
|
514
|
+
case interfaces_1.EStream.DEPOSIT:
|
|
478
515
|
return {
|
|
479
516
|
stream,
|
|
480
517
|
feed: [depositFeed(params)]
|
|
481
518
|
};
|
|
482
|
-
case
|
|
519
|
+
case interfaces_1.EStream.TRANSFER:
|
|
483
520
|
return {
|
|
484
521
|
stream,
|
|
485
522
|
feed: [transferFeed(params)]
|
|
486
523
|
};
|
|
487
|
-
case
|
|
524
|
+
case interfaces_1.EStream.WITHDRAWAL:
|
|
488
525
|
return {
|
|
489
526
|
stream,
|
|
490
527
|
feed: [withdrawalFeed(params)]
|
|
@@ -495,37 +532,37 @@ class WS {
|
|
|
495
532
|
}
|
|
496
533
|
_messageLiteToFull(message) {
|
|
497
534
|
switch (message.s) {
|
|
498
|
-
case
|
|
499
|
-
return utils_1.Utils.schemaMap(message,
|
|
500
|
-
case
|
|
501
|
-
case
|
|
502
|
-
case
|
|
503
|
-
case
|
|
504
|
-
return utils_1.Utils.schemaMap(message,
|
|
505
|
-
case
|
|
506
|
-
case
|
|
507
|
-
return utils_1.Utils.schemaMap(message,
|
|
508
|
-
case
|
|
509
|
-
case
|
|
510
|
-
return utils_1.Utils.schemaMap(message,
|
|
511
|
-
case
|
|
512
|
-
return utils_1.Utils.schemaMap(message,
|
|
513
|
-
case
|
|
514
|
-
return utils_1.Utils.schemaMap(message,
|
|
515
|
-
case
|
|
516
|
-
return utils_1.Utils.schemaMap(message,
|
|
517
|
-
case
|
|
518
|
-
return utils_1.Utils.schemaMap(message,
|
|
519
|
-
case
|
|
520
|
-
return utils_1.Utils.schemaMap(message,
|
|
521
|
-
case
|
|
522
|
-
return utils_1.Utils.schemaMap(message,
|
|
523
|
-
case
|
|
524
|
-
return utils_1.Utils.schemaMap(message,
|
|
525
|
-
case
|
|
526
|
-
return utils_1.Utils.schemaMap(message,
|
|
527
|
-
case
|
|
528
|
-
return utils_1.Utils.schemaMap(message,
|
|
535
|
+
case interfaces_1.EStream.CANDLE:
|
|
536
|
+
return utils_1.Utils.schemaMap(message, ws_candlestick_feed_data_v_1_1.WS_CANDLESTICK_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
537
|
+
case interfaces_1.EStream.ORDERBOOK_DELTA:
|
|
538
|
+
case interfaces_1.EStream.ORDERBOOK_SNAP:
|
|
539
|
+
case interfaces_1.EStream.RPI_BOOK_DELTA:
|
|
540
|
+
case interfaces_1.EStream.RPI_BOOK_SNAP:
|
|
541
|
+
return utils_1.Utils.schemaMap(message, ws_orderbook_levels_feed_data_v_1_1.WS_ORDERBOOK_LEVELS_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
542
|
+
case interfaces_1.EStream.MINI_DELTA:
|
|
543
|
+
case interfaces_1.EStream.MINI_SNAP:
|
|
544
|
+
return utils_1.Utils.schemaMap(message, ws_mini_ticker_feed_data_v_1_1.WS_MINI_TICKER_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
545
|
+
case interfaces_1.EStream.TICKER_DELTA:
|
|
546
|
+
case interfaces_1.EStream.TICKER_SNAP:
|
|
547
|
+
return utils_1.Utils.schemaMap(message, ws_ticker_feed_data_v_1_1.WS_TICKER_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
548
|
+
case interfaces_1.EStream.TRADE:
|
|
549
|
+
return utils_1.Utils.schemaMap(message, ws_trade_feed_data_v_1_1.WS_TRADE_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
550
|
+
case interfaces_1.EStream.GROUP:
|
|
551
|
+
return utils_1.Utils.schemaMap(message, ws_order_group_feed_data_v_1_1.WS_ORDER_GROUP_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
552
|
+
case interfaces_1.EStream.ORDER:
|
|
553
|
+
return utils_1.Utils.schemaMap(message, ws_order_feed_data_v_1_1.WS_ORDER_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
554
|
+
case interfaces_1.EStream.STATE:
|
|
555
|
+
return utils_1.Utils.schemaMap(message, ws_order_state_feed_data_v_1_1.WS_ORDER_STATE_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
556
|
+
case interfaces_1.EStream.POSITION:
|
|
557
|
+
return utils_1.Utils.schemaMap(message, ws_positions_feed_data_v_1_1.WS_POSITIONS_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
558
|
+
case interfaces_1.EStream.FILL:
|
|
559
|
+
return utils_1.Utils.schemaMap(message, ws_fill_feed_data_v_1_1.WS_FILL_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
560
|
+
case interfaces_1.EStream.DEPOSIT:
|
|
561
|
+
return utils_1.Utils.schemaMap(message, ws_deposit_feed_data_v_1_1.WS_DEPOSIT_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
562
|
+
case interfaces_1.EStream.TRANSFER:
|
|
563
|
+
return utils_1.Utils.schemaMap(message, ws_transfer_feed_data_v_1_1.WS_TRANSFER_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
564
|
+
case interfaces_1.EStream.WITHDRAWAL:
|
|
565
|
+
return utils_1.Utils.schemaMap(message, ws_withdrawal_feed_data_v_1_1.WS_WITHDRAWAL_FEED_DATA_V_1_MAP.LITE_TO_FULL).feed;
|
|
529
566
|
default:
|
|
530
567
|
console.warn('Unknown message:', message);
|
|
531
568
|
}
|
|
@@ -622,12 +659,24 @@ class WS {
|
|
|
622
659
|
}
|
|
623
660
|
_subscribeCurrentPairs() {
|
|
624
661
|
const pairs = Object.keys(this._pairs);
|
|
625
|
-
|
|
662
|
+
const groupStreams = {};
|
|
663
|
+
// keep last primary stream
|
|
664
|
+
for (const pair of pairs.reverse()) {
|
|
626
665
|
const { stream, feed } = this._parsePair(pair);
|
|
666
|
+
if (!groupStreams[stream]) {
|
|
667
|
+
groupStreams[stream] = [];
|
|
668
|
+
}
|
|
669
|
+
const primaryFeed = feed.split('@')[0];
|
|
670
|
+
if (!groupStreams[stream].some((f) => f.startsWith(`${primaryFeed}@`))) {
|
|
671
|
+
groupStreams[stream].push(feed);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
const streams = Object.keys(groupStreams);
|
|
675
|
+
for (const stream of streams) {
|
|
627
676
|
this._sendMessage({
|
|
628
677
|
method: 'subscribe',
|
|
629
678
|
stream,
|
|
630
|
-
feed: [
|
|
679
|
+
feed: groupStreams[stream]
|
|
631
680
|
});
|
|
632
681
|
}
|
|
633
682
|
}
|
|
@@ -684,8 +733,90 @@ class WS {
|
|
|
684
733
|
void this._subscribe(pair, subscribePayload).catch(onError);
|
|
685
734
|
return this._addConsumer(pair, onMessage);
|
|
686
735
|
}
|
|
687
|
-
|
|
688
|
-
|
|
736
|
+
subscribes(...subscriptions) {
|
|
737
|
+
var _a;
|
|
738
|
+
if (!subscriptions.length) {
|
|
739
|
+
return [];
|
|
740
|
+
}
|
|
741
|
+
const pairs = [];
|
|
742
|
+
const payloads = [];
|
|
743
|
+
const groupStreams = {};
|
|
744
|
+
for (const subscription of subscriptions) {
|
|
745
|
+
const { onData: onMessage, onError } = subscription, options = __rest(subscription, ["onData", "onError"]);
|
|
746
|
+
const subscribePayload = this._parseStream(options);
|
|
747
|
+
const stream = subscribePayload === null || subscribePayload === void 0 ? void 0 : subscribePayload.stream;
|
|
748
|
+
const feed = (_a = subscribePayload === null || subscribePayload === void 0 ? void 0 : subscribePayload.feed) === null || _a === void 0 ? void 0 : _a[0];
|
|
749
|
+
if (!stream || !feed) {
|
|
750
|
+
throw new Error('Unknown stream or feed');
|
|
751
|
+
}
|
|
752
|
+
if (!groupStreams[stream]) {
|
|
753
|
+
groupStreams[stream] = [];
|
|
754
|
+
}
|
|
755
|
+
const primaryFeed = feed.split('@')[0];
|
|
756
|
+
if (groupStreams[stream].some((f) => f.startsWith(`${primaryFeed}@`))) {
|
|
757
|
+
throw new Error(`Attempted to subscribe to same primary selector twice, in same request: ${primaryFeed}`);
|
|
758
|
+
}
|
|
759
|
+
groupStreams[stream].push(feed);
|
|
760
|
+
payloads.push(subscribePayload);
|
|
761
|
+
pairs.push({
|
|
762
|
+
pair: this._getPair({ stream, feed }),
|
|
763
|
+
onData: onMessage,
|
|
764
|
+
onError
|
|
765
|
+
});
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Subscribe in parallel and listen for responses
|
|
769
|
+
*/
|
|
770
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
771
|
+
var _b;
|
|
772
|
+
yield this.ready();
|
|
773
|
+
for (const { pair, onError } of pairs) {
|
|
774
|
+
let _resolve;
|
|
775
|
+
const onPaired = (e) => {
|
|
776
|
+
var _a, _b, _c;
|
|
777
|
+
const message = utils_1.JsonUtils.parse(e.data);
|
|
778
|
+
if (!(message === null || message === void 0 ? void 0 : message.s) || !((_a = message === null || message === void 0 ? void 0 : message.s1) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
const responseStream = (_c = (_b = message.s) === null || _b === void 0 ? void 0 : _b.replace) === null || _c === void 0 ? void 0 : _c.call(_b, `${this._version}.`, '');
|
|
782
|
+
const { stream, feed } = this._parsePair(pair);
|
|
783
|
+
const asset = feed.split('@')[0];
|
|
784
|
+
const subs = message.s1;
|
|
785
|
+
const isResolved = stream === responseStream && (subs.includes(asset) ||
|
|
786
|
+
subs.includes(asset.toLowerCase()) ||
|
|
787
|
+
subs.includes(feed) ||
|
|
788
|
+
subs.includes(feed.toLowerCase()));
|
|
789
|
+
if (isResolved) {
|
|
790
|
+
_resolve();
|
|
791
|
+
}
|
|
792
|
+
};
|
|
793
|
+
const promise = new Promise((resolve) => {
|
|
794
|
+
_resolve = resolve;
|
|
795
|
+
this._ws.addEventListener('message', onPaired);
|
|
796
|
+
});
|
|
797
|
+
utils_1.Utils.timeout(promise, (_b = this._options.timeout) !== null && _b !== void 0 ? _b : 30000, new Error('Subscribe Timeout: ' + pair))
|
|
798
|
+
.catch((error) => onError === null || onError === void 0 ? void 0 : onError(error))
|
|
799
|
+
.finally(() => {
|
|
800
|
+
this._ws.removeEventListener('message', onPaired);
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
const streams = Object.keys(groupStreams);
|
|
804
|
+
for (const stream of streams) {
|
|
805
|
+
this._sendMessage({
|
|
806
|
+
method: 'subscribe',
|
|
807
|
+
stream,
|
|
808
|
+
feed: groupStreams[stream]
|
|
809
|
+
});
|
|
810
|
+
}
|
|
811
|
+
}));
|
|
812
|
+
return pairs.map(({ pair, onData }) => {
|
|
813
|
+
return this._addConsumer(pair, onData);
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
unsubscribe(...pairedConsumerKeys) {
|
|
817
|
+
for (const pairedConsumerKey of pairedConsumerKeys) {
|
|
818
|
+
this._removeConsumer(pairedConsumerKey);
|
|
819
|
+
}
|
|
689
820
|
return this;
|
|
690
821
|
}
|
|
691
822
|
connect() {
|