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
@@ -897,7 +897,7 @@ class exmo extends exmo$1 {
897
897
  // ]
898
898
  // }
899
899
  //
900
- const candles = this.safeValue(response, 'candles', []);
900
+ const candles = this.safeList(response, 'candles', []);
901
901
  return this.parseOHLCVs(candles, market, timeframe, since, limit);
902
902
  }
903
903
  parseOHLCV(ohlcv, market = undefined) {
@@ -1024,7 +1024,7 @@ class exmo extends exmo$1 {
1024
1024
  request['limit'] = limit;
1025
1025
  }
1026
1026
  const response = await this.publicGetOrderBook(this.extend(request, params));
1027
- const result = this.safeValue(response, market['id']);
1027
+ const result = this.safeDict(response, market['id']);
1028
1028
  return this.parseOrderBook(result, market['symbol'], undefined, 'bid', 'ask');
1029
1029
  }
1030
1030
  async fetchOrderBooks(symbols = undefined, limit = undefined, params = {}) {
@@ -1292,7 +1292,7 @@ class exmo extends exmo$1 {
1292
1292
  // ]
1293
1293
  // }
1294
1294
  //
1295
- const data = this.safeValue(response, market['id'], []);
1295
+ const data = this.safeList(response, market['id'], []);
1296
1296
  return this.parseTrades(data, market, since, limit);
1297
1297
  }
1298
1298
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1683,7 +1683,7 @@ class exmo extends exmo$1 {
1683
1683
  // }
1684
1684
  //
1685
1685
  }
1686
- const trades = this.safeValue(response, 'trades');
1686
+ const trades = this.safeList(response, 'trades');
1687
1687
  return this.parseTrades(trades, market, since, limit);
1688
1688
  }
1689
1689
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2425,7 +2425,7 @@ class exmo extends exmo$1 {
2425
2425
  // "count": 23
2426
2426
  // }
2427
2427
  //
2428
- const items = this.safeValue(response, 'items', []);
2428
+ const items = this.safeList(response, 'items', []);
2429
2429
  return this.parseTransactions(items, currency, since, limit);
2430
2430
  }
