tardis-dev 13.7.1 → 13.8.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.
- package/dist/realtimefeeds/binance.d.ts +8 -1
- package/dist/realtimefeeds/binance.d.ts.map +1 -1
- package/dist/realtimefeeds/binance.js +64 -15
- package/dist/realtimefeeds/binance.js.map +1 -1
- package/dist/realtimefeeds/cryptocomderivatives.d.ts.map +1 -1
- package/dist/realtimefeeds/cryptocomderivatives.js +1 -2
- package/dist/realtimefeeds/cryptocomderivatives.js.map +1 -1
- package/dist/realtimefeeds/realtimefeed.js +1 -1
- package/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/package.json +1 -1
- package/src/realtimefeeds/binance.ts +107 -16
- package/src/realtimefeeds/cryptocomderivatives.ts +1 -2
- package/src/realtimefeeds/realtimefeed.ts +1 -1
|
@@ -8,6 +8,7 @@ declare abstract class BinanceRealTimeFeedBase extends MultiConnectionRealTimeFe
|
|
|
8
8
|
protected abstract suffixes: {
|
|
9
9
|
[key: string]: string;
|
|
10
10
|
};
|
|
11
|
+
protected abstract depthRequestRequestWeight: number;
|
|
11
12
|
protected _getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void): Generator<BinanceSingleConnectionRealTimeFeed | BinanceFuturesOpenInterestClient, void, unknown>;
|
|
12
13
|
}
|
|
13
14
|
declare class BinanceFuturesOpenInterestClient extends PoolingClientBase {
|
|
@@ -20,9 +21,10 @@ declare class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
20
21
|
protected wssURL: string;
|
|
21
22
|
private readonly _httpURL;
|
|
22
23
|
private readonly _suffixes;
|
|
24
|
+
private readonly _depthRequestRequestWeight;
|
|
23
25
|
constructor(exchange: string, filters: Filter<string>[], wssURL: string, _httpURL: string, _suffixes: {
|
|
24
26
|
[key: string]: string;
|
|
25
|
-
}, timeoutIntervalMS: number | undefined, onError?: (error: Error) => void);
|
|
27
|
+
}, _depthRequestRequestWeight: number, timeoutIntervalMS: number | undefined, onError?: (error: Error) => void);
|
|
26
28
|
protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
|
|
27
29
|
protected messageIsError(message: any): boolean;
|
|
28
30
|
protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
|
|
@@ -33,6 +35,7 @@ export declare class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
33
35
|
protected suffixes: {
|
|
34
36
|
depth: string;
|
|
35
37
|
};
|
|
38
|
+
protected depthRequestRequestWeight: number;
|
|
36
39
|
}
|
|
37
40
|
export declare class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
38
41
|
protected wssURL: string;
|
|
@@ -40,6 +43,7 @@ export declare class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
40
43
|
protected suffixes: {
|
|
41
44
|
depth: string;
|
|
42
45
|
};
|
|
46
|
+
protected depthRequestRequestWeight: number;
|
|
43
47
|
}
|
|
44
48
|
export declare class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
45
49
|
protected wssURL: string;
|
|
@@ -47,6 +51,7 @@ export declare class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
47
51
|
protected suffixes: {
|
|
48
52
|
depth: string;
|
|
49
53
|
};
|
|
54
|
+
protected depthRequestRequestWeight: number;
|
|
50
55
|
}
|
|
51
56
|
export declare class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
52
57
|
protected wssURL: string;
|
|
@@ -55,6 +60,7 @@ export declare class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase
|
|
|
55
60
|
depth: string;
|
|
56
61
|
markPrice: string;
|
|
57
62
|
};
|
|
63
|
+
protected depthRequestRequestWeight: number;
|
|
58
64
|
}
|
|
59
65
|
export declare class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
60
66
|
protected wssURL: string;
|
|
@@ -64,6 +70,7 @@ export declare class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase
|
|
|
64
70
|
markPrice: string;
|
|
65
71
|
indexPrice: string;
|
|
66
72
|
};
|
|
73
|
+
protected depthRequestRequestWeight: number;
|
|
67
74
|
}
|
|
68
75
|
export {};
|
|
69
76
|
//# sourceMappingURL=binance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BinanceDeliveryRealTimeFeed = exports.BinanceFuturesRealTimeFeed = exports.BinanceUSRealTimeFeed = exports.BinanceJerseyRealTimeFeed = exports.BinanceRealTimeFeed = void 0;
|
|
4
4
|
const handy_1 = require("../handy");
|
|
5
5
|
const realtimefeed_1 = require("./realtimefeed");
|
|
6
|
+
const binanceHttpOptions = {
|
|
7
|
+
timeout: 10 * 1000,
|
|
8
|
+
retry: {
|
|
9
|
+
limit: 10,
|
|
10
|
+
statusCodes: [408, 429, 500],
|
|
11
|
+
maxRetryAfter: 120 * 1000
|
|
12
|
+
}
|
|
13
|
+
};
|
|
6
14
|
class BinanceRealTimeFeedBase extends realtimefeed_1.MultiConnectionRealTimeFeedBase {
|
|
7
15
|
*_getRealTimeFeeds(exchange, filters, timeoutIntervalMS, onError) {
|
|
8
16
|
const wsFilters = filters.filter((f) => f.channel !== 'openInterest' && f.channel !== 'recentTrades');
|
|
9
17
|
if (wsFilters.length > 0) {
|
|
10
|
-
yield new BinanceSingleConnectionRealTimeFeed(exchange, wsFilters, this.wssURL, this.httpURL, this.suffixes, timeoutIntervalMS, onError);
|
|
18
|
+
yield new BinanceSingleConnectionRealTimeFeed(exchange, wsFilters, this.wssURL, this.httpURL, this.suffixes, this.depthRequestRequestWeight, timeoutIntervalMS, onError);
|
|
11
19
|
}
|
|
12
20
|
const openInterestFilters = filters.filter((f) => f.channel === 'openInterest');
|
|
13
21
|
if (openInterestFilters.length > 0) {
|
|
@@ -29,7 +37,7 @@ class BinanceFuturesOpenInterestClient extends realtimefeed_1.PoolingClientBase
|
|
|
29
37
|
return;
|
|
30
38
|
}
|
|
31
39
|
const openInterestResponse = (await handy_1.httpClient
|
|
32
|
-
.get(`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`,
|
|
40
|
+
.get(`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`, binanceHttpOptions)
|
|
33
41
|
.json());
|
|
34
42
|
const openInterestMessage = {
|
|
35
43
|
stream: `${instrument.toLocaleLowerCase()}@openInterest`,
|
|
@@ -44,11 +52,12 @@ class BinanceFuturesOpenInterestClient extends realtimefeed_1.PoolingClientBase
|
|
|
44
52
|
}
|
|
45
53
|
}
|
|
46
54
|
class BinanceSingleConnectionRealTimeFeed extends realtimefeed_1.RealTimeFeedBase {
|
|
47
|
-
constructor(exchange, filters, wssURL, _httpURL, _suffixes, timeoutIntervalMS, onError) {
|
|
55
|
+
constructor(exchange, filters, wssURL, _httpURL, _suffixes, _depthRequestRequestWeight, timeoutIntervalMS, onError) {
|
|
48
56
|
super(exchange, filters, timeoutIntervalMS, onError);
|
|
49
57
|
this.wssURL = wssURL;
|
|
50
58
|
this._httpURL = _httpURL;
|
|
51
59
|
this._suffixes = _suffixes;
|
|
60
|
+
this._depthRequestRequestWeight = _depthRequestRequestWeight;
|
|
52
61
|
}
|
|
53
62
|
mapToSubscribeMessages(filters) {
|
|
54
63
|
const payload = filters
|
|
@@ -85,22 +94,57 @@ class BinanceSingleConnectionRealTimeFeed extends realtimefeed_1.RealTimeFeedBas
|
|
|
85
94
|
if (!depthSnapshotFilter) {
|
|
86
95
|
return;
|
|
87
96
|
}
|
|
88
|
-
|
|
89
|
-
|
|
97
|
+
let currentWeightLimit = 0;
|
|
98
|
+
const exchangeInfoResponse = await handy_1.httpClient.get(`${this._httpURL}/exchangeInfo`, binanceHttpOptions);
|
|
99
|
+
const exchangeInfo = JSON.parse(exchangeInfoResponse.body);
|
|
100
|
+
const REQUEST_WEIGHT_LIMIT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_REQUEST_WEIGHT_LIMIT`;
|
|
101
|
+
if (process.env[REQUEST_WEIGHT_LIMIT_ENV] !== undefined) {
|
|
102
|
+
currentWeightLimit = Number.parseInt(process.env[REQUEST_WEIGHT_LIMIT_ENV]);
|
|
103
|
+
}
|
|
104
|
+
if (!currentWeightLimit) {
|
|
105
|
+
currentWeightLimit = exchangeInfo.rateLimits.find((d) => d.rateLimitType === 'REQUEST_WEIGHT').limit;
|
|
106
|
+
}
|
|
107
|
+
let usedWeight = Number.parseInt(exchangeInfoResponse.headers['x-mbx-used-weight-1m']);
|
|
108
|
+
this.debug('current x-mbx-used-weight-1m limit: %s, already used weight: %s', currentWeightLimit, usedWeight);
|
|
109
|
+
let concurrencyLimit = 4;
|
|
110
|
+
const CONCURRENCY_LIMIT_WEIGHT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_CONCURRENCY_LIMIT`;
|
|
111
|
+
if (process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] !== undefined) {
|
|
112
|
+
concurrencyLimit = Number.parseInt(process.env[CONCURRENCY_LIMIT_WEIGHT_ENV]);
|
|
113
|
+
}
|
|
114
|
+
this.debug('current snapshots requests concurrency limit: %s', concurrencyLimit);
|
|
115
|
+
let minWeightBuffer = 2 * concurrencyLimit * this._depthRequestRequestWeight;
|
|
116
|
+
const MIN_WEIGHT_BUFFER_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_MIN_AVAILABLE_WEIGHT_BUFFER`;
|
|
117
|
+
if (process.env[MIN_WEIGHT_BUFFER_ENV] !== undefined) {
|
|
118
|
+
minWeightBuffer = Number.parseInt(process.env[MIN_WEIGHT_BUFFER_ENV]);
|
|
119
|
+
}
|
|
120
|
+
for (const symbolsBatch of (0, handy_1.batch)(depthSnapshotFilter.symbols, concurrencyLimit)) {
|
|
90
121
|
if (shouldCancel()) {
|
|
91
122
|
return;
|
|
92
123
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
124
|
+
this.debug('requesting manual snapshots for: %s', symbolsBatch);
|
|
125
|
+
const usedWeights = await Promise.all(symbolsBatch.map(async (symbol) => {
|
|
126
|
+
if (shouldCancel()) {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
const isOverRateLimit = currentWeightLimit - usedWeight < minWeightBuffer;
|
|
130
|
+
if (isOverRateLimit) {
|
|
131
|
+
const secondsToWait = 61 - new Date().getUTCSeconds();
|
|
132
|
+
this.debug('reached rate limit (x-mbx-used-weight-1m limit: %s, used weight: %s, minimum available weight buffer: %s), waiting: %s seconds', currentWeightLimit, usedWeight, minWeightBuffer, secondsToWait);
|
|
133
|
+
await (0, handy_1.wait)(secondsToWait * 1000);
|
|
134
|
+
}
|
|
135
|
+
const depthSnapshotResponse = await handy_1.httpClient.get(`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, binanceHttpOptions);
|
|
136
|
+
const snapshot = {
|
|
137
|
+
stream: `${symbol}@depthSnapshot`,
|
|
138
|
+
generated: true,
|
|
139
|
+
data: JSON.parse(depthSnapshotResponse.body)
|
|
140
|
+
};
|
|
141
|
+
this.manualSnapshotsBuffer.push(snapshot);
|
|
142
|
+
return Number.parseInt(depthSnapshotResponse.headers['x-mbx-used-weight-1m']);
|
|
143
|
+
}));
|
|
144
|
+
usedWeight = Math.max(...usedWeights);
|
|
145
|
+
this.debug('requested manual snapshots successfully for: %s, used weight: %s', symbolsBatch, usedWeight);
|
|
102
146
|
}
|
|
103
|
-
this.debug('requested manual snapshots successfully
|
|
147
|
+
this.debug('requested all manual snapshots successfully');
|
|
104
148
|
}
|
|
105
149
|
}
|
|
106
150
|
class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -111,6 +155,7 @@ class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
111
155
|
this.suffixes = {
|
|
112
156
|
depth: '100ms'
|
|
113
157
|
};
|
|
158
|
+
this.depthRequestRequestWeight = 10;
|
|
114
159
|
}
|
|
115
160
|
}
|
|
116
161
|
exports.BinanceRealTimeFeed = BinanceRealTimeFeed;
|
|
@@ -122,6 +167,7 @@ class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
122
167
|
this.suffixes = {
|
|
123
168
|
depth: '100ms'
|
|
124
169
|
};
|
|
170
|
+
this.depthRequestRequestWeight = 10;
|
|
125
171
|
}
|
|
126
172
|
}
|
|
127
173
|
exports.BinanceJerseyRealTimeFeed = BinanceJerseyRealTimeFeed;
|
|
@@ -133,6 +179,7 @@ class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
133
179
|
this.suffixes = {
|
|
134
180
|
depth: '100ms'
|
|
135
181
|
};
|
|
182
|
+
this.depthRequestRequestWeight = 10;
|
|
136
183
|
}
|
|
137
184
|
}
|
|
138
185
|
exports.BinanceUSRealTimeFeed = BinanceUSRealTimeFeed;
|
|
@@ -145,6 +192,7 @@ class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
145
192
|
depth: '0ms',
|
|
146
193
|
markPrice: '1s'
|
|
147
194
|
};
|
|
195
|
+
this.depthRequestRequestWeight = 20;
|
|
148
196
|
}
|
|
149
197
|
}
|
|
150
198
|
exports.BinanceFuturesRealTimeFeed = BinanceFuturesRealTimeFeed;
|
|
@@ -158,6 +206,7 @@ class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
158
206
|
markPrice: '1s',
|
|
159
207
|
indexPrice: '1s'
|
|
160
208
|
};
|
|
209
|
+
this.depthRequestRequestWeight = 20;
|
|
161
210
|
}
|
|
162
211
|
}
|
|
163
212
|
exports.BinanceDeliveryRealTimeFeed = BinanceDeliveryRealTimeFeed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binance.js","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"binance.js","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cryptocomderivatives.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/cryptocomderivatives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,qBAAa,gCAAiC,SAAQ,gBAAgB;IACpE,SAAS,CAAC,MAAM,SAA4C;IAE5D,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"cryptocomderivatives.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/cryptocomderivatives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,qBAAa,gCAAiC,SAAQ,gBAAgB;IACpE,SAAS,CAAC,MAAM,SAA4C;IAE5D,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IA2BlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAI/C,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG;IAQ5B,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG;CAGtC"}
|
|
@@ -26,8 +26,7 @@ class CryptoComDerivativesRealTimeFeed extends realtimefeed_1.RealTimeFeedBase {
|
|
|
26
26
|
nonce: new Date().valueOf(),
|
|
27
27
|
params: {
|
|
28
28
|
channels: channels,
|
|
29
|
-
book_subscription_type: 'SNAPSHOT_AND_UPDATE'
|
|
30
|
-
book_update_frequency: 5
|
|
29
|
+
book_subscription_type: 'SNAPSHOT_AND_UPDATE'
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cryptocomderivatives.js","sourceRoot":"","sources":["../../src/realtimefeeds/cryptocomderivatives.ts"],"names":[],"mappings":";;;AACA,iDAAiD;AAEjD,MAAa,gCAAiC,SAAQ,+BAAgB;IAAtE;;QACY,WAAM,GAAG,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"cryptocomderivatives.js","sourceRoot":"","sources":["../../src/realtimefeeds/cryptocomderivatives.ts"],"names":[],"mappings":";;;AACA,iDAAiD;AAEjD,MAAa,gCAAiC,SAAQ,+BAAgB;IAAtE;;QACY,WAAM,GAAG,yCAAyC,CAAA;IA4C9D,CAAC;IA1CW,sBAAsB,CAAC,OAAyB;QACxD,MAAM,QAAQ,GAAG,OAAO;aACrB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAA;aACxH;YAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrD,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,GAAG,MAAM,EAAE,CAAA;YAC/C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAEpB,OAAO;YACL;gBACE,EAAE,EAAE,CAAC;gBACL,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC3B,MAAM,EAAE;oBACN,QAAQ,EAAE,QAAQ;oBAClB,sBAAsB,EAAE,qBAAqB;iBAC9C;aACF;SACF,CAAA;IACH,CAAC;IAES,cAAc,CAAC,OAAY;QACnC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAA;IACnF,CAAC;IAES,SAAS,CAAC,GAAQ;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,MAAM,EAAE,0BAA0B;aACnC,CAAC,CAAA;SACH;IACH,CAAC;IACS,kBAAkB,CAAC,GAAQ;QACnC,OAAO,GAAG,CAAC,MAAM,KAAK,kBAAkB,CAAA;IAC1C,CAAC;CACF;AA7CD,4EA6CC"}
|
|
@@ -76,7 +76,7 @@ class RealTimeFeedBase {
|
|
|
76
76
|
return this._stream();
|
|
77
77
|
}
|
|
78
78
|
async getWebSocketUrl() {
|
|
79
|
-
const wssUrlOverride = process.env[`WSS_URL_${this._exchange.toUpperCase()}`];
|
|
79
|
+
const wssUrlOverride = process.env[`WSS_URL_${this._exchange.toUpperCase().replace(/-/g, '_')}`];
|
|
80
80
|
const finalWssUrl = wssUrlOverride !== undefined ? wssUrlOverride : this.wssURL;
|
|
81
81
|
return finalWssUrl;
|
|
82
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtimefeed.js","sourceRoot":"","sources":["../../src/realtimefeeds/realtimefeed.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"realtimefeed.js","sourceRoot":"","sources":["../../src/realtimefeeds/realtimefeed.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { Writable } from 'stream'
|
|
2
|
-
import { batch, httpClient } from '../handy'
|
|
2
|
+
import { batch, httpClient, wait } from '../handy'
|
|
3
3
|
import { Filter } from '../types'
|
|
4
4
|
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed'
|
|
5
5
|
|
|
6
|
+
const binanceHttpOptions = {
|
|
7
|
+
timeout: 10 * 1000,
|
|
8
|
+
retry: {
|
|
9
|
+
limit: 10,
|
|
10
|
+
statusCodes: [408, 429, 500],
|
|
11
|
+
maxRetryAfter: 120 * 1000
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
6
15
|
abstract class BinanceRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
7
16
|
protected abstract wssURL: string
|
|
8
17
|
protected abstract httpURL: string
|
|
9
18
|
protected abstract suffixes: { [key: string]: string }
|
|
19
|
+
protected abstract depthRequestRequestWeight: number
|
|
10
20
|
|
|
11
21
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
12
22
|
const wsFilters = filters.filter((f) => f.channel !== 'openInterest' && f.channel !== 'recentTrades')
|
|
@@ -18,6 +28,7 @@ abstract class BinanceRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
|
18
28
|
this.wssURL,
|
|
19
29
|
this.httpURL,
|
|
20
30
|
this.suffixes,
|
|
31
|
+
this.depthRequestRequestWeight,
|
|
21
32
|
timeoutIntervalMS,
|
|
22
33
|
onError
|
|
23
34
|
)
|
|
@@ -44,9 +55,8 @@ class BinanceFuturesOpenInterestClient extends PoolingClientBase {
|
|
|
44
55
|
if (outputStream.destroyed) {
|
|
45
56
|
return
|
|
46
57
|
}
|
|
47
|
-
|
|
48
58
|
const openInterestResponse = (await httpClient
|
|
49
|
-
.get(`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`,
|
|
59
|
+
.get(`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`, binanceHttpOptions)
|
|
50
60
|
.json()) as any
|
|
51
61
|
|
|
52
62
|
const openInterestMessage = {
|
|
@@ -71,6 +81,7 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
71
81
|
protected wssURL: string,
|
|
72
82
|
private readonly _httpURL: string,
|
|
73
83
|
private readonly _suffixes: { [key: string]: string },
|
|
84
|
+
private readonly _depthRequestRequestWeight: number,
|
|
74
85
|
timeoutIntervalMS: number | undefined,
|
|
75
86
|
onError?: (error: Error) => void
|
|
76
87
|
) {
|
|
@@ -117,29 +128,99 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
117
128
|
|
|
118
129
|
protected async provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean) {
|
|
119
130
|
const depthSnapshotFilter = filters.find((f) => f.channel === 'depthSnapshot')
|
|
131
|
+
|
|
120
132
|
if (!depthSnapshotFilter) {
|
|
121
133
|
return
|
|
122
134
|
}
|
|
123
|
-
|
|
124
|
-
|
|
135
|
+
|
|
136
|
+
let currentWeightLimit: number = 0
|
|
137
|
+
|
|
138
|
+
const exchangeInfoResponse = await httpClient.get(`${this._httpURL}/exchangeInfo`, binanceHttpOptions)
|
|
139
|
+
|
|
140
|
+
const exchangeInfo = JSON.parse(exchangeInfoResponse.body)
|
|
141
|
+
|
|
142
|
+
const REQUEST_WEIGHT_LIMIT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_REQUEST_WEIGHT_LIMIT`
|
|
143
|
+
|
|
144
|
+
if (process.env[REQUEST_WEIGHT_LIMIT_ENV] !== undefined) {
|
|
145
|
+
currentWeightLimit = Number.parseInt(process.env[REQUEST_WEIGHT_LIMIT_ENV] as string)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!currentWeightLimit) {
|
|
149
|
+
currentWeightLimit = exchangeInfo.rateLimits.find((d: any) => d.rateLimitType === 'REQUEST_WEIGHT').limit as number
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let usedWeight = Number.parseInt(exchangeInfoResponse.headers['x-mbx-used-weight-1m'] as string)
|
|
153
|
+
|
|
154
|
+
this.debug('current x-mbx-used-weight-1m limit: %s, already used weight: %s', currentWeightLimit, usedWeight)
|
|
155
|
+
|
|
156
|
+
let concurrencyLimit = 4
|
|
157
|
+
|
|
158
|
+
const CONCURRENCY_LIMIT_WEIGHT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_CONCURRENCY_LIMIT`
|
|
159
|
+
|
|
160
|
+
if (process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] !== undefined) {
|
|
161
|
+
concurrencyLimit = Number.parseInt(process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] as string)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
this.debug('current snapshots requests concurrency limit: %s', concurrencyLimit)
|
|
165
|
+
|
|
166
|
+
let minWeightBuffer = 2 * concurrencyLimit * this._depthRequestRequestWeight
|
|
167
|
+
|
|
168
|
+
const MIN_WEIGHT_BUFFER_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_MIN_AVAILABLE_WEIGHT_BUFFER`
|
|
169
|
+
|
|
170
|
+
if (process.env[MIN_WEIGHT_BUFFER_ENV] !== undefined) {
|
|
171
|
+
minWeightBuffer = Number.parseInt(process.env[MIN_WEIGHT_BUFFER_ENV] as string)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
for (const symbolsBatch of batch(depthSnapshotFilter.symbols!, concurrencyLimit)) {
|
|
125
175
|
if (shouldCancel()) {
|
|
126
176
|
return
|
|
127
177
|
}
|
|
128
178
|
|
|
129
|
-
|
|
130
|
-
.get(`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, { timeout: 10000 })
|
|
131
|
-
.json()) as any
|
|
179
|
+
this.debug('requesting manual snapshots for: %s', symbolsBatch)
|
|
132
180
|
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
181
|
+
const usedWeights = await Promise.all(
|
|
182
|
+
symbolsBatch.map(async (symbol) => {
|
|
183
|
+
if (shouldCancel()) {
|
|
184
|
+
return 0
|
|
185
|
+
}
|
|
138
186
|
|
|
139
|
-
|
|
140
|
-
|
|
187
|
+
const isOverRateLimit = currentWeightLimit - usedWeight < minWeightBuffer
|
|
188
|
+
|
|
189
|
+
if (isOverRateLimit) {
|
|
190
|
+
const secondsToWait = 61 - new Date().getUTCSeconds()
|
|
191
|
+
this.debug(
|
|
192
|
+
'reached rate limit (x-mbx-used-weight-1m limit: %s, used weight: %s, minimum available weight buffer: %s), waiting: %s seconds',
|
|
193
|
+
currentWeightLimit,
|
|
194
|
+
usedWeight,
|
|
195
|
+
minWeightBuffer,
|
|
196
|
+
secondsToWait
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
await wait(secondsToWait * 1000)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const depthSnapshotResponse = await httpClient.get(
|
|
203
|
+
`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`,
|
|
204
|
+
binanceHttpOptions
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
const snapshot = {
|
|
208
|
+
stream: `${symbol}@depthSnapshot`,
|
|
209
|
+
generated: true,
|
|
210
|
+
data: JSON.parse(depthSnapshotResponse.body)
|
|
211
|
+
}
|
|
141
212
|
|
|
142
|
-
|
|
213
|
+
this.manualSnapshotsBuffer.push(snapshot)
|
|
214
|
+
|
|
215
|
+
return Number.parseInt(depthSnapshotResponse.headers['x-mbx-used-weight-1m'] as string)
|
|
216
|
+
})
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
usedWeight = Math.max(...usedWeights)
|
|
220
|
+
|
|
221
|
+
this.debug('requested manual snapshots successfully for: %s, used weight: %s', symbolsBatch, usedWeight)
|
|
222
|
+
}
|
|
223
|
+
this.debug('requested all manual snapshots successfully')
|
|
143
224
|
}
|
|
144
225
|
}
|
|
145
226
|
|
|
@@ -150,6 +231,8 @@ export class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
150
231
|
protected suffixes = {
|
|
151
232
|
depth: '100ms'
|
|
152
233
|
}
|
|
234
|
+
|
|
235
|
+
protected depthRequestRequestWeight = 10
|
|
153
236
|
}
|
|
154
237
|
|
|
155
238
|
export class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -159,6 +242,8 @@ export class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
159
242
|
protected suffixes = {
|
|
160
243
|
depth: '100ms'
|
|
161
244
|
}
|
|
245
|
+
|
|
246
|
+
protected depthRequestRequestWeight = 10
|
|
162
247
|
}
|
|
163
248
|
|
|
164
249
|
export class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -168,6 +253,8 @@ export class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
168
253
|
protected suffixes = {
|
|
169
254
|
depth: '100ms'
|
|
170
255
|
}
|
|
256
|
+
|
|
257
|
+
protected depthRequestRequestWeight = 10
|
|
171
258
|
}
|
|
172
259
|
|
|
173
260
|
export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -178,6 +265,8 @@ export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
178
265
|
depth: '0ms',
|
|
179
266
|
markPrice: '1s'
|
|
180
267
|
}
|
|
268
|
+
|
|
269
|
+
protected depthRequestRequestWeight = 20
|
|
181
270
|
}
|
|
182
271
|
|
|
183
272
|
export class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -189,4 +278,6 @@ export class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
189
278
|
markPrice: '1s',
|
|
190
279
|
indexPrice: '1s'
|
|
191
280
|
}
|
|
281
|
+
|
|
282
|
+
protected depthRequestRequestWeight = 20
|
|
192
283
|
}
|
|
@@ -25,8 +25,7 @@ export class CryptoComDerivativesRealTimeFeed extends RealTimeFeedBase {
|
|
|
25
25
|
nonce: new Date().valueOf(),
|
|
26
26
|
params: {
|
|
27
27
|
channels: channels,
|
|
28
|
-
book_subscription_type: 'SNAPSHOT_AND_UPDATE'
|
|
29
|
-
book_update_frequency: 5
|
|
28
|
+
book_subscription_type: 'SNAPSHOT_AND_UPDATE'
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
]
|
|
@@ -59,7 +59,7 @@ export abstract class RealTimeFeedBase implements RealTimeFeedIterable {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
protected async getWebSocketUrl() {
|
|
62
|
-
const wssUrlOverride = process.env[`WSS_URL_${this._exchange.toUpperCase()}`]
|
|
62
|
+
const wssUrlOverride = process.env[`WSS_URL_${this._exchange.toUpperCase().replace(/-/g, '_')}`]
|
|
63
63
|
const finalWssUrl = wssUrlOverride !== undefined ? wssUrlOverride : this.wssURL
|
|
64
64
|
|
|
65
65
|
return finalWssUrl
|