ccxt 4.5.55 → 4.5.56

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 (177) hide show
  1. package/README.md +209 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/aftermath.js +10 -5
  5. package/dist/cjs/src/alpaca.js +2 -2
  6. package/dist/cjs/src/apex.js +25 -16
  7. package/dist/cjs/src/arkham.js +7 -4
  8. package/dist/cjs/src/ascendex.js +6 -3
  9. package/dist/cjs/src/base/Exchange.js +3 -3
  10. package/dist/cjs/src/bigone.js +7 -4
  11. package/dist/cjs/src/binance.js +4 -4
  12. package/dist/cjs/src/bingx.js +4 -4
  13. package/dist/cjs/src/bitflyer.js +2 -1
  14. package/dist/cjs/src/bitget.js +14 -3
  15. package/dist/cjs/src/bitmart.js +5 -4
  16. package/dist/cjs/src/bitmex.js +7 -4
  17. package/dist/cjs/src/bitopro.js +1 -1
  18. package/dist/cjs/src/bitrue.js +2 -1
  19. package/dist/cjs/src/bitso.js +6 -3
  20. package/dist/cjs/src/bitstamp.js +5 -3
  21. package/dist/cjs/src/bittrade.js +2 -1
  22. package/dist/cjs/src/blofin.js +2 -1
  23. package/dist/cjs/src/bybit.js +19 -17
  24. package/dist/cjs/src/bybiteu.js +1 -0
  25. package/dist/cjs/src/coinbaseexchange.js +2 -1
  26. package/dist/cjs/src/coinbaseinternational.js +15 -9
  27. package/dist/cjs/src/coinex.js +5 -3
  28. package/dist/cjs/src/coinsph.js +4 -4
  29. package/dist/cjs/src/cryptocom.js +6 -6
  30. package/dist/cjs/src/deepcoin.js +6 -3
  31. package/dist/cjs/src/delta.js +2 -1
  32. package/dist/cjs/src/deribit.js +4 -2
  33. package/dist/cjs/src/derive.js +5 -3
  34. package/dist/cjs/src/digifinex.js +2 -1
  35. package/dist/cjs/src/exmo.js +12 -39
  36. package/dist/cjs/src/foxbit.js +1 -1
  37. package/dist/cjs/src/gemini.js +4 -2
  38. package/dist/cjs/src/grvt.js +13 -7
  39. package/dist/cjs/src/hashkey.js +4 -4
  40. package/dist/cjs/src/hibachi.js +1 -1
  41. package/dist/cjs/src/hitbtc.js +2 -1
  42. package/dist/cjs/src/htx.js +9 -5
  43. package/dist/cjs/src/hyperliquid.js +19 -13
  44. package/dist/cjs/src/indodax.js +2 -1
  45. package/dist/cjs/src/kraken.js +14 -13
  46. package/dist/cjs/src/krakenfutures.js +2 -1
  47. package/dist/cjs/src/lbank.js +8 -4
  48. package/dist/cjs/src/lighter.js +1 -1
  49. package/dist/cjs/src/luno.js +1 -1
  50. package/dist/cjs/src/mercado.js +2 -1
  51. package/dist/cjs/src/mexc.js +24 -14
  52. package/dist/cjs/src/modetrade.js +1 -1
  53. package/dist/cjs/src/okx.js +6 -3
  54. package/dist/cjs/src/oxfun.js +5 -3
  55. package/dist/cjs/src/p2b.js +8 -4
  56. package/dist/cjs/src/paradex.js +3 -2
  57. package/dist/cjs/src/phemex.js +4 -2
  58. package/dist/cjs/src/poloniex.js +2 -1
  59. package/dist/cjs/src/pro/apex.js +10 -1
  60. package/dist/cjs/src/pro/aster.js +10 -9
  61. package/dist/cjs/src/pro/binance.js +3 -3
  62. package/dist/cjs/src/pro/bingx.js +7 -2
  63. package/dist/cjs/src/pro/bitmart.js +10 -0
  64. package/dist/cjs/src/pro/bitmex.js +1 -1
  65. package/dist/cjs/src/pro/grvt.js +8 -0
  66. package/dist/cjs/src/pro/htx.js +4 -4
  67. package/dist/cjs/src/pro/krakenfutures.js +16 -4
  68. package/dist/cjs/src/pro/modetrade.js +3 -3
  69. package/dist/cjs/src/pro/okx.js +4 -4
  70. package/dist/cjs/src/pro/oxfun.js +4 -4
  71. package/dist/cjs/src/pro/woo.js +4 -4
  72. package/dist/cjs/src/pro/woofipro.js +3 -3
  73. package/dist/cjs/src/pro/xt.js +1 -1
  74. package/dist/cjs/src/toobit.js +1 -1
  75. package/dist/cjs/src/woo.js +1 -1
  76. package/dist/cjs/src/woofipro.js +1 -1
  77. package/dist/cjs/src/xt.js +2 -1
  78. package/dist/cjs/src/yobit.js +4 -2
  79. package/dist/cjs/src/zebpay.js +3 -3
  80. package/js/ccxt.d.ts +1 -1
  81. package/js/ccxt.js +1 -1
  82. package/js/src/abstract/mexc.d.ts +1 -0
  83. package/js/src/aftermath.js +10 -5
  84. package/js/src/alpaca.js +2 -2
  85. package/js/src/apex.d.ts +1 -1
  86. package/js/src/apex.js +25 -16
  87. package/js/src/arkham.js +7 -4
  88. package/js/src/ascendex.js +6 -3
  89. package/js/src/base/Exchange.js +3 -3
  90. package/js/src/bigone.js +7 -4
  91. package/js/src/binance.js +4 -4
  92. package/js/src/bingx.js +4 -4
  93. package/js/src/bitflyer.js +2 -1
  94. package/js/src/bitget.js +14 -3
  95. package/js/src/bitmart.js +5 -4
  96. package/js/src/bitmex.js +7 -4
  97. package/js/src/bitopro.js +1 -1
  98. package/js/src/bitrue.js +2 -1
  99. package/js/src/bitso.js +6 -3
  100. package/js/src/bitstamp.js +5 -3
  101. package/js/src/bittrade.js +2 -1
  102. package/js/src/blofin.js +2 -1
  103. package/js/src/bybit.d.ts +1 -1
  104. package/js/src/bybit.js +19 -17
  105. package/js/src/bybiteu.js +1 -0
  106. package/js/src/coinbaseexchange.js +2 -1
  107. package/js/src/coinbaseinternational.d.ts +1 -1
  108. package/js/src/coinbaseinternational.js +15 -9
  109. package/js/src/coinex.d.ts +1 -1
  110. package/js/src/coinex.js +5 -3
  111. package/js/src/coinsph.js +4 -4
  112. package/js/src/cryptocom.js +6 -6
  113. package/js/src/deepcoin.js +6 -3
  114. package/js/src/delta.js +2 -1
  115. package/js/src/deribit.js +4 -2
  116. package/js/src/derive.js +5 -3
  117. package/js/src/digifinex.js +2 -1
  118. package/js/src/exmo.js +12 -39
  119. package/js/src/foxbit.js +1 -1
  120. package/js/src/gemini.js +4 -2
  121. package/js/src/grvt.d.ts +1 -1
  122. package/js/src/grvt.js +13 -7
  123. package/js/src/hashkey.js +4 -4
  124. package/js/src/hibachi.d.ts +1 -1
  125. package/js/src/hibachi.js +1 -1
  126. package/js/src/hitbtc.js +2 -1
  127. package/js/src/htx.js +9 -5
  128. package/js/src/hyperliquid.d.ts +4 -4
  129. package/js/src/hyperliquid.js +19 -13
  130. package/js/src/indodax.js +2 -1
  131. package/js/src/kraken.js +14 -13
  132. package/js/src/krakenfutures.js +2 -1
  133. package/js/src/lbank.js +8 -4
  134. package/js/src/lighter.d.ts +1 -1
  135. package/js/src/lighter.js +1 -1
  136. package/js/src/luno.js +1 -1
  137. package/js/src/mercado.js +2 -1
  138. package/js/src/mexc.d.ts +2 -2
  139. package/js/src/mexc.js +24 -14
  140. package/js/src/modetrade.js +1 -1
  141. package/js/src/okx.js +6 -3
  142. package/js/src/oxfun.js +5 -3
  143. package/js/src/p2b.js +8 -4
  144. package/js/src/paradex.js +3 -2
  145. package/js/src/phemex.js +4 -2
  146. package/js/src/poloniex.js +2 -1
  147. package/js/src/pro/apex.js +10 -1
  148. package/js/src/pro/aster.js +10 -9
  149. package/js/src/pro/binance.d.ts +1 -1
  150. package/js/src/pro/binance.js +3 -3
  151. package/js/src/pro/bingx.js +7 -2
  152. package/js/src/pro/bitmart.js +10 -0
  153. package/js/src/pro/bitmex.js +1 -1
  154. package/js/src/pro/grvt.js +8 -0
  155. package/js/src/pro/htx.d.ts +4 -4
  156. package/js/src/pro/htx.js +4 -4
  157. package/js/src/pro/krakenfutures.d.ts +4 -4
  158. package/js/src/pro/krakenfutures.js +16 -4
  159. package/js/src/pro/modetrade.d.ts +3 -3
  160. package/js/src/pro/modetrade.js +3 -3
  161. package/js/src/pro/okx.d.ts +4 -4
  162. package/js/src/pro/okx.js +4 -4
  163. package/js/src/pro/oxfun.d.ts +4 -4
  164. package/js/src/pro/oxfun.js +4 -4
  165. package/js/src/pro/woo.d.ts +4 -4
  166. package/js/src/pro/woo.js +4 -4
  167. package/js/src/pro/woofipro.d.ts +3 -3
  168. package/js/src/pro/woofipro.js +3 -3
  169. package/js/src/pro/xt.js +1 -1
  170. package/js/src/toobit.d.ts +1 -1
  171. package/js/src/toobit.js +1 -1
  172. package/js/src/woo.js +1 -1
  173. package/js/src/woofipro.js +1 -1
  174. package/js/src/xt.js +2 -1
  175. package/js/src/yobit.js +4 -2
  176. package/js/src/zebpay.js +3 -3
  177. package/package.json +21 -7
