ccxt 4.1.8 → 4.1.9

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 (47) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +1240 -189
  3. package/dist/ccxt.browser.min.js +7 -7
  4. package/dist/cjs/ccxt.js +3 -1
  5. package/dist/cjs/src/base/Exchange.js +58 -2
  6. package/dist/cjs/src/bingx.js +100 -39
  7. package/dist/cjs/src/bitget.js +26 -2
  8. package/dist/cjs/src/gate.js +9 -1
  9. package/dist/cjs/src/kucoinfutures.js +2 -2
  10. package/dist/cjs/src/pro/bingx.js +891 -0
  11. package/js/ccxt.d.ts +6 -3
  12. package/js/ccxt.js +3 -1
  13. package/js/src/abstract/bingx.d.ts +1 -0
  14. package/js/src/base/Exchange.d.ts +6 -3
  15. package/js/src/base/Exchange.js +58 -2
  16. package/js/src/base/types.d.ts +7 -0
  17. package/js/src/binance.d.ts +17 -17
  18. package/js/src/bingx.d.ts +4 -3
  19. package/js/src/bingx.js +100 -39
  20. package/js/src/bitfinex2.d.ts +13 -13
  21. package/js/src/bitget.d.ts +15 -15
  22. package/js/src/bitget.js +26 -2
  23. package/js/src/bitmex.d.ts +15 -15
  24. package/js/src/bybit.d.ts +23 -23
  25. package/js/src/coinbase.d.ts +16 -16
  26. package/js/src/coinbasepro.d.ts +12 -12
  27. package/js/src/coinex.d.ts +2 -2
  28. package/js/src/cryptocom.d.ts +12 -12
  29. package/js/src/deribit.d.ts +2 -2
  30. package/js/src/digifinex.d.ts +2 -2
  31. package/js/src/gate.d.ts +10 -10
  32. package/js/src/gate.js +9 -1
  33. package/js/src/huobi.d.ts +16 -16
  34. package/js/src/kraken.d.ts +2 -2
  35. package/js/src/krakenfutures.d.ts +6 -6
  36. package/js/src/kucoin.d.ts +13 -13
  37. package/js/src/kucoinfutures.d.ts +10 -10
  38. package/js/src/kucoinfutures.js +2 -2
  39. package/js/src/mexc.d.ts +3 -3
  40. package/js/src/okx.d.ts +13 -13
  41. package/js/src/phemex.d.ts +2 -2
  42. package/js/src/poloniex.d.ts +5 -5
  43. package/js/src/pro/bingx.d.ts +24 -0
  44. package/js/src/pro/bingx.js +892 -0
  45. package/js/src/woo.d.ts +2 -2
  46. package/package.json +1 -1
  47. package/skip-tests.json +3 -0
@@ -9817,6 +9817,9 @@ class Exchange {
9817
9817
  async fetchOpenInterest(symbol, params = {}) {
9818
9818
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchOpenInterest() is not supported yet');
9819
9819
  }
9820
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
9821
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingRateHistory() is not supported yet');
9822
+ }
9820
9823
  parseLastPrice(price, market = undefined) {
9821
9824
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' parseLastPrice() is not supported yet');
9822
9825
  }
@@ -10707,7 +10710,9 @@ class Exchange {
10707
10710
  }
10708
10711
  }
10709
10712
  }
10710
- return this.removeRepeatedElementsFromArray(result);
10713
+ const uniqueResults = this.removeRepeatedElementsFromArray(result);
10714
+ const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
10715
+ return this.filterBySinceLimit(uniqueResults, since, limit, key);
10711
10716
  }
10712
10717
  async safeDeterministicCall(method, symbol = undefined, since = undefined, limit = undefined, timeframe = undefined, params = {}) {
10713
10718
  let maxRetries = undefined;
@@ -10762,7 +10767,9 @@ class Exchange {
10762
10767
  for (let i = 0; i < results.length; i++) {
10763
10768
  result = this.arrayConcat(result, results[i]);
10764
10769
  }
10765
- return this.removeRepeatedElementsFromArray(result);
10770
+ const uniqueResults = this.removeRepeatedElementsFromArray(result);
10771
+ const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
10772
+ return this.filterBySinceLimit(uniqueResults, since, limit, key);
10766
10773
  }
10767
10774
  async fetchPaginatedCallCursor(method, symbol = undefined, since = undefined, limit = undefined, params = {}, cursorReceived = undefined, cursorSent = undefined, cursorIncrement = undefined, maxEntriesPerRequest = undefined) {
10768
10775
  let maxCalls = undefined;
@@ -10806,6 +10813,55 @@ class Exchange {
10806
10813
  }
10807
10814
  i += 1;
10808
10815
  }
10816
+ const sorted = this.sortCursorPaginatedResult(result);
10817
+ const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
10818
+ return this.filterBySinceLimit(sorted, since, limit, key);
10819
+ }
10820
+ async fetchPaginatedCallIncremental(method, symbol = undefined, since = undefined, limit = undefined, params = {}, pageKey = undefined, maxEntriesPerRequest = undefined) {
10821
+ let maxCalls = undefined;
10822
+ [maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);
10823
+ let maxRetries = undefined;
10824
+ [maxRetries, params] = this.handleOptionAndParams(params, method, 'maxRetries', 3);
10825
+ [maxEntriesPerRequest, params] = this.handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest, params);
10826
+ let i = 0;
10827
+ let errors = 0;
10828
+ let result = [];
10829
+ while (i < maxCalls) {
10830
+ try {
10831
+ params[pageKey] = i + 1;
10832
+ const response = await this[method](symbol, since, maxEntriesPerRequest, params);
10833
+ errors = 0;
10834
+ const responseLength = response.length;
10835
+ if (this.verbose) {
10836
+ this.log('Incremental pagination call', i + 1, 'method', method, 'response length', responseLength);
10837
+ }
10838
+ if (responseLength === 0) {
10839
+ break;
10840
+ }
10841
+ result = this.arrayConcat(result, response);
10842
+ }
10843
+ catch (e) {
10844
+ errors += 1;
10845
+ if (errors > maxRetries) {
10846
+ throw e;
10847
+ }
10848
+ }
10849
+ i += 1;
10850
+ }
10851
+ const sorted = this.sortCursorPaginatedResult(result);
10852
+ const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';
10853
+ return this.filterBySinceLimit(sorted, since, limit, key);
10854
+ }
10855
+ sortCursorPaginatedResult(result) {
10856
+ const first = this.safeValue(result, 0);
10857
+ if (first !== undefined) {
10858
+ if ('timestamp' in first) {
10859
+ return this.sortBy(result, 'timestamp');
10860
+ }
10861
+ if ('id' in first) {
10862
+ return this.sortBy(result, 'id');
10863
+ }
10864
+ }
10809
10865
  return result;
10810
10866
  }
10811
10867
  removeRepeatedElementsFromArray(input) {
@@ -25320,6 +25376,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
25320
25376
  'swap': 'https://open-api.{hostname}/openApi',
25321
25377
  'contract': 'https://open-api.{hostname}/openApi',
25322
25378
  'wallets': 'https://open-api.{hostname}/openApi',
25379
+ 'user': 'https://open-api.{hostname}/openApi',
25323
25380
  'subAccount': 'https://open-api.{hostname}/openApi',
25324
25381
  'account': 'https://open-api.{hostname}/openApi',
25325
25382
  },
@@ -25488,6 +25545,15 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
25488
25545
  },
25489
25546
  },
25490
25547
  },
