ccxt 4.0.80 → 4.0.82

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 (46) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/README.md +3 -3
  3. package/dist/ccxt.browser.js +212 -116
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/binance.js +10 -0
  7. package/dist/cjs/src/bitget.js +9 -4
  8. package/dist/cjs/src/bitmex.js +3 -1
  9. package/dist/cjs/src/bybit.js +0 -9
  10. package/dist/cjs/src/delta.js +3 -0
  11. package/dist/cjs/src/exmo.js +64 -25
  12. package/dist/cjs/src/gate.js +2 -0
  13. package/dist/cjs/src/hitbtc.js +3 -1
  14. package/dist/cjs/src/huobi.js +2 -0
  15. package/dist/cjs/src/kucoin.js +96 -69
  16. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  17. package/dist/cjs/src/pro/okx.js +8 -3
  18. package/dist/cjs/src/pro/probit.js +2 -2
  19. package/dist/cjs/src/upbit.js +8 -0
  20. package/js/ccxt.d.ts +1 -1
  21. package/js/ccxt.js +1 -1
  22. package/js/src/abstract/binance.d.ts +10 -0
  23. package/js/src/abstract/binancecoinm.d.ts +10 -0
  24. package/js/src/abstract/binanceus.d.ts +10 -0
  25. package/js/src/abstract/binanceusdm.d.ts +10 -0
  26. package/js/src/abstract/gate.d.ts +2 -0
  27. package/js/src/abstract/gateio.d.ts +2 -0
  28. package/js/src/abstract/huobi.d.ts +2 -0
  29. package/js/src/abstract/huobipro.d.ts +2 -0
  30. package/js/src/binance.js +10 -0
  31. package/js/src/bitget.js +9 -4
  32. package/js/src/bitmex.d.ts +1 -1
  33. package/js/src/bitmex.js +3 -1
  34. package/js/src/bybit.js +0 -9
  35. package/js/src/delta.js +3 -0
  36. package/js/src/exmo.js +64 -25
  37. package/js/src/gate.js +2 -0
  38. package/js/src/hitbtc.js +3 -1
  39. package/js/src/huobi.js +2 -0
  40. package/js/src/kucoin.js +96 -69
  41. package/js/src/pro/krakenfutures.js +1 -1
  42. package/js/src/pro/okx.js +8 -3
  43. package/js/src/pro/probit.js +2 -2
  44. package/js/src/upbit.js +9 -1
  45. package/package.json +1 -1
  46. package/skip-tests.json +7 -2
