ccxt 4.1.95 → 4.1.96

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 (54) hide show
  1. package/README.md +3 -3
  2. package/build.sh +16 -16
  3. package/dist/ccxt.browser.js +385 -251
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/binance.js +145 -135
  7. package/dist/cjs/src/bingx.js +8 -7
  8. package/dist/cjs/src/bit2c.js +2 -3
  9. package/dist/cjs/src/bitfinex2.js +2 -3
  10. package/dist/cjs/src/bitmart.js +1 -1
  11. package/dist/cjs/src/btcbox.js +2 -3
  12. package/dist/cjs/src/coinbase.js +11 -5
  13. package/dist/cjs/src/cryptocom.js +2 -1
  14. package/dist/cjs/src/delta.js +25 -0
  15. package/dist/cjs/src/gate.js +2 -2
  16. package/dist/cjs/src/kraken.js +46 -45
  17. package/dist/cjs/src/krakenfutures.js +53 -26
  18. package/dist/cjs/src/kucoin.js +73 -3
  19. package/dist/cjs/src/kucoinfutures.js +1 -1
  20. package/dist/cjs/src/pro/binance.js +2 -3
  21. package/dist/cjs/src/pro/bitfinex.js +2 -3
  22. package/dist/cjs/src/pro/cex.js +1 -1
  23. package/dist/cjs/src/pro/gate.js +2 -2
  24. package/dist/cjs/src/pro/kraken.js +2 -3
  25. package/dist/cjs/src/pro/okx.js +1 -1
  26. package/dist/cjs/src/pro/woo.js +2 -3
  27. package/js/ccxt.d.ts +1 -1
  28. package/js/ccxt.js +1 -1
  29. package/js/src/abstract/kucoin.d.ts +12 -0
  30. package/js/src/abstract/kucoinfutures.d.ts +12 -1
  31. package/js/src/binance.js +145 -135
  32. package/js/src/bingx.js +8 -7
  33. package/js/src/bit2c.js +2 -3
  34. package/js/src/bitfinex2.js +2 -3
  35. package/js/src/bitmart.js +1 -1
  36. package/js/src/btcbox.js +2 -3
  37. package/js/src/coinbase.js +11 -5
  38. package/js/src/cryptocom.js +2 -1
  39. package/js/src/delta.d.ts +5 -4
  40. package/js/src/delta.js +25 -0
  41. package/js/src/gate.js +2 -2
  42. package/js/src/kraken.js +46 -45
  43. package/js/src/krakenfutures.js +53 -26
  44. package/js/src/kucoin.d.ts +3 -0
  45. package/js/src/kucoin.js +73 -3
  46. package/js/src/kucoinfutures.js +1 -1
  47. package/js/src/pro/binance.js +2 -3
  48. package/js/src/pro/bitfinex.js +2 -3
  49. package/js/src/pro/cex.js +1 -1
  50. package/js/src/pro/gate.js +2 -2
  51. package/js/src/pro/kraken.js +2 -3
  52. package/js/src/pro/okx.js +1 -1
  53. package/js/src/pro/woo.js +2 -3
  54. package/package.json +2 -2
package/dist/cjs/ccxt.js CHANGED
@@ -168,7 +168,7 @@ var woo$1 = require('./src/pro/woo.js');
168
168
 
169
169
  //-----------------------------------------------------------------------------
170
170
  // this is updated by vss.js when building
171
- const version = '4.1.95';
171
+ const version = '4.1.96';
172
172
  Exchange["default"].ccxtVersion = version;