25548
+ 'user': {
25549
+ 'auth': {
25550
+ 'private': {
25551
+ 'post': {
25552
+ 'userDataStream': 1,
25553
+ },
25554
+ },
25555
+ },
25556
+ },
25491
25557
  'copyTrading': {
25492
25558
  'v1': {
25493
25559
  'private': {
@@ -25565,6 +25631,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
25565
25631
  },
25566
25632
  'commonCurrencies': {},
25567
25633
  'options': {
25634
+ 'defaultType': 'spot',
25568
25635
  'accountsByType': {
25569
25636
  'spot': 'FUND',
25570
25637
  'swap': 'PFUTURES',
@@ -26084,37 +26151,63 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
26084
26151
  // filledTime: '2023-07-04T20:56:01.000+0800'
26085
26152
  // }
26086
26153
  //
26087
- let time = this.safeInteger2(trade, 'time', 'filledTm');
26154
+ //
26155
+ // ws
26156
+ //
26157
+ // spot
26158
+ //
26159
+ // {
26160
+ // E: 1690214529432,
26161
+ // T: 1690214529386,
26162
+ // e: 'trade',
26163
+ // m: true,
26164
+ // p: '29110.19',
26165
+ // q: '0.1868',
26166
+ // s: 'BTC-USDT',
26167
+ // t: '57903921'
26168
+ // }
26169
+ //
26170
+ // swap
26171
+ //
26172
+ // {
26173
+ // q: '0.0421',
26174
+ // p: '29023.5',
26175
+ // T: 1690221401344,
26176
+ // m: false,
26177
+ // s: 'BTC-USDT'
26178
+ // }
26179
+ //
26180
+ let time = this.safeIntegerN(trade, ['time', 'filledTm', 'T']);
26088
26181
  const datetimeId = this.safeString(trade, 'filledTm');
26089
26182
  if (datetimeId !== undefined) {
26090
26183
  time = this.parse8601(datetimeId);
26091
26184
  }
26092
- const isBuyerMaker = this.safeValue2(trade, 'buyerMaker', 'isBuyerMaker');
26093
- let takeOrMaker = undefined;
26094
- let side = undefined;
26095
- if (isBuyerMaker !== undefined) {
26096
- side = isBuyerMaker ? 'sell' : 'buy';
26097
- takeOrMaker = 'taker';
26185
+ if (time === 0) {
26186
+ time = undefined;
26098
26187
  }
26188
+ const isBuyerMaker = this.safeValue2(trade, 'buyerMaker', 'isBuyerMaker');
26189
+ const side = this.safeStringLower2(trade, 'side', 'S');
26099
26190
  const cost = this.safeString(trade, 'quoteQty');
26100
26191
  const type = (cost === undefined) ? 'spot' : 'swap';
26101
- const currencyId = this.safeString(trade, 'currency');
26192
+ const currencyId = this.safeString2(trade, 'currency', 'N');
26102
26193
  const currencyCode = this.safeCurrencyCode(currencyId);
26194
+ const m = this.safeValue(trade, 'm', false);
26195
+ const marketId = this.safeString(trade, 's');
26103
26196
  return this.safeTrade({
26104
- 'id': this.safeString2(trade, 'id', 'orderId'),
26197
+ 'id': this.safeStringN(trade, ['id', 't']),
26105
26198
  'info': trade,
26106
26199
  'timestamp': time,
26107
26200
  'datetime': this.iso8601(time),
26108
- 'symbol': this.safeSymbol(undefined, market, '-', type),
26109
- 'order': undefined,
26110
- 'type': undefined,
26111
- 'side': side,
26112
- 'takerOrMaker': takeOrMaker,
26113
- 'price': this.safeString(trade, 'price'),
26114
- 'amount': this.safeString2(trade, 'qty', 'amount'),
26201
+ 'symbol': this.safeSymbol(marketId, market, '-', type),
26202
+ 'order': this.safeString2(trade, 'orderId', 'i'),
26203
+ 'type': this.safeStringLower(trade, 'o'),
26204
+ 'side': this.parseOrderSide(side),
26205
+ 'takerOrMaker': (isBuyerMaker || m) ? 'maker' : 'taker',
26206
+ 'price': this.safeString2(trade, 'price', 'p'),
26207
+ 'amount': this.safeStringN(trade, ['qty', 'amount', 'q']),
26115
26208
  'cost': cost,
26116
26209
  'fee': {
26117
- 'cost': this.parseNumber(_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise.stringAbs */ .O.stringAbs(this.safeString(trade, 'commission'))),
26210
+ 'cost': this.parseNumber(_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise.stringAbs */ .O.stringAbs(this.safeString2(trade, 'commission', 'n'))),
26118
26211
  'currency': currencyCode,
26119
26212
  'rate': undefined,
26120
26213
  },
@@ -26834,15 +26927,20 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
26834
26927
  request['timeInForce'] = 'POC';
26835
26928
  }
26836
26929
  const createMarketBuyOrderRequiresPrice = this.safeValue(this.options, 'createMarketBuyOrderRequiresPrice', true);
26837
- if (createMarketBuyOrderRequiresPrice && isMarketOrder && (side === 'buy')) {
26838
- if (price === undefined) {
26839
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + ' createOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option to false and pass in the cost to spend into the amount parameter');
26930
+ if (isMarketOrder && (side === 'buy')) {
26931
+ if (createMarketBuyOrderRequiresPrice) {
26932
+ if (price === undefined) {
26933
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + ' createOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option to false and pass in the cost to spend into the amount parameter');
26934
+ }
26935
+ else {
26936
+ const amountString = this.numberToString(amount);
26937
+ const priceString = this.numberToString(price);
26938
+ const cost = this.parseNumber(_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise.stringMul */ .O.stringMul(amountString, priceString));
26939
+ request['quoteOrderQty'] = this.priceToPrecision(symbol, cost);
26940
+ }
26840
26941
  }
26841
26942
  else {
26842
- const amountString = this.numberToString(amount);
26843
- const priceString = this.numberToString(price);
26844
- const cost = this.parseNumber(_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise.stringMul */ .O.stringMul(amountString, priceString));
26845
- request['quoteOrderQty'] = this.priceToPrecision(symbol, cost);
26943
+ request['quoteOrderQty'] = this.priceToPrecision(symbol, amount);
26846
26944
  }
26847
26945
  }
26848
26946
  else {
@@ -26958,6 +27056,15 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
26958
27056
  const order = this.safeValue(data, 'order', data);
26959
27057
  return this.parseOrder(order, market);
26960
27058
  }
27059
+ parseOrderSide(side) {
27060
+ const sides = {
27061
+ 'BUY': 'buy',
27062
+ 'SELL': 'sell',
27063
+ 'SHORT': 'sell',
27064
+ 'LONG': 'buy',
27065
+ };
27066
+ return this.safeString(sides, side, side);
27067
+ }
26961
27068
  parseOrder(order, market = undefined) {
26962
27069
  //
26963
27070
  // spot
@@ -27055,39 +27162,49 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27055
27162
  // "workingType": "MARK_PRICE"
27056
27163
  // }
27057
27164
  //
27058
- const positionSide = this.safeString(order, 'positionSide');
27165
+ const positionSide = this.safeString2(order, 'positionSide', 'ps');
27059
27166
  const marketType = (positionSide === undefined) ? 'spot' : 'swap';
27060
- const marketId = this.safeString(order, 'symbol');
27167
+ const marketId = this.safeString2(order, 'symbol', 's');
27061
27168
  const symbol = this.safeSymbol(marketId, market, '-', marketType);
27062
- const timestamp = this.safeInteger2(order, 'time', 'transactTime');
27169
+ const orderId = this.safeString2(order, 'orderId', 'i');
27170
+ const side = this.safeStringLower2(order, 'side', 'S');
27171
+ const type = this.safeStringLower2(order, 'type', 'o');
27172
+ const timestamp = this.safeIntegerN(order, ['time', 'transactTime', 'E']);
27173
+ const lastTradeTimestamp = this.safeInteger2(order, 'updateTime', 'T');
27174
+ const price = this.safeString2(order, 'price', 'p');
27175
+ const average = this.safeString2(order, 'avgPrice', 'ap');
27176
+ const amount = this.safeString2(order, 'origQty', 'q');
27177
+ const filled = this.safeString2(order, 'executedQty', 'z');
27178
+ const statusId = this.safeString2(order, 'status', 'X');
27063
27179
  const fee = {
27064
- 'currency': this.safeString(order, 'feeAsset'),
27065
- 'rate': this.safeString2(order, 'fee', 'commission'),
27180
+ 'currency': this.safeString2(order, 'feeAsset', 'N'),
27181
+ 'rate': this.safeStringN(order, ['fee', 'commission', 'n']),
27066
27182
  };
27183
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'c');
27067
27184
  return this.safeOrder({
27068
27185
  'info': order,
27069
- 'id': this.safeString(order, 'orderId'),
27070
- 'clientOrderId': this.safeString(order, 'clientOrderId'),
27186
+ 'id': orderId,
27187
+ 'clientOrderId': clientOrderId,
27071
27188
  'timestamp': timestamp,
27072
27189
  'datetime': this.iso8601(timestamp),
27073
- 'lastTradeTimestamp': this.safeInteger(order, 'updateTime'),
27190
+ 'lastTradeTimestamp': lastTradeTimestamp,
27074
27191
  'lastUpdateTimestamp': this.safeInteger(order, 'updateTime'),
27075
27192
  'symbol': symbol,
27076
- 'type': this.safeStringLower(order, 'type'),
27193
+ 'type': type,
27077
27194
  'timeInForce': undefined,
27078
27195
  'postOnly': undefined,
27079
- 'side': this.safeStringLower(order, 'side'),
27080
- 'price': this.safeString(order, 'price'),
27196
+ 'side': this.parseOrderSide(side),
27197
+ 'price': price,
27081
27198
  'stopPrice': this.safeNumber(order, 'stopPrice'),
27082
27199
  'triggerPrice': this.safeNumber(order, 'stopPrice'),
27083
27200
  'stopLossPrice': this.safeNumber(order, 'stopLoss'),
27084
27201
  'takeProfitPrice': this.safeNumber(order, 'takeProfit'),
27085
- 'average': this.safeString(order, 'avgPrice'),
27202
+ 'average': average,
27086
27203
  'cost': undefined,
27087
- 'amount': this.safeString(order, 'origQty'),
27088
- 'filled': this.safeString(order, 'executedQty'),
27204
+ 'amount': amount,
27205
+ 'filled': filled,
27089
27206
  'remaining': undefined,
27090
- 'status': this.parseOrderStatus(this.safeString(order, 'status')),
27207
+ 'status': this.parseOrderStatus(statusId),
27091
27208
  'fee': fee,
27092
27209
  'trades': undefined,
27093
27210
  }, market);
@@ -39721,8 +39838,26 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
39721
39838
  // "data": "888291686266343424"
39722
39839
  // }
39723
39840
  //
39841
+ // {
39842
+ // "code":"00000",
39843
+ // "msg":"success",
39844
+ // "requestTime":1696784219602,
39845
+ // "data":{
39846
+ // "orderId":"1094957867615789056",
39847
+ // "clientOrderId":"64f1e4ce842041d296b4517df1b5c2d7"
39848
+ // }
39849
+ // }
39850
+ //
39851
+ const data = this.safeValue(response, 'data');
39852
+ let id = undefined;
39853
+ if (typeof data === 'string') {
39854
+ id = data;
39855
+ }
39856
+ else if (data !== undefined) {
39857
+ id = this.safeString(data, 'orderId');
39858
+ }
39724
39859
  const result = {
39725
- 'id': this.safeString(response, 'data'),
39860
+ 'id': id,
39726
39861
  'info': response,
39727
39862
  'txid': undefined,
39728
39863
  'timestamp': undefined,
@@ -42505,15 +42640,20 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
42505
42640
  * @name bitget#fetchFundingRateHistory
42506
42641
  * @see https://bitgetlimited.github.io/apidoc/en/mix/#get-history-funding-rate
42507
42642
  * @description fetches historical funding rate prices
42508
- * @see https://bitgetlimited.github.io/apidoc/en/mix/#get-history-funding-rate
42509
42643
  * @param {string} symbol unified symbol of the market to fetch the funding rate history for
42510
42644
  * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
42511
42645
  * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure} to fetch
42512
42646
  * @param {object} [params] extra parameters specific to the bitget api endpoint
42647
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
42513
42648
  * @returns {object[]} a list of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure}
42514
42649
  */
42515
42650
  this.checkRequiredSymbol('fetchFundingRateHistory', symbol);
42516
42651
  await this.loadMarkets();
42652
+ let paginate = false;
42653
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
42654
+ if (paginate) {
42655
+ return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'pageNo', 50);
42656
+ }
42517
42657
  const market = this.market(symbol);
42518
42658
  const request = {
42519
42659
  'symbol': market['id'],
@@ -42524,6 +42664,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
42524
42664
  if (limit !== undefined) {
42525
42665
  request['pageSize'] = limit;
42526
42666
  }
42667
+ request['nextPage'] = true;
42527
42668
  const response = await this.publicMixGetMarketHistoryFundRate(this.extend(request, params));
42528
42669
  //
42529
42670
  // {
@@ -117938,6 +118079,13 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
117938
118079
  // "memo": null
117939
118080
  // }
117940
118081
  //
118082
+ // {
118083
+ // "currency":"usdt",
118084
+ // "address":"0x01b0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806",
118085
+ // "amount":"1880",
118086
+ // "chain":"eth"
118087
+ // }
118088
+ //
117941
118089
  const id = this.safeString(transaction, 'id');
117942
118090
  let type = undefined;
117943
118091
  let amountString = this.safeString(transaction, 'amount');
@@ -117955,6 +118103,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
117955
118103
  if (type === 'withdrawal') {
117956
118104
  amountString = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise.stringSub */ .O.stringSub(amountString, feeCostString);
117957
118105
  }
118106
+ const networkId = this.safeStringUpper(transaction, 'chain');
117958
118107
  const currencyId = this.safeString(transaction, 'currency');
117959
118108
  const code = this.safeCurrencyCode(currencyId);
117960
118109
  const txid = this.safeString(transaction, 'txid');
@@ -117969,7 +118118,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
117969
118118
  'txid': txid,
117970
118119
  'currency': code,
117971
118120
  'amount': this.parseNumber(amountString),
117972
- 'network': undefined,
118121
+ 'network': this.networkIdToCode(networkId),
117973
118122
  'address': address,
117974
118123
  'addressTo': undefined,
117975
118124
  'addressFrom': undefined,
@@ -152788,12 +152937,12 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
152788
152937
  async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
152789
152938
  /**
152790
152939
  * @method
152791
- * @name okx#fetchFundingRateHistory
152940
+ * @name kucoinfutures#fetchFundingRateHistory
152792
152941
  * @description fetches historical funding rate prices
152793
152942
  * @param {string} symbol unified symbol of the market to fetch the funding rate history for
152794
152943
  * @param {int} [since] not used by kucuoinfutures
152795
152944
  * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure} to fetch
152796
- * @param {object} [params] extra parameters specific to the okx api endpoint
152945
+ * @param {object} [params] extra parameters specific to the kucoinfutures api endpoint
152797
152946
  * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
152798
152947
  * @returns {object[]} a list of [funding rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#funding-rate-history-structure}
152799
152948
  */
@@ -197327,6 +197476,905 @@ class binanceusdm extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
197327
197476
  }
197328
197477
 
197329
197478
 
197479
+ /***/ }),
197480
+
197481
+ /***/ 6955:
197482
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
197483
+
197484
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
197485
+ /* harmony export */ "Z": () => (/* binding */ bingx)
197486
+ /* harmony export */ });
197487
+ /* harmony import */ var _bingx_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7960);
197488
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
197489
+ /* harmony import */ var _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3020);
197490
+ // ---------------------------------------------------------------------------
197491
+
197492
+
197493
+
197494
+ // ---------------------------------------------------------------------------
197495
+ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
197496
+ describe() {
197497
+ return this.deepExtend(super.describe(), {
197498
+ 'has': {
197499
+ 'ws': true,
197500
+ 'watchTrades': true,
197501
+ 'watchOrderBook': true,
197502
+ 'watchOHLCV': true,
197503
+ 'watchOrders': true,
197504
+ 'watchMyTrades': true,
197505
+ 'watchTicker': false,
197506
+ 'watchTickers': false,
197507
+ 'watchBalance': true,
197508
+ },
197509
+ 'urls': {
197510
+ 'api': {
197511
+ 'ws': {
197512
+ 'spot': 'wss://open-api-ws.bingx.com/market',
197513
+ 'swap': 'wss://open-api-swap.bingx.com/swap-market',
197514
+ },
197515
+ },
197516
+ },
197517
+ 'options': {
197518
+ 'ws': {
197519
+ 'gunzip': true,
197520
+ },
197521
+ 'swap': {
197522
+ 'timeframes': {
197523
+ '1m': '1m',
197524
+ '3m': '3m',
197525
+ '5m': '5m',
197526
+ '15m': '15m',
197527
+ '30m': '30m',
197528
+ '1h': '1h',
197529
+ '2h': '2h',
197530
+ '4h': '4h',
197531
+ '6h': '6h',
197532
+ '12h': '12h',
197533
+ '1d': '1d',
197534
+ '3d': '3d',
197535
+ '1w': '1w',
197536
+ '1M': '1M',
197537
+ },
197538
+ },
197539
+ 'spot': {
197540
+ 'timeframes': {
197541
+ '1m': '1min',
197542
+ '5m': '5min',
197543
+ '15m': '15min',
197544
+ '30m': '30min',
197545
+ '1h': '60min',
197546
+ '1d': '1day',
197547
+ },
197548
+ },
197549
+ },
197550
+ 'streaming': {
197551
+ 'keepAlive': 1800000, // 30 minutes
197552
+ },
197553
+ });
197554
+ }
197555
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
197556
+ /**
197557
+ * @method
197558
+ * @name bingx#watchTrades
197559
+ * @description watches information on multiple trades made in a market
197560
+ * @see https://bingx-api.github.io/docs/#/spot/socket/market.html#Subscribe%20to%20tick-by-tick
197561
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/market.html#Subscribe%20the%20Latest%20Trade%20Detail
197562
+ * @param {string} symbol unified market symbol of the market orders were made in
197563
+ * @param {int} [since] the earliest time in ms to fetch orders for
197564
+ * @param {int} [limit] the maximum number of orde structures to retrieve
197565
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
197566
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
197567
+ */
197568
+ await this.loadMarkets();
197569
+ const market = this.market(symbol);
197570
+ const [marketType, query] = this.handleMarketTypeAndParams('watchTrades', market, params);
197571
+ const url = this.safeValue(this.urls['api']['ws'], marketType);
197572
+ if (url === undefined) {
197573
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchTrades is not supported for ' + marketType + ' markets.');
197574
+ }
197575
+ const messageHash = market['id'] + '@trade';
197576
+ const uuid = this.uuid();
197577
+ const request = {
197578
+ 'id': uuid,
197579
+ 'dataType': messageHash,
197580
+ };
197581
+ if (marketType === 'swap') {
197582
+ request['reqType'] = 'sub';
197583
+ }
197584
+ const trades = await this.watch(url, messageHash, this.extend(request, query), messageHash);
197585
+ if (this.newUpdates) {
197586
+ limit = trades.getLimit(symbol, limit);
197587
+ }
197588
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
197589
+ }
197590
+ handleTrades(client, message) {
197591
+ //
197592
+ // spot
197593
+ // first snapshot
197594
+ //
197595
+ // {
197596
+ // id: 'd83b78ce-98be-4dc2-b847-12fe471b5bc5',
197597
+ // code: 0,
197598
+ // msg: 'SUCCESS',
197599
+ // timestamp: 1690214699854
197600
+ // }
197601
+ //
197602
+ // subsequent updates
197603
+ //
197604
+ // {
197605
+ // code: 0,
197606
+ // data: {
197607
+ // E: 1690214529432,
197608
+ // T: 1690214529386,
197609
+ // e: 'trade',
197610
+ // m: true,
197611
+ // p: '29110.19',
197612
+ // q: '0.1868',
197613
+ // s: 'BTC-USDT',
197614
+ // t: '57903921'
197615
+ // },
197616
+ // dataType: 'BTC-USDT@trade',
197617
+ // success: true
197618
+ // }
197619
+ //
197620
+ //
197621
+ // swap
197622
+ // first snapshot
197623
+ //
197624
+ // {
197625
+ // id: '2aed93b1-6e1e-4038-aeba-f5eeaec2ca48',
197626
+ // code: 0,
197627
+ // msg: '',
197628
+ // dataType: '',
197629
+ // data: null
197630
+ // }
197631
+ //
197632
+ // subsequent updates
197633
+ //
197634
+ //
197635
+ // {
197636
+ // code: 0,
197637
+ // dataType: 'BTC-USDT@trade',
197638
+ // data: [
197639
+ // {
197640
+ // q: '0.0421',
197641
+ // p: '29023.5',
197642
+ // T: 1690221401344,
197643
+ // m: false,
197644
+ // s: 'BTC-USDT'
197645
+ // },
197646
+ // ...
197647
+ // ]
197648
+ // }
197649
+ //
197650
+ const data = this.safeValue(message, 'data', []);
197651
+ const messageHash = this.safeString(message, 'dataType');
197652
+ const marketId = messageHash.split('@')[0];
197653
+ const marketType = client.url.indexOf('swap') >= 0 ? 'swap' : 'spot';
197654
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
197655
+ const symbol = market['symbol'];
197656
+ let trades = undefined;
197657
+ if (Array.isArray(data)) {
197658
+ trades = this.parseTrades(data, market);
197659
+ }
197660
+ else {
197661
+ trades = [this.parseTrade(data, market)];
197662
+ }
197663
+ let stored = this.safeValue(this.trades, symbol);
197664
+ if (stored === undefined) {
197665
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
197666
+ stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCache */ .ZL(limit);
197667
+ this.trades[symbol] = stored;
197668
+ }
197669
+ for (let j = 0; j < trades.length; j++) {
197670
+ stored.append(trades[j]);
197671
+ }
197672
+ client.resolve(stored, messageHash);
197673
+ }
197674
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
197675
+ /**
197676
+ * @method
197677
+ * @name bingx#watchOrderBook
197678
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
197679
+ * @see https://bingx-api.github.io/docs/#/spot/socket/market.html#Subscribe%20Market%20Depth%20Data
197680
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/market.html#Subscribe%20Market%20Depth%20Data
197681
+ * @param {string} symbol unified symbol of the market to fetch the order book for
197682
+ * @param {int} [limit] the maximum amount of order book entries to return
197683
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
197684
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
197685
+ */
197686
+ await this.loadMarkets();
197687
+ const market = this.market(symbol);
197688
+ const [marketType, query] = this.handleMarketTypeAndParams('watchOrderBook', market, params);
197689
+ if (limit === undefined) {
197690
+ limit = 100;
197691
+ }
197692
+ else {
197693
+ if (marketType === 'swap') {
197694
+ if ((limit !== 5) && (limit !== 10) && (limit !== 20) && (limit !== 50) && (limit !== 100)) {
197695
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchOrderBook() (swap) only supports limit 5, 10, 20, 50, and 100');
197696
+ }
197697
+ }
197698
+ else if (marketType === 'spot') {
197699
+ if ((limit !== 20) && (limit !== 100)) {
197700
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchOrderBook() (spot) only supports limit 20, and 100');
197701
+ }
197702
+ }
197703
+ }
197704
+ const url = this.safeValue(this.urls['api']['ws'], marketType);
197705
+ if (url === undefined) {
197706
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchOrderBook is not supported for ' + marketType + ' markets.');
197707
+ }
197708
+ const messageHash = market['id'] + '@depth' + limit.toString();
197709
+ const uuid = this.uuid();
197710
+ const request = {
197711
+ 'id': uuid,
197712
+ 'dataType': messageHash,
197713
+ };
197714
+ if (marketType === 'swap') {
197715
+ request['reqType'] = 'sub';
197716
+ }
197717
+ const orderbook = await this.watch(url, messageHash, this.deepExtend(request, query), messageHash);
197718
+ return orderbook.limit();
197719
+ }
197720
+ handleDelta(bookside, delta) {
197721
+ const price = this.safeFloat(delta, 0);
197722
+ const amount = this.safeFloat(delta, 1);
197723
+ bookside.store(price, amount);
197724
+ }
197725
+ handleOrderBook(client, message) {
197726
+ //
197727
+ // spot
197728
+ //
197729
+ //
197730
+ // {
197731
+ // code: 0,
197732
+ // dataType: 'BTC-USDT@depth20',
197733
+ // data: {
197734
+ // bids: [
197735
+ // [ '28852.9', '34.2621' ],
197736
+ // ...
197737
+ // ],
197738
+ // asks: [
197739
+ // [ '28864.9', '23.4079' ],
197740
+ // ...
197741
+ // ]
197742
+ // },
197743
+ // dataType: 'BTC-USDT@depth20',
197744
+ // success: true
197745
+ // }
197746
+ //
197747
+ // swap
197748
+ //
197749
+ //
197750
+ // {
197751
+ // code: 0,
197752
+ // dataType: 'BTC-USDT@depth20',
197753
+ // data: {
197754
+ // bids: [
197755
+ // [ '28852.9', '34.2621' ],
197756
+ // ...
197757
+ // ],
197758
+ // asks: [
197759
+ // [ '28864.9', '23.4079' ],
197760
+ // ...
197761
+ // ]
197762
+ // }
197763
+ // }
197764
+ //
197765
+ const data = this.safeValue(message, 'data', []);
197766
+ const messageHash = this.safeString(message, 'dataType');
197767
+ const marketId = messageHash.split('@')[0];
197768
+ const marketType = client.url.indexOf('swap') >= 0 ? 'swap' : 'spot';
197769
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
197770
+ const symbol = market['symbol'];
197771
+ let orderbook = this.safeValue(this.orderbooks, symbol);
197772
+ if (orderbook === undefined) {
197773
+ orderbook = this.orderBook();
197774
+ }
197775
+ const snapshot = this.parseOrderBook(data, symbol, undefined, 'bids', 'asks', 0, 1);
197776
+ orderbook.reset(snapshot);
197777
+ this.orderbooks[symbol] = orderbook;
197778
+ client.resolve(orderbook, messageHash);
197779
+ }
197780
+ parseWsOHLCV(ohlcv, market = undefined) {
197781
+ //
197782
+ // {
197783
+ // c: '28909.0',
197784
+ // o: '28915.4',
197785
+ // h: '28915.4',
197786
+ // l: '28896.1',
197787
+ // v: '27.6919',
197788
+ // T: 1690907580000
197789
+ // }
197790
+ //
197791
+ return [
197792
+ this.safeInteger(ohlcv, 'T'),
197793
+ this.safeNumber(ohlcv, 'o'),
197794
+ this.safeNumber(ohlcv, 'h'),
197795
+ this.safeNumber(ohlcv, 'l'),
197796
+ this.safeNumber(ohlcv, 'c'),
197797
+ this.safeNumber(ohlcv, 'v'),
197798
+ ];
197799
+ }
197800
+ handleOHLCV(client, message) {
197801
+ //
197802
+ // spot
197803
+ //
197804
+ // {
197805
+ // code: 0,
197806
+ // data: {
197807
+ // E: 1696687498608,
197808
+ // K: {
197809
+ // T: 1696687499999,
197810
+ // c: '27917.829',
197811
+ // h: '27918.427',
197812
+ // i: '1min',
197813
+ // l: '27917.7',
197814
+ // n: 262,
197815
+ // o: '27917.91',
197816
+ // q: '25715.359197',
197817
+ // s: 'BTC-USDT',
197818
+ // t: 1696687440000,
197819
+ // v: '0.921100'
197820
+ // },
197821
+ // e: 'kline',
197822
+ // s: 'BTC-USDT'
197823
+ // },
197824
+ // dataType: 'BTC-USDT@kline_1min',
197825
+ // success: true
197826
+ // }
197827
+ //
197828
+ // swap
197829
+ // {
197830
+ // code: 0,
197831
+ // dataType: 'BTC-USDT@kline_1m',
197832
+ // s: 'BTC-USDT',
197833
+ // data: [
197834
+ // {
197835
+ // c: '28909.0',
197836
+ // o: '28915.4',
197837
+ // h: '28915.4',
197838
+ // l: '28896.1',
197839
+ // v: '27.6919',
197840
+ // T: 1690907580000
197841
+ // }
197842
+ // ]
197843
+ // }
197844
+ //
197845
+ const data = this.safeValue(message, 'data', []);
197846
+ let candles = undefined;
197847
+ if (Array.isArray(data)) {
197848
+ candles = data;
197849
+ }
197850
+ else {
197851
+ candles = [this.safeValue(data, 'K', [])];
197852
+ }
197853
+ const messageHash = this.safeString(message, 'dataType');
197854
+ const timeframeId = messageHash.split('_')[1];
197855
+ const marketId = messageHash.split('@')[0];
197856
+ const marketType = client.url.indexOf('swap') >= 0 ? 'swap' : 'spot';
197857
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
197858
+ const symbol = market['symbol'];
197859
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
197860
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframeId);
197861
+ if (stored === undefined) {
197862
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
197863
+ stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
197864
+ this.ohlcvs[symbol][timeframeId] = stored;
197865
+ }
197866
+ for (let i = 0; i < candles.length; i++) {
197867
+ const candle = candles[i];
197868
+ const parsed = this.parseWsOHLCV(candle, market);
197869
+ stored.append(parsed);
197870
+ }
197871
+ client.resolve(stored, messageHash);
197872
+ }
197873
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
197874
+ /**
197875
+ * @method
197876
+ * @name bingx#watchOHLCV
197877
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
197878
+ * @see https://bingx-api.github.io/docs/#/spot/socket/market.html#K%E7%BA%BF%20Streams
197879
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/market.html#Subscribe%20K-Line%20Data
197880
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
197881
+ * @param {string} timeframe the length of time each candle represents
197882
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
197883
+ * @param {int} [limit] the maximum amount of candles to fetch
197884
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
197885
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
197886
+ */
197887
+ const market = this.market(symbol);
197888
+ const [marketType, query] = this.handleMarketTypeAndParams('watchOHLCV', market, params);
197889
+ const url = this.safeValue(this.urls['api']['ws'], marketType);
197890
+ if (url === undefined) {
197891
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchOHLCV is not supported for ' + marketType + ' markets.');
197892
+ }
197893
+ const options = this.safeValue(this.options, marketType, {});
197894
+ const timeframes = this.safeValue(options, 'timeframes', {});
197895
+ const interval = this.safeString(timeframes, timeframe, timeframe);
197896
+ const messageHash = market['id'] + '@kline_' + interval;
197897
+ const uuid = this.uuid();
197898
+ const request = {
197899
+ 'id': uuid,
197900
+ 'dataType': messageHash,
197901
+ };
197902
+ if (marketType === 'swap') {
197903
+ request['reqType'] = 'sub';
197904
+ }
197905
+ const ohlcv = await this.watch(url, messageHash, this.extend(request, query), messageHash);
197906
+ if (this.newUpdates) {
197907
+ limit = ohlcv.getLimit(symbol, limit);
197908
+ }
197909
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
197910
+ }
197911
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
197912
+ /**
197913
+ * @method
197914
+ * @name bingx#watchOrders
197915
+ * @see https://bingx-api.github.io/docs/#/spot/socket/account.html#Subscription%20order%20update%20data
197916
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/account.html#Account%20balance%20and%20position%20update%20push
197917
+ * @description watches information on multiple orders made by the user
197918
+ * @param {string} symbol unified market symbol of the market orders were made in
197919
+ * @param {int} [since] the earliest time in ms to fetch orders for
197920
+ * @param {int} [limit] the maximum number of orde structures to retrieve
197921
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
197922
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
197923
+ */
197924
+ await this.loadMarkets();
197925
+ await this.authenticate();
197926
+ let type = undefined;
197927
+ let market = undefined;
197928
+ if (symbol !== undefined) {
197929
+ market = this.market(symbol);
197930
+ symbol = market['symbol'];
197931
+ }
197932
+ [type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
197933
+ const isSpot = (type === 'spot');
197934
+ const spotHash = 'spot:private';
197935
+ const swapHash = 'swap:private';
197936
+ const subscriptionHash = isSpot ? spotHash : swapHash;
197937
+ const spotMessageHash = 'spot:order';
197938
+ const swapMessageHash = 'swap:order';
197939
+ let messageHash = isSpot ? spotMessageHash : swapMessageHash;
197940
+ if (market !== undefined) {
197941
+ messageHash += ':' + symbol;
197942
+ }
197943
+ const url = this.urls['api']['ws'][type] + '?listenKey=' + this.options['listenKey'];
197944
+ let request = undefined;
197945
+ const uuid = this.uuid();
197946
+ if (isSpot) {
197947
+ request = {
197948
+ 'id': uuid,
197949
+ 'dataType': 'spot.executionReport',
197950
+ };
197951
+ }
197952
+ const orders = await this.watch(url, messageHash, request, subscriptionHash);
197953
+ if (this.newUpdates) {
197954
+ limit = orders.getLimit(symbol, limit);
197955
+ }
197956
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
197957
+ }
197958
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
197959
+ /**
197960
+ * @method
197961
+ * @name bingx#watchMyTrades
197962
+ * @see https://bingx-api.github.io/docs/#/spot/socket/account.html#Subscription%20order%20update%20data
197963
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/account.html#Account%20balance%20and%20position%20update%20push
197964
+ * @description watches information on multiple trades made by the user
197965
+ * @param {string} symbol unified market symbol of the market trades were made in
197966
+ * @param {int} [since] the earliest time in ms to trades orders for
197967
+ * @param {int} [limit] the maximum number of trades structures to retrieve
197968
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
197969
+ * @returns {object[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure
197970
+ */
197971
+ await this.loadMarkets();
197972
+ await this.authenticate();
197973
+ let type = undefined;
197974
+ let market = undefined;
197975
+ if (symbol !== undefined) {
197976
+ market = this.market(symbol);
197977
+ symbol = market['symbol'];
197978
+ }
197979
+ [type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
197980
+ const isSpot = (type === 'spot');
197981
+ const spotSubHash = 'spot:private';
197982
+ const swapSubHash = 'swap:private';
197983
+ const subscriptionHash = isSpot ? spotSubHash : swapSubHash;
197984
+ const spotMessageHash = 'spot:mytrades';
197985
+ const swapMessageHash = 'swap:mytrades';
197986
+ let messageHash = isSpot ? spotMessageHash : swapMessageHash;
197987
+ if (market !== undefined) {
197988
+ messageHash += ':' + symbol;
197989
+ }
197990
+ const url = this.urls['api']['ws'][type] + '?listenKey=' + this.options['listenKey'];
197991
+ let request = undefined;
197992
+ const uuid = this.uuid();
197993
+ if (isSpot) {
197994
+ request = {
197995
+ 'id': uuid,
197996
+ 'dataType': 'spot.executionReport',
197997
+ };
197998
+ }
197999
+ const trades = await this.watch(url, messageHash, request, subscriptionHash);
198000
+ if (this.newUpdates) {
198001
+ limit = trades.getLimit(symbol, limit);
198002
+ }
198003
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
198004
+ }
198005
+ async watchBalance(params = {}) {
198006
+ /**
198007
+ * @method
198008
+ * @name bingx#watchBalance
198009
+ * @see https://bingx-api.github.io/docs/#/spot/socket/account.html#Subscription%20order%20update%20data
198010
+ * @see https://bingx-api.github.io/docs/#/swapV2/socket/account.html#Account%20balance%20and%20position%20update%20push
198011
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
198012
+ * @param {object} [params] extra parameters specific to the bingx api endpoint
198013
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/en/latest/manual.html?#balance-structure}
198014
+ */
198015
+ await this.loadMarkets();
198016
+ await this.authenticate();
198017
+ let type = undefined;
198018
+ [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
198019
+ const isSpot = (type === 'spot');
198020
+ const spotSubHash = 'spot:balance';
198021
+ const swapSubHash = 'swap:private';
198022
+ const spotMessageHash = 'spot:balance';
198023
+ const swapMessageHash = 'swap:balance';
198024
+ const messageHash = isSpot ? spotMessageHash : swapMessageHash;
198025
+ const subscriptionHash = isSpot ? spotSubHash : swapSubHash;
198026
+ const url = this.urls['api']['ws'][type] + '?listenKey=' + this.options['listenKey'];
198027
+ let request = undefined;
198028
+ const uuid = this.uuid();
198029
+ if (type === 'spot') {
198030
+ request = {
198031
+ 'id': uuid,
198032
+ 'dataType': 'ACCOUNT_UPDATE',
198033
+ };
198034
+ }
198035
+ return await this.watch(url, messageHash, request, subscriptionHash);
198036
+ }
198037
+ handleErrorMessage(client, message) {
198038
+ //
198039
+ // { code: 100400, msg: '', timestamp: 1696245808833 }
198040
+ //
198041
+ // {
198042
+ // code: 100500,
198043
+ // id: '9cd37d32-da98-440b-bd04-37e7dbcf51ad',
198044
+ // msg: '',
198045
+ // timestamp: 1696245842307
198046
+ // }
198047
+ const code = this.safeString(message, 'code');
198048
+ try {
198049
+ if (code !== undefined) {
198050
+ const feedback = this.id + ' ' + this.json(message);
198051
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
198052
+ }
198053
+ }
198054
+ catch (e) {
198055
+ client.reject(e);
198056
+ }
198057
+ return true;
198058
+ }
198059
+ async authenticate(params = {}) {
198060
+ const time = this.milliseconds();
198061
+ const listenKey = this.safeString(this.options, 'listenKey');
198062
+ if (listenKey === undefined) {
198063
+ const response = await this.userAuthPrivatePostUserDataStream();
198064
+ this.options['listenKey'] = this.safeString(response, 'listenKey');
198065
+ this.options['lastAuthenticatedTime'] = time;
198066
+ return;
198067
+ }
198068
+ const lastAuthenticatedTime = this.safeInteger(this.options, 'lastAuthenticatedTime', 0);
198069
+ const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000); // 1 hour
198070
+ if (time - lastAuthenticatedTime > listenKeyRefreshRate) {
198071
+ const response = await this.userAuthPrivatePostUserDataStream({ 'listenKey': listenKey }); // extend the expiry
198072
+ this.options['listenKey'] = this.safeString(response, 'listenKey');
198073
+ this.options['lastAuthenticatedTime'] = time;
198074
+ }
198075
+ }
198076
+ async pong(client, message) {
198077
+ //
198078
+ // spot
198079
+ // {
198080
+ // ping: '5963ba3db76049b2870f9a686b2ebaac',
198081
+ // time: '2023-10-02T18:51:55.089+0800'
198082
+ // }
198083
+ // swap
198084
+ // Ping
198085
+ //
198086
+ if (message === 'Ping') {
198087
+ await client.send('Pong');
198088
+ }
198089
+ else {
198090
+ const ping = this.safeString(message, 'ping');
198091
+ const time = this.safeString(message, 'time');
198092
+ await client.send({
198093
+ 'pong': ping,
198094
+ 'time': time,
198095
+ });
198096
+ }
198097
+ }
198098
+ handleOrder(client, message) {
198099
+ //
198100
+ // {
198101
+ // "code": 0,
198102
+ // "dataType": "spot.executionReport",
198103
+ // "data": {
198104
+ // "e": "executionReport",
198105
+ // "E": 1694680212947,
198106
+ // "s": "LTC-USDT",
198107
+ // "S": "BUY",
198108
+ // "o": "LIMIT",
198109
+ // "q": 0.1,
198110
+ // "p": 50,
198111
+ // "x": "NEW",
198112
+ // "X": "PENDING",
198113
+ // "i": 1702238305204043800,
198114
+ // "l": 0,
198115
+ // "z": 0,
198116
+ // "L": 0,
198117
+ // "n": 0,
198118
+ // "N": "",
198119
+ // "T": 0,
198120
+ // "t": 0,
198121
+ // "O": 1694680212676,
198122
+ // "Z": 0,
198123
+ // "Y": 0,
198124
+ // "Q": 0,
198125
+ // "m": false
198126
+ // }
198127
+ // }
198128
+ //
198129
+ // {
198130
+ // code: 0,
198131
+ // dataType: 'spot.executionReport',
198132
+ // data: {
198133
+ // e: 'executionReport',
198134
+ // E: 1694681809302,
198135
+ // s: 'LTC-USDT',
198136
+ // S: 'BUY',
198137
+ // o: 'MARKET',
198138
+ // q: 0,
198139
+ // p: 62.29,
198140
+ // x: 'TRADE',
198141
+ // X: 'FILLED',
198142
+ // i: '1702245001712369664',
198143
+ // l: 0.0802,
198144
+ // z: 0.0802,
198145
+ // L: 62.308,
198146
+ // n: -0.0000802,
198147
+ // N: 'LTC',
198148
+ // T: 1694681809256,
198149
+ // t: 38259147,
198150
+ // O: 1694681809248,
198151
+ // Z: 4.9971016,
198152
+ // Y: 4.9971016,
198153
+ // Q: 5,
198154
+ // m: false
198155
+ // }
198156
+ // }
198157
+ // swap
198158
+ // {
198159
+ // "e": "ORDER_TRADE_UPDATE",
198160
+ // "E": 1696843635475,
198161
+ // "o": {
198162
+ // "s": "LTC-USDT",
198163
+ // "c": "",
198164
+ // "i": "1711312357852147712",
198165
+ // "S": "BUY",
198166
+ // "o": "MARKET",
198167
+ // "q": "0.10000000",
198168
+ // "p": "64.35010000",
198169
+ // "ap": "64.36000000",
198170
+ // "x": "TRADE",
198171
+ // "X": "FILLED",
198172
+ // "N": "USDT",
198173
+ // "n": "-0.00321800",
198174
+ // "T": 0,
198175
+ // "wt": "MARK_PRICE",
198176
+ // "ps": "LONG",
198177
+ // "rp": "0.00000000",
198178
+ // "z": "0.10000000"
198179
+ // }
198180
+ // }
198181
+ //
198182
+ const isSpot = ('dataType' in message);
198183
+ const data = this.safeValue2(message, 'data', 'o', {});
198184
+ if (this.orders === undefined) {
198185
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
198186
+ this.orders = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheBySymbolById */ .hl(limit);
198187
+ }
198188
+ const stored = this.orders;
198189
+ const parsedOrder = this.parseOrder(data);
198190
+ stored.append(parsedOrder);
198191
+ const symbol = parsedOrder['symbol'];
198192
+ const spotHash = 'spot:order';
198193
+ const swapHash = 'swap:order';
198194
+ const messageHash = (isSpot) ? spotHash : swapHash;
198195
+ client.resolve(stored, messageHash);
198196
+ client.resolve(stored, messageHash + ':' + symbol);
198197
+ }
198198
+ handleMyTrades(client, message) {
198199
+ //
198200
+ //
198201
+ // {
198202
+ // code: 0,
198203
+ // dataType: 'spot.executionReport',
198204
+ // data: {
198205
+ // e: 'executionReport',
198206
+ // E: 1694681809302,
198207
+ // s: 'LTC-USDT',
198208
+ // S: 'BUY',
198209
+ // o: 'MARKET',
198210
+ // q: 0,
198211
+ // p: 62.29,
198212
+ // x: 'TRADE',
198213
+ // X: 'FILLED',
198214
+ // i: '1702245001712369664',
198215
+ // l: 0.0802,
198216
+ // z: 0.0802,
198217
+ // L: 62.308,
198218
+ // n: -0.0000802,
198219
+ // N: 'LTC',
198220
+ // T: 1694681809256,
198221
+ // t: 38259147,
198222
+ // O: 1694681809248,
198223
+ // Z: 4.9971016,
198224
+ // Y: 4.9971016,
198225
+ // Q: 5,
198226
+ // m: false
198227
+ // }
198228
+ // }
198229
+ //
198230
+ // swap
198231
+ // {
198232
+ // "e": "ORDER_TRADE_UPDATE",
198233
+ // "E": 1696843635475,
198234
+ // "o": {
198235
+ // "s": "LTC-USDT",
198236
+ // "c": "",
198237
+ // "i": "1711312357852147712",
198238
+ // "S": "BUY",
198239
+ // "o": "MARKET",
198240
+ // "q": "0.10000000",
198241
+ // "p": "64.35010000",
198242
+ // "ap": "64.36000000",
198243
+ // "x": "TRADE",
198244
+ // "X": "FILLED",
198245
+ // "N": "USDT",
198246
+ // "n": "-0.00321800",
198247
+ // "T": 0,
198248
+ // "wt": "MARK_PRICE",
198249
+ // "ps": "LONG",
198250
+ // "rp": "0.00000000",
198251
+ // "z": "0.10000000"
198252
+ // }
198253
+ // }
198254
+ //
198255
+ const isSpot = ('dataType' in message);
198256
+ const result = this.safeValue2(message, 'data', 'o', {});
198257
+ let cachedTrades = this.myTrades;
198258
+ if (cachedTrades === undefined) {
198259
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
198260
+ cachedTrades = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheBySymbolById */ .hl(limit);
198261
+ this.myTrades = cachedTrades;
198262
+ }
198263
+ const parsed = this.parseTrade(result);
198264
+ const symbol = parsed['symbol'];
198265
+ const spotHash = 'spot:mytrades';
198266
+ const swapHash = 'swap:mytrades';
198267
+ const messageHash = isSpot ? spotHash : swapHash;
198268
+ cachedTrades.append(parsed);
198269
+ client.resolve(cachedTrades, messageHash);
198270
+ client.resolve(cachedTrades, messageHash + ':' + symbol);
198271
+ }
198272
+ handleBalance(client, message) {
198273
+ // spot
198274
+ // {
198275
+ // "e":"ACCOUNT_UPDATE",
198276
+ // "E":1696242817000,
198277
+ // "T":1696242817142,
198278
+ // "a":{
198279
+ // "B":[
198280
+ // {
198281
+ // "a":"USDT",
198282
+ // "bc":"-1.00000000000000000000",
198283
+ // "cw":"86.59497382000000050000",
198284
+ // "wb":"86.59497382000000050000"
198285
+ // }
198286
+ // ],
198287
+ // "m":"ASSET_TRANSFER"
198288
+ // }
198289
+ // }
198290
+ // swap
198291
+ // {
198292
+ // "e":"ACCOUNT_UPDATE",
198293
+ // "E":1696244249320,
198294
+ // "a":{
198295
+ // "m":"WITHDRAW",
198296
+ // "B":[
198297
+ // {
198298
+ // "a":"USDT",
198299
+ // "wb":"49.81083984",
198300
+ // "cw":"49.81083984",
198301
+ // "bc":"-1.00000000"
198302
+ // }
198303
+ // ],
198304
+ // "P":[
198305
+ // ]
198306
+ // }
198307
+ // }
198308
+ //
198309
+ const a = this.safeValue(message, 'a', {});
198310
+ const data = this.safeValue(a, 'B', []);
198311
+ const timestamp = this.safeInteger2(message, 'T', 'E');
198312
+ const type = ('P' in a) ? 'swap' : 'spot';
198313
+ if (!(type in this.balance)) {
198314
+ this.balance[type] = {};
198315
+ }
198316
+ this.balance[type]['info'] = data;
198317
+ this.balance[type]['timestamp'] = timestamp;
198318
+ this.balance[type]['datetime'] = this.iso8601(timestamp);
198319
+ for (let i = 0; i < data.length; i++) {
198320
+ const balance = data[i];
198321
+ const currencyId = this.safeString(balance, 'a');
198322
+ const code = this.safeCurrencyCode(currencyId);
198323
+ const account = (code in this.balance) ? this.balance[code] : this.account();
198324
+ account['total'] = this.safeString(balance, 'wb');
198325
+ this.balance[type][code] = account;
198326
+ }
198327
+ this.balance[type] = this.safeBalance(this.balance[type]);
198328
+ client.resolve(this.balance[type], type + ':balance');
198329
+ }
198330
+ handleMessage(client, message) {
198331
+ if (!this.handleErrorMessage(client, message)) {
198332
+ return;
198333
+ }
198334
+ // public subscriptions
198335
+ if ((message === 'Ping') || ('ping' in message)) {
198336
+ this.spawn(this.pong, client, message);
198337
+ return;
198338
+ }
198339
+ const dataType = this.safeString(message, 'dataType', '');
198340
+ if (dataType.indexOf('@depth') >= 0) {
198341
+ this.handleOrderBook(client, message);
198342
+ return;
198343
+ }
198344
+ if (dataType.indexOf('@trade') >= 0) {
198345
+ this.handleTrades(client, message);
198346
+ return;
198347
+ }
198348
+ if (dataType.indexOf('@kline') >= 0) {
198349
+ this.handleOHLCV(client, message);
198350
+ return;
198351
+ }
198352
+ if (dataType.indexOf('executionReport') >= 0) {
198353
+ const data = this.safeValue(message, 'data', {});
198354
+ const type = this.safeString(data, 'x');
198355
+ if (type === 'TRADE') {
198356
+ this.handleMyTrades(client, message);
198357
+ }
198358
+ this.handleOrder(client, message);
198359
+ return;
198360
+ }
198361
+ const e = this.safeString(message, 'e');
198362
+ if (e === 'ACCOUNT_UPDATE') {
198363
+ this.handleBalance(client, message);
198364
+ }
198365
+ if (e === 'ORDER_TRADE_UPDATE') {
198366
+ this.handleOrder(client, message);
198367
+ const data = this.safeValue(message, 'o', {});
198368
+ const type = this.safeString(data, 'x');
198369
+ const status = this.safeString(data, 'X');
198370
+ if ((type === 'TRADE') && (status === 'FILLED')) {
198371
+ this.handleMyTrades(client, message);
198372
+ }
198373
+ }
198374
+ }
198375
+ }
198376
+
198377
+
197330
198378
  /***/ }),