2431
2431
  async fetchWithdrawal(id, code = undefined, params = {}) {
@@ -2477,7 +2477,7 @@ class exmo extends exmo$1 {
2477
2477
  // }
2478
2478
  //
2479
2479
  const items = this.safeValue(response, 'items', []);
2480
- const first = this.safeValue(items, 0, {});
2480
+ const first = this.safeDict(items, 0, {});
2481
2481
  return this.parseTransaction(first, currency);
2482
2482
  }
2483
2483
  async fetchDeposit(id = undefined, code = undefined, params = {}) {
@@ -2529,7 +2529,7 @@ class exmo extends exmo$1 {
2529
2529
  // }
2530
2530
  //
2531
2531
  const items = this.safeValue(response, 'items', []);
2532
- const first = this.safeValue(items, 0, {});
2532
+ const first = this.safeDict(items, 0, {});
2533
2533
  return this.parseTransaction(first, currency);
2534
2534
  }
2535
2535
  async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2583,7 +2583,7 @@ class exmo extends exmo$1 {
2583
2583
  // "count": 23
2584
2584
  // }
2585
2585
  //
2586
- const items = this.safeValue(response, 'items', []);
2586
+ const items = this.safeList(response, 'items', []);
2587
2587
  return this.parseTransactions(items, currency, since, limit);
2588
2588
  }
2589
2589
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
@@ -870,14 +870,6 @@ class gate extends gate$1 {
870
870
  super.setSandboxMode(enable);
871
871
  this.options['sandboxMode'] = enable;
872
872
  }
873
- convertExpireDate(date) {
874
- // parse YYMMDD to timestamp
875
- const year = date.slice(0, 2);
876
- const month = date.slice(2, 4);
877
- const day = date.slice(4, 6);
878
- const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';
879
- return reconstructedDate;
880
- }
881
873
  createExpiredOptionMarket(symbol) {
882
874
  // support expired option contracts
883
875
  const quote = 'USDT';
@@ -1450,15 +1450,16 @@ class hitbtc extends hitbtc$1 {
1450
1450
  // ],
1451
1451
  // "fee": "1.22" // only for WITHDRAW
1452
1452
  // }
1453
- // }
1454
- //
1453
+ // },
1454
+ // "operation_id": "084cfcd5-06b9-4826-882e-fdb75ec3625d", // only for WITHDRAW
1455
+ // "commit_risk": {}
1455
1456
  // withdraw
1456
1457
  //
1457
1458
  // {
1458
1459
  // "id":"084cfcd5-06b9-4826-882e-fdb75ec3625d"
1459
1460
  // }
1460
1461
  //
1461
- const id = this.safeString(transaction, 'id');
1462
+ const id = this.safeString2(transaction, 'operation_id', 'id');
1462
1463
  const timestamp = this.parse8601(this.safeString(transaction, 'created_at'));
1463
1464
  const updated = this.parse8601(this.safeString(transaction, 'updated_at'));
1464
1465
  const type = this.parseTransactionType(this.safeString(transaction, 'type'));
@@ -1931,7 +1932,7 @@ class hitbtc extends hitbtc$1 {
1931
1932
  // }
1932
1933
  // ]
1933
1934
  //
1934
- const order = this.safeValue(response, 0);
1935
+ const order = this.safeDict(response, 0);
1935
1936
  return this.parseOrder(order, market);
1936
1937
  }
1937
1938
  async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -632,7 +632,7 @@ class hollaex extends hollaex$1 {
632
632
  // ]
633
633
  // }
634
634
  //
635
- const trades = this.safeValue(response, market['id'], []);
635
+ const trades = this.safeList(response, market['id'], []);
636
636
  return this.parseTrades(trades, market, since, limit);
637
637
  }
638
638
  parseTrade(trade, market = undefined) {
@@ -1055,7 +1055,7 @@ class hollaex extends hollaex$1 {
1055
1055
  // ]
1056
1056
  // }
1057
1057
  //
1058
- const data = this.safeValue(response, 'data', []);
1058
+ const data = this.safeList(response, 'data', []);
1059
1059
  return this.parseOrders(data, market, since, limit);
1060
1060
  }
1061
1061
  parseOrderStatus(status) {
@@ -1319,7 +1319,7 @@ class hollaex extends hollaex$1 {
1319
1319
  // ]
1320
1320
  // }
1321
1321
  //
1322
- const data = this.safeValue(response, 'data', []);
1322
+ const data = this.safeList(response, 'data', []);
1323
1323
  return this.parseTrades(data, market, since, limit);
1324
1324
  }
1325
1325
  parseDepositAddress(depositAddress, currency = undefined) {
@@ -1472,7 +1472,7 @@ class hollaex extends hollaex$1 {
1472
1472
  // ]
1473
1473
  // }
1474
1474
  //
1475
- const data = this.safeValue(response, 'data', []);
1475
+ const data = this.safeList(response, 'data', []);
1476
1476
  return this.parseTransactions(data, currency, since, limit);
1477
1477
  }
1478
1478
  async fetchWithdrawal(id, code = undefined, params = {}) {
@@ -1520,7 +1520,7 @@ class hollaex extends hollaex$1 {
1520
1520
  // }
1521
1521
  //
1522
1522
  const data = this.safeValue(response, 'data', []);
1523
- const transaction = this.safeValue(data, 0, {});
1523
+ const transaction = this.safeDict(data, 0, {});
1524
1524
  return this.parseTransaction(transaction, currency);
1525
1525
  }
1526
1526
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1580,7 +1580,7 @@ class hollaex extends hollaex$1 {
1580
1580
  // ]
1581
1581
  // }
1582
1582
  //
1583
- const data = this.safeValue(response, 'data', []);
1583
+ const data = this.safeList(response, 'data', []);
1584
1584
  return this.parseTransactions(data, currency, since, limit);
1585
1585
  }
1586
1586
  parseTransaction(transaction, currency = undefined) {
@@ -1841,7 +1841,7 @@ class hollaex extends hollaex$1 {
1841
1841
  // "network":"https://api.hollaex.network"
1842
1842
  // }
1843
1843
  //
1844
- const coins = this.safeValue(response, 'coins');
1844
+ const coins = this.safeList(response, 'coins');
1845
1845
  return this.parseDepositWithdrawFees(coins, codes, 'symbol');
1846
1846
  }
1847
1847
  normalizeNumberIfNeeded(number) {
@@ -2364,7 +2364,7 @@ class htx extends htx$1 {
2364
2364
  throw new errors.NotSupported(this.id + ' fetchLastPrices() does not support ' + type + ' markets yet');
2365
2365
  }
2366
2366
  const tick = this.safeValue(response, 'tick', {});
2367
- const data = this.safeValue(tick, 'data', []);
2367
+ const data = this.safeList(tick, 'data', []);
2368
2368
  return this.parseLastPrices(data, symbols);
2369
2369
  }
2370
2370
  parseLastPrice(entry, market = undefined) {
@@ -3957,7 +3957,7 @@ class htx extends htx$1 {
3957
3957
  // ]
3958
3958
  // }
3959
3959
  //
3960
- const data = this.safeValue(response, 'data', []);
3960
+ const data = this.safeList(response, 'data', []);
3961
3961
  return this.parseOrders(data, market, since, limit);
3962
3962
  }
3963
3963
  async fetchSpotOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -7354,7 +7354,7 @@ class htx extends htx$1 {
7354
7354
  request['symbol'] = market['id'];
7355
7355
  response = await this.contractPrivatePostApiV3ContractFinancialRecordExact(this.extend(request, query));
7356
7356
  }
7357
- const data = this.safeValue(response, 'data', []);
7357
+ const data = this.safeList(response, 'data', []);
7358
7358
  return this.parseIncomes(data, market, since, limit);
7359
7359
  }
7360
7360
  async setLeverage(leverage, symbol = undefined, params = {}) {
@@ -8138,7 +8138,7 @@ class htx extends htx$1 {
8138
8138
  // ]
8139
8139
  // }
8140
8140
  //
8141
- const data = this.safeValue(response, 'data');
8141
+ const data = this.safeList(response, 'data');
8142
8142
  return this.parseLeverageTiers(data, symbols, 'contract_code');
8143
8143
  }
8144
8144
  async fetchMarketLeverageTiers(symbol, params = {}) {
@@ -8342,7 +8342,7 @@ class htx extends htx$1 {
8342
8342
  // }
8343
8343
  //
8344
8344
  const data = this.safeValue(response, 'data');
8345
- const tick = this.safeValue(data, 'tick');
8345
+ const tick = this.safeList(data, 'tick');
8346
8346
  return this.parseOpenInterests(tick, market, since, limit);
8347
8347
  }
8348
8348
  async fetchOpenInterest(symbol, params = {}) {
@@ -8850,7 +8850,7 @@ class htx extends htx$1 {
8850
8850
  // ]
8851
8851
  // }
8852
8852
  //
8853
- const data = this.safeValue(response, 'data');
8853
+ const data = this.safeList(response, 'data');
8854
8854
  return this.parseDepositWithdrawFees(data, codes, 'currency');
8855
8855
  }
8856
8856
  parseDepositWithdrawFee(fee, currency = undefined) {
@@ -9078,7 +9078,7 @@ class htx extends htx$1 {
9078
9078
  // "ts": 1604312615051
9079
9079
  // }
9080
9080
  //
9081
- const data = this.safeValue(response, 'data', []);
9081
+ const data = this.safeList(response, 'data', []);
9082
9082
  return this.parseLiquidations(data, market, since, limit);
9083
9083
  }
9084
9084
  parseLiquidation(liquidation, market = undefined) {
@@ -967,7 +967,7 @@ class huobijp extends huobijp$1 {
967
967
  // ]
968
968
  // }
969
969
  //
970
- const data = this.safeValue(response, 'data', []);
970
+ const data = this.safeList(response, 'data', []);
971
971
  return this.parseOHLCVs(data, market, timeframe, since, limit);
972
972
  }
973
973
  async fetchAccounts(params = {}) {
@@ -1166,7 +1166,7 @@ class huobijp extends huobijp$1 {
1166
1166
  'id': id,
1167
1167
  };
1168
1168
  const response = await this.privateGetOrderOrdersId(this.extend(request, params));
1169
- const order = this.safeValue(response, 'data');
1169
+ const order = this.safeDict(response, 'data');
1170
1170
  return this.parseOrder(order);
1171
1171
  }
1172
1172
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1264,7 +1264,7 @@ class huobijp extends huobijp$1 {
1264
1264
  // ]
1265
1265
  // }
1266
1266
  //
1267
- const data = this.safeValue(response, 'data', []);
1267
+ const data = this.safeList(response, 'data', []);
1268
1268
  return this.parseOrders(data, market, since, limit);
1269
1269
  }
1270
1270
  parseOrderStatus(status) {
@@ -162,13 +162,15 @@ class idex extends idex$1 {
162
162
  'network': 'MATIC',
163
163
  },
164
164
  'exceptions': {
165
- 'INVALID_ORDER_QUANTITY': errors.InvalidOrder,
166
- 'INSUFFICIENT_FUNDS': errors.InsufficientFunds,
167
- 'SERVICE_UNAVAILABLE': errors.ExchangeNotAvailable,
168
- 'EXCEEDED_RATE_LIMIT': errors.DDoSProtection,
169
- 'INVALID_PARAMETER': errors.BadRequest,
170
- 'WALLET_NOT_ASSOCIATED': errors.InvalidAddress,
171
- 'INVALID_WALLET_SIGNATURE': errors.AuthenticationError,
165
+ 'exact': {
166
+ 'INVALID_ORDER_QUANTITY': errors.InvalidOrder,
167
+ 'INSUFFICIENT_FUNDS': errors.InsufficientFunds,
168
+ 'SERVICE_UNAVAILABLE': errors.ExchangeNotAvailable,
169
+ 'EXCEEDED_RATE_LIMIT': errors.DDoSProtection,
170
+ 'INVALID_PARAMETER': errors.BadRequest,
171
+ 'WALLET_NOT_ASSOCIATED': errors.InvalidAddress,
172
+ 'INVALID_WALLET_SIGNATURE': errors.AuthenticationError,
173
+ },
172
174
  },
173
175
  'requiredCredentials': {
174
176
  'walletAddress': true,
@@ -358,7 +360,7 @@ class idex extends idex$1 {
358
360
  // }
359
361
  // ]
360
362
  const response = await this.publicGetTickers(this.extend(request, params));
361
- const ticker = this.safeValue(response, 0);
363
+ const ticker = this.safeDict(response, 0);
362
364
  return this.parseTicker(ticker, market);
363
365
  }
364
366
  async fetchTickers(symbols = undefined, params = {}) {
@@ -1488,17 +1490,14 @@ class idex extends idex$1 {
1488
1490
  };
1489
1491
  // [ { orderId: "688336f0-ec50-11ea-9842-b332f8a34d0e" } ]
1490
1492
  const response = await this.privateDeleteOrders(this.extend(request, params));
1491
- const canceledOrder = this.safeValue(response, 0);
1493
+ const canceledOrder = this.safeDict(response, 0);
1492
1494
  return this.parseOrder(canceledOrder, market);
1493
1495
  }
1494
1496
  handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
1495
1497
  const errorCode = this.safeString(response, 'code');
1496
1498
  const message = this.safeString(response, 'message');
1497
- if (errorCode in this.exceptions) {
1498
- const Exception = this.exceptions[errorCode];
1499
- throw new Exception(this.id + ' ' + message);
1500
- }
1501
1499
  if (errorCode !== undefined) {
1500
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, message);
1502
1501
  throw new errors.ExchangeError(this.id + ' ' + message);
1503
1502
  }
1504
1503
  return undefined;
@@ -505,7 +505,7 @@ class independentreserve extends independentreserve$1 {
505
505
  request['pageIndex'] = 1;
506
506
  request['pageSize'] = limit;
507
507
  const response = await this.privatePostGetOpenOrders(this.extend(request, params));
508
- const data = this.safeValue(response, 'Data', []);
508
+ const data = this.safeList(response, 'Data', []);
509
509
  return this.parseOrders(data, market, since, limit);
510
510
  }
511
511
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -533,7 +533,7 @@ class independentreserve extends independentreserve$1 {
533
533
  request['pageIndex'] = 1;
534
534
  request['pageSize'] = limit;
535
535
  const response = await this.privatePostGetClosedOrders(this.extend(request, params));
536
- const data = this.safeValue(response, 'Data', []);
536
+ const data = this.safeList(response, 'Data', []);
537
537
  return this.parseOrders(data, market, since, limit);
538
538
  }
539
539
  async fetchMyTrades(symbol = undefined, since = undefined, limit = 50, params = {}) {
@@ -476,7 +476,7 @@ class indodax extends indodax$1 {
476
476
  // }
477
477
  // }
478
478
  //
479
- const ticker = this.safeValue(response, 'ticker', {});
479
+ const ticker = this.safeDict(response, 'ticker', {});
480
480
  return this.parseTicker(ticker, market);
481
481
  }
482
482
  async fetchTickers(symbols = undefined, params = {}) {
@@ -507,7 +507,7 @@ class indodax extends indodax$1 {
507
507
  // }
508
508
  //
509
509
  const response = await this.publicGetApiTickerAll(params);
510
- const tickers = this.safeValue(response, 'tickers');
510
+ const tickers = this.safeList(response, 'tickers');
511
511
  return this.parseTickers(tickers, symbols);
512
512
  }
513
513
  parseTrade(trade, market = undefined) {
@@ -997,7 +997,7 @@ class kraken extends kraken$1 {
997
997
  // }
998
998
  // }
999
999
  const result = this.safeValue(response, 'result', {});
1000
- const ohlcvs = this.safeValue(result, market['id'], []);
1000
+ const ohlcvs = this.safeList(result, market['id'], []);
1001
1001
  return this.parseOHLCVs(ohlcvs, market, timeframe, since, limit);
1002
1002
  }
1003
1003
  parseLedgerEntryType(type) {
@@ -1386,7 +1386,7 @@ class kraken extends kraken$1 {
1386
1386
  // }
1387
1387
  // }
1388
1388
  //
1389
- const result = this.safeValue(response, 'result');
1389
+ const result = this.safeDict(response, 'result');
1390
1390
  return this.parseOrder(result);
1391
1391
  }
1392
1392
  findMarketByAltnameOrId(id) {
@@ -1818,7 +1818,7 @@ class kraken extends kraken$1 {
1818
1818
  // }
1819
1819
  // }
1820
1820
  //
1821
- const data = this.safeValue(response, 'result', {});
1821
+ const data = this.safeDict(response, 'result', {});
1822
1822
  return this.parseOrder(data, market);
1823
1823
  }
1824
1824
  async fetchOrder(id, symbol = undefined, params = {}) {
@@ -2156,8 +2156,8 @@ class kraken extends kraken$1 {
2156
2156
  if (symbol !== undefined) {
2157
2157
  market = this.market(symbol);
2158
2158
  }
2159
- const result = this.safeValue(response, 'result', {});
2160
- const orders = this.safeValue(result, 'open', []);
2159
+ const result = this.safeDict(response, 'result', {});
2160
+ const orders = this.safeDict(result, 'open', {});
2161
2161
  return this.parseOrders(orders, market, since, limit);
2162
2162
  }
2163
2163
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2229,8 +2229,8 @@ class kraken extends kraken$1 {
2229
2229
  if (symbol !== undefined) {
2230
2230
  market = this.market(symbol);
2231
2231
  }
2232
- const result = this.safeValue(response, 'result', {});
2233
- const orders = this.safeValue(result, 'closed', []);
2232
+ const result = this.safeDict(response, 'result', {});
2233
+ const orders = this.safeDict(result, 'closed', {});
2234
2234
  return this.parseOrders(orders, market, since, limit);
2235
2235
  }
2236
2236
  parseTransactionStatus(status) {
@@ -2690,7 +2690,7 @@ class kraken extends kraken$1 {
2690
2690
  // }
2691
2691
  // }
2692
2692
  //
2693
- const result = this.safeValue(response, 'result', {});
2693
+ const result = this.safeDict(response, 'result', {});
2694
2694
  return this.parseTransaction(result, currency);
2695
2695
  }
2696
2696
  throw new errors.ExchangeError(this.id + " withdraw() requires a 'key' parameter (withdrawal key name, as set up on your account)");
@@ -534,7 +534,7 @@ class krakenfutures extends krakenfutures$1 {
534
534
  // "serverTime": "2022-02-18T14:16:29.440Z"
535
535
  // }
536
536
  //
537
- const tickers = this.safeValue(response, 'tickers');
537
+ const tickers = this.safeList(response, 'tickers');
538
538
  return this.parseTickers(tickers, symbols);
539
539
  }
540
540
  parseTicker(ticker, market = undefined) {
@@ -672,7 +672,7 @@ class krakenfutures extends krakenfutures$1 {
672
672
  // "more_candles": true
673
673
  // }
674
674
  //
675
- const candles = this.safeValue(response, 'candles');
675
+ const candles = this.safeList(response, 'candles');
676
676
  return this.parseOHLCVs(candles, market, timeframe, since, limit);
677
677
  }
678
678
  parseOHLCV(ohlcv, market = undefined) {
@@ -1135,7 +1135,7 @@ class krakenfutures extends krakenfutures$1 {
1135
1135
  // ]
1136
1136
  // }
1137
1137
  //
1138
- const data = this.safeValue(response, 'batchStatus', []);
1138
+ const data = this.safeList(response, 'batchStatus', []);
1139
1139
  return this.parseOrders(data);
1140
1140
  }
1141
1141
  async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
@@ -1252,7 +1252,7 @@ class krakenfutures extends krakenfutures$1 {
1252
1252
  // }
1253
1253
  // ]
1254
1254
  // }
1255
- const batchStatus = this.safeValue(response, 'batchStatus', []);
1255
+ const batchStatus = this.safeList(response, 'batchStatus', []);
1256
1256
  return this.parseOrders(batchStatus);
1257
1257
  }
1258
1258
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -1290,7 +1290,7 @@ class krakenfutures extends krakenfutures$1 {
1290
1290
  market = this.market(symbol);
1291
1291
  }
1292
1292
  const response = await this.privateGetOpenorders(params);
1293
- const orders = this.safeValue(response, 'openOrders', []);
1293
+ const orders = this.safeList(response, 'openOrders', []);
1294
1294
  return this.parseOrders(orders, market, since, limit);
1295
1295
  }
1296
1296
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2359,7 +2359,7 @@ class krakenfutures extends krakenfutures$1 {
2359
2359
  // "serverTime": "2018-07-19T11:32:39.433Z"
2360
2360
  // }
2361
2361
  //
2362
- const data = this.safeValue(response, 'instruments');
2362
+ const data = this.safeList(response, 'instruments');
2363
2363
  return this.parseLeverageTiers(data, symbols, 'symbol');
2364
2364
  }
2365
2365
  parseMarketLeverageTiers(info, market = undefined) {
@@ -2507,8 +2507,12 @@ class kucoin extends kucoin$1 {
2507
2507
  // ]
2508
2508
  // }
2509
2509
  // }
2510
+ const listData = this.safeList(response, 'data');
2511
+ if (listData !== undefined) {
2512
+ return this.parseOrders(listData, market, since, limit);
2513
+ }
2510
2514
  const responseData = this.safeDict(response, 'data', {});
2511
- const orders = this.safeValue(responseData, 'items', responseData);
2515
+ const orders = this.safeList(responseData, 'items', []);
2512
2516
  return this.parseOrders(orders, market, since, limit);
2513
2517
  }
2514
2518
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -597,7 +597,7 @@ class kucoinfutures extends kucoinfutures$1 {
597
597
  // ]
598
598
  // }
599
599
  //
600
- const data = this.safeValue(response, 'data', []);
600
+ const data = this.safeList(response, 'data', []);
601
601
  return this.parseOHLCVs(data, market, timeframe, since, limit);
602
602
  }
603
603
  parseOHLCV(ohlcv, market = undefined) {
@@ -1070,7 +1070,7 @@ class kucoinfutures extends kucoinfutures$1 {
1070
1070
  // }
1071
1071
  // }
1072
1072
  //
1073
- const data = this.safeValue(response, 'data', {});
1073
+ const data = this.safeDict(response, 'data', {});
1074
1074
  return this.parsePosition(data, market);
1075
1075
  }
1076
1076
  async fetchPositions(symbols = undefined, params = {}) {
@@ -1131,7 +1131,7 @@ class kucoinfutures extends kucoinfutures$1 {
1131
1131
  // ]
1132
1132
  // }
1133
1133
  //
1134
- const data = this.safeValue(response, 'data');
1134
+ const data = this.safeList(response, 'data');
1135
1135
  return this.parsePositions(data, symbols);
1136
1136
  }
1137
1137
  parsePosition(position, market = undefined) {
@@ -1279,7 +1279,7 @@ class kucoinfutures extends kucoinfutures$1 {
1279
1279
  // },
1280
1280
  // }
1281
1281
  //
1282
- const data = this.safeValue(response, 'data', {});
1282
+ const data = this.safeDict(response, 'data', {});
1283
1283
  return this.parseOrder(data, market);
1284
1284
  }
1285
1285
  async createOrders(orders, params = {}) {
@@ -1328,7 +1328,7 @@ class kucoinfutures extends kucoinfutures$1 {
1328
1328
  // ]
1329
1329
  // }
1330
1330
  //
1331
- const data = this.safeValue(response, 'data', []);
1331
+ const data = this.safeList(response, 'data', []);
1332
1332
  return this.parseOrders(data);
1333
1333
  }
1334
1334
  createContractOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
@@ -1734,7 +1734,7 @@ class kucoinfutures extends kucoinfutures$1 {
1734
1734
  // }
1735
1735
  //
1736
1736
  const responseData = this.safeValue(response, 'data', {});
1737
- const orders = this.safeValue(responseData, 'items', []);
1737
+ const orders = this.safeList(responseData, 'items', []);
1738
1738
  return this.parseOrders(orders, market, since, limit);
1739
1739
  }
1740
1740
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1831,7 +1831,7 @@ class kucoinfutures extends kucoinfutures$1 {
1831
1831
  // }
1832
1832
  //
1833
1833
  const market = (symbol !== undefined) ? this.market(symbol) : undefined;
1834
- const responseData = this.safeValue(response, 'data');
1834
+ const responseData = this.safeDict(response, 'data');
1835
1835
  return this.parseOrder(responseData, market);
1836
1836
  }
1837
1837
  parseOrder(order, market = undefined) {
@@ -2249,7 +2249,7 @@ class kucoinfutures extends kucoinfutures$1 {
2249
2249
  // ]
2250
2250
  // }
2251
2251
  //
2252
- const trades = this.safeValue(response, 'data', []);
2252
+ const trades = this.safeList(response, 'data', []);
2253
2253
  return this.parseTrades(trades, market, since, limit);
2254
2254
  }
2255
2255
  parseTrade(trade, market = undefined) {