tardis-dev 13.7.1 → 13.8.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/dist/realtimefeeds/binance.d.ts +8 -1
- package/dist/realtimefeeds/binance.d.ts.map +1 -1
- package/dist/realtimefeeds/binance.js +58 -14
- 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 +97 -14
- 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;AAErG,uBAAe,uBAAwB,SAAQ,+BAA+B;IAC5E,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACjC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ class BinanceRealTimeFeedBase extends realtimefeed_1.MultiConnectionRealTimeFeed
|
|
|
7
7
|
*_getRealTimeFeeds(exchange, filters, timeoutIntervalMS, onError) {
|
|
8
8
|
const wsFilters = filters.filter((f) => f.channel !== 'openInterest' && f.channel !== 'recentTrades');
|
|
9
9
|
if (wsFilters.length > 0) {
|
|
10
|
-
yield new BinanceSingleConnectionRealTimeFeed(exchange, wsFilters, this.wssURL, this.httpURL, this.suffixes, timeoutIntervalMS, onError);
|
|
10
|
+
yield new BinanceSingleConnectionRealTimeFeed(exchange, wsFilters, this.wssURL, this.httpURL, this.suffixes, this.depthRequestRequestWeight, timeoutIntervalMS, onError);
|
|
11
11
|
}
|
|
12
12
|
const openInterestFilters = filters.filter((f) => f.channel === 'openInterest');
|
|
13
13
|
if (openInterestFilters.length > 0) {
|
|
@@ -44,11 +44,12 @@ class BinanceFuturesOpenInterestClient extends realtimefeed_1.PoolingClientBase
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
class BinanceSingleConnectionRealTimeFeed extends realtimefeed_1.RealTimeFeedBase {
|
|
47
|
-
constructor(exchange, filters, wssURL, _httpURL, _suffixes, timeoutIntervalMS, onError) {
|
|
47
|
+
constructor(exchange, filters, wssURL, _httpURL, _suffixes, _depthRequestRequestWeight, timeoutIntervalMS, onError) {
|
|
48
48
|
super(exchange, filters, timeoutIntervalMS, onError);
|
|
49
49
|
this.wssURL = wssURL;
|
|
50
50
|
this._httpURL = _httpURL;
|
|
51
51
|
this._suffixes = _suffixes;
|
|
52
|
+
this._depthRequestRequestWeight = _depthRequestRequestWeight;
|
|
52
53
|
}
|
|
53
54
|
mapToSubscribeMessages(filters) {
|
|
54
55
|
const payload = filters
|
|
@@ -85,22 +86,60 @@ class BinanceSingleConnectionRealTimeFeed extends realtimefeed_1.RealTimeFeedBas
|
|
|
85
86
|
if (!depthSnapshotFilter) {
|
|
86
87
|
return;
|
|
87
88
|
}
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
let currentWeightLimit = 0;
|
|
90
|
+
const exchangeInfoResponse = await handy_1.httpClient.get(`${this._httpURL}/exchangeInfo`, { timeout: 10000, retry: 5 });
|
|
91
|
+
const exchangeInfo = JSON.parse(exchangeInfoResponse.body);
|
|
92
|
+
const REQUEST_WEIGHT_LIMIT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_REQUEST_WEIGHT_LIMIT`;
|
|
93
|
+
if (process.env[REQUEST_WEIGHT_LIMIT_ENV] !== undefined) {
|
|
94
|
+
currentWeightLimit = Number.parseInt(process.env[REQUEST_WEIGHT_LIMIT_ENV]);
|
|
95
|
+
}
|
|
96
|
+
if (!currentWeightLimit) {
|
|
97
|
+
currentWeightLimit = exchangeInfo.rateLimits.find((d) => d.rateLimitType === 'REQUEST_WEIGHT').limit;
|
|
98
|
+
}
|
|
99
|
+
let usedWeight = Number.parseInt(exchangeInfoResponse.headers['x-mbx-used-weight-1m']);
|
|
100
|
+
this.debug('current x-mbx-used-weight-1m limit: %s, already used weight: %s', currentWeightLimit, usedWeight);
|
|
101
|
+
let concurrencyLimit = 4;
|
|
102
|
+
const CONCURRENCY_LIMIT_WEIGHT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_CONCURRENCY_LIMIT`;
|
|
103
|
+
if (process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] !== undefined) {
|
|
104
|
+
concurrencyLimit = Number.parseInt(process.env[CONCURRENCY_LIMIT_WEIGHT_ENV]);
|
|
105
|
+
}
|
|
106
|
+
this.debug('current snapshots requests concurrency limit: %s', concurrencyLimit);
|
|
107
|
+
let minWeightBuffer = 2 * concurrencyLimit * this._depthRequestRequestWeight;
|
|
108
|
+
const MIN_WEIGHT_BUFFER_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_MIN_AVAILABLE_WEIGHT_BUFFER`;
|
|
109
|
+
if (process.env[MIN_WEIGHT_BUFFER_ENV] !== undefined) {
|
|
110
|
+
minWeightBuffer = Number.parseInt(process.env[MIN_WEIGHT_BUFFER_ENV]);
|
|
111
|
+
}
|
|
112
|
+
for (const symbolsBatch of (0, handy_1.batch)(depthSnapshotFilter.symbols, concurrencyLimit)) {
|
|
90
113
|
if (shouldCancel()) {
|
|
91
114
|
return;
|
|
92
115
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
116
|
+
this.debug('requesting manual snapshots for: %s', symbolsBatch);
|
|
117
|
+
const usedWeights = await Promise.all(symbolsBatch.map(async (symbol) => {
|
|
118
|
+
if (shouldCancel()) {
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
const isOverRateLimit = currentWeightLimit - usedWeight < minWeightBuffer;
|
|
122
|
+
if (isOverRateLimit) {
|
|
123
|
+
const secondsToWait = 61 - new Date().getUTCSeconds();
|
|
124
|
+
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);
|
|
125
|
+
await (0, handy_1.wait)(secondsToWait * 1000);
|
|
126
|
+
}
|
|
127
|
+
const depthSnapshotResponse = await handy_1.httpClient.get(`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, {
|
|
128
|
+
timeout: 10000,
|
|
129
|
+
retry: 10
|
|
130
|
+
});
|
|
131
|
+
const snapshot = {
|
|
132
|
+
stream: `${symbol}@depthSnapshot`,
|
|
133
|
+
generated: true,
|
|
134
|
+
data: JSON.parse(depthSnapshotResponse.body)
|
|
135
|
+
};
|
|
136
|
+
this.manualSnapshotsBuffer.push(snapshot);
|
|
137
|
+
return Number.parseInt(depthSnapshotResponse.headers['x-mbx-used-weight-1m']);
|
|
138
|
+
}));
|
|
139
|
+
usedWeight = Math.max(...usedWeights);
|
|
140
|
+
this.debug('requested manual snapshots successfully for: %s, used weight: %s', symbolsBatch, usedWeight);
|
|
102
141
|
}
|
|
103
|
-
this.debug('requested manual snapshots successfully
|
|
142
|
+
this.debug('requested all manual snapshots successfully');
|
|
104
143
|
}
|
|
105
144
|
}
|
|
106
145
|
class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -111,6 +150,7 @@ class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
111
150
|
this.suffixes = {
|
|
112
151
|
depth: '100ms'
|
|
113
152
|
};
|
|
153
|
+
this.depthRequestRequestWeight = 10;
|
|
114
154
|
}
|
|
115
155
|
}
|
|
116
156
|
exports.BinanceRealTimeFeed = BinanceRealTimeFeed;
|
|
@@ -122,6 +162,7 @@ class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
122
162
|
this.suffixes = {
|
|
123
163
|
depth: '100ms'
|
|
124
164
|
};
|
|
165
|
+
this.depthRequestRequestWeight = 10;
|
|
125
166
|
}
|
|
126
167
|
}
|
|
127
168
|
exports.BinanceJerseyRealTimeFeed = BinanceJerseyRealTimeFeed;
|
|
@@ -133,6 +174,7 @@ class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
133
174
|
this.suffixes = {
|
|
134
175
|
depth: '100ms'
|
|
135
176
|
};
|
|
177
|
+
this.depthRequestRequestWeight = 10;
|
|
136
178
|
}
|
|
137
179
|
}
|
|
138
180
|
exports.BinanceUSRealTimeFeed = BinanceUSRealTimeFeed;
|
|
@@ -145,6 +187,7 @@ class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
145
187
|
depth: '0ms',
|
|
146
188
|
markPrice: '1s'
|
|
147
189
|
};
|
|
190
|
+
this.depthRequestRequestWeight = 20;
|
|
148
191
|
}
|
|
149
192
|
}
|
|
150
193
|
exports.BinanceFuturesRealTimeFeed = BinanceFuturesRealTimeFeed;
|
|
@@ -158,6 +201,7 @@ class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
158
201
|
markPrice: '1s',
|
|
159
202
|
indexPrice: '1s'
|
|
160
203
|
};
|
|
204
|
+
this.depthRequestRequestWeight = 20;
|
|
161
205
|
}
|
|
162
206
|
}
|
|
163
207
|
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,5 +1,5 @@
|
|
|
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
|
|
|
@@ -7,6 +7,7 @@ abstract class BinanceRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
|
7
7
|
protected abstract wssURL: string
|
|
8
8
|
protected abstract httpURL: string
|
|
9
9
|
protected abstract suffixes: { [key: string]: string }
|
|
10
|
+
protected abstract depthRequestRequestWeight: number
|
|
10
11
|
|
|
11
12
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
12
13
|
const wsFilters = filters.filter((f) => f.channel !== 'openInterest' && f.channel !== 'recentTrades')
|
|
@@ -18,6 +19,7 @@ abstract class BinanceRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
|
18
19
|
this.wssURL,
|
|
19
20
|
this.httpURL,
|
|
20
21
|
this.suffixes,
|
|
22
|
+
this.depthRequestRequestWeight,
|
|
21
23
|
timeoutIntervalMS,
|
|
22
24
|
onError
|
|
23
25
|
)
|
|
@@ -71,6 +73,7 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
71
73
|
protected wssURL: string,
|
|
72
74
|
private readonly _httpURL: string,
|
|
73
75
|
private readonly _suffixes: { [key: string]: string },
|
|
76
|
+
private readonly _depthRequestRequestWeight: number,
|
|
74
77
|
timeoutIntervalMS: number | undefined,
|
|
75
78
|
onError?: (error: Error) => void
|
|
76
79
|
) {
|
|
@@ -117,29 +120,99 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
117
120
|
|
|
118
121
|
protected async provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean) {
|
|
119
122
|
const depthSnapshotFilter = filters.find((f) => f.channel === 'depthSnapshot')
|
|
123
|
+
|
|
120
124
|
if (!depthSnapshotFilter) {
|
|
121
125
|
return
|
|
122
126
|
}
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
|
|
128
|
+
let currentWeightLimit: number = 0
|
|
129
|
+
|
|
130
|
+
const exchangeInfoResponse = await httpClient.get(`${this._httpURL}/exchangeInfo`, { timeout: 10000, retry: 5 })
|
|
131
|
+
|
|
132
|
+
const exchangeInfo = JSON.parse(exchangeInfoResponse.body)
|
|
133
|
+
|
|
134
|
+
const REQUEST_WEIGHT_LIMIT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_REQUEST_WEIGHT_LIMIT`
|
|
135
|
+
|
|
136
|
+
if (process.env[REQUEST_WEIGHT_LIMIT_ENV] !== undefined) {
|
|
137
|
+
currentWeightLimit = Number.parseInt(process.env[REQUEST_WEIGHT_LIMIT_ENV] as string)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (!currentWeightLimit) {
|
|
141
|
+
currentWeightLimit = exchangeInfo.rateLimits.find((d: any) => d.rateLimitType === 'REQUEST_WEIGHT').limit as number
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
let usedWeight = Number.parseInt(exchangeInfoResponse.headers['x-mbx-used-weight-1m'] as string)
|
|
145
|
+
|
|
146
|
+
this.debug('current x-mbx-used-weight-1m limit: %s, already used weight: %s', currentWeightLimit, usedWeight)
|
|
147
|
+
|
|
148
|
+
let concurrencyLimit = 4
|
|
149
|
+
|
|
150
|
+
const CONCURRENCY_LIMIT_WEIGHT_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_CONCURRENCY_LIMIT`
|
|
151
|
+
|
|
152
|
+
if (process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] !== undefined) {
|
|
153
|
+
concurrencyLimit = Number.parseInt(process.env[CONCURRENCY_LIMIT_WEIGHT_ENV] as string)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
this.debug('current snapshots requests concurrency limit: %s', concurrencyLimit)
|
|
157
|
+
|
|
158
|
+
let minWeightBuffer = 2 * concurrencyLimit * this._depthRequestRequestWeight
|
|
159
|
+
|
|
160
|
+
const MIN_WEIGHT_BUFFER_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_MIN_AVAILABLE_WEIGHT_BUFFER`
|
|
161
|
+
|
|
162
|
+
if (process.env[MIN_WEIGHT_BUFFER_ENV] !== undefined) {
|
|
163
|
+
minWeightBuffer = Number.parseInt(process.env[MIN_WEIGHT_BUFFER_ENV] as string)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
for (const symbolsBatch of batch(depthSnapshotFilter.symbols!, concurrencyLimit)) {
|
|
125
167
|
if (shouldCancel()) {
|
|
126
168
|
return
|
|
127
169
|
}
|
|
128
170
|
|
|
129
|
-
|
|
130
|
-
.get(`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, { timeout: 10000 })
|
|
131
|
-
.json()) as any
|
|
171
|
+
this.debug('requesting manual snapshots for: %s', symbolsBatch)
|
|
132
172
|
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
173
|
+
const usedWeights = await Promise.all(
|
|
174
|
+
symbolsBatch.map(async (symbol) => {
|
|
175
|
+
if (shouldCancel()) {
|
|
176
|
+
return 0
|
|
177
|
+
}
|
|
138
178
|
|
|
139
|
-
|
|
140
|
-
|
|
179
|
+
const isOverRateLimit = currentWeightLimit - usedWeight < minWeightBuffer
|
|
180
|
+
|
|
181
|
+
if (isOverRateLimit) {
|
|
182
|
+
const secondsToWait = 61 - new Date().getUTCSeconds()
|
|
183
|
+
this.debug(
|
|
184
|
+
'reached rate limit (x-mbx-used-weight-1m limit: %s, used weight: %s, minimum available weight buffer: %s), waiting: %s seconds',
|
|
185
|
+
currentWeightLimit,
|
|
186
|
+
usedWeight,
|
|
187
|
+
minWeightBuffer,
|
|
188
|
+
secondsToWait
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
await wait(secondsToWait * 1000)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const depthSnapshotResponse = await httpClient.get(`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, {
|
|
195
|
+
timeout: 10000,
|
|
196
|
+
retry: 10
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
const snapshot = {
|
|
200
|
+
stream: `${symbol}@depthSnapshot`,
|
|
201
|
+
generated: true,
|
|
202
|
+
data: JSON.parse(depthSnapshotResponse.body)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
this.manualSnapshotsBuffer.push(snapshot)
|
|
141
206
|
|
|
142
|
-
|
|
207
|
+
return Number.parseInt(depthSnapshotResponse.headers['x-mbx-used-weight-1m'] as string)
|
|
208
|
+
})
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
usedWeight = Math.max(...usedWeights)
|
|
212
|
+
|
|
213
|
+
this.debug('requested manual snapshots successfully for: %s, used weight: %s', symbolsBatch, usedWeight)
|
|
214
|
+
}
|
|
215
|
+
this.debug('requested all manual snapshots successfully')
|
|
143
216
|
}
|
|
144
217
|
}
|
|
145
218
|
|
|
@@ -150,6 +223,8 @@ export class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
150
223
|
protected suffixes = {
|
|
151
224
|
depth: '100ms'
|
|
152
225
|
}
|
|
226
|
+
|
|
227
|
+
protected depthRequestRequestWeight = 10
|
|
153
228
|
}
|
|
154
229
|
|
|
155
230
|
export class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -159,6 +234,8 @@ export class BinanceJerseyRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
159
234
|
protected suffixes = {
|
|
160
235
|
depth: '100ms'
|
|
161
236
|
}
|
|
237
|
+
|
|
238
|
+
protected depthRequestRequestWeight = 10
|
|
162
239
|
}
|
|
163
240
|
|
|
164
241
|
export class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -168,6 +245,8 @@ export class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
168
245
|
protected suffixes = {
|
|
169
246
|
depth: '100ms'
|
|
170
247
|
}
|
|
248
|
+
|
|
249
|
+
protected depthRequestRequestWeight = 10
|
|
171
250
|
}
|
|
172
251
|
|
|
173
252
|
export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -178,6 +257,8 @@ export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
178
257
|
depth: '0ms',
|
|
179
258
|
markPrice: '1s'
|
|
180
259
|
}
|
|
260
|
+
|
|
261
|
+
protected depthRequestRequestWeight = 20
|
|
181
262
|
}
|
|
182
263
|
|
|
183
264
|
export class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -189,4 +270,6 @@ export class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
189
270
|
markPrice: '1s',
|
|
190
271
|
indexPrice: '1s'
|
|
191
272
|
}
|
|
273
|
+
|
|
274
|
+
protected depthRequestRequestWeight = 20
|
|
192
275
|
}
|
|
@@ -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
|