ccxt 4.3.55 → 4.3.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.
package/dist/cjs/ccxt.js CHANGED
@@ -190,7 +190,7 @@ var woofipro$1 = require('./src/pro/woofipro.js');
190
190
 
191
191
  //-----------------------------------------------------------------------------
192
192
  // this is updated by vss.js when building
193
- const version = '4.3.55';
193
+ const version = '4.3.56';
194
194
  Exchange["default"].ccxtVersion = version;
195
195
  const exchanges = {
196
196
  'ace': ace,
@@ -44,7 +44,7 @@ function _interopNamespace(e) {
44
44
  }
45
45
 
46
46
  // ----------------------------------------------------------------------------
47
- const { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sortBy2, safeFloat2, groupBy, aggregate, uuid, unCamelCase, precisionFromString, Throttler, capitalize, now, decimalToPrecision, safeValue, safeValue2, safeString, safeString2, seconds, milliseconds, binaryToBase16, numberToBE, base16ToBinary, iso8601, omit, isJsonEncodedObject, safeInteger, sum, omitZero, implodeParams, extractParams, json, merge, binaryConcat, hash, ecdsa, arrayConcat, encode, urlencode, hmac, numberToString, parseTimeframe, safeInteger2, safeStringLower, parse8601, yyyymmdd, safeStringUpper, safeTimestamp, binaryConcatArray, uuidv1, numberToLE, ymdhms, stringToBase64, decode, uuid22, safeIntegerProduct2, safeIntegerProduct, safeStringLower2, yymmdd, base58ToBinary, binaryToBase58, safeTimestamp2, rawencode, keysort, inArray, isEmpty, ordered, filterBy, uuid16, safeFloat, base64ToBinary, safeStringUpper2, urlencodeWithArrayRepeat, microseconds, binaryToBase64, strip, toArray, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, urlencodeNested, urlencodeBase64, parseDate, ymd, base64ToString, crc32, packb, TRUNCATE, ROUND, DECIMAL_PLACES, NO_PADDING, TICK_SIZE, SIGNIFICANT_DIGITS } = functions;
47
+ const { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sortBy2, safeFloat2, groupBy, aggregate, uuid, unCamelCase, precisionFromString, Throttler, capitalize, now, decimalToPrecision, safeValue, safeValue2, safeString, safeString2, seconds, milliseconds, binaryToBase16, numberToBE, base16ToBinary, iso8601, omit, isJsonEncodedObject, safeInteger, sum, omitZero, implodeParams, extractParams, json, merge, binaryConcat, hash, ecdsa, arrayConcat, encode, urlencode, hmac, numberToString, parseTimeframe, safeInteger2, safeStringLower, parse8601, yyyymmdd, safeStringUpper, safeTimestamp, binaryConcatArray, uuidv1, numberToLE, ymdhms, stringToBase64, decode, uuid22, safeIntegerProduct2, safeIntegerProduct, safeStringLower2, yymmdd, base58ToBinary, binaryToBase58, safeTimestamp2, rawencode, keysort, inArray, isEmpty, ordered, filterBy, uuid16, safeFloat, base64ToBinary, safeStringUpper2, urlencodeWithArrayRepeat, microseconds, binaryToBase64, strip, toArray, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, urlencodeNested, urlencodeBase64, parseDate, ymd, base64ToString, crc32, packb, TRUNCATE, ROUND, DECIMAL_PLACES, NO_PADDING, TICK_SIZE, SIGNIFICANT_DIGITS, sleep } = functions;
48
48
  // ----------------------------------------------------------------------------
49
49
  /**
50
50
  * @class Exchange
@@ -52,6 +52,7 @@ const { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sor
52
52
  class Exchange {
53
53
  constructor(userConfig = {}) {
54
54
  this.throttleProp = undefined;
55
+ this.sleep = sleep;
55
56
  this.api = undefined;
56
57
  this.userAgent = undefined;
57
58
  this.user_agent = undefined;
@@ -3805,7 +3806,30 @@ class Exchange {
3805
3806
  this.last_request_headers = request['headers'];
3806
3807
  this.last_request_body = request['body'];
3807
3808
  this.last_request_url = request['url'];
3808
- return await this.fetch(request['url'], request['method'], request['headers'], request['body']);
3809
+ let retries = undefined;
3810
+ [retries, params] = this.handleOptionAndParams(params, path, 'maxRetriesOnFailure', 0);
3811
+ let retryDelay = undefined;
3812
+ [retryDelay, params] = this.handleOptionAndParams(params, path, 'maxRetriesOnFailureDelay', 0);
3813
+ for (let i = 0; i < retries + 1; i++) {
3814
+ try {
3815
+ return await this.fetch(request['url'], request['method'], request['headers'], request['body']);
3816
+ }
3817
+ catch (e) {
3818
+ if (e instanceof errors.NetworkError) {
3819
+ if (i < retries) {
3820
+ if (this.verbose) {
3821
+ this.log('Request failed with the error: ' + e.toString() + ', retrying ' + (i + 1).toString() + ' of ' + retries.toString() + '...');
3822
+ }
3823
+ if ((retryDelay !== undefined) && (retryDelay !== 0)) {
3824
+ await this.sleep(retryDelay);
3825
+ }
3826
+ continue;
3827
+ }
3828
+ }
3829
+ throw e;
3830
+ }
3831
+ }
3832
+ return undefined; // this line is never reached, but exists for c# value return requirement
3809
3833
  }
3810
3834
  async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {
3811
3835
  return await this.fetch2(path, api, method, params, headers, body, config);
@@ -1543,7 +1543,7 @@ class binance extends binance$1 {
1543
1543
  '-3042': errors.BadRequest,
1544
1544
  '-3043': errors.PermissionDenied,
1545
1545
  '-3044': errors.OperationFailed,
1546
- '-3045': errors.OperationFailed,
1546
+ '-3045': errors.OperationRejected,
1547
1547
  '-3999': errors.PermissionDenied,
1548
1548
  //
1549
1549
  // 4xxx (different from contract markets)
@@ -1562,7 +1562,7 @@ class binance extends binance$1 {
1562
1562
  '-4011': errors.BadRequest,
1563
1563
  '-4012': errors.PermissionDenied,
1564
1564
  '-4013': errors.AuthenticationError,
1565
- '-4014': errors.OperationFailed,
1565
+ '-4014': errors.OperationRejected,
1566
1566
  '-4015': errors.PermissionDenied,
1567
1567
  '-4016': errors.PermissionDenied,
1568
1568
  '-4017': errors.PermissionDenied,
@@ -1571,7 +1571,7 @@ class binance extends binance$1 {
1571
1571
  '-4020': errors.ExchangeError,
1572
1572
  '-4021': errors.BadRequest,
1573
1573
  '-4022': errors.BadRequest,
1574
- '-4023': errors.OperationFailed,
1574
+ '-4023': errors.OperationRejected,
1575
1575
  '-4024': errors.InsufficientFunds,
1576
1576
  '-4025': errors.InsufficientFunds,
1577
1577
  '-4026': errors.InsufficientFunds,
@@ -1580,7 +1580,7 @@ class binance extends binance$1 {
1580
1580
  '-4029': errors.BadRequest,
1581
1581
  '-4030': errors.BadResponse,
1582
1582
  '-4031': errors.OperationFailed,
1583
- '-4032': errors.OperationFailed,
1583
+ '-4032': errors.OperationRejected,
1584
1584
  '-4033': errors.BadRequest,
1585
1585
  '-4034': errors.OperationRejected,
1586
1586
  '-4035': errors.PermissionDenied,
@@ -1703,7 +1703,7 @@ class binance extends binance$1 {
1703
1703
  '-5003': errors.InsufficientFunds,
1704
1704
  '-5004': errors.OperationRejected,
1705
1705
  '-5005': errors.OperationRejected,
1706
- '-5006': errors.OperationFailed,
1706
+ '-5006': errors.OperationRejected,
1707
1707
  '-5007': errors.BadRequest,
1708
1708
  '-5008': errors.OperationRejected,
1709
1709
  '-5009': errors.BadSymbol,
@@ -1721,8 +1721,8 @@ class binance extends binance$1 {
1721
1721
  '-6004': errors.BadRequest,
1722
1722
  '-6005': errors.BadRequest,
1723
1723
  '-6006': errors.BadRequest,
1724
- '-6007': errors.OperationFailed,
1725
- '-6008': errors.OperationFailed,
1724
+ '-6007': errors.OperationRejected,
1725
+ '-6008': errors.OperationRejected,
1726
1726
  '-6009': errors.RateLimitExceeded,
1727
1727
  '-6011': errors.OperationRejected,
1728
1728
  '-6012': errors.InsufficientFunds,
@@ -101,6 +101,7 @@ class bingx extends bingx$1 {
101
101
  'subAccount': 'https://open-api.{hostname}/openApi',
102
102
  'account': 'https://open-api.{hostname}/openApi',
103
103
  'copyTrading': 'https://open-api.{hostname}/openApi',
104
+ 'cswap': 'https://open-api.{hostname}/openApi',
104
105
  },
105
106
  'test': {
106
107
  'swap': 'https://open-api-vst.{hostname}/openApi', // only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
@@ -263,6 +264,36 @@ class bingx extends bingx$1 {
263
264
  },
264
265
  },
265
266
  },
267
+ 'cswap': {
268
+ 'v1': {
269
+ 'public': {
270
+ 'get': {
271
+ 'market/contracts': 1,
272
+ 'market/premiumIndex': 1,
273
+ 'market/openInterest': 1,
274
+ 'market/klines': 1,
275
+ 'market/depth': 1,
276
+ 'market/ticker': 1,
277
+ },
278
+ },
279
+ 'private': {
280
+ 'get': {
281
+ 'trade/leverage': 2,
282
+ 'trade/forceOrders': 2,
283
+ 'trade/allFillOrders': 2,
284
+ 'user/commissionRate': 2,
285
+ 'user/positions': 2,
286
+ 'user/balance': 2,
287
+ },
288
+ 'post': {
289
+ 'trade/order': 2,
290
+ 'trade/leverage': 2,
291
+ 'trade/allOpenOrders': 2,
292
+ 'trade/closeAllPositions': 2,
293
+ },
294
+ },
295
+ },
296
+ },
266
297
  'contract': {
267
298
  'v1': {
268
299
  'private': {
@@ -1523,7 +1554,10 @@ class bingx extends bingx$1 {
1523
1554
  percentage = percentage.replace('%', '');
1524
1555
  }
1525
1556
  const change = this.safeString(ticker, 'priceChange');
1526
- const ts = this.safeInteger(ticker, 'closeTime');
1557
+ let ts = this.safeInteger(ticker, 'closeTime');
1558
+ if (ts === 0) {
1559
+ ts = undefined;
1560
+ }
1527
1561
  const datetime = this.iso8601(ts);
1528
1562
  const bid = this.safeString(ticker, 'bidPrice');
1529
1563
  const bidVolume = this.safeString(ticker, 'bidQty');
@@ -593,7 +593,13 @@ class bitflyer extends bitflyer$1 {
593
593
  'product_code': this.marketId(symbol),
594
594
  'child_order_acceptance_id': id,
595
595
  };
596
- return await this.privatePostCancelchildorder(this.extend(request, params));
596
+ const response = await this.privatePostCancelchildorder(this.extend(request, params));
597
+ //
598
+ // 200 OK.
599
+ //
600
+ return this.safeOrder({
601
+ 'info': response,
602
+ });
597
603
  }
598
604
  parseOrderStatus(status) {
599
605
  const statuses = {
@@ -1085,6 +1085,22 @@ class bitopro extends bitopro$1 {
1085
1085
  //
1086
1086
  return this.parseOrder(response, market);
1087
1087
  }
1088
+ parseCancelOrders(data) {
1089
+ const dataKeys = Object.keys(data);
1090
+ const orders = [];
1091
+ for (let i = 0; i < dataKeys.length; i++) {
1092
+ const marketId = dataKeys[i];
1093
+ const orderIds = data[marketId];
1094
+ for (let j = 0; j < orderIds.length; j++) {
1095
+ orders.push(this.safeOrder({
1096
+ 'info': orderIds[j],
1097
+ 'id': orderIds[j],
1098
+ 'symbol': this.safeSymbol(marketId),
1099
+ }));
1100
+ }
1101
+ }
1102
+ return orders;
1103
+ }
1088
1104
  async cancelOrders(ids, symbol = undefined, params = {}) {
1089
1105
  /**
1090
1106
  * @method
@@ -1115,7 +1131,8 @@ class bitopro extends bitopro$1 {
1115
1131
  // }
1116
1132
  // }
1117
1133
  //
1118
- return response;
1134
+ const data = this.safeDict(response, 'data');
1135
+ return this.parseCancelOrders(data);
1119
1136
  }
1120
1137
  async cancelAllOrders(symbol = undefined, params = {}) {
1121
1138
  /**
@@ -1140,7 +1157,7 @@ class bitopro extends bitopro$1 {
1140
1157
  else {
1141
1158
  response = await this.privateDeleteOrdersAll(this.extend(request, params));
1142
1159
  }
1143
- const result = this.safeValue(response, 'data', {});
1160
+ const data = this.safeValue(response, 'data', {});
1144
1161
  //
1145
1162
  // {
1146
1163
  // "data":{
@@ -1151,7 +1168,7 @@ class bitopro extends bitopro$1 {
1151
1168
  // }
1152
1169
  // }
1153
1170
  //
1154
- return result;
1171
+ return this.parseCancelOrders(data);
1155
1172
  }
1156
1173
  async fetchOrder(id, symbol = undefined, params = {}) {
1157
1174
  /**
@@ -153,16 +153,17 @@ class btcmarkets extends btcmarkets$1 {
153
153
  },
154
154
  'precisionMode': number.TICK_SIZE,
155
155
  'exceptions': {
156
- '3': errors.InvalidOrder,
157
- '6': errors.DDoSProtection,
158
- 'InsufficientFund': errors.InsufficientFunds,
159
- 'InvalidPrice': errors.InvalidOrder,
160
- 'InvalidAmount': errors.InvalidOrder,
161
- 'MissingArgument': errors.InvalidOrder,
162
- 'OrderAlreadyCancelled': errors.InvalidOrder,
163
- 'OrderNotFound': errors.OrderNotFound,
164
- 'OrderStatusIsFinal': errors.InvalidOrder,
165
- 'InvalidPaginationParameter': errors.BadRequest,
156
+ 'exact': {
157
+ 'InsufficientFund': errors.InsufficientFunds,
158
+ 'InvalidPrice': errors.InvalidOrder,
159
+ 'InvalidAmount': errors.InvalidOrder,
160
+ 'MissingArgument': errors.BadRequest,
161
+ 'OrderAlreadyCancelled': errors.InvalidOrder,
162
+ 'OrderNotFound': errors.OrderNotFound,
163
+ 'OrderStatusIsFinal': errors.InvalidOrder,
164
+ 'InvalidPaginationParameter': errors.BadRequest,
165
+ },
166
+ 'broad': {},
166
167
  },
167
168
  'fees': {
168
169
  'percentage': true,
@@ -377,7 +378,8 @@ class btcmarkets extends btcmarkets$1 {
377
378
  // "minOrderAmount":"0.00007",
378
379
  // "maxOrderAmount":"1000000",
379
380
  // "amountDecimals":"8",
380
- // "priceDecimals":"2"
381
+ // "priceDecimals":"2",
382
+ // "status": "Online"
381
383
  // }
382
384
  // ]
383
385
  //
@@ -394,6 +396,7 @@ class btcmarkets extends btcmarkets$1 {
394
396
  const pricePrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'priceDecimals')));
395
397
  const minAmount = this.safeNumber(market, 'minOrderAmount');
396
398
  const maxAmount = this.safeNumber(market, 'maxOrderAmount');
399
+ const status = this.safeString(market, 'status');
397
400
  let minPrice = undefined;
398
401
  if (quote === 'AUD') {
399
402
  minPrice = pricePrecision;
@@ -413,7 +416,7 @@ class btcmarkets extends btcmarkets$1 {
413
416
  'swap': false,
414
417
  'future': false,
415
418
  'option': false,
416
- 'active': undefined,
419
+ 'active': (status === 'Online'),
417
420
  'contract': false,
418
421
  'linear': undefined,
419
422
  'inverse': undefined,
@@ -1280,22 +1283,18 @@ class btcmarkets extends btcmarkets$1 {
1280
1283
  if (response === undefined) {
1281
1284
  return undefined; // fallback to default error handler
1282
1285
  }
1283
- if ('success' in response) {
1284
- if (!response['success']) {
1285
- const error = this.safeString(response, 'errorCode');
1286
- const feedback = this.id + ' ' + body;
1287
- this.throwExactlyMatchedException(this.exceptions, error, feedback);
1288
- throw new errors.ExchangeError(feedback);
1289
- }
1290
- }
1291
- // v3 api errors
1292
- if (code >= 400) {
1293
- const errorCode = this.safeString(response, 'code');
1294
- const message = this.safeString(response, 'message');
1286
+ //
1287
+ // {"code":"UnAuthorized","message":"invalid access token"}
1288
+ // {"code":"MarketNotFound","message":"invalid marketId"}
1289
+ //
1290
+ const errorCode = this.safeString(response, 'code');
1291
+ const message = this.safeString(response, 'message');
1292
+ if (errorCode !== undefined) {
1295
1293
  const feedback = this.id + ' ' + body;
1296
- this.throwExactlyMatchedException(this.exceptions, errorCode, feedback);
1297
- this.throwExactlyMatchedException(this.exceptions, message, feedback);
1298
- throw new errors.ExchangeError(feedback);
1294
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
1295
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
1296
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
1297
+ throw new errors.ExchangeError(feedback); // unknown message
1299
1298
  }
1300
1299
  return undefined;
1301
1300
  }
@@ -3058,16 +3058,20 @@ class bybit extends bybit$1 {
3058
3058
  const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();
3059
3059
  const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);
3060
3060
  let type = undefined;
3061
- [type, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
3061
+ [type, params] = this.getBybitType('fetchBalance', undefined, params);
3062
3062
  const isSpot = (type === 'spot');
3063
- const isSwap = (type === 'swap');
3063
+ const isLinear = (type === 'linear');
3064
+ const isInverse = (type === 'inverse');
3064
3065
  if (isUnifiedAccount) {
3065
- if (isSpot || isSwap) {
3066
+ if (isInverse) {
3067
+ type = 'contract';
3068
+ }
3069
+ else {
3066
3070
  type = 'unified';
3067
3071
  }
3068
3072
  }
3069
3073
  else {
3070
- if (isSwap) {
3074
+ if (isLinear || isInverse) {
3071
3075
  type = 'contract';
3072
3076
  }
3073
3077
  }
@@ -3387,7 +3391,7 @@ class bybit extends bybit$1 {
3387
3391
  feeCurrencyCode = market['inverse'] ? market['base'] : market['settle'];
3388
3392
  }
3389
3393
  fee = {
3390
- 'cost': feeCostString,
3394
+ 'cost': this.parseNumber(feeCostString),
3391
3395
  'currency': feeCurrencyCode,
3392
3396
  };
3393
3397
  }
@@ -2012,7 +2012,11 @@ class delta extends delta$1 {
2012
2012
  // "success":true
2013
2013
  // }
2014
2014
  //
2015
- return response;
2015
+ return [
2016
+ this.safeOrder({
2017
+ 'info': response,
2018
+ }),
2019
+ ];
2016
2020
  }
2017
2021
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2018
2022
  /**
@@ -622,6 +622,7 @@ class gate extends gate$1 {
622
622
  'createOrder': {
623
623
  'expiration': 86400, // for conditional orders
624
624
  },
625
+ 'createMarketBuyOrderRequiresPrice': true,
625
626
  'networks': {
626
627
  'AVAXC': 'AVAX_C',
627
628
  'BEP20': 'BSC',
@@ -593,7 +593,7 @@ class hyperliquid extends hyperliquid$1 {
593
593
  'limits': {
594
594
  'leverage': {
595
595
  'min': undefined,
596
- 'max': undefined,
596
+ 'max': this.safeInteger(market, 'maxLeverage'),
597
597
  },
598
598
  'amount': {
599
599
  'min': undefined,
@@ -1486,6 +1486,27 @@ class lbank extends lbank$1 {
1486
1486
  // "status":-1
1487
1487
  // }
1488
1488
  //
1489
+ // cancelOrder
1490
+ //
1491
+ // {
1492
+ // "executedQty":0.0,
1493
+ // "price":0.05,
1494
+ // "origQty":100.0,
1495
+ // "tradeType":"buy",
1496
+ // "status":0
1497
+ // }
1498
+ //
1499
+ // cancelAllOrders
1500
+ //
1501
+ // {
1502
+ // "executedQty":0.00000000000000000000,
1503
+ // "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1504
+ // "price":0.05000000000000000000,
1505
+ // "origQty":100.00000000000000000000,
1506
+ // "tradeType":"buy",
1507
+ // "status":0
1508
+ // }
1509
+ //
1489
1510
  const id = this.safeString2(order, 'orderId', 'order_id');
1490
1511
  const clientOrderId = this.safeString2(order, 'clientOrderId', 'custom_id');
1491
1512
  const timestamp = this.safeInteger2(order, 'time', 'create_time');
@@ -1495,7 +1516,7 @@ class lbank extends lbank$1 {
1495
1516
  let timeInForce = undefined;
1496
1517
  let postOnly = false;
1497
1518
  let type = 'limit';
1498
- const rawType = this.safeString(order, 'type'); // buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1519
+ const rawType = this.safeString2(order, 'type', 'tradeType'); // buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1499
1520
  const parts = rawType.split('_');
1500
1521
  const side = this.safeString(parts, 0);
1501
1522
  const typePart = this.safeString(parts, 1); // market, maker, ioc, fok or undefined (limit)
@@ -1859,12 +1880,12 @@ class lbank extends lbank$1 {
1859
1880
  // "origQty":100.0,
1860
1881
  // "tradeType":"buy",
1861
1882
  // "status":0
1862
- // },
1883
+ // },
1863
1884
  // "error_code":0,
1864
1885
  // "ts":1648501286196
1865
1886
  // }
1866
- const result = this.safeValue(response, 'data', {});
1867
- return result;
1887
+ const data = this.safeDict(response, 'data', {});
1888
+ return this.parseOrder(data);
1868
1889
  }
1869
1890
  async cancelAllOrders(symbol = undefined, params = {}) {
1870
1891
  /**
@@ -1902,8 +1923,8 @@ class lbank extends lbank$1 {
1902
1923
  // "ts":1648506641469
1903
1924
  // }
1904
1925
  //
1905
- const result = this.safeValue(response, 'data', []);
1906
- return result;
1926
+ const data = this.safeList(response, 'data', []);
1927
+ return this.parseOrders(data);
1907
1928
  }
1908
1929
  getNetworkCodeForCurrency(currencyCode, params) {
1909
1930
  const defaultNetworks = this.safeValue(this.options, 'defaultNetworks');
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import type { Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketInterface, Trade, Order, OrderBook, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, DepositAddressResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, TransferEntries, LeverageTiers } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
7
- declare const version = "4.3.54";
7
+ declare const version = "4.3.55";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.3.55';
41
+ const version = '4.3.56';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -75,6 +75,22 @@ interface Exchange {
75
75
  swapV2PrivateDeleteTradeBatchOrders(params?: {}): Promise<implicitReturnType>;
76
76
  swapV2PrivateDeleteTradeAllOpenOrders(params?: {}): Promise<implicitReturnType>;
77
77
  swapV3PublicGetQuoteKlines(params?: {}): Promise<implicitReturnType>;
78
+ cswapV1PublicGetMarketContracts(params?: {}): Promise<implicitReturnType>;
79
+ cswapV1PublicGetMarketPremiumIndex(params?: {}): Promise<implicitReturnType>;
80
+ cswapV1PublicGetMarketOpenInterest(params?: {}): Promise<implicitReturnType>;
81
+ cswapV1PublicGetMarketKlines(params?: {}): Promise<implicitReturnType>;
82
+ cswapV1PublicGetMarketDepth(params?: {}): Promise<implicitReturnType>;
83
+ cswapV1PublicGetMarketTicker(params?: {}): Promise<implicitReturnType>;
84
+ cswapV1PrivateGetTradeLeverage(params?: {}): Promise<implicitReturnType>;
85
+ cswapV1PrivateGetTradeForceOrders(params?: {}): Promise<implicitReturnType>;
86
+ cswapV1PrivateGetTradeAllFillOrders(params?: {}): Promise<implicitReturnType>;
87
+ cswapV1PrivateGetUserCommissionRate(params?: {}): Promise<implicitReturnType>;
88
+ cswapV1PrivateGetUserPositions(params?: {}): Promise<implicitReturnType>;
89
+ cswapV1PrivateGetUserBalance(params?: {}): Promise<implicitReturnType>;
90
+ cswapV1PrivatePostTradeOrder(params?: {}): Promise<implicitReturnType>;
91
+ cswapV1PrivatePostTradeLeverage(params?: {}): Promise<implicitReturnType>;
92
+ cswapV1PrivatePostTradeAllOpenOrders(params?: {}): Promise<implicitReturnType>;
93
+ cswapV1PrivatePostTradeCloseAllPositions(params?: {}): Promise<implicitReturnType>;
78
94
  contractV1PrivateGetAllPosition(params?: {}): Promise<implicitReturnType>;
79
95
  contractV1PrivateGetAllOrders(params?: {}): Promise<implicitReturnType>;
80
96
  contractV1PrivateGetBalance(params?: {}): Promise<implicitReturnType>;
@@ -15,6 +15,7 @@ export default class Exchange {
15
15
  [key: string]: any;
16
16
  };
17
17
  throttleProp: any;
18
+ sleep: (ms: any) => Promise<unknown>;
18
19
  api: any;
19
20
  proxy: any;
20
21
  proxyUrl: string;
@@ -7,7 +7,7 @@
7
7
  // ----------------------------------------------------------------------------
8
8
  /* eslint-disable */
9
9
  import * as functions from './functions.js';
10
- const { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sortBy2, safeFloat2, groupBy, aggregate, uuid, unCamelCase, precisionFromString, Throttler, capitalize, now, decimalToPrecision, safeValue, safeValue2, safeString, safeString2, seconds, milliseconds, binaryToBase16, numberToBE, base16ToBinary, iso8601, omit, isJsonEncodedObject, safeInteger, sum, omitZero, implodeParams, extractParams, json, merge, binaryConcat, hash, ecdsa, arrayConcat, encode, urlencode, hmac, numberToString, parseTimeframe, safeInteger2, safeStringLower, parse8601, yyyymmdd, safeStringUpper, safeTimestamp, binaryConcatArray, uuidv1, numberToLE, ymdhms, stringToBase64, decode, uuid22, safeIntegerProduct2, safeIntegerProduct, safeStringLower2, yymmdd, base58ToBinary, binaryToBase58, safeTimestamp2, rawencode, keysort, inArray, isEmpty, ordered, filterBy, uuid16, safeFloat, base64ToBinary, safeStringUpper2, urlencodeWithArrayRepeat, microseconds, binaryToBase64, strip, toArray, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, urlencodeNested, urlencodeBase64, parseDate, ymd, base64ToString, crc32, packb, TRUNCATE, ROUND, DECIMAL_PLACES, NO_PADDING, TICK_SIZE, SIGNIFICANT_DIGITS } = functions;
10
+ const { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sortBy2, safeFloat2, groupBy, aggregate, uuid, unCamelCase, precisionFromString, Throttler, capitalize, now, decimalToPrecision, safeValue, safeValue2, safeString, safeString2, seconds, milliseconds, binaryToBase16, numberToBE, base16ToBinary, iso8601, omit, isJsonEncodedObject, safeInteger, sum, omitZero, implodeParams, extractParams, json, merge, binaryConcat, hash, ecdsa, arrayConcat, encode, urlencode, hmac, numberToString, parseTimeframe, safeInteger2, safeStringLower, parse8601, yyyymmdd, safeStringUpper, safeTimestamp, binaryConcatArray, uuidv1, numberToLE, ymdhms, stringToBase64, decode, uuid22, safeIntegerProduct2, safeIntegerProduct, safeStringLower2, yymmdd, base58ToBinary, binaryToBase58, safeTimestamp2, rawencode, keysort, inArray, isEmpty, ordered, filterBy, uuid16, safeFloat, base64ToBinary, safeStringUpper2, urlencodeWithArrayRepeat, microseconds, binaryToBase64, strip, toArray, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, urlencodeNested, urlencodeBase64, parseDate, ymd, base64ToString, crc32, packb, TRUNCATE, ROUND, DECIMAL_PLACES, NO_PADDING, TICK_SIZE, SIGNIFICANT_DIGITS, sleep } = functions;
11
11
  import { keys as keysFunc, values as valuesFunc, vwap as vwapFunc } from './functions.js';
12
12
  // import exceptions from "./errors.js"
13
13
  import { // eslint-disable-line object-curly-newline
@@ -31,6 +31,7 @@ import { SecureRandom } from "../static_dependencies/jsencrypt/lib/jsbn/rng.js";
31
31
  export default class Exchange {
32
32
  constructor(userConfig = {}) {
33
33
  this.throttleProp = undefined;
34
+ this.sleep = sleep;
34
35
  this.api = undefined;
35
36
  this.userAgent = undefined;
36
37
  this.user_agent = undefined;
@@ -3792,7 +3793,30 @@ export default class Exchange {
3792
3793
  this.last_request_headers = request['headers'];
3793
3794
  this.last_request_body = request['body'];
3794
3795
  this.last_request_url = request['url'];
3795
- return await this.fetch(request['url'], request['method'], request['headers'], request['body']);
3796
+ let retries = undefined;
3797
+ [retries, params] = this.handleOptionAndParams(params, path, 'maxRetriesOnFailure', 0);
3798
+ let retryDelay = undefined;
3799
+ [retryDelay, params] = this.handleOptionAndParams(params, path, 'maxRetriesOnFailureDelay', 0);
3800
+ for (let i = 0; i < retries + 1; i++) {
3801
+ try {
3802
+ return await this.fetch(request['url'], request['method'], request['headers'], request['body']);
3803
+ }
3804
+ catch (e) {
3805
+ if (e instanceof NetworkError) {
3806
+ if (i < retries) {
3807
+ if (this.verbose) {
3808
+ this.log('Request failed with the error: ' + e.toString() + ', retrying ' + (i + 1).toString() + ' of ' + retries.toString() + '...');
3809
+ }
3810
+ if ((retryDelay !== undefined) && (retryDelay !== 0)) {
3811
+ await this.sleep(retryDelay);
3812
+ }
3813
+ continue;
3814
+ }
3815
+ }
3816
+ throw e;
3817
+ }
3818
+ }
3819
+ return undefined; // this line is never reached, but exists for c# value return requirement
3796
3820
  }
3797
3821
  async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {
3798
3822
  return await this.fetch2(path, api, method, params, headers, body, config);
package/js/src/binance.js CHANGED
@@ -1546,7 +1546,7 @@ export default class binance extends Exchange {
1546
1546
  '-3042': BadRequest,
1547
1547
  '-3043': PermissionDenied,
1548
1548
  '-3044': OperationFailed,
1549
- '-3045': OperationFailed,
1549
+ '-3045': OperationRejected,
1550
1550
  '-3999': PermissionDenied,
1551
1551
  //
1552
1552
  // 4xxx (different from contract markets)
@@ -1565,7 +1565,7 @@ export default class binance extends Exchange {
1565
1565
  '-4011': BadRequest,
1566
1566
  '-4012': PermissionDenied,
1567
1567
  '-4013': AuthenticationError,
1568
- '-4014': OperationFailed,
1568
+ '-4014': OperationRejected,
1569
1569
  '-4015': PermissionDenied,
1570
1570
  '-4016': PermissionDenied,
1571
1571
  '-4017': PermissionDenied,
@@ -1574,7 +1574,7 @@ export default class binance extends Exchange {
1574
1574
  '-4020': ExchangeError,
1575
1575
  '-4021': BadRequest,
1576
1576
  '-4022': BadRequest,
1577
- '-4023': OperationFailed,
1577
+ '-4023': OperationRejected,
1578
1578
  '-4024': InsufficientFunds,
1579
1579
  '-4025': InsufficientFunds,
1580
1580
  '-4026': InsufficientFunds,
@@ -1583,7 +1583,7 @@ export default class binance extends Exchange {
1583
1583
  '-4029': BadRequest,
1584
1584
  '-4030': BadResponse,
1585
1585
  '-4031': OperationFailed,
1586
- '-4032': OperationFailed,
1586
+ '-4032': OperationRejected,
1587
1587
  '-4033': BadRequest,
1588
1588
  '-4034': OperationRejected,
1589
1589
  '-4035': PermissionDenied,
@@ -1706,7 +1706,7 @@ export default class binance extends Exchange {
1706
1706
  '-5003': InsufficientFunds,
1707
1707
  '-5004': OperationRejected,
1708
1708
  '-5005': OperationRejected,
1709
- '-5006': OperationFailed,
1709
+ '-5006': OperationRejected,
1710
1710
  '-5007': BadRequest,
1711
1711
  '-5008': OperationRejected,
1712
1712
  '-5009': BadSymbol,
@@ -1724,8 +1724,8 @@ export default class binance extends Exchange {
1724
1724
  '-6004': BadRequest,
1725
1725
  '-6005': BadRequest,
1726
1726
  '-6006': BadRequest,
1727
- '-6007': OperationFailed,
1728
- '-6008': OperationFailed,
1727
+ '-6007': OperationRejected,
1728
+ '-6008': OperationRejected,
1729
1729
  '-6009': RateLimitExceeded,
1730
1730
  '-6011': OperationRejected,
1731
1731
  '-6012': InsufficientFunds,