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
package/dist/cjs/ccxt.js CHANGED
@@ -182,7 +182,7 @@ var woo$1 = require('./src/pro/woo.js');
182
182
 
183
183
  //-----------------------------------------------------------------------------
184
184
  // this is updated by vss.js when building
185
- const version = '4.2.84';
185
+ const version = '4.2.85';
186
186
  Exchange["default"].ccxtVersion = version;
187
187
  const exchanges = {
188
188
  'ace': ace,
@@ -398,7 +398,7 @@ class ace extends ace$1 {
398
398
  // "status": 200
399
399
  // }
400
400
  //
401
- const orderBook = this.safeValue(response, 'attachment');
401
+ const orderBook = this.safeDict(response, 'attachment');
402
402
  return this.parseOrderBook(orderBook, market['symbol'], undefined, 'bids', 'asks');
403
403
  }
404
404
  parseOHLCV(ohlcv, market = undefined) {
@@ -620,7 +620,7 @@ class ace extends ace$1 {
620
620
  // "status": 200
621
621
  // }
622
622
  //
623
- const data = this.safeValue(response, 'attachment');
623
+ const data = this.safeDict(response, 'attachment');
624
624
  return this.parseOrder(data, market);
625
625
  }
626
626
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -686,7 +686,7 @@ class ace extends ace$1 {
686
686
  // "status": 200
687
687
  // }
688
688
  //
689
- const data = this.safeValue(response, 'attachment');
689
+ const data = this.safeDict(response, 'attachment');
690
690
  return this.parseOrder(data, undefined);
691
691
  }
692
692
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -879,7 +879,7 @@ class ace extends ace$1 {
879
879
  // }
880
880
  //
881
881
  const data = this.safeValue(response, 'attachment');
882
- const trades = this.safeValue(data, 'trades', []);
882
+ const trades = this.safeList(data, 'trades', []);
883
883
  return this.parseTrades(trades, market, since, limit);
884
884
  }
885
885
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -938,7 +938,7 @@ class ace extends ace$1 {
938
938
  // "status": 200
939
939
  // }
940
940
  //
941
- const trades = this.safeValue(response, 'attachment', []);
941
+ const trades = this.safeList(response, 'attachment', []);
942
942
  return this.parseTrades(trades, market, since, limit);
943
943
  }
944
944
  parseBalance(response) {
@@ -1031,7 +1031,7 @@ class ascendex extends ascendex$1 {
1031
1031
  // }
1032
1032
  // }
1033
1033
  //
1034
- const data = this.safeValue(response, 'data', {});
1034
+ const data = this.safeDict(response, 'data', {});
1035
1035
  return this.parseTicker(data, market);
1036
1036
  }
1037
1037
  async fetchTickers(symbols = undefined, params = {}) {
@@ -1170,7 +1170,7 @@ class ascendex extends ascendex$1 {
1170
1170
  // ]
1171
1171
  // }
1172
1172
  //
1173
- const data = this.safeValue(response, 'data', []);
1173
+ const data = this.safeList(response, 'data', []);
1174
1174
  return this.parseOHLCVs(data, market, timeframe, since, limit);
1175
1175
  }
1176
1176
  parseTrade(trade, market = undefined) {
@@ -1243,7 +1243,7 @@ class ascendex extends ascendex$1 {
1243
1243
  // }
1244
1244
  //
1245
1245
  const records = this.safeValue(response, 'data', []);
1246
- const trades = this.safeValue(records, 'data', []);
1246
+ const trades = this.safeList(records, 'data', []);
1247
1247
  return this.parseTrades(trades, market, since, limit);
1248
1248
  }
1249
1249
  parseOrderStatus(status) {
@@ -1771,7 +1771,7 @@ class ascendex extends ascendex$1 {
1771
1771
  // }
1772
1772
  //
1773
1773
  const data = this.safeValue(response, 'data', {});
1774
- const info = this.safeValue(data, 'info', []);
1774
+ const info = this.safeList(data, 'info', []);
1775
1775
  return this.parseOrders(info, market);
1776
1776
  }
1777
1777
  async fetchOrder(id, symbol = undefined, params = {}) {
@@ -1879,7 +1879,7 @@ class ascendex extends ascendex$1 {
1879
1879
  // }
1880
1880
  // }
1881
1881
  //
1882
- const data = this.safeValue(response, 'data', {});
1882
+ const data = this.safeDict(response, 'data', {});
1883
1883
  return this.parseOrder(data, market);
1884
1884
  }
1885
1885
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2569,7 +2569,7 @@ class ascendex extends ascendex$1 {
2569
2569
  // }
2570
2570
  //
2571
2571
  const data = this.safeValue(response, 'data', {});
2572
- const transactions = this.safeValue(data, 'data', []);
2572
+ const transactions = this.safeList(data, 'data', []);
2573
2573
  return this.parseTransactions(transactions, currency, since, limit);
2574
2574
  }
2575
2575
  parseTransactionStatus(status) {
@@ -3128,7 +3128,7 @@ class ascendex extends ascendex$1 {
3128
3128
  */
3129
3129
  await this.loadMarkets();
3130
3130
  const response = await this.v2PublicGetAssets(params);
3131
- const data = this.safeValue(response, 'data');
3131
+ const data = this.safeList(response, 'data');
3132
3132
  return this.parseDepositWithdrawFees(data, codes, 'assetCode');
3133
3133
  }
3134
3134
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -3254,7 +3254,7 @@ class ascendex extends ascendex$1 {
3254
3254
  // }
3255
3255
  //
3256
3256
  const data = this.safeValue(response, 'data', {});
3257
- const rows = this.safeValue(data, 'data', []);
3257
+ const rows = this.safeList(data, 'data', []);
3258
3258
  return this.parseIncomes(rows, market, since, limit);
3259
3259
  }
3260
3260
  parseIncome(income, market = undefined) {
@@ -3901,20 +3901,6 @@ class Exchange {
3901
3901
  async fetchStatus(params = {}) {
3902
3902
  throw new errors.NotSupported(this.id + ' fetchStatus() is not supported yet');
3903
3903
  }
3904
- async fetchFundingFee(code, params = {}) {
3905
- const warnOnFetchFundingFee = this.safeBool(this.options, 'warnOnFetchFundingFee', true);
3906
- if (warnOnFetchFundingFee) {
3907
- throw new errors.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');
3908
- }
3909
- return await this.fetchTransactionFee(code, params);
3910
- }
3911
- async fetchFundingFees(codes = undefined, params = {}) {
3912
- const warnOnFetchFundingFees = this.safeBool(this.options, 'warnOnFetchFundingFees', true);
3913
- if (warnOnFetchFundingFees) {
3914
- throw new errors.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');
3915
- }
3916
- return await this.fetchTransactionFees(codes, params);
3917
- }
3918
3904
  async fetchTransactionFee(code, params = {}) {
3919
3905
  if (!this.has['fetchTransactionFees']) {
3920
3906
  throw new errors.NotSupported(this.id + ' fetchTransactionFee() is not supported yet');
@@ -5720,6 +5706,82 @@ class Exchange {
5720
5706
  parseLeverage(leverage, market = undefined) {
5721
5707
  throw new errors.NotSupported(this.id + ' parseLeverage() is not supported yet');
5722
5708
  }
5709
+ convertExpireDate(date) {
5710
+ // parse YYMMDD to datetime string
5711
+ const year = date.slice(0, 2);
5712
+ const month = date.slice(2, 4);
5713
+ const day = date.slice(4, 6);
5714
+ const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';
5715
+ return reconstructedDate;
5716
+ }
5717
+ convertExpireDateToMarketIdDate(date) {
5718
+ // parse 240119 to 19JAN24
5719
+ const year = date.slice(0, 2);
5720
+ const monthRaw = date.slice(2, 4);
5721
+ let month = undefined;
5722
+ const day = date.slice(4, 6);
5723
+ if (monthRaw === '01') {
5724
+ month = 'JAN';
5725
+ }
5726
+ else if (monthRaw === '02') {
5727
+ month = 'FEB';
5728
+ }
5729
+ else if (monthRaw === '03') {
5730
+ month = 'MAR';
5731
+ }
5732
+ else if (monthRaw === '04') {
5733
+ month = 'APR';
5734
+ }
5735
+ else if (monthRaw === '05') {
5736
+ month = 'MAY';
5737
+ }
5738
+ else if (monthRaw === '06') {
5739
+ month = 'JUN';
5740
+ }
5741
+ else if (monthRaw === '07') {
5742
+ month = 'JUL';
5743
+ }
5744
+ else if (monthRaw === '08') {
5745
+ month = 'AUG';
5746
+ }
5747
+ else if (monthRaw === '09') {
5748
+ month = 'SEP';
5749
+ }
5750
+ else if (monthRaw === '10') {
5751
+ month = 'OCT';
5752
+ }
5753
+ else if (monthRaw === '11') {
5754
+ month = 'NOV';
5755
+ }
5756
+ else if (monthRaw === '12') {
5757
+ month = 'DEC';
5758
+ }
5759
+ const reconstructedDate = day + month + year;
5760
+ return reconstructedDate;
5761
+ }
5762
+ convertMarketIdExpireDate(date) {
5763
+ // parse 19JAN24 to 240119
5764
+ const monthMappping = {
5765
+ 'JAN': '01',
5766
+ 'FEB': '02',
5767
+ 'MAR': '03',
5768
+ 'APR': '04',
5769
+ 'MAY': '05',
5770
+ 'JUN': '06',
5771
+ 'JUL': '07',
5772
+ 'AUG': '08',
5773
+ 'SEP': '09',
5774
+ 'OCT': '10',
5775
+ 'NOV': '11',
5776
+ 'DEC': '12',
5777
+ };
5778
+ const year = date.slice(0, 2);
5779
+ const monthName = date.slice(2, 5);
5780
+ const month = this.safeString(monthMappping, monthName);
5781
+ const day = date.slice(5, 7);
5782
+ const reconstructedDate = day + month + year;
5783
+ return reconstructedDate;
5784
+ }
5723
5785
  }
5724
5786
 
5725
5787
  exports.Exchange = Exchange;
@@ -811,7 +811,7 @@ class bigone extends bigone$1 {
811
811
  // }
812
812
  // }
813
813
  //
814
- const ticker = this.safeValue(response, 'data', {});
814
+ const ticker = this.safeDict(response, 'data', {});
815
815
  return this.parseTicker(ticker, market);
816
816
  }
817
817
  else {
@@ -998,7 +998,7 @@ class bigone extends bigone$1 {
998
998
  // }
999
999
  // }
1000
1000
  //
1001
- const orderbook = this.safeValue(response, 'data', {});
1001
+ const orderbook = this.safeDict(response, 'data', {});
1002
1002
  return this.parseOrderBook(orderbook, market['symbol'], undefined, 'bids', 'asks', 'price', 'quantity');
1003
1003
  }
1004
1004
  }
@@ -1213,7 +1213,7 @@ class bigone extends bigone$1 {
1213
1213
  // ]
1214
1214
  // }
1215
1215
  //
1216
- const trades = this.safeValue(response, 'data', []);
1216
+ const trades = this.safeList(response, 'data', []);
1217
1217
  return this.parseTrades(trades, market, since, limit);
1218
1218
  }
1219
1219
  parseOHLCV(ohlcv, market = undefined) {
@@ -1292,7 +1292,7 @@ class bigone extends bigone$1 {
1292
1292
  // ]
1293
1293
  // }
1294
1294
  //
1295
- const data = this.safeValue(response, 'data', []);
1295
+ const data = this.safeList(response, 'data', []);
1296
1296
  return this.parseOHLCVs(data, market, timeframe, since, limit);
1297
1297
  }
1298
1298
  parseBalance(response) {
@@ -1561,7 +1561,7 @@ class bigone extends bigone$1 {
1561
1561
  // "updated_at":"2019-01-29T06:05:56Z"
1562
1562
  // }
1563
1563
  //
1564
- const order = this.safeValue(response, 'data');
1564
+ const order = this.safeDict(response, 'data');
1565
1565
  return this.parseOrder(order, market);
1566
1566
  }
1567
1567
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -1590,7 +1590,7 @@ class bigone extends bigone$1 {
1590
1590
  // "created_at":"2019-01-29T06:05:56Z",
1591
1591
  // "updated_at":"2019-01-29T06:05:56Z"
1592
1592
  // }
1593
- const order = this.safeValue(response, 'data');
1593
+ const order = this.safeDict(response, 'data');
1594
1594
  return this.parseOrder(order);
1595
1595
  }
1596
1596
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -1636,7 +1636,7 @@ class bigone extends bigone$1 {
1636
1636
  await this.loadMarkets();
1637
1637
  const request = { 'id': id };
1638
1638
  const response = await this.privateGetOrdersId(this.extend(request, params));
1639
- const order = this.safeValue(response, 'data', {});
1639
+ const order = this.safeDict(response, 'data', {});
1640
1640
  return this.parseOrder(order);
1641
1641
  }
1642
1642
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1687,7 +1687,7 @@ class bigone extends bigone$1 {
1687
1687
  // "page_token":"dxzef",
1688
1688
  // }
1689
1689
  //
1690
- const orders = this.safeValue(response, 'data', []);
1690
+ const orders = this.safeList(response, 'data', []);
1691
1691
  return this.parseOrders(orders, market, since, limit);
1692
1692
  }
1693
1693
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1749,7 +1749,7 @@ class bigone extends bigone$1 {
1749
1749
  // "page_token":"dxfv"
1750
1750
  // }
1751
1751
  //
1752
- const trades = this.safeValue(response, 'data', []);
1752
+ const trades = this.safeList(response, 'data', []);
1753
1753
  return this.parseTrades(trades, market, since, limit);
1754
1754
  }
1755
1755
  parseOrderStatus(status) {
@@ -2032,7 +2032,7 @@ class bigone extends bigone$1 {
2032
2032
  // ]
2033
2033
  // }
2034
2034
  //
2035
- const deposits = this.safeValue(response, 'data', []);
2035
+ const deposits = this.safeList(response, 'data', []);
2036
2036
  return this.parseTransactions(deposits, currency, since, limit);
2037
2037
  }
2038
2038
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2084,7 +2084,7 @@ class bigone extends bigone$1 {
2084
2084
  // "page_token":"dxvf"
2085
2085
  // }
2086
2086
  //
2087
- const withdrawals = this.safeValue(response, 'data', []);
2087
+ const withdrawals = this.safeList(response, 'data', []);
2088
2088
  return this.parseTransactions(withdrawals, currency, since, limit);
2089
2089
  }
2090
2090
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -2211,7 +2211,7 @@ class bigone extends bigone$1 {
2211
2211
  // }
2212
2212
  // }
2213
2213
  //
2214
- const data = this.safeValue(response, 'data', {});
2214
+ const data = this.safeDict(response, 'data', {});
2215
2215
  return this.parseTransaction(data, currency);
2216
2216
  }
2217
2217
  handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
@@ -2422,14 +2422,6 @@ class binance extends binance$1 {
2422
2422
  super.setSandboxMode(enable);
2423
2423
  this.options['sandboxMode'] = enable;
2424
2424
  }
2425
- convertExpireDate(date) {
2426
- // parse YYMMDD to timestamp
2427
- const year = date.slice(0, 2);
2428
- const month = date.slice(2, 4);
2429
- const day = date.slice(4, 6);
2430
- const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';
2431
- return reconstructedDate;
2432
- }
2433
2425
  createExpiredOptionMarket(symbol) {
2434
2426
  // support expired option contracts
2435
2427
  const settle = 'USDT';
@@ -3966,16 +3958,12 @@ class binance extends binance$1 {
3966
3958
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
3967
3959
  */
3968
3960
  await this.loadMarkets();
3969
- symbols = this.marketSymbols(symbols);
3970
- let market = undefined;
3971
- if (symbols !== undefined) {
3972
- const first = this.safeString(symbols, 0);
3973
- market = this.market(first);
3974
- }
3961
+ symbols = this.marketSymbols(symbols, undefined, true, true, true);
3962
+ const market = this.getMarketFromSymbols(symbols);
3975
3963
  let type = undefined;
3964
+ [type, params] = this.handleMarketTypeAndParams('fetchBidsAsks', market, params);
3976
3965
  let subType = undefined;
3977
3966
  [subType, params] = this.handleSubTypeAndParams('fetchBidsAsks', market, params);
3978
- [type, params] = this.handleMarketTypeAndParams('fetchBidsAsks', market, params);
3979
3967
  let response = undefined;
3980
3968
  if (this.isLinear(type, subType)) {
3981
3969
  response = await this.fapiPublicGetTickerBookTicker(params);
@@ -3983,14 +3971,16 @@ class binance extends binance$1 {
3983
3971
  else if (this.isInverse(type, subType)) {
3984
3972
  response = await this.dapiPublicGetTickerBookTicker(params);
3985
3973
  }
3986
- else {
3974
+ else if (type === 'spot') {
3987
3975
  const request = {};
3988
3976
  if (symbols !== undefined) {
3989
- const marketIds = this.marketIds(symbols);
3990
- request['symbols'] = this.json(marketIds);
3977
+ request['symbols'] = this.json(this.marketIds(symbols));
3991
3978
  }
3992
3979
  response = await this.publicGetTickerBookTicker(this.extend(request, params));
3993
3980
  }
3981
+ else {
3982
+ throw new errors.NotSupported(this.id + ' fetchBidsAsks() does not support ' + type + ' markets yet');
3983
+ }
3994
3984
  return this.parseTickers(response, symbols);
3995
3985
  }
3996
3986
  async fetchLastPrices(symbols = undefined, params = {}) {
@@ -4007,12 +3997,12 @@ class binance extends binance$1 {
4007
3997
  * @returns {object} a dictionary of lastprices structures
4008
3998
  */
4009
3999
  await this.loadMarkets();
4010
- symbols = this.marketSymbols(symbols);
4000
+ symbols = this.marketSymbols(symbols, undefined, true, true, true);
4011
4001
  const market = this.getMarketFromSymbols(symbols);
4012
4002
  let type = undefined;
4003
+ [type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
4013
4004
  let subType = undefined;
4014
4005
  [subType, params] = this.handleSubTypeAndParams('fetchLastPrices', market, params);
4015
- [type, params] = this.handleMarketTypeAndParams('fetchLastPrices', market, params);
4016
4006
  let response = undefined;
4017
4007
  if (this.isLinear(type, subType)) {
4018
4008
  response = await this.fapiPublicV2GetTickerPrice(params);
@@ -4113,34 +4103,32 @@ class binance extends binance$1 {
4113
4103
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
4114
4104
  */
4115
4105
  await this.loadMarkets();
4116
- let type = undefined;
4117
- let market = undefined;
4118
4106
  symbols = this.marketSymbols(symbols, undefined, true, true, true);
4119
- if (symbols !== undefined) {
4120
- const first = this.safeString(symbols, 0);
4121
- market = this.market(first);
4122
- }
4107
+ const market = this.getMarketFromSymbols(symbols);
4108
+ let type = undefined;
4123
4109
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
4124
4110
  let subType = undefined;
4125
4111
  [subType, params] = this.handleSubTypeAndParams('fetchTickers', market, params);
4126
4112
  let response = undefined;
4127
- if (type === 'option') {
4128
- response = await this.eapiPublicGetTicker(params);
4129
- }
4130
- else if (this.isLinear(type, subType)) {
4113
+ if (this.isLinear(type, subType)) {
4131
4114
  response = await this.fapiPublicGetTicker24hr(params);
4132
4115
  }
4133
4116
  else if (this.isInverse(type, subType)) {
4134
4117
  response = await this.dapiPublicGetTicker24hr(params);
4135
4118
  }
4136
- else {
4119
+ else if (type === 'spot') {
4137
4120
  const request = {};
4138
4121
  if (symbols !== undefined) {
4139
- const marketIds = this.marketIds(symbols);
4140
- request['symbols'] = this.json(marketIds);
4122
+ request['symbols'] = this.json(this.marketIds(symbols));
4141
4123
  }
4142
4124
  response = await this.publicGetTicker24hr(this.extend(request, params));
4143
4125
  }
4126
+ else if (type === 'option') {
4127
+ response = await this.eapiPublicGetTicker(params);
4128
+ }
4129
+ else {
4130
+ throw new errors.NotSupported(this.id + ' fetchTickers() does not support ' + type + ' markets yet');
4131
+ }
4144
4132
  return this.parseTickers(response, symbols);
4145
4133
  }
4146
4134
  parseOHLCV(ohlcv, market = undefined) {
@@ -4807,7 +4795,7 @@ class binance extends binance$1 {
4807
4795
  // }
4808
4796
  // }
4809
4797
  //
4810
- const data = this.safeValue(response, 'newOrderResponse');
4798
+ const data = this.safeDict(response, 'newOrderResponse');
4811
4799
  return this.parseOrder(data, market);
4812
4800
  }
4813
4801
  editSpotOrderRequest(id, symbol, type, side, amount, price = undefined, params = {}) {
@@ -12397,7 +12385,7 @@ class binance extends binance$1 {
12397
12385
  else {
12398
12386
  throw new errors.BadRequest(this.id + ' fetchMarginModes () supports linear and inverse subTypes only');
12399
12387
  }
12400
- const assets = this.safeValue(response, 'positions', []);
12388
+ const assets = this.safeList(response, 'positions', []);
12401
12389
  return this.parseMarginModes(assets, symbols, 'symbol', 'swap');
12402
12390
  }
12403
12391
  parseMarginMode(marginMode, market = undefined) {
@@ -1384,9 +1384,13 @@ class bingx extends bingx$1 {
1384
1384
  else {
1385
1385
  response = await this.swapV2PublicGetQuoteTicker(this.extend(request, params));
1386
1386
  }
1387
- const data = this.safeValue(response, 'data');
1388
- const ticker = this.safeValue(data, 0, data);
1389
- return this.parseTicker(ticker, market);
1387
+ const data = this.safeList(response, 'data');
1388
+ if (data !== undefined) {
1389
+ const first = this.safeDict(data, 0, {});
1390
+ return this.parseTicker(first, market);
1391
+ }
1392
+ const dataDict = this.safeDict(response, 'data', {});
1393
+ return this.parseTicker(dataDict, market);
1390
1394
  }
1391
1395
  async fetchTickers(symbols = undefined, params = {}) {
1392
1396
  /**
@@ -1416,7 +1420,7 @@ class bingx extends bingx$1 {
1416
1420
  else {
1417
1421
  response = await this.swapV2PublicGetQuoteTicker(params);
1418
1422
  }
1419
- const tickers = this.safeValue(response, 'data');
1423
+ const tickers = this.safeList(response, 'data');
1420
1424
  return this.parseTickers(tickers, symbols);
1421
1425
  }
1422
1426
  parseTicker(ticker, market = undefined) {
@@ -2062,7 +2066,7 @@ class bingx extends bingx$1 {
2062
2066
  response = this.parseJson(response);
2063
2067
  }
2064
2068
  const data = this.safeValue(response, 'data', {});
2065
- const order = this.safeValue(data, 'order', data);
2069
+ const order = this.safeDict(data, 'order', data);
2066
2070
  return this.parseOrder(order, market);
2067
2071
  }
2068
2072
  async createOrders(orders, params = {}) {
@@ -2559,7 +2563,7 @@ class bingx extends bingx$1 {
2559
2563
  // }
2560
2564
  //
2561
2565
  const data = this.safeValue(response, 'data');
2562
- const first = this.safeValue(data, 'order', data);
2566
+ const first = this.safeDict(data, 'order', data);
2563
2567
  return this.parseOrder(first, market);
2564
2568
  }
2565
2569
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -2804,7 +2808,7 @@ class bingx extends bingx$1 {
2804
2808
  // }
2805
2809
  //
2806
2810
  const data = this.safeValue(response, 'data');
2807
- const first = this.safeValue(data, 'order', data);
2811
+ const first = this.safeDict(data, 'order', data);
2808
2812
  return this.parseOrder(first, market);
2809
2813
  }
2810
2814
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2987,7 +2991,7 @@ class bingx extends bingx$1 {
2987
2991
  // }
2988
2992
  //
2989
2993
  const data = this.safeValue(response, 'data', []);
2990
- const orders = this.safeValue(data, 'orders', []);
2994
+ const orders = this.safeList(data, 'orders', []);
2991
2995
  return this.parseOrders(orders, market, since, limit);
2992
2996
  }
2993
2997
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
@@ -3731,7 +3735,7 @@ class bingx extends bingx$1 {
3731
3735
  */
3732
3736
  await this.loadMarkets();
3733
3737
  const response = await this.walletsV1PrivateGetCapitalConfigGetall(params);
3734
- const coins = this.safeValue(response, 'data');
3738
+ const coins = this.safeList(response, 'data');
3735
3739
  return this.parseDepositWithdrawFees(coins, codes, 'coin');
3736
3740
  }
3737
3741
  async withdraw(code, amount, address, tag = undefined, params = {}) {
@@ -489,7 +489,7 @@ class bit2c extends bit2c$1 {
489
489
  const response = await this.privateGetOrderMyOrders(this.extend(request, params));
490
490
  const orders = this.safeValue(response, market['id'], {});
491
491
  const asks = this.safeValue(orders, 'ask', []);
492
- const bids = this.safeValue(orders, 'bid', []);
492
+ const bids = this.safeList(orders, 'bid', []);
493
493
  return this.parseOrders(this.arrayConcat(asks, bids), market, since, limit);
494
494
  }
495
495
  async fetchOrder(id, symbol = undefined, params = {}) {
@@ -298,7 +298,7 @@ class bitbank extends bitbank$1 {
298
298
  'pair': market['id'],
299
299
  };
300
300
  const response = await this.publicGetPairTicker(this.extend(request, params));
301
- const data = this.safeValue(response, 'data', {});
301
+ const data = this.safeDict(response, 'data', {});
302
302
  return this.parseTicker(data, market);
303
303
  }
304
304
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
@@ -386,7 +386,7 @@ class bitbank extends bitbank$1 {
386
386
  };
387
387
  const response = await this.publicGetPairTransactions(this.extend(request, params));
388
388
  const data = this.safeValue(response, 'data', {});
389
- const trades = this.safeValue(data, 'transactions', []);
389
+ const trades = this.safeList(data, 'transactions', []);
390
390
  return this.parseTrades(trades, market, since, limit);
391
391
  }
392
392
  async fetchTradingFees(params = {}) {
@@ -516,7 +516,7 @@ class bitbank extends bitbank$1 {
516
516
  const data = this.safeValue(response, 'data', {});
517
517
  const candlestick = this.safeValue(data, 'candlestick', []);
518
518
  const first = this.safeValue(candlestick, 0, {});
519
- const ohlcv = this.safeValue(first, 'ohlcv', []);
519
+ const ohlcv = this.safeList(first, 'ohlcv', []);
520
520
  return this.parseOHLCVs(ohlcv, market, timeframe, since, limit);
521
521
  }
522
522
  parseBalance(response) {
@@ -659,7 +659,7 @@ class bitbank extends bitbank$1 {
659
659
  request['price'] = this.priceToPrecision(symbol, price);
660
660
  }
661
661
  const response = await this.privatePostUserSpotOrder(this.extend(request, params));
662
- const data = this.safeValue(response, 'data');
662
+ const data = this.safeDict(response, 'data');
663
663
  return this.parseOrder(data, market);
664
664
  }
665
665
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -700,7 +700,7 @@ class bitbank extends bitbank$1 {
700
700
  'pair': market['id'],
701
701
  };
702
702
  const response = await this.privateGetUserSpotOrder(this.extend(request, params));
703
- const data = this.safeValue(response, 'data');
703
+ const data = this.safeDict(response, 'data');
704
704
  return this.parseOrder(data, market);
705
705
  }
706
706
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -728,7 +728,7 @@ class bitbank extends bitbank$1 {
728
728
  }
729
729
  const response = await this.privateGetUserSpotActiveOrders(this.extend(request, params));
730
730
  const data = this.safeValue(response, 'data', {});
731
- const orders = this.safeValue(data, 'orders', []);
731
+ const orders = this.safeList(data, 'orders', []);
732
732
  return this.parseOrders(orders, market, since, limit);
733
733
  }
734
734
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -758,7 +758,7 @@ class bitbank extends bitbank$1 {
758
758
  }
759
759
  const response = await this.privateGetUserSpotTradeHistory(this.extend(request, params));
760
760
  const data = this.safeValue(response, 'data', {});
761
- const trades = this.safeValue(data, 'trades', []);
761
+ const trades = this.safeList(data, 'trades', []);
762
762
  return this.parseTrades(trades, market, since, limit);
763
763
  }
764
764
  async fetchDepositAddress(code, params = {}) {
@@ -831,7 +831,7 @@ class bitbank extends bitbank$1 {
831
831
  // }
832
832
  // }
833
833
  //
834
- const data = this.safeValue(response, 'data', {});
834
+ const data = this.safeDict(response, 'data', {});
835
835
  return this.parseTransaction(data, currency);
836
836
  }
837
837
  parseTransaction(transaction, currency = undefined) {
@@ -722,7 +722,7 @@ class bitbns extends bitbns$1 {
722
722
  // }
723
723
  //
724
724
  const data = this.safeValue(response, 'data', []);
725
- const first = this.safeValue(data, 0);
725
+ const first = this.safeDict(data, 0);
726
726
  return this.parseOrder(first, market);
727
727
  }
728
728
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -773,7 +773,7 @@ class bitbns extends bitbns$1 {
773
773
  // "code":200
774
774
  // }
775
775
  //
776
- const data = this.safeValue(response, 'data', []);
776
+ const data = this.safeList(response, 'data', []);
777
777
  return this.parseOrders(data, market, since, limit);
778
778
  }
779
779
  parseTrade(trade, market = undefined) {
@@ -923,7 +923,7 @@ class bitbns extends bitbns$1 {
923
923
  // "code": 200
924
924
  // }
925
925
  //
926
- const data = this.safeValue(response, 'data', []);
926
+ const data = this.safeList(response, 'data', []);
927
927
  return this.parseTrades(data, market, since, limit);
928
928
  }
929
929
  async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
@@ -1000,7 +1000,7 @@ class bitbns extends bitbns$1 {
1000
1000
  // "code":200
1001
1001
  // }
1002
1002
  //
1003
- const data = this.safeValue(response, 'data', []);
1003
+ const data = this.safeList(response, 'data', []);
1004
1004
  return this.parseTransactions(data, currency, since, limit);
1005
1005
  }
1006
1006
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1027,7 +1027,7 @@ class bitbns extends bitbns$1 {
1027
1027
  //
1028
1028
  // ...
1029
1029
  //
1030
- const data = this.safeValue(response, 'data', []);
1030
+ const data = this.safeList(response, 'data', []);
1031
1031
  return this.parseTransactions(data, currency, since, limit);
1032
1032
  }
1033
1033
  parseTransactionStatusByType(status, type = undefined) {