ccxt 4.2.83 → 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 (166) hide show
  1. package/README.md +3 -3
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +896 -941
  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 +40 -28
  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 +34 -98
  28. package/dist/cjs/src/coincheck.js +4 -4
  29. package/dist/cjs/src/coinex.js +12 -13
  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 +12 -34
  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 +15 -2
  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 +40 -28
  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 +34 -98
  108. package/js/src/coincheck.js +4 -4
  109. package/js/src/coinex.js +12 -13
  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 +12 -34
  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.d.ts +1 -0
  135. package/js/src/kucoin.js +16 -3
  136. package/js/src/kucoinfutures.js +8 -8
  137. package/js/src/kuna.js +16 -16
  138. package/js/src/latoken.js +2 -2
  139. package/js/src/lbank.js +10 -10
  140. package/js/src/luno.js +4 -4
  141. package/js/src/mercado.js +5 -5
  142. package/js/src/mexc.js +6 -6
  143. package/js/src/ndax.js +1 -1
  144. package/js/src/novadax.js +9 -9
  145. package/js/src/oceanex.js +7 -7
  146. package/js/src/okcoin.js +13 -13
  147. package/js/src/okx.d.ts +0 -1
  148. package/js/src/okx.js +23 -31
  149. package/js/src/onetrading.js +4 -4
  150. package/js/src/p2b.js +7 -7
  151. package/js/src/phemex.js +12 -12
  152. package/js/src/poloniexfutures.js +5 -5
  153. package/js/src/pro/binance.d.ts +5 -1
  154. package/js/src/pro/binance.js +168 -122
  155. package/js/src/pro/kucoin.js +6 -7
  156. package/js/src/pro/okx.js +19 -2
  157. package/js/src/probit.js +11 -11
  158. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  159. package/js/src/timex.js +7 -7
  160. package/js/src/tokocrypto.js +9 -9
  161. package/js/src/wavesexchange.js +3 -3
  162. package/js/src/whitebit.js +5 -5
  163. package/js/src/woo.js +1 -1
  164. package/js/src/zaif.js +1 -1
  165. package/js/src/zonda.js +7 -7
  166. package/package.json +1 -1
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 = {}) {
package/js/src/bitget.js CHANGED
@@ -2194,7 +2194,7 @@ export default class bitget extends Exchange {
2194
2194
  // ]
2195
2195
  // }
2196
2196
  //
2197
- const rawTransactions = this.safeValue(response, 'data', []);
2197
+ const rawTransactions = this.safeList(response, 'data', []);
2198
2198
  return this.parseTransactions(rawTransactions, currency, since, limit);
2199
2199
  }
2200
2200
  async withdraw(code, amount, address, tag = undefined, params = {}) {
@@ -2342,7 +2342,7 @@ export default class bitget extends Exchange {
2342
2342
  // ]
2343
2343
  // }
2344
2344
  //
2345
- const rawTransactions = this.safeValue(response, 'data', []);
2345
+ const rawTransactions = this.safeList(response, 'data', []);
2346
2346
  return this.parseTransactions(rawTransactions, currency, since, limit);
2347
2347
  }
2348
2348
  parseTransaction(transaction, currency = undefined) {
@@ -2470,7 +2470,7 @@ export default class bitget extends Exchange {
2470
2470
  // }
2471
2471
  // }
2472
2472
  //
2473
- const data = this.safeValue(response, 'data', {});
2473
+ const data = this.safeDict(response, 'data', {});
2474
2474
  return this.parseDepositAddress(data, currency);
2475
2475
  }
2476
2476
  parseDepositAddress(depositAddress, currency = undefined) {
@@ -2759,7 +2759,7 @@ export default class bitget extends Exchange {
2759
2759
  // ]
2760
2760
  // }
2761
2761
  //
2762
- const data = this.safeValue(response, 'data', []);
2762
+ const data = this.safeList(response, 'data', []);
2763
2763
  return this.parseTicker(data[0], market);
2764
2764
  }
2765
2765
  async fetchTickers(symbols = undefined, params = {}) {
@@ -2771,6 +2771,7 @@ export default class bitget extends Exchange {
2771
2771
  * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
2772
2772
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
2773
2773
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2774
+ * @param {string} [params.subType] *contract only* 'linear', 'inverse'
2774
2775
  * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2775
2776
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
2776
2777
  */
@@ -2787,16 +2788,21 @@ export default class bitget extends Exchange {
2787
2788
  market = this.market(symbol);
2788
2789
  }
2789
2790
  }
2791
+ let response = undefined;
2790
2792
  const request = {};
2791
2793
  let type = undefined;
2792
2794
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
2793
- let response = undefined;
2794
- if (type === 'spot') {
2795
+ // Calls like `.fetchTickers (undefined, {subType:'inverse'})` should be supported for this exchange, so
2796
+ // as "options.defaultSubType" is also set in exchange options, we should consider `params.subType`
2797
+ // with higher priority and only default to spot, if `subType` is not set in params
2798
+ const passedSubType = this.safeString(params, 'subType');
2799
+ let productType = undefined;
2800
+ [productType, params] = this.handleProductTypeAndParams(market, params);
2801
+ // only if passedSubType && productType is undefined, then use spot
2802
+ if (type === 'spot' && passedSubType === undefined) {
2795
2803
  response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));
2796
2804
  }
2797
2805
  else {
2798
- let productType = undefined;
2799
- [productType, params] = this.handleProductTypeAndParams(market, params);
2800
2806
  request['productType'] = productType;
2801
2807
  response = await this.publicMixGetV2MixMarketTickers(this.extend(request, params));
2802
2808
  }
@@ -2857,7 +2863,7 @@ export default class bitget extends Exchange {
2857
2863
  // ]
2858
2864
  // }
2859
2865
  //
2860
- const data = this.safeValue(response, 'data', []);
2866
+ const data = this.safeList(response, 'data', []);
2861
2867
  return this.parseTickers(data, symbols);
2862
2868
  }
2863
2869
  parseTrade(trade, market = undefined) {
@@ -3097,7 +3103,7 @@ export default class bitget extends Exchange {
3097
3103
  // ]
3098
3104
  // }
3099
3105
  //
3100
- const data = this.safeValue(response, 'data', []);
3106
+ const data = this.safeList(response, 'data', []);
3101
3107
  return this.parseTrades(data, market, since, limit);
3102
3108
  }
3103
3109
  async fetchTradingFee(symbol, params = {}) {
@@ -4184,7 +4190,7 @@ export default class bitget extends Exchange {
4184
4190
  // }
4185
4191
  // }
4186
4192
  //
4187
- const data = this.safeValue(response, 'data', {});
4193
+ const data = this.safeDict(response, 'data', {});
4188
4194
  return this.parseOrder(data, market);
4189
4195
  }
4190
4196
  createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
@@ -4695,7 +4701,7 @@ export default class bitget extends Exchange {
4695
4701
  // }
4696
4702
  // }
4697
4703
  //
4698
- const data = this.safeValue(response, 'data', {});
4704
+ const data = this.safeDict(response, 'data', {});
4699
4705
  return this.parseOrder(data, market);
4700
4706
  }
4701
4707
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -4934,7 +4940,7 @@ export default class bitget extends Exchange {
4934
4940
  // }
4935
4941
  //
4936
4942
  const data = this.safeValue(response, 'data', {});
4937
- const orders = this.safeValue(data, 'successList', []);
4943
+ const orders = this.safeList(data, 'successList', []);
4938
4944
  return this.parseOrders(orders, market);
4939
4945
  }
4940
4946
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -5165,9 +5171,15 @@ export default class bitget extends Exchange {
5165
5171
  if (typeof response === 'string') {
5166
5172
  response = JSON.parse(response);
5167
5173
  }
5168
- const data = this.safeValue(response, 'data');
5169
- const first = this.safeValue(data, 0, data);
5174
+ const data = this.safeDict(response, 'data');
5175
+ if ((data !== undefined) && !Array.isArray(data)) {
5176
+ return this.parseOrder(data, market);
5177
+ }
5178
+ const dataList = this.safeList(response, 'data', []);
5179
+ const first = this.safeDict(dataList, 0, {});
5170
5180
  return this.parseOrder(first, market);
5181
+ // const first = this.safeDict (data, 0, data);
5182
+ // return this.parseOrder (first, market);
5171
5183
  }
5172
5184
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
5173
5185
  /**
@@ -5470,12 +5482,12 @@ export default class bitget extends Exchange {
5470
5482
  const data = this.safeValue(response, 'data');
5471
5483
  if (type === 'spot') {
5472
5484
  if ((marginMode !== undefined) || stop) {
5473
- const resultList = this.safeValue(data, 'orderList', []);
5485
+ const resultList = this.safeList(data, 'orderList', []);
5474
5486
  return this.parseOrders(resultList, market, since, limit);
5475
5487
  }
5476
5488
  }
5477
5489
  else {
5478
- const result = this.safeValue(data, 'entrustedList', []);
5490
+ const result = this.safeList(data, 'entrustedList', []);
5479
5491
  return this.parseOrders(result, market, since, limit);
5480
5492
  }
5481
5493
  return this.parseOrders(data, market, since, limit);
@@ -5842,7 +5854,7 @@ export default class bitget extends Exchange {
5842
5854
  if (typeof response === 'string') {
5843
5855
  response = JSON.parse(response);
5844
5856
  }
5845
- const orders = this.safeValue(response, 'data', []);
5857
+ const orders = this.safeList(response, 'data', []);
5846
5858
  return this.parseOrders(orders, market, since, limit);
5847
5859
  }
5848
5860
  async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -6246,11 +6258,11 @@ export default class bitget extends Exchange {
6246
6258
  //
6247
6259
  const data = this.safeValue(response, 'data');
6248
6260
  if ((market['swap']) || (market['future'])) {
6249
- const fillList = this.safeValue(data, 'fillList', []);
6261
+ const fillList = this.safeList(data, 'fillList', []);
6250
6262
  return this.parseTrades(fillList, market, since, limit);
6251
6263
  }
6252
6264
  else if (marginMode !== undefined) {
6253
- const fills = this.safeValue(data, 'fills', []);
6265
+ const fills = this.safeList(data, 'fills', []);
6254
6266
  return this.parseTrades(fills, market, since, limit);
6255
6267
  }
6256
6268
  return this.parseTrades(data, market, since, limit);
@@ -6313,8 +6325,8 @@ export default class bitget extends Exchange {
6313
6325
  // ]
6314
6326
  // }
6315
6327
  //
6316
- const data = this.safeValue(response, 'data', []);
6317
- const first = this.safeValue(data, 0, {});
6328
+ const data = this.safeList(response, 'data', []);
6329
+ const first = this.safeDict(data, 0, {});
6318
6330
  return this.parsePosition(first, market);
6319
6331
  }
6320
6332
  async fetchPositions(symbols = undefined, params = {}) {
@@ -7265,7 +7277,7 @@ export default class bitget extends Exchange {
7265
7277
  // }
7266
7278
  // }
7267
7279
  //
7268
- const data = this.safeValue(response, 'data', {});
7280
+ const data = this.safeDict(response, 'data', {});
7269
7281
  return this.parseOpenInterest(data, market);
7270
7282
  }
7271
7283
  parseOpenInterest(interest, market = undefined) {
@@ -7349,7 +7361,7 @@ export default class bitget extends Exchange {
7349
7361
  // ]
7350
7362
  // }
7351
7363
  //
7352
- const data = this.safeValue(response, 'data', []);
7364
+ const data = this.safeList(response, 'data', []);
7353
7365
  return this.parseTransfers(data, currency, since, limit);
7354
7366
  }
7355
7367
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -7546,7 +7558,7 @@ export default class bitget extends Exchange {
7546
7558
  // "requestTime": "1700120731773"
7547
7559
  // }
7548
7560
  //
7549
- const data = this.safeValue(response, 'data', []);
7561
+ const data = this.safeList(response, 'data', []);
7550
7562
  return this.parseDepositWithdrawFees(data, codes, 'coin');
7551
7563
  }
7552
7564
  async borrowCrossMargin(code, amount, params = {}) {
@@ -7853,7 +7865,7 @@ export default class bitget extends Exchange {
7853
7865
  // }
7854
7866
  //
7855
7867
  const data = this.safeValue(response, 'data', {});
7856
- const liquidations = this.safeValue(data, 'resultList', []);
7868
+ const liquidations = this.safeList(data, 'resultList', []);
7857
7869
  return this.parseLiquidations(liquidations, market, since, limit);
7858
7870
  }
7859
7871
  parseLiquidation(liquidation, market = undefined) {
@@ -8301,7 +8313,7 @@ export default class bitget extends Exchange {
8301
8313
  // }
8302
8314
  //
8303
8315
  const data = this.safeValue(response, 'data', {});
8304
- const order = this.safeValue(data, 'successList', []);
8316
+ const order = this.safeList(data, 'successList', []);
8305
8317
  return this.parseOrder(order[0], market);
8306
8318
  }
8307
8319
  async closeAllPositions(params = {}) {
@@ -8339,7 +8351,7 @@ export default class bitget extends Exchange {
8339
8351
  // }
8340
8352
  //
8341
8353
  const data = this.safeValue(response, 'data', {});
8342
- const orderInfo = this.safeValue(data, 'successList', []);
8354
+ const orderInfo = this.safeList(data, 'successList', []);
8343
8355
  return this.parsePositions(orderInfo, undefined, params);
8344
8356
  }
8345
8357
  async fetchMarginMode(symbol, params = {}) {
package/js/src/bithumb.js CHANGED
@@ -498,7 +498,7 @@ export default class bithumb extends Exchange {
498
498
  // }
499
499
  // }
500
500
  //
501
- const data = this.safeValue(response, 'data', {});
501
+ const data = this.safeDict(response, 'data', {});
502
502
  return this.parseTicker(data, market);
503
503
  }
504
504
  parseOHLCV(ohlcv, market = undefined) {
@@ -565,7 +565,7 @@ export default class bithumb extends Exchange {
565
565
  // }
566
566
  // }
567
567
  //
568
- const data = this.safeValue(response, 'data', []);
568
+ const data = this.safeList(response, 'data', []);
569
569
  return this.parseOHLCVs(data, market, timeframe, since, limit);
570
570
  }
571
571
  parseTrade(trade, market = undefined) {
@@ -682,7 +682,7 @@ export default class bithumb extends Exchange {
682
682
  // ]
683
683
  // }
684
684
  //
685
- const data = this.safeValue(response, 'data', []);
685
+ const data = this.safeList(response, 'data', []);
686
686
  return this.parseTrades(data, market, since, limit);
687
687
  }
688
688
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
@@ -778,7 +778,7 @@ export default class bithumb extends Exchange {
778
778
  // }
779
779
  // }
780
780
  //
781
- const data = this.safeValue(response, 'data');
781
+ const data = this.safeDict(response, 'data');
782
782
  return this.parseOrder(this.extend(data, { 'order_id': id }), market);
783
783
  }
784
784
  parseOrderStatus(status) {
@@ -934,7 +934,7 @@ export default class bithumb extends Exchange {
934
934
  // ]
935
935
  // }
936
936
  //
937
- const data = this.safeValue(response, 'data', []);
937
+ const data = this.safeList(response, 'data', []);
938
938
  return this.parseOrders(data, market, since, limit);
939
939
  }
940
940
  async cancelOrder(id, symbol = undefined, params = {}) {