ccxt 4.2.15 → 4.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.js +647 -168
  3. package/dist/ccxt.browser.min.js +2 -2
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/js/ccxt.js +3 -1
  6. package/dist/cjs/js/src/ascendex.js +11 -6
  7. package/dist/cjs/js/src/base/Exchange.js +12 -12
  8. package/dist/cjs/js/src/binance.js +1 -0
  9. package/dist/cjs/js/src/bingx.js +37 -3
  10. package/dist/cjs/js/src/bitmex.js +3 -6
  11. package/dist/cjs/js/src/coinlist.js +10 -2
  12. package/dist/cjs/js/src/coinone.js +1 -1
  13. package/dist/cjs/js/src/coinsph.js +2 -2
  14. package/dist/cjs/js/src/phemex.js +28 -25
  15. package/dist/cjs/js/src/pro/binance.js +2 -2
  16. package/dist/cjs/js/src/pro/coinone.js +411 -0
  17. package/dist/cjs/js/src/pro/hitbtc.js +5 -4
  18. package/dist/cjs/js/src/pro/krakenfutures.js +7 -1
  19. package/dist/cjs/js/src/pro/kucoin.js +3 -1
  20. package/dist/cjs/js/src/pro/poloniex.js +2 -2
  21. package/js/ccxt.d.ts +4 -1
  22. package/js/ccxt.js +3 -1
  23. package/js/src/abstract/binance.d.ts +1 -0
  24. package/js/src/abstract/binancecoinm.d.ts +1 -0
  25. package/js/src/abstract/binanceus.d.ts +1 -0
  26. package/js/src/abstract/binanceusdm.d.ts +1 -0
  27. package/js/src/abstract/coinlist.d.ts +8 -0
  28. package/js/src/ascendex.js +11 -6
  29. package/js/src/base/Exchange.js +12 -12
  30. package/js/src/binance.js +1 -0
  31. package/js/src/bingx.d.ts +1 -0
  32. package/js/src/bingx.js +38 -4
  33. package/js/src/bitmex.js +3 -6
  34. package/js/src/coinlist.js +10 -2
  35. package/js/src/coinone.js +1 -1
  36. package/js/src/coinsph.js +2 -2
  37. package/js/src/phemex.js +28 -25
  38. package/js/src/pro/binance.js +2 -2
  39. package/js/src/pro/coinone.d.ts +21 -0
  40. package/js/src/pro/coinone.js +412 -0
  41. package/js/src/pro/hitbtc.js +5 -4
  42. package/js/src/pro/krakenfutures.js +7 -1
  43. package/js/src/pro/kucoin.js +3 -1
  44. package/js/src/pro/poloniex.js +2 -2
  45. package/package.json +1 -1
  46. package/skip-tests.json +1 -0
@@ -4429,12 +4429,14 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
4429
4429
  */
4430
4430
  await this.loadMarkets();
4431
4431
  await this.loadAccounts();
4432
- let query = undefined;
4433
4432
  let marketType = undefined;
4434
- [marketType, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
4433
+ let marginMode = undefined;
4434
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
4435
+ [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
4435
4436
  const isMargin = this.safeValue(params, 'margin', false);
4436
- marketType = isMargin ? 'margin' : marketType;
4437
- query = this.omit(query, 'margin');
4437
+ const isCross = marginMode === 'cross';
4438
+ marketType = (isMargin || isCross) ? 'margin' : marketType;
4439
+ params = this.omit(params, 'margin');
4438
4440
  const accountsByType = this.safeValue(this.options, 'accountsByType', {});
4439
4441
  const accountCategory = this.safeString(accountsByType, marketType, 'cash');
4440
4442
  const account = this.safeValue(this.accounts, 0, {});
@@ -4442,15 +4444,18 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
4442
4444
  const request = {
4443
4445
  'account-group': accountGroup,
4444
4446
  };
4447
+ if ((marginMode === 'isolated') && (marketType !== 'swap')) {
4448
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' does not supported isolated margin trading');
4449
+ }
4445
4450
  if ((accountCategory === 'cash') || (accountCategory === 'margin')) {
4446
4451
  request['account-category'] = accountCategory;
4447
4452
  }
4448
4453
  let response = undefined;
4449
4454
  if ((marketType === 'spot') || (marketType === 'margin')) {
4450
- response = await this.v1PrivateAccountCategoryGetBalance(this.extend(request, query));
4455
+ response = await this.v1PrivateAccountCategoryGetBalance(this.extend(request, params));
4451
4456
  }
4452
4457
  else if (marketType === 'swap') {
4453
- response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, query));
4458
+ response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
4454
4459
  }