197331
198379
 
197332
198380
  /***/ 453:
@@ -274917,39 +275965,39 @@ var __webpack_exports__ = {};
274917
275965
  (() => {
274918
275966
  __webpack_require__.r(__webpack_exports__);
274919
275967
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
274920
- /* harmony export */ "AccountNotEnabled": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.AccountNotEnabled),
274921
- /* harmony export */ "AccountSuspended": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.AccountSuspended),
274922
- /* harmony export */ "AddressPending": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.AddressPending),
274923
- /* harmony export */ "ArgumentsRequired": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.ArgumentsRequired),
274924
- /* harmony export */ "AuthenticationError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.AuthenticationError),
274925
- /* harmony export */ "BadRequest": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.BadRequest),
274926
- /* harmony export */ "BadResponse": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.BadResponse),
274927
- /* harmony export */ "BadSymbol": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.BadSymbol),
274928
- /* harmony export */ "BaseError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.BaseError),
274929
- /* harmony export */ "CancelPending": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.CancelPending),
274930
- /* harmony export */ "DDoSProtection": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.DDoSProtection),
274931
- /* harmony export */ "DuplicateOrderId": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.DuplicateOrderId),
275968
+ /* harmony export */ "AccountNotEnabled": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountNotEnabled),
275969
+ /* harmony export */ "AccountSuspended": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountSuspended),
275970
+ /* harmony export */ "AddressPending": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AddressPending),
275971
+ /* harmony export */ "ArgumentsRequired": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ArgumentsRequired),
275972
+ /* harmony export */ "AuthenticationError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AuthenticationError),
275973
+ /* harmony export */ "BadRequest": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadRequest),
275974
+ /* harmony export */ "BadResponse": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadResponse),
275975
+ /* harmony export */ "BadSymbol": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadSymbol),
275976
+ /* harmony export */ "BaseError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BaseError),
275977
+ /* harmony export */ "CancelPending": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.CancelPending),
275978
+ /* harmony export */ "DDoSProtection": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DDoSProtection),
275979
+ /* harmony export */ "DuplicateOrderId": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DuplicateOrderId),
274932
275980
  /* harmony export */ "Exchange": () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
