ccxt 4.2.19 → 4.2.20

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 (42) hide show
  1. package/README.md +98 -98
  2. package/dist/ccxt.browser.js +67 -133
  3. package/dist/ccxt.browser.min.js +2 -2
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +10 -0
  6. package/dist/cjs/src/binance.js +2 -1
  7. package/dist/cjs/src/binanceus.js +17 -0
  8. package/dist/cjs/src/bingx.js +2 -1
  9. package/dist/cjs/src/bitget.js +25 -31
  10. package/dist/cjs/src/bitteam.js +1 -1
  11. package/dist/cjs/src/bybit.js +0 -28
  12. package/dist/cjs/src/delta.js +0 -18
  13. package/dist/cjs/src/gate.js +0 -25
  14. package/dist/cjs/src/kucoinfutures.js +9 -9
  15. package/dist/cjs/src/okx.js +0 -18
  16. package/js/ccxt.d.ts +1 -1
  17. package/js/ccxt.js +1 -1
  18. package/js/src/abstract/binance.d.ts +1 -0
  19. package/js/src/abstract/binancecoinm.d.ts +1 -0
  20. package/js/src/abstract/binanceus.d.ts +1 -0
  21. package/js/src/abstract/binanceusdm.d.ts +1 -0
  22. package/js/src/abstract/bitpanda.js +11 -0
  23. package/js/src/base/Exchange.d.ts +3 -0
  24. package/js/src/base/Exchange.js +10 -0
  25. package/js/src/binance.js +2 -1
  26. package/js/src/binanceus.js +17 -0
  27. package/js/src/bingx.js +2 -1
  28. package/js/src/bitget.d.ts +1 -1
  29. package/js/src/bitget.js +25 -31
  30. package/js/src/bitteam.js +1 -1
  31. package/js/src/bybit.d.ts +0 -1
  32. package/js/src/bybit.js +1 -29
  33. package/js/src/delta.d.ts +0 -1
  34. package/js/src/delta.js +0 -18
  35. package/js/src/gate.d.ts +0 -1
  36. package/js/src/gate.js +0 -25
  37. package/js/src/kucoinfutures.d.ts +6 -6
  38. package/js/src/kucoinfutures.js +9 -9
  39. package/js/src/okx.d.ts +0 -1
  40. package/js/src/okx.js +0 -18
  41. package/package.json +1 -1
  42. package/skip-tests.json +2 -1
@@ -7388,6 +7388,7 @@ class Exchange {
7388
7388
  'fetchBorrowInterest': undefined,
7389
7389
  'fetchBorrowRateHistory': undefined,
7390
7390
  'fetchCanceledOrders': undefined,
7391
+ 'fetchCanceledAndClosedOrders': undefined,
7391
7392
  'fetchClosedOrder': undefined,
7392
7393
  'fetchClosedOrders': undefined,
7393
7394
  'fetchCrossBorrowRate': undefined,
@@ -11080,6 +11081,9 @@ class Exchange {
11080
11081
  }
11081
11082
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchClosedOrders() is not supported yet');
11082
11083
  }
11084
+ async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
11085
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchCanceledAndClosedOrders() is not supported yet');
11086
+ }
11083
11087
  async fetchClosedOrdersWs(symbol = undefined, since = undefined, limit = undefined, params = {}) {
11084
11088
  if (this.has['fetchOrdersWs']) {
11085
11089
  const orders = await this.fetchOrdersWs(symbol, since, limit, params);
@@ -11208,8 +11212,14 @@ class Exchange {
11208
11212
  }
11209
11213
  return markets[0];
11210
11214
  }
11215
+ else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
11216
+ return this.createExpiredOptionMarket(symbol);
11217
+ }
11211
11218
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.BadSymbol(this.id + ' does not have market symbol ' + symbol);
11212
11219
  }
