ccxt 4.2.39 → 4.2.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 +3 -3
- package/dist/ccxt.browser.js +1140 -341
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +28 -24
- package/dist/cjs/src/base/Exchange.js +14 -14
- package/dist/cjs/src/binance.js +561 -168
- package/dist/cjs/src/bingx.js +271 -25
- package/dist/cjs/src/bitforex.js +2 -2
- package/dist/cjs/src/bitget.js +13 -2
- package/dist/cjs/src/bybit.js +3 -1
- package/dist/cjs/src/coinbase.js +8 -6
- package/dist/cjs/src/coinbasepro.js +1 -0
- package/dist/cjs/src/coinlist.js +9 -7
- package/dist/cjs/src/coinmetro.js +2 -1
- package/dist/cjs/src/currencycom.js +1 -1
- package/dist/cjs/src/htx.js +1 -1
- package/dist/cjs/src/krakenfutures.js +126 -2
- package/dist/cjs/src/mexc.js +44 -44
- package/dist/cjs/src/okx.js +9 -15
- package/dist/cjs/src/phemex.js +1 -0
- package/dist/cjs/src/pro/bitmart.js +38 -20
- package/dist/cjs/src/pro/bybit.js +5 -5
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bingx.d.ts +4 -0
- package/js/src/abstract/coinbasepro.d.ts +1 -0
- package/js/src/ascendex.js +28 -24
- package/js/src/base/Exchange.d.ts +8 -8
- package/js/src/base/Exchange.js +14 -14
- package/js/src/binance.d.ts +1 -1
- package/js/src/binance.js +561 -168
- package/js/src/bingx.d.ts +2 -0
- package/js/src/bingx.js +271 -25
- package/js/src/bitforex.js +2 -2
- package/js/src/bitget.js +13 -2
- package/js/src/bybit.js +3 -1
- package/js/src/coinbase.js +8 -6
- package/js/src/coinbasepro.js +1 -0
- package/js/src/coinlist.js +9 -7
- package/js/src/coinmetro.js +2 -1
- package/js/src/currencycom.js +1 -1
- package/js/src/htx.js +1 -1
- package/js/src/krakenfutures.d.ts +2 -0
- package/js/src/krakenfutures.js +126 -2
- package/js/src/mexc.js +44 -44
- package/js/src/okx.js +9 -15
- package/js/src/phemex.js +1 -0
- package/js/src/pro/bitmart.d.ts +2 -0
- package/js/src/pro/bitmart.js +38 -20
- package/js/src/pro/bybit.d.ts +1 -1
- package/js/src/pro/bybit.js +5 -5
- package/js/src/pro/cex.js +1 -1
- package/js/src/pro/gemini.js +1 -1
- package/package.json +1 -1
|
@@ -27,6 +27,7 @@ class bitmart extends bitmart$1 {
|
|
|
27
27
|
'watchOrderBookForSymbols': true,
|
|
28
28
|
'watchOrders': true,
|
|
29
29
|
'watchTrades': true,
|
|
30
|
+
'watchTradesForSymbols': true,
|
|
30
31
|
'watchOHLCV': true,
|
|
31
32
|
'watchPosition': 'emulated',
|
|
32
33
|
'watchPositions': true,
|
|
@@ -271,17 +272,43 @@ class bitmart extends bitmart$1 {
|
|
|
271
272
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
272
273
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
273
274
|
*/
|
|
275
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
276
|
+
}
|
|
277
|
+
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
278
|
+
/**
|
|
279
|
+
* @method
|
|
280
|
+
* @name bitmart#watchTradesForSymbols
|
|
281
|
+
* @see https://developer-pro.bitmart.com/en/spot/#public-trade-channel
|
|
282
|
+
* @description get the list of most recent trades for a list of symbols
|
|
283
|
+
* @param {string[]} symbols unified symbol of the market to fetch trades for
|
|
284
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
285
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
286
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
287
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
288
|
+
*/
|
|
274
289
|
await this.loadMarkets();
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
const trades = await this.subscribe('trade', symbol, type, params);
|
|
290
|
+
let marketType = undefined;
|
|
291
|
+
[symbols, marketType, params] = this.getParamsForMultipleSub('watchTradesForSymbols', symbols, limit, params);
|
|
292
|
+
const channelName = 'trade';
|
|
293
|
+
const trades = await this.subscribeMultiple(channelName, marketType, symbols, params);
|
|
280
294
|
if (this.newUpdates) {
|
|
281
|
-
|
|
295
|
+
const first = this.safeDict(trades, 0);
|
|
296
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
297
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
282
298
|
}
|
|
283
299
|
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
284
300
|
}
|
|
301
|
+
getParamsForMultipleSub(methodName, symbols, limit = undefined, params = {}) {
|
|
302
|
+
symbols = this.marketSymbols(symbols, undefined, false, true);
|
|
303
|
+
const length = symbols.length;
|
|
304
|
+
if (length > 20) {
|
|
305
|
+
throw new errors.NotSupported(this.id + ' ' + methodName + '() accepts a maximum of 20 symbols in one request');
|
|
306
|
+
}
|
|
307
|
+
const market = this.market(symbols[0]);
|
|
308
|
+
let marketType = undefined;
|
|
309
|
+
[marketType, params] = this.handleMarketTypeAndParams(methodName, market, params);
|
|
310
|
+
return [symbols, marketType, params];
|
|
311
|
+
}
|
|
285
312
|
async watchTicker(symbol, params = {}) {
|
|
286
313
|
/**
|
|
287
314
|
* @method
|
|
@@ -819,16 +846,15 @@ class bitmart extends bitmart$1 {
|
|
|
819
846
|
// ]
|
|
820
847
|
// }
|
|
821
848
|
//
|
|
822
|
-
const channel = this.safeString2(message, 'table', 'group');
|
|
823
|
-
const isSpot = (channel.indexOf('spot') >= 0);
|
|
824
849
|
const data = this.safeValue(message, 'data');
|
|
825
850
|
if (data === undefined) {
|
|
826
851
|
return;
|
|
827
852
|
}
|
|
828
853
|
let stored = undefined;
|
|
854
|
+
let symbol = undefined;
|
|
829
855
|
for (let i = 0; i < data.length; i++) {
|
|
830
856
|
const trade = this.parseWsTrade(data[i]);
|
|
831
|
-
|
|
857
|
+
symbol = trade['symbol'];
|
|
832
858
|
const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
833
859
|
stored = this.safeValue(this.trades, symbol);
|
|
834
860
|
if (stored === undefined) {
|
|
@@ -837,10 +863,7 @@ class bitmart extends bitmart$1 {
|
|
|
837
863
|
}
|
|
838
864
|
stored.append(trade);
|
|
839
865
|
}
|
|
840
|
-
|
|
841
|
-
if (isSpot) {
|
|
842
|
-
messageHash += ':' + this.safeString(data[0], 'symbol');
|
|
843
|
-
}
|
|
866
|
+
const messageHash = 'trade:' + symbol;
|
|
844
867
|
client.resolve(stored, messageHash);
|
|
845
868
|
}
|
|
846
869
|
parseWsTrade(trade, market = undefined) {
|
|
@@ -1373,15 +1396,10 @@ class bitmart extends bitmart$1 {
|
|
|
1373
1396
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
1374
1397
|
*/
|
|
1375
1398
|
await this.loadMarkets();
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
throw new errors.NotSupported(this.id + ' watchOrderBookForSymbols() accepts a maximum of 20 symbols in one request');
|
|
1379
|
-
}
|
|
1380
|
-
const market = this.market(symbols[0]);
|
|
1399
|
+
let type = undefined;
|
|
1400
|
+
[symbols, type, params] = this.getParamsForMultipleSub('watchOrderBookForSymbols', symbols, limit, params);
|
|
1381
1401
|
let channel = undefined;
|
|
1382
1402
|
[channel, params] = this.handleOptionAndParams(params, 'watchOrderBookForSymbols', 'depth', 'depth/increase100');
|
|
1383
|
-
let type = 'spot';
|
|
1384
|
-
[type, params] = this.handleMarketTypeAndParams('watchOrderBookForSymbols', market, params);
|
|
1385
1403
|
if (type === 'swap' && channel === 'depth/increase100') {
|
|
1386
1404
|
channel = 'depth50';
|
|
1387
1405
|
}
|
|
@@ -184,7 +184,7 @@ class bybit extends bybit$1 {
|
|
|
184
184
|
const market = this.market(symbol);
|
|
185
185
|
symbol = market['symbol'];
|
|
186
186
|
const messageHash = 'ticker:' + symbol;
|
|
187
|
-
const url = this.getUrlByMarketType(symbol, false, params);
|
|
187
|
+
const url = this.getUrlByMarketType(symbol, false, 'watchTicker', params);
|
|
188
188
|
params = this.cleanParams(params);
|
|
189
189
|
const options = this.safeValue(this.options, 'watchTicker', {});
|
|
190
190
|
let topic = this.safeString(options, 'name', 'tickers');
|
|
@@ -209,7 +209,7 @@ class bybit extends bybit$1 {
|
|
|
209
209
|
await this.loadMarkets();
|
|
210
210
|
symbols = this.marketSymbols(symbols, undefined, false);
|
|
211
211
|
const messageHashes = [];
|
|
212
|
-
const url = this.getUrlByMarketType(symbols[0], false, params);
|
|
212
|
+
const url = this.getUrlByMarketType(symbols[0], false, 'watchTickers', params);
|
|
213
213
|
params = this.cleanParams(params);
|
|
214
214
|
const options = this.safeValue(this.options, 'watchTickers', {});
|
|
215
215
|
const topic = this.safeString(options, 'name', 'tickers');
|
|
@@ -376,7 +376,7 @@ class bybit extends bybit$1 {
|
|
|
376
376
|
await this.loadMarkets();
|
|
377
377
|
const market = this.market(symbol);
|
|
378
378
|
symbol = market['symbol'];
|
|
379
|
-
const url = this.getUrlByMarketType(symbol, false, params);
|
|
379
|
+
const url = this.getUrlByMarketType(symbol, false, 'watchOHLCV', params);
|
|
380
380
|
params = this.cleanParams(params);
|
|
381
381
|
let ohlcv = undefined;
|
|
382
382
|
const timeframeId = this.safeString(this.timeframes, timeframe, timeframe);
|
|
@@ -494,7 +494,7 @@ class bybit extends bybit$1 {
|
|
|
494
494
|
throw new errors.ArgumentsRequired(this.id + ' watchOrderBookForSymbols() requires a non-empty array of symbols');
|
|
495
495
|
}
|
|
496
496
|
symbols = this.marketSymbols(symbols);
|
|
497
|
-
const url = this.getUrlByMarketType(symbols[0], false, params);
|
|
497
|
+
const url = this.getUrlByMarketType(symbols[0], false, 'watchOrderBook', params);
|
|
498
498
|
params = this.cleanParams(params);
|
|
499
499
|
const market = this.market(symbols[0]);
|
|
500
500
|
if (limit === undefined) {
|
|
@@ -626,7 +626,7 @@ class bybit extends bybit$1 {
|
|
|
626
626
|
throw new errors.ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
|
|
627
627
|
}
|
|
628
628
|
params = this.cleanParams(params);
|
|
629
|
-
const url = this.getUrlByMarketType(symbols[0], false, params);
|
|
629
|
+
const url = this.getUrlByMarketType(symbols[0], false, 'watchTrades', params);
|
|
630
630
|
const topics = [];
|
|
631
631
|
const messageHashes = [];
|
|
632
632
|
for (let i = 0; i < symbols.length; i++) {
|
package/dist/cjs/src/pro/cex.js
CHANGED
|
@@ -185,7 +185,7 @@ class cex extends cex$1 {
|
|
|
185
185
|
trade = trade.split(':');
|
|
186
186
|
}
|
|
187
187
|
const side = this.safeString(trade, 0);
|
|
188
|
-
const timestamp = this.
|
|
188
|
+
const timestamp = this.safeInteger(trade, 1);
|
|
189
189
|
const amount = this.safeString(trade, 2);
|
|
190
190
|
const price = this.safeString(trade, 3);
|
|
191
191
|
const id = this.safeString(trade, 4);
|
|
@@ -641,7 +641,7 @@ class gemini extends gemini$1 {
|
|
|
641
641
|
// "socket_sequence": 139
|
|
642
642
|
// }
|
|
643
643
|
//
|
|
644
|
-
const timestamp = this.
|
|
644
|
+
const timestamp = this.safeInteger(order, 'timestampms');
|
|
645
645
|
const status = this.safeString(order, 'type');
|
|
646
646
|
const marketId = this.safeString(order, 'symbol');
|
|
647
647
|
const typeId = this.safeString(order, 'order_type');
|
package/js/ccxt.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
|
|
|
4
4
|
import * as errors from './src/base/errors.js';
|
|
5
5
|
import type { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks } from './src/base/types.js';
|
|
6
6
|
import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
|
|
7
|
-
declare const version = "4.2.
|
|
7
|
+
declare const version = "4.2.40";
|
|
8
8
|
import ace from './src/ace.js';
|
|
9
9
|
import alpaca from './src/alpaca.js';
|
|
10
10
|
import ascendex from './src/ascendex.js';
|
package/js/ccxt.js
CHANGED
|
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
|
|
|
38
38
|
import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
|
|
39
39
|
//-----------------------------------------------------------------------------
|
|
40
40
|
// this is updated by vss.js when building
|
|
41
|
-
const version = '4.2.
|
|
41
|
+
const version = '4.2.41';
|
|
42
42
|
Exchange.ccxtVersion = version;
|
|
43
43
|
//-----------------------------------------------------------------------------
|
|
44
44
|
import ace from './src/ace.js';
|
|
@@ -15,6 +15,7 @@ interface Exchange {
|
|
|
15
15
|
spotV1PrivatePostTradeOrder(params?: {}): Promise<implicitReturnType>;
|
|
16
16
|
spotV1PrivatePostTradeCancel(params?: {}): Promise<implicitReturnType>;
|
|
17
17
|
spotV1PrivatePostTradeBatchOrders(params?: {}): Promise<implicitReturnType>;
|
|
18
|
+
spotV1PrivatePostTradeOrderCancelReplace(params?: {}): Promise<implicitReturnType>;
|
|
18
19
|
spotV1PrivatePostTradeCancelOrders(params?: {}): Promise<implicitReturnType>;
|
|
19
20
|
spotV1PrivatePostTradeCancelOpenOrders(params?: {}): Promise<implicitReturnType>;
|
|
20
21
|
spotV3PrivateGetGetAssetTransfer(params?: {}): Promise<implicitReturnType>;
|
|
@@ -22,8 +23,11 @@ interface Exchange {
|
|
|
22
23
|
spotV3PrivateGetCapitalDepositHisrec(params?: {}): Promise<implicitReturnType>;
|
|
23
24
|
spotV3PrivateGetCapitalWithdrawHistory(params?: {}): Promise<implicitReturnType>;
|
|
24
25
|
spotV3PrivatePostPostAssetTransfer(params?: {}): Promise<implicitReturnType>;
|
|
26
|
+
swapV1PublicGetTickerPrice(params?: {}): Promise<implicitReturnType>;
|
|
25
27
|
swapV1PrivateGetPositionSideDual(params?: {}): Promise<implicitReturnType>;
|
|
26
28
|
swapV1PrivateGetMarketMarkPriceKlines(params?: {}): Promise<implicitReturnType>;
|
|
29
|
+
swapV1PrivateGetTradeBatchCancelReplace(params?: {}): Promise<implicitReturnType>;
|
|
30
|
+
swapV1PrivatePostTradeCancelReplace(params?: {}): Promise<implicitReturnType>;
|
|
27
31
|
swapV1PrivatePostPositionSideDual(params?: {}): Promise<implicitReturnType>;
|
|
28
32
|
swapV2PublicGetServerTime(params?: {}): Promise<implicitReturnType>;
|
|
29
33
|
swapV2PublicGetQuoteContracts(params?: {}): Promise<implicitReturnType>;
|
|
@@ -46,6 +46,7 @@ interface Exchange {
|
|
|
46
46
|
privateGetUsersSelfTrailingVolume(params?: {}): Promise<implicitReturnType>;
|
|
47
47
|
privateGetWithdrawalsFeeEstimate(params?: {}): Promise<implicitReturnType>;
|
|
48
48
|
privateGetConversionsConversionId(params?: {}): Promise<implicitReturnType>;
|
|
49
|
+
privateGetConversionsFees(params?: {}): Promise<implicitReturnType>;
|
|
49
50
|
privatePostConversions(params?: {}): Promise<implicitReturnType>;
|
|
50
51
|
privatePostDepositsCoinbaseAccount(params?: {}): Promise<implicitReturnType>;
|
|
51
52
|
privatePostDepositsPaymentMethod(params?: {}): Promise<implicitReturnType>;
|
package/js/src/ascendex.js
CHANGED
|
@@ -277,11 +277,14 @@ export default class ascendex extends Exchange {
|
|
|
277
277
|
'fillResponseFromRequest': true,
|
|
278
278
|
},
|
|
279
279
|
'networks': {
|
|
280
|
-
'BSC': 'BEP20 (BSC)',
|
|
280
|
+
'BSC': 'BEP20 ' + '(BSC)',
|
|
281
281
|
'ARB': 'arbitrum',
|
|
282
282
|
'SOL': 'Solana',
|
|
283
283
|
'AVAX': 'avalanche C chain',
|
|
284
284
|
'OMNI': 'Omni',
|
|
285
|
+
'TRC': 'TRC20',
|
|
286
|
+
'TRX': 'TRC20',
|
|
287
|
+
'ERC': 'ERC20',
|
|
285
288
|
},
|
|
286
289
|
'networksById': {
|
|
287
290
|
'BEP20 (BSC)': 'BSC',
|
|
@@ -289,6 +292,16 @@ export default class ascendex extends Exchange {
|
|
|
289
292
|
'Solana': 'SOL',
|
|
290
293
|
'avalanche C chain': 'AVAX',
|
|
291
294
|
'Omni': 'OMNI',
|
|
295
|
+
'TRC20': 'TRC20',
|
|
296
|
+
'ERC20': 'ERC20',
|
|
297
|
+
'GO20': 'GO20',
|
|
298
|
+
'BEP2': 'BEP2',
|
|
299
|
+
'Bitcoin': 'BTC',
|
|
300
|
+
'Bitcoin ABC': 'BCH',
|
|
301
|
+
'Litecoin': 'LTC',
|
|
302
|
+
'Matic Network': 'MATIC',
|
|
303
|
+
'xDai': 'STAKE',
|
|
304
|
+
'Akash': 'AKT',
|
|
292
305
|
},
|
|
293
306
|
},
|
|
294
307
|
'exceptions': {
|
|
@@ -2378,8 +2391,8 @@ export default class ascendex extends Exchange {
|
|
|
2378
2391
|
const tag = this.safeString(depositAddress, tagId);
|
|
2379
2392
|
this.checkAddress(address);
|
|
2380
2393
|
const code = (currency === undefined) ? undefined : currency['code'];
|
|
2381
|
-
const chainName = this.safeString(depositAddress, '
|
|
2382
|
-
const network = this.
|
|
2394
|
+
const chainName = this.safeString(depositAddress, 'blockchain');
|
|
2395
|
+
const network = this.networkIdToCode(chainName, code);
|
|
2383
2396
|
return {
|
|
2384
2397
|
'currency': code,
|
|
2385
2398
|
'address': address,
|
|
@@ -2389,20 +2402,7 @@ export default class ascendex extends Exchange {
|
|
|
2389
2402
|
};
|
|
2390
2403
|
}
|
|
2391
2404
|
safeNetwork(networkId) {
|
|
2392
|
-
const networksById =
|
|
2393
|
-
'TRC20': 'TRC20',
|
|
2394
|
-
'ERC20': 'ERC20',
|
|
2395
|
-
'GO20': 'GO20',
|
|
2396
|
-
'BEP2': 'BEP2',
|
|
2397
|
-
'BEP20 (BSC)': 'BEP20',
|
|
2398
|
-
'Bitcoin': 'BTC',
|
|
2399
|
-
'Bitcoin ABC': 'BCH',
|
|
2400
|
-
'Litecoin': 'LTC',
|
|
2401
|
-
'Matic Network': 'MATIC',
|
|
2402
|
-
'Solana': 'SOL',
|
|
2403
|
-
'xDai': 'STAKE',
|
|
2404
|
-
'Akash': 'AKT',
|
|
2405
|
-
};
|
|
2405
|
+
const networksById = this.safeDict(this.options, 'networksById');
|
|
2406
2406
|
return this.safeString(networksById, networkId, networkId);
|
|
2407
2407
|
}
|
|
2408
2408
|
async fetchDepositAddress(code, params = {}) {
|
|
@@ -2410,16 +2410,20 @@ export default class ascendex extends Exchange {
|
|
|
2410
2410
|
* @method
|
|
2411
2411
|
* @name ascendex#fetchDepositAddress
|
|
2412
2412
|
* @description fetch the deposit address for a currency associated with this account
|
|
2413
|
+
* @see https://ascendex.github.io/ascendex-pro-api/#query-deposit-addresses
|
|
2413
2414
|
* @param {string} code unified currency code
|
|
2414
2415
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2416
|
+
* @param {string} [params.network] unified network code for deposit chain
|
|
2415
2417
|
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
2416
2418
|
*/
|
|
2417
2419
|
await this.loadMarkets();
|
|
2418
2420
|
const currency = this.currency(code);
|
|
2419
|
-
const
|
|
2420
|
-
|
|
2421
|
+
const networkCode = this.safeString2(params, 'network', 'chainName');
|
|
2422
|
+
const networkId = this.networkCodeToId(networkCode);
|
|
2423
|
+
params = this.omit(params, ['chainName']);
|
|
2421
2424
|
const request = {
|
|
2422
2425
|
'asset': currency['id'],
|
|
2426
|
+
'blockchain': networkId,
|
|
2423
2427
|
};
|
|
2424
2428
|
const response = await this.v1PrivateGetWalletDepositAddress(this.extend(request, params));
|
|
2425
2429
|
//
|
|
@@ -2455,22 +2459,22 @@ export default class ascendex extends Exchange {
|
|
|
2455
2459
|
// }
|
|
2456
2460
|
// }
|
|
2457
2461
|
//
|
|
2458
|
-
const data = this.
|
|
2459
|
-
const addresses = this.
|
|
2462
|
+
const data = this.safeDict(response, 'data', {});
|
|
2463
|
+
const addresses = this.safeList(data, 'address', []);
|
|
2460
2464
|
const numAddresses = addresses.length;
|
|
2461
2465
|
let address = undefined;
|
|
2462
2466
|
if (numAddresses > 1) {
|
|
2463
2467
|
const addressesByChainName = this.indexBy(addresses, 'chainName');
|
|
2464
|
-
if (
|
|
2468
|
+
if (networkId === undefined) {
|
|
2465
2469
|
const chainNames = Object.keys(addressesByChainName);
|
|
2466
2470
|
const chains = chainNames.join(', ');
|
|
2467
2471
|
throw new ArgumentsRequired(this.id + ' fetchDepositAddress() returned more than one address, a chainName parameter is required, one of ' + chains);
|
|
2468
2472
|
}
|
|
2469
|
-
address = this.
|
|
2473
|
+
address = this.safeDict(addressesByChainName, networkId, {});
|
|
2470
2474
|
}
|
|
2471
2475
|
else {
|
|
2472
2476
|
// first address
|
|
2473
|
-
address = this.
|
|
2477
|
+
address = this.safeDict(addresses, 0, {});
|
|
2474
2478
|
}
|
|
2475
2479
|
const result = this.parseDepositAddress(address, currency);
|
|
2476
2480
|
return this.extend(result, {
|
|
@@ -721,11 +721,11 @@ export default class Exchange {
|
|
|
721
721
|
networkCodeToId(networkCode: any, currencyCode?: any): string;
|
|
722
722
|
networkIdToCode(networkId: any, currencyCode?: any): string;
|
|
723
723
|
handleNetworkCodeAndParams(params: any): any[];
|
|
724
|
-
defaultNetworkCode(currencyCode:
|
|
724
|
+
defaultNetworkCode(currencyCode: string): any;
|
|
725
725
|
selectNetworkCodeFromUnifiedNetworks(currencyCode: any, networkCode: any, indexedNetworkEntries: any): any;
|
|
726
726
|
selectNetworkIdFromRawNetworks(currencyCode: any, networkCode: any, indexedNetworkEntries: any): any;
|
|
727
727
|
selectNetworkKeyFromNetworks(currencyCode: any, networkCode: any, indexedNetworkEntries: any, isIndexedByUnifiedNetworkCode?: boolean): any;
|
|
728
|
-
safeNumber2(dictionary:
|
|
728
|
+
safeNumber2(dictionary: object, key1: IndexType, key2: IndexType, d?: any): number;
|
|
729
729
|
parseOrderBook(orderbook: object, symbol: string, timestamp?: Int, bidsKey?: string, asksKey?: string, priceKey?: IndexType, amountKey?: IndexType, countOrIdKey?: IndexType): OrderBook;
|
|
730
730
|
parseOHLCVs(ohlcvs: object[], market?: any, timeframe?: string, since?: Int, limit?: Int): OHLCV[];
|
|
731
731
|
parseLeverageTiers(response: any, symbols?: string[], marketIdKey?: any): {};
|
|
@@ -788,12 +788,12 @@ export default class Exchange {
|
|
|
788
788
|
getSupportedMapping(key: any, mapping?: {}): any;
|
|
789
789
|
fetchCrossBorrowRate(code: string, params?: {}): Promise<{}>;
|
|
790
790
|
fetchIsolatedBorrowRate(symbol: string, params?: {}): Promise<{}>;
|
|
791
|
-
handleOptionAndParams(params:
|
|
792
|
-
handleOptionAndParams2(params:
|
|
793
|
-
handleOption(methodName:
|
|
791
|
+
handleOptionAndParams(params: object, methodName: string, optionName: string, defaultValue?: any): any[];
|
|
792
|
+
handleOptionAndParams2(params: object, methodName: string, methodName2: string, optionName: string, defaultValue?: any): any[];
|
|
793
|
+
handleOption(methodName: string, optionName: string, defaultValue?: any): any;
|
|
794
794
|
handleMarketTypeAndParams(methodName: string, market?: Market, params?: {}): any;
|
|
795
|
-
handleSubTypeAndParams(methodName:
|
|
796
|
-
handleMarginModeAndParams(methodName:
|
|
795
|
+
handleSubTypeAndParams(methodName: string, market?: any, params?: {}, defaultValue?: any): any[];
|
|
796
|
+
handleMarginModeAndParams(methodName: string, params?: {}, defaultValue?: any): any[];
|
|
797
797
|
throwExactlyMatchedException(exact: any, string: any, message: any): void;
|
|
798
798
|
throwBroadlyMatchedException(broad: any, string: any, message: any): void;
|
|
799
799
|
findBroadlyMatchedKey(broad: any, string: any): string;
|
|
@@ -855,7 +855,7 @@ export default class Exchange {
|
|
|
855
855
|
fetchDepositAddress(code: string, params?: {}): Promise<any>;
|
|
856
856
|
account(): Account;
|
|
857
857
|
commonCurrencyCode(currency: string): string;
|
|
858
|
-
currency(code:
|
|
858
|
+
currency(code: string): any;
|
|
859
859
|
market(symbol: string): MarketInterface;
|
|
860
860
|
createExpiredOptionMarket(symbol: string): MarketInterface;
|
|
861
861
|
handleWithdrawTagAndParams(tag: any, params: any): any;
|
package/js/src/base/Exchange.js
CHANGED
|
@@ -3192,14 +3192,14 @@ export default class Exchange {
|
|
|
3192
3192
|
}
|
|
3193
3193
|
defaultNetworkCode(currencyCode) {
|
|
3194
3194
|
let defaultNetworkCode = undefined;
|
|
3195
|
-
const defaultNetworks = this.
|
|
3195
|
+
const defaultNetworks = this.safeDict(this.options, 'defaultNetworks', {});
|
|
3196
3196
|
if (currencyCode in defaultNetworks) {
|
|
3197
3197
|
// if currency had set its network in "defaultNetworks", use it
|
|
3198
3198
|
defaultNetworkCode = defaultNetworks[currencyCode];
|
|
3199
3199
|
}
|
|
3200
3200
|
else {
|
|
3201
3201
|
// otherwise, try to use the global-scope 'defaultNetwork' value (even if that network is not supported by currency, it doesn't make any problem, this will be just used "at first" if currency supports this network at all)
|
|
3202
|
-
const defaultNetwork = this.
|
|
3202
|
+
const defaultNetwork = this.safeDict(this.options, 'defaultNetwork');
|
|
3203
3203
|
if (defaultNetwork !== undefined) {
|
|
3204
3204
|
defaultNetworkCode = defaultNetwork;
|
|
3205
3205
|
}
|
|
@@ -3704,14 +3704,14 @@ export default class Exchange {
|
|
|
3704
3704
|
throw new NotSupported(this.id + ' fetchStatus() is not supported yet');
|
|
3705
3705
|
}
|
|
3706
3706
|
async fetchFundingFee(code, params = {}) {
|
|
3707
|
-
const warnOnFetchFundingFee = this.
|
|
3707
|
+
const warnOnFetchFundingFee = this.safeBool(this.options, 'warnOnFetchFundingFee', true);
|
|
3708
3708
|
if (warnOnFetchFundingFee) {
|
|
3709
3709
|
throw new NotSupported(this.id + ' fetchFundingFee() method is deprecated, it will be removed in July 2022, please, use fetchTransactionFee() or set exchange.options["warnOnFetchFundingFee"] = false to suppress this warning');
|
|
3710
3710
|
}
|
|
3711
3711
|
return await this.fetchTransactionFee(code, params);
|
|
3712
3712
|
}
|
|
3713
3713
|
async fetchFundingFees(codes = undefined, params = {}) {
|
|
3714
|
-
const warnOnFetchFundingFees = this.
|
|
3714
|
+
const warnOnFetchFundingFees = this.safeBool(this.options, 'warnOnFetchFundingFees', true);
|
|
3715
3715
|
if (warnOnFetchFundingFees) {
|
|
3716
3716
|
throw new NotSupported(this.id + ' fetchFundingFees() method is deprecated, it will be removed in July 2022. Please, use fetchTransactionFees() or set exchange.options["warnOnFetchFundingFees"] = false to suppress this warning');
|
|
3717
3717
|
}
|
|
@@ -3762,7 +3762,7 @@ export default class Exchange {
|
|
|
3762
3762
|
throw new NotSupported(this.id + ' fetchIsolatedBorrowRate() is not supported yet');
|
|
3763
3763
|
}
|
|
3764
3764
|
const borrowRates = await this.fetchIsolatedBorrowRates(params);
|
|
3765
|
-
const rate = this.
|
|
3765
|
+
const rate = this.safeDict(borrowRates, symbol);
|
|
3766
3766
|
if (rate === undefined) {
|
|
3767
3767
|
throw new ExchangeError(this.id + ' fetchIsolatedBorrowRate() could not find the borrow rate for market symbol ' + symbol);
|
|
3768
3768
|
}
|
|
@@ -3823,7 +3823,7 @@ export default class Exchange {
|
|
|
3823
3823
|
}
|
|
3824
3824
|
handleMarketTypeAndParams(methodName, market = undefined, params = {}) {
|
|
3825
3825
|
const defaultType = this.safeString2(this.options, 'defaultType', 'type', 'spot');
|
|
3826
|
-
const methodOptions = this.
|
|
3826
|
+
const methodOptions = this.safeDict(this.options, methodName);
|
|
3827
3827
|
let methodType = defaultType;
|
|
3828
3828
|
if (methodOptions !== undefined) {
|
|
3829
3829
|
if (typeof methodOptions === 'string') {
|
|
@@ -3859,7 +3859,7 @@ export default class Exchange {
|
|
|
3859
3859
|
}
|
|
3860
3860
|
// if it was not defined in market object
|
|
3861
3861
|
if (subType === undefined) {
|
|
3862
|
-
const values = this.handleOptionAndParams(
|
|
3862
|
+
const values = this.handleOptionAndParams({}, methodName, 'subType', defaultValue); // no need to re-test params here
|
|
3863
3863
|
subType = values[0];
|
|
3864
3864
|
}
|
|
3865
3865
|
}
|
|
@@ -3915,7 +3915,7 @@ export default class Exchange {
|
|
|
3915
3915
|
const market = this.market(symbol);
|
|
3916
3916
|
symbol = market['symbol'];
|
|
3917
3917
|
const tickers = await this.fetchTickers([symbol], params);
|
|
3918
|
-
const ticker = this.
|
|
3918
|
+
const ticker = this.safeDict(tickers, symbol);
|
|
3919
3919
|
if (ticker === undefined) {
|
|
3920
3920
|
throw new NullResponse(this.id + ' fetchTickers() could not find a ticker for ' + symbol);
|
|
3921
3921
|
}
|
|
@@ -3952,7 +3952,7 @@ export default class Exchange {
|
|
|
3952
3952
|
return order['status'];
|
|
3953
3953
|
}
|
|
3954
3954
|
async fetchUnifiedOrder(order, params = {}) {
|
|
3955
|
-
return await this.fetchOrder(this.
|
|
3955
|
+
return await this.fetchOrder(this.safeString(order, 'id'), this.safeString(order, 'symbol'), params);
|
|
3956
3956
|
}
|
|
3957
3957
|
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
3958
3958
|
throw new NotSupported(this.id + ' createOrder() is not supported yet');
|
|
@@ -4222,7 +4222,7 @@ export default class Exchange {
|
|
|
4222
4222
|
throw new NotSupported(this.id + ' cancelAllOrdersWs() is not supported yet');
|
|
4223
4223
|
}
|
|
4224
4224
|
async cancelUnifiedOrder(order, params = {}) {
|
|
4225
|
-
return this.cancelOrder(this.
|
|
4225
|
+
return this.cancelOrder(this.safeString(order, 'id'), this.safeString(order, 'symbol'), params);
|
|
4226
4226
|
}
|
|
4227
4227
|
async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
4228
4228
|
if (this.has['fetchOpenOrders'] && this.has['fetchClosedOrders']) {
|
|
@@ -4714,7 +4714,7 @@ export default class Exchange {
|
|
|
4714
4714
|
return result;
|
|
4715
4715
|
}
|
|
4716
4716
|
isTriggerOrder(params) {
|
|
4717
|
-
const isTrigger = this.
|
|
4717
|
+
const isTrigger = this.safeBool2(params, 'trigger', 'stop');
|
|
4718
4718
|
if (isTrigger) {
|
|
4719
4719
|
params = this.omit(params, ['trigger', 'stop']);
|
|
4720
4720
|
}
|
|
@@ -4730,7 +4730,7 @@ export default class Exchange {
|
|
|
4730
4730
|
* @returns {boolean} true if a post only order, false otherwise
|
|
4731
4731
|
*/
|
|
4732
4732
|
const timeInForce = this.safeStringUpper(params, 'timeInForce');
|
|
4733
|
-
let postOnly = this.
|
|
4733
|
+
let postOnly = this.safeBool2(params, 'postOnly', 'post_only', false);
|
|
4734
4734
|
// we assume timeInForce is uppercase from safeStringUpper (params, 'timeInForce')
|
|
4735
4735
|
const ioc = timeInForce === 'IOC';
|
|
4736
4736
|
const fok = timeInForce === 'FOK';
|
|
@@ -4924,7 +4924,7 @@ export default class Exchange {
|
|
|
4924
4924
|
* @param {string} account key for account name in this.options['accountsByType']
|
|
4925
4925
|
* @returns the exchange specific account name or the isolated margin id for transfers
|
|
4926
4926
|
*/
|
|
4927
|
-
const accountsByType = this.
|
|
4927
|
+
const accountsByType = this.safeDict(this.options, 'accountsByType', {});
|
|
4928
4928
|
const lowercaseAccount = account.toLowerCase();
|
|
4929
4929
|
if (lowercaseAccount in accountsByType) {
|
|
4930
4930
|
return accountsByType[lowercaseAccount];
|
|
@@ -5401,7 +5401,7 @@ export default class Exchange {
|
|
|
5401
5401
|
return input;
|
|
5402
5402
|
}
|
|
5403
5403
|
handleUntilOption(key, request, params, multiplier = 1) {
|
|
5404
|
-
const until = this.
|
|
5404
|
+
const until = this.safeInteger2(params, 'until', 'till');
|
|
5405
5405
|
if (until !== undefined) {
|
|
5406
5406
|
request[key] = this.parseToInt(until * multiplier);
|
|
5407
5407
|
params = this.omit(params, ['until', 'till']);
|
package/js/src/binance.d.ts
CHANGED
|
@@ -297,7 +297,7 @@ export default class binance extends Exchange {
|
|
|
297
297
|
body: any;
|
|
298
298
|
headers: any;
|
|
299
299
|
};
|
|
300
|
-
getExceptionsByUrl(url: any, exactOrBroad: any): any
|
|
300
|
+
getExceptionsByUrl(url: any, exactOrBroad: any): import("./base/types.js").Dictionary<any>;
|
|
301
301
|
handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
|
|
302
302
|
calculateRateLimiterCost(api: any, method: any, path: any, params: any, config?: {}): any;
|
|
303
303
|
request(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any, config?: {}): Promise<any>;
|