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.
Files changed (57) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +1140 -341
  3. package/dist/ccxt.browser.min.js +2 -2
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/ascendex.js +28 -24
  6. package/dist/cjs/src/base/Exchange.js +14 -14
  7. package/dist/cjs/src/binance.js +561 -168
  8. package/dist/cjs/src/bingx.js +271 -25
  9. package/dist/cjs/src/bitforex.js +2 -2
  10. package/dist/cjs/src/bitget.js +13 -2
  11. package/dist/cjs/src/bybit.js +3 -1
  12. package/dist/cjs/src/coinbase.js +8 -6
  13. package/dist/cjs/src/coinbasepro.js +1 -0
  14. package/dist/cjs/src/coinlist.js +9 -7
  15. package/dist/cjs/src/coinmetro.js +2 -1
  16. package/dist/cjs/src/currencycom.js +1 -1
  17. package/dist/cjs/src/htx.js +1 -1
  18. package/dist/cjs/src/krakenfutures.js +126 -2
  19. package/dist/cjs/src/mexc.js +44 -44
  20. package/dist/cjs/src/okx.js +9 -15
  21. package/dist/cjs/src/phemex.js +1 -0
  22. package/dist/cjs/src/pro/bitmart.js +38 -20
  23. package/dist/cjs/src/pro/bybit.js +5 -5
  24. package/dist/cjs/src/pro/cex.js +1 -1
  25. package/dist/cjs/src/pro/gemini.js +1 -1
  26. package/js/ccxt.d.ts +1 -1
  27. package/js/ccxt.js +1 -1
  28. package/js/src/abstract/bingx.d.ts +4 -0
  29. package/js/src/abstract/coinbasepro.d.ts +1 -0
  30. package/js/src/ascendex.js +28 -24
  31. package/js/src/base/Exchange.d.ts +8 -8
  32. package/js/src/base/Exchange.js +14 -14
  33. package/js/src/binance.d.ts +1 -1
  34. package/js/src/binance.js +561 -168
  35. package/js/src/bingx.d.ts +2 -0
  36. package/js/src/bingx.js +271 -25
  37. package/js/src/bitforex.js +2 -2
  38. package/js/src/bitget.js +13 -2
  39. package/js/src/bybit.js +3 -1
  40. package/js/src/coinbase.js +8 -6
  41. package/js/src/coinbasepro.js +1 -0
  42. package/js/src/coinlist.js +9 -7
  43. package/js/src/coinmetro.js +2 -1
  44. package/js/src/currencycom.js +1 -1
  45. package/js/src/htx.js +1 -1
  46. package/js/src/krakenfutures.d.ts +2 -0
  47. package/js/src/krakenfutures.js +126 -2
  48. package/js/src/mexc.js +44 -44
  49. package/js/src/okx.js +9 -15
  50. package/js/src/phemex.js +1 -0
  51. package/js/src/pro/bitmart.d.ts +2 -0
  52. package/js/src/pro/bitmart.js +38 -20
  53. package/js/src/pro/bybit.d.ts +1 -1
  54. package/js/src/pro/bybit.js +5 -5
  55. package/js/src/pro/cex.js +1 -1
  56. package/js/src/pro/gemini.js +1 -1
  57. 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
- symbol = this.symbol(symbol);
276
- const market = this.market(symbol);
277
- let type = 'spot';
278
- [type, params] = this.handleMarketTypeAndParams('watchTrades', market, params);
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
- limit = trades.getLimit(symbol, limit);
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
- const symbol = trade['symbol'];
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
- let messageHash = channel;
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
- symbols = this.marketSymbols(symbols, undefined, false, true);
1377
- if (symbols.length > 20) {
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++) {
@@ -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.safeNumber(trade, 1);
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.safeNumber(order, 'timestampms');
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.38";
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.39';
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>;
@@ -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, 'chainName');
2382
- const network = this.safeNetwork(chainName);
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 chainName = this.safeString(params, 'chainName');
2420
- params = this.omit(params, 'chainName');
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.safeValue(response, 'data', {});
2459
- const addresses = this.safeValue(data, 'address', []);
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 (chainName === undefined) {
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.safeValue(addressesByChainName, chainName, {});
2473
+ address = this.safeDict(addressesByChainName, networkId, {});
2470
2474
  }
2471
2475
  else {
2472
2476
  // first address
2473
- address = this.safeValue(addresses, 0, {});
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: any): any;
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: any, key1: any, key2: any, d?: any): number;
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: any, methodName: any, optionName: any, defaultValue?: any): any[];
792
- handleOptionAndParams2(params: any, methodName: any, methodName2: any, optionName: any, defaultValue?: any): any[];
793
- handleOption(methodName: any, optionName: any, defaultValue?: any): any;
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: any, market?: any, params?: {}, defaultValue?: any): any[];
796
- handleMarginModeAndParams(methodName: any, params?: {}, defaultValue?: any): any[];
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: any): any;
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;
@@ -3192,14 +3192,14 @@ export default class Exchange {
3192
3192
  }
3193
3193
  defaultNetworkCode(currencyCode) {
3194
3194
  let defaultNetworkCode = undefined;
3195
- const defaultNetworks = this.safeValue(this.options, 'defaultNetworks', {});
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.safeValue(this.options, 'defaultNetwork');
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.safeValue(this.options, 'warnOnFetchFundingFee', true);
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.safeValue(this.options, 'warnOnFetchFundingFees', true);
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.safeValue(borrowRates, symbol);
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.safeValue(this.options, methodName);
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(undefined, methodName, 'subType', defaultValue); // no need to re-test params here
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.safeValue(tickers, symbol);
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.safeValue(order, 'id'), this.safeValue(order, 'symbol'), params);
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.safeValue(order, 'id'), this.safeValue(order, 'symbol'), params);
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.safeValue2(params, 'trigger', 'stop');
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.safeValue2(params, 'postOnly', 'post_only', false);
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.safeValue(this.options, 'accountsByType', {});
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.safeValue2(params, 'until', 'till');
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']);
@@ -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>;