ccxt 4.2.84 → 4.2.86

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 (168) hide show
  1. package/README.md +5 -5
  2. package/dist/ccxt.browser.js +1226 -1104
  3. package/dist/ccxt.browser.min.js +4 -4
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/ace.js +5 -5
  6. package/dist/cjs/src/ascendex.js +8 -8
  7. package/dist/cjs/src/base/Exchange.js +76 -14
  8. package/dist/cjs/src/bigone.js +12 -12
  9. package/dist/cjs/src/binance.js +23 -35
  10. package/dist/cjs/src/bingx.js +47 -28
  11. package/dist/cjs/src/bit2c.js +1 -1
  12. package/dist/cjs/src/bitbank.js +27 -31
  13. package/dist/cjs/src/bitbns.js +5 -5
  14. package/dist/cjs/src/bitfinex.js +1 -1
  15. package/dist/cjs/src/bitfinex2.js +1 -1
  16. package/dist/cjs/src/bitget.js +30 -24
  17. package/dist/cjs/src/bithumb.js +5 -5
  18. package/dist/cjs/src/bitmart.js +16 -16
  19. package/dist/cjs/src/bitopro.js +1 -1
  20. package/dist/cjs/src/bitrue.js +4 -4
  21. package/dist/cjs/src/bitso.js +5 -5
  22. package/dist/cjs/src/bitstamp.js +1 -1
  23. package/dist/cjs/src/bitteam.js +8 -8
  24. package/dist/cjs/src/bl3p.js +1 -1
  25. package/dist/cjs/src/btcturk.js +6 -6
  26. package/dist/cjs/src/bybit.js +31 -95
  27. package/dist/cjs/src/coincheck.js +4 -4
  28. package/dist/cjs/src/coinex.js +408 -262
  29. package/dist/cjs/src/coinlist.js +7 -7
  30. package/dist/cjs/src/coinmate.js +4 -4
  31. package/dist/cjs/src/coinmetro.js +3 -3
  32. package/dist/cjs/src/coinone.js +5 -5
  33. package/dist/cjs/src/coinspot.js +2 -2
  34. package/dist/cjs/src/cryptocom.js +17 -17
  35. package/dist/cjs/src/currencycom.js +1 -1
  36. package/dist/cjs/src/delta.js +0 -8
  37. package/dist/cjs/src/deribit.js +16 -92
  38. package/dist/cjs/src/digifinex.js +8 -8
  39. package/dist/cjs/src/exmo.js +8 -8
  40. package/dist/cjs/src/gate.js +0 -8
  41. package/dist/cjs/src/hitbtc.js +5 -4
  42. package/dist/cjs/src/hollaex.js +7 -7
  43. package/dist/cjs/src/htx.js +7 -7
  44. package/dist/cjs/src/huobijp.js +3 -3
  45. package/dist/cjs/src/idex.js +12 -13
  46. package/dist/cjs/src/independentreserve.js +2 -2
  47. package/dist/cjs/src/indodax.js +2 -2
  48. package/dist/cjs/src/kraken.js +8 -8
  49. package/dist/cjs/src/krakenfutures.js +6 -6
  50. package/dist/cjs/src/kucoin.js +5 -1
  51. package/dist/cjs/src/kucoinfutures.js +8 -8
  52. package/dist/cjs/src/kuna.js +16 -16
  53. package/dist/cjs/src/latoken.js +2 -2
  54. package/dist/cjs/src/lbank.js +10 -10
  55. package/dist/cjs/src/luno.js +4 -4
  56. package/dist/cjs/src/mercado.js +5 -5
  57. package/dist/cjs/src/mexc.js +6 -6
  58. package/dist/cjs/src/ndax.js +1 -1
  59. package/dist/cjs/src/novadax.js +9 -9
  60. package/dist/cjs/src/oceanex.js +7 -7
  61. package/dist/cjs/src/okcoin.js +16 -14
  62. package/dist/cjs/src/okx.js +23 -31
  63. package/dist/cjs/src/onetrading.js +4 -4
  64. package/dist/cjs/src/p2b.js +7 -7
  65. package/dist/cjs/src/phemex.js +12 -12
  66. package/dist/cjs/src/poloniexfutures.js +5 -5
  67. package/dist/cjs/src/pro/binance.js +167 -121
  68. package/dist/cjs/src/pro/bitget.js +1 -0
  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/abstract/coinex.d.ts +232 -123
  84. package/js/src/ace.js +5 -5
  85. package/js/src/ascendex.js +8 -8
  86. package/js/src/base/Exchange.d.ts +13 -12
  87. package/js/src/base/Exchange.js +76 -14
  88. package/js/src/bigone.js +12 -12
  89. package/js/src/binance.d.ts +0 -1
  90. package/js/src/binance.js +23 -35
  91. package/js/src/bingx.js +47 -28
  92. package/js/src/bit2c.js +1 -1
  93. package/js/src/bitbank.js +27 -31
  94. package/js/src/bitbns.js +5 -5
  95. package/js/src/bitfinex.js +1 -1
  96. package/js/src/bitfinex2.js +1 -1
  97. package/js/src/bitget.js +30 -24
  98. package/js/src/bithumb.js +5 -5
  99. package/js/src/bitmart.js +16 -16
  100. package/js/src/bitopro.js +1 -1
  101. package/js/src/bitrue.js +4 -4
  102. package/js/src/bitso.js +5 -5
  103. package/js/src/bitstamp.js +1 -1
  104. package/js/src/bitteam.js +8 -8
  105. package/js/src/bl3p.js +1 -1
  106. package/js/src/btcturk.js +6 -6
  107. package/js/src/bybit.d.ts +0 -3
  108. package/js/src/bybit.js +31 -95
  109. package/js/src/coincheck.js +4 -4
  110. package/js/src/coinex.d.ts +1 -1
  111. package/js/src/coinex.js +408 -262
  112. package/js/src/coinlist.js +7 -7
  113. package/js/src/coinmate.js +4 -4
  114. package/js/src/coinmetro.js +3 -3
  115. package/js/src/coinone.js +5 -5
  116. package/js/src/coinspot.js +2 -2
  117. package/js/src/cryptocom.js +17 -17
  118. package/js/src/currencycom.js +1 -1
  119. package/js/src/delta.d.ts +0 -1
  120. package/js/src/delta.js +0 -8
  121. package/js/src/deribit.d.ts +0 -3
  122. package/js/src/deribit.js +16 -92
  123. package/js/src/digifinex.js +8 -8
  124. package/js/src/exmo.js +8 -8
  125. package/js/src/gate.d.ts +0 -1
  126. package/js/src/gate.js +0 -8
  127. package/js/src/hitbtc.js +5 -4
  128. package/js/src/hollaex.js +7 -7
  129. package/js/src/htx.js +7 -7
  130. package/js/src/huobijp.js +3 -3
  131. package/js/src/idex.js +12 -13
  132. package/js/src/independentreserve.js +2 -2
  133. package/js/src/indodax.js +2 -2
  134. package/js/src/kraken.js +8 -8
  135. package/js/src/krakenfutures.js +6 -6
  136. package/js/src/kucoin.js +5 -1
  137. package/js/src/kucoinfutures.js +8 -8
  138. package/js/src/kuna.js +16 -16
  139. package/js/src/latoken.js +2 -2
  140. package/js/src/lbank.js +10 -10
  141. package/js/src/luno.js +4 -4
  142. package/js/src/mercado.js +5 -5
  143. package/js/src/mexc.js +6 -6
  144. package/js/src/ndax.js +1 -1
  145. package/js/src/novadax.js +9 -9
  146. package/js/src/oceanex.js +7 -7
  147. package/js/src/okcoin.js +16 -14
  148. package/js/src/okx.d.ts +0 -1
  149. package/js/src/okx.js +23 -31
  150. package/js/src/onetrading.js +4 -4
  151. package/js/src/p2b.js +7 -7
  152. package/js/src/phemex.js +12 -12
  153. package/js/src/poloniexfutures.js +5 -5
  154. package/js/src/pro/binance.d.ts +5 -1
  155. package/js/src/pro/binance.js +168 -122
  156. package/js/src/pro/bitget.js +1 -0
  157. package/js/src/pro/kucoin.js +6 -7
  158. package/js/src/pro/okx.js +19 -2
  159. package/js/src/probit.js +11 -11
  160. package/js/src/timex.js +7 -7
  161. package/js/src/tokocrypto.js +9 -9
  162. package/js/src/wavesexchange.js +3 -3
  163. package/js/src/whitebit.js +5 -5
  164. package/js/src/woo.js +1 -1
  165. package/js/src/zaif.js +1 -1
  166. package/js/src/zonda.js +7 -7
  167. package/package.json +1 -1
  168. package/skip-tests.json +4 -0
