ccxt 4.2.25 → 4.2.26

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/README.md CHANGED
@@ -209,13 +209,13 @@ console.log(version, Object.keys(exchanges));
209
209
 
210
210
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
211
211
 
212
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.25/dist/ccxt.browser.js
213
- * unpkg: https://unpkg.com/ccxt@4.2.25/dist/ccxt.browser.js
212
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.26/dist/ccxt.browser.js
213
+ * unpkg: https://unpkg.com/ccxt@4.2.26/dist/ccxt.browser.js
214
214
 
215
215
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
216
216
 
217
217
  ```HTML
218
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.25/dist/ccxt.browser.js"></script>
218
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.26/dist/ccxt.browser.js"></script>
219
219
  ```
220
220
 
221
221
  Creates a global `ccxt` object:
@@ -8246,15 +8246,13 @@ class Exchange {
8246
8246
  client.throttle(cost).then(() => {
8247
8247
  client.send(message);
8248
8248
  }).catch((e) => {
8249
- delete client.subscriptions[subscribeHash];
8250
- future.reject(e);
8249
+ client.onError(e);
8251
8250
  });
8252
8251
  }
8253
8252
  else {
8254
8253
  client.send(message)
8255
8254
  .catch((e) => {
8256
- delete client.subscriptions[subscribeHash];
8257
- future.reject(e);
8255
+ client.onError(e);
8258
8256
  });
8259
8257
  }
8260
8258
  }
@@ -14792,7 +14790,10 @@ class Client {
14792
14790
  }