173
173
  const exchanges = {
174
174
  'ace': ace,
@@ -2565,24 +2565,23 @@ class binance extends binance$1 {
2565
2565
  let type = this.safeString(params, 'type', defaultType);
2566
2566
  let subType = undefined;
2567
2567
  [subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
2568
- const [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
2569
- let method = 'privateGetAccount';
2568
+ let marginMode = undefined;
2569
+ let query = undefined;
2570
+ [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
2571
+ query = this.omit(query, 'type');
2572
+ let response = undefined;
2570
2573
  const request = {};
2571
2574
  if (this.isLinear(type, subType)) {
2572
- const options = this.safeValue(this.options, type, {});
2573
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
2574
- method = this.safeString(fetchBalanceOptions, 'method', 'fapiPrivateV2GetAccount');
2575
2575
  type = 'linear';
2576
+ response = await this.fapiPrivateV2GetAccount(this.extend(request, query));
2576
2577
  }
2577
2578
  else if (this.isInverse(type, subType)) {
2578
- const options = this.safeValue(this.options, type, {});
2579
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
2580
- method = this.safeString(fetchBalanceOptions, 'method', 'dapiPrivateGetAccount');
2581
2579
  type = 'inverse';
2580
+ response = await this.dapiPrivateGetAccount(this.extend(request, query));
2582
2581
  }
2583
2582
  else if (marginMode === 'isolated') {
2584
- method = 'sapiGetMarginIsolatedAccount';
2585
2583
  const paramSymbols = this.safeValue(params, 'symbols');
2584
+ query = this.omit(query, 'symbols');
2586
2585
  if (paramSymbols !== undefined) {
2587
2586
  let symbols = '';
2588
2587
  if (Array.isArray(paramSymbols)) {
@@ -2598,18 +2597,20 @@ class binance extends binance$1 {
2598
2597
  }
2599
2598
  request['symbols'] = symbols;
2600
2599
  }
2600
+ response = await this.sapiGetMarginIsolatedAccount(this.extend(request, query));
2601
2601
  }
2602
2602
  else if ((type === 'margin') || (marginMode === 'cross')) {
2603
- method = 'sapiGetMarginAccount';
2603
+ response = await this.sapiGetMarginAccount(this.extend(request, query));
2604
2604
  }
2605
2605
  else if (type === 'savings') {
2606
- method = 'sapiGetLendingUnionAccount';
2606
+ response = await this.sapiGetLendingUnionAccount(this.extend(request, query));
2607
2607
  }
2608
2608
  else if (type === 'funding') {
2609
- method = 'sapiPostAssetGetFundingAsset';
2609
+ response = await this.sapiPostAssetGetFundingAsset(this.extend(request, query));
2610
+ }
2611
+ else {
2612
+ response = await this.privateGetAccount(this.extend(request, query));
2610
2613
  }
2611
- const requestParams = this.omit(query, ['type', 'symbols']);
2612
- const response = await this[method](this.extend(request, requestParams));
2613
2614
  //
2614
2615
  // spot
2615
2616
  //
@@ -3301,33 +3302,35 @@ class binance extends binance$1 {
3301
3302
  if (until !== undefined) {
3302
3303
  request['endTime'] = until;
3303
3304
  }
3304
- let method = 'publicGetKlines';
3305
+ let response = undefined;
3305
3306
  if (market['option']) {
3306
- method = 'eapiPublicGetKlines';
3307
+ response = await this.eapiPublicGetKlines(this.extend(request, params));
3307
3308
  }
3308
3309
  else if (price === 'mark') {
3309
3310
  if (market['inverse']) {
3310
- method = 'dapiPublicGetMarkPriceKlines';
3311
+ response = await this.dapiPublicGetMarkPriceKlines(this.extend(request, params));
3311
3312
  }
3312
3313
  else {
3313
- method = 'fapiPublicGetMarkPriceKlines';
3314
+ response = await this.fapiPublicGetMarkPriceKlines(this.extend(request, params));
3314
3315
  }
3315
3316
  }
3316
3317
  else if (price === 'index') {
3317
3318
  if (market['inverse']) {
3318
- method = 'dapiPublicGetIndexPriceKlines';
3319
+ response = await this.dapiPublicGetIndexPriceKlines(this.extend(request, params));
3319
3320
  }
3320
3321
  else {
3321
- method = 'fapiPublicGetIndexPriceKlines';
3322
+ response = await this.fapiPublicGetIndexPriceKlines(this.extend(request, params));
3322
3323
  }
3323
3324
  }
3324
3325
  else if (market['linear']) {
3325
- method = 'fapiPublicGetKlines';
3326
+ response = await this.fapiPublicGetKlines(this.extend(request, params));
3326
3327
  }
3327
3328
  else if (market['inverse']) {
3328
- method = 'dapiPublicGetKlines';
3329
+ response = await this.dapiPublicGetKlines(this.extend(request, params));
3330
+ }
3331
+ else {
3332
+ response = await this.publicGetKlines(this.extend(request, params));
3329
3333
  }
3330
- const response = await this[method](this.extend(request, params));
3331
3334
  //
3332
3335
  // [
3333
3336
  // [1591478520000,"0.02501300","0.02501800","0.02500000","0.02500000","22.19000000",1591478579999,"0.55490906",40,"10.92900000","0.27336462","0"],
@@ -4743,22 +4746,6 @@ class binance extends binance$1 {
4743
4746
  const request = {
4744
4747
  'symbol': market['id'],
4745
4748
  };
4746
- let method = 'privateGetOrder';
4747
- if (market['option']) {
4748
- method = 'eapiPrivateGetOrder';
4749
- }
4750
- else if (market['linear']) {
4751
- method = 'fapiPrivateGetOrder';
4752
- }
4753
- else if (market['inverse']) {
4754
- method = 'dapiPrivateGetOrder';
4755
- }
4756
- else if (type === 'margin' || marginMode !== undefined) {
4757
- method = 'sapiGetMarginOrder';
4758
- if (marginMode === 'isolated') {
4759
- request['isIsolated'] = true;
4760
- }
4761
- }
4762
4749
  const clientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
4763
4750
  if (clientOrderId !== undefined) {
4764
4751
  if (market['option']) {
@@ -4772,7 +4759,25 @@ class binance extends binance$1 {
4772
4759
  request['orderId'] = id;
4773
4760
  }
4774
4761
  const requestParams = this.omit(query, ['type', 'clientOrderId', 'origClientOrderId']);
4775
- const response = await this[method](this.extend(request, requestParams));
4762
+ let response = undefined;
4763
+ if (market['option']) {
4764
+ response = await this.eapiPrivateGetOrder(this.extend(request, requestParams));
4765
+ }
4766
+ else if (market['linear']) {
4767
+ response = await this.fapiPrivateGetOrder(this.extend(request, requestParams));
4768
+ }
4769
+ else if (market['inverse']) {
4770
+ response = await this.dapiPrivateGetOrder(this.extend(request, requestParams));
4771
+ }
4772
+ else if (type === 'margin' || marginMode !== undefined) {
4773
+ if (marginMode === 'isolated') {
4774
+ request['isIsolated'] = true;
4775
+ }
4776
+ response = await this.sapiGetMarginOrder(this.extend(request, requestParams));
4777
+ }
4778
+ else {
4779
+ response = await this.privateGetOrder(this.extend(request, requestParams));
4780
+ }
4776
4781
  return this.parseOrder(response, market);
4777
4782
  }
4778
4783
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -4810,34 +4815,36 @@ class binance extends binance$1 {
4810
4815
  const request = {
4811
4816
  'symbol': market['id'],
4812
4817
  };
4813
- let method = 'privateGetAllOrders';
4818
+ const until = this.safeInteger(params, 'until');
4819
+ if (until !== undefined) {
4820
+ params = this.omit(params, 'until');
4821
+ request['endTime'] = until;
4822
+ }
4823
+ if (since !== undefined) {
4824
+ request['startTime'] = since;
4825
+ }
4826
+ if (limit !== undefined) {
4827
+ request['limit'] = limit;
4828
+ }
4829
+ let response = undefined;
4814
4830
  if (market['option']) {
4815
- method = 'eapiPrivateGetHistoryOrders';
4831
+ response = await this.eapiPrivateGetHistoryOrders(this.extend(request, query));
4816
4832
  }
4817
4833
  else if (market['linear']) {
4818
- method = 'fapiPrivateGetAllOrders';
4834
+ response = await this.fapiPrivateGetAllOrders(this.extend(request, query));
4819
4835
  }
4820
4836
  else if (market['inverse']) {
4821
- method = 'dapiPrivateGetAllOrders';
4837
+ response = await this.dapiPrivateGetAllOrders(this.extend(request, query));
4822
4838
  }
4823
4839
  else if (type === 'margin' || marginMode !== undefined) {
4824
- method = 'sapiGetMarginAllOrders';
4825
4840
  if (marginMode === 'isolated') {
4826
4841
  request['isIsolated'] = true;
4827
4842
  }
4843
+ response = await this.sapiGetMarginAllOrders(this.extend(request, query));
4828
4844
  }
4829
- const until = this.safeInteger(params, 'until');
4830
- if (until !== undefined) {
4831
- params = this.omit(params, 'until');
4832
- request['endTime'] = until;
4833
- }
4834
- if (since !== undefined) {
4835
- request['startTime'] = since;
4836
- }
4837
- if (limit !== undefined) {
4838
- request['limit'] = limit;
4845
+ else {
4846
+ response = await this.privateGetAllOrders(this.extend(request, query));
4839
4847
  }
4840
- const response = await this[method](this.extend(request, query));
4841
4848
  //
4842
4849
  // spot
4843
4850
  //
@@ -4962,32 +4969,34 @@ class binance extends binance$1 {
4962
4969
  let subType = undefined;
4963
4970
  [subType, query] = this.handleSubTypeAndParams('fetchOpenOrders', market, query);
4964
4971
  const requestParams = this.omit(query, 'type');
4965
- let method = 'privateGetOpenOrders';
4972
+ let response = undefined;
4966
4973
  if (type === 'option') {
4967
- method = 'eapiPrivateGetOpenOrders';
4968
4974
  if (since !== undefined) {
4969
4975
  request['startTime'] = since;
4970
4976
  }
4971
4977
  if (limit !== undefined) {
4972
4978
  request['limit'] = limit;
4973
4979
  }
4980
+ response = await this.eapiPrivateGetOpenOrders(this.extend(request, requestParams));
4974
4981
  }
4975
4982
  else if (this.isLinear(type, subType)) {
4976
- method = 'fapiPrivateGetOpenOrders';
4983
+ response = await this.fapiPrivateGetOpenOrders(this.extend(request, requestParams));
4977
4984
  }
4978
4985
  else if (this.isInverse(type, subType)) {
4979
- method = 'dapiPrivateGetOpenOrders';
4986
+ response = await this.dapiPrivateGetOpenOrders(this.extend(request, requestParams));
4980
4987
  }
4981
4988
  else if (type === 'margin' || marginMode !== undefined) {
4982
- method = 'sapiGetMarginOpenOrders';
4983
4989
  if (marginMode === 'isolated') {
4984
4990
  request['isIsolated'] = true;
4985
4991
  if (symbol === undefined) {
4986
4992
  throw new errors.ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument for isolated markets');
4987
4993
  }
4988
4994
  }
4995
+ response = await this.sapiGetMarginOpenOrders(this.extend(request, requestParams));
4996
+ }
4997
+ else {
4998
+ response = await this.privateGetOpenOrders(this.extend(request, requestParams));
4989
4999
  }
4990
- const response = await this[method](this.extend(request, requestParams));
4991
5000
  return this.parseOrders(response, market, since, limit);
4992
5001
  }
4993
5002
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -5078,24 +5087,26 @@ class binance extends binance$1 {
5078
5087
  else {
5079
5088
  request['orderId'] = id;
5080
5089
  }
5081
- let method = 'privateDeleteOrder';
5090
+ const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
5091
+ let response = undefined;
5082
5092
  if (market['option']) {
5083
- method = 'eapiPrivateDeleteOrder';
5093
+ response = await this.eapiPrivateDeleteOrder(this.extend(request, requestParams));
5084
5094
  }
5085
5095
  else if (market['linear']) {
5086
- method = 'fapiPrivateDeleteOrder';
5096
+ response = await this.fapiPrivateDeleteOrder(this.extend(request, requestParams));
5087
5097
  }
5088
5098
  else if (market['inverse']) {
5089
- method = 'dapiPrivateDeleteOrder';
5099
+ response = await this.dapiPrivateDeleteOrder(this.extend(request, requestParams));
5090
5100
  }
5091
5101
  else if (type === 'margin' || marginMode !== undefined) {
5092
- method = 'sapiDeleteMarginOrder';
5093
5102
  if (marginMode === 'isolated') {
5094
5103
  request['isIsolated'] = true;
5095
5104
  }
5105
+ response = await this.sapiDeleteMarginOrder(this.extend(request, requestParams));
5106
+ }
5107
+ else {
5108
+ response = await this.privateDeleteOrder(this.extend(request, requestParams));
5096
5109
  }
5097
- const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
5098
- const response = await this[method](this.extend(request, requestParams));
5099
5110
  return this.parseOrder(response, market);
5100
5111
  }
5101
5112
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -5124,23 +5135,25 @@ class binance extends binance$1 {
5124
5135
  const type = this.safeString(params, 'type', market['type']);
5125
5136
  params = this.omit(params, ['type']);
5126
5137
  const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);
5127
- let method = 'privateDeleteOpenOrders';
5138
+ let response = undefined;
5128
5139
  if (market['option']) {
5129
- method = 'eapiPrivateDeleteAllOpenOrders';
5140
+ response = await this.eapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5130
5141
  }
5131
5142
  else if (market['linear']) {
5132
- method = 'fapiPrivateDeleteAllOpenOrders';
5143
+ response = await this.fapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5133
5144
  }
5134
5145
  else if (market['inverse']) {
5135
- method = 'dapiPrivateDeleteAllOpenOrders';
5146
+ response = await this.dapiPrivateDeleteAllOpenOrders(this.extend(request, query));
5136
5147
  }
5137
5148
  else if ((type === 'margin') || (marginMode !== undefined)) {
5138
- method = 'sapiDeleteMarginOpenOrders';
5139
5149
  if (marginMode === 'isolated') {
5140
5150
  request['isIsolated'] = true;
5141
5151
  }
5152
+ response = await this.sapiDeleteMarginOpenOrders(this.extend(request, query));
5153
+ }
5154
+ else {
5155
+ response = await this.privateDeleteOpenOrders(this.extend(request, query));
5142
5156
  }
5143
- const response = await this[method](this.extend(request, query));
5144
5157
  if (Array.isArray(response)) {
5145
5158
  return this.parseOrders(response, market);
5146
5159
  }
@@ -5277,37 +5290,12 @@ class binance extends binance$1 {
5277
5290
  const request = {};
5278
5291
  let market = undefined;
5279
5292
  let type = undefined;
5280
- let method = undefined;
5281
5293
  let marginMode = undefined;
5282
5294
  if (symbol !== undefined) {
5283
5295
  market = this.market(symbol);
5284
5296
  request['symbol'] = market['id'];
5285
5297
  }
5286
5298
  [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
5287
- if (type === 'option') {
5288
- method = 'eapiPrivateGetUserTrades';
5289
- }
5290
- else {
5291
- if (symbol === undefined) {
5292
- throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
5293
- }
5294
- [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
5295
- if (type === 'spot' || type === 'margin') {
5296
- method = 'privateGetMyTrades';
5297
- if ((type === 'margin') || (marginMode !== undefined)) {
5298
- method = 'sapiGetMarginMyTrades';
5299
- if (marginMode === 'isolated') {
5300
- request['isIsolated'] = true;
5301
- }
5302
- }
5303
- }
5304
- else if (market['linear']) {
5305
- method = 'fapiPrivateGetUserTrades';
5306
- }
5307
- else if (market['inverse']) {
5308
- method = 'dapiPrivateGetUserTrades';
5309
- }
5310
- }
5311
5299
  let endTime = this.safeInteger2(params, 'until', 'endTime');
5312
5300
  if (since !== undefined) {
5313
5301
  const startTime = since;
@@ -5335,7 +5323,33 @@ class binance extends binance$1 {
5335
5323
  }
5336
5324
  request['limit'] = limit;
5337
5325
  }
5338
- const response = await this[method](this.extend(request, params));
5326
+ let response = undefined;
5327
+ if (type === 'option') {
5328
+ response = await this.eapiPrivateGetUserTrades(this.extend(request, params));
5329
+ }
5330
+ else {
5331
+ if (symbol === undefined) {
5332
+ throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
5333
+ }
5334
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
5335
+ if (type === 'spot' || type === 'margin') {
5336
+ if ((type === 'margin') || (marginMode !== undefined)) {
5337
+ if (marginMode === 'isolated') {
5338
+ request['isIsolated'] = true;
5339
+ }
5340
+ response = await this.sapiGetMarginMyTrades(this.extend(request, params));
5341
+ }
5342
+ else {
5343
+ response = await this.privateGetMyTrades(this.extend(request, params));
5344
+ }
5345
+ }
5346
+ else if (market['linear']) {
5347
+ response = await this.fapiPrivateGetUserTrades(this.extend(request, params));
5348
+ }
5349
+ else if (market['inverse']) {
5350
+ response = await this.dapiPrivateGetUserTrades(this.extend(request, params));
5351
+ }
5352
+ }
5339
5353
  //
5340
5354
  // spot trade
5341
5355
  //
@@ -6665,7 +6679,6 @@ class binance extends binance$1 {
6665
6679
  * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
6666
6680
  */
6667
6681
  await this.loadMarkets();
6668
- let method = undefined;
6669
6682
  let type = undefined;
6670
6683
  [type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
6671
6684
  let subType = undefined;
@@ -6673,16 +6686,16 @@ class binance extends binance$1 {
6673
6686
  const isSpotOrMargin = (type === 'spot') || (type === 'margin');
6674
6687
  const isLinear = this.isLinear(type, subType);
6675
6688
  const isInverse = this.isInverse(type, subType);
6689
+ let response = undefined;
6676
6690
  if (isSpotOrMargin) {
6677
- method = 'sapiGetAssetTradeFee';
6691
+ response = await this.sapiGetAssetTradeFee(params);
6678
6692
  }
6679
6693
  else if (isLinear) {
6680
- method = 'fapiPrivateV2GetAccount';
6694
+ response = await this.fapiPrivateV2GetAccount(params);
6681
6695
  }
6682
6696
  else if (isInverse) {
6683
- method = 'dapiPrivateGetAccount';
6697
+ response = await this.dapiPrivateGetAccount(params);
6684
6698
  }
6685
- const response = await this[method](params);
6686
6699
  //
6687
6700
  // sapi / spot
6688
6701
  //
@@ -6880,17 +6893,16 @@ class binance extends binance$1 {
6880
6893
  const request = {
6881
6894
  'symbol': market['id'],
6882
6895
  };
6883
- let method = undefined;
6896
+ let response = undefined;
6884
6897
  if (market['linear']) {
6885
- method = 'fapiPublicGetPremiumIndex';
6898
+ response = await this.fapiPublicGetPremiumIndex(this.extend(request, params));
6886
6899
  }
6887
6900
  else if (market['inverse']) {
6888
- method = 'dapiPublicGetPremiumIndex';
6901
+ response = await this.dapiPublicGetPremiumIndex(this.extend(request, params));
6889
6902
  }
6890
6903
  else {
6891
6904
  throw new errors.NotSupported(this.id + ' fetchFundingRate() supports linear and inverse contracts only');
6892
6905
  }
6893
- let response = await this[method](this.extend(request, params));
6894
6906
  if (market['inverse']) {
6895
6907
  response = response[0];
6896
6908
  }
@@ -7528,20 +7540,20 @@ class binance extends binance$1 {
7528
7540
  * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
7529
7541
  */
7530
7542
  await this.loadMarkets();
7531
- const [type, query] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
7543
+ let type = undefined;
7544
+ [type, params] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
7532
7545
  let subType = undefined;
7533
- [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, query, 'linear');
7534
- let method = undefined;
7546
+ [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, params, 'linear');
7547
+ let response = undefined;
7535
7548
  if (this.isLinear(type, subType)) {
7536
- method = 'fapiPrivateGetLeverageBracket';
7549
+ response = await this.fapiPrivateGetLeverageBracket(params);
7537
7550
  }
7538
7551
  else if (this.isInverse(type, subType)) {
7539
- method = 'dapiPrivateV2GetLeverageBracket';
7552
+ response = await this.dapiPrivateV2GetLeverageBracket(params);
7540
7553
  }
7541
7554
  else {
7542
7555
  throw new errors.NotSupported(this.id + ' fetchLeverageTiers() supports linear and inverse contracts only');
7543
7556
  }
7544
- const response = await this[method](query);
7545
7557
  //
7546
7558
  // usdm
7547
7559
  //
@@ -8015,21 +8027,21 @@ class binance extends binance$1 {
8015
8027
  }
8016
8028
  await this.loadMarkets();
8017
8029
  const market = this.market(symbol);
8018
- let method;
8030
+ const request = {
8031
+ 'symbol': market['id'],
8032
+ 'leverage': leverage,
8033
+ };
8034
+ let response = undefined;
8019
8035
  if (market['linear']) {
8020
- method = 'fapiPrivatePostLeverage';
8036
+ response = await this.fapiPrivatePostLeverage(this.extend(request, params));
8021
8037
  }
8022
8038
  else if (market['inverse']) {
8023
- method = 'dapiPrivatePostLeverage';
8039
+ response = await this.dapiPrivatePostLeverage(this.extend(request, params));
8024
8040
  }
8025
8041
  else {
8026
8042
  throw new errors.NotSupported(this.id + ' setLeverage() supports linear and inverse contracts only');
8027
8043
  }
8028
- const request = {
8029
- 'symbol': market['id'],
8030
- 'leverage': leverage,
8031
- };
8032
- return await this[method](this.extend(request, params));
8044
+ return response;
8033
8045
  }
8034
8046
  async setMarginMode(marginMode, symbol = undefined, params = {}) {
8035
8047
  /**
@@ -8062,23 +8074,21 @@ class binance extends binance$1 {
8062
8074
  }
8063
8075
  await this.loadMarkets();
8064
8076
  const market = this.market(symbol);
8065
- let method = undefined;
8066
- if (market['linear']) {
8067
- method = 'fapiPrivatePostMarginType';
8068
- }
8069
- else if (market['inverse']) {
8070
- method = 'dapiPrivatePostMarginType';
8071
- }
8072
- else {
8073
- throw new errors.NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
8074
- }
8075
8077
  const request = {
8076
8078
  'symbol': market['id'],
8077
8079
  'marginType': marginMode,
8078
8080
  };
8079
8081
  let response = undefined;
8080
8082
  try {
8081
- response = await this[method](this.extend(request, params));
8083
+ if (market['linear']) {
8084
+ response = await this.fapiPrivatePostMarginType(this.extend(request, params));
8085
+ }
8086
+ else if (market['inverse']) {
8087
+ response = await this.dapiPrivatePostMarginType(this.extend(request, params));
8088
+ }
8089
+ else {
8090
+ throw new errors.NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
8091
+ }
8082
8092
  }
8083
8093
  catch (e) {
8084
8094
  // not an error
@@ -328,6 +328,7 @@ class bingx extends bingx$1 {
328
328
  '100202': errors.InsufficientFunds,
329
329
  '100204': errors.BadRequest,
330
330
  '100400': errors.BadRequest,
331
+ '100421': errors.BadSymbol,
331
332
  '100440': errors.ExchangeError,
332
333
  '100500': errors.ExchangeError,
333
334
  '100503': errors.ExchangeError,
@@ -1303,7 +1304,7 @@ class bingx extends bingx$1 {
1303
1304
  // }
1304
1305
  //
1305
1306
  const marketId = this.safeString(ticker, 'symbol');
1306
- const change = this.safeString(ticker, 'priceChange');
1307
+ // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
1307
1308
  const lastQty = this.safeString(ticker, 'lastQty');
1308
1309
  // in spot markets, lastQty is not present
1309
1310
  // it's (bad, but) the only way we can check the tickers origin
@@ -1315,10 +1316,10 @@ class bingx extends bingx$1 {
1315
1316
  const close = this.safeString(ticker, 'lastPrice');
1316
1317
  const quoteVolume = this.safeString(ticker, 'quoteVolume');
1317
1318
  const baseVolume = this.safeString(ticker, 'volume');
1318
- let percentage = this.safeString(ticker, 'priceChangePercent');
1319
- if (percentage !== undefined) {
1320
- percentage = percentage.replace('%', '');
1321
- }
1319
+ // let percentage = this.safeString (ticker, 'priceChangePercent');
1320
+ // if (percentage !== undefined) {
1321
+ // percentage = percentage.replace ('%', '');
1322
+ // } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
1322
1323
  const ts = this.safeInteger(ticker, 'closeTime');
1323
1324
  const datetime = this.iso8601(ts);
1324
1325
  const bid = this.safeString(ticker, 'bidPrice');
@@ -1340,8 +1341,8 @@ class bingx extends bingx$1 {
1340
1341
  'close': close,
1341
1342
  'last': undefined,
1342
1343
  'previousClose': undefined,
1343
- 'change': change,
1344
- 'percentage': percentage,
1344
+ 'change': undefined,
1345
+ 'percentage': undefined,
1345
1346
  'average': undefined,
1346
1347
  'baseVolume': baseVolume,
1347
1348
  'quoteVolume': quoteVolume,
@@ -276,14 +276,13 @@ class bit2c extends bit2c$1 {
276
276
  }
277
277
  parseTicker(ticker, market = undefined) {
278
278
  const symbol = this.safeSymbol(undefined, market);
279
- const timestamp = this.milliseconds();
280
279
  const averagePrice = this.safeString(ticker, 'av');
281
280
  const baseVolume = this.safeString(ticker, 'a');
282
281
  const last = this.safeString(ticker, 'll');
283
282
  return this.safeTicker({
284
283
  'symbol': symbol,
285
- 'timestamp': timestamp,
286
- 'datetime': this.iso8601(timestamp),
284
+ 'timestamp': undefined,
285
+ 'datetime': undefined,
287
286
  'high': undefined,
288
287
  'low': undefined,
289
288
  'bid': this.safeString(ticker, 'h'),
@@ -1063,15 +1063,14 @@ class bitfinex2 extends bitfinex2$1 {
1063
1063
  // FRR_AMOUNT_AVAILABLE
1064
1064
  // ]
1065
1065
  //
1066
- const timestamp = this.milliseconds();
1067
1066
  const symbol = this.safeSymbol(undefined, market);
1068
1067
  const length = ticker.length;
1069
1068
  const last = this.safeString(ticker, length - 4);
1070
1069
  const percentage = this.safeString(ticker, length - 5);
1071
1070
  return this.safeTicker({
1072
1071
  'symbol': symbol,
1073
- 'timestamp': timestamp,
1074
- 'datetime': this.iso8601(timestamp),
1072
+ 'timestamp': undefined,
1073
+ 'datetime': undefined,
1075
1074
  'high': this.safeString(ticker, length - 2),
1076
1075
  'low': this.safeString(ticker, length - 1),
1077
1076
  'bid': this.safeString(ticker, length - 10),
@@ -1077,7 +1077,7 @@ class bitmart extends bitmart$1 {
1077
1077
  // "legal_coin_price":"0.1302699"
1078
1078
  // }
1079
1079
  //
1080
- const timestamp = this.safeInteger(ticker, 'timestamp', this.milliseconds());
1080
+ const timestamp = this.safeInteger(ticker, 'timestamp');
1081
1081
  const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1082
1082
  market = this.safeMarket(marketId, market);
1083
1083
  const symbol = market['symbol'];
@@ -174,13 +174,12 @@ class btcbox extends btcbox$1 {
174
174
  return this.parseOrderBook(response, market['symbol']);
175
175
  }
176
176
  parseTicker(ticker, market = undefined) {
177
- const timestamp = this.milliseconds();
178
177
  const symbol = this.safeSymbol(undefined, market);
179
178
  const last = this.safeString(ticker, 'last');
180
179
  return this.safeTicker({
181
180
  'symbol': symbol,
182
- 'timestamp': timestamp,
183
- 'datetime': this.iso8601(timestamp),
181
+ 'timestamp': undefined,
182
+ 'datetime': undefined,
184
183
  'high': this.safeString(ticker, 'high'),
185
184
  'low': this.safeString(ticker, 'low'),
186
185
  'bid': this.safeString(ticker, 'buy'),