ccxt 4.2.84 → 4.2.85

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 (164) hide show
  1. package/README.md +3 -3
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +867 -904
  4. package/dist/ccxt.browser.min.js +4 -4
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/ace.js +5 -5
  7. package/dist/cjs/src/ascendex.js +8 -8
  8. package/dist/cjs/src/base/Exchange.js +76 -14
  9. package/dist/cjs/src/bigone.js +12 -12
  10. package/dist/cjs/src/binance.js +23 -35
  11. package/dist/cjs/src/bingx.js +13 -9
  12. package/dist/cjs/src/bit2c.js +1 -1
  13. package/dist/cjs/src/bitbank.js +8 -8
  14. package/dist/cjs/src/bitbns.js +5 -5
  15. package/dist/cjs/src/bitfinex.js +1 -1
  16. package/dist/cjs/src/bitfinex2.js +1 -1
  17. package/dist/cjs/src/bitget.js +30 -24
  18. package/dist/cjs/src/bithumb.js +5 -5
  19. package/dist/cjs/src/bitmart.js +16 -16
  20. package/dist/cjs/src/bitopro.js +1 -1
  21. package/dist/cjs/src/bitrue.js +4 -4
  22. package/dist/cjs/src/bitso.js +5 -5
  23. package/dist/cjs/src/bitstamp.js +1 -1
  24. package/dist/cjs/src/bitteam.js +8 -8
  25. package/dist/cjs/src/bl3p.js +1 -1
  26. package/dist/cjs/src/btcturk.js +6 -6
  27. package/dist/cjs/src/bybit.js +31 -95
  28. package/dist/cjs/src/coincheck.js +4 -4
  29. package/dist/cjs/src/coinex.js +11 -11
  30. package/dist/cjs/src/coinlist.js +7 -7
  31. package/dist/cjs/src/coinmate.js +4 -4
  32. package/dist/cjs/src/coinmetro.js +3 -3
  33. package/dist/cjs/src/coinone.js +5 -5
  34. package/dist/cjs/src/coinspot.js +2 -2
  35. package/dist/cjs/src/cryptocom.js +17 -17
  36. package/dist/cjs/src/currencycom.js +1 -1
  37. package/dist/cjs/src/delta.js +0 -8
  38. package/dist/cjs/src/deribit.js +16 -92
  39. package/dist/cjs/src/digifinex.js +8 -8
  40. package/dist/cjs/src/exmo.js +8 -8
  41. package/dist/cjs/src/gate.js +0 -8
  42. package/dist/cjs/src/hitbtc.js +5 -4
  43. package/dist/cjs/src/hollaex.js +7 -7
  44. package/dist/cjs/src/htx.js +7 -7
  45. package/dist/cjs/src/huobijp.js +3 -3
  46. package/dist/cjs/src/idex.js +2 -2
  47. package/dist/cjs/src/independentreserve.js +2 -2
  48. package/dist/cjs/src/indodax.js +2 -2
  49. package/dist/cjs/src/kraken.js +8 -8
  50. package/dist/cjs/src/krakenfutures.js +6 -6
  51. package/dist/cjs/src/kucoin.js +5 -1
  52. package/dist/cjs/src/kucoinfutures.js +8 -8
  53. package/dist/cjs/src/kuna.js +16 -16
  54. package/dist/cjs/src/latoken.js +2 -2
  55. package/dist/cjs/src/lbank.js +10 -10
  56. package/dist/cjs/src/luno.js +4 -4
  57. package/dist/cjs/src/mercado.js +5 -5
  58. package/dist/cjs/src/mexc.js +6 -6
  59. package/dist/cjs/src/ndax.js +1 -1
  60. package/dist/cjs/src/novadax.js +9 -9
  61. package/dist/cjs/src/oceanex.js +7 -7
  62. package/dist/cjs/src/okcoin.js +13 -13
  63. package/dist/cjs/src/okx.js +23 -31
  64. package/dist/cjs/src/onetrading.js +4 -4
  65. package/dist/cjs/src/p2b.js +7 -7
  66. package/dist/cjs/src/phemex.js +12 -12
  67. package/dist/cjs/src/poloniexfutures.js +5 -5
  68. package/dist/cjs/src/pro/binance.js +167 -121
  69. package/dist/cjs/src/pro/kucoin.js +6 -7
  70. package/dist/cjs/src/pro/okx.js +19 -2
  71. package/dist/cjs/src/probit.js +11 -11
  72. package/dist/cjs/src/timex.js +7 -7
  73. package/dist/cjs/src/tokocrypto.js +9 -9
  74. package/dist/cjs/src/wavesexchange.js +3 -3
  75. package/dist/cjs/src/whitebit.js +5 -5
  76. package/dist/cjs/src/woo.js +1 -1
  77. package/dist/cjs/src/zaif.js +1 -1
  78. package/dist/cjs/src/zonda.js +7 -7
  79. package/examples/js/cli.js +0 -1
  80. package/examples/ts/cli.ts +0 -1
  81. package/js/ccxt.d.ts +1 -1
  82. package/js/ccxt.js +1 -1
  83. package/js/src/ace.js +5 -5
  84. package/js/src/ascendex.js +8 -8
  85. package/js/src/base/Exchange.d.ts +4 -3
  86. package/js/src/base/Exchange.js +76 -14
  87. package/js/src/bigone.js +12 -12
  88. package/js/src/binance.d.ts +0 -1
  89. package/js/src/binance.js +23 -35
  90. package/js/src/bingx.js +13 -9
  91. package/js/src/bit2c.js +1 -1
  92. package/js/src/bitbank.js +8 -8
  93. package/js/src/bitbns.js +5 -5
  94. package/js/src/bitfinex.js +1 -1
  95. package/js/src/bitfinex2.js +1 -1
  96. package/js/src/bitget.js +30 -24
  97. package/js/src/bithumb.js +5 -5
  98. package/js/src/bitmart.js +16 -16
  99. package/js/src/bitopro.js +1 -1
  100. package/js/src/bitrue.js +4 -4
  101. package/js/src/bitso.js +5 -5
  102. package/js/src/bitstamp.js +1 -1
  103. package/js/src/bitteam.js +8 -8
  104. package/js/src/bl3p.js +1 -1
  105. package/js/src/btcturk.js +6 -6
  106. package/js/src/bybit.d.ts +0 -3
  107. package/js/src/bybit.js +31 -95
  108. package/js/src/coincheck.js +4 -4
  109. package/js/src/coinex.js +11 -11
  110. package/js/src/coinlist.js +7 -7
  111. package/js/src/coinmate.js +4 -4
  112. package/js/src/coinmetro.js +3 -3
  113. package/js/src/coinone.js +5 -5
  114. package/js/src/coinspot.js +2 -2
  115. package/js/src/cryptocom.js +17 -17
  116. package/js/src/currencycom.js +1 -1
  117. package/js/src/delta.d.ts +0 -1
  118. package/js/src/delta.js +0 -8
  119. package/js/src/deribit.d.ts +0 -3
  120. package/js/src/deribit.js +16 -92
  121. package/js/src/digifinex.js +8 -8
  122. package/js/src/exmo.js +8 -8
  123. package/js/src/gate.d.ts +0 -1
  124. package/js/src/gate.js +0 -8
  125. package/js/src/hitbtc.js +5 -4
  126. package/js/src/hollaex.js +7 -7
  127. package/js/src/htx.js +7 -7
  128. package/js/src/huobijp.js +3 -3
  129. package/js/src/idex.js +2 -2
  130. package/js/src/independentreserve.js +2 -2
  131. package/js/src/indodax.js +2 -2
  132. package/js/src/kraken.js +8 -8
  133. package/js/src/krakenfutures.js +6 -6
  134. package/js/src/kucoin.js +5 -1
  135. package/js/src/kucoinfutures.js +8 -8
  136. package/js/src/kuna.js +16 -16
  137. package/js/src/latoken.js +2 -2
  138. package/js/src/lbank.js +10 -10
  139. package/js/src/luno.js +4 -4
  140. package/js/src/mercado.js +5 -5
  141. package/js/src/mexc.js +6 -6
  142. package/js/src/ndax.js +1 -1
  143. package/js/src/novadax.js +9 -9
  144. package/js/src/oceanex.js +7 -7
  145. package/js/src/okcoin.js +13 -13
  146. package/js/src/okx.d.ts +0 -1
  147. package/js/src/okx.js +23 -31
  148. package/js/src/onetrading.js +4 -4
  149. package/js/src/p2b.js +7 -7
  150. package/js/src/phemex.js +12 -12
  151. package/js/src/poloniexfutures.js +5 -5
  152. package/js/src/pro/binance.d.ts +5 -1
  153. package/js/src/pro/binance.js +168 -122
  154. package/js/src/pro/kucoin.js +6 -7
  155. package/js/src/pro/okx.js +19 -2
  156. package/js/src/probit.js +11 -11
  157. package/js/src/timex.js +7 -7
  158. package/js/src/tokocrypto.js +9 -9
  159. package/js/src/wavesexchange.js +3 -3
  160. package/js/src/whitebit.js +5 -5
  161. package/js/src/woo.js +1 -1
  162. package/js/src/zaif.js +1 -1
  163. package/js/src/zonda.js +7 -7
  164. package/package.json +1 -1