4455
4460
  else {
4456
4461
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' fetchBalance() is not currently supported for ' + marketType + ' markets');
@@ -8441,11 +8446,11 @@ class Exchange {
8441
8446
  let httpsProxy = undefined;
8442
8447
  let socksProxy = undefined;
8443
8448
  // httpProxy
8444
- if (this.httpProxy !== undefined) {
8449
+ if (this.valueIsDefined(this.httpProxy)) {
8445
8450
  usedProxies.push('httpProxy');
8446
8451
  httpProxy = this.httpProxy;
8447
8452
  }
8448
- if (this.http_proxy !== undefined) {
8453
+ if (this.valueIsDefined(this.http_proxy)) {
8449
8454
  usedProxies.push('http_proxy');
8450
8455
  httpProxy = this.http_proxy;
8451
8456
  }
@@ -8458,11 +8463,11 @@ class Exchange {
8458
8463
  httpProxy = this.http_proxy_callback(url, method, headers, body);
8459
8464
  }
8460
8465
  // httpsProxy
8461
- if (this.httpsProxy !== undefined) {
8466
+ if (this.valueIsDefined(this.httpsProxy)) {
8462
8467
  usedProxies.push('httpsProxy');
8463
8468
  httpsProxy = this.httpsProxy;
8464
8469
  }
8465
- if (this.https_proxy !== undefined) {
8470
+ if (this.valueIsDefined(this.https_proxy)) {
8466
8471
  usedProxies.push('https_proxy');
8467
8472
  httpsProxy = this.https_proxy;
8468
8473
  }
@@ -8475,11 +8480,11 @@ class Exchange {
8475
8480
  httpsProxy = this.https_proxy_callback(url, method, headers, body);
8476
8481
  }
8477
8482
  // socksProxy
8478
- if (this.socksProxy !== undefined) {
8483
+ if (this.valueIsDefined(this.socksProxy)) {
8479
8484
  usedProxies.push('socksProxy');
8480
8485
  socksProxy = this.socksProxy;
8481
8486
  }
8482
- if (this.socks_proxy !== undefined) {
8487
+ if (this.valueIsDefined(this.socks_proxy)) {
8483
8488
  usedProxies.push('socks_proxy');
8484
8489
  socksProxy = this.socks_proxy;
8485
8490
  }
@@ -8505,29 +8510,29 @@ class Exchange {
8505
8510
  let wssProxy = undefined;
8506
8511
  let wsSocksProxy = undefined;
8507
8512
  // ws proxy
8508
- if (this.wsProxy !== undefined) {
8513
+ if (this.valueIsDefined(this.wsProxy)) {
8509
8514
  usedProxies.push('wsProxy');
8510
8515
  wsProxy = this.wsProxy;
8511
8516
  }
8512
- if (this.ws_proxy !== undefined) {
8517
+ if (this.valueIsDefined(this.ws_proxy)) {
8513
8518
  usedProxies.push('ws_proxy');
8514
8519
  wsProxy = this.ws_proxy;
8515
8520
  }
8516
8521
  // wss proxy
8517
- if (this.wssProxy !== undefined) {
8522
+ if (this.valueIsDefined(this.wssProxy)) {
8518
8523
  usedProxies.push('wssProxy');
8519
8524
  wssProxy = this.wssProxy;
8520
8525
  }
8521
- if (this.wss_proxy !== undefined) {
8526
+ if (this.valueIsDefined(this.wss_proxy)) {
8522
8527
  usedProxies.push('wss_proxy');
8523
8528
  wssProxy = this.wss_proxy;
8524
8529
  }
8525
8530
  // ws socks proxy
8526
- if (this.wsSocksProxy !== undefined) {
8531
+ if (this.valueIsDefined(this.wsSocksProxy)) {
8527
8532
  usedProxies.push('wsSocksProxy');
8528
8533
  wsSocksProxy = this.wsSocksProxy;
8529
8534
  }
8530
- if (this.ws_socks_proxy !== undefined) {
8535
+ if (this.valueIsDefined(this.ws_socks_proxy)) {
8531
8536
  usedProxies.push('ws_socks_proxy');
8532
8537
  wsSocksProxy = this.ws_socks_proxy;
8533
8538
  }
@@ -17924,6 +17929,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17924
17929
  'margin/allPairs': 0.1,
17925
17930
  'margin/priceIndex': 1,
17926
17931
  // these endpoints require this.apiKey + this.secret
17932
+ 'spot/delist-schedule': 0.1,
17927
17933
  'asset/assetDividend': 1,
17928
17934
  'asset/dribblet': 0.1,
17929
17935
  'asset/transfer': 0.1,
@@ -27792,7 +27798,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27792
27798
  'has': {
27793
27799
  'CORS': undefined,
27794
27800
  'spot': true,
27795
- 'margin': true,
27801
+ 'margin': false,
27796
27802
  'swap': true,
27797
27803
  'future': false,
27798
27804
  'option': false,
@@ -27855,6 +27861,9 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27855
27861
  'account': 'https://open-api.{hostname}/openApi',
27856
27862
  'copyTrading': 'https://open-api.{hostname}/openApi',
27857
27863
  },
27864
+ 'test': {
27865
+ 'swap': 'https://open-api-vst.{hostname}/openApi', // only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
27866
+ },
27858
27867
  'www': 'https://bingx.com/',
27859
27868
  'doc': 'https://bingx-api.github.io/docs/',
27860
27869
  'referral': 'https://bingx.com/invite/OHETOM',
@@ -28188,6 +28197,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28188
28197
  if (!this.checkRequiredCredentials(false)) {
28189
28198
  return undefined;
28190
28199
  }
28200
+ const isSandbox = this.safeValue(this.options, 'sandboxMode', false);
28201
+ if (isSandbox) {
28202
+ return undefined;
28203
+ }
28191
28204
  const response = await this.walletsV1PrivateGetCapitalConfigGetall(params);
28192
28205
  //
28193
28206
  // {
@@ -28427,7 +28440,11 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28427
28440
  * @param {object} [params] extra parameters specific to the exchange API endpoint
28428
28441
  * @returns {object[]} an array of objects representing market data
28429
28442
  */
28430
- const requests = [this.fetchSpotMarkets(params), this.fetchSwapMarkets(params)];
28443
+ const requests = [this.fetchSwapMarkets(params)];
28444
+ const isSandbox = this.safeValue(this.options, 'sandboxMode', false);
28445
+ if (!isSandbox) {
28446
+ requests.push(this.fetchSpotMarkets(params)); // sandbox is swap only
28447
+ }
28431
28448
  const promises = await Promise.all(requests);
28432
28449
  const spotMarkets = this.safeValue(promises, 0, []);
28433
28450
  const swapMarkets = this.safeValue(promises, 1, []);
@@ -30858,6 +30875,21 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30858
30875
  // "txId": "0xb5ef8c13b968a406cc62a93a8bd80f9e9a906ef1b3fcf20a2e48573c17659268"
30859
30876
  // }
30860
30877
  //
30878
+ // withdraw
30879
+ //
30880
+ // {
30881
+ // "code":0,
30882
+ // "timestamp":1705274263621,
30883
+ // "data":{
30884
+ // "id":"1264246141278773252"
30885
+ // }
30886
+ // }
30887
+ //
30888
+ // parse withdraw-type output first...
30889
+ //
30890
+ const data = this.safeValue(transaction, 'data');
30891
+ const dataId = (data === undefined) ? undefined : this.safeString(data, 'id');
30892
+ const id = this.safeString(transaction, 'id', dataId);
30861
30893
  const address = this.safeString(transaction, 'address');
30862
30894
  const tag = this.safeString(transaction, 'addressTag');
30863
30895
  let timestamp = this.safeInteger(transaction, 'insertTime');
@@ -30878,7 +30910,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30878
30910
  const type = (rawType === '0') ? 'deposit' : 'withdrawal';
30879
30911
  return {
30880
30912
  'info': transaction,
30881
- 'id': this.safeString(transaction, 'id'),
30913
+ 'id': id,
30882
30914
  'txid': this.safeString(transaction, 'txId'),
30883
30915
  'type': type,
30884
30916
  'currency': code,
@@ -31512,6 +31544,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
31512
31544
  const type = section[0];
31513
31545
  const version = section[1];
31514
31546
  const access = section[2];
31547
+ const isSandbox = this.safeValue(this.options, 'sandboxMode', false);
31548
+ if (isSandbox && (type !== 'swap')) {
31549
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' does not have a testnet/sandbox URL for ' + type + ' endpoints');
31550
+ }
31515
31551
  let url = this.implodeHostname(this.urls['api'][type]);
31516
31552
  if (type === 'spot' && version === 'v3') {
31517
31553
  url += '/api';
@@ -31554,6 +31590,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
31554
31590
  nonce() {
31555
31591
  return this.milliseconds();
31556
31592
  }
31593
+ setSandboxMode(enable) {
31594
+ super.setSandboxMode(enable);
31595
+ this.options['sandboxMode'] = enable;
31596
+ }
31557
31597
  handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
31558
31598
  if (response === undefined) {
31559
31599
  return undefined; // fallback to default error handler
@@ -56768,8 +56808,8 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
56768
56808
  if (fetchOHLCVOpenTimestamp) {
56769
56809
  timestamp = this.sum(timestamp, duration);
56770
56810
  }
56771
- const ymdhms = this.ymdhms(timestamp);
56772
- request['startTime'] = ymdhms; // starting date filter for results
56811
+ const startTime = this.iso8601(timestamp);
56812
+ request['startTime'] = startTime; // starting date filter for results
56773
56813
  }
56774
56814
  else {
56775
56815
  request['reverse'] = true;
@@ -57879,12 +57919,9 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
57879
57919
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' fetchDepositAddress requires params["network"]');
57880
57920
  }
57881
57921
  const currency = this.currency(code);
57882
- let currencyId = currency['id'];
57883
- const idLength = currencyId.length;
57884
- currencyId = currencyId.slice(0, idLength - 1) + currencyId.slice(idLength - 1, idLength).toLowerCase(); // make the last letter lowercase
57885
57922
  params = this.omit(params, 'network');
57886
57923
  const request = {
57887
- 'currency': currencyId,
57924
+ 'currency': currency['id'],
57888
57925
  'network': this.networkCodeToId(networkCode, currency['code']),
57889
57926
  };
57890
57927
  const response = await this.privateGetUserDepositAddress(this.extend(request, params));
@@ -99858,6 +99895,9 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99858
99895
  'v1/symbols/{symbol}/auctions/{auction_code}': 1,
99859
99896
  'v1/time': 1,
99860
99897
  'v1/assets': 1,
99898
+ 'v1/leaderboard': 1,
99899
+ 'v1/affiliate/{competition_code}': 1,
99900
+ 'v1/competition/{competition_id}': 1,
99861
99901
  },
99862
99902
  },
99863
99903
  'private': {
@@ -99865,6 +99905,7 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99865
99905
  'v1/fees': 1,
99866
99906
  'v1/accounts': 1,
99867
99907
  'v1/accounts/{trader_id}': 1,
99908
+ 'v1/accounts/{trader_id}/alias': 1,
99868
99909
  'v1/accounts/{trader_id}/ledger': 1,
99869
99910
  'v1/accounts/{trader_id}/wallets': 1,
99870
99911
  'v1/accounts/{trader_id}/wallet-ledger': 1,
@@ -99877,7 +99918,9 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99877
99918
  'v1/balances': 1,
99878
99919
  'v1/transfers': 1,
99879
99920
  'v1/user': 1,
99880
- 'v1/credits': 1, // not unified
99921
+ 'v1/credits': 1,
99922
+ 'v1/positions': 1,
99923
+ 'v1/accounts/{trader_id}/competitions': 1,
99881
99924
  },
99882
99925
  'post': {
99883
99926
  'v1/keys': 1,
@@ -99888,7 +99931,9 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99888
99931
  'v1/transfers/from-wallet': 1,
99889
99932
  'v1/transfers/internal-transfer': 1,
99890
99933
  'v1/transfers/withdrawal-request': 1,
99891
- 'v1/orders/bulk': 1, // not unified
99934
+ 'v1/orders/bulk': 1,
99935
+ 'v1/accounts/{trader_id}/competitions': 1,
99936
+ 'v1/accounts/{trader_id}/create-competition': 1,
99892
99937
  },
99893
99938
  'patch': {
99894
99939
  'v1/orders/{order_id}': 1,
@@ -103124,7 +103169,7 @@ class coinone extends _abstract_coinone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
103124
103169
  'setLeverage': false,
103125
103170
  'setMarginMode': false,
103126
103171
  'setPositionMode': false,
103127
- 'ws': false,
103172
+ 'ws': true,
103128
103173
  },
103129
103174
  'urls': {
103130
103175
  'logo': 'https://user-images.githubusercontent.com/1294454/38003300-adc12fba-323f-11e8-8525-725f53c4a659.jpg',
@@ -105239,10 +105284,10 @@ class coinsph extends _abstract_coinsph_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
105239
105284
  'currency': this.safeCurrencyCode(feeCurrencyId),
105240
105285
  };
105241
105286
  }
105242
- const isBuyer = this.safeString2(trade, 'isBuyer', 'isBuyerMaker', undefined);
105287
+ const isBuyer = this.safeValue2(trade, 'isBuyer', 'isBuyerMaker', undefined);
105243
105288
  let side = undefined;
105244
105289
  if (isBuyer !== undefined) {
105245
- side = (isBuyer === 'true') ? 'buy' : 'sell';
105290
+ side = (isBuyer === true) ? 'buy' : 'sell';
105246
105291
  }
105247
105292
  const isMaker = this.safeString2(trade, 'isMaker', undefined);
105248
105293
  let takerOrMaker = undefined;
@@ -202601,12 +202646,14 @@ class phemex extends _abstract_phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
202601
202646
  * @description fetch all unfilled currently open orders
202602
202647
  * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#queryopenorder
202603
202648
  * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Contract-API-en.md
202649
+ * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Spot-API-en.md#spotListAllOpenOrder
202604
202650
  * @param {string} symbol unified market symbol
202605
202651
  * @param {int} [since] the earliest time in ms to fetch open orders for
202606
202652
  * @param {int} [limit] the maximum number of open order structures to retrieve
202607
202653
  * @param {object} [params] extra parameters specific to the exchange API endpoint
202608
202654
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
202609
202655
  */
202656
+ await this.loadMarkets();
202610
202657
  if (symbol === undefined) {
202611
202658
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
202612
202659
  }
@@ -202648,20 +202695,25 @@ class phemex extends _abstract_phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
202648
202695
  * @name phemex#fetchClosedOrders
202649
202696
  * @description fetches information on multiple closed orders made by the user
202650
202697
  * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#queryorder
202698
+ * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Contract-API-en.md#queryorder
202699
+ * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedgedd-Perpetual-API.md#query-closed-orders-by-symbol
202700
+ * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Spot-API-en.md#spotDataOrdersByIds
202651
202701
  * @param {string} symbol unified market symbol of the market orders were made in
202652
202702
  * @param {int} [since] the earliest time in ms to fetch orders for
202653
202703
  * @param {int} [limit] the maximum number of order structures to retrieve
202654
202704
  * @param {object} [params] extra parameters specific to the exchange API endpoint
202705
+ * @param {string} [params.settle] the settlement currency to fetch orders for
202655
202706
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
202656
202707
  */
202657
- if (symbol === undefined) {
202658
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchClosedOrders() requires a symbol argument');
202659
- }
202660
202708
  await this.loadMarkets();
202661
- const market = this.market(symbol);
202662
- const request = {
202663
- 'symbol': market['id'],
202664
- };
202709
+ let market = undefined;
202710
+ if (symbol !== undefined) {
202711
+ market = this.market(symbol);
202712
+ }
202713
+ const request = {};
202714
+ if (market !== undefined) {
202715
+ request['symbol'] = market['id'];
202716
+ }
202665
202717
  if (since !== undefined) {
202666
202718
  request['start'] = since;
202667
202719
  }
@@ -202669,8 +202721,8 @@ class phemex extends _abstract_phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
202669
202721
  request['limit'] = limit;
202670
202722
  }
202671
202723
  let response = undefined;
202672
- if (market['settle'] === 'USDT') {
202673
- request['currency'] = market['settle'];
202724
+ if ((symbol === undefined) || (this.safeString(market, 'settle') === 'USDT')) {
202725
+ request['currency'] = this.safeString(params, 'settle', 'USDT');
202674
202726
  response = await this.privateGetExchangeOrderV2OrderList(this.extend(request, params));
202675
202727
  }
202676
202728
  else if (market['swap']) {
@@ -202731,23 +202783,25 @@ class phemex extends _abstract_phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
202731
202783
  * @description fetch all trades made by the user
202732
202784
  * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Contract-API-en.md#query-user-trade
202733
202785
  * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#query-user-trade
202786
+ * @see https://github.com/phemex/phemex-api-docs/blob/master/Public-Spot-API-en.md#spotDataTradesHist
202734
202787
  * @param {string} symbol unified market symbol
202735
202788
  * @param {int} [since] the earliest time in ms to fetch trades for
202736
202789
  * @param {int} [limit] the maximum number of trades structures to retrieve
202737
202790
  * @param {object} [params] extra parameters specific to the exchange API endpoint
202738
202791
  * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
202739
202792
  */
202740
- if (symbol === undefined) {
202741
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
202742
- }
202743
202793
  await this.loadMarkets();
202744
- const market = this.market(symbol);
202794
+ let market = undefined;
202795
+ if (symbol !== undefined) {
202796
+ market = this.market(symbol);
202797
+ }
202745
202798
  const request = {};
202746
202799
  if (limit !== undefined) {
202747
202800
  limit = Math.min(200, limit);
202748
202801
  request['limit'] = limit;
202749
202802
  }
202750
- if (market['settle'] === 'USDT') {
202803
+ const isUSDTSettled = (symbol === undefined) || (this.safeString(market, 'settle') === 'USDT');
202804
+ if (isUSDTSettled) {
202751
202805
  request['currency'] = 'USDT';
202752
202806
  request['offset'] = 0;
202753
202807
  if (limit === undefined) {
@@ -202760,18 +202814,12 @@ class phemex extends _abstract_phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
202760
202814
  if (since !== undefined) {
202761
202815
  request['start'] = since;
202762
202816
  }
202763
- if (market['swap'] && (limit !== undefined)) {
202764
- request['limit'] = limit;
202765
- }
202766
- const isUSDTSettled = market['settle'] === 'USDT';
202767
202817
  let response = undefined;
202768
- if (market['swap']) {
202769
- if (isUSDTSettled) {
202770
- response = await this.privateGetExchangeOrderV2TradingList(this.extend(request, params));
202771
- }
202772
- else {
202773
- response = await this.privateGetExchangeOrderTrade(this.extend(request, params));
202774
- }
202818
+ if (isUSDTSettled) {
202819
+ response = await this.privateGetExchangeOrderV2TradingList(this.extend(request, params));
202820
+ }
202821
+ else if (market['swap']) {
202822
+ response = await this.privateGetExchangeOrderTrade(this.extend(request, params));
202775
202823
  }
202776
202824
  else {
202777
202825
  response = await this.privateGetExchangeSpotOrderTrades(this.extend(request, params));
@@ -211338,7 +211386,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
211338
211386
  const isSpot = ((client.url.indexOf('/stream') > -1) || (client.url.indexOf('/testnet.binance') > -1));
211339
211387
  const marketType = (isSpot) ? 'spot' : 'contract';
211340
211388
  let rawTickers = [];
211341
- const newTickers = [];
211389
+ const newTickers = {};
211342
211390
  if (Array.isArray(message)) {
211343
211391
  rawTickers = message;
211344
211392
  }
@@ -211350,7 +211398,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
211350
211398
  const result = this.parseWsTicker(ticker, marketType);
211351
211399
  const symbol = result['symbol'];
211352
211400
  this.tickers[symbol] = result;
211353
- newTickers.push(result);
211401
+ newTickers[symbol] = result;
211354
211402
  }
211355
211403
  const messageHashes = this.findMessageHashes(client, 'tickers::');
211356
211404
  for (let i = 0; i < messageHashes.length; i++) {
@@ -231088,6 +231136,425 @@ class coinex extends _coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
231088
231136
  }
231089
231137
 
231090
231138
 
231139
+ /***/ }),
231140
+
231141
+ /***/ 5208:
231142
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
231143
+
231144
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
231145
+ /* harmony export */ Z: () => (/* binding */ coinone)
231146
+ /* harmony export */ });
231147
+ /* harmony import */ var _coinone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7811);
231148
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
231149
+ /* harmony import */ var _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3020);
231150
+ // ---------------------------------------------------------------------------
231151
+
231152
+
231153
+
231154
+ // ---------------------------------------------------------------------------
231155
+ class coinone extends _coinone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
231156
+ describe() {
231157
+ return this.deepExtend(super.describe(), {
231158
+ 'has': {
231159
+ 'ws': true,
231160
+ 'watchOrderBook': true,
231161
+ 'watchOrders': false,
231162
+ 'watchTrades': true,
231163
+ 'watchOHLCV': false,
231164
+ 'watchTicker': true,
231165
+ 'watchTickers': false,
231166
+ },
231167
+ 'urls': {
231168
+ 'api': {
231169
+ 'ws': 'wss://stream.coinone.co.kr',
231170
+ },
231171
+ },
231172
+ 'options': {
231173
+ 'expiresIn': '',
231174
+ 'userId': '',
231175
+ 'wsSessionToken': '',
231176
+ 'watchOrderBook': {
231177
+ 'snapshotDelay': 6,
231178
+ 'snapshotMaxRetries': 3,
231179
+ },
231180
+ 'tradesLimit': 1000,
231181
+ 'OHLCVLimit': 1000,
231182
+ },
231183
+ 'exceptions': {
231184
+ 'exact': {
231185
+ '4009': _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.AuthenticationError,
231186
+ },
231187
+ },
231188
+ 'streaming': {
231189
+ 'ping': this.ping,
231190
+ 'keepAlive': 20000,
231191
+ },
231192
+ });
231193
+ }
231194
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
231195
+ /**
231196
+ * @method
231197
+ * @name coinone#watchOrderBook
231198
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
231199
+ * @see https://docs.coinone.co.kr/reference/public-websocket-orderbook
231200
+ * @param {string} symbol unified symbol of the market to fetch the order book for
231201
+ * @param {int} [limit] the maximum amount of order book entries to return
231202
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
231203
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
231204
+ */
231205
+ await this.loadMarkets();
231206
+ const market = this.market(symbol);
231207
+ const messageHash = 'orderbook:' + market['symbol'];
231208
+ const url = this.urls['api']['ws'];
231209
+ const request = {
231210
+ 'request_type': 'SUBSCRIBE',
231211
+ 'channel': 'ORDERBOOK',
231212
+ 'topic': {
231213
+ 'quote_currency': market['quote'],
231214
+ 'target_currency': market['base'],
231215
+ },
231216
+ };
231217
+ const message = this.extend(request, params);
231218
+ const orderbook = await this.watch(url, messageHash, message, messageHash);
231219
+ return orderbook.limit();
231220
+ }
231221
+ handleOrderBook(client, message) {
231222
+ //
231223
+ // {
231224
+ // "response_type": "DATA",
231225
+ // "channel": "ORDERBOOK",
231226
+ // "data": {
231227
+ // "quote_currency": "KRW",
231228
+ // "target_currency": "BTC",
231229
+ // "timestamp": 1705288918649,
231230
+ // "id": "1705288918649001",
231231
+ // "asks": [
231232
+ // {
231233
+ // "price": "58412000",
231234
+ // "qty": "0.59919807"
231235
+ // }
231236
+ // ],
231237
+ // "bids": [
231238
+ // {
231239
+ // "price": "58292000",
231240
+ // "qty": "0.1045"
231241
+ // }
231242
+ // ]
231243
+ // }
231244
+ // }
231245
+ //
231246
+ const data = this.safeValue(message, 'data', {});
231247
+ const baseId = this.safeStringUpper(data, 'target_currency');
231248
+ const quoteId = this.safeStringUpper(data, 'quote_currency');
231249
+ const base = this.safeCurrencyCode(baseId);
231250
+ const quote = this.safeCurrencyCode(quoteId);
231251
+ const symbol = this.symbol(base + '/' + quote);
231252
+ const timestamp = this.safeInteger(data, 'timestamp');
231253
+ let orderbook = this.safeValue(this.orderbooks, symbol);
231254
+ if (orderbook === undefined) {
231255
+ orderbook = this.orderBook();
231256
+ }
231257
+ else {
231258
+ orderbook.reset();
231259
+ }
231260
+ orderbook['symbol'] = symbol;
231261
+ const asks = this.safeValue(data, 'asks', []);
231262
+ const bids = this.safeValue(data, 'bids', []);
231263
+ this.handleDeltas(orderbook['asks'], asks);
231264
+ this.handleDeltas(orderbook['bids'], bids);
231265
+ orderbook['timestamp'] = timestamp;
231266
+ orderbook['datetime'] = this.iso8601(timestamp);
231267
+ const messageHash = 'orderbook:' + symbol;
231268
+ this.orderbooks[symbol] = orderbook;
231269
+ client.resolve(orderbook, messageHash);
231270
+ }
231271
+ handleDelta(bookside, delta) {
231272
+ const bidAsk = this.parseBidAsk(delta, 'price', 'qty');
231273
+ bookside.storeArray(bidAsk);
231274
+ }
231275
+ async watchTicker(symbol, params = {}) {
231276
+ /**
231277
+ * @method
231278
+ * @name coinone#watchTicker
231279
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
231280
+ * @see https://docs.coinone.co.kr/reference/public-websocket-ticker
231281
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
231282
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
231283
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
231284
+ */
231285
+ await this.loadMarkets();
231286
+ const market = this.market(symbol);
231287
+ const messageHash = 'ticker:' + market['symbol'];
231288
+ const url = this.urls['api']['ws'];
231289
+ const request = {
231290
+ 'request_type': 'SUBSCRIBE',
231291
+ 'channel': 'TICKER',
231292
+ 'topic': {
231293
+ 'quote_currency': market['quote'],
231294
+ 'target_currency': market['base'],
231295
+ },
231296
+ };
231297
+ const message = this.extend(request, params);
231298
+ return await this.watch(url, messageHash, message, messageHash);
231299
+ }
231300
+ handleTicker(client, message) {
231301
+ //
231302
+ // {
231303
+ // "response_type": "DATA",
231304
+ // "channel": "TICKER",
231305
+ // "data": {
231306
+ // "quote_currency": "KRW",
231307
+ // "target_currency": "BTC",
231308
+ // "timestamp": 1705301117198,
231309
+ // "quote_volume": "19521465345.504",
231310
+ // "target_volume": "334.81445168",
231311
+ // "high": "58710000",
231312
+ // "low": "57276000",
231313
+ // "first": "57293000",
231314
+ // "last": "58532000",
231315
+ // "volume_power": "100",
231316
+ // "ask_best_price": "58537000",
231317
+ // "ask_best_qty": "0.1961",
231318
+ // "bid_best_price": "58532000",
231319
+ // "bid_best_qty": "0.00009258",
231320
+ // "id": "1705301117198001",
231321
+ // "yesterday_high": "59140000",
231322
+ // "yesterday_low": "57273000",
231323
+ // "yesterday_first": "58897000",
231324
+ // "yesterday_last": "57301000",
231325
+ // "yesterday_quote_volume": "12967227517.4262",
231326
+ // "yesterday_target_volume": "220.09232233"
231327
+ // }
231328
+ // }
231329
+ //
231330
+ const data = this.safeValue(message, 'data', {});
231331
+ const ticker = this.parseWsTicker(data);
231332
+ const symbol = ticker['symbol'];
231333
+ this.tickers[symbol] = ticker;
231334
+ const messageHash = 'ticker:' + symbol;
231335
+ client.resolve(this.tickers[symbol], messageHash);
231336
+ }
231337
+ parseWsTicker(ticker, market = undefined) {
231338
+ //
231339
+ // {
231340
+ // "quote_currency": "KRW",
231341
+ // "target_currency": "BTC",
231342
+ // "timestamp": 1705301117198,
231343
+ // "quote_volume": "19521465345.504",
231344
+ // "target_volume": "334.81445168",
231345
+ // "high": "58710000",
231346
+ // "low": "57276000",
231347
+ // "first": "57293000",
231348
+ // "last": "58532000",
231349
+ // "volume_power": "100",
231350
+ // "ask_best_price": "58537000",
231351
+ // "ask_best_qty": "0.1961",
231352
+ // "bid_best_price": "58532000",
231353
+ // "bid_best_qty": "0.00009258",
231354
+ // "id": "1705301117198001",
231355
+ // "yesterday_high": "59140000",
231356
+ // "yesterday_low": "57273000",
231357
+ // "yesterday_first": "58897000",
231358
+ // "yesterday_last": "57301000",
231359
+ // "yesterday_quote_volume": "12967227517.4262",
231360
+ // "yesterday_target_volume": "220.09232233"
231361
+ // }
231362
+ //
231363
+ const timestamp = this.safeInteger(ticker, 'timestamp');
231364
+ const last = this.safeString(ticker, 'last');
231365
+ const baseId = this.safeString(ticker, 'target_currency');
231366
+ const quoteId = this.safeString(ticker, 'quote_currency');
231367
+ const base = this.safeCurrencyCode(baseId);
231368
+ const quote = this.safeCurrencyCode(quoteId);
231369
+ const symbol = this.symbol(base + '/' + quote);
231370
+ return this.safeTicker({
231371
+ 'symbol': symbol,
231372
+ 'timestamp': timestamp,
231373
+ 'datetime': this.iso8601(timestamp),
231374
+ 'high': this.safeString(ticker, 'high'),
231375
+ 'low': this.safeString(ticker, 'low'),
231376
+ 'bid': this.safeNumber(ticker, 'bid_best_price'),
231377
+ 'bidVolume': this.safeNumber(ticker, 'bid_best_qty'),
231378
+ 'ask': this.safeNumber(ticker, 'ask_best_price'),
231379
+ 'askVolume': this.safeNumber(ticker, 'ask_best_qty'),
231380
+ 'vwap': undefined,
231381
+ 'open': this.safeString(ticker, 'first'),
231382
+ 'close': last,
231383
+ 'last': last,
231384
+ 'previousClose': undefined,
231385
+ 'change': undefined,
231386
+ 'percentage': undefined,
231387
+ 'average': undefined,
231388
+ 'baseVolume': this.safeString(ticker, 'target_volume'),
231389
+ 'quoteVolume': this.safeString(ticker, 'quote_volume'),
231390
+ 'info': ticker,
231391
+ }, market);
231392
+ }
231393
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
231394
+ /**
231395
+ * @method
231396
+ * @name coinone#watchTrades
231397
+ * @description watches information on multiple trades made in a market
231398
+ * @see https://docs.coinone.co.kr/reference/public-websocket-trade
231399
+ * @param {string} symbol unified market symbol of the market trades were made in
231400
+ * @param {int} [since] the earliest time in ms to fetch trades for
231401
+ * @param {int} [limit] the maximum number of trade structures to retrieve
231402
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
231403
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
231404
+ */
231405
+ await this.loadMarkets();
231406
+ const market = this.market(symbol);
231407
+ const messageHash = 'trade:' + market['symbol'];
231408
+ const url = this.urls['api']['ws'];
231409
+ const request = {
231410
+ 'request_type': 'SUBSCRIBE',
231411
+ 'channel': 'TRADE',
231412
+ 'topic': {
231413
+ 'quote_currency': market['quote'],
231414
+ 'target_currency': market['base'],
231415
+ },
231416
+ };
231417
+ const message = this.extend(request, params);
231418
+ const trades = await this.watch(url, messageHash, message, messageHash);
231419
+ if (this.newUpdates) {
231420
+ limit = trades.getLimit(market['symbol'], limit);
231421
+ }
231422
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
231423
+ }
231424
+ handleTrades(client, message) {
231425
+ //
231426
+ // {
231427
+ // "response_type": "DATA",
231428
+ // "channel": "TRADE",
231429
+ // "data": {
231430
+ // "quote_currency": "KRW",
231431
+ // "target_currency": "BTC",
231432
+ // "id": "1705303667916001",
231433
+ // "timestamp": 1705303667916,
231434
+ // "price": "58490000",
231435
+ // "qty": "0.0008",
231436
+ // "is_seller_maker": false
231437
+ // }
231438
+ // }
231439
+ //
231440
+ const data = this.safeValue(message, 'data', {});
231441
+ const trade = this.parseWsTrade(data);
231442
+ const symbol = trade['symbol'];
231443
+ let stored = this.safeValue(this.trades, symbol);
231444
+ if (stored === undefined) {
231445
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
231446
+ stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCache */ .ZL(limit);
231447
+ this.trades[symbol] = stored;
231448
+ }
231449
+ stored.append(trade);
231450
+ const messageHash = 'trade:' + symbol;
231451
+ client.resolve(stored, messageHash);
231452
+ }
231453
+ parseWsTrade(trade, market = undefined) {
231454
+ //
231455
+ // {
231456
+ // "quote_currency": "KRW",
231457
+ // "target_currency": "BTC",
231458
+ // "id": "1705303667916001",
231459
+ // "timestamp": 1705303667916,
231460
+ // "price": "58490000",
231461
+ // "qty": "0.0008",
231462
+ // "is_seller_maker": false
231463
+ // }
231464
+ //
231465
+ const baseId = this.safeStringUpper(trade, 'target_currency');
231466
+ const quoteId = this.safeStringUpper(trade, 'quote_currency');
231467
+ const base = this.safeCurrencyCode(baseId);
231468
+ const quote = this.safeCurrencyCode(quoteId);
231469
+ const symbol = base + '/' + quote;
231470
+ const timestamp = this.safeInteger(trade, 'timestamp');
231471
+ market = this.safeMarket(symbol, market);
231472
+ const isSellerMaker = this.safeValue(trade, 'is_seller_maker');
231473
+ let side = undefined;
231474
+ if (isSellerMaker !== undefined) {
231475
+ side = isSellerMaker ? 'sell' : 'buy';
231476
+ }
231477
+ const priceString = this.safeString(trade, 'price');
231478
+ const amountString = this.safeString(trade, 'qty');
231479
+ return this.safeTrade({
231480
+ 'id': this.safeString(trade, 'id'),
231481
+ 'info': trade,
231482
+ 'timestamp': timestamp,
231483
+ 'datetime': this.iso8601(timestamp),
231484
+ 'order': undefined,
231485
+ 'symbol': market['symbol'],
231486
+ 'type': undefined,
231487
+ 'side': side,
231488
+ 'takerOrMaker': undefined,
231489
+ 'price': priceString,
231490
+ 'amount': amountString,
231491
+ 'cost': undefined,
231492
+ 'fee': undefined,
231493
+ }, market);
231494
+ }
231495
+ handleErrorMessage(client, message) {
231496
+ //
231497
+ // {
231498
+ // "response_type": "ERROR",
231499
+ // "error_code": 160012,
231500
+ // "message": "Invalid Topic"
231501
+ // }
231502
+ //
231503
+ const type = this.safeString(message, 'response_type', '');
231504
+ if (type === 'ERROR') {
231505
+ return true;
231506
+ }
231507
+ return false;
231508
+ }
231509
+ handleMessage(client, message) {
231510
+ if (this.handleErrorMessage(client, message)) {
231511
+ return;
231512
+ }
231513
+ const type = this.safeString(message, 'response_type');
231514
+ if (type === 'PONG') {
231515
+ this.handlePong(client, message);
231516
+ return;
231517
+ }
231518
+ if (type === 'DATA') {
231519
+ const topic = this.safeString(message, 'channel', '');
231520
+ const methods = {
231521
+ 'ORDERBOOK': this.handleOrderBook,
231522
+ 'TICKER': this.handleTicker,
231523
+ 'TRADE': this.handleTrades,
231524
+ };
231525
+ const exacMethod = this.safeValue(methods, topic);
231526
+ if (exacMethod !== undefined) {
231527
+ exacMethod.call(this, client, message);
231528
+ return;
231529
+ }
231530
+ const keys = Object.keys(methods);
231531
+ for (let i = 0; i < keys.length; i++) {
231532
+ const key = keys[i];
231533
+ if (topic.indexOf(keys[i]) >= 0) {
231534
+ const method = methods[key];
231535
+ method.call(this, client, message);
231536
+ return;
231537
+ }
231538
+ }
231539
+ }
231540
+ }
231541
+ ping(client) {
231542
+ return {
231543
+ 'request_type': 'PING',
231544
+ };
231545
+ }
231546
+ handlePong(client, message) {
231547
+ //
231548
+ // {
231549
+ // "response_type":"PONG"
231550
+ // }
231551
+ //
231552
+ client.lastPong = this.milliseconds();
231553
+ return message;
231554
+ }
231555
+ }
231556
+
231557
+
231091
231558
  /***/ }),
231092
231559
 
231093
231560
  /***/ 6820:
@@ -236515,7 +236982,8 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
236515
236982
  'symbols': [market['id']],
236516
236983
  },
236517
236984
  };
236518
- return await this.subscribePublic(name, [symbol], this.deepExtend(request, params));
236985
+ const result = await this.subscribePublic(name, [symbol], this.deepExtend(request, params));
236986
+ return this.safeValue(result, symbol);
236519
236987
  }
236520
236988
  async watchTickers(symbols = undefined, params = {}) {
236521
236989
  /**
@@ -236598,16 +237066,16 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
236598
237066
  const data = this.safeValue(message, 'data', {});
236599
237067
  const marketIds = Object.keys(data);
236600
237068
  const channel = this.safeString(message, 'ch');
236601
- const newTickers = [];
237069
+ const newTickers = {};
236602
237070
  for (let i = 0; i < marketIds.length; i++) {
236603
237071
  const marketId = marketIds[i];
236604
237072
  const market = this.safeMarket(marketId);
236605
237073
  const symbol = market['symbol'];
236606
237074
  const ticker = this.parseWsTicker(data[marketId], market);
236607
237075
  this.tickers[symbol] = ticker;
236608
- newTickers.push(ticker);
237076
+ newTickers[symbol] = ticker;
236609
237077
  const messageHash = channel + '::' + symbol;
236610
- client.resolve(this.tickers[symbol], messageHash);
237078
+ client.resolve(newTickers, messageHash);
236611
237079
  }
236612
237080
  const messageHashes = this.findMessageHashes(client, channel + '::');
236613
237081
  for (let i = 0; i < messageHashes.length; i++) {
@@ -243713,7 +244181,13 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
243713
244181
  const name = this.safeString2(params, 'method', 'watchTickerMethod', method);
243714
244182
  params = this.omit(params, ['watchTickerMethod', 'method']);
243715
244183
  symbols = this.marketSymbols(symbols, undefined, false);
243716
- return await this.subscribePublic(name, symbols, params);
244184
+ const ticker = await this.subscribePublic(name, symbols, params);
244185
+ if (this.newUpdates) {
244186
+ const tickers = {};
244187
+ tickers[ticker['symbol']] = ticker;
244188
+ return tickers;
244189
+ }
244190
+ return this.filterByArray(this.tickers, 'symbol', symbols);
243717
244191
  }
243718
244192
  async watchTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
243719
244193
  /**
@@ -245301,7 +245775,9 @@ class kucoin extends _kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
245301
245775
  const messageHash = 'ticker:' + symbol;
245302
245776
  client.resolve(ticker, messageHash);
245303
245777
  // watchTickers
245304
- client.resolve(ticker, 'tickers');
245778
+ const allTickers = {};
245779
+ allTickers[symbol] = ticker;
245780
+ client.resolve(allTickers, 'tickers');
245305
245781
  const messageHashes = this.findMessageHashes(client, 'tickers::');
245306
245782
  for (let i = 0; i < messageHashes.length; i++) {
245307
245783
  const currentMessageHash = messageHashes[i];
@@ -254001,7 +254477,7 @@ class poloniex extends _poloniex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
254001
254477
  // }
254002
254478
  //
254003
254479
  const data = this.safeValue(message, 'data', []);
254004
- const newTickers = [];
254480
+ const newTickers = {};
254005
254481
  for (let i = 0; i < data.length; i++) {
254006
254482
  const item = data[i];
254007
254483
  const marketId = this.safeString(item, 'symbol');
@@ -254009,7 +254485,7 @@ class poloniex extends _poloniex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
254009
254485
  const ticker = this.parseTicker(item);
254010
254486
  const symbol = ticker['symbol'];
254011
254487
  this.tickers[symbol] = ticker;
254012
- newTickers.push(ticker);
254488
+ newTickers[symbol] = ticker;
254013
254489
  }
254014
254490
  }
254015
254491
  const messageHashes = this.findMessageHashes(client, 'ticker::');
@@ -293450,39 +293926,39 @@ var __webpack_exports__ = {};
293450
293926
  (() => {
293451
293927
  __webpack_require__.r(__webpack_exports__);
293452
293928
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
293453
- /* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.AccountNotEnabled),
293454
- /* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.AccountSuspended),
293455
- /* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.AddressPending),
293456
- /* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.ArgumentsRequired),
293457
- /* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.AuthenticationError),
293458
- /* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.BadRequest),
293459
- /* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.BadResponse),
293460
- /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.BadSymbol),
293461
- /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.BaseError),
293462
- /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.CancelPending),
293463
- /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.DDoSProtection),
293464
- /* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.DuplicateOrderId),
293929
+ /* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.AccountNotEnabled),
293930
+ /* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.AccountSuspended),
293931
+ /* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.AddressPending),
293932
+ /* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.ArgumentsRequired),
293933
+ /* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.AuthenticationError),
293934
+ /* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.BadRequest),
293935
+ /* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.BadResponse),
293936
+ /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.BadSymbol),
293937
+ /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.BaseError),
293938
+ /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.CancelPending),
293939
+ /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.DDoSProtection),
293940
+ /* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.DuplicateOrderId),
293465
293941
  /* harmony export */ Exchange: () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
293466
- /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.ExchangeError),
293467
- /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.ExchangeNotAvailable),
293468
- /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.InsufficientFunds),
293469
- /* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.InvalidAddress),
293470
- /* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.InvalidNonce),
293471
- /* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.InvalidOrder),
293472
- /* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.MarginModeAlreadySet),
293473
- /* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.NetworkError),
293474
- /* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.NoChange),
293475
- /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.NotSupported),
293476
- /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.NullResponse),
293477
- /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.OnMaintenance),
293478
- /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.OrderImmediatelyFillable),
293479
- /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.OrderNotCached),
293480
- /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.OrderNotFillable),
293481
- /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.OrderNotFound),
293482
- /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.PermissionDenied),
293483
- /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__.O),
293484
- /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RateLimitExceeded),
293485
- /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RequestTimeout),
293942
+ /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.ExchangeError),
293943
+ /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.ExchangeNotAvailable),
293944
+ /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.InsufficientFunds),
293945
+ /* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.InvalidAddress),
293946
+ /* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.InvalidNonce),
293947
+ /* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.InvalidOrder),
293948
+ /* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.MarginModeAlreadySet),
293949
+ /* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.NetworkError),
293950
+ /* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.NoChange),
293951
+ /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.NotSupported),
293952
+ /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.NullResponse),
293953
+ /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.OnMaintenance),
293954
+ /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.OrderImmediatelyFillable),
293955
+ /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.OrderNotCached),
293956
+ /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.OrderNotFillable),
293957
+ /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.OrderNotFound),
293958
+ /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.PermissionDenied),
293959
+ /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_156__.O),
293960
+ /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.RateLimitExceeded),
293961
+ /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__.RequestTimeout),
293486
293962
  /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
293487
293963
  /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
293488
293964
  /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
@@ -293536,11 +294012,11 @@ __webpack_require__.r(__webpack_exports__);
293536
294012
  /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_50__.Z),
293537
294013
  /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__.Z),
293538
294014
  /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__.Z),
293539
- /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__),
294015
+ /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__),
293540
294016
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
293541
294017
  /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__.Z),
293542
294018
  /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__.Z),
293543
- /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__),
294019
+ /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_157__),
293544
294020
  /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_55__.Z),
293545
294021
  /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
293546
294022
  /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__.Z),
@@ -293589,9 +294065,9 @@ __webpack_require__.r(__webpack_exports__);
293589
294065
  /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__.Z)
293590
294066
  /* harmony export */ });
