ccxt 4.1.86 → 4.1.88
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/README.md +9 -11
- package/dist/ccxt.browser.js +5673 -8615
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -11
- 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/binance.js +4 -105
- package/dist/cjs/src/binanceus.js +0 -2
- package/dist/cjs/src/bit2c.js +8 -2
- package/dist/cjs/src/bitforex.js +0 -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/coinlist.js +0 -2
- package/dist/cjs/src/coinsph.js +0 -31
- package/dist/cjs/src/cryptocom.js +22 -12
- package/dist/cjs/src/gate.js +37 -249
- package/dist/cjs/src/gemini.js +1 -0
- package/dist/cjs/src/kuna.js +0 -2
- package/dist/cjs/src/mexc.js +0 -2
- package/dist/cjs/src/novadax.js +28 -16
- package/dist/cjs/src/okcoin.js +23 -5
- package/dist/cjs/src/okx.js +0 -1
- 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/coinex.js +2 -1
- 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 +0 -1
- package/dist/cjs/src/upbit.js +36 -26
- package/dist/cjs/src/wazirx.js +0 -2
- package/dist/cjs/src/whitebit.js +0 -2
- package/dist/cjs/src/woo.js +0 -2
- package/js/ccxt.d.ts +3 -15
- package/js/ccxt.js +2 -10
- package/js/src/abstract/bitget.d.ts +1 -1
- package/js/src/ace.d.ts +1 -1
- package/js/src/alpaca.d.ts +1 -1
- package/js/src/ascendex.d.ts +1 -1
- package/js/src/base/Exchange.d.ts +5 -6
- 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.d.ts +1 -1
- package/js/src/binance.d.ts +1 -10
- package/js/src/binance.js +4 -105
- package/js/src/binanceus.js +0 -2
- package/js/src/bingx.d.ts +1 -1
- package/js/src/bit2c.d.ts +1 -1
- package/js/src/bit2c.js +8 -2
- package/js/src/bitbank.d.ts +1 -1
- package/js/src/bitbns.d.ts +1 -1
- package/js/src/bitfinex.d.ts +1 -1
- package/js/src/bitfinex2.d.ts +1 -1
- package/js/src/bitflyer.d.ts +1 -1
- package/js/src/bitforex.d.ts +1 -1
- package/js/src/bitforex.js +0 -2
- package/js/src/bitget.d.ts +13 -11
- package/js/src/bitget.js +3455 -2480
- package/js/src/bithumb.d.ts +1 -1
- package/js/src/bitmart.d.ts +1 -1
- package/js/src/bitmart.js +35 -9
- package/js/src/bitmex.d.ts +1 -1
- package/js/src/bitopro.d.ts +1 -1
- package/js/src/bitpanda.d.ts +1 -1
- package/js/src/bitrue.d.ts +1 -1
- package/js/src/bitso.d.ts +1 -1
- package/js/src/bitstamp.d.ts +1 -1
- package/js/src/bitvavo.d.ts +1 -1
- package/js/src/bl3p.d.ts +1 -1
- package/js/src/blockchaincom.d.ts +1 -1
- package/js/src/btcalpha.d.ts +1 -1
- package/js/src/btcbox.d.ts +1 -1
- package/js/src/btcmarkets.d.ts +1 -1
- package/js/src/btcturk.d.ts +1 -1
- package/js/src/bybit.d.ts +1 -1
- package/js/src/cex.d.ts +1 -1
- package/js/src/coinbase.d.ts +1 -1
- package/js/src/coinbase.js +2 -0
- package/js/src/coinbasepro.d.ts +1 -5
- package/js/src/coinbasepro.js +1 -44
- package/js/src/coincheck.d.ts +1 -1
- package/js/src/coinex.d.ts +1 -1
- package/js/src/coinlist.d.ts +1 -1
- package/js/src/coinlist.js +0 -2
- package/js/src/coinmate.d.ts +1 -1
- package/js/src/coinone.d.ts +1 -1
- package/js/src/coinsph.d.ts +1 -2
- package/js/src/coinsph.js +0 -31
- package/js/src/coinspot.d.ts +1 -1
- package/js/src/cryptocom.d.ts +1 -1
- package/js/src/cryptocom.js +22 -12
- package/js/src/currencycom.d.ts +1 -1
- package/js/src/delta.d.ts +1 -1
- package/js/src/deribit.d.ts +1 -1
- package/js/src/digifinex.d.ts +1 -1
- package/js/src/exmo.d.ts +1 -1
- package/js/src/gate.d.ts +1 -28
- package/js/src/gate.js +37 -249
- package/js/src/gemini.d.ts +1 -1
- package/js/src/gemini.js +1 -0
- package/js/src/hitbtc.d.ts +1 -1
- package/js/src/hollaex.d.ts +1 -1
- package/js/src/htx.d.ts +1 -1
- package/js/src/huobijp.d.ts +1 -1
- package/js/src/idex.d.ts +1 -1
- package/js/src/independentreserve.d.ts +1 -1
- package/js/src/indodax.d.ts +1 -1
- package/js/src/kraken.d.ts +1 -1
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/kucoin.d.ts +1 -1
- package/js/src/kucoinfutures.d.ts +1 -1
- package/js/src/kuna.d.ts +1 -1
- package/js/src/kuna.js +0 -2
- package/js/src/latoken.d.ts +1 -1
- package/js/src/lbank.d.ts +1 -1
- package/js/src/luno.d.ts +1 -1
- package/js/src/lykke.d.ts +1 -1
- package/js/src/mercado.d.ts +1 -1
- package/js/src/mexc.d.ts +1 -1
- package/js/src/mexc.js +0 -2
- package/js/src/ndax.d.ts +1 -1
- package/js/src/novadax.d.ts +1 -1
- package/js/src/novadax.js +28 -16
- package/js/src/oceanex.d.ts +1 -1
- package/js/src/okcoin.d.ts +1 -1
- package/js/src/okcoin.js +23 -5
- package/js/src/okx.d.ts +1 -1
- package/js/src/okx.js +0 -1
- package/js/src/p2b.d.ts +1 -1
- package/js/src/paymium.d.ts +1 -1
- package/js/src/phemex.d.ts +1 -1
- package/js/src/poloniex.d.ts +1 -1
- package/js/src/poloniexfutures.d.ts +1 -1
- package/js/src/pro/alpaca.d.ts +8 -8
- package/js/src/pro/ascendex.d.ts +7 -7
- package/js/src/pro/binance.d.ts +22 -24
- package/js/src/pro/binance.js +19 -216
- package/js/src/pro/bingx.d.ts +7 -7
- package/js/src/pro/bitfinex.d.ts +6 -6
- package/js/src/pro/bitfinex2.d.ts +11 -11
- package/js/src/pro/bitget.d.ts +20 -22
- package/js/src/pro/bitget.js +780 -736
- package/js/src/pro/bitmart.d.ts +13 -13
- package/js/src/pro/bitmart.js +8 -10
- package/js/src/pro/bitmex.d.ts +10 -10
- package/js/src/pro/bitmex.js +9 -34
- package/js/src/pro/bitopro.d.ts +5 -5
- package/js/src/pro/bitpanda.d.ts +11 -11
- package/js/src/pro/bitpanda.js +4 -4
- package/js/src/pro/bitrue.d.ts +5 -5
- package/js/src/pro/bitstamp.d.ts +6 -6
- package/js/src/pro/bitvavo.d.ts +7 -7
- package/js/src/pro/blockchaincom.d.ts +10 -10
- package/js/src/pro/bybit.d.ts +15 -16
- package/js/src/pro/bybit.js +21 -97
- package/js/src/pro/cex.d.ts +20 -20
- package/js/src/pro/coinbase.d.ts +7 -6
- package/js/src/pro/coinbasepro.d.ts +12 -12
- package/js/src/pro/coinbasepro.js +36 -40
- package/js/src/pro/coinex.d.ts +12 -12
- package/js/src/pro/coinex.js +2 -1
- package/js/src/pro/cryptocom.d.ts +14 -14
- package/js/src/pro/cryptocom.js +10 -26
- package/js/src/pro/currencycom.d.ts +6 -6
- package/js/src/pro/deribit.d.ts +8 -8
- package/js/src/pro/exmo.d.ts +6 -6
- package/js/src/pro/gate.d.ts +12 -11
- package/js/src/pro/gate.js +20 -17
- package/js/src/pro/gemini.d.ts +7 -7
- package/js/src/pro/hitbtc.d.ts +13 -13
- package/js/src/pro/hollaex.d.ts +6 -6
- package/js/src/pro/htx.d.ts +12 -12
- package/js/src/pro/huobijp.d.ts +5 -5
- package/js/src/pro/idex.d.ts +7 -7
- package/js/src/pro/independentreserve.d.ts +4 -4
- package/js/src/pro/kraken.d.ts +11 -11
- package/js/src/pro/krakenfutures.d.ts +15 -15
- package/js/src/pro/kucoin.d.ts +14 -13
- package/js/src/pro/kucoin.js +39 -39
- package/js/src/pro/kucoinfutures.d.ts +12 -11
- package/js/src/pro/kucoinfutures.js +40 -36
- package/js/src/pro/luno.d.ts +3 -3
- package/js/src/pro/mexc.d.ts +11 -11
- package/js/src/pro/ndax.d.ts +5 -5
- package/js/src/pro/okcoin.d.ts +7 -7
- package/js/src/pro/okx.d.ts +17 -17
- package/js/src/pro/okx.js +16 -29
- package/js/src/pro/phemex.d.ts +9 -9
- package/js/src/pro/poloniex.d.ts +13 -13
- package/js/src/pro/poloniexfutures.d.ts +10 -10
- package/js/src/pro/probit.d.ts +7 -7
- package/js/src/pro/upbit.d.ts +4 -4
- package/js/src/pro/wazirx.d.ts +12 -12
- package/js/src/pro/whitebit.d.ts +10 -10
- package/js/src/pro/woo.d.ts +11 -11
- package/js/src/probit.d.ts +1 -1
- package/js/src/timex.d.ts +1 -1
- package/js/src/tokocrypto.d.ts +1 -1
- package/js/src/tokocrypto.js +0 -1
- package/js/src/upbit.d.ts +1 -1
- package/js/src/upbit.js +36 -26
- package/js/src/wavesexchange.d.ts +1 -1
- package/js/src/wazirx.d.ts +1 -1
- package/js/src/wazirx.js +0 -2
- package/js/src/whitebit.d.ts +1 -1
- package/js/src/whitebit.js +0 -2
- package/js/src/woo.d.ts +1 -1
- package/js/src/woo.js +0 -2
- package/js/src/yobit.d.ts +1 -1
- package/js/src/zaif.d.ts +1 -1
- package/js/src/zonda.d.ts +1 -1
- package/jsdoc2md.js +0 -2
- package/package.json +1 -1
- package/skip-tests.json +3 -14
- package/js/src/abstract/bittrex.d.ts +0 -79
- package/js/src/abstract/bittrex.js +0 -11
- package/js/src/abstract/coinbaseprime.d.ts +0 -69
- package/js/src/abstract/coinbaseprime.js +0 -11
|
@@ -73,11 +73,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
73
73
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
74
74
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
75
75
|
*/
|
|
76
|
-
await this.
|
|
77
|
-
const market = this.market(symbol);
|
|
78
|
-
const messageHash = 'book' + '.' + market['id'];
|
|
79
|
-
const orderbook = await this.watchPublic(messageHash, params);
|
|
80
|
-
return orderbook.limit();
|
|
76
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
81
77
|
}
|
|
82
78
|
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
83
79
|
/**
|
|
@@ -96,11 +92,10 @@ class cryptocom extends cryptocom$1 {
|
|
|
96
92
|
for (let i = 0; i < symbols.length; i++) {
|
|
97
93
|
const symbol = symbols[i];
|
|
98
94
|
const market = this.market(symbol);
|
|
99
|
-
const
|
|
100
|
-
topics.push(
|
|
95
|
+
const currentTopic = 'book' + '.' + market['id'];
|
|
96
|
+
topics.push(currentTopic);
|
|
101
97
|
}
|
|
102
|
-
const
|
|
103
|
-
const orderbook = await this.watchPublicMultiple(messageHash, topics, params);
|
|
98
|
+
const orderbook = await this.watchPublicMultiple(topics, topics, params);
|
|
104
99
|
return orderbook.limit();
|
|
105
100
|
}
|
|
106
101
|
handleOrderBookSnapshot(client, message) {
|
|
@@ -142,7 +137,6 @@ class cryptocom extends cryptocom$1 {
|
|
|
142
137
|
orderbook.reset(snapshot);
|
|
143
138
|
this.orderbooks[symbol] = orderbook;
|
|
144
139
|
client.resolve(orderbook, messageHash);
|
|
145
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbooks::', symbol, orderbook);
|
|
146
140
|
}
|
|
147
141
|
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
148
142
|
/**
|
|
@@ -156,15 +150,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
156
150
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
157
151
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
158
152
|
*/
|
|
159
|
-
await this.
|
|
160
|
-
const market = this.market(symbol);
|
|
161
|
-
symbol = market['symbol'];
|
|
162
|
-
const messageHash = 'trade' + '.' + market['id'];
|
|
163
|
-
const trades = await this.watchPublic(messageHash, params);
|
|
164
|
-
if (this.newUpdates) {
|
|
165
|
-
limit = trades.getLimit(symbol, limit);
|
|
166
|
-
}
|
|
167
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
153
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
168
154
|
}
|
|
169
155
|
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
170
156
|
/**
|
|
@@ -184,11 +170,10 @@ class cryptocom extends cryptocom$1 {
|
|
|
184
170
|
for (let i = 0; i < symbols.length; i++) {
|
|
185
171
|
const symbol = symbols[i];
|
|
186
172
|
const market = this.market(symbol);
|
|
187
|
-
const
|
|
188
|
-
topics.push(
|
|
173
|
+
const currentTopic = 'trade' + '.' + market['id'];
|
|
174
|
+
topics.push(currentTopic);
|
|
189
175
|
}
|
|
190
|
-
const
|
|
191
|
-
const trades = await this.watchPublicMultiple(messageHash, topics, params);
|
|
176
|
+
const trades = await this.watchPublicMultiple(topics, topics, params);
|
|
192
177
|
if (this.newUpdates) {
|
|
193
178
|
const first = this.safeValue(trades, 0);
|
|
194
179
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -242,7 +227,6 @@ class cryptocom extends cryptocom$1 {
|
|
|
242
227
|
const channelReplaced = channel.replace('.' + marketId, '');
|
|
243
228
|
client.resolve(stored, symbolSpecificMessageHash);
|
|
244
229
|
client.resolve(stored, channelReplaced);
|
|
245
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, stored);
|
|
246
230
|
}
|
|
247
231
|
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
248
232
|
/**
|
|
@@ -761,7 +745,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
761
745
|
const message = this.extend(request, params);
|
|
762
746
|
return await this.watch(url, messageHash, message, messageHash);
|
|
763
747
|
}
|
|
764
|
-
async watchPublicMultiple(
|
|
748
|
+
async watchPublicMultiple(messageHashes, topics, params = {}) {
|
|
765
749
|
const url = this.urls['api']['ws']['public'];
|
|
766
750
|
const id = this.nonce();
|
|
767
751
|
const request = {
|
|
@@ -772,7 +756,7 @@ class cryptocom extends cryptocom$1 {
|
|
|
772
756
|
'nonce': id,
|
|
773
757
|
};
|
|
774
758
|
const message = this.extend(request, params);
|
|
775
|
-
return await this.
|
|
759
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes);
|
|
776
760
|
}
|
|
777
761
|
async watchPrivateRequest(nonce, params = {}) {
|
|
778
762
|
await this.authenticate();
|
package/dist/cjs/src/pro/gate.js
CHANGED
|
@@ -385,20 +385,7 @@ class gate extends gate$1 {
|
|
|
385
385
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
386
386
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
387
387
|
*/
|
|
388
|
-
await this.
|
|
389
|
-
const market = this.market(symbol);
|
|
390
|
-
symbol = market['symbol'];
|
|
391
|
-
const marketId = market['id'];
|
|
392
|
-
const messageType = this.getTypeByMarket(market);
|
|
393
|
-
const channel = messageType + '.trades';
|
|
394
|
-
const messageHash = 'trades:' + symbol;
|
|
395
|
-
const url = this.getUrlByMarket(market);
|
|
396
|
-
const payload = [marketId];
|
|
397
|
-
const trades = await this.subscribePublic(url, messageHash, payload, channel, params);
|
|
398
|
-
if (this.newUpdates) {
|
|
399
|
-
limit = trades.getLimit(symbol, limit);
|
|
400
|
-
}
|
|
401
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
388
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
402
389
|
}
|
|
403
390
|
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
404
391
|
/**
|
|
@@ -417,9 +404,13 @@ class gate extends gate$1 {
|
|
|
417
404
|
const market = this.market(symbols[0]);
|
|
418
405
|
const messageType = this.getTypeByMarket(market);
|
|
419
406
|
const channel = messageType + '.trades';
|
|
420
|
-
const
|
|
407
|
+
const messageHashes = [];
|
|
408
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
409
|
+
const symbol = symbols[i];
|
|
410
|
+
messageHashes.push('trades:' + symbol);
|
|
411
|
+
}
|
|
421
412
|
const url = this.getUrlByMarket(market);
|
|
422
|
-
const trades = await this.
|
|
413
|
+
const trades = await this.subscribePublicMultiple(url, messageHashes, marketIds, channel, params);
|
|
423
414
|
if (this.newUpdates) {
|
|
424
415
|
const first = this.safeValue(trades, 0);
|
|
425
416
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -461,7 +452,6 @@ class gate extends gate$1 {
|
|
|
461
452
|
cachedTrades.append(trade);
|
|
462
453
|
const hash = 'trades:' + symbol;
|
|
463
454
|
client.resolve(cachedTrades, hash);
|
|
464
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, cachedTrades);
|
|
465
455
|
}
|
|
466
456
|
}
|
|
467
457
|
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
@@ -1264,6 +1254,19 @@ class gate extends gate$1 {
|
|
|
1264
1254
|
const message = this.extend(request, params);
|
|
1265
1255
|
return await this.watch(url, messageHash, message, messageHash, subscription);
|
|
1266
1256
|
}
|
|
1257
|
+
async subscribePublicMultiple(url, messageHashes, payload, channel, params = {}) {
|
|
1258
|
+
const requestId = this.requestId();
|
|
1259
|
+
const time = this.seconds();
|
|
1260
|
+
const request = {
|
|
1261
|
+
'id': requestId,
|
|
1262
|
+
'time': time,
|
|
1263
|
+
'channel': channel,
|
|
1264
|
+
'event': 'subscribe',
|
|
1265
|
+
'payload': payload,
|
|
1266
|
+
};
|
|
1267
|
+
const message = this.extend(request, params);
|
|
1268
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes);
|
|
1269
|
+
}
|
|
1267
1270
|
async subscribePrivate(url, messageHash, payload, channel, params, requiresUid = false) {
|
|
1268
1271
|
this.checkRequiredCredentials();
|
|
1269
1272
|
// uid is required for some subscriptions only so it's not a part of required credentials
|
|
@@ -121,6 +121,24 @@ class kucoin extends kucoin$1 {
|
|
|
121
121
|
}
|
|
122
122
|
return await this.watch(url, messageHash, message, subscriptionHash, subscription);
|
|
123
123
|
}
|
|
124
|
+
async subscribeMultiple(url, messageHashes, topic, subscriptionHashes, params = {}, subscription = undefined) {
|
|
125
|
+
const requestId = this.requestId().toString();
|
|
126
|
+
const request = {
|
|
127
|
+
'id': requestId,
|
|
128
|
+
'type': 'subscribe',
|
|
129
|
+
'topic': topic,
|
|
130
|
+
'response': true,
|
|
131
|
+
};
|
|
132
|
+
const message = this.extend(request, params);
|
|
133
|
+
const client = this.client(url);
|
|
134
|
+
for (let i = 0; i < subscriptionHashes.length; i++) {
|
|
135
|
+
const subscriptionHash = subscriptionHashes[i];
|
|
136
|
+
if (!(subscriptionHash in client.subscriptions)) {
|
|
137
|
+
client.subscriptions[requestId] = subscriptionHash;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return await this.watchMultiple(url, messageHashes, message, subscriptionHashes, subscription);
|
|
141
|
+
}
|
|
124
142
|
async watchTicker(symbol, params = {}) {
|
|
125
143
|
/**
|
|
126
144
|
* @method
|
|
@@ -333,17 +351,7 @@ class kucoin extends kucoin$1 {
|
|
|
333
351
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
334
352
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
335
353
|
*/
|
|
336
|
-
await this.
|
|
337
|
-
const url = await this.negotiate(false);
|
|
338
|
-
const market = this.market(symbol);
|
|
339
|
-
symbol = market['symbol'];
|
|
340
|
-
const topic = '/market/match:' + market['id'];
|
|
341
|
-
const messageHash = 'trades:' + symbol;
|
|
342
|
-
const trades = await this.subscribe(url, messageHash, topic, params);
|
|
343
|
-
if (this.newUpdates) {
|
|
344
|
-
limit = trades.getLimit(symbol, limit);
|
|
345
|
-
}
|
|
346
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
354
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
347
355
|
}
|
|
348
356
|
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
349
357
|
/**
|
|
@@ -362,12 +370,18 @@ class kucoin extends kucoin$1 {
|
|
|
362
370
|
}
|
|
363
371
|
await this.loadMarkets();
|
|
364
372
|
symbols = this.marketSymbols(symbols);
|
|
365
|
-
const url = await this.negotiate(false);
|
|
366
|
-
symbols = this.marketSymbols(symbols);
|
|
367
373
|
const marketIds = this.marketIds(symbols);
|
|
374
|
+
const url = await this.negotiate(false);
|
|
375
|
+
const messageHashes = [];
|
|
376
|
+
const subscriptionHashes = [];
|
|
368
377
|
const topic = '/market/match:' + marketIds.join(',');
|
|
369
|
-
|
|
370
|
-
|
|
378
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
379
|
+
const symbol = symbols[i];
|
|
380
|
+
messageHashes.push('trades:' + symbol);
|
|
381
|
+
const marketId = marketIds[i];
|
|
382
|
+
subscriptionHashes.push('/market/match:' + marketId);
|
|
383
|
+
}
|
|
384
|
+
const trades = await this.subscribeMultiple(url, messageHashes, topic, subscriptionHashes, params);
|
|
371
385
|
if (this.newUpdates) {
|
|
372
386
|
const first = this.safeValue(trades, 0);
|
|
373
387
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -407,8 +421,6 @@ class kucoin extends kucoin$1 {
|
|
|
407
421
|
}
|
|
408
422
|
trades.append(trade);
|
|
409
423
|
client.resolve(trades, messageHash);
|
|
410
|
-
// watchMultipleTrades
|
|
411
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, trades);
|
|
412
424
|
}
|
|
413
425
|
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
414
426
|
/**
|
|
@@ -435,24 +447,7 @@ class kucoin extends kucoin$1 {
|
|
|
435
447
|
// If the size=0, update the sequence and remove the price of which the
|
|
436
448
|
// size is 0 out of level 2. Fr other cases, please update the price.
|
|
437
449
|
//
|
|
438
|
-
|
|
439
|
-
if ((limit !== 20) && (limit !== 100)) {
|
|
440
|
-
throw new errors.ExchangeError(this.id + " watchOrderBook 'limit' argument must be undefined, 20 or 100");
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
await this.loadMarkets();
|
|
444
|
-
const url = await this.negotiate(false);
|
|
445
|
-
const market = this.market(symbol);
|
|
446
|
-
symbol = market['symbol'];
|
|
447
|
-
const topic = '/market/level2:' + market['id'];
|
|
448
|
-
const messageHash = 'orderbook:' + symbol;
|
|
449
|
-
const subscription = {
|
|
450
|
-
'method': this.handleOrderBookSubscription,
|
|
451
|
-
'symbol': symbol,
|
|
452
|
-
'limit': limit,
|
|
453
|
-
};
|
|
454
|
-
const orderbook = await this.subscribe(url, messageHash, topic, params, subscription);
|
|
455
|
-
return orderbook.limit();
|
|
450
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
456
451
|
}
|
|
457
452
|
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
458
453
|
/**
|
|
@@ -478,13 +473,20 @@ class kucoin extends kucoin$1 {
|
|
|
478
473
|
const marketIds = this.marketIds(symbols);
|
|
479
474
|
const url = await this.negotiate(false);
|
|
480
475
|
const topic = '/market/level2:' + marketIds.join(',');
|
|
481
|
-
const
|
|
476
|
+
const messageHashes = [];
|
|
477
|
+
const subscriptionHashes = [];
|
|
478
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
479
|
+
const symbol = symbols[i];
|
|
480
|
+
messageHashes.push('orderbook:' + symbol);
|
|
481
|
+
const marketId = marketIds[i];
|
|
482
|
+
subscriptionHashes.push('/market/level2:' + marketId);
|
|
483
|
+
}
|
|
482
484
|
const subscription = {
|
|
483
485
|
'method': this.handleOrderBookSubscription,
|
|
484
486
|
'symbols': symbols,
|
|
485
487
|
'limit': limit,
|
|
486
488
|
};
|
|
487
|
-
const orderbook = await this.
|
|
489
|
+
const orderbook = await this.subscribeMultiple(url, messageHashes, topic, subscriptionHashes, params, subscription);
|
|
488
490
|
return orderbook.limit();
|
|
489
491
|
}
|
|
490
492
|
handleOrderBook(client, message) {
|
|
@@ -542,8 +544,6 @@ class kucoin extends kucoin$1 {
|
|
|
542
544
|
}
|
|
543
545
|
this.handleDelta(storedOrderBook, data);
|
|
544
546
|
client.resolve(storedOrderBook, messageHash);
|
|
545
|
-
// watchMultipleOrderBook
|
|
546
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbook::', symbol, storedOrderBook);
|
|
547
547
|
}
|
|
548
548
|
getCacheIndex(orderbook, cache) {
|
|
549
549
|
const firstDelta = this.safeValue(cache, 0);
|
|
@@ -136,6 +136,26 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
136
136
|
}
|
|
137
137
|
return await this.watch(url, messageHash, message, subscriptionHash, subscription);
|
|
138
138
|
}
|
|
139
|
+
async subscribeMultiple(url, messageHashes, topic, subscriptionHashes, subscription, params = {}) {
|
|
140
|
+
const requestId = this.requestId().toString();
|
|
141
|
+
const request = {
|
|
142
|
+
'id': requestId,
|
|
143
|
+
'type': 'subscribe',
|
|
144
|
+
'topic': topic,
|
|
145
|
+
'response': true,
|
|
146
|
+
};
|
|
147
|
+
const message = this.extend(request, params);
|
|
148
|
+
const subscriptionRequest = {
|
|
149
|
+
'id': requestId,
|
|
150
|
+
};
|
|
151
|
+
if (subscription === undefined) {
|
|
152
|
+
subscription = subscriptionRequest;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
subscription = this.extend(subscriptionRequest, subscription);
|
|
156
|
+
}
|
|
157
|
+
return await this.watchMultiple(url, messageHashes, message, subscriptionHashes, subscription);
|
|
158
|
+
}
|
|
139
159
|
async watchTicker(symbol, params = {}) {
|
|
140
160
|
/**
|
|
141
161
|
* @method
|
|
@@ -370,17 +390,7 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
370
390
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
371
391
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
372
392
|
*/
|
|
373
|
-
await this.
|
|
374
|
-
const url = await this.negotiate(false);
|
|
375
|
-
const market = this.market(symbol);
|
|
376
|
-
symbol = market['symbol'];
|
|
377
|
-
const topic = '/contractMarket/execution:' + market['id'];
|
|
378
|
-
const messageHash = 'trades:' + symbol;
|
|
379
|
-
const trades = await this.subscribe(url, messageHash, topic, undefined, params);
|
|
380
|
-
if (this.newUpdates) {
|
|
381
|
-
limit = trades.getLimit(symbol, limit);
|
|
382
|
-
}
|
|
383
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
393
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
384
394
|
}
|
|
385
395
|
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
386
396
|
/**
|
|
@@ -403,8 +413,15 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
403
413
|
symbols = this.marketSymbols(symbols);
|
|
404
414
|
const marketIds = this.marketIds(symbols);
|
|
405
415
|
const topic = '/contractMarket/execution:' + marketIds.join(',');
|
|
406
|
-
const
|
|
407
|
-
const
|
|
416
|
+
const subscriptionHashes = [];
|
|
417
|
+
const messageHashes = [];
|
|
418
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
419
|
+
const symbol = symbols[i];
|
|
420
|
+
const marketId = marketIds[i];
|
|
421
|
+
messageHashes.push('trades:' + symbol);
|
|
422
|
+
subscriptionHashes.push('/contractMarket/execution:' + marketId);
|
|
423
|
+
}
|
|
424
|
+
const trades = await this.subscribeMultiple(url, messageHashes, topic, subscriptionHashes, params);
|
|
408
425
|
if (this.newUpdates) {
|
|
409
426
|
const first = this.safeValue(trades, 0);
|
|
410
427
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -445,7 +462,6 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
445
462
|
trades.append(trade);
|
|
446
463
|
const messageHash = 'trades:' + symbol;
|
|
447
464
|
client.resolve(trades, messageHash);
|
|
448
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, trades);
|
|
449
465
|
return message;
|
|
450
466
|
}
|
|
451
467
|
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
@@ -465,24 +481,7 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
465
481
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
466
482
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
467
483
|
*/
|
|
468
|
-
|
|
469
|
-
if ((limit !== 20) && (limit !== 100)) {
|
|
470
|
-
throw new errors.ExchangeError(this.id + " watchOrderBook 'limit' argument must be undefined, 20 or 100");
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
await this.loadMarkets();
|
|
474
|
-
const url = await this.negotiate(false);
|
|
475
|
-
const market = this.market(symbol);
|
|
476
|
-
symbol = market['symbol'];
|
|
477
|
-
const topic = '/contractMarket/level2:' + market['id'];
|
|
478
|
-
const messageHash = 'orderbook:' + symbol;
|
|
479
|
-
const subscription = {
|
|
480
|
-
'method': this.handleOrderBookSubscription,
|
|
481
|
-
'symbol': symbol,
|
|
482
|
-
'limit': limit,
|
|
483
|
-
};
|
|
484
|
-
const orderbook = await this.subscribe(url, messageHash, topic, subscription, params);
|
|
485
|
-
return orderbook.limit();
|
|
484
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
486
485
|
}
|
|
487
486
|
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
488
487
|
/**
|
|
@@ -508,13 +507,20 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
508
507
|
const marketIds = this.marketIds(symbols);
|
|
509
508
|
const url = await this.negotiate(false);
|
|
510
509
|
const topic = '/contractMarket/level2:' + marketIds.join(',');
|
|
511
|
-
const messageHash = 'multipleOrderbook::' + symbols.join(',');
|
|
512
510
|
const subscription = {
|
|
513
511
|
'method': this.handleOrderBookSubscription,
|
|
514
512
|
'symbols': symbols,
|
|
515
513
|
'limit': limit,
|
|
516
514
|
};
|
|
517
|
-
const
|
|
515
|
+
const subscriptionHashes = [];
|
|
516
|
+
const messageHashes = [];
|
|
517
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
518
|
+
const symbol = symbols[i];
|
|
519
|
+
const marketId = marketIds[i];
|
|
520
|
+
messageHashes.push('orderbook:' + symbol);
|
|
521
|
+
subscriptionHashes.push('/contractMarket/level2:' + marketId);
|
|
522
|
+
}
|
|
523
|
+
const orderbook = await this.subscribeMultiple(url, messageHashes, topic, subscriptionHashes, subscription, params);
|
|
518
524
|
return orderbook.limit();
|
|
519
525
|
}
|
|
520
526
|
handleDelta(orderbook, delta) {
|
|
@@ -595,7 +601,6 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
595
601
|
}
|
|
596
602
|
this.handleDelta(storedOrderBook, data);
|
|
597
603
|
client.resolve(storedOrderBook, messageHash);
|
|
598
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbook::', symbol, storedOrderBook);
|
|
599
604
|
}
|
|
600
605
|
getCacheIndex(orderbook, cache) {
|
|
601
606
|
const firstDelta = this.safeValue(cache, 0);
|
|
@@ -645,7 +650,6 @@ class kucoinfutures extends kucoinfutures$1 {
|
|
|
645
650
|
if (method !== undefined) {
|
|
646
651
|
method.call(this, client, message, subscription);
|
|
647
652
|
}
|
|
648
|
-
return message;
|
|
649
653
|
}
|
|
650
654
|
handleSystemStatus(client, message) {
|
|
651
655
|
//
|
package/dist/cjs/src/pro/okx.js
CHANGED
|
@@ -165,13 +165,7 @@ class okx extends okx$1 {
|
|
|
165
165
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
166
166
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
167
167
|
*/
|
|
168
|
-
await this.
|
|
169
|
-
symbol = this.symbol(symbol);
|
|
170
|
-
const trades = await this.subscribe('public', 'trades', 'trades', symbol, params);
|
|
171
|
-
if (this.newUpdates) {
|
|
172
|
-
limit = trades.getLimit(symbol, limit);
|
|
173
|
-
}
|
|
174
|
-
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
168
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
175
169
|
}
|
|
176
170
|
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
177
171
|
/**
|
|
@@ -192,8 +186,11 @@ class okx extends okx$1 {
|
|
|
192
186
|
symbols = this.marketSymbols(symbols);
|
|
193
187
|
const channel = 'trades';
|
|
194
188
|
const topics = [];
|
|
189
|
+
const messageHashes = [];
|
|
195
190
|
for (let i = 0; i < symbols.length; i++) {
|
|
196
|
-
const
|
|
191
|
+
const symbol = symbols[i];
|
|
192
|
+
messageHashes.push(channel + ':' + symbol);
|
|
193
|
+
const marketId = this.marketId(symbol);
|
|
197
194
|
const topic = {
|
|
198
195
|
'channel': channel,
|
|
199
196
|
'instId': marketId,
|
|
@@ -204,9 +201,8 @@ class okx extends okx$1 {
|
|
|
204
201
|
'op': 'subscribe',
|
|
205
202
|
'args': topics,
|
|
206
203
|
};
|
|
207
|
-
const messageHash = 'multipleTrades::' + symbols.join(',');
|
|
208
204
|
const url = this.getUrl(channel, 'public');
|
|
209
|
-
const trades = await this.
|
|
205
|
+
const trades = await this.watchMultiple(url, messageHashes, request, messageHashes);
|
|
210
206
|
if (this.newUpdates) {
|
|
211
207
|
const first = this.safeValue(trades, 0);
|
|
212
208
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -232,13 +228,13 @@ class okx extends okx$1 {
|
|
|
232
228
|
//
|
|
233
229
|
const arg = this.safeValue(message, 'arg', {});
|
|
234
230
|
const channel = this.safeString(arg, 'channel');
|
|
231
|
+
const marketId = this.safeString(arg, 'instId');
|
|
232
|
+
const symbol = this.safeSymbol(marketId);
|
|
235
233
|
const data = this.safeValue(message, 'data', []);
|
|
236
234
|
const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
237
235
|
for (let i = 0; i < data.length; i++) {
|
|
238
236
|
const trade = this.parseTrade(data[i]);
|
|
239
|
-
const
|
|
240
|
-
const marketId = this.safeString(trade['info'], 'instId');
|
|
241
|
-
const messageHash = channel + ':' + marketId;
|
|
237
|
+
const messageHash = channel + ':' + symbol;
|
|
242
238
|
let stored = this.safeValue(this.trades, symbol);
|
|
243
239
|
if (stored === undefined) {
|
|
244
240
|
stored = new Cache.ArrayCache(tradesLimit);
|
|
@@ -246,9 +242,7 @@ class okx extends okx$1 {
|
|
|
246
242
|
}
|
|
247
243
|
stored.append(trade);
|
|
248
244
|
client.resolve(stored, messageHash);
|
|
249
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleTrades::', symbol, stored);
|
|
250
245
|
}
|
|
251
|
-
return message;
|
|
252
246
|
}
|
|
253
247
|
async watchTicker(symbol, params = {}) {
|
|
254
248
|
/**
|
|
@@ -412,7 +406,6 @@ class okx extends okx$1 {
|
|
|
412
406
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
413
407
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
414
408
|
*/
|
|
415
|
-
const options = this.safeValue(this.options, 'watchOrderBook', {});
|
|
416
409
|
//
|
|
417
410
|
// bbo-tbt
|
|
418
411
|
// 1. Newly added channel that sends tick-by-tick Level 1 data
|
|
@@ -436,12 +429,7 @@ class okx extends okx$1 {
|
|
|
436
429
|
// 2. Public depth channel, verification not required
|
|
437
430
|
// 3. Data feeds will be delivered every 100ms (vs. every 200ms now)
|
|
438
431
|
//
|
|
439
|
-
|
|
440
|
-
if ((depth === 'books-l2-tbt') || (depth === 'books50-l2-tbt')) {
|
|
441
|
-
await this.authenticate({ 'access': 'public' });
|
|
442
|
-
}
|
|
443
|
-
const orderbook = await this.subscribe('public', depth, depth, symbol, params);
|
|
444
|
-
return orderbook.limit();
|
|
432
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
445
433
|
}
|
|
446
434
|
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
447
435
|
/**
|
|
@@ -461,8 +449,11 @@ class okx extends okx$1 {
|
|
|
461
449
|
await this.authenticate({ 'access': 'public' });
|
|
462
450
|
}
|
|
463
451
|
const topics = [];
|
|
452
|
+
const messageHashes = [];
|
|
464
453
|
for (let i = 0; i < symbols.length; i++) {
|
|
465
|
-
const
|
|
454
|
+
const symbol = symbols[i];
|
|
455
|
+
messageHashes.push(depth + ':' + symbol);
|
|
456
|
+
const marketId = this.marketId(symbol);
|
|
466
457
|
const topic = {
|
|
467
458
|
'channel': depth,
|
|
468
459
|
'instId': marketId,
|
|
@@ -474,8 +465,7 @@ class okx extends okx$1 {
|
|
|
474
465
|
'args': topics,
|
|
475
466
|
};
|
|
476
467
|
const url = this.getUrl(depth, 'public');
|
|
477
|
-
const
|
|
478
|
-
const orderbook = await this.watch(url, messageHash, request, messageHash);
|
|
468
|
+
const orderbook = await this.watchMultiple(url, messageHashes, request, messageHashes);
|
|
479
469
|
return orderbook.limit();
|
|
480
470
|
}
|
|
481
471
|
handleDelta(bookside, delta) {
|
|
@@ -648,7 +638,7 @@ class okx extends okx$1 {
|
|
|
648
638
|
'books50-l2-tbt': 50,
|
|
649
639
|
};
|
|
650
640
|
const limit = this.safeInteger(depths, channel);
|
|
651
|
-
const messageHash = channel + ':' +
|
|
641
|
+
const messageHash = channel + ':' + symbol;
|
|
652
642
|
if (action === 'snapshot') {
|
|
653
643
|
for (let i = 0; i < data.length; i++) {
|
|
654
644
|
const update = data[i];
|
|
@@ -657,7 +647,6 @@ class okx extends okx$1 {
|
|
|
657
647
|
orderbook['symbol'] = symbol;
|
|
658
648
|
this.handleOrderBookMessage(client, update, orderbook, messageHash);
|
|
659
649
|
client.resolve(orderbook, messageHash);
|
|
660
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbooks::', symbol, orderbook);
|
|
661
650
|
}
|
|
662
651
|
}
|
|
663
652
|
else if (action === 'update') {
|
|
@@ -667,7 +656,6 @@ class okx extends okx$1 {
|
|
|
667
656
|
const update = data[i];
|
|
668
657
|
this.handleOrderBookMessage(client, update, orderbook, messageHash);
|
|
669
658
|
client.resolve(orderbook, messageHash);
|
|
670
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbooks::', symbol, orderbook);
|
|
671
659
|
}
|
|
672
660
|
}
|
|
673
661
|
}
|
|
@@ -683,7 +671,6 @@ class okx extends okx$1 {
|
|
|
683
671
|
const snapshot = this.parseOrderBook(update, symbol, timestamp, 'bids', 'asks', 0, 1);
|
|
684
672
|
orderbook.reset(snapshot);
|
|
685
673
|
client.resolve(orderbook, messageHash);
|
|
686
|
-
this.resolvePromiseIfMessagehashMatches(client, 'multipleOrderbooks::', symbol, orderbook);
|
|
687
674
|
}
|
|
688
675
|
}
|
|
689
676
|
return message;
|