274933
- /* harmony export */ "ExchangeError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.ExchangeError),
274934
- /* harmony export */ "ExchangeNotAvailable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.ExchangeNotAvailable),
274935
- /* harmony export */ "InsufficientFunds": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.InsufficientFunds),
274936
- /* harmony export */ "InvalidAddress": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.InvalidAddress),
274937
- /* harmony export */ "InvalidNonce": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.InvalidNonce),
274938
- /* harmony export */ "InvalidOrder": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.InvalidOrder),
274939
- /* harmony export */ "MarginModeAlreadySet": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.MarginModeAlreadySet),
274940
- /* harmony export */ "NetworkError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.NetworkError),
274941
- /* harmony export */ "NoChange": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.NoChange),
274942
- /* harmony export */ "NotSupported": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.NotSupported),
274943
- /* harmony export */ "NullResponse": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.NullResponse),
274944
- /* harmony export */ "OnMaintenance": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.OnMaintenance),
274945
- /* harmony export */ "OrderImmediatelyFillable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.OrderImmediatelyFillable),
274946
- /* harmony export */ "OrderNotCached": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.OrderNotCached),
274947
- /* harmony export */ "OrderNotFillable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.OrderNotFillable),
274948
- /* harmony export */ "OrderNotFound": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.OrderNotFound),
274949
- /* harmony export */ "PermissionDenied": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.PermissionDenied),
274950
- /* harmony export */ "Precise": () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_165__.O),
274951
- /* harmony export */ "RateLimitExceeded": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.RateLimitExceeded),
274952
- /* harmony export */ "RequestTimeout": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__.RequestTimeout),
275981
+ /* harmony export */ "ExchangeError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeError),
275982
+ /* harmony export */ "ExchangeNotAvailable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeNotAvailable),
275983
+ /* harmony export */ "InsufficientFunds": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InsufficientFunds),
275984
+ /* harmony export */ "InvalidAddress": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidAddress),
275985
+ /* harmony export */ "InvalidNonce": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidNonce),
275986
+ /* harmony export */ "InvalidOrder": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidOrder),
275987
+ /* harmony export */ "MarginModeAlreadySet": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.MarginModeAlreadySet),
275988
+ /* harmony export */ "NetworkError": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NetworkError),
275989
+ /* harmony export */ "NoChange": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NoChange),
275990
+ /* harmony export */ "NotSupported": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NotSupported),
275991
+ /* harmony export */ "NullResponse": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NullResponse),
275992
+ /* harmony export */ "OnMaintenance": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OnMaintenance),
275993
+ /* harmony export */ "OrderImmediatelyFillable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderImmediatelyFillable),
275994
+ /* harmony export */ "OrderNotCached": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotCached),
275995
+ /* harmony export */ "OrderNotFillable": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFillable),
275996
+ /* harmony export */ "OrderNotFound": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFound),
275997
+ /* harmony export */ "PermissionDenied": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.PermissionDenied),
275998
+ /* harmony export */ "Precise": () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__.O),
275999
+ /* harmony export */ "RateLimitExceeded": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RateLimitExceeded),
276000
+ /* harmony export */ "RequestTimeout": () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RequestTimeout),
274953
276001
  /* harmony export */ "ace": () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