@@ -47,6 +47,7 @@ interface binance {
47
47
  sapiGetMarginExchangeSmallLiability(params?: {}): Promise<implicitReturnType>;
48
48
  sapiGetMarginExchangeSmallLiabilityHistory(params?: {}): Promise<implicitReturnType>;
49
49
  sapiGetMarginNextHourlyInterestRate(params?: {}): Promise<implicitReturnType>;
50
+ sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
50
51
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
51
52
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
52
53
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
@@ -59,6 +60,12 @@ interface binance {
59
60
  sapiGetLoanLoanableData(params?: {}): Promise<implicitReturnType>;
60
61
  sapiGetLoanCollateralData(params?: {}): Promise<implicitReturnType>;
61
62
  sapiGetLoanRepayCollateralRate(params?: {}): Promise<implicitReturnType>;
63
+ sapiGetLoanFlexibleOngoingOrders(params?: {}): Promise<implicitReturnType>;
64
+ sapiGetLoanFlexibleBorrowHistory(params?: {}): Promise<implicitReturnType>;
65
+ sapiGetLoanFlexibleRepayHistory(params?: {}): Promise<implicitReturnType>;
66
+ sapiGetLoanFlexibleLtvAdjustmentHistory(params?: {}): Promise<implicitReturnType>;
67
+ sapiGetLoanFlexibleLoanableData(params?: {}): Promise<implicitReturnType>;
68
+ sapiGetLoanFlexibleCollateralData(params?: {}): Promise<implicitReturnType>;
62
69
  sapiGetLoanVipOngoingOrders(params?: {}): Promise<implicitReturnType>;
63
70
  sapiGetLoanVipRepayHistory(params?: {}): Promise<implicitReturnType>;
64
71
  sapiGetLoanVipCollateralAccount(params?: {}): Promise<implicitReturnType>;
@@ -300,6 +307,9 @@ interface binance {
300
307
  sapiPostLoanRepay(params?: {}): Promise<implicitReturnType>;
301
308
  sapiPostLoanAdjustLtv(params?: {}): Promise<implicitReturnType>;
302
309
  sapiPostLoanCustomizeMarginCall(params?: {}): Promise<implicitReturnType>;
310
+ sapiPostLoanFlexibleBorrow(params?: {}): Promise<implicitReturnType>;
311
+ sapiPostLoanFlexibleRepay(params?: {}): Promise<implicitReturnType>;
312
+ sapiPostLoanFlexibleAdjustLtv(params?: {}): Promise<implicitReturnType>;
303
313
  sapiPostLoanVipRepay(params?: {}): Promise<implicitReturnType>;
304
314
  sapiPostConvertGetQuote(params?: {}): Promise<implicitReturnType>;
305
315
  sapiPostConvertAcceptQuote(params?: {}): Promise<implicitReturnType>;
@@ -47,6 +47,7 @@ interface binance {
47
47
  sapiGetMarginExchangeSmallLiability(params?: {}): Promise<implicitReturnType>;
48
48
  sapiGetMarginExchangeSmallLiabilityHistory(params?: {}): Promise<implicitReturnType>;
49
49
  sapiGetMarginNextHourlyInterestRate(params?: {}): Promise<implicitReturnType>;
50
+ sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
50
51
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
51
52
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
52
53
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
@@ -59,6 +60,12 @@ interface binance {
59
60
  sapiGetLoanLoanableData(params?: {}): Promise<implicitReturnType>;
60
61
  sapiGetLoanCollateralData(params?: {}): Promise<implicitReturnType>;
61
62
  sapiGetLoanRepayCollateralRate(params?: {}): Promise<implicitReturnType>;
63
+ sapiGetLoanFlexibleOngoingOrders(params?: {}): Promise<implicitReturnType>;
64
+ sapiGetLoanFlexibleBorrowHistory(params?: {}): Promise<implicitReturnType>;
65
+ sapiGetLoanFlexibleRepayHistory(params?: {}): Promise<implicitReturnType>;
66
+ sapiGetLoanFlexibleLtvAdjustmentHistory(params?: {}): Promise<implicitReturnType>;
67
+ sapiGetLoanFlexibleLoanableData(params?: {}): Promise<implicitReturnType>;
68
+ sapiGetLoanFlexibleCollateralData(params?: {}): Promise<implicitReturnType>;
62
69
  sapiGetLoanVipOngoingOrders(params?: {}): Promise<implicitReturnType>;
63
70
  sapiGetLoanVipRepayHistory(params?: {}): Promise<implicitReturnType>;
64
71
  sapiGetLoanVipCollateralAccount(params?: {}): Promise<implicitReturnType>;
@@ -300,6 +307,9 @@ interface binance {
300
307
  sapiPostLoanRepay(params?: {}): Promise<implicitReturnType>;
301
308
  sapiPostLoanAdjustLtv(params?: {}): Promise<implicitReturnType>;
302
309
  sapiPostLoanCustomizeMarginCall(params?: {}): Promise<implicitReturnType>;
310
+ sapiPostLoanFlexibleBorrow(params?: {}): Promise<implicitReturnType>;
311
+ sapiPostLoanFlexibleRepay(params?: {}): Promise<implicitReturnType>;
312
+ sapiPostLoanFlexibleAdjustLtv(params?: {}): Promise<implicitReturnType>;
303
313
  sapiPostLoanVipRepay(params?: {}): Promise<implicitReturnType>;
304
314
  sapiPostConvertGetQuote(params?: {}): Promise<implicitReturnType>;
305
315
  sapiPostConvertAcceptQuote(params?: {}): Promise<implicitReturnType>;
@@ -47,6 +47,7 @@ interface binance {
47
47
  sapiGetMarginExchangeSmallLiability(params?: {}): Promise<implicitReturnType>;
48
48
  sapiGetMarginExchangeSmallLiabilityHistory(params?: {}): Promise<implicitReturnType>;
49
49
  sapiGetMarginNextHourlyInterestRate(params?: {}): Promise<implicitReturnType>;
50
+ sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
50
51
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
51
52
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
52
53
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
@@ -59,6 +60,12 @@ interface binance {
59
60
  sapiGetLoanLoanableData(params?: {}): Promise<implicitReturnType>;
60
61
  sapiGetLoanCollateralData(params?: {}): Promise<implicitReturnType>;
61
62
  sapiGetLoanRepayCollateralRate(params?: {}): Promise<implicitReturnType>;
63
+ sapiGetLoanFlexibleOngoingOrders(params?: {}): Promise<implicitReturnType>;
64
+ sapiGetLoanFlexibleBorrowHistory(params?: {}): Promise<implicitReturnType>;
65
+ sapiGetLoanFlexibleRepayHistory(params?: {}): Promise<implicitReturnType>;
66
+ sapiGetLoanFlexibleLtvAdjustmentHistory(params?: {}): Promise<implicitReturnType>;
67
+ sapiGetLoanFlexibleLoanableData(params?: {}): Promise<implicitReturnType>;
68
+ sapiGetLoanFlexibleCollateralData(params?: {}): Promise<implicitReturnType>;
62
69
  sapiGetLoanVipOngoingOrders(params?: {}): Promise<implicitReturnType>;
63
70
  sapiGetLoanVipRepayHistory(params?: {}): Promise<implicitReturnType>;
64
71
  sapiGetLoanVipCollateralAccount(params?: {}): Promise<implicitReturnType>;
@@ -300,6 +307,9 @@ interface binance {
300
307
  sapiPostLoanRepay(params?: {}): Promise<implicitReturnType>;
301
308
  sapiPostLoanAdjustLtv(params?: {}): Promise<implicitReturnType>;
302
309
  sapiPostLoanCustomizeMarginCall(params?: {}): Promise<implicitReturnType>;
310
+ sapiPostLoanFlexibleBorrow(params?: {}): Promise<implicitReturnType>;
311
+ sapiPostLoanFlexibleRepay(params?: {}): Promise<implicitReturnType>;
312
+ sapiPostLoanFlexibleAdjustLtv(params?: {}): Promise<implicitReturnType>;
303
313
  sapiPostLoanVipRepay(params?: {}): Promise<implicitReturnType>;
304
314
  sapiPostConvertGetQuote(params?: {}): Promise<implicitReturnType>;
305
315
  sapiPostConvertAcceptQuote(params?: {}): Promise<implicitReturnType>;
@@ -79,6 +79,8 @@ interface Exchange {
79
79
  privateSubAccountsPostSubAccountsUserIdUnlock(params?: {}): Promise<implicitReturnType>;
80
80
  privateSubAccountsPutSubAccountsUserIdKeysKey(params?: {}): Promise<implicitReturnType>;
81
81
  privateSubAccountsDeleteSubAccountsUserIdKeysKey(params?: {}): Promise<implicitReturnType>;
82
+ privatePortfolioGetSpotCurrencyPairs(params?: {}): Promise<implicitReturnType>;
83
+ privatePortfolioGetSpotCurrencyPairsCurrencyPair(params?: {}): Promise<implicitReturnType>;
82
84
  privatePortfolioGetAccounts(params?: {}): Promise<implicitReturnType>;
83
85
  privatePortfolioGetAccountMode(params?: {}): Promise<implicitReturnType>;
84
86
  privatePortfolioGetBorrowable(params?: {}): Promise<implicitReturnType>;
@@ -79,6 +79,8 @@ interface gate {
79
79
  privateSubAccountsPostSubAccountsUserIdUnlock(params?: {}): Promise<implicitReturnType>;
80
80
  privateSubAccountsPutSubAccountsUserIdKeysKey(params?: {}): Promise<implicitReturnType>;
81
81
  privateSubAccountsDeleteSubAccountsUserIdKeysKey(params?: {}): Promise<implicitReturnType>;
82
+ privatePortfolioGetSpotCurrencyPairs(params?: {}): Promise<implicitReturnType>;
83
+ privatePortfolioGetSpotCurrencyPairsCurrencyPair(params?: {}): Promise<implicitReturnType>;
82
84
  privatePortfolioGetAccounts(params?: {}): Promise<implicitReturnType>;
83
85
  privatePortfolioGetAccountMode(params?: {}): Promise<implicitReturnType>;
84
86
  privatePortfolioGetBorrowable(params?: {}): Promise<implicitReturnType>;
@@ -320,6 +320,7 @@ interface Exchange {
320
320
  contractPrivateGetLinearSwapApiV3UnifiedAccountInfo(params?: {}): Promise<implicitReturnType>;
321
321
  contractPrivateGetLinearSwapApiV3FixPositionMarginChangeRecord(params?: {}): Promise<implicitReturnType>;
322
322
  contractPrivateGetLinearSwapApiV3SwapUnifiedAccountType(params?: {}): Promise<implicitReturnType>;
323
+ contractPrivateGetLinearSwapApiV3LinearSwapOverviewAccountInfo(params?: {}): Promise<implicitReturnType>;
323
324
  contractPrivatePostApiV1ContractBalanceValuation(params?: {}): Promise<implicitReturnType>;
324
325
  contractPrivatePostApiV1ContractAccountInfo(params?: {}): Promise<implicitReturnType>;
325
326
  contractPrivatePostApiV1ContractPositionInfo(params?: {}): Promise<implicitReturnType>;
@@ -504,6 +505,7 @@ interface Exchange {
504
505
  contractPrivatePostLinearSwapApiV3SwapCrossHisordersExact(params?: {}): Promise<implicitReturnType>;
505
506
  contractPrivatePostLinearSwapApiV3FixPositionMarginChange(params?: {}): Promise<implicitReturnType>;
506
507
  contractPrivatePostLinearSwapApiV3SwapSwitchAccountType(params?: {}): Promise<implicitReturnType>;
508
+ contractPrivatePostLinearSwapApiV3LinearSwapFeeSwitch(params?: {}): Promise<implicitReturnType>;
507
509
  contractPrivatePostLinearSwapApiV1SwapTriggerOrder(params?: {}): Promise<implicitReturnType>;
508
510
  contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(params?: {}): Promise<implicitReturnType>;
509
511
  contractPrivatePostLinearSwapApiV1SwapTriggerCancel(params?: {}): Promise<implicitReturnType>;
@@ -320,6 +320,7 @@ interface huobi {
320
320
  contractPrivateGetLinearSwapApiV3UnifiedAccountInfo(params?: {}): Promise<implicitReturnType>;
321
321
  contractPrivateGetLinearSwapApiV3FixPositionMarginChangeRecord(params?: {}): Promise<implicitReturnType>;
322
322
  contractPrivateGetLinearSwapApiV3SwapUnifiedAccountType(params?: {}): Promise<implicitReturnType>;
323
+ contractPrivateGetLinearSwapApiV3LinearSwapOverviewAccountInfo(params?: {}): Promise<implicitReturnType>;
323
324
  contractPrivatePostApiV1ContractBalanceValuation(params?: {}): Promise<implicitReturnType>;
324
325
  contractPrivatePostApiV1ContractAccountInfo(params?: {}): Promise<implicitReturnType>;
325
326
  contractPrivatePostApiV1ContractPositionInfo(params?: {}): Promise<implicitReturnType>;
@@ -504,6 +505,7 @@ interface huobi {
504
505
  contractPrivatePostLinearSwapApiV3SwapCrossHisordersExact(params?: {}): Promise<implicitReturnType>;
505
506
  contractPrivatePostLinearSwapApiV3FixPositionMarginChange(params?: {}): Promise<implicitReturnType>;
506
507
  contractPrivatePostLinearSwapApiV3SwapSwitchAccountType(params?: {}): Promise<implicitReturnType>;
508
+ contractPrivatePostLinearSwapApiV3LinearSwapFeeSwitch(params?: {}): Promise<implicitReturnType>;
507
509
  contractPrivatePostLinearSwapApiV1SwapTriggerOrder(params?: {}): Promise<implicitReturnType>;
508
510
  contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(params?: {}): Promise<implicitReturnType>;
509
511
  contractPrivatePostLinearSwapApiV1SwapTriggerCancel(params?: {}): Promise<implicitReturnType>;
package/js/src/binance.js CHANGED
@@ -243,6 +243,7 @@ export default class binance extends Exchange {
243
243
  'margin/exchange-small-liability': 0.6667,
244
244
  'margin/exchange-small-liability-history': 0.6667,
245
245
  'margin/next-hourly-interest-rate': 0.6667,
246
+ 'margin/capital-flow': 10,
246
247
  'margin/delist-schedule': 0.6667,
247
248
  'loan/vip/loanable/data': 40,
248
249
  'loan/vip/collateral/data': 40,
@@ -255,6 +256,12 @@ export default class binance extends Exchange {
255
256
  'loan/loanable/data': 40,
256
257
  'loan/collateral/data': 40,
257
258
  'loan/repay/collateral/rate': 600,
259
+ 'loan/flexible/ongoing/orders': 30,
260
+ 'loan/flexible/borrow/history': 40,
261
+ 'loan/flexible/repay/history': 40,
262
+ 'loan/flexible/ltv/adjustment/history': 40,
263
+ 'loan/flexible/loanable/data': 40,
264
+ 'loan/flexible/collateral/data': 40,
258
265
  'loan/vip/ongoing/orders': 40,
259
266
  'loan/vip/repay/history': 40,
260
267
  'loan/vip/collateral/account': 600,
@@ -520,6 +527,9 @@ export default class binance extends Exchange {
520
527
  'loan/repay': 40.002,
521
528
  'loan/adjust/ltv': 40.002,
522
529
  'loan/customize/margin_call': 40.002,
530
+ 'loan/flexible/borrow': 40.002,
531
+ 'loan/flexible/repay': 40.002,
532
+ 'loan/flexible/adjust/ltv': 40.002,
523
533
  'loan/vip/repay': 40.002,
524
534
  'convert/getQuote': 1.3334,
525
535
  'convert/acceptQuote': 3.3335,
package/js/src/bitget.js CHANGED
@@ -3841,6 +3841,8 @@ export default class bitget extends Exchange {
3841
3841
  * @method
3842
3842
  * @name bitget#fetchMyTrades
3843
3843
  * @description fetch all trades made by the user
3844
+ * @see https://bitgetlimited.github.io/apidoc/en/spot/#get-transaction-details
3845
+ * @see https://bitgetlimited.github.io/apidoc/en/mix/#get-order-fill-detail
3844
3846
  * @param {string} symbol unified market symbol
3845
3847
  * @param {int} [since] the earliest time in ms to fetch trades for
3846
3848
  * @param {int} [limit] the maximum number of trades structures to retrieve
@@ -3850,16 +3852,19 @@ export default class bitget extends Exchange {
3850
3852
  this.checkRequiredSymbol('fetchMyTrades', symbol);
3851
3853
  await this.loadMarkets();
3852
3854
  const market = this.market(symbol);
3853
- if (market['swap']) {
3854
- throw new BadSymbol(this.id + ' fetchMyTrades() only supports spot markets');
3855
- }
3856
3855
  const request = {
3857
3856
  'symbol': market['id'],
3858
3857
  };
3859
3858
  if (limit !== undefined) {
3860
3859
  request['limit'] = limit;
3861
3860
  }
3862
- const response = await this.privateSpotPostTradeFills(this.extend(request, params));
3861
+ let response = undefined;
3862
+ if (market['spot']) {
3863
+ response = await this.privateSpotPostTradeFills(this.extend(request, params));
3864
+ }
3865
+ else {
3866
+ response = await this.privateMixGetOrderFills(this.extend(request, params));
3867
+ }
3863
3868
  //
3864
3869
  // {
3865
3870
  // code: '00000',
@@ -112,7 +112,7 @@ export default class bitmex extends Exchange {
112
112
  rate: any;
113
113
  };
114
114
  }>;
115
- fetchFundingRates(symbols?: string[], params?: {}): Promise<{}>;
115
+ fetchFundingRates(symbols?: string[], params?: {}): Promise<any>;
116
116
  parseFundingRate(contract: any, market?: any): {
117
117
  info: any;
118
118
  symbol: any;
package/js/src/bitmex.js CHANGED
@@ -2277,7 +2277,9 @@ export default class bitmex extends Exchange {
2277
2277
  filteredResponse.push(item);
2278
2278
  }
2279
2279
  }
2280
- return this.parseFundingRates(filteredResponse, symbols);
2280
+ symbols = this.marketSymbols(symbols);
2281
+ const result = this.parseFundingRates(filteredResponse);
2282
+ return this.filterByArray(result, 'symbol', symbols);
2281
2283
  }
2282
2284
  parseFundingRate(contract, market = undefined) {
2283
2285
  // see response sample under "fetchMarkets" because same endpoint is being used here
package/js/src/bybit.js CHANGED
@@ -4447,9 +4447,6 @@ export default class bybit extends Exchange {
4447
4447
  return this.parseOrder(order);
4448
4448
  }
4449
4449
  async editUnifiedAccountOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
4450
- if (amount === undefined && price === undefined) {
4451
- throw new InvalidOrder(this.id + ' editOrder requires either a price argument or an amount argument');
4452
- }
4453
4450
  await this.loadMarkets();
4454
4451
  const market = this.market(symbol);
4455
4452
  if (!market['linear'] && !market['option']) {
@@ -4528,9 +4525,6 @@ export default class bybit extends Exchange {
4528
4525
  });
4529
4526
  }
4530
4527
  async editUnifiedMarginOrder(id, symbol, type, side, amount, price = undefined, params = {}) {
4531
- if (amount === undefined && price === undefined) {
4532
- throw new InvalidOrder(this.id + ' editOrder requires either a price argument or an amount argument');
4533
- }
4534
4528
  await this.loadMarkets();
4535
4529
  const market = this.market(symbol);
4536
4530
  if (!market['linear'] && !market['option']) {
@@ -4627,9 +4621,6 @@ export default class bybit extends Exchange {
4627
4621
  return this.parseOrder(order);
4628
4622
  }
4629
4623
  async editContractV3Order(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
4630
- if (amount === undefined && price === undefined) {
4631
- throw new InvalidOrder(this.id + ' editOrder requires either a price argument or an amount argument');
4632
- }
4633
4624
  await this.loadMarkets();
4634
4625
  const market = this.market(symbol);
4635
4626
  const request = {
package/js/src/delta.js CHANGED
@@ -707,6 +707,9 @@ export default class delta extends Exchange {
707
707
  for (let i = 0; i < markets.length; i++) {
708
708
  const market = markets[i];
709
709
  let type = this.safeString(market, 'contract_type');
710
+ if (type === 'options_combos') {
711
+ continue;
712
+ }
710
713
  // const settlingAsset = this.safeValue (market, 'settling_asset', {});
711
714
  const quotingAsset = this.safeValue(market, 'quoting_asset', {});
712
715
  const underlyingAsset = this.safeValue(market, 'underlying_asset', {});
package/js/src/exmo.js CHANGED
@@ -874,20 +874,36 @@ export default class exmo extends Exchange {
874
874
  }
875
875
  parseBalance(response) {
876
876
  const result = { 'info': response };
877
- const free = this.safeValue(response, 'balances', {});
878
- const used = this.safeValue(response, 'reserved', {});
879
- const currencyIds = Object.keys(free);
880
- for (let i = 0; i < currencyIds.length; i++) {
881
- const currencyId = currencyIds[i];
882
- const code = this.safeCurrencyCode(currencyId);
883
- const account = this.account();
884
- if (currencyId in free) {
885
- account['free'] = this.safeString(free, currencyId);
877
+ const wallets = this.safeValue(response, 'wallets');
878
+ if (wallets !== undefined) {
879
+ const currencyIds = Object.keys(wallets);
880
+ for (let i = 0; i < currencyIds.length; i++) {
881
+ const currencyId = currencyIds[i];
882
+ const item = wallets[currencyId];
883
+ const currency = this.safeCurrencyCode(currencyId);
884
+ const account = this.account();
885
+ account['used'] = this.safeString(item, 'used');
886
+ account['free'] = this.safeString(item, 'free');
887
+ account['total'] = this.safeString(item, 'balance');
888
+ result[currency] = account;
886
889
  }
887
- if (currencyId in used) {
888
- account['used'] = this.safeString(used, currencyId);
890
+ }
891
+ else {
892
+ const free = this.safeValue(response, 'balances', {});
893
+ const used = this.safeValue(response, 'reserved', {});
894
+ const currencyIds = Object.keys(free);
895
+ for (let i = 0; i < currencyIds.length; i++) {
896
+ const currencyId = currencyIds[i];
897
+ const code = this.safeCurrencyCode(currencyId);
898
+ const account = this.account();
899
+ if (currencyId in free) {
900
+ account['free'] = this.safeString(free, currencyId);
901
+ }
902
+ if (currencyId in used) {
903
+ account['used'] = this.safeString(used, currencyId);
904
+ }
905
+ result[code] = account;
889
906
  }
890
- result[code] = account;
891
907
  }
892
908
  return this.safeBalance(result);
893
909
  }
@@ -897,22 +913,45 @@ export default class exmo extends Exchange {
897
913
  * @name exmo#fetchBalance
898
914
  * @description query for balance and get the amount of funds available for trading or funds locked in orders
899
915
  * @param {object} [params] extra parameters specific to the exmo api endpoint
916
+ * @param {string} [params.marginMode] *isolated* fetches the isolated margin balance
900
917
  * @returns {object} a [balance structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#balance-structure}
901
918
  */
902
919
  await this.loadMarkets();
903
- const response = await this.privatePostUserInfo(params);
904
- //
905
- // {
906
- // "uid":131685,
907
- // "server_date":1628999600,
908
- // "balances":{
909
- // "EXM":"0",
910
- // "USD":"0",
911
- // "EUR":"0",
912
- // "GBP":"0",
913
- // },
914
- // }
915
- //
920
+ let marginMode = undefined;
921
+ [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
922
+ if (marginMode === 'cross') {
923
+ throw new BadRequest(this.id + ' does not support cross margin');
924
+ }
925
+ let response = undefined;
926
+ if (marginMode === 'isolated') {
927
+ response = await this.privatePostMarginUserWalletList(params);
928
+ //
929
+ // {
930
+ // "wallets": {
931
+ // "USD": {
932
+ // "balance": "1000",
933
+ // "free": "600",
934
+ // "used": "400"
935
+ // }
936
+ // }
937
+ // }
938
+ //
939
+ }
940
+ else {
941
+ response = await this.privatePostUserInfo(params);
942
+ //
943
+ // {
944
+ // "uid":131685,
945
+ // "server_date":1628999600,
946
+ // "balances":{
947
+ // "EXM":"0",
948
+ // "USD":"0",
949
+ // "EUR":"0",
950
+ // "GBP":"0",
951
+ // },
952
+ // }
953
+ //
954
+ }
916
955
  return this.parseBalance(response);
917
956
  }
918
957
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
package/js/src/gate.js CHANGED
@@ -282,6 +282,8 @@ export default class gate extends Exchange {
282
282
  },
283
283
  'portfolio': {
284
284
  'get': {
285
+ 'spot/currency_pairs': 1.5,
286
+ 'spot/currency_pairs/{currency_pair}': 1.5,
285
287
  'accounts': 1.5,
286
288
  'account_mode': 1.5,
287
289
  'borrowable': 1.5,
package/js/src/hitbtc.js CHANGED
@@ -592,7 +592,6 @@ export default class hitbtc extends Exchange {
592
592
  'STEPN': 'GMT',
593
593
  'STX': 'STOX',
594
594
  'TV': 'Tokenville',
595
- 'USD': 'USDT',
596
595
  'XMT': 'MTL',
597
596
  'XPNT': 'PNT',
598
597
  },
@@ -644,6 +643,9 @@ export default class hitbtc extends Exchange {
644
643
  const ids = Object.keys(response);
645
644
  for (let i = 0; i < ids.length; i++) {
646
645
  const id = ids[i];
646
+ if (id.endsWith('_BQX')) {
647
+ continue; // seems like an invalid symbol and if we try to access it individually we get: {"timestamp":"2023-09-02T14:38:20.351Z","error":{"description":"Try get /public/symbol, to get list of all available symbols.","code":2001,"message":"No such symbol: EOSUSD_BQX"},"path":"/api/3/public/symbol/EOSUSD_BQX","requestId":"e1e9fce6-16374591"}
648
+ }
647
649
  const market = this.safeValue(response, id);
648
650
  const marketType = this.safeString(market, 'type');
649
651
  const expiry = this.safeInteger(market, 'expiry');
package/js/src/huobi.js CHANGED
@@ -605,6 +605,7 @@ export default class huobi extends Exchange {
605
605
  'linear-swap-api/v3/unified_account_info': 1,
606
606
  'linear-swap-api/v3/fix_position_margin_change_record': 1,
607
607
  'linear-swap-api/v3/swap_unified_account_type': 1,
608
+ 'linear-swap-api/v3/linear_swap_overview_account_info': 1,
608
609
  },
609
610
  'post': {
610
611
  // Future Account Interface
@@ -799,6 +800,7 @@ export default class huobi extends Exchange {
799
800
  'linear-swap-api/v3/swap_cross_hisorders_exact': 1,
800
801
  'linear-swap-api/v3/fix_position_margin_change': 1,
801
802
  'linear-swap-api/v3/swap_switch_account_type': 1,
803
+ 'linear-swap-api/v3/linear_swap_fee_switch': 1,
802
804
  // Swap Strategy Order Interface
803
805
  'linear-swap-api/v1/swap_trigger_order': 1,
804
806
  'linear-swap-api/v1/swap_cross_trigger_order': 1,