@@ -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
@@ -632,7 +632,7 @@ export default class bingx extends Exchange {
632
632
  symbol += ':' + settle;
633
633
  }
634
634
  const fees = this.safeDict(this.fees, type, {});
635
- const contractSize = this.safeNumber(market, 'size');
635
+ const contractSize = (swap) ? this.parseNumber('1') : undefined;
636
636
  const isActive = this.safeString(market, 'status') === '1';
637
637
  const isInverse = (spot) ? undefined : false;
638
638
  const isLinear = (spot) ? undefined : swap;
@@ -673,7 +673,7 @@ export default class bingx extends Exchange {
673
673
  'max': this.safeInteger(market, 'maxLongLeverage'),
674
674
  },
675
675
  'amount': {
676
- 'min': this.safeNumber(market, 'minQty'),
676
+ 'min': this.safeNumber2(market, 'minQty', 'tradeMinQuantity'),
677
677
  'max': this.safeNumber(market, 'maxQty'),
678
678
  },
679
679
  'price': {
@@ -681,7 +681,7 @@ export default class bingx extends Exchange {
681
681
  'max': undefined,
682
682
  },
683
683
  'cost': {
684
- 'min': this.safeNumber(market, 'minNotional'),
684
+ 'min': this.safeNumber2(market, 'minNotional', 'tradeMinUSDT'),
685
685
  'max': this.safeNumber(market, 'maxNotional'),
686
686
  },
687
687
  },
