ccxt 4.5.39 → 4.5.41
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 +6 -5
- package/dist/ccxt.browser.min.js +18 -18
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/abstract/lighter.js +11 -0
- package/dist/cjs/src/ascendex.js +73 -1
- package/dist/cjs/src/base/Exchange.js +211 -22
- package/dist/cjs/src/base/functions/generic.js +1 -0
- package/dist/cjs/src/base/functions/io.js +160 -0
- package/dist/cjs/src/base/functions.js +6 -0
- package/dist/cjs/src/base/ws/Client.js +1 -0
- package/dist/cjs/src/base/ws/WsClient.js +1 -0
- package/dist/cjs/src/binance.js +143 -0
- package/dist/cjs/src/bingx.js +150 -123
- package/dist/cjs/src/bitmart.js +20 -6
- package/dist/cjs/src/bitmex.js +436 -0
- package/dist/cjs/src/blofin.js +86 -1
- package/dist/cjs/src/bybit.js +135 -0
- package/dist/cjs/src/coinspot.js +7 -2
- package/dist/cjs/src/delta.js +367 -0
- package/dist/cjs/src/gate.js +11 -4
- package/dist/cjs/src/gemini.js +76 -1
- package/dist/cjs/src/htx.js +266 -3
- package/dist/cjs/src/hyperliquid.js +20 -7
- package/dist/cjs/src/independentreserve.js +7 -7
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/krakenfutures.js +96 -5
- package/dist/cjs/src/kucoin.js +3 -3
- package/dist/cjs/src/kucoinfutures.js +121 -0
- package/dist/cjs/src/lighter.js +2931 -0
- package/dist/cjs/src/mexc.js +9 -2
- package/dist/cjs/src/phemex.js +359 -0
- package/dist/cjs/src/poloniex.js +5 -0
- package/dist/cjs/src/pro/binance.js +2 -2
- package/dist/cjs/src/pro/bingx.js +248 -35
- package/dist/cjs/src/pro/bitget.js +49 -90
- package/dist/cjs/src/pro/bitmart.js +68 -0
- package/dist/cjs/src/pro/blofin.js +52 -1
- package/dist/cjs/src/pro/coinbaseinternational.js +5 -2
- package/dist/cjs/src/pro/defx.js +1 -1
- package/dist/cjs/src/pro/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/lighter.js +787 -0
- package/dist/cjs/src/pro/mexc.js +73 -1
- package/dist/cjs/src/pro/okx.js +7 -4
- package/dist/cjs/src/pro/paradex.js +138 -1
- package/dist/cjs/src/pro/woo.js +43 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/index.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/interface.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/typed.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -0
- package/dist/cjs/src/whitebit.js +118 -16
- package/dist/cjs/src/woo.js +103 -3
- package/js/ccxt.d.ts +9 -3
- package/js/ccxt.js +6 -2
- package/js/src/abstract/gemini.d.ts +27 -0
- package/js/src/abstract/lighter.d.ts +53 -0
- package/js/src/abstract/lighter.js +5 -0
- package/js/src/ascendex.d.ts +12 -1
- package/js/src/ascendex.js +73 -1
- package/js/src/base/Exchange.d.ts +29 -14
- package/js/src/base/Exchange.js +216 -23
- package/js/src/base/functions/generic.js +1 -0
- package/js/src/base/functions/io.d.ts +32 -0
- package/js/src/base/functions/io.js +131 -0
- package/js/src/base/functions.d.ts +1 -0
- package/js/src/base/functions.js +1 -0
- package/js/src/base/types.d.ts +9 -0
- package/js/src/binance.d.ts +27 -1
- package/js/src/binance.js +143 -0
- package/js/src/bingx.d.ts +113 -108
- package/js/src/bingx.js +150 -123
- package/js/src/bitmart.js +20 -6
- package/js/src/bitmex.d.ts +50 -1
- package/js/src/bitmex.js +436 -0
- package/js/src/blofin.d.ts +12 -1
- package/js/src/blofin.js +86 -1
- package/js/src/bybit.d.ts +12 -1
- package/js/src/bybit.js +135 -0
- package/js/src/coinspot.js +7 -2
- package/js/src/delta.d.ts +12 -1
- package/js/src/delta.js +367 -0
- package/js/src/gate.d.ts +1 -0
- package/js/src/gate.js +11 -4
- package/js/src/gemini.d.ts +11 -0
- package/js/src/gemini.js +76 -1
- package/js/src/htx.d.ts +15 -1
- package/js/src/htx.js +266 -3
- package/js/src/hyperliquid.js +20 -7
- package/js/src/independentreserve.js +7 -7
- package/js/src/kraken.js +1 -1
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/krakenfutures.js +96 -5
- package/js/src/kucoin.d.ts +3 -3
- package/js/src/kucoin.js +3 -3
- package/js/src/kucoinfutures.d.ts +12 -1
- package/js/src/kucoinfutures.js +121 -0
- package/js/src/lighter.d.ts +424 -0
- package/js/src/lighter.js +2924 -0
- package/js/src/mexc.js +9 -2
- package/js/src/phemex.d.ts +16 -1
- package/js/src/phemex.js +359 -0
- package/js/src/poloniex.js +5 -0
- package/js/src/pro/binance.js +2 -2
- package/js/src/pro/bingx.d.ts +50 -34
- package/js/src/pro/bingx.js +249 -36
- package/js/src/pro/bitget.d.ts +6 -6
- package/js/src/pro/bitget.js +49 -90
- package/js/src/pro/bitmart.d.ts +22 -1
- package/js/src/pro/bitmart.js +69 -1
- package/js/src/pro/blofin.d.ts +12 -1
- package/js/src/pro/blofin.js +52 -1
- package/js/src/pro/coinbaseinternational.d.ts +2 -2
- package/js/src/pro/coinbaseinternational.js +6 -3
- package/js/src/pro/defx.js +1 -1
- package/js/src/pro/kucoinfutures.js +1 -1
- package/js/src/pro/lighter.d.ts +161 -0
- package/js/src/pro/lighter.js +780 -0
- package/js/src/pro/mexc.d.ts +22 -1
- package/js/src/pro/mexc.js +73 -1
- package/js/src/pro/okx.d.ts +4 -4
- package/js/src/pro/okx.js +7 -4
- package/js/src/pro/paradex.d.ts +23 -1
- package/js/src/pro/paradex.js +138 -1
- package/js/src/pro/woo.d.ts +12 -1
- package/js/src/pro/woo.js +43 -0
- package/js/src/whitebit.d.ts +2 -1
- package/js/src/whitebit.js +118 -16
- package/js/src/woo.d.ts +12 -1
- package/js/src/woo.js +103 -3
- package/package.json +1 -1
package/js/src/pro/bitget.js
CHANGED
|
@@ -69,12 +69,10 @@ export default class bitget extends bitgetRest {
|
|
|
69
69
|
'1d': '1D',
|
|
70
70
|
'1w': '1W',
|
|
71
71
|
},
|
|
72
|
-
'watchOrderBook': {
|
|
73
|
-
'checksum': true,
|
|
74
|
-
},
|
|
75
72
|
'watchTrades': {
|
|
76
73
|
'ignoreDuplicates': true,
|
|
77
74
|
},
|
|
75
|
+
'uta': false,
|
|
78
76
|
},
|
|
79
77
|
'streaming': {
|
|
80
78
|
'ping': this.ping,
|
|
@@ -101,10 +99,7 @@ export default class bitget extends bitgetRest {
|
|
|
101
99
|
},
|
|
102
100
|
});
|
|
103
101
|
}
|
|
104
|
-
getInstType(market, uta = false, params = {}) {
|
|
105
|
-
if ((uta === undefined) || !uta) {
|
|
106
|
-
[uta, params] = this.handleOptionAndParams(params, 'getInstType', 'uta', false);
|
|
107
|
-
}
|
|
102
|
+
getInstType(methodName, market, uta = false, params = {}) {
|
|
108
103
|
let instType = undefined;
|
|
109
104
|
if (market === undefined) {
|
|
110
105
|
[instType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
@@ -116,7 +111,7 @@ export default class bitget extends bitgetRest {
|
|
|
116
111
|
instType = 'SPOT';
|
|
117
112
|
}
|
|
118
113
|
let instypeAux = undefined;
|
|
119
|
-
[instypeAux, params] = this.handleOptionAndParams(params,
|
|
114
|
+
[instypeAux, params] = this.handleOptionAndParams(params, methodName, 'instType', instType);
|
|
120
115
|
instType = instypeAux;
|
|
121
116
|
if (uta) {
|
|
122
117
|
instType = instType.toLowerCase();
|
|
@@ -143,7 +138,7 @@ export default class bitget extends bitgetRest {
|
|
|
143
138
|
let instType = undefined;
|
|
144
139
|
let uta = undefined;
|
|
145
140
|
[uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', false);
|
|
146
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
141
|
+
[instType, params] = this.getInstType('watchTicker', market, uta, params);
|
|
147
142
|
const args = {
|
|
148
143
|
'instType': instType,
|
|
149
144
|
};
|
|
@@ -151,7 +146,7 @@ export default class bitget extends bitgetRest {
|
|
|
151
146
|
const symbolOrInstId = uta ? 'symbol' : 'instId';
|
|
152
147
|
args[topicOrChannel] = 'ticker';
|
|
153
148
|
args[symbolOrInstId] = market['id'];
|
|
154
|
-
return await this.watchPublic(messageHash, args, params);
|
|
149
|
+
return await this.watchPublic(uta, messageHash, args, params);
|
|
155
150
|
}
|
|
156
151
|
/**
|
|
157
152
|
* @method
|
|
@@ -165,7 +160,7 @@ export default class bitget extends bitgetRest {
|
|
|
165
160
|
*/
|
|
166
161
|
async unWatchTicker(symbol, params = {}) {
|
|
167
162
|
await this.loadMarkets();
|
|
168
|
-
return await this.unWatchChannel(symbol, 'ticker', 'ticker', params);
|
|
163
|
+
return await this.unWatchChannel(symbol, 'ticker', 'ticker', 'watchTicker', params);
|
|
169
164
|
}
|
|
170
165
|
/**
|
|
171
166
|
* @method
|
|
@@ -186,7 +181,7 @@ export default class bitget extends bitgetRest {
|
|
|
186
181
|
let instType = undefined;
|
|
187
182
|
let uta = undefined;
|
|
188
183
|
[uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', false);
|
|
189
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
184
|
+
[instType, params] = this.getInstType('watchTickers', market, uta, params);
|
|
190
185
|
const topics = [];
|
|
191
186
|
const messageHashes = [];
|
|
192
187
|
for (let i = 0; i < symbols.length; i++) {
|
|
@@ -202,7 +197,7 @@ export default class bitget extends bitgetRest {
|
|
|
202
197
|
topics.push(args);
|
|
203
198
|
messageHashes.push('ticker:' + symbol);
|
|
204
199
|
}
|
|
205
|
-
const tickers = await this.watchPublicMultiple(messageHashes, topics, params);
|
|
200
|
+
const tickers = await this.watchPublicMultiple(uta, messageHashes, topics, params);
|
|
206
201
|
if (this.newUpdates) {
|
|
207
202
|
const result = {};
|
|
208
203
|
result[tickers['symbol']] = tickers;
|
|
@@ -378,8 +373,8 @@ export default class bitget extends bitgetRest {
|
|
|
378
373
|
const marketId = this.safeString(ticker, 'instId', utaMarketId);
|
|
379
374
|
market = this.safeMarket(marketId, market, undefined, marketType);
|
|
380
375
|
const close = this.safeString2(ticker, 'lastPr', 'lastPrice');
|
|
381
|
-
const
|
|
382
|
-
const
|
|
376
|
+
const changeCoefficient = this.safeString2(ticker, 'price24hPcnt', 'change24h');
|
|
377
|
+
const changePercentage = Precise.stringMul(changeCoefficient, '100');
|
|
383
378
|
return this.safeTicker({
|
|
384
379
|
'symbol': market['symbol'],
|
|
385
380
|
'timestamp': timestamp,
|
|
@@ -396,7 +391,7 @@ export default class bitget extends bitgetRest {
|
|
|
396
391
|
'last': close,
|
|
397
392
|
'previousClose': undefined,
|
|
398
393
|
'change': undefined,
|
|
399
|
-
'percentage':
|
|
394
|
+
'percentage': changePercentage,
|
|
400
395
|
'average': undefined,
|
|
401
396
|
'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
|
|
402
397
|
'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
|
|
@@ -421,8 +416,8 @@ export default class bitget extends bitgetRest {
|
|
|
421
416
|
const market = this.market(symbols[0]);
|
|
422
417
|
let instType = undefined;
|
|
423
418
|
let uta = undefined;
|
|
424
|
-
[uta, params] = this.handleOptionAndParams(params, '
|
|
425
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
419
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', false);
|
|
420
|
+
[instType, params] = this.getInstType('watchBidsAsks', market, uta, params);
|
|
426
421
|
const topics = [];
|
|
427
422
|
const messageHashes = [];
|
|
428
423
|
for (let i = 0; i < symbols.length; i++) {
|
|
@@ -438,7 +433,7 @@ export default class bitget extends bitgetRest {
|
|
|
438
433
|
topics.push(args);
|
|
439
434
|
messageHashes.push('bidask:' + symbol);
|
|
440
435
|
}
|
|
441
|
-
const tickers = await this.watchPublicMultiple(messageHashes, topics, params);
|
|
436
|
+
const tickers = await this.watchPublicMultiple(uta, messageHashes, topics, params);
|
|
442
437
|
if (this.newUpdates) {
|
|
443
438
|
const result = {};
|
|
444
439
|
result[tickers['symbol']] = tickers;
|
|
@@ -500,7 +495,7 @@ export default class bitget extends bitgetRest {
|
|
|
500
495
|
let instType = undefined;
|
|
501
496
|
let uta = undefined;
|
|
502
497
|
[uta, params] = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', false);
|
|
503
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
498
|
+
[instType, params] = this.getInstType('watchOHLCV', market, uta, params);
|
|
504
499
|
const args = {
|
|
505
500
|
'instType': instType,
|
|
506
501
|
};
|
|
@@ -516,7 +511,7 @@ export default class bitget extends bitgetRest {
|
|
|
516
511
|
args['instId'] = market['id'];
|
|
517
512
|
messageHash = 'candles:' + timeframe + ':' + symbol;
|
|
518
513
|
}
|
|
519
|
-
const ohlcv = await this.watchPublic(messageHash, args, params);
|
|
514
|
+
const ohlcv = await this.watchPublic(uta, messageHash, args, params);
|
|
520
515
|
if (this.newUpdates) {
|
|
521
516
|
limit = ohlcv.getLimit(symbol, limit);
|
|
522
517
|
}
|
|
@@ -546,9 +541,9 @@ export default class bitget extends bitgetRest {
|
|
|
546
541
|
}
|
|
547
542
|
let instType = undefined;
|
|
548
543
|
let messageHash = undefined;
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
544
|
+
const values = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', false);
|
|
545
|
+
const uta = values[0];
|
|
546
|
+
[instType, params] = this.getInstType('watchOHLCV', market, uta, params);
|
|
552
547
|
const args = {
|
|
553
548
|
'instType': instType,
|
|
554
549
|
};
|
|
@@ -567,7 +562,7 @@ export default class bitget extends bitgetRest {
|
|
|
567
562
|
args['instId'] = market['id'];
|
|
568
563
|
messageHash = 'candles:' + interval;
|
|
569
564
|
}
|
|
570
|
-
return await this.unWatchChannel(symbol, channel, messageHash, params);
|
|
565
|
+
return await this.unWatchChannel(symbol, channel, messageHash, 'watchOHLCV', params);
|
|
571
566
|
}
|
|
572
567
|
handleOHLCV(client, message) {
|
|
573
568
|
//
|
|
@@ -738,16 +733,16 @@ export default class bitget extends bitgetRest {
|
|
|
738
733
|
params = this.omit(params, 'limit');
|
|
739
734
|
channel += limit.toString();
|
|
740
735
|
}
|
|
741
|
-
return await this.unWatchChannel(symbol, channel, 'orderbook', params);
|
|
736
|
+
return await this.unWatchChannel(symbol, channel, 'orderbook', 'watchOrderBook', params);
|
|
742
737
|
}
|
|
743
|
-
async unWatchChannel(symbol, channel, messageHashTopic, params = {}) {
|
|
738
|
+
async unWatchChannel(symbol, channel, messageHashTopic, methodName, params = {}) {
|
|
744
739
|
await this.loadMarkets();
|
|
745
740
|
const market = this.market(symbol);
|
|
746
741
|
const messageHash = 'unsubscribe:' + messageHashTopic + ':' + market['symbol'];
|
|
747
742
|
let instType = undefined;
|
|
748
743
|
let uta = undefined;
|
|
749
|
-
[uta, params] = this.handleOptionAndParams(params,
|
|
750
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
744
|
+
[uta, params] = this.handleOptionAndParams(params, methodName, 'uta', false);
|
|
745
|
+
[instType, params] = this.getInstType(methodName, market, uta, params);
|
|
751
746
|
const args = {
|
|
752
747
|
'instType': instType,
|
|
753
748
|
};
|
|
@@ -762,7 +757,7 @@ export default class bitget extends bitgetRest {
|
|
|
762
757
|
args['channel'] = channel;
|
|
763
758
|
args['instId'] = market['id'];
|
|
764
759
|
}
|
|
765
|
-
return await this.unWatchPublic(messageHash, args, params);
|
|
760
|
+
return await this.unWatchPublic(uta, messageHash, args, params);
|
|
766
761
|
}
|
|
767
762
|
/**
|
|
768
763
|
* @method
|
|
@@ -794,7 +789,7 @@ export default class bitget extends bitgetRest {
|
|
|
794
789
|
const symbol = symbols[i];
|
|
795
790
|
const market = this.market(symbol);
|
|
796
791
|
let instType = undefined;
|
|
797
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
792
|
+
[instType, params] = this.getInstType('watchOrderBookForSymbols', market, uta, params);
|
|
798
793
|
const args = {
|
|
799
794
|
'instType': instType,
|
|
800
795
|
};
|
|
@@ -808,7 +803,7 @@ export default class bitget extends bitgetRest {
|
|
|
808
803
|
if (uta) {
|
|
809
804
|
params['uta'] = true;
|
|
810
805
|
}
|
|
811
|
-
const orderbook = await this.watchPublicMultiple(messageHashes, topics, params);
|
|
806
|
+
const orderbook = await this.watchPublicMultiple(uta, messageHashes, topics, params);
|
|
812
807
|
if (incrementalFeed) {
|
|
813
808
|
return orderbook.limit();
|
|
814
809
|
}
|
|
@@ -1005,7 +1000,7 @@ export default class bitget extends bitgetRest {
|
|
|
1005
1000
|
const symbol = symbols[i];
|
|
1006
1001
|
const market = this.market(symbol);
|
|
1007
1002
|
let instType = undefined;
|
|
1008
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
1003
|
+
[instType, params] = this.getInstType('watchTradesForSymbols', market, uta, params);
|
|
1009
1004
|
const args = {
|
|
1010
1005
|
'instType': instType,
|
|
1011
1006
|
};
|
|
@@ -1019,7 +1014,7 @@ export default class bitget extends bitgetRest {
|
|
|
1019
1014
|
if (uta) {
|
|
1020
1015
|
params = this.extend(params, { 'uta': true });
|
|
1021
1016
|
}
|
|
1022
|
-
const trades = await this.watchPublicMultiple(messageHashes, topics, params);
|
|
1017
|
+
const trades = await this.watchPublicMultiple(uta, messageHashes, topics, params);
|
|
1023
1018
|
if (this.newUpdates) {
|
|
1024
1019
|
const first = this.safeValue(trades, 0);
|
|
1025
1020
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -1046,10 +1041,10 @@ export default class bitget extends bitgetRest {
|
|
|
1046
1041
|
* @returns {any} status of the unwatch request
|
|
1047
1042
|
*/
|
|
1048
1043
|
async unWatchTrades(symbol, params = {}) {
|
|
1049
|
-
|
|
1050
|
-
|
|
1044
|
+
const values = this.handleOptionAndParams(params, 'watchTrades', 'uta', false);
|
|
1045
|
+
const uta = values[0];
|
|
1051
1046
|
const channelTopic = uta ? 'publicTrade' : 'trade';
|
|
1052
|
-
return await this.unWatchChannel(symbol, channelTopic, 'trade', params);
|
|
1047
|
+
return await this.unWatchChannel(symbol, channelTopic, 'trade', 'watchTrades', params);
|
|
1053
1048
|
}
|
|
1054
1049
|
handleTrades(client, message) {
|
|
1055
1050
|
//
|
|
@@ -1271,7 +1266,7 @@ export default class bitget extends bitgetRest {
|
|
|
1271
1266
|
symbols = this.marketSymbols(symbols);
|
|
1272
1267
|
if (!this.isEmpty(symbols)) {
|
|
1273
1268
|
market = this.getMarketFromSymbols(symbols);
|
|
1274
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
1269
|
+
[instType, params] = this.getInstType('watchPositions', market, uta, params);
|
|
1275
1270
|
}
|
|
1276
1271
|
if (uta) {
|
|
1277
1272
|
instType = 'UTA';
|
|
@@ -1289,7 +1284,7 @@ export default class bitget extends bitgetRest {
|
|
|
1289
1284
|
else {
|
|
1290
1285
|
params = this.extend(params, { 'uta': true });
|
|
1291
1286
|
}
|
|
1292
|
-
const newPositions = await this.watchPrivate(messageHash, subscriptionHash, args, params);
|
|
1287
|
+
const newPositions = await this.watchPrivate(uta, messageHash, subscriptionHash, args, params);
|
|
1293
1288
|
if (this.newUpdates) {
|
|
1294
1289
|
return newPositions;
|
|
1295
1290
|
}
|
|
@@ -1564,7 +1559,7 @@ export default class bitget extends bitgetRest {
|
|
|
1564
1559
|
instType = 'SPOT';
|
|
1565
1560
|
}
|
|
1566
1561
|
else {
|
|
1567
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
1562
|
+
[instType, params] = this.getInstType('watchOrders', market, uta, params);
|
|
1568
1563
|
}
|
|
1569
1564
|
if (type === 'spot' && (symbol !== undefined)) {
|
|
1570
1565
|
subscriptionHash = subscriptionHash + ':' + symbol;
|
|
@@ -1602,7 +1597,7 @@ export default class bitget extends bitgetRest {
|
|
|
1602
1597
|
else {
|
|
1603
1598
|
params = this.extend(params, { 'uta': true });
|
|
1604
1599
|
}
|
|
1605
|
-
const orders = await this.watchPrivate(messageHash, subscriptionHash, args, params);
|
|
1600
|
+
const orders = await this.watchPrivate(uta, messageHash, subscriptionHash, args, params);
|
|
1606
1601
|
if (this.newUpdates) {
|
|
1607
1602
|
limit = orders.getLimit(symbol, limit);
|
|
1608
1603
|
}
|
|
@@ -2016,6 +2011,7 @@ export default class bitget extends bitgetRest {
|
|
|
2016
2011
|
}
|
|
2017
2012
|
parseWsOrderStatus(status) {
|
|
2018
2013
|
const statuses = {
|
|
2014
|
+
'new': 'open',
|
|
2019
2015
|
'live': 'open',
|
|
2020
2016
|
'partially_filled': 'open',
|
|
2021
2017
|
'filled': 'closed',
|
|
@@ -2055,7 +2051,7 @@ export default class bitget extends bitgetRest {
|
|
|
2055
2051
|
instType = 'SPOT';
|
|
2056
2052
|
}
|
|
2057
2053
|
else {
|
|
2058
|
-
[instType, params] = this.getInstType(market, uta, params);
|
|
2054
|
+
[instType, params] = this.getInstType('watchMyTrades', market, uta, params);
|
|
2059
2055
|
}
|
|
2060
2056
|
if (uta) {
|
|
2061
2057
|
instType = 'UTA';
|
|
@@ -2072,7 +2068,7 @@ export default class bitget extends bitgetRest {
|
|
|
2072
2068
|
else {
|
|
2073
2069
|
params = this.extend(params, { 'uta': true });
|
|
2074
2070
|
}
|
|
2075
|
-
const trades = await this.watchPrivate(messageHash, subscriptionHash, args, params);
|
|
2071
|
+
const trades = await this.watchPrivate(uta, messageHash, subscriptionHash, args, params);
|
|
2076
2072
|
if (this.newUpdates) {
|
|
2077
2073
|
limit = trades.getLimit(symbol, limit);
|
|
2078
2074
|
}
|
|
@@ -2264,7 +2260,7 @@ export default class bitget extends bitgetRest {
|
|
|
2264
2260
|
params = this.extend(params, { 'uta': true });
|
|
2265
2261
|
}
|
|
2266
2262
|
const messageHash = 'balance:' + instType.toLowerCase();
|
|
2267
|
-
return await this.watchPrivate(messageHash, messageHash, args, params);
|
|
2263
|
+
return await this.watchPrivate(uta, messageHash, messageHash, args, params);
|
|
2268
2264
|
}
|
|
2269
2265
|
handleBalance(client, message) {
|
|
2270
2266
|
//
|
|
@@ -2398,16 +2394,8 @@ export default class bitget extends bitgetRest {
|
|
|
2398
2394
|
const messageHash = 'balance:' + instType;
|
|
2399
2395
|
client.resolve(this.balance, messageHash);
|
|
2400
2396
|
}
|
|
2401
|
-
async watchPublic(messageHash, args, params = {}) {
|
|
2402
|
-
let
|
|
2403
|
-
let url = undefined;
|
|
2404
|
-
[uta, params] = this.handleOptionAndParams(params, 'watchPublic', 'uta', false);
|
|
2405
|
-
if (uta) {
|
|
2406
|
-
url = this.urls['api']['ws']['utaPublic'];
|
|
2407
|
-
}
|
|
2408
|
-
else {
|
|
2409
|
-
url = this.urls['api']['ws']['public'];
|
|
2410
|
-
}
|
|
2397
|
+
async watchPublic(uta, messageHash, args, params = {}) {
|
|
2398
|
+
let url = uta ? this.urls['api']['ws']['utaPublic'] : this.urls['api']['ws']['public'];
|
|
2411
2399
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
2412
2400
|
if (sandboxMode) {
|
|
2413
2401
|
const instType = this.safeString(args, 'instType');
|
|
@@ -2427,16 +2415,8 @@ export default class bitget extends bitgetRest {
|
|
|
2427
2415
|
const message = this.extend(request, params);
|
|
2428
2416
|
return await this.watch(url, messageHash, message, messageHash);
|
|
2429
2417
|
}
|
|
2430
|
-
async unWatchPublic(messageHash, args, params = {}) {
|
|
2431
|
-
let
|
|
2432
|
-
let url = undefined;
|
|
2433
|
-
[uta, params] = this.handleOptionAndParams(params, 'unWatchPublic', 'uta', false);
|
|
2434
|
-
if (uta) {
|
|
2435
|
-
url = this.urls['api']['ws']['utaPublic'];
|
|
2436
|
-
}
|
|
2437
|
-
else {
|
|
2438
|
-
url = this.urls['api']['ws']['public'];
|
|
2439
|
-
}
|
|
2418
|
+
async unWatchPublic(uta, messageHash, args, params = {}) {
|
|
2419
|
+
let url = uta ? this.urls['api']['ws']['utaPublic'] : this.urls['api']['ws']['public'];
|
|
2440
2420
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
2441
2421
|
if (sandboxMode) {
|
|
2442
2422
|
const instType = this.safeString(args, 'instType');
|
|
@@ -2456,27 +2436,14 @@ export default class bitget extends bitgetRest {
|
|
|
2456
2436
|
const message = this.extend(request, params);
|
|
2457
2437
|
return await this.watch(url, messageHash, message, messageHash);
|
|
2458
2438
|
}
|
|
2459
|
-
async watchPublicMultiple(messageHashes, argsArray, params = {}) {
|
|
2460
|
-
let
|
|
2461
|
-
let url = undefined;
|
|
2462
|
-
[uta, params] = this.handleOptionAndParams(params, 'watchPublicMultiple', 'uta', false);
|
|
2463
|
-
if (uta) {
|
|
2464
|
-
url = this.urls['api']['ws']['utaPublic'];
|
|
2465
|
-
}
|
|
2466
|
-
else {
|
|
2467
|
-
url = this.urls['api']['ws']['public'];
|
|
2468
|
-
}
|
|
2439
|
+
async watchPublicMultiple(uta, messageHashes, argsArray, params = {}) {
|
|
2440
|
+
let url = uta ? this.urls['api']['ws']['utaPublic'] : this.urls['api']['ws']['public'];
|
|
2469
2441
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
2470
2442
|
if (sandboxMode) {
|
|
2471
2443
|
const argsArrayFirst = this.safeDict(argsArray, 0, {});
|
|
2472
2444
|
const instType = this.safeString(argsArrayFirst, 'instType');
|
|
2473
2445
|
if ((instType !== 'SCOIN-FUTURES') && (instType !== 'SUSDT-FUTURES') && (instType !== 'SUSDC-FUTURES')) {
|
|
2474
|
-
|
|
2475
|
-
url = this.urls['api']['demo']['utaPublic'];
|
|
2476
|
-
}
|
|
2477
|
-
else {
|
|
2478
|
-
url = this.urls['api']['demo']['public'];
|
|
2479
|
-
}
|
|
2446
|
+
url = uta ? this.urls['api']['demo']['utaPublic'] : this.urls['api']['demo']['public'];
|
|
2480
2447
|
}
|
|
2481
2448
|
}
|
|
2482
2449
|
const request = {
|
|
@@ -2514,16 +2481,8 @@ export default class bitget extends bitgetRest {
|
|
|
2514
2481
|
}
|
|
2515
2482
|
return await future;
|
|
2516
2483
|
}
|
|
2517
|
-
async watchPrivate(messageHash, subscriptionHash, args, params = {}) {
|
|
2518
|
-
let
|
|
2519
|
-
let url = undefined;
|
|
2520
|
-
[uta, params] = this.handleOptionAndParams(params, 'watchPrivate', 'uta', false);
|
|
2521
|
-
if (uta) {
|
|
2522
|
-
url = this.urls['api']['ws']['utaPrivate'];
|
|
2523
|
-
}
|
|
2524
|
-
else {
|
|
2525
|
-
url = this.urls['api']['ws']['private'];
|
|
2526
|
-
}
|
|
2484
|
+
async watchPrivate(uta, messageHash, subscriptionHash, args, params = {}) {
|
|
2485
|
+
let url = uta ? this.urls['api']['ws']['utaPrivate'] : this.urls['api']['ws']['private'];
|
|
2527
2486
|
const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
|
|
2528
2487
|
if (sandboxMode) {
|
|
2529
2488
|
const instType = this.safeString(args, 'instType');
|
package/js/src/pro/bitmart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import bitmartRest from '../bitmart.js';
|
|
2
|
-
import type { Int, Market, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances, Dict, Bool } from '../base/types.js';
|
|
2
|
+
import type { Int, Market, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances, Dict, Bool, FundingRate, FundingRates } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class bitmart extends bitmartRest {
|
|
5
5
|
describe(): any;
|
|
@@ -261,6 +261,27 @@ export default class bitmart extends bitmartRest {
|
|
|
261
261
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
262
262
|
*/
|
|
263
263
|
unWatchOrderBookForSymbols(symbols: string[], params?: {}): Promise<any>;
|
|
264
|
+
/**
|
|
265
|
+
* @method
|
|
266
|
+
* @name bitmart#watchFundingRate
|
|
267
|
+
* @description watch the current funding rate
|
|
268
|
+
* @see https://developer-pro.bitmart.com/en/futuresv2/#public-funding-rate-channel
|
|
269
|
+
* @param {string} symbol unified market symbol
|
|
270
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
271
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/?id=funding-rate-structure}
|
|
272
|
+
*/
|
|
273
|
+
watchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
274
|
+
/**
|
|
275
|
+
* @method
|
|
276
|
+
* @name bitmart#watchFundingRates
|
|
277
|
+
* @description watch the funding rate for multiple markets
|
|
278
|
+
* @see https://developer-pro.bitmart.com/en/futuresv2/#public-funding-rate-channel
|
|
279
|
+
* @param {string[]} symbols a list of unified market symbols
|
|
280
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
281
|
+
* @returns {object} a dictionary of [funding rate structures]{@link https://docs.ccxt.com/?id=funding-rate-structure}, indexed by market symbols
|
|
282
|
+
*/
|
|
283
|
+
watchFundingRates(symbols?: Strings, params?: {}): Promise<FundingRates>;
|
|
284
|
+
handleFundingRate(client: Client, message: any): void;
|
|
264
285
|
authenticate(type: any, params?: {}): Promise<any>;
|
|
265
286
|
handleSubscriptionStatus(client: Client, message: any): any;
|
|
266
287
|
handleAuthenticate(client: Client, message: any): void;
|
package/js/src/pro/bitmart.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ---------------------------------------------------------------------------
|
|
2
2
|
import bitmartRest from '../bitmart.js';
|
|
3
|
-
import { AuthenticationError, ExchangeError, NotSupported } from '../base/errors.js';
|
|
3
|
+
import { AuthenticationError, ExchangeError, NotSupported, ArgumentsRequired } from '../base/errors.js';
|
|
4
4
|
import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide } from '../base/ws/Cache.js';
|
|
5
5
|
import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
|
|
6
6
|
import { Asks, Bids } from '../base/ws/OrderBookSide.js';
|
|
@@ -18,6 +18,8 @@ export default class bitmart extends bitmartRest {
|
|
|
18
18
|
'cancelAllOrdersWs': false,
|
|
19
19
|
'ws': true,
|
|
20
20
|
'watchBalance': true,
|
|
21
|
+
'watchFundingRate': true,
|
|
22
|
+
'watchFundingRates': true,
|
|
21
23
|
'watchTicker': true,
|
|
22
24
|
'watchTickers': true,
|
|
23
25
|
'watchBidsAsks': true,
|
|
@@ -1737,6 +1739,69 @@ export default class bitmart extends bitmartRest {
|
|
|
1737
1739
|
params = this.extend(params, { 'unsubscribe': true });
|
|
1738
1740
|
return await this.subscribeMultiple(channel, type, symbols, params);
|
|
1739
1741
|
}
|
|
1742
|
+
/**
|
|
1743
|
+
* @method
|
|
1744
|
+
* @name bitmart#watchFundingRate
|
|
1745
|
+
* @description watch the current funding rate
|
|
1746
|
+
* @see https://developer-pro.bitmart.com/en/futuresv2/#public-funding-rate-channel
|
|
1747
|
+
* @param {string} symbol unified market symbol
|
|
1748
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1749
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/?id=funding-rate-structure}
|
|
1750
|
+
*/
|
|
1751
|
+
async watchFundingRate(symbol, params = {}) {
|
|
1752
|
+
await this.loadMarkets();
|
|
1753
|
+
symbol = this.symbol(symbol);
|
|
1754
|
+
const fundingRate = await this.watchFundingRates([symbol], params);
|
|
1755
|
+
return fundingRate[symbol];
|
|
1756
|
+
}
|
|
1757
|
+
/**
|
|
1758
|
+
* @method
|
|
1759
|
+
* @name bitmart#watchFundingRates
|
|
1760
|
+
* @description watch the funding rate for multiple markets
|
|
1761
|
+
* @see https://developer-pro.bitmart.com/en/futuresv2/#public-funding-rate-channel
|
|
1762
|
+
* @param {string[]} symbols a list of unified market symbols
|
|
1763
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1764
|
+
* @returns {object} a dictionary of [funding rate structures]{@link https://docs.ccxt.com/?id=funding-rate-structure}, indexed by market symbols
|
|
1765
|
+
*/
|
|
1766
|
+
async watchFundingRates(symbols = undefined, params = {}) {
|
|
1767
|
+
if (symbols === undefined) {
|
|
1768
|
+
throw new ArgumentsRequired(this.id + ' watchFundingRates() requires an array of symbols');
|
|
1769
|
+
}
|
|
1770
|
+
await this.loadMarkets();
|
|
1771
|
+
const market = this.getMarketFromSymbols(symbols);
|
|
1772
|
+
let marketType = undefined;
|
|
1773
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchFundingRates', market, params);
|
|
1774
|
+
const fundingRate = await this.subscribeMultiple('fundingRate', marketType, symbols, params);
|
|
1775
|
+
if (this.newUpdates) {
|
|
1776
|
+
const fundingRates = {};
|
|
1777
|
+
fundingRates[fundingRate['symbol']] = fundingRate;
|
|
1778
|
+
return fundingRates;
|
|
1779
|
+
}
|
|
1780
|
+
return this.filterByArray(this.fundingRates, 'symbol', symbols);
|
|
1781
|
+
}
|
|
1782
|
+
handleFundingRate(client, message) {
|
|
1783
|
+
//
|
|
1784
|
+
// {
|
|
1785
|
+
// "data": {
|
|
1786
|
+
// "symbol": "BTCUSDT",
|
|
1787
|
+
// "fundingRate": "0.0000561",
|
|
1788
|
+
// "fundingTime": 1770978448000,
|
|
1789
|
+
// "nextFundingRate": "-0.0000195",
|
|
1790
|
+
// "nextFundingTime": 1770998400000,
|
|
1791
|
+
// "funding_upper_limit": "0.0375",
|
|
1792
|
+
// "funding_lower_limit": "-0.0375",
|
|
1793
|
+
// "ts": 1770978448970
|
|
1794
|
+
// },
|
|
1795
|
+
// "group": "futures/fundingRate:BTCUSDT"
|
|
1796
|
+
// }
|
|
1797
|
+
//
|
|
1798
|
+
const data = this.safeDict(message, 'data', {});
|
|
1799
|
+
const fundingRate = this.parseFundingRate(data);
|
|
1800
|
+
const symbol = fundingRate['symbol'];
|
|
1801
|
+
this.fundingRates[symbol] = fundingRate;
|
|
1802
|
+
const messageHash = 'fundingRate:' + symbol;
|
|
1803
|
+
client.resolve(fundingRate, messageHash);
|
|
1804
|
+
}
|
|
1740
1805
|
async authenticate(type, params = {}) {
|
|
1741
1806
|
this.checkRequiredCredentials();
|
|
1742
1807
|
const url = this.implodeHostname(this.urls['api']['ws'][type]['private']);
|
|
@@ -2026,6 +2091,9 @@ export default class bitmart extends bitmartRest {
|
|
|
2026
2091
|
'balance': this.handleBalance,
|
|
2027
2092
|
'asset': this.handleBalance,
|
|
2028
2093
|
};
|
|
2094
|
+
if (channel.indexOf('fundingRate') >= 0) {
|
|
2095
|
+
this.handleFundingRate(client, message);
|
|
2096
|
+
}
|
|
2029
2097
|
const keys = Object.keys(methods);
|
|
2030
2098
|
for (let i = 0; i < keys.length; i++) {
|
|
2031
2099
|
const key = keys[i];
|
package/js/src/pro/blofin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import blofinRest from '../blofin.js';
|
|
2
|
-
import type { Int, Market, Trade, OrderBook, Strings, Ticker, Tickers, OHLCV, Balances, Str, Order, Position } from '../base/types.js';
|
|
2
|
+
import type { Int, Market, Trade, OrderBook, Strings, Ticker, Tickers, OHLCV, Balances, Str, Order, Position, FundingRate } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class blofin extends blofinRest {
|
|
5
5
|
describe(): any;
|
|
@@ -169,6 +169,17 @@ export default class blofin extends blofinRest {
|
|
|
169
169
|
watchPositions(symbols?: Strings, since?: Int, limit?: Int, params?: {}): Promise<Position[]>;
|
|
170
170
|
handlePositions(client: Client, message: any): void;
|
|
171
171
|
parseWsPosition(position: any, market?: Market): Position;
|
|
172
|
+
/**
|
|
173
|
+
* @method
|
|
174
|
+
* @name blofin#watchFundingRate
|
|
175
|
+
* @description watch the current funding rate
|
|
176
|
+
* @see https://docs.blofin.com/index.html#ws-funding-rate-channel
|
|
177
|
+
* @param {string} symbol unified market symbol
|
|
178
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
179
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/?id=funding-rate-structure}
|
|
180
|
+
*/
|
|
181
|
+
watchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
|
|
182
|
+
handleFundingRate(client: Client, message: any): void;
|
|
172
183
|
watchMultipleWrapper(isPublic: boolean, channelName: string, callerMethodName: string, symbolsArray?: any[], params?: {}): Promise<any>;
|
|
173
184
|
getSubscriptionRequest(args: any): {
|
|
174
185
|
op: string;
|
package/js/src/pro/blofin.js
CHANGED
|
@@ -9,6 +9,8 @@ export default class blofin extends blofinRest {
|
|
|
9
9
|
return this.deepExtend(super.describe(), {
|
|
10
10
|
'has': {
|
|
11
11
|
'ws': true,
|
|
12
|
+
'watchFundingRate': true,
|
|
13
|
+
'watchFundingRates': false,
|
|
12
14
|
'watchTrades': true,
|
|
13
15
|
'watchTradesForSymbols': true,
|
|
14
16
|
'watchOrderBook': true,
|
|
@@ -102,7 +104,8 @@ export default class blofin extends blofinRest {
|
|
|
102
104
|
const firstSymbol = this.safeString(firstMarket, 'symbol');
|
|
103
105
|
limit = trades.getLimit(firstSymbol, limit);
|
|
104
106
|
}
|
|
105
|
-
|
|
107
|
+
const result = this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
108
|
+
return this.sortBy(result, 'timestamp'); // needed bcz of https://github.com/ccxt/ccxt/actions/runs/20755599430/job/59597237029?pr=27624#step:11:611
|
|
106
109
|
}
|
|
107
110
|
handleTrades(client, message) {
|
|
108
111
|
//
|
|
@@ -598,6 +601,53 @@ export default class blofin extends blofinRest {
|
|
|
598
601
|
parseWsPosition(position, market = undefined) {
|
|
599
602
|
return this.parsePosition(position, market);
|
|
600
603
|
}
|
|
604
|
+
/**
|
|
605
|
+
* @method
|
|
606
|
+
* @name blofin#watchFundingRate
|
|
607
|
+
* @description watch the current funding rate
|
|
608
|
+
* @see https://docs.blofin.com/index.html#ws-funding-rate-channel
|
|
609
|
+
* @param {string} symbol unified market symbol
|
|
610
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
611
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/?id=funding-rate-structure}
|
|
612
|
+
*/
|
|
613
|
+
async watchFundingRate(symbol, params = {}) {
|
|
614
|
+
await this.loadMarkets();
|
|
615
|
+
const market = this.market(symbol);
|
|
616
|
+
let marketType = undefined;
|
|
617
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchFundingRate', market, params);
|
|
618
|
+
const messageHash = 'fundingRate:' + market['symbol'];
|
|
619
|
+
const requestParams = {
|
|
620
|
+
'channel': 'funding-rate',
|
|
621
|
+
'instId': market['id'],
|
|
622
|
+
};
|
|
623
|
+
const request = this.getSubscriptionRequest([requestParams]);
|
|
624
|
+
const url = this.implodeHostname(this.urls['api']['ws'][marketType]['public']);
|
|
625
|
+
return await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
|
|
626
|
+
}
|
|
627
|
+
handleFundingRate(client, message) {
|
|
628
|
+
//
|
|
629
|
+
// {
|
|
630
|
+
// "arg": {
|
|
631
|
+
// "channel": "funding-rate",
|
|
632
|
+
// "instId": "BTC-USDT"
|
|
633
|
+
// },
|
|
634
|
+
// "data": [
|
|
635
|
+
// {
|
|
636
|
+
// "instId": "BTC-USDT",
|
|
637
|
+
// "fundingRate": "0.00007873240488719234",
|
|
638
|
+
// "fundingTime": "1771430400000"
|
|
639
|
+
// }
|
|
640
|
+
// ]
|
|
641
|
+
// }
|
|
642
|
+
//
|
|
643
|
+
const data = this.safeList(message, 'data', []);
|
|
644
|
+
const first = this.safeDict(data, 0, {});
|
|
645
|
+
const fundingRate = this.parseFundingRate(first);
|
|
646
|
+
const symbol = fundingRate['symbol'];
|
|
647
|
+
this.fundingRates[symbol] = fundingRate;
|
|
648
|
+
const messageHash = 'fundingRate:' + symbol;
|
|
649
|
+
client.resolve(fundingRate, messageHash);
|
|
650
|
+
}
|
|
601
651
|
async watchMultipleWrapper(isPublic, channelName, callerMethodName, symbolsArray = undefined, params = {}) {
|
|
602
652
|
// underlier method for all watch-multiple symbols
|
|
603
653
|
await this.loadMarkets();
|
|
@@ -690,6 +740,7 @@ export default class blofin extends blofinRest {
|
|
|
690
740
|
'orders': this.handleOrders,
|
|
691
741
|
'orders-algo': this.handleOrders,
|
|
692
742
|
'positions': this.handlePositions,
|
|
743
|
+
'funding-rate': this.handleFundingRate,
|
|
693
744
|
};
|
|
694
745
|
let method = undefined;
|
|
695
746
|
if (message === 'pong') {
|
|
@@ -40,11 +40,11 @@ export default class coinbaseinternational extends coinbaseinternationalRest {
|
|
|
40
40
|
* @name coinbaseinternational#watchFundingRates
|
|
41
41
|
* @description watch the funding rate for multiple markets
|
|
42
42
|
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
|
43
|
-
* @param {string[]
|
|
43
|
+
* @param {string[]} symbols a list of unified market symbols
|
|
44
44
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
45
45
|
* @returns {object} a dictionary of [funding rates structures]{@link https://docs.ccxt.com/?id=funding-rates-structure}, indexe by market symbols
|
|
46
46
|
*/
|
|
47
|
-
watchFundingRates(symbols
|
|
47
|
+
watchFundingRates(symbols?: Strings, params?: {}): Promise<FundingRates>;
|
|
48
48
|
/**
|
|
49
49
|
* @method
|
|
50
50
|
* @name coinbaseinternational#watchTicker
|