274954
276002
  /* harmony export */ "alpaca": () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
274955
276003
  /* harmony export */ "ascendex": () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
@@ -275006,11 +276054,11 @@ __webpack_require__.r(__webpack_exports__);
275006
276054
  /* harmony export */ "delta": () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_53__.Z),
275007
276055
  /* harmony export */ "deribit": () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_54__.Z),
275008
276056
  /* harmony export */ "digifinex": () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_55__.Z),
275009
- /* harmony export */ "errors": () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__),
276057
+ /* harmony export */ "errors": () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__),
275010
276058
  /* harmony export */ "exchanges": () => (/* binding */ exchanges),
275011
276059
  /* harmony export */ "exmo": () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_56__.Z),
275012
276060
  /* harmony export */ "fmfwio": () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_57__.Z),
275013
- /* harmony export */ "functions": () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_166__),
276061
+ /* harmony export */ "functions": () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__),
275014
276062
  /* harmony export */ "gate": () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_58__.Z),
275015
276063
  /* harmony export */ "gateio": () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_59__.Z),
275016
276064
  /* harmony export */ "gemini": () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_60__.Z),
@@ -275063,9 +276111,9 @@ __webpack_require__.r(__webpack_exports__);
275063
276111
  /* harmony export */ "zonda": () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_105__.Z)