@@ -3888,20 +3888,6 @@ export default class Exchange {
3888
3888
  async fetchStatus(params = {}) {
3889
3889
  throw new NotSupported(this.id + ' fetchStatus() is not supported yet');
3890
3890
  }
3891
- async fetchFundingFee(code, params = {}) {
3892
- const warnOnFetchFundingFee = this.safeBool(this.options, 'warnOnFetchFundingFee', true);
3893
- if (warnOnFetchFundingFee) {
3894
- 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');
3895
- }
3896
- return await this.fetchTransactionFee(code, params);
3897
- }
3898
- async fetchFundingFees(codes = undefined, params = {}) {
3899
- const warnOnFetchFundingFees = this.safeBool(this.options, 'warnOnFetchFundingFees', true);
3900
- if (warnOnFetchFundingFees) {
3901
- 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');
3902
- }
3903
- return await this.fetchTransactionFees(codes, params);
3904
- }
3905
3891
  async fetchTransactionFee(code, params = {}) {
3906
3892
  if (!this.has['fetchTransactionFees']) {
3907
3893
  throw new NotSupported(this.id + ' fetchTransactionFee() is not supported yet');
@@ -5707,5 +5693,81 @@ export default class Exchange {
5707
5693
  parseLeverage(leverage, market = undefined) {
5708
5694
  throw new NotSupported(this.id + ' parseLeverage() is not supported yet');
5709
5695
  }
5696
+ convertExpireDate(date) {
5697
+ // parse YYMMDD to datetime string
5698
+ const year = date.slice(0, 2);
5699
+ const month = date.slice(2, 4);
5700
+ const day = date.slice(4, 6);
5701
+ const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';
5702
+ return reconstructedDate;
5703
+ }
5704
+ convertExpireDateToMarketIdDate(date) {
5705
+ // parse 240119 to 19JAN24
5706
+ const year = date.slice(0, 2);
5707
+ const monthRaw = date.slice(2, 4);
5708
+ let month = undefined;
5709
+ const day = date.slice(4, 6);
5710
+ if (monthRaw === '01') {
5711
+ month = 'JAN';
5712
+ }
5713
+ else if (monthRaw === '02') {
5714
+ month = 'FEB';
5715
+ }
5716
+ else if (monthRaw === '03') {
5717
+ month = 'MAR';
5718
+ }
5719
+ else if (monthRaw === '04') {
5720
+ month = 'APR';
5721
+ }
5722
+ else if (monthRaw === '05') {
5723
+ month = 'MAY';
5724
+ }
5725
+ else if (monthRaw === '06') {
5726
+ month = 'JUN';
5727
+ }
5728
+ else if (monthRaw === '07') {
5729
+ month = 'JUL';
5730
+ }
5731
+ else if (monthRaw === '08') {
5732
+ month = 'AUG';
5733
+ }
5734
+ else if (monthRaw === '09') {
5735
+ month = 'SEP';
5736
+ }
5737
+ else if (monthRaw === '10') {
5738
+ month = 'OCT';
5739
+ }
5740
+ else if (monthRaw === '11') {
5741
+ month = 'NOV';
5742
+ }
5743
+ else if (monthRaw === '12') {
5744
+ month = 'DEC';
5745
+ }
5746
+ const reconstructedDate = day + month + year;
5747
+ return reconstructedDate;
5748
+ }
5749
+ convertMarketIdExpireDate(date) {
5750
+ // parse 19JAN24 to 240119
5751
+ const monthMappping = {
5752
+ 'JAN': '01',
5753
+ 'FEB': '02',
5754
+ 'MAR': '03',
5755
+ 'APR': '04',
5756
+ 'MAY': '05',
5757
+ 'JUN': '06',
5758
+ 'JUL': '07',
5759
+ 'AUG': '08',
5760
+ 'SEP': '09',
5761
+ 'OCT': '10',
5762
+ 'NOV': '11',
5763
+ 'DEC': '12',
5764
+ };
5765
+ const year = date.slice(0, 2);
5766
+ const monthName = date.slice(2, 5);
5767
+ const month = this.safeString(monthMappping, monthName);
5768
+ const day = date.slice(5, 7);
5769
+ const reconstructedDate = day + month + year;
5770
+ return reconstructedDate;
5771
+ }
5710
5772
  }
5711
5773
  export { Exchange, };
package/js/src/bigone.js CHANGED
@@ -814,7 +814,7 @@ export default class bigone extends Exchange {
814
814
  // }
815
815
  // }
816
816
  //
817
- const ticker = this.safeValue(response, 'data', {});
817
+ const ticker = this.safeDict(response, 'data', {});
818
818
  return this.parseTicker(ticker, market);
819
819
  }
820
820
  else {
@@ -1001,7 +1001,7 @@ export default class bigone extends Exchange {
1001
1001
  // }
1002
1002
  // }
1003
1003
  //
1004
- const orderbook = this.safeValue(response, 'data', {});
1004
+ const orderbook = this.safeDict(response, 'data', {});
1005
1005
  return this.parseOrderBook(orderbook, market['symbol'], undefined, 'bids', 'asks', 'price', 'quantity');
1006
1006
  }
1007
1007
  }
@@ -1216,7 +1216,7 @@ export default class bigone extends Exchange {
1216
1216
  // ]
1217
1217
  // }
1218
1218
  //
1219
- const trades = this.safeValue(response, 'data', []);
1219
+ const trades = this.safeList(response, 'data', []);
1220
1220
  return this.parseTrades(trades, market, since, limit);
1221
1221
  }
1222
1222
  parseOHLCV(ohlcv, market = undefined) {
@@ -1295,7 +1295,7 @@ export default class bigone extends Exchange {
1295
1295
  // ]
1296
1296
  // }
1297
1297
  //
1298
- const data = this.safeValue(response, 'data', []);
1298
+ const data = this.safeList(response, 'data', []);
1299
1299
  return this.parseOHLCVs(data, market, timeframe, since, limit);
1300
1300
  }
1301
1301
  parseBalance(response) {
@@ -1564,7 +1564,7 @@ export default class bigone extends Exchange {
1564
1564
  // "updated_at":"2019-01-29T06:05:56Z"
1565
1565
  // }
1566
1566
  //
1567
- const order = this.safeValue(response, 'data');
1567
+ const order = this.safeDict(response, 'data');
1568
1568
  return this.parseOrder(order, market);
1569
1569
  }
1570
1570
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -1593,7 +1593,7 @@ export default class bigone extends Exchange {
1593
1593
  // "created_at":"2019-01-29T06:05:56Z",
1594
1594
  // "updated_at":"2019-01-29T06:05:56Z"
1595
1595
  // }
1596
- const order = this.safeValue(response, 'data');
1596
+ const order = this.safeDict(response, 'data');
1597
1597
  return this.parseOrder(order);
1598
1598
  }
1599
1599
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -1639,7 +1639,7 @@ export default class bigone extends Exchange {
1639
1639
  await this.loadMarkets();
1640
1640
  const request = { 'id': id };
1641
1641
  const response = await this.privateGetOrdersId(this.extend(request, params));
1642
- const order = this.safeValue(response, 'data', {});
1642
+ const order = this.safeDict(response, 'data', {});
1643
1643
  return this.parseOrder(order);
1644
1644
  }
1645
1645
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1690,7 +1690,7 @@ export default class bigone extends Exchange {
1690
1690
  // "page_token":"dxzef",
1691
1691
  // }
1692
1692
  //
1693
- const orders = this.safeValue(response, 'data', []);
1693
+ const orders = this.safeList(response, 'data', []);
1694
1694
  return this.parseOrders(orders, market, since, limit);
1695
1695
  }
1696
1696
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1752,7 +1752,7 @@ export default class bigone extends Exchange {
1752
1752
  // "page_token":"dxfv"
1753
1753
  // }
1754
1754
  //
1755
- const trades = this.safeValue(response, 'data', []);
1755
+ const trades = this.safeList(response, 'data', []);
1756
1756
  return this.parseTrades(trades, market, since, limit);
1757
1757
  }
1758
1758
  parseOrderStatus(status) {
@@ -2035,7 +2035,7 @@ export default class bigone extends Exchange {
2035
2035
  // ]
2036
2036
  // }
2037
2037
  //
2038
- const deposits = this.safeValue(response, 'data', []);
2038
+ const deposits = this.safeList(response, 'data', []);
2039
2039
  return this.parseTransactions(deposits, currency, since, limit);
2040
2040
  }
2041
2041
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2087,7 +2087,7 @@ export default class bigone extends Exchange {
2087
2087
  // "page_token":"dxvf"
2088
2088
  // }
2089
2089
  //
2090
- const withdrawals = this.safeValue(response, 'data', []);
2090
+ const withdrawals = this.safeList(response, 'data', []);
2091
2091
  return this.parseTransactions(withdrawals, currency, since, limit);
2092
2092
  }
2093
2093
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -2214,7 +2214,7 @@ export default class bigone extends Exchange {
2214
2214
  // }
2215
2215
  // }
2216
2216
  //
2217
- const data = this.safeValue(response, 'data', {});
2217
+ const data = this.safeDict(response, 'data', {});
2218
2218
  return this.parseTransaction(data, currency);
2219
2219
  }
2220
2220
  handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
@@ -9,7 +9,6 @@ export default class binance extends Exchange {
9
9
  isInverse(type: string, subType?: Str): boolean;
10
10
  isLinear(type: string, subType?: Str): boolean;
11
11
  setSandboxMode(enable: boolean): void;
12
- convertExpireDate(date: any): string;
13
12
  createExpiredOptionMarket(symbol: string): MarketInterface;
14
13
  market(symbol: string): MarketInterface;
15
14
  safeMarket(marketId?: Str, market?: Market, delimiter?: Str, marketType?: Str): MarketInterface;
package/js/src/binance.js CHANGED
@@ -2425,14 +2425,6 @@ export default class binance extends Exchange {
2425
2425
  super.setSandboxMode(enable);
2426
2426
  this.options['sandboxMode'] = enable;
2427
2427
  }
2428
- convertExpireDate(date) {
2429
- // parse YYMMDD to timestamp
2430
- const year = date.slice(0, 2);
2431
- const month = date.slice(2, 4);
2432
- const day = date.slice(4, 6);
2433
- const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';
2434
- return reconstructedDate;
2435
- }
2436
2428
  createExpiredOptionMarket(symbol) {
2437
2429
  // support expired option contracts
2438
2430
  const settle = 'USDT';
@@ -3969,16 +3961,12 @@ export default class binance extends Exchange {
3969
3961
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
3970
3962
  */
3971
3963
  await this.loadMarkets();
3972
- symbols = this.marketSymbols(symbols);
3973
- let market = undefined;
3974
- if (symbols !== undefined) {
3975
- const first = this.safeString(symbols, 0);
3976
- market = this.market(first);
3977
- }
3964
+ symbols = this.marketSymbols(symbols, undefined, true, true, true);
3965
+ const market = this.getMarketFromSymbols(symbols);
3978
3966
  let type = undefined;
3967
+ [type, params] = this.handleMarketTypeAndParams('fetchBidsAsks', market, params);
3979
3968
  let subType = undefined;
3980
3969
  [subType, params] = this.handleSubTypeAndParams('fetchBidsAsks', market, params);
3981
- [type, params] = this.handleMarketTypeAndParams('fetchBidsAsks', market, params);
3982
3970
  let response = undefined;
3983
3971
  if (this.isLinear(type, subType)) {
3984
3972
  response = await this.fapiPublicGetTickerBookTicker(params);
@@ -3986,14 +3974,16 @@ export default class binance extends Exchange {
3986
3974
  else if (this.isInverse(type, subType)) {
3987
3975
  response = await this.dapiPublicGetTickerBookTicker(params);
3988
3976
  }
3989
- else {
3977
+ else if (type === 'spot') {
3990
3978
  const request = {};
3991
3979
  if (symbols !== undefined) {
3992
- const marketIds = this.marketIds(symbols);
3993
- request['symbols'] = this.json(marketIds);
3980
+ request['symbols'] = this.json(this.marketIds(symbols));
3994
3981
  }
3995
3982
  response = await this.publicGetTickerBookTicker(this.extend(request, params));
3996
3983
  }
3984
+ else {
3985
+ throw new NotSupported(this.id + ' fetchBidsAsks() does not support ' + type + ' markets yet');
3986
+ }
3997
3987
  return this.parseTickers(response, symbols);
3998
3988
  }
3999
3989
  async fetchLastPrices(symbols = undefined, params = {}) {
@@ -4010,12 +4000,12 @@ export default class binance extends Exchange {
4010
4000
  * @returns {object} a dictionary of lastprices structures
4011
4001
  */
4012
4002
  await this.loadMarkets();
4013
- symbols = this.marketSymbols(symbols);
4003
+ symbols = this.marketSymbols(symbols, undefined, true, true, true);
4014
4004
  const market = this.getMarketFromSymbols(symbols);
4015
4005
  let type = undefined;
4006
+ [type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
4016
4007
  let subType = undefined;
4017
4008
  [subType, params] = this.handleSubTypeAndParams('fetchLastPrices', market, params);
4018
- [type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
4019
4009
  let response = undefined;
4020
4010
  if (this.isLinear(type, subType)) {
4021
4011
  response = await this.fapiPublicV2GetTickerPrice(params);
@@ -4116,34 +4106,32 @@ export default class binance extends Exchange {
4116
4106
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
4117
4107
  */
4118
4108
  await this.loadMarkets();
4119
- let type = undefined;
4120
- let market = undefined;
4121
4109
  symbols = this.marketSymbols(symbols, undefined, true, true, true);
4122
- if (symbols !== undefined) {
4123
- const first = this.safeString(symbols, 0);
4124
- market = this.market(first);
4125
- }
4110
+ const market = this.getMarketFromSymbols(symbols);
4111
+ let type = undefined;
4126
4112
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
4127
4113
  let subType = undefined;
4128
4114
  [subType, params] = this.handleSubTypeAndParams('fetchTickers', market, params);
4129
4115
  let response = undefined;
4130
- if (type === 'option') {
4131
- response = await this.eapiPublicGetTicker(params);
4132
- }
4133
- else if (this.isLinear(type, subType)) {
4116
+ if (this.isLinear(type, subType)) {
4134
4117
  response = await this.fapiPublicGetTicker24hr(params);
4135
4118
  }
4136
4119
  else if (this.isInverse(type, subType)) {
4137
4120
  response = await this.dapiPublicGetTicker24hr(params);
4138
4121
  }
4139
- else {
4122
+ else if (type === 'spot') {
4140
4123
  const request = {};
4141
4124
  if (symbols !== undefined) {
4142
- const marketIds = this.marketIds(symbols);
4143
- request['symbols'] = this.json(marketIds);
4125
+ request['symbols'] = this.json(this.marketIds(symbols));
4144
4126
  }
4145
4127
  response = await this.publicGetTicker24hr(this.extend(request, params));
4146
4128
  }
4129
+ else if (type === 'option') {
4130
+ response = await this.eapiPublicGetTicker(params);
4131
+ }
4132
+ else {
4133
+ throw new NotSupported(this.id + ' fetchTickers() does not support ' + type + ' markets yet');
4134
+ }
4147
4135
  return this.parseTickers(response, symbols);
4148
4136
  }
4149
4137
  parseOHLCV(ohlcv, market = undefined) {
@@ -4810,7 +4798,7 @@ export default class binance extends Exchange {
4810
4798
  // }
4811
4799
  // }
4812
4800
  //
4813
- const data = this.safeValue(response, 'newOrderResponse');
4801
+ const data = this.safeDict(response, 'newOrderResponse');
4814
4802
  return this.parseOrder(data, market);
4815
4803
  }
4816
4804
  editSpotOrderRequest(id, symbol, type, side, amount, price = undefined, params = {}) {
@@ -12400,7 +12388,7 @@ export default class binance extends Exchange {
12400
12388
  else {
12401
12389
  throw new BadRequest(this.id + ' fetchMarginModes () supports linear and inverse subTypes only');
12402
12390
  }
12403
- const assets = this.safeValue(response, 'positions', []);
12391
+ const assets = this.safeList(response, 'positions', []);
12404
12392
  return this.parseMarginModes(assets, symbols, 'symbol', 'swap');
12405
12393
  }
12406
12394
  parseMarginMode(marginMode, market = undefined) {
package/js/src/bingx.js CHANGED
@@ -1387,9 +1387,13 @@ export default class bingx extends Exchange {
1387
1387
  else {
1388
1388
  response = await this.swapV2PublicGetQuoteTicker(this.extend(request, params));
1389
1389
  }
1390
- const data = this.safeValue(response, 'data');
1391
- const ticker = this.safeValue(data, 0, data);
1392
- return this.parseTicker(ticker, market);
1390
+ const data = this.safeList(response, 'data');
1391
+ if (data !== undefined) {
1392
+ const first = this.safeDict(data, 0, {});
1393
+ return this.parseTicker(first, market);
1394
+ }
1395
+ const dataDict = this.safeDict(response, 'data', {});
1396
+ return this.parseTicker(dataDict, market);
1393
1397
  }
1394
1398
  async fetchTickers(symbols = undefined, params = {}) {
1395
1399
  /**
@@ -1419,7 +1423,7 @@ export default class bingx extends Exchange {
1419
1423
  else {
1420
1424
  response = await this.swapV2PublicGetQuoteTicker(params);
1421
1425
  }
1422
- const tickers = this.safeValue(response, 'data');
1426
+ const tickers = this.safeList(response, 'data');
1423
1427
  return this.parseTickers(tickers, symbols);
1424
1428
  }
1425
1429
  parseTicker(ticker, market = undefined) {
@@ -2065,7 +2069,7 @@ export default class bingx extends Exchange {
2065
2069
  response = this.parseJson(response);
2066
2070
  }
2067
2071
  const data = this.safeValue(response, 'data', {});
2068
- const order = this.safeValue(data, 'order', data);
2072
+ const order = this.safeDict(data, 'order', data);
2069
2073
  return this.parseOrder(order, market);
2070
2074
  }
2071
2075
  async createOrders(orders, params = {}) {
@@ -2562,7 +2566,7 @@ export default class bingx extends Exchange {
2562
2566
  // }
2563
2567
  //
2564
2568
  const data = this.safeValue(response, 'data');
2565
- const first = this.safeValue(data, 'order', data);
2569
+ const first = this.safeDict(data, 'order', data);
2566
2570
  return this.parseOrder(first, market);
2567
2571
  }
2568
2572
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -2807,7 +2811,7 @@ export default class bingx extends Exchange {
2807
2811
  // }
2808
2812
  //
2809
2813
  const data = this.safeValue(response, 'data');
2810
- const first = this.safeValue(data, 'order', data);
2814
+ const first = this.safeDict(data, 'order', data);
2811
2815
  return this.parseOrder(first, market);
2812
2816
  }
2813
2817
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2990,7 +2994,7 @@ export default class bingx extends Exchange {
2990
2994
  // }
2991
2995
  //
2992
2996
  const data = this.safeValue(response, 'data', []);
2993
- const orders = this.safeValue(data, 'orders', []);
2997
+ const orders = this.safeList(data, 'orders', []);
2994
2998
  return this.parseOrders(orders, market, since, limit);
2995
2999
  }
2996
3000
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -3734,7 +3738,7 @@ export default class bingx extends Exchange {
3734
3738
  */
3735
3739
  await this.loadMarkets();
3736
3740
  const response = await this.walletsV1PrivateGetCapitalConfigGetall(params);
3737
- const coins = this.safeValue(response, 'data');
3741
+ const coins = this.safeList(response, 'data');
3738
3742
  return this.parseDepositWithdrawFees(coins, codes, 'coin');
3739
3743
  }
3740
3744
  async withdraw(code, amount, address, tag = undefined, params = {}) {
package/js/src/bit2c.js CHANGED
@@ -492,7 +492,7 @@ export default class bit2c extends Exchange {
492
492
  const response = await this.privateGetOrderMyOrders(this.extend(request, params));
493
493
  const orders = this.safeValue(response, market['id'], {});
494
494
  const asks = this.safeValue(orders, 'ask', []);
495
- const bids = this.safeValue(orders, 'bid', []);
495
+ const bids = this.safeList(orders, 'bid', []);
496
496
  return this.parseOrders(this.arrayConcat(asks, bids), market, since, limit);
497
497
  }
498
498
  async fetchOrder(id, symbol = undefined, params = {}) {
package/js/src/bitbank.js CHANGED
@@ -301,7 +301,7 @@ export default class bitbank extends Exchange {
301
301
  'pair': market['id'],
302
302
  };
303
303
  const response = await this.publicGetPairTicker(this.extend(request, params));
304
- const data = this.safeValue(response, 'data', {});
304
+ const data = this.safeDict(response, 'data', {});
305
305
  return this.parseTicker(data, market);
306
306
  }
307
307
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
@@ -389,7 +389,7 @@ export default class bitbank extends Exchange {
389
389
  };
390
390
  const response = await this.publicGetPairTransactions(this.extend(request, params));
391
391
  const data = this.safeValue(response, 'data', {});
392
- const trades = this.safeValue(data, 'transactions', []);
392
+ const trades = this.safeList(data, 'transactions', []);
393
393
  return this.parseTrades(trades, market, since, limit);
394
394
  }
395
395
  async fetchTradingFees(params = {}) {
@@ -519,7 +519,7 @@ export default class bitbank extends Exchange {
519
519
  const data = this.safeValue(response, 'data', {});
520
520
  const candlestick = this.safeValue(data, 'candlestick', []);
521
521
  const first = this.safeValue(candlestick, 0, {});
522
- const ohlcv = this.safeValue(first, 'ohlcv', []);
522
+ const ohlcv = this.safeList(first, 'ohlcv', []);
523
523
  return this.parseOHLCVs(ohlcv, market, timeframe, since, limit);
524
524
  }
525
525
  parseBalance(response) {
@@ -662,7 +662,7 @@ export default class bitbank extends Exchange {
662
662
  request['price'] = this.priceToPrecision(symbol, price);
663
663
  }
664
664
  const response = await this.privatePostUserSpotOrder(this.extend(request, params));
665
- const data = this.safeValue(response, 'data');
665
+ const data = this.safeDict(response, 'data');
666
666
  return this.parseOrder(data, market);
667
667
  }
668
668
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -703,7 +703,7 @@ export default class bitbank extends Exchange {
703
703
  'pair': market['id'],
704
704
  };
705
705
  const response = await this.privateGetUserSpotOrder(this.extend(request, params));
706
- const data = this.safeValue(response, 'data');
706
+ const data = this.safeDict(response, 'data');
707
707
  return this.parseOrder(data, market);
708
708
  }
709
709
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -731,7 +731,7 @@ export default class bitbank extends Exchange {
731
731
  }
732
732
  const response = await this.privateGetUserSpotActiveOrders(this.extend(request, params));
733
733
  const data = this.safeValue(response, 'data', {});
734
- const orders = this.safeValue(data, 'orders', []);
734
+ const orders = this.safeList(data, 'orders', []);
735
735
  return this.parseOrders(orders, market, since, limit);
736
736
  }
737
737
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -761,7 +761,7 @@ export default class bitbank extends Exchange {
761
761
  }
762
762
  const response = await this.privateGetUserSpotTradeHistory(this.extend(request, params));
763
763
  const data = this.safeValue(response, 'data', {});
764
- const trades = this.safeValue(data, 'trades', []);
764
+ const trades = this.safeList(data, 'trades', []);
765
765
  return this.parseTrades(trades, market, since, limit);
766
766
  }
767
767
  async fetchDepositAddress(code, params = {}) {
@@ -834,7 +834,7 @@ export default class bitbank extends Exchange {
834
834
  // }
835
835
  // }
836
836
  //
837
- const data = this.safeValue(response, 'data', {});
837
+ const data = this.safeDict(response, 'data', {});
838
838
  return this.parseTransaction(data, currency);
839
839
  }
840
840
  parseTransaction(transaction, currency = undefined) {
package/js/src/bitbns.js CHANGED
@@ -725,7 +725,7 @@ export default class bitbns extends Exchange {
725
725
  // }
726
726
  //
727
727
  const data = this.safeValue(response, 'data', []);
728
- const first = this.safeValue(data, 0);
728
+ const first = this.safeDict(data, 0);
729
729
  return this.parseOrder(first, market);
730
730
  }
731
731
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -776,7 +776,7 @@ export default class bitbns extends Exchange {
776
776
  // "code":200
777
777
  // }
778
778
  //
779
- const data = this.safeValue(response, 'data', []);
779
+ const data = this.safeList(response, 'data', []);
780
780
  return this.parseOrders(data, market, since, limit);
781
781
  }
782
782
  parseTrade(trade, market = undefined) {
@@ -926,7 +926,7 @@ export default class bitbns extends Exchange {
926
926
  // "code": 200
927
927
  // }
928
928
  //
929
- const data = this.safeValue(response, 'data', []);
929
+ const data = this.safeList(response, 'data', []);
930
930
  return this.parseTrades(data, market, since, limit);
931
931
  }
932
932
  async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
@@ -1003,7 +1003,7 @@ export default class bitbns extends Exchange {
1003
1003
  // "code":200
1004
1004
  // }
1005
1005
  //
1006
- const data = this.safeValue(response, 'data', []);
1006
+ const data = this.safeList(response, 'data', []);
1007
1007
  return this.parseTransactions(data, currency, since, limit);
1008
1008
  }
1009
1009
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1030,7 +1030,7 @@ export default class bitbns extends Exchange {
1030
1030
  //
1031
1031
  // ...
1032
1032
  //
1033
- const data = this.safeValue(response, 'data', []);
1033
+ const data = this.safeList(response, 'data', []);
1034
1034
  return this.parseTransactions(data, currency, since, limit);
1035
1035
  }
1036
1036
  parseTransactionStatusByType(status, type = undefined) {
@@ -453,7 +453,7 @@ export default class bitfinex extends Exchange {
453
453
  // }
454
454
  // }
455
455
  //
456
- const withdraw = this.safeValue(response, 'withdraw');
456
+ const withdraw = this.safeList(response, 'withdraw');
457
457
  return this.parseDepositWithdrawFees(withdraw, codes);
458
458
  }
459
459
  parseDepositWithdrawFee(fee, currency = undefined) {
@@ -1785,7 +1785,7 @@ export default class bitfinex2 extends Exchange {
1785
1785
  'all': 1,
1786
1786
  };
1787
1787
  const response = await this.privatePostAuthWOrderCancelMulti(this.extend(request, params));
1788
- const orders = this.safeValue(response, 4, []);
1788
+ const orders = this.safeList(response, 4, []);
1789
1789
  return this.parseOrders(orders);
1790
1790
  }
1791
1791
  async cancelOrder(id, symbol = undefined, params = {}) {