14793
14791
  else {
14794
14792
  if (this.ping) {
14795
- this.send(this.ping(this));
14793
+ this.send(this.ping(this))
14794
+ .catch((error) => {
14795
+ this.onError(error);
14796
+ });
14796
14797
  }
14797
14798
  else if (_base_functions_js__WEBPACK_IMPORTED_MODULE_5__/* .isNode */ .UG) {
14798
14799
  // can't do this inside browser
@@ -28018,6 +28019,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28018
28019
  'fetchLeverage': true,
28019
28020
  'fetchLiquidations': false,
28020
28021
  'fetchMarkets': true,
28022
+ 'fetchMarkOHLCV': true,
28021
28023
  'fetchMyLiquidations': true,
28022
28024
  'fetchOHLCV': true,
28023
28025
  'fetchOpenInterest': true,
@@ -28122,6 +28124,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28122
28124
  'private': {
28123
28125
  'get': {
28124
28126
  'positionSide/dual': 1,
28127
+ 'market/markPriceKlines': 1,
28125
28128
  },
28126
28129
  'post': {
28127
28130
  'positionSide/dual': 1,
@@ -28647,6 +28650,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28647
28650
  * @see https://bingx-api.github.io/docs/#/swapV2/market-api.html#K-Line%20Data
28648
28651
  * @see https://bingx-api.github.io/docs/#/spot/market-api.html#Candlestick%20chart%20data
28649
28652
  * @see https://bingx-api.github.io/docs/#/swapV2/market-api.html#%20K-Line%20Data
28653
+ * @see https://bingx-api.github.io/docs/#/en-us/swapV2/market-api.html#K-Line%20Data%20-%20Mark%20Price
28650
28654
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
28651
28655
  * @param {string} timeframe the length of time each candle represents
28652
28656
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
@@ -28683,7 +28687,14 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28683
28687
  response = await this.spotV1PublicGetMarketKline(this.extend(request, params));
28684
28688
  }
28685
28689
  else {
28686
- response = await this.swapV3PublicGetQuoteKlines(this.extend(request, params));
28690
+ const price = this.safeString(params, 'price');
28691
+ params = this.omit(params, 'price');
28692
+ if (price === 'mark') {
28693
+ response = await this.swapV1PrivateGetMarketMarkPriceKlines(this.extend(request, params));
28694
+ }
28695
+ else {
28696
+ response = await this.swapV3PublicGetQuoteKlines(this.extend(request, params));
28697
+ }
28687
28698
  }
28688
28699
  //
28689
28700
  // {
@@ -28702,6 +28713,24 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28702
28713
  // ]
28703
28714
  // }
28704
28715
  //
28716
+ // fetchMarkOHLCV
28717
+ //
28718
+ // {
28719
+ // "code": 0,
28720
+ // "msg": "",
28721
+ // "data": [
28722
+ // {
28723
+ // "open": "42191.7",
28724
+ // "close": "42189.5",
28725
+ // "high": "42196.5",
28726
+ // "low": "42189.5",
28727
+ // "volume": "0.00",
28728
+ // "openTime": 1706508840000,
28729
+ // "closeTime": 1706508840000
28730
+ // }
28731
+ // ]
28732
+ // }
28733
+ //
28705
28734
  let ohlcvs = this.safeValue(response, 'data', []);
28706
28735
  if (!Array.isArray(ohlcvs)) {
28707
28736
  ohlcvs = [ohlcvs];
@@ -28718,6 +28747,18 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28718
28747
  // "volume": "167.44",
28719
28748
  // "time": 1666584000000
28720
28749
  // }
28750
+ //
28751
+ // fetchMarkOHLCV
28752
+ //
28753
+ // {
28754
+ // "open": "42191.7",
28755
+ // "close": "42189.5",
28756
+ // "high": "42196.5",
28757
+ // "low": "42189.5",
28758
+ // "volume": "0.00",
28759
+ // "openTime": 1706508840000,
28760
+ // "closeTime": 1706508840000
28761
+ // }
28721
28762
  // spot
28722
28763
  // [
28723
28764
  // 1691402580000,
@@ -28741,7 +28782,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28741
28782
  ];
28742
28783
  }
28743
28784
  return [
28744
- this.safeInteger(ohlcv, 'time'),
28785
+ this.safeInteger2(ohlcv, 'time', 'closeTime'),
28745
28786
  this.safeNumber(ohlcv, 'open'),
28746
28787
  this.safeNumber(ohlcv, 'high'),
28747
28788
  this.safeNumber(ohlcv, 'low'),
@@ -30198,10 +30239,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30198
30239
  const clientOrderId = this.safeStringN(order, ['clientOrderID', 'origClientOrderId', 'c']);
30199
30240
  let stopLoss = this.safeValue(order, 'stopLoss');
30200
30241
  let stopLossPrice = undefined;
30201
- if (stopLoss !== undefined) {
30242
+ if ((stopLoss !== undefined) && (stopLoss !== '')) {
30202
30243
  stopLossPrice = this.safeNumber(stopLoss, 'stopLoss');
30203
30244
  }
30204
- if ((stopLoss !== undefined) && (typeof stopLoss !== 'number')) {
30245
+ if ((stopLoss !== undefined) && (typeof stopLoss !== 'number') && (stopLoss !== '')) {
30205
30246
  // stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
30206
30247
  if (typeof stopLoss === 'string') {
30207
30248
  stopLoss = this.parseJson(stopLoss);
@@ -30210,10 +30251,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30210
30251
  }
30211
30252
  let takeProfit = this.safeValue(order, 'takeProfit');
30212
30253
  let takeProfitPrice = undefined;
30213
- if (takeProfit !== undefined) {
30254
+ if (takeProfit !== undefined && (takeProfit !== '')) {
30214
30255
  takeProfitPrice = this.safeNumber(takeProfit, 'takeProfit');
30215
30256
  }
30216
- if ((takeProfit !== undefined) && (typeof takeProfit !== 'number')) {
30257
+ if ((takeProfit !== undefined) && (typeof takeProfit !== 'number') && (takeProfit !== '')) {
30217
30258
  // takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
30218
30259
  if (typeof takeProfit === 'string') {
30219
30260
  takeProfit = this.parseJson(takeProfit);
@@ -214210,7 +214251,7 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
214210
214251
  'watchOHLCV': true,
214211
214252
  'watchOrders': true,
214212
214253
  'watchMyTrades': true,
214213
- 'watchTicker': false,
214254
+ 'watchTicker': true,
214214
214255
  'watchTickers': false,
214215
214256
  'watchBalance': true,
214216
214257
  },
@@ -214265,6 +214306,151 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
214265
214306
  },
214266
214307
  });
214267
214308
  }
214309
+ async watchTicker(symbol, params = {}) {
214310
+ /**
214311
+ * @method
214312
+ * @name bingx#watchTicker
214313
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
214314
+ * @see https://bingx-api.github.io/docs/#/en-us/swapV2/socket/market.html#Subscribe%20to%2024-hour%20price%20changes
214315
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
214316
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
214317
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
214318
+ */
214319
+ await this.loadMarkets();
214320
+ const market = this.market(symbol);
214321
+ const [marketType, query] = this.handleMarketTypeAndParams('watchTrades', market, params);
214322
+ const url = this.safeValue(this.urls['api']['ws'], marketType);
214323
+ if (url === undefined) {
214324
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchTrades is not supported for ' + marketType + ' markets.');
214325
+ }
214326
+ const messageHash = market['id'] + '@ticker';
214327
+ const uuid = this.uuid();
214328
+ const request = {
214329
+ 'id': uuid,
214330
+ 'dataType': messageHash,
214331
+ };
214332
+ if (marketType === 'swap') {
214333
+ request['reqType'] = 'sub';
214334
+ }
214335
+ return await this.watch(url, messageHash, this.extend(request, query), messageHash);
214336
+ }
214337
+ handleTicker(client, message) {
214338
+ //
214339
+ // swap
214340
+ //
214341
+ // {
214342
+ // "code": 0,
214343
+ // "dataType": "BTC-USDT@ticker",
214344
+ // "data": {
214345
+ // "e": "24hTicker",
214346
+ // "E": 1706498923556,
214347
+ // "s": "BTC-USDT",
214348
+ // "p": "346.4",
214349
+ // "P": "0.82",
214350
+ // "c": "42432.5",
214351
+ // "L": "0.0529",
214352
+ // "h": "42855.4",
214353
+ // "l": "41578.3",
214354
+ // "v": "64310.9754",
214355
+ // "q": "2728360284.15",
214356
+ // "o": "42086.1",
214357
+ // "O": 1706498922655,
214358
+ // "C": 1706498883023,
214359
+ // "A": "42437.8",
214360
+ // "a": "1.4160",
214361
+ // "B": "42437.1",
214362
+ // "b": "2.5747"
214363
+ // }
214364
+ // }
214365
+ //
214366
+ // spot
214367
+ //
214368
+ // {
214369
+ // "code": 0,
214370
+ // "timestamp": 1706506795473,
214371
+ // "data": {
214372
+ // "e": "24hTicker",
214373
+ // "E": 1706506795472,
214374
+ // "s": "BTC-USDT",
214375
+ // "p": -372.12,
214376
+ // "P": "-0.87%",
214377
+ // "o": 42548.95,
214378
+ // "h": 42696.1,
214379
+ // "l": 41621.29,
214380
+ // "c": 42176.83,
214381
+ // "v": 4943.33,
214382
+ // "q": 208842236.5,
214383
+ // "O": 1706420395472,
214384
+ // "C": 1706506795472,
214385
+ // "A": 42177.23,
214386
+ // "a": 5.14484,
214387
+ // "B": 42176.38,
214388
+ // "b": 5.36117
214389
+ // }
214390
+ // }
214391
+ //
214392
+ const data = this.safeValue(message, 'data', {});
214393
+ const marketId = this.safeString(data, 's');
214394
+ // const marketId = messageHash.split('@')[0];
214395
+ const isSwap = client.url.indexOf('swap') >= 0;
214396
+ const marketType = isSwap ? 'swap' : 'spot';
214397
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
214398
+ const symbol = market['symbol'];
214399
+ const ticker = this.parseWsTicker(data, market);
214400
+ this.tickers[symbol] = ticker;
214401
+ const messageHash = market['id'] + '@ticker';
214402
+ client.resolve(ticker, messageHash);
214403
+ }
214404
+ parseWsTicker(message, market = undefined) {
214405
+ //
214406
+ // {
214407
+ // "e": "24hTicker",
214408
+ // "E": 1706498923556,
214409
+ // "s": "BTC-USDT",
214410
+ // "p": "346.4",
214411
+ // "P": "0.82",
214412
+ // "c": "42432.5",
214413
+ // "L": "0.0529",
214414
+ // "h": "42855.4",
214415
+ // "l": "41578.3",
214416
+ // "v": "64310.9754",
214417
+ // "q": "2728360284.15",
214418
+ // "o": "42086.1",
214419
+ // "O": 1706498922655,
214420
+ // "C": 1706498883023,
214421
+ // "A": "42437.8",
214422
+ // "a": "1.4160",
214423
+ // "B": "42437.1",
214424
+ // "b": "2.5747"
214425
+ // }
214426
+ //
214427
+ const timestamp = this.safeInteger(message, 'ts');
214428
+ const marketId = this.safeString(message, 's');
214429
+ market = this.safeMarket(marketId, market);
214430
+ const close = this.safeString(message, 'c');
214431
+ return this.safeTicker({
214432
+ 'symbol': market['symbol'],
214433
+ 'timestamp': timestamp,
214434
+ 'datetime': this.iso8601(timestamp),
214435
+ 'high': this.safeString(message, 'h'),
214436
+ 'low': this.safeString(message, 'l'),
214437
+ 'bid': this.safeString(message, 'B'),
214438
+ 'bidVolume': this.safeString(message, 'b'),
214439
+ 'ask': this.safeString(message, 'A'),
214440
+ 'askVolume': this.safeString(message, 'a'),
214441
+ 'vwap': undefined,
214442
+ 'open': this.safeString(message, 'o'),
214443
+ 'close': close,
214444
+ 'last': close,
214445
+ 'previousClose': undefined,
214446
+ 'change': this.safeString(message, 'p'),
214447
+ 'percentage': undefined,
214448
+ 'average': undefined,
214449
+ 'baseVolume': this.safeString(message, 'v'),
214450
+ 'quoteVolume': this.safeString(message, 'q'),
214451
+ 'info': message,
214452
+ }, market);
214453
+ }
214268
214454
  async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
214269
214455
  /**
214270
214456
  * @method
@@ -215101,6 +215287,10 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
215101
215287
  this.handleOrderBook(client, message);
215102
215288
  return;
215103
215289
  }
215290
+ if (dataType.indexOf('@ticker') >= 0) {
215291
+ this.handleTicker(client, message);
215292
+ return;
215293
+ }
215104
215294
  if (dataType.indexOf('@trade') >= 0) {
215105
215295
  this.handleTrades(client, message);
215106
215296
  return;
@@ -215131,6 +215321,11 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
215131
215321
  this.handleMyTrades(client, message);
215132
215322
  }
215133
215323
  }
215324
+ const msgData = this.safeValue(message, 'data');
215325
+ const msgEvent = this.safeString(msgData, 'e');
215326
+ if (msgEvent === '24hTicker') {
215327
+ this.handleTicker(client, message);
215328
+ }
215134
215329
  }
215135
215330
  }
215136
215331
 
@@ -297199,7 +297394,7 @@ SOFTWARE.
297199
297394
 
297200
297395
  //-----------------------------------------------------------------------------
297201
297396
  // this is updated by vss.js when building
297202
- const version = '4.2.25';
297397
+ const version = '4.2.26';
297203
297398
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
297204
297399
  //-----------------------------------------------------------------------------
297205
297400