275064
276112
  /* harmony export */ });
275065
276113
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
275066
- /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(2194);
275067
- /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(7100);
275068
- /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(6689);
276114
+ /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(2194);
276115
+ /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(7100);
276116
+ /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__ = __webpack_require__(6689);
275069
276117
  /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
275070
276118
  /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
275071
276119
  /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
@@ -275178,58 +276226,59 @@ __webpack_require__.r(__webpack_exports__);
275178
276226
  /* harmony import */ var _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(5078);
275179
276227
  /* harmony import */ var _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(1326);
275180
276228
  /* harmony import */ var _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(1230);
275181
- /* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(453);
275182
- /* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(9772);
275183
- /* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(588);
275184
- /* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(1885);
275185
- /* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(7504);
275186
- /* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(2302);
275187
- /* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(2191);
275188
- /* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(1297);
275189
- /* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(3005);
275190
- /* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(3623);
275191
- /* harmony import */ var _src_pro_bittrex_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(2883);
275192
- /* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(6977);
275193
- /* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(2519);
275194
- /* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(5030);
275195
- /* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(5272);
275196
- /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(3414);
275197
- /* harmony import */ var _src_pro_coinbaseprime_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(3848);
275198
- /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(8368);
275199
- /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(204);
275200
- /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(6820);
275201
- /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(2952);
275202
- /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(1788);
275203
- /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(9004);
275204
- /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(8335);
275205
- /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(1465);
275206
- /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(9488);
275207
- /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(5189);
275208
- /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(8559);
275209
- /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8384);
275210
- /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(9021);
275211
- /* harmony import */ var _src_pro_huobipro_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(4625);
275212
- /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(3484);
275213
- /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(1311);
275214
- /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(736);
275215
- /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(449);
275216
- /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(2387);
275217
- /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(7181);
275218
- /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(627);
275219
- /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(6484);
275220
- /* harmony import */ var _src_pro_mexc3_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(5351);
275221
- /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(8080);
275222
- /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(7105);
275223
- /* harmony import */ var _src_pro_okex_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(1530);
275224
- /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(2214);
275225
- /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(4360);
275226
- /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(7924);
275227
- /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(3541);
275228
- /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(9782);
275229
- /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(7614);
275230
- /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(4828);
275231
- /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(5630);
275232
- /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(3910);
276229
+ /* harmony import */ var _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(6955);
276230
+ /* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(453);
276231
+ /* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(9772);
276232
+ /* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(588);
276233
+ /* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(1885);
276234
+ /* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(7504);
276235
+ /* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(2302);
276236
+ /* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(2191);
276237
+ /* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(1297);
276238
+ /* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(3005);
276239
+ /* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(3623);
276240
+ /* harmony import */ var _src_pro_bittrex_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(2883);
276241
+ /* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(6977);
276242
+ /* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(2519);
276243
+ /* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(5030);
276244
+ /* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(5272);
276245
+ /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(3414);
276246
+ /* harmony import */ var _src_pro_coinbaseprime_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(3848);
276247
+ /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(8368);
276248
+ /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(204);
276249
+ /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(6820);
276250
+ /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(2952);
276251
+ /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(1788);
276252
+ /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(9004);
276253
+ /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(8335);
276254
+ /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(1465);
276255
+ /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(9488);
276256
+ /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(5189);
276257
+ /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8559);
276258
+ /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(8384);
276259
+ /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(9021);
276260
+ /* harmony import */ var _src_pro_huobipro_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(4625);
276261
+ /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(3484);
276262
+ /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(1311);
276263
+ /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(736);
276264
+ /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(449);
276265
+ /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(2387);
276266
+ /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(7181);
276267
+ /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(627);
276268
+ /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(6484);
276269
+ /* harmony import */ var _src_pro_mexc3_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(5351);
276270
+ /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(8080);
276271
+ /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(7105);
276272
+ /* harmony import */ var _src_pro_okex_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(1530);
276273
+ /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(2214);
276274
+ /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(4360);
276275
+ /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(7924);
276276
+ /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(3541);
276277
+ /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(9782);
276278
+ /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(7614);
276279
+ /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(4828);
276280
+ /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(5630);
276281
+ /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(3910);
275233
276282
  /*
275234
276283
 
275235
276284
  MIT License
@@ -275264,7 +276313,7 @@ SOFTWARE.
275264
276313
 
275265
276314
  //-----------------------------------------------------------------------------
275266
276315
  // this is updated by vss.js when building
275267
- const version = '4.1.8';
276316
+ const version = '4.1.9';
275268
276317
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange.ccxtVersion */ .e.ccxtVersion = version;
275269
276318
  //-----------------------------------------------------------------------------