@@ -1546,8 +1546,9 @@ class bybit extends bybit$1["default"] {
1546
1546
  amountPrecision = this.parseNumber('1');
1547
1547
  pricePrecision = this.parseNumber('0.01');
1548
1548
  }
1549
+ const convertedExpireDate = this.convertExpireDateToMarketIdDate(expiry);
1549
1550
  return {
1550
- 'id': base + '-' + this.convertExpireDateToMarketIdDate(expiry) + '-' + strike + '-' + optionType,
1551
+ 'id': base + '-' + convertedExpireDate + '-' + strike + '-' + optionType,
1551
1552
  'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,
1552
1553
  'base': base,
1553
1554
  'quote': quote,
@@ -1954,8 +1955,8 @@ class bybit extends bybit$1["default"] {
1954
1955
  }
1955
1956
  return result;
1956
1957
  }
1957
- async fetchFutureMarkets(params) {
1958
- params = this.extend(params);
1958
+ async fetchFutureMarkets(params = {}) {
1959
+ params = this.extend(params, {});
1959
1960
  params['limit'] = 1000; // minimize number of requests
1960
1961
  let preLaunchMarkets = [];
1961
1962
  const usePrivateInstrumentsInfo = this.safeBool(this.options, 'usePrivateInstrumentsInfo', false);
@@ -2098,7 +2099,7 @@ class bybit extends bybit$1["default"] {
2098
2099
  symbol = symbol + '-' + this.yymmdd(expiry);
2099
2100
  }
2100
2101
  const contractSize = inverse ? this.safeNumber2(lotSizeFilter, 'minTradingQty', 'minOrderQty') : this.parseNumber('1');
2101
- result.push(this.safeMarketStructure({
2102
+ const parsedMarket = this.safeMarketStructure({
2102
2103
  'id': id,
2103
2104
  'symbol': symbol,
2104
2105
  'base': base,
@@ -2148,7 +2149,8 @@ class bybit extends bybit$1["default"] {
2148
2149
  },
2149
2150
  'created': this.safeInteger(market, 'launchTime'),
2150
2151
  'info': market,
2151
- }));
2152
+ });
2153
+ result.push(parsedMarket);
2152
2154
  }
2153
2155
  return result;
2154
2156
  }