11220
+ createExpiredOptionMarket(symbol) {
11221
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' createExpiredOptionMarket () is not supported yet');
11222
+ }
11213
11223
  handleWithdrawTagAndParams(tag, params) {
11214
11224
  if (typeof tag === 'object') {
11215
11225
  params = this.extend(tag, params);
@@ -18664,6 +18674,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
18664
18674
  },
18665
18675
  'papi': {
18666
18676
  'get': {
18677
+ 'ping': 1,
18667
18678
  'um/order': 1,
18668
18679
  'um/openOrder': 1,
18669
18680
  'um/openOrders': 1,
@@ -26409,7 +26420,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26409
26420
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError(this.id + ' userDataStream endpoint requires `apiKey` credential');
26410
26421
  }
26411
26422
  }
26412
- else if ((api === 'private') || (api === 'eapiPrivate') || (api === 'sapi' && path !== 'system/status') || (api === 'sapiV2') || (api === 'sapiV3') || (api === 'sapiV4') || (api === 'dapiPrivate') || (api === 'dapiPrivateV2') || (api === 'fapiPrivate') || (api === 'fapiPrivateV2') || (api === 'papi')) {
26423
+ else if ((api === 'private') || (api === 'eapiPrivate') || (api === 'sapi' && path !== 'system/status') || (api === 'sapiV2') || (api === 'sapiV3') || (api === 'sapiV4') || (api === 'dapiPrivate') || (api === 'dapiPrivateV2') || (api === 'fapiPrivate') || (api === 'fapiPrivateV2') || (api === 'papi' && path !== 'ping')) {
26413
26424
  this.checkRequiredCredentials();
26414
26425
  if (method === 'POST' && ((path === 'order') || (path === 'sor/order'))) {
26415
26426
  // inject in implicit API calls
@@ -27701,7 +27712,24 @@ class binanceus extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
27701
27712
  'api': {
27702
27713
  'public': {
27703
27714
  'get': {
27715
+ 'exchangeInfo': 10,
27716
+ 'ping': 1,
27717
+ 'time': 1,
27718
+ 'depth': { 'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]] },
27719
+ 'trades': 1,
27720
+ 'aggTrades': 1,
27721
+ 'historicalTrades': 5,
27722
+ 'klines': 1,
27704
27723
  'ticker/price': { 'cost': 1, 'noSymbol': 2 },
27724
+ 'avgPrice': 1,
27725
+ 'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },
27726
+ 'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },
27727
+ 'ticker': { 'cost': 2, 'noSymbol': 100 },
27728
+ },
27729
+ },
27730
+ 'private': {
27731
+ 'get': {
27732
+ 'status': 1,
27705
27733
  },
27706
27734
  },
27707
27735
  },
@@ -28153,7 +28181,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28153
28181
  '80017': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.OrderNotFound,
28154
28182
  '100414': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AccountSuspended,
28155
28183
  '100419': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.PermissionDenied,
28156
- '100437': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest, // {"code":100437,"msg":"The withdrawal amount is lower than the minimum limit, please re-enter.","timestamp":1689258588845}
28184
+ '100437': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
28185
+ '101204': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds, // bingx {"code":101204,"msg":"","data":{}}
28157
28186
  },
28158
28187
  'broad': {},
28159
28188
  },
@@ -41531,6 +41560,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
41531
41560
  'fetchBorrowRateHistories': false,
41532
41561
  'fetchBorrowRateHistory': false,
41533
41562
  'fetchCanceledOrders': true,
41563
+ 'fetchCanceledAndClosedOrders': true,
41534
41564
  'fetchClosedOrders': true,
41535
41565
  'fetchCrossBorrowRate': true,
41536
41566
  'fetchCrossBorrowRates': false,
@@ -46870,20 +46900,8 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
46870
46900
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
46871
46901
  */
46872
46902
  await this.loadMarkets();
46873
- let market = undefined;
46874
- if (symbol !== undefined) {
46875
- market = this.market(symbol);
46876
- }
46877
- const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
46878
- const result = [];
46879
- for (let i = 0; i < response.length; i++) {
46880
- const entry = response[i];
46881
- const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
46882
- if (status === 'closed') {
46883
- result.push(entry);
46884
- }
46885
- }
46886
- return this.parseOrders(result, market, since, limit);
46903
+ const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
46904
+ return this.filterBy(orders, 'status', 'closed');
46887
46905
  }
46888
46906
  async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
46889
46907
  /**
@@ -46908,22 +46926,26 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
46908
46926
  * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
46909
46927
  */
46910
46928
  await this.loadMarkets();
46911
- let market = undefined;
46912
- if (symbol !== undefined) {
46913
- market = this.market(symbol);
46914
- }
46915
- const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
46916
- const result = [];
46917
- for (let i = 0; i < response.length; i++) {
46918
- const entry = response[i];
46919
- const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
46920
- if (status === 'canceled') {
46921
- result.push(entry);
46922
- }
46923
- }
46924
- return this.parseOrders(result, market, since, limit);
46929
+ const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
46930
+ return this.filterBy(orders, 'status', 'canceled');
46925
46931
  }
46926
46932
  async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
46933
+ /**
46934
+ * @method
46935
+ * @name bitget#fetchCanceledAndClosedOrders
46936
+ * @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders
46937
+ * @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order
46938
+ * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History
46939
+ * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
46940
+ * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
46941
+ * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
46942
+ * @description fetches information on multiple canceled and closed orders made by the user
46943
+ * @param {string} symbol unified market symbol of the market orders were made in
46944
+ * @param {int} [since] the earliest time in ms to fetch orders for
46945
+ * @param {int} [limit] the maximum number of order structures to retrieve
46946
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
46947
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
46948
+ */
46927
46949
  await this.loadMarkets();
46928
46950
  const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);