275270
276319
 
@@ -275430,6 +276479,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange.ccxtVersion */ .e
275430
276479
 
275431
276480
 
275432
276481
 
276482
+
275433
276483
 
275434
276484
 
275435
276485
  const exchanges = {
@@ -275547,58 +276597,59 @@ const pro = {
275547
276597
  'binancecoinm': _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_110__/* ["default"] */ .Z,
275548
276598
  'binanceus': _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_111__/* ["default"] */ .Z,
275549
276599
  'binanceusdm': _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_112__/* ["default"] */ .Z,
275550
- 'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
275551
- 'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
275552
- 'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
275553
- 'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
275554
- 'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
275555
- 'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
275556
- 'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
275557
- 'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
275558
- 'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
275559
- 'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
275560
- 'bittrex': _src_pro_bittrex_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
275561
- 'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
275562
- 'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
275563
- 'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
275564
- 'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
275565
- 'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
275566
- 'coinbaseprime': _src_pro_coinbaseprime_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
275567
- 'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
275568
- 'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
275569
- 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
275570
- 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
275571
- 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
275572
- 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
275573
- 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
275574
- 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
275575
- 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
275576
- 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
275577
- 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
275578
- 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
275579
- 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
275580
- 'huobipro': _src_pro_huobipro_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
275581
- 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
275582
- 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
275583
- 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
275584
- 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
275585
- 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
275586
- 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
275587
- 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
275588
- 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
275589
- 'mexc3': _src_pro_mexc3_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
275590
- 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
275591
- 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
275592
- 'okex': _src_pro_okex_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
275593
- 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
275594
- 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
275595
- 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
275596
- 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
275597
- 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
275598
- 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
275599
- 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
275600
- 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_163__/* ["default"] */ .Z,
275601
- 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_164__/* ["default"] */ .Z,
276600
+ 'bingx': _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
276601
+ 'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
276602
+ 'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
276603
+ 'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
276604
+ 'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
276605
+ 'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
276606
+ 'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
276607
+ 'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
276608
+ 'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
276609
+ 'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
276610
+ 'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
276611
+ 'bittrex': _src_pro_bittrex_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
276612
+ 'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
276613
+ 'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
276614
+ 'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
276615
+ 'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
276616
+ 'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
276617
+ 'coinbaseprime': _src_pro_coinbaseprime_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
276618
+ 'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
276619
+ 'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
276620
+ 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
276621
+ 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
276622
+ 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
276623
+ 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
276624
+ 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
276625
+ 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
276626
+ 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
276627
+ 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
276628
+ 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
276629
+ 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
276630
+ 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
276631
+ 'huobipro': _src_pro_huobipro_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
276632
+ 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
276633
+ 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
276634
+ 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
276635
+ 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
276636
+ 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
276637
+ 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
276638
+ 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
276639
+ 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
276640
+ 'mexc3': _src_pro_mexc3_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
276641
+ 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
276642
+ 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
276643
+ 'okex': _src_pro_okex_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
276644
+ 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
276645
+ 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
276646
+ 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
276647
+ 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
276648
+ 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
276649
+ 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
276650
+ 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__/* ["default"] */ .Z,
276651
+ 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__/* ["default"] */ .Z,
276652
+ 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__/* ["default"] */ .Z,
275602
276653
  };
275603
276654
  for (const exchange in pro) {
275604
276655
  // const ccxtExchange = exchanges[exchange]
@@ -275611,7 +276662,7 @@ for (const exchange in pro) {
275611
276662
  pro.exchanges = Object.keys(pro);
275612
276663
  pro['Exchange'] = _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e; // now the same for rest and ts
275613
276664
  //-----------------------------------------------------------------------------
275614
- const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_165__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_166__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_167__);
276665
+ const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__);
275615
276666
 
275616
276667
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ccxt);
275617
276668
  //-----------------------------------------------------------------------------