ccxt 4.2.87 → 4.2.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,90 @@
1
+ ## 4.2.87 (2024-03-31)
2
+
3
+ * chore: test files param types (#21622) [bb0c73cb34](https://github.com/ccxt/ccxt/commits/bb0c73cb349bd0852bd390c9cc93a11b6a2b01b1)
4
+ * bitget error mapping (#21969) [a7706fa4df](https://github.com/ccxt/ccxt/commits/a7706fa4dfc969713e7208047d892e8911384748)
5
+ * coinex: fetchTime v2 (#21974) [c04fdb78b2](https://github.com/ccxt/ccxt/commits/c04fdb78b2e636602e9e47b16049bb870494174f)
6
+ * coinex: fetchTradingFee, fetchTradingFees v2 (#21975) [921aa4981b](https://github.com/ccxt/ccxt/commits/921aa4981b5cf8ec1a4190536024fd834fd1b5dc)
7
+ * feat(hyperliquid): add spot (#21992) [0bede627b0](https://github.com/ccxt/ccxt/commits/0bede627b06a1863c003f13af51f36f0275c0f54)
8
+ * feat(benchmark): add script to benchmark all languages (#21987) [e63c321f6d](https://github.com/ccxt/ccxt/commits/e63c321f6d772c34ece731f4351f5640481e247f)
9
+ * fix(kucoin): watchOrderBook in php (#21998) [264a8c1cfc](https://github.com/ccxt/ccxt/commits/264a8c1cfc302d43b33ad137b79138de4fc66ba2)
10
+ * feat(hyperliquid): add spot fees (#22000) [d2742bb8a4](https://github.com/ccxt/ccxt/commits/d2742bb8a495ce6dfb650dd6cf43d6624b45e582)
11
+ * 4.2.87 [ef29604967](https://github.com/ccxt/ccxt/commits/ef29604967b8c33363b90a53f089b7d82fc992fc)
12
+
13
+
14
+ ## 4.2.86 (2024-03-28)
15
+
16
+ * coinex: v2, add endpoints, adjust sign (#21956) [eb41f753fe](https://github.com/ccxt/ccxt/commits/eb41f753fe719439a391cc91818b35b51f70f618)
17
+ * fix(bingx): handle swap cost/amount properly (#21962) [7a5cf6e7cf](https://github.com/ccxt/ccxt/commits/7a5cf6e7cfaf483240387f5bfd6556fb8fa3b6f8)
18
+ * fix(Crypto.cs): uniformly handling byte[] request parameter (#21961) [0102a4ad44](https://github.com/ccxt/ccxt/commits/0102a4ad443a10262651fb1f0c7f435480314fd5)
19
+ * TypeScript types (#21928) [bee8cba177](https://github.com/ccxt/ccxt/commits/bee8cba17727622fcb6284e2f718d1fe4ede08c2)
20
+ * fix(future.cs): check if task is completed successfully (#21963) [bbaee82a03](https://github.com/ccxt/ccxt/commits/bbaee82a03068f8b879ae11372331502d32ccff0)
21
+ * fix(bingx): static tests markets (#21965) [d1a17a3715](https://github.com/ccxt/ccxt/commits/d1a17a37157777119135c2d0c5e44021e89e36a2)
22
+ * fix(bitget): watchBalance in C# (#21964) [ae8d577c13](https://github.com/ccxt/ccxt/commits/ae8d577c13091c702364aa66b4c77ef5abf2932e)
23
+ * fix(Exchange.cs): ws ping (#21967) [33078d4dec](https://github.com/ccxt/ccxt/commits/33078d4decaf6ba622d63e2c628f2d6d6089a091)
24
+ * 4.2.86 [0e4c1c64b3](https://github.com/ccxt/ccxt/commits/0e4c1c64b393e6990813b52c915d903591bd0592)
25
+
26
+
27
+ ## 4.2.85 (2024-03-27)
28
+
29
+ * fix(kucoin): myTrades cache reuse (#21934) [51bbac0b49](https://github.com/ccxt/ccxt/commits/51bbac0b497a563a7d55073599f48998814869ef)
30
+ * feat(Exchange.cs): implement Close() (#21932) [db7bebf1ff](https://github.com/ccxt/ccxt/commits/db7bebf1ffe2aafea64adc74046db2b27c44bffb)
31
+ * fix(WSClient.cs): protect connect (#21935) [6b1a26e693](https://github.com/ccxt/ccxt/commits/6b1a26e6935ee777646434aee8547e354de530d5)
32
+ * refactor: convertExpireTime moved to base exchange class (#21578) [c7e68a2b79](https://github.com/ccxt/ccxt/commits/c7e68a2b799411ee15ce7ea47f6188b1b9ffb7fa)
33
+ * fix(Orderbook.cs): copy prop (#21937) [518455fcda](https://github.com/ccxt/ccxt/commits/518455fcdac3241e7de332e94a6862374d9283f6)
34
+ * fix(Client.cs): protect connnectAsync inside thread context (#21939) [b5eb5c379c](https://github.com/ccxt/ccxt/commits/b5eb5c379c2c910a6d3d4b2aa68d175809727e1e)
35
+ * feat(Exchange.cs): make close faster (#21940) [32696060a9](https://github.com/ccxt/ccxt/commits/32696060a97cd95188f66b925aaca3fb7688ad5b)
36
+ * feat(Exchange): replace some safeValue with safeList (#21860) [b66f33b169](https://github.com/ccxt/ccxt/commits/b66f33b16987aab4eb83ca51cf202852a5054676)
37
+ * hitbtc parseTransaction id (#21936) [fb30b7bf68](https://github.com/ccxt/ccxt/commits/fb30b7bf688baf88301646c959c980d6f077131a)
38
+ * bybit: update parsePosition (#21943) [a5af6fb701](https://github.com/ccxt/ccxt/commits/a5af6fb70189b469281df3a244f96cb8c2683f67)
39
+ * Okx Websocket watch_order_book fix for different limits (#21944) [1c7b0e7226](https://github.com/ccxt/ccxt/commits/1c7b0e72268d7c3840f8df8bfbd7aa57bb152259)
40
+ * client & protect sendAsync (#21947) [a6b3d4d88e](https://github.com/ccxt/ccxt/commits/a6b3d4d88e30b18aa1d2e749b54cb722b36b1eb6)
41
+ * removal `fetchFundingFee/s` (#14675) [9ae8916903](https://github.com/ccxt/ccxt/commits/9ae8916903dd314f08b1e9bdd8fbfb6a4927c32c)
42
+ * 4.2.85 [12eafcfb1a](https://github.com/ccxt/ccxt/commits/12eafcfb1a0df69923268d7681f288fe2a3c17a2)
43
+
44
+
45
+ ## 4.2.84 (2024-03-26)
46
+
47
+ * fix(kucoin): funds should truncate with quoteIncrement when it's market order (#21903) [6ed3f39902](https://github.com/ccxt/ccxt/commits/6ed3f39902e9aa21c0e502c8b98a4e44a7abfa30)
48
+ * fix(coinex): parsePosition obtains correct symbol (#21923) [9516629cc9](https://github.com/ccxt/ccxt/commits/9516629cc920fd8d49cf98b6c8fbdfdc4c4259ff)
49
+ * bybit: update (#21929) [e43fbfb88c](https://github.com/ccxt/ccxt/commits/e43fbfb88ca0a453abf8884bfc1ad32e09f001a8)
50
+ * 4.2.84 [b827ed1e4a](https://github.com/ccxt/ccxt/commits/b827ed1e4a086093dac8a4dc2fafba3248e8fd9e)
51
+
52
+
53
+ ## 4.2.83 (2024-03-25)
54
+
55
+ * bitget DEGEN > DegenReborn mapping [fbb04b6688](https://github.com/ccxt/ccxt/commits/fbb04b66888b2d092081d4fe6b8a2336427a9064)
56
+ * fix(okx): createOrderWs return type (#21893) [d51e5d0020](https://github.com/ccxt/ccxt/commits/d51e5d00208f37eb2569e8c94b091f36d1c7e323)
57
+ * chore: remove repetitive words (#21906) [e737ce2aa5](https://github.com/ccxt/ccxt/commits/e737ce2aa50ac41a903ed3a6a6ab7e1814f092cc)
58
+ * fix(hyperliquid): setmarginMOde (#21909) [da5bc96345](https://github.com/ccxt/ccxt/commits/da5bc96345ddb91c0b21a7f8cb7e446d08037b7d)
59
+ * fix(doc): remove redundant n char (#21910) [b08727566b](https://github.com/ccxt/ccxt/commits/b08727566b194a623fbcf7a833ce6c67a0d83e12)
60
+ * feat(cli.cs): get keys also from keys.local.json (#21899) [8a16c4b5c9](https://github.com/ccxt/ccxt/commits/8a16c4b5c9594ff4a33dcfb2b02bbcd76117ab3f)
61
+ * fix(bitmart): watchPostions trying to access undefined (#21901) [0a600b909b](https://github.com/ccxt/ccxt/commits/0a600b909b4a08c4307776b86e9eecb74ac74f36)
62
+ * fix(exchange): type FetchMarkets (#21911) [dfdb7ea38c](https://github.com/ccxt/ccxt/commits/dfdb7ea38ce9b5c630bebd9fd557c1f2d6e83d1a)
63
+ * bithumb: add pro (#21866) [913daff487](https://github.com/ccxt/ccxt/commits/913daff4872d2cb54f43e8bfcd93cebd132de301)
64
+ * Bitstamp fetch trading fee update (#21864) [49b99cfb83](https://github.com/ccxt/ccxt/commits/49b99cfb8328498cc1943475f1cbae394fa716c6)
65
+ * feat(deribit): fetchOHLCV pagination (#21917) [f9892d4101](https://github.com/ccxt/ccxt/commits/f9892d4101ea55598edf079e58df2ce3a5a57be3)
66
+ * 4.2.83 [1e7420816a](https://github.com/ccxt/ccxt/commits/1e7420816a99ce1640dcdbbcfd693c873a66ca48)
67
+
68
+
69
+ ## 4.2.82 (2024-03-24)
70
+
71
+ * deribit: parseOption fix currency code bug (#21888) [0468e5a74c](https://github.com/ccxt/ccxt/commits/0468e5a74cee3bf37d06d46058692a8581945feb)
72
+ * delta: add fetchOption (#21879) [2fa0ec35bf](https://github.com/ccxt/ccxt/commits/2fa0ec35bfaba3a0cb06cca020f7313ed039cfa2)
73
+ * okx: add fetchOption, fetchOptionChain (#21881) [022adb9f4d](https://github.com/ccxt/ccxt/commits/022adb9f4dd1cb002420c5c4a28cf84282ee964f)
74
+ * fix(hyperliquid): reduceOnly order (#21890) [0e7b9b1f27](https://github.com/ccxt/ccxt/commits/0e7b9b1f2715d9bb5871dbb777010805f039e929)
75
+ * fix(hyperliquid): handlePublicAddress empty handling (#21891) [683f9b4bf8](https://github.com/ccxt/ccxt/commits/683f9b4bf85f9fc0d86aee80078d702e93d1df0e)
76
+ * 4.2.82 [9b5c22de67](https://github.com/ccxt/ccxt/commits/9b5c22de67ea81131fbd931f7e668ea97917b998)
77
+
78
+
79
+ ## 4.2.81 (2024-03-23)
80
+
81
+ * binance: add fetchOption (#21877) [cc757ff095](https://github.com/ccxt/ccxt/commits/cc757ff095bf68d3573b83f5ff572ea7c75dcc2e)
82
+ * gate: add fetchOption, fetchOptionChain (#21880) [da56c43582](https://github.com/ccxt/ccxt/commits/da56c4358294805eba071647ef34750cd8f1e945)
83
+ * bybit: add fetchOption, fetchOptionChain (#21878) [bca4ed912d](https://github.com/ccxt/ccxt/commits/bca4ed912d306cd394b649f0144a950fb3df4e33)
84
+ * fix(okx): withdraw password requirement removal (#21882) [46e011915c](https://github.com/ccxt/ccxt/commits/46e011915c9dc220adda2e1bec99a0fec00aa766)
85
+ * 4.2.81 [8bfd7383ae](https://github.com/ccxt/ccxt/commits/8bfd7383ae706332f67d64ede8b7393bee571026)
86
+
87
+
1
88
  ## 4.2.80 (2024-03-22)
2
89
 
3
90
  * chore(exchange): marketIds, marketSymbols, marketCodes parameter type (#21761) [d5f1c28cae](https://github.com/ccxt/ccxt/commits/d5f1c28cae693e360ffaf60c8d5672e7cba24849)
package/README.md CHANGED
@@ -20,7 +20,6 @@ Current feature list:
20
20
 
21
21
 
22
22
  ## Sponsored Promotion
23
- [![bitget](https://github.com/ccxt/ccxt/assets/43336371/71359af3-c78f-4077-a64c-ac0bfe1fa01c)](https://www.bitget.com/events/competition/86c98f96df155e6bb397e866dcd86afc?channelCode=ccxt&vipCode=tg9j)
24
23
 
25
24
  ## See Also
26
25
 
@@ -53,7 +52,7 @@ Current feature list:
53
52
  | [![okx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.okx.com/join/CCXT2023) | okx | [OKX](https://www.okx.com/join/CCXT2023) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://www.okx.com/docs-v5/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with OKX using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.okx.com/join/CCXT2023) |
54
53
  | [![woo](https://user-images.githubusercontent.com/1294454/150730761-1a00e5e0-d28c-480f-9e65-089ce3e6ef3b.jpg)](https://x.woo.org/register?ref=YWOWC96B) | woo | [WOO X](https://x.woo.org/register?ref=YWOWC96B) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.woo.org/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOO X using CCXT's referral link for a 35% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d35%25&color=orange)](https://x.woo.org/register?ref=YWOWC96B) |
55
54
 
56
- ## Supported Cryptocurrency Exchange Markets
55
+ ## Supported Cryptocurrency Exchanges
57
56
 
58
57
  The CCXT library currently supports the following 97 cryptocurrency exchange markets and trading APIs:
59
58
 
@@ -213,13 +212,13 @@ console.log(version, Object.keys(exchanges));
213
212
 
214
213
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
215
214
 
216
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.87/dist/ccxt.browser.js
217
- * unpkg: https://unpkg.com/ccxt@4.2.87/dist/ccxt.browser.js
215
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js
216
+ * unpkg: https://unpkg.com/ccxt@4.2.88/dist/ccxt.browser.js
218
217
 
219
218
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
220
219
 
221
220
  ```HTML
222
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.87/dist/ccxt.browser.js"></script>
221
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.88/dist/ccxt.browser.js"></script>
223
222
  ```
224
223
 
225
224
  Creates a global `ccxt` object:
package/build.sh CHANGED
@@ -76,7 +76,7 @@ build_and_test_all () {
76
76
  # cd python
77
77
  # if ! tox run-parallel; then
78
78
  # exit 1
79
- # fi
79
+ # fi
80
80
  # cd ..
81
81
  # fi
82
82
  fi
@@ -11936,6 +11936,30 @@ class Exchange {
11936
11936
  }
11937
11937
  return parsedPrecision + '1';
11938
11938
  }
11939
+ integerPrecisionToAmount(precision) {
11940
+ /**
11941
+ * @ignore
11942
+ * @method
11943
+ * @description handles positive & negative numbers too. parsePrecision() does not handle negative numbers, but this method handles
11944
+ * @param {string} precision The number of digits to the right of the decimal
11945
+ * @returns {string} a string number equal to 1e-precision
11946
+ */
11947
+ if (precision === undefined) {
11948
+ return undefined;
11949
+ }
11950
+ if (_Precise_js__WEBPACK_IMPORTED_MODULE_10__/* .Precise */ .O.stringGe(precision, '0')) {
11951
+ return this.parsePrecision(precision);
11952
+ }
11953
+ else {
11954
+ const positivePrecisionString = _Precise_js__WEBPACK_IMPORTED_MODULE_10__/* .Precise */ .O.stringAbs(precision);
11955
+ const positivePrecision = parseInt(positivePrecisionString);
11956
+ let parsedPrecision = '1';
11957
+ for (let i = 0; i < positivePrecision - 1; i++) {
11958
+ parsedPrecision = parsedPrecision + '0';
11959
+ }
11960
+ return parsedPrecision + '0';
11961
+ }
11962
+ }
11939
11963
  async loadTimeDifference(params = {}) {
11940
11964
  const serverTime = await this.fetchTime(params);
11941
11965
  const after = this.milliseconds();
@@ -12416,8 +12440,8 @@ class Exchange {
12416
12440
  const entry = responseKeys[i];
12417
12441
  const dictionary = isArray ? entry : response[entry];
12418
12442
  const currencyId = isArray ? this.safeString(dictionary, currencyIdKey) : entry;
12419
- const currency = this.safeValue(this.currencies_by_id, currencyId);
12420
- const code = this.safeString(currency, 'code', currencyId);
12443
+ const currency = this.safeCurrency(currencyId);
12444
+ const code = this.safeString(currency, 'code');
12421
12445
  if ((codes === undefined) || (this.inArray(code, codes))) {
12422
12446
  depositWithdrawFees[code] = this.parseDepositWithdrawFee(dictionary, currency);
12423
12447
  }
@@ -20380,7 +20404,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
20380
20404
  '-4140': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
20381
20405
  '-4141': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.OperationRejected,
20382
20406
  '-4144': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol,
20383
- '-4164': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.OperationRejected,
20407
+ '-4164': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
20384
20408
  '-4165': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
20385
20409
  '-4167': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
20386
20410
  '-4168': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
@@ -27660,7 +27684,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
27660
27684
  'previousFundingDatetime': undefined,
27661
27685
  };
27662
27686
  }
27663
- parseAccountPositions(account) {
27687
+ parseAccountPositions(account, filterClosed = false) {
27664
27688
  const positions = this.safeList(account, 'positions');
27665
27689
  const assets = this.safeList(account, 'assets', []);
27666
27690
  const balances = {};
@@ -27683,7 +27707,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
27683
27707
  const code = market['linear'] ? market['quote'] : market['base'];
27684
27708
  const maintenanceMargin = this.safeString(position, 'maintMargin');
27685
27709
  // check for maintenance margin so empty positions are not returned
27686
- if ((maintenanceMargin !== '0') && (maintenanceMargin !== '0.00000000')) {
27710
+ const isPositionOpen = (maintenanceMargin !== '0') && (maintenanceMargin !== '0.00000000');
27711
+ if (!filterClosed || isPositionOpen) {
27687
27712
  // sometimes not all the codes are correctly returned...
27688
27713
  if (code in balances) {
27689
27714
  const parsed = this.parseAccountPosition(this.extend(position, {
@@ -28525,10 +28550,11 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
28525
28550
  * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data
28526
28551
  * @see https://binance-docs.github.io/apidocs/pm/en/#get-um-account-detail-user_data
28527
28552
  * @see https://binance-docs.github.io/apidocs/pm/en/#get-cm-account-detail-user_data
28528
- * @param {string[]|undefined} symbols list of unified market symbols
28553
+ * @param {string[]} [symbols] list of unified market symbols
28529
28554
  * @param {object} [params] extra parameters specific to the exchange API endpoint
28530
28555
  * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch positions in a portfolio margin account
28531
28556
  * @param {string} [params.subType] "linear" or "inverse"
28557
+ * @param {boolean} [params.filterClosed] set to true if you would like to filter out closed positions, default is false
28532
28558
  * @returns {object} data on account positions
28533
28559
  */
28534
28560
  if (symbols !== undefined) {
@@ -28565,7 +28591,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
28565
28591
  else {
28566
28592
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' fetchPositions() supports linear and inverse contracts only');
28567
28593
  }
28568
- const result = this.parseAccountPositions(response);
28594
+ let filterClosed = undefined;
28595
+ [filterClosed, params] = this.handleOptionAndParams(params, 'fetchAccountPositions', 'filterClosed', false);
28596
+ const result = this.parseAccountPositions(response, filterClosed);
28569
28597
  symbols = this.marketSymbols(symbols);
28570
28598
  return this.filterByArrayPositions(result, 'symbol', symbols, false);
28571
28599
  }
@@ -29703,7 +29731,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
29703
29731
  }
29704
29732
  await this.loadMarkets();
29705
29733
  const market = this.market(symbol);
29706
- amount = this.costToPrecision(symbol, amount);
29734
+ amount = this.amountToPrecision(symbol, amount);
29707
29735
  const request = {
29708
29736
  'type': addOrReduce,
29709
29737
  'symbol': market['id'],
@@ -46790,6 +46818,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
46790
46818
  'commonCurrencies': {
46791
46819
  'JADE': 'Jade Protocol',
46792
46820
  'DEGEN': 'DegenReborn',
46821
+ 'TONCOIN': 'TON',
46793
46822
  },
46794
46823
  'options': {
46795
46824
  'timeframes': {
@@ -47369,8 +47398,8 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47369
47398
  const data = this.safeValue(response, 'data', []);
47370
47399
  for (let i = 0; i < data.length; i++) {
47371
47400
  const entry = data[i];
47372
- const id = this.safeString(entry, 'coinId');
47373
- const code = this.safeCurrencyCode(this.safeString(entry, 'coin'));
47401
+ const id = this.safeString(entry, 'coin'); // we don't use 'coinId' as it has no use. it is 'coin' field that needs to be used in currency related endpoints (deposit, withdraw, etc..)
47402
+ const code = this.safeCurrencyCode(id);
47374
47403
  const chains = this.safeValue(entry, 'chains', []);
47375
47404
  const networks = {};
47376
47405
  let deposit = false;
@@ -47499,7 +47528,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47499
47528
  }
47500
47529
  params = this.omit(params, 'code');
47501
47530
  const currency = this.currency(code);
47502
- request['coin'] = currency['code'];
47531
+ request['coin'] = currency['id'];
47503
47532
  response = await this.privateMarginGetV2MarginCrossedTierData(this.extend(request, params));
47504
47533
  }
47505
47534
  else {
@@ -47655,7 +47684,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47655
47684
  since = this.milliseconds() - 7776000000; // 90 days
47656
47685
  }
47657
47686
  let request = {
47658
- 'coin': currency['code'],
47687
+ 'coin': currency['id'],
47659
47688
  'startTime': since,
47660
47689
  'endTime': this.milliseconds(),
47661
47690
  };
@@ -47714,7 +47743,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47714
47743
  const currency = this.currency(code);
47715
47744
  const networkId = this.networkCodeToId(chain);
47716
47745
  const request = {
47717
- 'coin': currency['code'],
47746
+ 'coin': currency['id'],
47718
47747
  'address': address,
47719
47748
  'chain': networkId,
47720
47749
  'size': amount,
@@ -47800,7 +47829,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47800
47829
  since = this.milliseconds() - 7776000000; // 90 days
47801
47830
  }
47802
47831
  let request = {
47803
- 'coin': currency['code'],
47832
+ 'coin': currency['id'],
47804
47833
  'startTime': since,
47805
47834
  'endTime': this.milliseconds(),
47806
47835
  };
@@ -47943,7 +47972,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
47943
47972
  }
47944
47973
  const currency = this.currency(code);
47945
47974
  const request = {
47946
- 'coin': currency['code'],
47975
+ 'coin': currency['id'],
47947
47976
  };
47948
47977
  if (networkId !== undefined) {
47949
47978
  request['chain'] = networkId;
@@ -51396,7 +51425,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
51396
51425
  let request = {};
51397
51426
  if (code !== undefined) {
51398
51427
  currency = this.currency(code);
51399
- request['coin'] = currency['code'];
51428
+ request['coin'] = currency['id'];
51400
51429
  }
51401
51430
  [request, params] = this.handleUntilOption('endTime', request, params);
51402
51431
  if (since !== undefined) {
@@ -52835,7 +52864,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
52835
52864
  type = this.safeString(accountsByType, fromAccount);
52836
52865
  const currency = this.currency(code);
52837
52866
  let request = {
52838
- 'coin': currency['code'],
52867
+ 'coin': currency['id'],
52839
52868
  'fromType': type,
52840
52869
  };
52841
52870
  if (since !== undefined) {
@@ -52894,7 +52923,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
52894
52923
  'fromType': fromType,
52895
52924
  'toType': toType,
52896
52925
  'amount': amount,
52897
- 'coin': currency['code'],
52926
+ 'coin': currency['id'],
52898
52927
  };
52899
52928
  const symbol = this.safeString(params, 'symbol');
52900
52929
  params = this.omit(params, 'symbol');
@@ -53081,7 +53110,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53081
53110
  await this.loadMarkets();
53082
53111
  const currency = this.currency(code);
53083
53112
  const request = {
53084
- 'coin': currency['code'],
53113
+ 'coin': currency['id'],
53085
53114
  'borrowAmount': this.currencyToPrecision(code, amount),
53086
53115
  };
53087
53116
  const response = await this.privateMarginPostV2MarginCrossedAccountBorrow(this.extend(request, params));
@@ -53116,7 +53145,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53116
53145
  const currency = this.currency(code);
53117
53146
  const market = this.market(symbol);
53118
53147
  const request = {
53119
- 'coin': currency['code'],
53148
+ 'coin': currency['id'],
53120
53149
  'borrowAmount': this.currencyToPrecision(code, amount),
53121
53150
  'symbol': market['id'],
53122
53151
  };
@@ -53153,7 +53182,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53153
53182
  const currency = this.currency(code);
53154
53183
  const market = this.market(symbol);
53155
53184
  const request = {
53156
- 'coin': currency['code'],
53185
+ 'coin': currency['id'],
53157
53186
  'repayAmount': this.currencyToPrecision(code, amount),
53158
53187
  'symbol': market['id'],
53159
53188
  };
@@ -53189,7 +53218,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53189
53218
  await this.loadMarkets();
53190
53219
  const currency = this.currency(code);
53191
53220
  const request = {
53192
- 'coin': currency['code'],
53221
+ 'coin': currency['id'],
53193
53222
  'repayAmount': this.currencyToPrecision(code, amount),
53194
53223
  };
53195
53224
  const response = await this.privateMarginPostV2MarginCrossedAccountRepay(this.extend(request, params));
@@ -53551,7 +53580,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53551
53580
  await this.loadMarkets();
53552
53581
  const currency = this.currency(code);
53553
53582
  const request = {
53554
- 'coin': currency['code'],
53583
+ 'coin': currency['id'],
53555
53584
  };
53556
53585
  const response = await this.privateMarginGetV2MarginCrossedInterestRateAndLimit(this.extend(request, params));
53557
53586
  //
@@ -53646,7 +53675,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
53646
53675
  let currency = undefined;
53647
53676
  if (code !== undefined) {
53648
53677
  currency = this.currency(code);
53649
- request['coin'] = currency['code'];
53678
+ request['coin'] = currency['id'];
53650
53679
  }
53651
53680
  if (since !== undefined) {
53652
53681
  request['startTime'] = since;
@@ -120407,7 +120436,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
120407
120436
  //
120408
120437
  const result = this.safeDict(response, 'result', {});
120409
120438
  const data = this.safeList(result, 'data', []);
120410
- return this.parsePosition(data[0], market);
120439
+ return this.parsePosition(this.safeDict(data, 0), market);
120411
120440
  }
120412
120441
  async fetchPositions(symbols = undefined, params = {}) {
120413
120442
  /**
@@ -138796,7 +138825,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
138796
138825
  await this.loadMarkets();
138797
138826
  const currency = this.currency(code);
138798
138827
  const request = {
138799
- 'currency': currency['id'],
138828
+ 'currency': currency['id'], // todo: currencies have network-junctions
138800
138829
  };
138801
138830
  const response = await this.privateWalletGetDepositAddress(this.extend(request, params));
138802
138831
  const addresses = this.safeValue(response, 'multichain_addresses');
@@ -138847,7 +138876,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
138847
138876
  const rawNetwork = this.safeStringUpper(params, 'network');
138848
138877
  params = this.omit(params, 'network');
138849
138878
  const request = {
138850
- 'currency': currency['id'],
138879
+ 'currency': currency['id'], // todo: currencies have network-junctions
138851
138880
  };
138852
138881
  const response = await this.privateWalletGetDepositAddress(this.extend(request, params));
138853
138882
  //
@@ -140463,7 +140492,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
140463
140492
  let currency = undefined;
140464
140493
  if (code !== undefined) {
140465
140494
  currency = this.currency(code);
140466
- request['currency'] = currency['id'];
140495
+ request['currency'] = currency['id']; // todo: currencies have network-junctions
140467
140496
  }
140468
140497
  if (limit !== undefined) {
140469
140498
  request['limit'] = limit;
@@ -140501,7 +140530,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
140501
140530
  let currency = undefined;
140502
140531
  if (code !== undefined) {
140503
140532
  currency = this.currency(code);
140504
- request['currency'] = currency['id'];
140533
+ request['currency'] = currency['id']; // todo: currencies have network-junctions
140505
140534
  }
140506
140535
  if (limit !== undefined) {
140507
140536
  request['limit'] = limit;
@@ -140548,7 +140577,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
140548
140577
  params = this.omit(params, 'network');
140549
140578
  }
140550
140579
  else {
140551
- request['chain'] = currency['id'];
140580
+ request['chain'] = currency['id']; // todo: currencies have network-junctions
140552
140581
  }
140553
140582
  const response = await this.privateWithdrawalsPostWithdrawals(this.extend(request, params));
140554
140583
  //
@@ -142082,7 +142111,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
142082
142111
  params = this.omit(params, 'symbol');
142083
142112
  }
142084
142113
  if ((toId === 'futures') || (toId === 'delivery') || (fromId === 'futures') || (fromId === 'delivery')) {
142085
- request['settle'] = currency['id'];
142114
+ request['settle'] = currency['id']; // todo: currencies have network-junctions
142086
142115
  }
142087
142116
  const response = await this.privateWalletPostTransfers(this.extend(request, params));
142088
142117
  //
@@ -143390,7 +143419,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
143390
143419
  if ((type === 'spot') || (type === 'margin')) {
143391
143420
  if (code !== undefined) {
143392
143421
  currency = this.currency(code);
143393
- request['currency'] = currency['id'];
143422
+ request['currency'] = currency['id']; // todo: currencies have network-junctions
143394
143423
  }
143395
143424
  }
143396
143425
  if ((type === 'swap') || (type === 'future')) {
@@ -144209,7 +144238,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
144209
144238
  await this.loadMarkets();
144210
144239
  const currency = this.currency(code);
144211
144240
  const request = {
144212
- 'underlying': currency['code'] + '_USDT',
144241
+ 'underlying': currency['code'] + '_USDT', // todo: currency['id'].toUpperCase () & network junctions
144213
144242
  };
144214
144243
  const response = await this.publicOptionsGetContracts(this.extend(request, params));
144215
144244
  //
@@ -172734,7 +172763,8 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
172734
172763
  // swap == perpetual
172735
172764
  let settle = undefined;
172736
172765
  let settleId = undefined;
172737
- const amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'contractValueTradePrecision', '0')));
172766
+ const cvtp = this.safeString(market, 'contractValueTradePrecision');
172767
+ const amountPrecision = this.parseNumber(this.integerPrecisionToAmount(cvtp));
172738
172768
  const pricePrecision = this.safeNumber(market, 'tickSize');
172739
172769
  const contract = (swap || future || index);
172740
172770
  const swapOrFutures = (swap || future);
@@ -178622,9 +178652,9 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
178622
178652
  * @method
178623
178653
  * @name kucoin#fetchBalance
178624
178654
  * @description query for balance and get the amount of funds available for trading or funds locked in orders
178625
- * @see https://docs.kucoin.com/#list-accounts
178626
178655
  * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf
178627
- * @see https://docs.kucoin.com/#query-isolated-margin-account-info
178656
+ * @see https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-margin
178657
+ * @see https://www.kucoin.com/docs/rest/funding/funding-overview/get-account-detail-isolated-margin
178628
178658
  * @param {object} [params] extra parameters specific to the exchange API endpoint
178629
178659
  * @param {object} [params.marginMode] 'cross' or 'isolated', margin type for fetching margin balance
178630
178660
  * @param {object} [params.type] extra parameters specific to the exchange API endpoint
@@ -178651,7 +178681,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
178651
178681
  let response = undefined;
178652
178682
  const request = {};
178653
178683
  const isolated = (marginMode === 'isolated') || (type === 'isolated');
178654
- const cross = (marginMode === 'cross') || (type === 'cross');
178684
+ const cross = (marginMode === 'cross') || (type === 'margin');
178655
178685
  if (isolated) {
178656
178686
  if (currency !== undefined) {
178657
178687
  request['balanceCurrency'] = currency['id'];
@@ -178721,13 +178751,14 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
178721
178751
  // }
178722
178752
  // }
178723
178753
  //
178724
- const data = this.safeList(response, 'data', []);
178754
+ let data = undefined;
178725
178755
  const result = {
178726
178756
  'info': response,
178727
178757
  'timestamp': undefined,
178728
178758
  'datetime': undefined,
178729
178759
  };
178730
178760
  if (isolated) {
178761
+ data = this.safeDict(response, 'data', {});
178731
178762
  const assets = this.safeValue(data, 'assets', data);
178732
178763
  for (let i = 0; i < assets.length; i++) {
178733
178764
  const entry = assets[i];
@@ -178744,6 +178775,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
178744
178775
  }
178745
178776
  }
178746
178777
  else if (cross) {
178778
+ data = this.safeDict(response, 'data', {});
178747
178779
  const accounts = this.safeList(data, 'accounts', []);
178748
178780
  for (let i = 0; i < accounts.length; i++) {
178749
178781
  const balance = accounts[i];
@@ -178753,6 +178785,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
178753
178785
  }
178754
178786
  }
178755
178787
  else {
178788
+ data = this.safeList(response, 'data', []);
178756
178789
  for (let i = 0; i < data.length; i++) {
178757
178790
  const balance = data[i];
178758
178791
  const balanceType = this.safeString(balance, 'type');
@@ -197008,7 +197041,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
197008
197041
  }
197009
197042
  }
197010
197043
  if (result === undefined) {
197011
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidAddress(this.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using the MEXC platform');
197044
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidAddress(this.id + ' fetchDepositAddress() cannot find a deposit address for ' + code + ', and network' + network + 'consider creating one using .createDepositAddress() method or in MEXC website');
197012
197045
  }
197013
197046
  return result;
197014
197047
  }
@@ -324170,9 +324203,11 @@ __webpack_require__.r(__webpack_exports__);
324170
324203
  /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.BadSymbol),
324171
324204
  /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.BaseError),
324172
324205
  /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.CancelPending),
324206
+ /* harmony export */ ContractUnavailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.ContractUnavailable),
324173
324207
  /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.DDoSProtection),
324174
324208
  /* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.DuplicateOrderId),
324175
324209
  /* harmony export */ Exchange: () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
324210
+ /* harmony export */ ExchangeClosedByUser: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.ExchangeClosedByUser),
324176
324211
  /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.ExchangeError),
324177
324212
  /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.ExchangeNotAvailable),
324178
324213
  /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.InsufficientFunds),
@@ -324185,12 +324220,15 @@ __webpack_require__.r(__webpack_exports__);
324185
324220
  /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.NotSupported),
324186
324221
  /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.NullResponse),
324187
324222
  /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OnMaintenance),
324223
+ /* harmony export */ OperationFailed: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OperationFailed),
324224
+ /* harmony export */ OperationRejected: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OperationRejected),
324188
324225
  /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OrderImmediatelyFillable),
324189
324226
  /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OrderNotCached),
324190
324227
  /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OrderNotFillable),
324191
324228
  /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.OrderNotFound),
324192
324229
  /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.PermissionDenied),
324193
324230
  /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_168__.O),
324231
+ /* harmony export */ ProxyError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.ProxyError),
324194
324232
  /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.RateLimitExceeded),
324195
324233
  /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_170__.RequestTimeout),
324196
324234
  /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
@@ -324508,7 +324546,7 @@ SOFTWARE.
324508
324546
 
324509
324547
  //-----------------------------------------------------------------------------
324510
324548
  // this is updated by vss.js when building
324511
- const version = '4.2.87';
324549
+ const version = '4.2.88';
324512
324550
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
324513
324551
  //-----------------------------------------------------------------------------
324514
324552