ccxt 4.1.87 → 4.1.89
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/CHANGELOG.md +8309 -5710
- package/README.md +10 -9
- package/changelog.js +101 -0
- package/dist/ccxt.browser.js +8628 -4849
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/base/Exchange.js +95 -27
- package/dist/cjs/src/base/ws/Client.js +3 -3
- package/dist/cjs/src/base/ws/Future.js +9 -2
- package/dist/cjs/src/base/ws/WsClient.js +1 -1
- package/dist/cjs/src/bigone.js +8 -1
- package/dist/cjs/src/binance.js +4 -105
- package/dist/cjs/src/bit2c.js +8 -2
- package/dist/cjs/src/bitget.js +3455 -2480
- package/dist/cjs/src/bitmart.js +35 -9
- package/dist/cjs/src/coinbase.js +2 -0
- package/dist/cjs/src/coinbasepro.js +0 -43
- package/dist/cjs/src/coinex.js +14 -1
- package/dist/cjs/src/coinsph.js +0 -29
- package/dist/cjs/src/cryptocom.js +22 -10
- package/dist/cjs/src/gate.js +37 -39
- package/dist/cjs/src/gemini.js +1 -0
- package/dist/cjs/src/novadax.js +28 -16
- package/dist/cjs/src/okcoin.js +80 -21
- package/dist/cjs/src/phemex.js +105 -29
- package/dist/cjs/src/pro/binance.js +18 -215
- package/dist/cjs/src/pro/bitget.js +780 -736
- package/dist/cjs/src/pro/bitmart.js +8 -10
- package/dist/cjs/src/pro/bitmex.js +9 -34
- package/dist/cjs/src/pro/bitpanda.js +4 -4
- package/dist/cjs/src/pro/bybit.js +21 -97
- package/dist/cjs/src/pro/coinbasepro.js +36 -40
- package/dist/cjs/src/pro/cryptocom.js +10 -26
- package/dist/cjs/src/pro/gate.js +20 -17
- package/dist/cjs/src/pro/kucoin.js +39 -39
- package/dist/cjs/src/pro/kucoinfutures.js +40 -36
- package/dist/cjs/src/pro/okx.js +16 -29
- package/dist/cjs/src/tokocrypto.js +28 -14
- package/dist/cjs/src/woo.js +41 -14
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/bitget.d.ts +1 -1
- package/js/src/abstract/coinbasepro.d.ts +69 -0
- package/js/src/abstract/coinbasepro.js +11 -0
- package/js/src/abstract/phemex.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +2 -3
- package/js/src/base/Exchange.js +96 -28
- package/js/src/base/ws/Client.d.ts +2 -2
- package/js/src/base/ws/Client.js +4 -4
- package/js/src/base/ws/Future.d.ts +5 -2
- package/js/src/base/ws/Future.js +8 -2
- package/js/src/base/ws/WsClient.d.ts +1 -1
- package/js/src/base/ws/WsClient.js +2 -2
- package/js/src/bigone.js +9 -2
- package/js/src/binance.d.ts +0 -9
- package/js/src/binance.js +4 -105
- package/js/src/bit2c.js +8 -2
- package/js/src/bitget.d.ts +13 -11
- package/js/src/bitget.js +3455 -2480
- package/js/src/bitmart.js +35 -9
- package/js/src/coinbase.js +2 -0
- package/js/src/coinbasepro.d.ts +0 -4
- package/js/src/coinbasepro.js +1 -44
- package/js/src/coinex.js +14 -1
- package/js/src/coinsph.d.ts +0 -1
- package/js/src/coinsph.js +0 -29
- package/js/src/cryptocom.js +22 -10
- package/js/src/gate.js +37 -39
- package/js/src/gemini.js +1 -0
- package/js/src/novadax.js +28 -16
- package/js/src/okcoin.d.ts +1 -0
- package/js/src/okcoin.js +81 -22
- package/js/src/phemex.d.ts +2 -108
- package/js/src/phemex.js +105 -29
- package/js/src/pro/binance.d.ts +0 -2
- package/js/src/pro/binance.js +19 -216
- package/js/src/pro/bitget.d.ts +3 -5
- package/js/src/pro/bitget.js +780 -736
- package/js/src/pro/bitmart.js +8 -10
- package/js/src/pro/bitmex.js +9 -34
- package/js/src/pro/bitpanda.d.ts +1 -1
- package/js/src/pro/bitpanda.js +4 -4
- package/js/src/pro/bybit.d.ts +1 -2
- package/js/src/pro/bybit.js +21 -97
- package/js/src/pro/coinbasepro.d.ts +2 -2
- package/js/src/pro/coinbasepro.js +36 -40
- package/js/src/pro/cryptocom.d.ts +1 -1
- package/js/src/pro/cryptocom.js +10 -26
- package/js/src/pro/gate.d.ts +1 -0
- package/js/src/pro/gate.js +20 -17
- package/js/src/pro/kucoin.d.ts +1 -0
- package/js/src/pro/kucoin.js +39 -39
- package/js/src/pro/kucoinfutures.d.ts +2 -1
- package/js/src/pro/kucoinfutures.js +40 -36
- package/js/src/pro/okx.d.ts +1 -1
- package/js/src/pro/okx.js +16 -29
- package/js/src/tokocrypto.js +28 -14
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +42 -15
- package/package.json +2 -2
- package/skip-tests.json +3 -14
package/js/src/pro/binance.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ----------------------------------------------------------------------------
|
|
8
8
|
import binanceRest from '../binance.js';
|
|
9
9
|
import { Precise } from '../base/Precise.js';
|
|
10
|
-
import { ExchangeError, ArgumentsRequired, BadRequest
|
|
10
|
+
import { ExchangeError, ArgumentsRequired, BadRequest } from '../base/errors.js';
|
|
11
11
|
import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide } from '../base/ws/Cache.js';
|
|
12
12
|
import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
|
|
13
13
|
import { rsa } from '../base/functions/rsa.js';
|
|
@@ -152,24 +152,6 @@ export default class binance extends binanceRest {
|
|
|
152
152
|
// valid <levels> are 5, 10, or 20
|
|
153
153
|
//
|
|
154
154
|
// default 100, max 1000, valid limits 5, 10, 20, 50, 100, 500, 1000
|
|
155
|
-
await this.loadMarkets();
|
|
156
|
-
const market = this.market(symbol);
|
|
157
|
-
if (limit !== undefined) {
|
|
158
|
-
if (market['contract']) {
|
|
159
|
-
if ((limit !== 5) && (limit !== 10) && (limit !== 20) && (limit !== 50) && (limit !== 100) && (limit !== 500) && (limit !== 1000)) {
|
|
160
|
-
throw new ExchangeError(this.id + ' watchOrderBook limit argument must be undefined, 5, 10, 20, 50, 100, 500 or 1000');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
if (limit > 5000) {
|
|
165
|
-
throw new ExchangeError(this.id + ' watchOrderBook limit argument must be less than or equal to 5000');
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
let type = market['type'];
|
|
170
|
-
if (market['contract']) {
|
|
171
|
-
type = market['linear'] ? 'future' : 'delivery';
|
|
172
|
-
}
|
|
173
155
|
//
|
|
174
156
|
// notice the differences between trading futures and spot trading
|
|
175
157
|
// the algorithms use different urls in step 1
|
|
@@ -201,32 +183,7 @@ export default class binance extends binanceRest {
|
|
|
201
183
|
// 8. If the quantity is 0, remove the price level.
|
|
202
184
|
// 9. Receiving an event that removes a price level that is not in your local order book can happen and is normal.
|
|
203
185
|
//
|
|
204
|
-
|
|
205
|
-
const messageHash = market['lowercaseId'] + '@' + name;
|
|
206
|
-
const url = this.urls['api']['ws'][type] + '/' + this.stream(type, messageHash);
|
|
207
|
-
const requestId = this.requestId(url);
|
|
208
|
-
const watchOrderBookRate = this.safeString(this.options, 'watchOrderBookRate', '100');
|
|
209
|
-
const request = {
|
|
210
|
-
'method': 'SUBSCRIBE',
|
|
211
|
-
'params': [
|
|
212
|
-
messageHash + '@' + watchOrderBookRate + 'ms',
|
|
213
|
-
],
|
|
214
|
-
'id': requestId,
|
|
215
|
-
};
|
|
216
|
-
const subscription = {
|
|
217
|
-
'id': requestId.toString(),
|
|
218
|
-
'messageHash': messageHash,
|
|
219
|
-
'name': name,
|
|
220
|
-
'symbol': market['symbol'],
|
|
221
|
-
'method': this.handleOrderBookSubscription,
|
|
222
|
-
'limit': limit,
|
|
223
|
-
'type': type,
|
|
224
|
-
'params': params,
|
|
225
|
-
};
|
|
226
|
-
const message = this.extend(request, params);
|
|
227
|
-
// 1. Open a stream to wss://stream.binance.com:9443/ws/bnbbtc@depth.
|
|
228
|
-
const orderbook = await this.watch(url, messageHash, message, messageHash, subscription);
|
|
229
|
-
return orderbook.limit();
|
|
186
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
230
187
|
}
|
|
231
188
|
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
232
189
|
/**
|
|
@@ -246,15 +203,17 @@ export default class binance extends binanceRest {
|
|
|
246
203
|
type = firstMarket['linear'] ? 'future' : 'delivery';
|
|
247
204
|
}
|
|
248
205
|
const name = 'depth';
|
|
249
|
-
const messageHash = 'multipleOrderbook::' + symbols.join(',');
|
|
250
206
|
const url = this.urls['api']['ws'][type] + '/' + this.stream(type, 'multipleOrderbook');
|
|
251
207
|
const requestId = this.requestId(url);
|
|
252
208
|
const watchOrderBookRate = this.safeString(this.options, 'watchOrderBookRate', '100');
|
|
253
209
|
const subParams = [];
|
|
210
|
+
const messageHashes = [];
|
|
254
211
|
for (let i = 0; i < symbols.length; i++) {
|
|
255
212
|
const symbol = symbols[i];
|
|
256
213
|
const market = this.market(symbol);
|
|
257
|
-
const
|
|
214
|
+
const messageHash = market['lowercaseId'] + '@' + name;
|
|
215
|
+
messageHashes.push(messageHash);
|
|
216
|
+
const symbolHash = messageHash + '@' + watchOrderBookRate + 'ms';
|
|
258
217
|
subParams.push(symbolHash);
|
|
259
218
|
}
|
|
260
219
|
const request = {
|
|
@@ -264,7 +223,6 @@ export default class binance extends binanceRest {
|
|
|
264
223
|
};
|
|
265
224
|
const subscription = {
|
|
266
225
|
'id': requestId.toString(),
|
|
267
|
-
'messageHash': messageHash,
|
|
268
226
|
'name': name,
|
|
269
227
|
'symbols': symbols,
|
|
270
228
|
'method': this.handleOrderBookSubscription,
|
|
@@ -273,12 +231,14 @@ export default class binance extends binanceRest {
|
|
|
273
231
|
'params': params,
|
|
274
232
|
};
|
|
275
233
|
const message = this.extend(request, params);
|
|
276
|
-
const orderbook = await this.
|
|
234
|
+
const orderbook = await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
|
|
277
235
|
return orderbook.limit();
|
|
278
236
|
}
|
|
279
237
|
async fetchOrderBookSnapshot(client, message, subscription) {
|
|
280
|
-
const
|
|
238
|
+
const name = this.safeString(subscription, 'name');
|
|
281
239
|
const symbol = this.safeString(subscription, 'symbol');
|
|
240
|
+
const market = this.market(symbol);
|
|
241
|
+
const messageHash = market['lowercaseId'] + '@' + name;
|
|
282
242
|
try {
|
|
283
243
|
const defaultLimit = this.safeInteger(this.options, 'watchOrderBookLimit', 1000);
|
|
284
244
|
const type = this.safeValue(subscription, 'type');
|
|
@@ -418,8 +378,6 @@ export default class binance extends binanceRest {
|
|
|
418
378
|
this.handleOrderBookMessage(client, message, orderbook);
|
|
419
379
|
if (nonce < orderbook['nonce']) {
|
|
420
380
|
client.resolve(orderbook, messageHash);
|
|
421
|
-
// watchOrderBookForSymbols part (dry logic)
|
|
422
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbook::', symbol, orderbook);
|
|
423
381
|
}
|
|
424
382
|
}
|
|
425
383
|
else {
|
|
@@ -438,8 +396,6 @@ export default class binance extends binanceRest {
|
|
|
438
396
|
this.handleOrderBookMessage(client, message, orderbook);
|
|
439
397
|
if (nonce <= orderbook['nonce']) {
|
|
440
398
|
client.resolve(orderbook, messageHash);
|
|
441
|
-
// watchOrderBookForSymbols part (dry logic)
|
|
442
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbook::', symbol, orderbook);
|
|
443
399
|
}
|
|
444
400
|
}
|
|
445
401
|
else {
|
|
@@ -517,9 +473,8 @@ export default class binance extends binanceRest {
|
|
|
517
473
|
const currentMessageHash = market['lowercaseId'] + '@' + name;
|
|
518
474
|
subParams.push(currentMessageHash);
|
|
519
475
|
}
|
|
520
|
-
const messageHash = 'multipleTrades::' + symbols.join(',');
|
|
521
476
|
const query = this.omit(params, 'type');
|
|
522
|
-
const url = this.urls['api']['ws'][type] + '/' + this.stream(type,
|
|
477
|
+
const url = this.urls['api']['ws'][type] + '/' + this.stream(type, 'multipleTrades');
|
|
523
478
|
const requestId = this.requestId(url);
|
|
524
479
|
const request = {
|
|
525
480
|
'method': 'SUBSCRIBE',
|
|
@@ -529,7 +484,7 @@ export default class binance extends binanceRest {
|
|
|
529
484
|
const subscribe = {
|
|
530
485
|
'id': requestId,
|
|
531
486
|
};
|
|
532
|
-
const trades = await this.watch(url,
|
|
487
|
+
const trades = await this.watch(url, subParams, this.extend(request, query), subParams, subscribe);
|
|
533
488
|
if (this.newUpdates) {
|
|
534
489
|
const first = this.safeValue(trades, 0);
|
|
535
490
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -548,33 +503,7 @@ export default class binance extends binanceRest {
|
|
|
548
503
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
549
504
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
550
505
|
*/
|
|
551
|
-
await this.
|
|
552
|
-
const market = this.market(symbol);
|
|
553
|
-
const options = this.safeValue(this.options, 'watchTrades', {});
|
|
554
|
-
const name = this.safeString(options, 'name', 'trade');
|
|
555
|
-
const messageHash = market['lowercaseId'] + '@' + name;
|
|
556
|
-
let type = market['type'];
|
|
557
|
-
if (market['contract']) {
|
|
558
|
-
type = market['linear'] ? 'future' : 'delivery';
|
|
559
|
-
}
|
|
560
|
-
const query = this.omit(params, 'type');
|
|
561
|
-
const url = this.urls['api']['ws'][type] + '/' + this.stream(type, messageHash);
|
|
562
|
-
const requestId = this.requestId(url);
|
|
563
|
-
const request = {
|
|
564
|
-
'method': 'SUBSCRIBE',
|
|
565
|
-
'params': [
|
|
566
|
-
messageHash,
|
|
567
|
-
],
|
|
568
|
-
'id': requestId,
|
|
569
|
-
};
|
|
570
|
-
const subscribe = {
|
|
571
|
-
'id': requestId,
|
|
572
|
-
};
|
|
573
|
-
const trades = await this.watch(url, messageHash, this.extend(request, query), messageHash, subscribe);
|
|
574
|
-
if (this.newUpdates) {
|
|
575
|
-
limit = trades.getLimit(market['symbol'], limit);
|
|
576
|
-
}
|
|
577
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
506
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
578
507
|
}
|
|
579
508
|
parseTrade(trade, market = undefined) {
|
|
580
509
|
//
|
|
@@ -758,8 +687,6 @@ export default class binance extends binanceRest {
|
|
|
758
687
|
tradesArray.append(trade);
|
|
759
688
|
this.trades[symbol] = tradesArray;
|
|
760
689
|
client.resolve(tradesArray, messageHash);
|
|
761
|
-
// watchTradesForSymbols part
|
|
762
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, tradesArray);
|
|
763
690
|
}
|
|
764
691
|
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
765
692
|
/**
|
|
@@ -808,62 +735,6 @@ export default class binance extends binanceRest {
|
|
|
808
735
|
}
|
|
809
736
|
return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
|
|
810
737
|
}
|
|
811
|
-
async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
|
|
812
|
-
/**
|
|
813
|
-
* @method
|
|
814
|
-
* @name binance#watchOHLCVForSymbols
|
|
815
|
-
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
816
|
-
* @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
|
|
817
|
-
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
818
|
-
* @param {int} [limit] the maximum amount of candles to fetch
|
|
819
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
820
|
-
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
821
|
-
*/
|
|
822
|
-
await this.loadMarkets();
|
|
823
|
-
const options = this.safeValue(this.options, 'watchOHLCV', {});
|
|
824
|
-
const nameOption = this.safeString(options, 'name', 'kline');
|
|
825
|
-
const name = this.safeString(params, 'name', nameOption);
|
|
826
|
-
params = this.omit(params, 'name');
|
|
827
|
-
const firstMarket = this.market(symbolsAndTimeframes[0][0]);
|
|
828
|
-
let type = firstMarket['type'];
|
|
829
|
-
if (firstMarket['contract']) {
|
|
830
|
-
type = firstMarket['linear'] ? 'future' : 'delivery';
|
|
831
|
-
}
|
|
832
|
-
const subParams = [];
|
|
833
|
-
const hashes = [];
|
|
834
|
-
for (let i = 0; i < symbolsAndTimeframes.length; i++) {
|
|
835
|
-
const data = symbolsAndTimeframes[i];
|
|
836
|
-
const symbolString = data[0];
|
|
837
|
-
const timeframeString = data[1];
|
|
838
|
-
const interval = this.safeString(this.timeframes, timeframeString, timeframeString);
|
|
839
|
-
const market = this.market(symbolString);
|
|
840
|
-
let marketId = market['lowercaseId'];
|
|
841
|
-
if (name === 'indexPriceKline') {
|
|
842
|
-
// weird behavior for index price kline we can't use the perp suffix
|
|
843
|
-
marketId = marketId.replace('_perp', '');
|
|
844
|
-
}
|
|
845
|
-
const topic = marketId + '@' + name + '_' + interval;
|
|
846
|
-
subParams.push(topic);
|
|
847
|
-
hashes.push(symbolString + '#' + timeframeString);
|
|
848
|
-
}
|
|
849
|
-
const messageHash = 'multipleOHLCV::' + hashes.join(',');
|
|
850
|
-
const url = this.urls['api']['ws'][type] + '/' + this.stream(type, messageHash);
|
|
851
|
-
const requestId = this.requestId(url);
|
|
852
|
-
const request = {
|
|
853
|
-
'method': 'SUBSCRIBE',
|
|
854
|
-
'params': subParams,
|
|
855
|
-
'id': requestId,
|
|
856
|
-
};
|
|
857
|
-
const subscribe = {
|
|
858
|
-
'id': requestId,
|
|
859
|
-
};
|
|
860
|
-
const [symbol, timeframe, stored] = await this.watch(url, messageHash, this.extend(request, params), messageHash, subscribe);
|
|
861
|
-
if (this.newUpdates) {
|
|
862
|
-
limit = stored.getLimit(symbol, limit);
|
|
863
|
-
}
|
|
864
|
-
const filtered = this.filterBySinceLimit(stored, since, limit, 0, true);
|
|
865
|
-
return this.createOHLCVObject(symbol, timeframe, filtered);
|
|
866
|
-
}
|
|
867
738
|
handleOHLCV(client, message) {
|
|
868
739
|
//
|
|
869
740
|
// {
|
|
@@ -928,8 +799,6 @@ export default class binance extends binanceRest {
|
|
|
928
799
|
}
|
|
929
800
|
stored.append(parsed);
|
|
930
801
|
client.resolve(stored, messageHash);
|
|
931
|
-
// watchOHLCVForSymbols part
|
|
932
|
-
this.resolveMultipleOHLCV(client, 'multipleOHLCV::', symbol, timeframe, stored);
|
|
933
802
|
}
|
|
934
803
|
async watchTicker(symbol, params = {}) {
|
|
935
804
|
/**
|
|
@@ -998,10 +867,7 @@ export default class binance extends binanceRest {
|
|
|
998
867
|
name = this.safeString(params, 'name', name);
|
|
999
868
|
params = this.omit(params, 'name');
|
|
1000
869
|
let wsParams = [];
|
|
1001
|
-
|
|
1002
|
-
if (symbols !== undefined) {
|
|
1003
|
-
messageHash = 'tickers::' + symbols.join(',');
|
|
1004
|
-
}
|
|
870
|
+
const messageHash = 'tickers';
|
|
1005
871
|
if (name === 'bookTicker') {
|
|
1006
872
|
if (marketIds === undefined) {
|
|
1007
873
|
throw new ArgumentsRequired(this.id + ' watchTickers() requires symbols for bookTicker');
|
|
@@ -1195,19 +1061,6 @@ export default class binance extends binanceRest {
|
|
|
1195
1061
|
this.tickers[symbol] = result;
|
|
1196
1062
|
newTickers.push(result);
|
|
1197
1063
|
}
|
|
1198
|
-
const messageHashes = this.findMessageHashes(client, 'tickers::');
|
|
1199
|
-
for (let i = 0; i < messageHashes.length; i++) {
|
|
1200
|
-
const messageHash = messageHashes[i];
|
|
1201
|
-
const parts = messageHash.split('::');
|
|
1202
|
-
const symbolsString = parts[1];
|
|
1203
|
-
const symbols = symbolsString.split(',');
|
|
1204
|
-
const tickers = this.filterByArray(newTickers, 'symbol', symbols);
|
|
1205
|
-
const tickersSymbols = Object.keys(tickers);
|
|
1206
|
-
const numTickers = tickersSymbols.length;
|
|
1207
|
-
if (numTickers > 0) {
|
|
1208
|
-
client.resolve(tickers, messageHash);
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
1064
|
client.resolve(newTickers, 'tickers');
|
|
1212
1065
|
}
|
|
1213
1066
|
signParams(params = {}) {
|
|
@@ -2088,7 +1941,7 @@ export default class binance extends binanceRest {
|
|
|
2088
1941
|
if (symbol !== undefined) {
|
|
2089
1942
|
market = this.market(symbol);
|
|
2090
1943
|
symbol = market['symbol'];
|
|
2091
|
-
messageHash += '
|
|
1944
|
+
messageHash += ':' + symbol;
|
|
2092
1945
|
}
|
|
2093
1946
|
let type = undefined;
|
|
2094
1947
|
[type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
|
|
@@ -2117,58 +1970,6 @@ export default class binance extends binanceRest {
|
|
|
2117
1970
|
}
|
|
2118
1971
|
return this.filterBySymbolSinceLimit(this.orders, symbol, since, limit, true);
|
|
2119
1972
|
}
|
|
2120
|
-
async watchOrdersForSymbols(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2121
|
-
/**
|
|
2122
|
-
* @method
|
|
2123
|
-
* @name binance#watchOrdersForSymbols
|
|
2124
|
-
* @see https://binance-docs.github.io/apidocs/spot/en/#payload-order-update
|
|
2125
|
-
* @description watches information on multiple orders made by the user
|
|
2126
|
-
* @param {string[]} symbols unified symbol of the market to fetch orders for
|
|
2127
|
-
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
2128
|
-
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
2129
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2130
|
-
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2131
|
-
*/
|
|
2132
|
-
let marginMode = undefined;
|
|
2133
|
-
[marginMode, params] = this.handleMarginModeAndParams('authenticate', params);
|
|
2134
|
-
const isIsolatedMargin = (marginMode === 'isolated');
|
|
2135
|
-
if (isIsolatedMargin) {
|
|
2136
|
-
throw new NotSupported(this.id + ' watchOrdersForSymbols does not support isolated margin markets, use watchOrders instead');
|
|
2137
|
-
}
|
|
2138
|
-
await this.loadMarkets();
|
|
2139
|
-
let type = undefined;
|
|
2140
|
-
const market = this.getMarketFromSymbols(symbols);
|
|
2141
|
-
[type, params] = this.handleMarketTypeAndParams('watchOrdersForSymbols', market, params);
|
|
2142
|
-
symbols = this.marketSymbols(symbols, type, true, true, true);
|
|
2143
|
-
let messageHash = 'orders';
|
|
2144
|
-
if (symbols !== undefined) {
|
|
2145
|
-
messageHash = messageHash + '::' + symbols.join(',');
|
|
2146
|
-
}
|
|
2147
|
-
let subType = undefined;
|
|
2148
|
-
[subType, params] = this.handleSubTypeAndParams('watchOrdersForSymbols', market, params);
|
|
2149
|
-
if (this.isLinear(type, subType)) {
|
|
2150
|
-
type = 'future';
|
|
2151
|
-
}
|
|
2152
|
-
else if (this.isInverse(type, subType)) {
|
|
2153
|
-
type = 'delivery';
|
|
2154
|
-
}
|
|
2155
|
-
params = this.extend(params, { 'type': type });
|
|
2156
|
-
await this.authenticate(params);
|
|
2157
|
-
let urlType = type;
|
|
2158
|
-
if (type === 'margin') {
|
|
2159
|
-
urlType = 'spot'; // spot-margin shares the same stream as regular spot
|
|
2160
|
-
}
|
|
2161
|
-
const url = this.urls['api']['ws'][urlType] + '/' + this.options[type]['listenKey'];
|
|
2162
|
-
const client = this.client(url);
|
|
2163
|
-
this.setBalanceCache(client, type);
|
|
2164
|
-
this.setPositionsCache(client, type);
|
|
2165
|
-
const message = undefined;
|
|
2166
|
-
const newOrders = await this.watch(url, messageHash, message, type);
|
|
2167
|
-
if (this.newUpdates) {
|
|
2168
|
-
return newOrders;
|
|
2169
|
-
}
|
|
2170
|
-
return this.filterBySymbolsSinceLimit(this.orders, symbols, since, limit, true);
|
|
2171
|
-
}
|
|
2172
1973
|
parseWsOrder(order, market = undefined) {
|
|
2173
1974
|
//
|
|
2174
1975
|
// spot
|
|
@@ -2826,8 +2627,10 @@ export default class binance extends binanceRest {
|
|
|
2826
2627
|
}
|
|
2827
2628
|
}
|
|
2828
2629
|
cachedOrders.append(parsed);
|
|
2829
|
-
|
|
2830
|
-
|
|
2630
|
+
const messageHash = 'orders';
|
|
2631
|
+
const symbolSpecificMessageHash = 'orders:' + symbol;
|
|
2632
|
+
client.resolve(parsed, messageHash);
|
|
2633
|
+
client.resolve(parsed, symbolSpecificMessageHash);
|
|
2831
2634
|
}
|
|
2832
2635
|
}
|
|
2833
2636
|
handleAcountUpdate(client, message) {
|
package/js/src/pro/bitget.d.ts
CHANGED
|
@@ -8,14 +8,12 @@ import Client from '../base/ws/Client.js';
|
|
|
8
8
|
*/
|
|
9
9
|
export default class bitget extends bitgetRest {
|
|
10
10
|
describe(): any;
|
|
11
|
-
|
|
12
|
-
getMarketIdFromArg(arg: any): string;
|
|
11
|
+
getInstType(market: any, params?: {}): any[];
|
|
13
12
|
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
14
13
|
watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
15
|
-
handleTicker(client: Client, message: any):
|
|
14
|
+
handleTicker(client: Client, message: any): void;
|
|
16
15
|
parseWsTicker(message: any, market?: any): Ticker;
|
|
17
16
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
18
|
-
watchOHLCVForSymbols(symbolsAndTimeframes: string[][], since?: Int, limit?: Int, params?: {}): Promise<import("../base/types.js").Dictionary<import("../base/types.js").Dictionary<OHLCV[]>>>;
|
|
19
17
|
handleOHLCV(client: Client, message: any): void;
|
|
20
18
|
parseWsOHLCV(ohlcv: any, market?: any): OHLCV;
|
|
21
19
|
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
@@ -40,7 +38,7 @@ export default class bitget extends bitgetRest {
|
|
|
40
38
|
watchBalance(params?: {}): Promise<Balances>;
|
|
41
39
|
handleBalance(client: Client, message: any): void;
|
|
42
40
|
watchPublic(messageHash: any, args: any, params?: {}): Promise<any>;
|
|
43
|
-
watchPublicMultiple(
|
|
41
|
+
watchPublicMultiple(messageHashes: any, argsArray: any, params?: {}): Promise<any>;
|
|
44
42
|
authenticate(params?: {}): Promise<any>;
|
|
45
43
|
watchPrivate(messageHash: any, subscriptionHash: any, args: any, params?: {}): Promise<any>;
|
|
46
44
|
handleAuthenticate(client: Client, message: any): void;
|