@@ -4954,7 +4956,7 @@ class bybit extends bybit$1["default"] {
4954
4956
  //
4955
4957
  const result = this.safeDict(response, 'result', {});
4956
4958
  const row = this.safeList(result, 'list', []);
4957
- return this.parseOrders(row, undefined);
4959
+ return this.parseOrders(row);
4958
4960
  }
4959
4961
  /**
4960
4962
  * @method
@@ -5791,7 +5793,7 @@ class bybit extends bybit$1["default"] {
5791
5793
  */
5792
5794
  async fetchDepositAddressesByNetwork(code, params = {}) {
5793
5795
  await this.loadMarkets();
5794
- let currency = this.currency(code);
5796
+ const currency = this.currency(code);
5795
5797
  const request = {
5796
5798
  'coin': currency['id'],
5797
5799
  };
@@ -5823,9 +5825,9 @@ class bybit extends bybit$1["default"] {
5823
5825
  const result = this.safeDict(response, 'result', {});
5824
5826
  const chains = this.safeList(result, 'chains', []);
5825
5827
  const coin = this.safeString(result, 'coin');
5826
- currency = this.currency(coin);
5827
- const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {
5828
- 'currency': currency['code'],
5828
+ const currencyFromResponse = this.currency(coin);
5829
+ const parsed = this.parseDepositAddresses(chains, [currencyFromResponse['code']], false, {
5830
+ 'currency': currencyFromResponse['code'],
5829
5831
  });
5830
5832
  return this.indexBy(parsed, 'network');
5831
5833
  }
@@ -7099,7 +7101,7 @@ class bybit extends bybit$1["default"] {
7099
7101
  }
7100
7102
  async fetchDerivativesOpenInterestHistory(symbol, timeframe = '1h', since = undefined, limit = undefined, params = {}) {
7101
7103
  await this.loadMarkets();
7102
- let market = this.market(symbol);
7104
+ const market = this.market(symbol);
7103
7105
  const subType = market['linear'] ? 'linear' : 'inverse';
7104
7106
  const category = this.safeString(params, 'category', subType);
7105
7107
  const intervals = this.safeDict(this.options, 'intervals');
@@ -7150,8 +7152,8 @@ class bybit extends bybit$1["default"] {
7150
7152
  const result = this.safeDict(response, 'result', {});
7151
7153
  const data = this.addPaginationCursorToResult(response);
7152
7154
  const id = this.safeString(result, 'symbol');
7153
- market = this.safeMarket(id, market, undefined, 'contract');
7154
- return this.parseOpenInterestsHistory(data, market, since, limit);
7155
+ const safeMarketObj = this.safeMarket(id, market, undefined, 'contract');
7156
+ return this.parseOpenInterestsHistory(data, safeMarketObj, since, limit);
7155
7157
  }
7156
7158
  /**
7157
7159
  * @method
@@ -7166,7 +7168,7 @@ class bybit extends bybit$1["default"] {
7166
7168
  */
7167
7169
  async fetchOpenInterest(symbol, params = {}) {
7168
7170
  await this.loadMarkets();
7169
- let market = this.market(symbol);
7171
+ const market = this.market(symbol);
7170
7172
  if (!market['contract']) {
7171
7173
  throw new errors.BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
7172
7174
  }
@@ -7209,9 +7211,9 @@ class bybit extends bybit$1["default"] {
7209
7211
  //
7210
7212
  const result = this.safeDict(response, 'result', {});
7211
7213
  const id = this.safeString(result, 'symbol');
7212
- market = this.safeMarket(id, market, undefined, 'contract');
7214
+ const safeMarketObj = this.safeMarket(id, market, undefined, 'contract');
7213
7215
  const data = this.addPaginationCursorToResult(response);
7214
- return this.parseOpenInterest(data[0], market);
7216
+ return this.parseOpenInterest(data[0], safeMarketObj);
7215
7217
  }
7216
7218
  /**
7217
7219
  * @method
@@ -7376,7 +7378,7 @@ class bybit extends bybit$1["default"] {
7376
7378
  //
7377
7379
  const data = this.safeDict(response, 'result', {});
7378
7380
  const rows = this.safeList(data, 'loanAccountList', []);
7379
- const interest = this.parseBorrowInterests(rows, undefined);
7381
+ const interest = this.parseBorrowInterests(rows);
7380
7382
  return this.filterByCurrencySinceLimit(interest, code, since, limit);
7381
7383
  }
7382
7384
  /**
@@ -55,6 +55,7 @@ class bybiteu extends bybit["default"] {
55
55
  'margin': true,
56
56
  'swap': false,
57
57
  'future': false,
58
+ 'option': undefined,
58
59
  },
59
60
  });
60
61
  }
@@ -1034,13 +1034,14 @@ class coinbaseexchange extends coinbaseexchange$1["default"] {
1034
1034
  }
1035
1035
  const price = this.safeString(trade, 'price');
1036
1036
  const amount = this.safeString(trade, 'size');
1037
+ const symbol = market['symbol'];
1037
1038
  return this.safeTrade({
1038
1039
  'id': id,
1039
1040
  'order': orderId,
1040
1041
  'info': trade,
1041
1042
  'timestamp': timestamp,
1042
1043
  'datetime': this.iso8601(timestamp),
1043
- 'symbol': market['symbol'],
1044
+ 'symbol': symbol,
1044
1045
  'type': undefined,
1045
1046
  'takerOrMaker': takerOrMaker,
1046
1047
  'side': side,
@@ -351,7 +351,7 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
351
351
  }
352
352
  throw new errors.ArgumentsRequired(this.id + ' ' + methodName + '() requires a portfolio parameter or set the default portfolio with this.options["portfolio"]');
353
353
  }
354
- async handleNetworkIdAndParams(currencyCode, methodName, params) {
354
+ async handleNetworkIdAndParams(currencyCode, methodName, params = {}) {
355
355
  let networkId = undefined;
356
356
  [networkId, params] = this.handleOptionAndParams(params, methodName, 'network_arn_id');
357
357
  if (networkId === undefined) {
@@ -527,9 +527,10 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
527
527
  }
528
528
  const market = this.market(symbol);
529
529
  const page = this.safeInteger(params, pageKey, 1) - 1;
530
+ const offSet = this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest);
530
531
  const request = {
531
532
  'instrument': market['id'],
532
- 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
533
+ 'result_offset': offSet,
533
534
  };
534
535
  if (limit !== undefined) {
535
536
  request['result_limit'] = limit;
@@ -949,8 +950,9 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
949
950
  return await this.fetchPaginatedCallIncremental('fetchDepositsWithdrawals', code, since, limit, params, pageKey, maxEntriesPerRequest);
950
951
  }
951
952
  const page = this.safeInteger(params, pageKey, 1) - 1;
953
+ const offSet = this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest);
952
954
  const request = {
953
- 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
955
+ 'result_offset': offSet,
954
956
  };
955
957
  if (since !== undefined) {
956
958
  request['time_from'] = this.iso8601(since);
@@ -1385,16 +1387,18 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
1385
1387
  settleId = quoteId;
1386
1388
  symbol += ':' + quoteId;
1387
1389
  }
1390
+ const isLinear = isSpot ? undefined : (settleId === quoteId);
1391
+ const isInverse = isSpot ? undefined : (settleId !== quoteId);
1388
1392
  return {
1389
1393
  'id': marketId,
1390
1394
  'lowercaseId': marketId.toLowerCase(),
1391
1395
  'symbol': symbol,
1392
1396
  'base': baseId,
1393
1397
  'quote': quoteId,
1394
- 'settle': settleId ? settleId : undefined,
1398
+ 'settle': settleId,
1395
1399
  'baseId': baseId,
1396
1400
  'quoteId': quoteId,
1397
- 'settleId': settleId ? settleId : undefined,
1401
+ 'settleId': settleId,
1398
1402
  'type': isSpot ? 'spot' : 'swap',
1399
1403
  'spot': isSpot,
1400
1404
  'margin': false,
@@ -1403,8 +1407,8 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
1403
1407
  'option': false,
1404
1408
  'active': this.safeString(market, 'trading_state') === 'TRADING',
1405
1409
  'contract': !isSpot,
1406
- 'linear': isSpot ? undefined : (settleId === quoteId),
1407
- 'inverse': isSpot ? undefined : (settleId !== quoteId),
1410
+ 'linear': isLinear,
1411
+ 'inverse': isInverse,
1408
1412
  'taker': fees['trading']['taker'],
1409
1413
  'maker': fees['trading']['maker'],
1410
1414
  'contractSize': isSpot ? undefined : 1,
@@ -2053,9 +2057,10 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
2053
2057
  return await this.fetchPaginatedCallIncremental('fetchOpenOrders', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
2054
2058
  }
2055
2059
  const page = this.safeInteger(params, pageKey, 1) - 1;
2060
+ const offSet = this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest);
2056
2061
  const request = {
2057
2062
  'portfolio': portfolio,
2058
- 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
2063
+ 'result_offset': offSet,
2059
2064
  };
2060
2065
  let market = undefined;
2061
2066
  if (symbol) {
@@ -2137,8 +2142,9 @@ class coinbaseinternational extends coinbaseinternational$1["default"] {
2137
2142
  market = this.market(symbol);
2138
2143
  }
2139
2144
  const page = this.safeInteger(params, pageKey, 1) - 1;
2145
+ const offSet = this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest);
2140
2146
  const request = {
2141
- 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
2147
+ 'result_offset': offSet,
2142
2148
  };
2143
2149
  if (limit !== undefined) {
2144
2150
  if (limit > 100) {
@@ -4503,11 +4503,13 @@ class coinex extends coinex$1["default"] {
4503
4503
  const marketId = this.safeString(info, 'market');
4504
4504
  market = this.safeMarket(marketId, market, undefined, 'swap');
4505
4505
  const maxNotional = this.safeNumber(tier, 'amount');
4506
+ const curr = market['linear'] ? market['base'] : market['quote'];
4507
+ const notional = minNotional;
4506
4508
  tiers.push({
4507
4509
  'tier': this.sum(i, 1),
4508
4510
  'symbol': this.safeSymbol(marketId, market, undefined, 'swap'),
4509
- 'currency': market['linear'] ? market['base'] : market['quote'],
4510
- 'minNotional': minNotional,
4511
+ 'currency': curr,
4512
+ 'minNotional': notional,
4511
4513
  'maxNotional': maxNotional,
4512
4514
  'maintenanceMarginRate': this.safeNumber(tier, 'maintenance_margin_rate'),
4513
4515
  'maxLeverage': this.safeInteger(tier, 'leverage'),
@@ -5722,7 +5724,7 @@ class coinex extends coinex$1["default"] {
5722
5724
  * @name coinex#fetchDepositWithdrawFees
5723
5725
  * @description fetch the fees for deposits and withdrawals
5724
5726
  * @see https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/list-all-deposit-withdrawal-config
5725
- * @param codes
5727
+ * @param {string[]} [codes] list of unified currency codes
5726
5728
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5727
5729
  * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/?id=fee-structure}
5728
5730
  */
@@ -1277,12 +1277,12 @@ class coinsph extends coinsph$1["default"] {
1277
1277
  'currency': this.safeCurrencyCode(feeCurrencyId),
1278
1278
  };
1279
1279
  }
1280
- const isBuyer = this.safeBool2(trade, 'isBuyer', 'isBuyerMaker', undefined);
1280
+ const isBuyer = this.safeBool2(trade, 'isBuyer', 'isBuyerMaker');
1281
1281
  let side = undefined;
1282
1282
  if (isBuyer !== undefined) {
1283
1283
  side = (isBuyer === true) ? 'buy' : 'sell';
1284
1284
  }
1285
- const isMaker = this.safeString2(trade, 'isMaker', undefined);
1285
+ const isMaker = this.safeString(trade, 'isMaker');
1286
1286
  let takerOrMaker = undefined;
1287
1287
  if (isMaker !== undefined) {
1288
1288
  takerOrMaker = (isMaker === 'true') ? 'maker' : 'taker';
@@ -1677,7 +1677,7 @@ class coinsph extends coinsph$1["default"] {
1677
1677
  const marketId = this.safeString(order, 'symbol');
1678
1678
  market = this.safeMarket(marketId, market);
1679
1679
  const timestamp = this.safeInteger2(order, 'time', 'transactTime');
1680
- const trades = this.safeValue(order, 'fills', undefined);
1680
+ const trades = this.safeValue(order, 'fills');
1681
1681
  let triggerPrice = this.safeString(order, 'stopPrice');
1682
1682
  if (Precise["default"].stringEq(triggerPrice, '0')) {
1683
1683
  triggerPrice = undefined;
@@ -2218,7 +2218,7 @@ class coinsph extends coinsph$1["default"] {
2218
2218
  if (response === undefined) {
2219
2219
  return undefined;
2220
2220
  }
2221
- const responseCode = this.safeString(response, 'code', undefined);
2221
+ const responseCode = this.safeString(response, 'code');
2222
2222
  if ((responseCode !== undefined) && (responseCode !== '200') && (responseCode !== '0')) {
2223
2223
  const feedback = this.id + ' ' + body;
2224
2224
  this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
@@ -811,6 +811,8 @@ class cryptocom extends cryptocom$1["default"] {
811
811
  symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry) + '-' + strike + '-' + symbolOptionType;
812
812
  contract = true;
813
813
  }
814
+ const isLinear = (contract) ? true : undefined;
815
+ const isInverse = (contract) ? false : undefined;
814
816
  result.push({
815
817
  'id': this.safeString(market, 'symbol'),
816
818
  'symbol': symbol,
@@ -828,8 +830,8 @@ class cryptocom extends cryptocom$1["default"] {
828
830
  'option': option,
829
831
  'active': this.safeBool(market, 'tradable'),
830
832
  'contract': contract,
831
- 'linear': (contract) ? true : undefined,
832
- 'inverse': (contract) ? false : undefined,
833
+ 'linear': isLinear,
834
+ 'inverse': isInverse,
833
835
  'contractSize': this.safeNumber(market, 'contract_size'),
834
836
  'expiry': expiry,
835
837
  'expiryDatetime': this.iso8601(expiry),
@@ -2120,10 +2122,8 @@ class cryptocom extends cryptocom$1["default"] {
2120
2122
  if (network in depositAddresses) {
2121
2123
  return depositAddresses[network];
2122
2124
  }
2123
- else {
2124
- const keys = Object.keys(depositAddresses);
2125
- return depositAddresses[keys[0]];
2126
- }
2125
+ const keys = Object.keys(depositAddresses);
2126
+ return depositAddresses[keys[0]];
2127
2127
  }
2128
2128
  /**
2129
2129
  * @method
@@ -513,6 +513,8 @@ class deepcoin extends deepcoin$1["default"] {
513
513
  const maxLimitSize = this.safeString(market, 'maxLmtSz');
514
514
  const maxAmount = this.parseNumber(Precise["default"].stringMax(maxMarketSize, maxLimitSize));
515
515
  const state = this.safeString(market, 'state');
516
+ const isMargin = spot && (Precise["default"].stringGt(maxLeverage, '1'));
517
+ const isInverse = swap ? (!isLinear) : undefined;
516
518
  return this.extend(fees, {
517
519
  'id': id,
518
520
  'symbol': symbol,
@@ -524,14 +526,14 @@ class deepcoin extends deepcoin$1["default"] {
524
526
  'settleId': settleId,
525
527
  'type': type,
526
528
  'spot': spot,
527
- 'margin': spot && (Precise["default"].stringGt(maxLeverage, '1')),
529
+ 'margin': isMargin,
528
530
  'swap': swap,
529
531
  'future': false,
530
532
  'option': false,
531
533
  'active': state === 'live',
532
534
  'contract': swap,
533
535
  'linear': isLinear,
534
- 'inverse': swap ? (!isLinear) : undefined,
536
+ 'inverse': isInverse,
535
537
  'contractSize': swap ? this.safeNumber(market, 'ctVal') : undefined,
536
538
  'expiry': undefined,
537
539
  'expiryDatetime': undefined,
@@ -2192,11 +2194,12 @@ class deepcoin extends deepcoin$1["default"] {
2192
2194
  }
2193
2195
  let merged = true;
2194
2196
  [merged, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'merged', merged);
2197
+ const isMergedMode = merged ? 1 : 0;
2195
2198
  const request = {
2196
2199
  'InstrumentID': market['id'],
2197
2200
  'ProductGroup': productGroup,
2198
2201
  'IsCrossMargin': encodedMarginMode,
2199
- 'IsMergeMode': merged ? 1 : 0,
2202
+ 'IsMergeMode': isMergedMode,
2200
2203
  };
2201
2204
  const response = await this.privatePostDeepcoinTradeSwapCancelAll(this.extend(request, params));
2202
2205
  const data = this.safeList(response, 'data', []);
@@ -365,6 +365,7 @@ class delta extends delta$1["default"] {
365
365
  const strike = this.safeString(optionParts, 2);
366
366
  const datetime = this.convertExpireDate(expiry);
367
367
  const timestamp = this.parse8601(datetime);
368
+ const optionTypeUnified = (optionType === 'C') ? 'call' : 'put';
368
369
  return {
369
370
  'id': optionType + '-' + base + '-' + strike + '-' + expiry,
370
371
  'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,
@@ -387,7 +388,7 @@ class delta extends delta$1["default"] {
387
388
  'contractSize': this.parseNumber('1'),
388
389
  'expiry': timestamp,
389
390
  'expiryDatetime': datetime,
390
- 'optionType': (optionType === 'C') ? 'call' : 'put',
391
+ 'optionType': optionTypeUnified,
391
392
  'strike': this.parseNumber(strike),
392
393
  'precision': {
393
394
  'amount': undefined,
@@ -531,9 +531,11 @@ class deribit extends deribit$1["default"] {
531
531
  const optionType = this.safeString(optionParts, 3);
532
532
  const datetime = this.convertExpireDate(expiry);
533
533
  const timestamp = this.parse8601(datetime);
534
+ const id = base + '-' + this.convertExpireDateToMarketIdDate(expiry) + '-' + strike + '-' + optionType;
535
+ const symbolExpired = splitBase + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType;
534
536
  return {
535
- 'id': base + '-' + this.convertExpireDateToMarketIdDate(expiry) + '-' + strike + '-' + optionType,
536
- 'symbol': splitBase + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,
537
+ 'id': id,
538
+ 'symbol': symbolExpired,
537
539
  'base': base,
538
540
  'quote': quote,
539
541
  'settle': settle,
@@ -677,6 +677,8 @@ class derive extends derive$1["default"] {
677
677
  linear = true;
678
678
  inverse = false;
679
679
  }
680
+ const contractSize = (spot) ? undefined : 1;
681
+ const isContract = (swap || option);
680
682
  return this.safeMarketStructure({
681
683
  'id': marketId,
682
684
  'symbol': symbol,
@@ -693,10 +695,10 @@ class derive extends derive$1["default"] {
693
695
  'future': false,
694
696
  'option': option,
695
697
  'active': this.safeBool(market, 'is_active'),
696
- 'contract': (swap || option),
698
+ 'contract': isContract,
697
699
  'linear': linear,
698
700
  'inverse': inverse,
699
- 'contractSize': (spot) ? undefined : 1,
701
+ 'contractSize': contractSize,
700
702
  'expiry': expiry,
701
703
  'expiryDatetime': this.iso8601(expiry),
702
704
  'taker': this.safeNumber(market, 'taker_fee_rate'),
@@ -1822,7 +1824,7 @@ class derive extends derive$1["default"] {
1822
1824
  'gtc': 'GTC',
1823
1825
  'post_only': 'PO',
1824
1826
  };
1825
- return this.safeString(timeInForces, timeInForce, undefined);
1827
+ return this.safeString(timeInForces, timeInForce);
1826
1828
  }
1827
1829
  parseOrderStatus(status) {
1828
1830
  if (status !== undefined) {
@@ -682,6 +682,7 @@ class digifinex extends digifinex$1["default"] {
682
682
  isAllowed = 1;
683
683
  }
684
684
  }
685
+ const isActive = isAllowed ? true : false;
685
686
  result.push({
686
687
  'id': id,
687
688
  'symbol': symbol,
@@ -697,7 +698,7 @@ class digifinex extends digifinex$1["default"] {
697
698
  'swap': swap,
698
699
  'future': false,
699
700
  'option': false,
700
- 'active': isAllowed ? true : false,
701
+ 'active': isActive,
701
702
  'contract': swap,
702
703
  'linear': isLinear,
703
704
  'inverse': isInverse,
@@ -390,9 +390,7 @@ class exmo extends exmo$1["default"] {
390
390
  if (method === 'fetchPrivateTradingFees') {
391
391
  return await this.fetchPrivateTradingFees(params);
392
392
  }
393
- else {
394
- return await this.fetchPublicTradingFees(params);
395
- }
393
+ return await this.fetchPublicTradingFees(params);
396
394
  }
397
395
  async fetchPrivateTradingFees(params = {}) {
398
396
  await this.loadMarkets();
@@ -1145,7 +1143,8 @@ class exmo extends exmo$1["default"] {
1145
1143
  await this.loadMarkets();
1146
1144
  let ids = undefined;
1147
1145
  if (symbols === undefined) {
1148
- ids = this.ids.join(',');
1146
+ const allIds = this.ids;
1147
+ ids = allIds.join(',');
1149
1148
  // max URL length is 2083 symbols, including http schema, hostname, tld, etc...
1150
1149
  if (ids.length > 2048) {
1151
1150
  const numIds = this.ids.length;
@@ -2168,43 +2167,17 @@ class exmo extends exmo$1["default"] {
2168
2167
  });
2169
2168
  return this.parseOrders(response, market, since, limit, params);
2170
2169
  }
2171
- else {
2172
- const responseSwap = await this.privatePostMarginUserOrderHistory(this.extend(request, params));
2173
- //
2174
- // {
2175
- // "items": [
2176
- // {
2177
- // "event_id": "692862104574106858",
2178
- // "event_time": "1694116400173489405",
2179
- // "event_type": "OrderCancelStarted",
2180
- // "order_id": "692862104561289319",
2181
- // "order_type": "stop_limit_sell",
2182
- // "order_status": "cancel_started",
2183
- // "trade_id": "0",
2184
- // "trade_type":"",
2185
- // "trade_quantity": "0",
2186
- // "trade_price": "0",
2187
- // "pair": "ADA_USDT",
2188
- // "quantity": "12",
2189
- // "price": "0.23",
2190
- // "stop_price": "0.22",
2191
- // "distance": "0"
2192
- // }
2193
- // ...
2194
- // ]
2195
- // }
2196
- //
2197
- const items = this.safeValue(responseSwap, 'items');
2198
- const orders = this.parseOrders(items, market, since, limit, params);
2199
- const result = [];
2200
- for (let i = 0; i < orders.length; i++) {
2201
- const order = orders[i];
2202
- if (order['status'] === 'canceled') {
2203
- result.push(order);
2204
- }
2170
+ const responseSwap = await this.privatePostMarginUserOrderHistory(this.extend(request, params));
2171
+ const items = this.safeValue(responseSwap, 'items');
2172
+ const orders = this.parseOrders(items, market, since, limit, params);
2173
+ const result = [];
2174
+ for (let i = 0; i < orders.length; i++) {
2175
+ const order = orders[i];
2176
+ if (order['status'] === 'canceled') {
2177
+ result.push(order);
2205
2178
  }
2206
- return result;
2207
2179
  }
2180
+ return result;
2208
2181
  }
2209
2182
  /**
2210
2183
  * @method
@@ -1144,7 +1144,7 @@ class foxbit extends foxbit$1["default"] {
1144
1144
  // "remark": "A remarkable note for the order.",
1145
1145
  // "funds_received": "290.0"
1146
1146
  // }
1147
- return this.parseOrder(response, undefined);
1147
+ return this.parseOrder(response);
1148
1148
  }
1149
1149
  /**
1150
1150
  * @method
@@ -825,6 +825,7 @@ class gemini extends gemini$1["default"] {
825
825
  inverse = false;
826
826
  }
827
827
  const type = swap ? 'swap' : 'spot';
828
+ const isSpot = !swap;
828
829
  return {
829
830
  'id': marketId,
830
831
  'symbol': symbol,
@@ -835,7 +836,7 @@ class gemini extends gemini$1["default"] {
835
836
  'quoteId': quoteId,
836
837
  'settleId': settleId,
837
838
  'type': type,
838
- 'spot': !swap,
839
+ 'spot': isSpot,
839
840
  'margin': false,
840
841
  'swap': swap,
841
842
  'future': false,
@@ -1929,8 +1930,9 @@ class gemini extends gemini$1["default"] {
1929
1930
  throw new errors.AuthenticationError(this.id + ' sign() requires an account-key, master-keys are not-supported');
1930
1931
  }
1931
1932
  const nonce = this.nonce().toString();
1933
+ const finalUrl = url;
1932
1934
  const request = this.extend({
1933
- 'request': url,
1935
+ 'request': finalUrl,
1934
1936
  'nonce': nonce,
1935
1937
  }, query);
1936
1938
  let payload = this.json(request);
@@ -1831,7 +1831,7 @@ class grvt extends grvt$1["default"] {
1831
1831
  }
1832
1832
  async loadAccountInfos() {
1833
1833
  if (this.safeString(this.options, 'userMainAccountId') !== undefined) {
1834
- return;
1834
+ return false;
1835
1835
  }
1836
1836
  const promises = [];
1837
1837
  promises.push(this.privateTradingPostFullV1AggregatedAccountSummary());
@@ -1884,6 +1884,7 @@ class grvt extends grvt$1["default"] {
1884
1884
  const subAccountId = this.safeString(subAccountIds, 0);
1885
1885
  this.options['accountId'] = subAccountId;
1886
1886
  }
1887
+ return true;
1887
1888
  }
1888
1889
  /**
1889
1890
  * @method
@@ -1976,8 +1977,10 @@ class grvt extends grvt$1["default"] {
1976
1977
  }
1977
1978
  params = this.omit(params, ['clientOrderId']);
1978
1979
  const isMarketOrder = (type === 'market');
1980
+ const subAccountId = this.getSubAccountId(params);
1981
+ const isReduceOnly = this.safeBool(params, 'reduceOnly', false);
1979
1982
  const orderRequest = {
1980
- 'sub_account_id': this.getSubAccountId(params),
1983
+ 'sub_account_id': subAccountId,
1981
1984
  'time_in_force': undefined,
1982
1985
  'legs': [orderLeg],
1983
1986
  'signature': this.defaultSignature(),
@@ -1986,7 +1989,7 @@ class grvt extends grvt$1["default"] {
1986
1989
  },
1987
1990
  'is_market': isMarketOrder,
1988
1991
  'post_only': false,
1989
- 'reduce_only': this.safeBool(params, 'reduceOnly', false),
1992
+ 'reduce_only': isReduceOnly,
1990
1993
  // 'order_id': null,
1991
1994
  // 'state': null,
1992
1995
  };
@@ -2619,8 +2622,9 @@ class grvt extends grvt$1["default"] {
2619
2622
  */
2620
2623
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2621
2624
  await this.loadMarketsAndSignIn();
2625
+ const subAccountId = this.getSubAccountId(params);
2622
2626
  let request = {
2623
- 'sub_account_id': this.getSubAccountId(params),
2627
+ 'sub_account_id': subAccountId,
2624
2628
  };
2625
2629
  let market = undefined;
2626
2630
  if (symbol !== undefined) {
@@ -2796,8 +2800,9 @@ class grvt extends grvt$1["default"] {
2796
2800
  */
2797
2801
  async fetchOrder(id, symbol = undefined, params = {}) {
2798
2802
  await this.loadMarketsAndSignIn();
2803
+ const subAccountId = this.getSubAccountId(params);
2799
2804
  const request = {
2800
- 'sub_account_id': this.getSubAccountId(params),
2805
+ 'sub_account_id': subAccountId,
2801
2806
  };
2802
2807
  const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_order_id');
2803
2808
  if (clientOrderId !== undefined) {
@@ -3060,7 +3065,7 @@ class grvt extends grvt$1["default"] {
3060
3065
  // }
3061
3066
  //
3062
3067
  const result = this.safeDict(response, 'result', {});
3063
- return this.parseOrders([result], undefined);
3068
+ return this.parseOrders([result]);
3064
3069
  }
3065
3070
  /**
3066
3071
  * @method
@@ -3075,8 +3080,9 @@ class grvt extends grvt$1["default"] {
3075
3080
  */
3076
3081
  async cancelOrder(id, symbol = undefined, params = {}) {
3077
3082
  await this.loadMarketsAndSignIn();
3083
+ const subAccoubntId = this.getSubAccountId(params);
3078
3084
  const request = {
3079
- 'sub_account_id': this.getSubAccountId(params),
3085
+ 'sub_account_id': subAccoubntId,
3080
3086
  };
3081
3087
  const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_order_id');
3082
3088
  if (clientOrderId !== undefined) {