@@ -1038,6 +1038,13 @@ export default class bingx extends Exchange {
1038
1038
  if (isMaker !== undefined) {
1039
1039
  takeOrMaker = isMaker ? 'maker' : 'taker';
1040
1040
  }
1041
+ let amount = this.safeStringN(trade, ['qty', 'amount', 'q']);
1042
+ if ((market !== undefined) && market['swap'] && ('volume' in trade)) {
1043
+ // private trade returns num of contracts instead of base currency (as the order-related methods do)
1044
+ const contractSize = this.safeString(market['info'], 'tradeMinQuantity');
1045
+ const volume = this.safeString(trade, 'volume');
1046
+ amount = Precise.stringMul(volume, contractSize);
1047
+ }
1041
1048
  return this.safeTrade({
1042
1049
  'id': this.safeStringN(trade, ['id', 't']),
1043
1050
  'info': trade,
@@ -1049,7 +1056,7 @@ export default class bingx extends Exchange {
1049
1056
  'side': this.parseOrderSide(side),
1050
1057
  'takerOrMaker': takeOrMaker,
1051
1058
  'price': this.safeString2(trade, 'price', 'p'),
1052
- 'amount': this.safeStringN(trade, ['qty', 'volume', 'amount', 'q']),
1059
+ 'amount': amount,
1053
1060
  'cost': cost,
1054
1061
  'fee': {
1055
1062
  'cost': this.parseNumber(Precise.stringAbs(this.safeString2(trade, 'commission', 'n'))),
@@ -1387,9 +1394,13 @@ export default class bingx extends Exchange {
1387
1394
  else {
1388
1395
  response = await this.swapV2PublicGetQuoteTicker(this.extend(request, params));
1389
1396
  }
1390
- const data = this.safeValue(response, 'data');
1391
- const ticker = this.safeValue(data, 0, data);
1392
- return this.parseTicker(ticker, market);
1397
+ const data = this.safeList(response, 'data');
1398
+ if (data !== undefined) {
1399
+ const first = this.safeDict(data, 0, {});
1400
+ return this.parseTicker(first, market);
1401
+ }
1402
+ const dataDict = this.safeDict(response, 'data', {});
1403
+ return this.parseTicker(dataDict, market);
1393
1404
  }
1394
1405
  async fetchTickers(symbols = undefined, params = {}) {
1395
1406
  /**
@@ -1419,7 +1430,7 @@ export default class bingx extends Exchange {
1419
1430
  else {
1420
1431
  response = await this.swapV2PublicGetQuoteTicker(params);
1421
1432
  }
1422
- const tickers = this.safeValue(response, 'data');
1433
+ const tickers = this.safeList(response, 'data');
1423
1434
  return this.parseTickers(tickers, symbols);
1424
1435
  }
1425
1436
  parseTicker(ticker, market = undefined) {
@@ -1677,19 +1688,27 @@ export default class bingx extends Exchange {
1677
1688
  }
1678
1689
  parsePosition(position, market = undefined) {
1679
1690
  //
1680
- // {
1681
- // "symbol": "BTC-USDT",
1682
- // "positionId": "12345678",
1683
- // "positionSide": "LONG",
1684
- // "isolated": true,
1685
- // "positionAmt": "123.33",
1686
- // "availableAmt": "128.99",
1687
- // "unrealizedProfit": "1.22",
1688
- // "realisedProfit": "8.1",
1689
- // "initialMargin": "123.33",
1690
- // "avgPrice": "2.2",
1691
- // "leverage": 10,
1692
- // }
1691
+ // {
1692
+ // "positionId":"1773122376147623936",
1693
+ // "symbol":"XRP-USDT",
1694
+ // "currency":"USDT",
1695
+ // "positionAmt":"3",
1696
+ // "availableAmt":"3",
1697
+ // "positionSide":"LONG",
1698
+ // "isolated":false,
1699
+ // "avgPrice":"0.6139",
1700
+ // "initialMargin":"0.0897",
1701
+ // "leverage":20,
1702
+ // "unrealizedProfit":"-0.0023",
1703
+ // "realisedProfit":"-0.0009",
1704
+ // "liquidationPrice":0,
1705
+ // "pnlRatio":"-0.0260",
1706
+ // "maxMarginReduction":"",
1707
+ // "riskRate":"",
1708
+ // "markPrice":"",
1709
+ // "positionValue":"",
1710
+ // "onlyOnePosition":false
1711
+ // }
1693
1712
  //
1694
1713
  // standard position
1695
1714
  //
@@ -1716,7 +1735,7 @@ export default class bingx extends Exchange {
1716
1735
  'info': position,
1717
1736
  'id': this.safeString(position, 'positionId'),
1718
1737
  'symbol': this.safeSymbol(marketId, market, '-', 'swap'),
1719
- 'notional': this.safeNumber(position, 'positionAmt'),
1738
+ 'notional': this.safeNumber(position, 'positionValue'),
1720
1739
  'marginMode': marginMode,
1721
1740
  'liquidationPrice': undefined,
1722
1741
  'entryPrice': this.safeNumber2(position, 'avgPrice', 'entryPrice'),
@@ -1734,7 +1753,7 @@ export default class bingx extends Exchange {
1734
1753
  'lastUpdateTimestamp': undefined,
1735
1754
  'maintenanceMargin': undefined,
1736
1755
  'maintenanceMarginPercentage': undefined,
1737
- 'collateral': this.safeNumber(position, 'positionAmt'),
1756
+ 'collateral': undefined,
1738
1757
  'initialMargin': this.safeNumber(position, 'initialMargin'),
1739
1758
  'initialMarginPercentage': undefined,
1740
1759
  'leverage': this.safeNumber(position, 'leverage'),
@@ -2065,7 +2084,7 @@ export default class bingx extends Exchange {
2065
2084
  response = this.parseJson(response);
2066
2085
  }
2067
2086
  const data = this.safeValue(response, 'data', {});
2068
- const order = this.safeValue(data, 'order', data);
2087
+ const order = this.safeDict(data, 'order', data);
2069
2088
  return this.parseOrder(order, market);
2070
2089
  }
2071
2090
  async createOrders(orders, params = {}) {
@@ -2562,7 +2581,7 @@ export default class bingx extends Exchange {
2562
2581
  // }
2563
2582
  //
2564
2583
  const data = this.safeValue(response, 'data');
2565
- const first = this.safeValue(data, 'order', data);
2584
+ const first = this.safeDict(data, 'order', data);
2566
2585
  return this.parseOrder(first, market);
2567
2586
  }
2568
2587
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -2807,7 +2826,7 @@ export default class bingx extends Exchange {
2807
2826
  // }
2808
2827
  //
2809
2828
  const data = this.safeValue(response, 'data');
2810
- const first = this.safeValue(data, 'order', data);
2829
+ const first = this.safeDict(data, 'order', data);
2811
2830
  return this.parseOrder(first, market);
2812
2831
  }
2813
2832
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2990,7 +3009,7 @@ export default class bingx extends Exchange {
2990
3009
  // }
2991
3010
  //
2992
3011
  const data = this.safeValue(response, 'data', []);
2993
- const orders = this.safeValue(data, 'orders', []);
3012
+ const orders = this.safeList(data, 'orders', []);
2994
3013
  return this.parseOrders(orders, market, since, limit);
2995
3014
  }
2996
3015
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -3734,7 +3753,7 @@ export default class bingx extends Exchange {
3734
3753
  */
3735
3754
  await this.loadMarkets();
3736
3755
  const response = await this.walletsV1PrivateGetCapitalConfigGetall(params);
3737
- const coins = this.safeValue(response, 'data');
3756
+ const coins = this.safeList(response, 'data');
3738
3757
  return this.parseDepositWithdrawFees(coins, codes, 'coin');
3739
3758
  }
3740
3759
  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 = {}) {