46929
46951
  let market = undefined;
@@ -47208,16 +47230,17 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47208
47230
  const data = this.safeValue(response, 'data', {});
47209
47231
  if (marketType === 'spot') {
47210
47232
  if ((marginMode !== undefined) || stop) {
47211
- return this.safeValue(data, 'orderList', []);
47233
+ return this.parseOrders(this.safeValue(data, 'orderList', []), market, since, limit);
47212
47234
  }
47213
47235
  }
47214
47236
  else {
47215
- return this.safeValue(data, 'entrustedList', []);
47237
+ return this.parseOrders(this.safeValue(data, 'entrustedList', []), market, since, limit);
47216
47238
  }
47217
47239
  if (typeof response === 'string') {
47218
47240
  response = JSON.parse(response);
47219
47241
  }
47220
- return this.safeValue(response, 'data', []);
47242
+ const orders = this.safeValue(response, 'data', []);
47243
+ return this.parseOrders(orders, market, since, limit);
47221
47244
  }
47222
47245
  async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
47223
47246
  /**
@@ -67366,7 +67389,7 @@ class bitteam extends _abstract_bitteam_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
67366
67389
  '1d': '1D',
67367
67390
  },
67368
67391
  'urls': {
67369
- 'logo': 'https://private-user-images.githubusercontent.com/43336371/291263231-aa2e0d61-edba-44a8-b9bf-68797dc417bd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwOTE4NTYsIm5iZiI6MTcwMzA5MTU1NiwicGF0aCI6Ii80MzMzNjM3MS8yOTEyNjMyMzEtYWEyZTBkNjEtZWRiYS00NGE4LWI5YmYtNjg3OTdkYzQxN2JkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjIwVDE2NTkxNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkOGE5YmY3ZDMzMWY4YzVjODYzYWJjNjE1MGFkNTRkNzVlMDJmNWE1ZTgwNGQ2NzVkMzkyZTFhOTc4OTNjMWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.B-ySU5Uo6vz53-iDe08tTQmJH6QOzUA9Jcbj-kZc2wg',
67392
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/cf71fe3d-b8b4-40f2-a906-907661b28793',
67370
67393
  'api': {
67371
67394
  'history': 'https://history.bit.team',
67372
67395
  'public': 'https://bit.team',
@@ -78113,34 +78136,6 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78113
78136
  'info': undefined,
78114
78137
  };
78115
78138
  }
78116
- market(symbol) {
78117
- if (this.markets === undefined) {
78118
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(this.id + ' markets not loaded');
78119
- }
78120
- if (typeof symbol === 'string') {
78121
- if (symbol in this.markets) {
78122
- return this.markets[symbol];
78123
- }
78124
- else if (symbol in this.markets_by_id) {
78125
- const markets = this.markets_by_id[symbol];
78126
- let defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
78127
- if (defaultType === 'future') {
78128
- defaultType = 'contract';
78129
- }
78130
- for (let i = 0; i < markets.length; i++) {
78131
- const market = markets[i];
78132
- if (market[defaultType]) {
78133
- return market;
78134
- }
78135
- }
78136
- return markets[0];
78137
- }
78138
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
78139
- return this.createExpiredOptionMarket(symbol);
78140
- }
78141
- }
78142
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadSymbol(this.id + ' does not have market symbol ' + symbol);
78143
- }
78144
78139
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
78145
78140
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
78146
78141
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -110196,24 +110191,6 @@ class delta extends _abstract_delta_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
110196
110191
  'info': undefined,
110197
110192
  };
110198
110193
  }
110199
- market(symbol) {
110200
- if (this.markets === undefined) {
110201
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' markets not loaded');
110202
- }
110203
- if (typeof symbol === 'string') {
110204
- if (symbol in this.markets) {
110205
- return this.markets[symbol];
110206
- }
110207
- else if (symbol in this.markets_by_id) {
110208
- const markets = this.markets_by_id[symbol];
110209
- return markets[0];
110210
- }
110211
- else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
110212
- return this.createExpiredOptionMarket(symbol);
110213
- }
110214
- }
110215
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + ' does not have market symbol ' + symbol);
110216
- }
110217
110194
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
110218
110195
  const isOption = (marketId !== undefined) && ((marketId.endsWith('-C')) || (marketId.endsWith('-P')) || (marketId.startsWith('C-')) || (marketId.startsWith('P-')));
110219
110196
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -124454,31 +124431,6 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
124454
124431
  'info': undefined,
124455
124432
  };
124456
124433
  }
124457
- market(symbol) {
124458
- if (this.markets === undefined) {
124459
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' markets not loaded');
124460
- }
124461
- if (typeof symbol === 'string') {
124462
- if (symbol in this.markets) {
124463
- return this.markets[symbol];
124464
- }
124465
- else if (symbol in this.markets_by_id) {
124466
- const markets = this.markets_by_id[symbol];
124467
- const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
124468
- for (let i = 0; i < markets.length; i++) {
124469
- const market = markets[i];
124470
- if (market[defaultType]) {
124471
- return market;
124472
- }
124473
- }
124474
- return markets[0];
124475
- }
124476
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
124477
- return this.createExpiredOptionMarket(symbol);
124478
- }
124479
- }
124480
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + ' does not have market symbol ' + symbol);
124481
- }
124482
124434
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
124483
124435
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
124484
124436
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -164391,7 +164343,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
164391
164343
  * @method
164392
164344
  * @name kucoinfutures#fetchFundingRate
164393
164345
  * @description fetch the current funding rate
164394
- * @see https://www.kucoin.com/docs/rest/futures-trading/market-data/get-current-funding-rate
164346
+ * @see https://www.kucoin.com/docs/rest/futures-trading/funding-fees/get-current-funding-rate
164395
164347
  * @param {string} symbol unified market symbol
164396
164348
  * @param {object} [params] extra parameters specific to the exchange API endpoint
164397
164349
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -164415,7 +164367,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
164415
164367
  // }
164416
164368
  //
164417
164369
  const data = this.safeValue(response, 'data');
164418
- const fundingTimestamp = this.safeNumber(data, 'timePoint');
164370
+ const fundingTimestamp = this.safeInteger(data, 'timePoint');
164419
164371
  // the website displayes the previous funding rate as "funding rate"
164420
164372
  return {
164421
164373
  'info': data,
@@ -164426,15 +164378,15 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
164426
164378
  'estimatedSettlePrice': undefined,
164427
164379
  'timestamp': undefined,
164428
164380
  'datetime': undefined,
164429
- 'fundingRate': this.safeNumber(data, 'predictedValue'),
164430
- 'fundingTimestamp': undefined,
164431
- 'fundingDatetime': undefined,
164432
- 'nextFundingRate': undefined,
164381
+ 'fundingRate': this.safeNumber(data, 'value'),
164382
+ 'fundingTimestamp': fundingTimestamp,
164383
+ 'fundingDatetime': this.iso8601(fundingTimestamp),
164384
+ 'nextFundingRate': this.safeNumber(data, 'predictedValue'),
164433
164385
  'nextFundingTimestamp': undefined,
164434
164386
  'nextFundingDatetime': undefined,
164435
- 'previousFundingRate': this.safeNumber(data, 'value'),
164436
- 'previousFundingTimestamp': fundingTimestamp,
164437
- 'previousFundingDatetime': this.iso8601(fundingTimestamp),
164387
+ 'previousFundingRate': undefined,
164388
+ 'previousFundingTimestamp': undefined,
164389
+ 'previousFundingDatetime': undefined,
164438
164390
  };
164439
164391
  }
164440
164392
  parseBalance(response) {
@@ -189710,24 +189662,6 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189710
189662
  'info': undefined,
189711
189663
  };
189712
189664
  }
189713
- market(symbol) {
189714
- if (this.markets === undefined) {
189715
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(this.id + ' markets not loaded');
189716
- }
189717
- if (typeof symbol === 'string') {
189718
- if (symbol in this.markets) {
189719
- return this.markets[symbol];
189720
- }
189721
- else if (symbol in this.markets_by_id) {
189722
- const markets = this.markets_by_id[symbol];
189723
- return markets[0];
189724
- }
189725
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
189726
- return this.createExpiredOptionMarket(symbol);
189727
- }
189728
- }
189729
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadSymbol(this.id + ' does not have market symbol ' + symbol);
189730
- }
189731
189665
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
189732
189666
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
189733
189667
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -295516,7 +295450,7 @@ SOFTWARE.
295516
295450
 
295517
295451
  //-----------------------------------------------------------------------------
295518
295452
  // this is updated by vss.js when building
295519
- const version = '4.2.19';
295453
+ const version = '4.2.20';
295520
295454
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
295521
295455
  //-----------------------------------------------------------------------------
295522
295456