293591
294067
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
293592
- /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2194);
293593
- /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(7100);
293594
- /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(6689);
294068
+ /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(2194);
294069
+ /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(7100);
294070
+ /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(6689);
293595
294071
  /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
293596
294072
  /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
293597
294073
  /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
@@ -293715,37 +294191,38 @@ __webpack_require__.r(__webpack_exports__);
293715
294191
  /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(3414);
293716
294192
  /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(8368);
293717
294193
  /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(204);
293718
- /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(6820);
293719
- /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(2952);
293720
- /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(1788);
293721
- /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(9004);
293722
- /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(8335);
293723
- /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(1465);
293724
- /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(9488);
293725
- /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(5189);
293726
- /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(8559);
293727
- /* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(7474);
293728
- /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(8384);
293729
- /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(9021);
293730
- /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(3484);
293731
- /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(1311);
293732
- /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(736);
293733
- /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(449);
293734
- /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(2387);
293735
- /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(7181);
293736
- /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(627);
293737
- /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(6484);
293738
- /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(8080);
293739
- /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(7105);
293740
- /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(2214);
293741
- /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(4360);
293742
- /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(7924);
293743
- /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(3541);
293744
- /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(9782);
293745
- /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(7614);
293746
- /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(4828);
293747
- /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(5630);
293748
- /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(3910);
294194
+ /* harmony import */ var _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(5208);
294195
+ /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(6820);
294196
+ /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(2952);
294197
+ /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(1788);
294198
+ /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(9004);
294199
+ /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(8335);
294200
+ /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(1465);
294201
+ /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(9488);
294202
+ /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(5189);
294203
+ /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(8559);
294204
+ /* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(7474);
294205
+ /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(8384);
294206
+ /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(9021);
294207
+ /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(3484);
294208
+ /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(1311);
294209
+ /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(736);
294210
+ /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(449);
294211
+ /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(2387);
294212
+ /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(7181);
294213
+ /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(627);
294214
+ /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(6484);
294215
+ /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(8080);
294216
+ /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(7105);
294217
+ /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(2214);
294218
+ /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(4360);
294219
+ /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(7924);
294220
+ /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(3541);
294221
+ /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(9782);
294222
+ /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(7614);
294223
+ /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(4828);
294224
+ /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(5630);
294225
+ /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(3910);
293749
294226
  /*
293750
294227
 
293751
294228
  MIT License
@@ -293780,7 +294257,7 @@ SOFTWARE.
293780
294257
 
293781
294258
  //-----------------------------------------------------------------------------
293782
294259
  // this is updated by vss.js when building
293783
- const version = '4.2.15';
294260
+ const version = '4.2.17';
293784
294261
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
293785
294262
  //-----------------------------------------------------------------------------
293786
294263
 
@@ -293936,6 +294413,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
293936
294413
 
293937
294414
 
293938
294415
 
294416
+
293939
294417
 
293940
294418
 
293941
294419
  const exchanges = {
@@ -294064,37 +294542,38 @@ const pro = {
294064
294542
  'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
294065
294543
  'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
294066
294544
  'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
294067
- 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
294068
- 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
294069
- 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
294070
- 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
294071
- 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
294072
- 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
294073
- 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
294074
- 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
294075
- 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
294076
- 'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
294077
- 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
294078
- 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
294079
- 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
294080
- 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
294081
- 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
294082
- 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
294083
- 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
294084
- 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
294085
- 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
294086
- 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
294087
- 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
294088
- 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
294089
- 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
294090
- 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
294091
- 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
294092
- 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
294093
- 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
294094
- 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
294095
- 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
294096
- 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
294097
- 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
294545
+ 'coinone': _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
294546
+ 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
294547
+ 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
294548
+ 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
294549
+ 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
294550
+ 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
294551
+ 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
294552
+ 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
294553
+ 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
294554
+ 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
294555
+ 'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
294556
+ 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
294557
+ 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
294558
+ 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
294559
+ 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
294560
+ 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
294561
+ 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
294562
+ 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
294563
+ 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
294564
+ 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
294565
+ 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
294566
+ 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
294567
+ 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
294568
+ 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
294569
+ 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
294570
+ 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
294571
+ 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
294572
+ 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
294573
+ 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
294574
+ 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
294575
+ 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
294576
+ 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
294098
294577
  };
294099
294578
  for (const exchange in pro) {
294100
294579
  // const ccxtExchange = exchanges[exchange]
@@ -294107,7 +294586,7 @@ for (const exchange in pro) {
294107
294586
  pro.exchanges = Object.keys(pro);
294108
294587
  pro['Exchange'] = _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e; // now the same for rest and ts
294109
294588
  //-----------------------------------------------------------------------------
294110
- const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__);
294589
+ const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_156__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_157__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_158__);
294111
294590
 
294112
294591
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ccxt);
294113
294592
  //-----------------------------------------------------------------------------