ccxt 4.3.58 → 4.3.59

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 (59) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +4 -2
  4. package/dist/cjs/src/base/Exchange.js +4 -4
  5. package/dist/cjs/src/base/errors.js +22 -22
  6. package/dist/cjs/src/bingx.js +52 -7
  7. package/dist/cjs/src/bitmart.js +1 -0
  8. package/dist/cjs/src/btcbox.js +149 -7
  9. package/dist/cjs/src/bybit.js +2 -2
  10. package/dist/cjs/src/deribit.js +15 -1
  11. package/dist/cjs/src/digifinex.js +32 -7
  12. package/dist/cjs/src/gate.js +15 -15
  13. package/dist/cjs/src/htx.js +7 -7
  14. package/dist/cjs/src/hyperliquid.js +107 -1
  15. package/dist/cjs/src/mexc.js +11 -11
  16. package/dist/cjs/src/pro/binance.js +11 -13
  17. package/dist/cjs/src/pro/bingx.js +11 -8
  18. package/dist/cjs/src/pro/xt.js +1108 -0
  19. package/dist/cjs/src/upbit.js +148 -49
  20. package/dist/cjs/src/xt.js +72 -7
  21. package/js/ccxt.d.ts +6 -3
  22. package/js/ccxt.js +5 -3
  23. package/js/src/abstract/bitmart.d.ts +1 -0
  24. package/js/src/abstract/btcbox.d.ts +1 -0
  25. package/js/src/abstract/upbit.d.ts +3 -0
  26. package/js/src/abstract/xt.d.ts +1 -0
  27. package/js/src/base/Exchange.d.ts +3 -3
  28. package/js/src/base/Exchange.js +5 -5
  29. package/js/src/base/errorHierarchy.d.ts +5 -5
  30. package/js/src/base/errorHierarchy.js +5 -5
  31. package/js/src/base/errors.d.ts +15 -15
  32. package/js/src/base/errors.js +22 -22
  33. package/js/src/bingx.js +52 -7
  34. package/js/src/bitmart.js +1 -0
  35. package/js/src/btcbox.d.ts +4 -1
  36. package/js/src/btcbox.js +149 -7
  37. package/js/src/bybit.js +2 -2
  38. package/js/src/deribit.d.ts +1 -1
  39. package/js/src/deribit.js +15 -1
  40. package/js/src/digifinex.d.ts +3 -2
  41. package/js/src/digifinex.js +32 -7
  42. package/js/src/gate.js +15 -15
  43. package/js/src/htx.js +7 -7
  44. package/js/src/hyperliquid.d.ts +3 -1
  45. package/js/src/hyperliquid.js +107 -1
  46. package/js/src/mexc.js +11 -11
  47. package/js/src/pro/binance.js +11 -13
  48. package/js/src/pro/bingx.js +11 -8
  49. package/js/src/pro/bitmart.d.ts +3 -3
  50. package/js/src/pro/bitopro.d.ts +2 -2
  51. package/js/src/pro/coincheck.d.ts +2 -2
  52. package/js/src/pro/coinone.d.ts +2 -2
  53. package/js/src/pro/hyperliquid.d.ts +2 -2
  54. package/js/src/pro/xt.d.ts +31 -0
  55. package/js/src/pro/xt.js +1109 -0
  56. package/js/src/upbit.d.ts +0 -1
  57. package/js/src/upbit.js +148 -49
  58. package/js/src/xt.js +72 -7
  59. package/package.json +1 -1
package/js/src/upbit.d.ts CHANGED
@@ -62,7 +62,6 @@ export default class upbit extends Exchange {
62
62
  parseTransaction(transaction: Dict, currency?: Currency): Transaction;
63
63
  parseOrderStatus(status: Str): string;
64
64
  parseOrder(order: Dict, market?: Market): Order;
65
- fetchOrdersByState(state: any, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
66
65
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
67
66
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
68
67
  fetchCanceledOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
package/js/src/upbit.js CHANGED
@@ -130,6 +130,9 @@ export default class upbit extends Exchange {
130
130
  'orders/chance',
131
131
  'order',
132
132
  'orders',
133
+ 'orders/closed',
134
+ 'orders/open',
135
+ 'orders/uuids',
133
136
  'withdraws',
134
137
  'withdraw',
135
138
  'withdraws/chance',
@@ -1463,6 +1466,28 @@ export default class upbit extends Exchange {
1463
1466
  // ],
1464
1467
  // }
1465
1468
  //
1469
+ // fetchOpenOrders, fetchClosedOrders, fetchCanceledOrders
1470
+ //
1471
+ // {
1472
+ // "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1473
+ // "side": "ask",
1474
+ // "ord_type": "limit",
1475
+ // "price": "1.5",
1476
+ // "state": "wait",
1477
+ // "market": "SGD-XRP",
1478
+ // "created_at": "2024-06-05T09:37:10Z",
1479
+ // "volume": "10",
1480
+ // "remaining_volume": "10",
1481
+ // "reserved_fee": "0",
1482
+ // "remaining_fee": "0",
1483
+ // "paid_fee": "0",
1484
+ // "locked": "10",
1485
+ // "executed_volume": "0",
1486
+ // "executed_funds": "0",
1487
+ // "trades_count": 0,
1488
+ // "time_in_force": "ioc"
1489
+ // }
1490
+ //
1466
1491
  const id = this.safeString(order, 'uuid');
1467
1492
  let side = this.safeString(order, 'side');
1468
1493
  if (side === 'bid') {
@@ -1533,7 +1558,7 @@ export default class upbit extends Exchange {
1533
1558
  'lastTradeTimestamp': lastTradeTimestamp,
1534
1559
  'symbol': market['symbol'],
1535
1560
  'type': type,
1536
- 'timeInForce': undefined,
1561
+ 'timeInForce': this.safeStringUpper(order, 'time_in_force'),
1537
1562
  'postOnly': undefined,
1538
1563
  'side': side,
1539
1564
  'price': price,
@@ -1549,84 +1574,163 @@ export default class upbit extends Exchange {
1549
1574
  'trades': trades,
1550
1575
  });
1551
1576
  }
1552
- async fetchOrdersByState(state, symbol = undefined, since = undefined, limit = undefined, params = {}) {
1577
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1578
+ /**
1579
+ * @method
1580
+ * @name upbit#fetchOpenOrders
1581
+ * @description fetch all unfilled currently open orders
1582
+ * @see https://global-docs.upbit.com/reference/open-order
1583
+ * @param {string} symbol unified market symbol
1584
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1585
+ * @param {int} [limit] the maximum number of open order structures to retrieve
1586
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1587
+ * @param {string} [params.state] default is 'wait', set to 'watch' for stop limit orders
1588
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1589
+ */
1553
1590
  await this.loadMarkets();
1554
- const request = {
1555
- // 'market': this.marketId (symbol),
1556
- 'state': state,
1557
- // 'page': 1,
1558
- // 'order_by': 'asc',
1559
- };
1591
+ const request = {};
1560
1592
  let market = undefined;
1561
1593
  if (symbol !== undefined) {
1562
1594
  market = this.market(symbol);
1563
1595
  request['market'] = market['id'];
1564
1596
  }
1565
- const response = await this.privateGetOrders(this.extend(request, params));
1597
+ if (limit !== undefined) {
1598
+ request['limit'] = limit;
1599
+ }
1600
+ const response = await this.privateGetOrdersOpen(this.extend(request, params));
1566
1601
  //
1567
1602
  // [
1568
1603
  // {
1569
- // "uuid": "a08f09b1-1718-42e2-9358-f0e5e083d3ee",
1570
- // "side": "bid",
1604
+ // "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1605
+ // "side": "ask",
1571
1606
  // "ord_type": "limit",
1572
- // "price": "17417000.0",
1573
- // "state": "done",
1574
- // "market": "KRW-BTC",
1575
- // "created_at": "2018-04-05T14:09:14+09:00",
1576
- // "volume": "1.0",
1577
- // "remaining_volume": "0.0",
1578
- // "reserved_fee": "26125.5",
1579
- // "remaining_fee": "25974.0",
1580
- // "paid_fee": "151.5",
1581
- // "locked": "17341974.0",
1582
- // "executed_volume": "1.0",
1583
- // "trades_count":2
1584
- // },
1607
+ // "price": "1.5",
1608
+ // "state": "wait",
1609
+ // "market": "SGD-XRP",
1610
+ // "created_at": "2024-06-05T09:37:10Z",
1611
+ // "volume": "10",
1612
+ // "remaining_volume": "10",
1613
+ // "reserved_fee": "0",
1614
+ // "remaining_fee": "0",
1615
+ // "paid_fee": "0",
1616
+ // "locked": "10",
1617
+ // "executed_volume": "0",
1618
+ // "executed_funds": "0",
1619
+ // "trades_count": 0
1620
+ // }
1585
1621
  // ]
1586
1622
  //
1587
1623
  return this.parseOrders(response, market, since, limit);
1588
1624
  }
1589
- async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1590
- /**
1591
- * @method
1592
- * @name upbit#fetchOpenOrders
1593
- * @see https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1594
- * @description fetch all unfilled currently open orders
1595
- * @param {string} symbol unified market symbol
1596
- * @param {int} [since] the earliest time in ms to fetch open orders for
1597
- * @param {int} [limit] the maximum number of open orders structures to retrieve
1598
- * @param {object} [params] extra parameters specific to the exchange API endpoint
1599
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1600
- */
1601
- return await this.fetchOrdersByState('wait', symbol, since, limit, params);
1602
- }
1603
1625
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1604
1626
  /**
1605
1627
  * @method
1606
1628
  * @name upbit#fetchClosedOrders
1607
- * @see https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1608
1629
  * @description fetches information on multiple closed orders made by the user
1630
+ * @see https://global-docs.upbit.com/reference/closed-order
1609
1631
  * @param {string} symbol unified market symbol of the market orders were made in
1610
1632
  * @param {int} [since] the earliest time in ms to fetch orders for
1611
1633
  * @param {int} [limit] the maximum number of order structures to retrieve
1612
1634
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1635
+ * @param {int} [params.until] timestamp in ms of the latest order
1613
1636
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1614
1637
  */
1615
- return await this.fetchOrdersByState('done', symbol, since, limit, params);
1638
+ await this.loadMarkets();
1639
+ let request = {
1640
+ 'state': 'done',
1641
+ };
1642
+ let market = undefined;
1643
+ if (symbol !== undefined) {
1644
+ market = this.market(symbol);
1645
+ request['market'] = market['id'];
1646
+ }
1647
+ if (since !== undefined) {
1648
+ request['start_time'] = since;
1649
+ }
1650
+ if (limit !== undefined) {
1651
+ request['limit'] = limit;
1652
+ }
1653
+ [request, params] = this.handleUntilOption('end_time', request, params);
1654
+ const response = await this.privateGetOrdersClosed(this.extend(request, params));
1655
+ //
1656
+ // [
1657
+ // {
1658
+ // "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1659
+ // "side": "ask",
1660
+ // "ord_type": "limit",
1661
+ // "price": "1.5",
1662
+ // "state": "done",
1663
+ // "market": "SGD-XRP",
1664
+ // "created_at": "2024-06-05T09:37:10Z",
1665
+ // "volume": "10",
1666
+ // "remaining_volume": "10",
1667
+ // "reserved_fee": "0",
1668
+ // "remaining_fee": "0",
1669
+ // "paid_fee": "0",
1670
+ // "locked": "10",
1671
+ // "executed_volume": "0",
1672
+ // "executed_funds": "0",
1673
+ // "trades_count": 0,
1674
+ // "time_in_force": "ioc"
1675
+ // }
1676
+ // ]
1677
+ //
1678
+ return this.parseOrders(response, market, since, limit);
1616
1679
  }
1617
1680
  async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1618
1681
  /**
1619
1682
  * @method
1620
1683
  * @name upbit#fetchCanceledOrders
1621
- * @see https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1622
1684
  * @description fetches information on multiple canceled orders made by the user
1685
+ * @see https://global-docs.upbit.com/reference/closed-order
1623
1686
  * @param {string} symbol unified market symbol of the market orders were made in
1624
1687
  * @param {int} [since] timestamp in ms of the earliest order, default is undefined
1625
1688
  * @param {int} [limit] max number of orders to return, default is undefined
1626
1689
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1690
+ * @param {int} [params.until] timestamp in ms of the latest order
1627
1691
  * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1628
1692
  */
1629
- return await this.fetchOrdersByState('cancel', symbol, since, limit, params);
1693
+ await this.loadMarkets();
1694
+ let request = {
1695
+ 'state': 'cancel',
1696
+ };
1697
+ let market = undefined;
1698
+ if (symbol !== undefined) {
1699
+ market = this.market(symbol);
1700
+ request['market'] = market['id'];
1701
+ }
1702
+ if (since !== undefined) {
1703
+ request['start_time'] = since;
1704
+ }
1705
+ if (limit !== undefined) {
1706
+ request['limit'] = limit;
1707
+ }
1708
+ [request, params] = this.handleUntilOption('end_time', request, params);
1709
+ const response = await this.privateGetOrdersClosed(this.extend(request, params));
1710
+ //
1711
+ // [
1712
+ // {
1713
+ // "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1714
+ // "side": "ask",
1715
+ // "ord_type": "limit",
1716
+ // "price": "1.5",
1717
+ // "state": "cancel",
1718
+ // "market": "SGD-XRP",
1719
+ // "created_at": "2024-06-05T09:37:10Z",
1720
+ // "volume": "10",
1721
+ // "remaining_volume": "10",
1722
+ // "reserved_fee": "0",
1723
+ // "remaining_fee": "0",
1724
+ // "paid_fee": "0",
1725
+ // "locked": "10",
1726
+ // "executed_volume": "0",
1727
+ // "executed_funds": "0",
1728
+ // "trades_count": 0,
1729
+ // "time_in_force": "ioc"
1730
+ // }
1731
+ // ]
1732
+ //
1733
+ return this.parseOrders(response, market, since, limit);
1630
1734
  }
1631
1735
  async fetchOrder(id, symbol = undefined, params = {}) {
1632
1736
  /**
@@ -1898,14 +2002,9 @@ export default class upbit extends Exchange {
1898
2002
  if ((method !== 'GET') && (method !== 'DELETE')) {
1899
2003
  body = this.json(params);
1900
2004
  headers['Content-Type'] = 'application/json';
1901
- if (hasQuery) {
1902
- auth = this.urlencode(query);
1903
- }
1904
2005
  }
1905
- else {
1906
- if (hasQuery) {
1907
- auth = this.urlencode(this.keysort(query));
1908
- }
2006
+ if (hasQuery) {
2007
+ auth = this.urlencode(query);
1909
2008
  }
1910
2009
  if (auth !== undefined) {
1911
2010
  const hash = this.hash(this.encode(auth), sha512);
package/js/src/xt.js CHANGED
@@ -24,7 +24,7 @@ export default class xt extends Exchange {
24
24
  'rateLimit': 100,
25
25
  'version': 'v4',
26
26
  'certified': false,
27
- 'pro': false,
27
+ 'pro': true,
28
28
  'has': {
29
29
  'CORS': false,
30
30
  'spot': true,
@@ -219,6 +219,7 @@ export default class xt extends Exchange {
219
219
  'withdraw': 1,
220
220
  'balance/transfer': 1,
221
221
  'balance/account/transfer': 1,
222
+ 'ws-token': 1,
222
223
  },
223
224
  'delete': {
224
225
  'batch-order': 1,
@@ -1460,9 +1461,13 @@ export default class xt extends Exchange {
1460
1461
  const orderBook = this.safeValue(response, 'result', {});
1461
1462
  const timestamp = this.safeInteger2(orderBook, 'timestamp', 't');
1462
1463
  if (market['spot']) {
1463
- return this.parseOrderBook(orderBook, symbol, timestamp);
1464
+ const ob = this.parseOrderBook(orderBook, symbol, timestamp);
1465
+ ob['nonce'] = this.safeInteger(orderBook, 'lastUpdateId');
1466
+ return ob;
1464
1467
  }
1465
- return this.parseOrderBook(orderBook, symbol, timestamp, 'b', 'a');
1468
+ const swapOb = this.parseOrderBook(orderBook, symbol, timestamp, 'b', 'a');
1469
+ swapOb['nonce'] = this.safeInteger2(orderBook, 'u', 'lastUpdateId');
1470
+ return swapOb;
1466
1471
  }
1467
1472
  async fetchTicker(symbol, params = {}) {
1468
1473
  /**
@@ -1722,8 +1727,9 @@ export default class xt extends Exchange {
1722
1727
  //
1723
1728
  const marketId = this.safeString(ticker, 's');
1724
1729
  let marketType = (market !== undefined) ? market['type'] : undefined;
1730
+ const hasSpotKeys = ('cv' in ticker) || ('aq' in ticker);
1725
1731
  if (marketType === undefined) {
1726
- marketType = ('cv' in ticker) || ('aq' in ticker) ? 'spot' : 'contract';
1732
+ marketType = hasSpotKeys ? 'spot' : 'contract';
1727
1733
  }
1728
1734
  market = this.safeMarket(marketId, market, '_', marketType);
1729
1735
  const symbol = market['symbol'];
@@ -1950,6 +1956,29 @@ export default class xt extends Exchange {
1950
1956
  // "b": true
1951
1957
  // }
1952
1958
  //
1959
+ // spot: watchMyTrades
1960
+ //
1961
+ // {
1962
+ // "s": "btc_usdt", // symbol
1963
+ // "t": 1656043204763, // time
1964
+ // "i": "6316559590087251233", // tradeId
1965
+ // "oi": "6216559590087220004", // orderId
1966
+ // "p": "30000", // trade price
1967
+ // "q": "3", // qty quantity
1968
+ // "v": "90000" // volume trade amount
1969
+ // }
1970
+ //
1971
+ // spot: watchTrades
1972
+ //
1973
+ // {
1974
+ // s: 'btc_usdt',
1975
+ // i: '228825383103928709',
1976
+ // t: 1684258222702,
1977
+ // p: '27003.65',
1978
+ // q: '0.000796',
1979
+ // b: true
1980
+ // }
1981
+ //
1953
1982
  // swap and future: fetchTrades
1954
1983
  //
1955
1984
  // {
@@ -1994,10 +2023,39 @@ export default class xt extends Exchange {
1994
2023
  // "takerMaker": "TAKER"
1995
2024
  // }
1996
2025
  //
2026
+ // contract watchMyTrades
2027
+ //
2028
+ // {
2029
+ // "symbol": 'btc_usdt',
2030
+ // "orderSide": 'SELL',
2031
+ // "positionSide": 'LONG',
2032
+ // "orderId": '231485367663419328',
2033
+ // "price": '27152.7',
2034
+ // "quantity": '33',
2035
+ // "marginUnfrozen": '2.85318000',
2036
+ // "timestamp": 1684892412565
2037
+ // }
2038
+ //
2039
+ // watchMyTrades (ws, swap)
2040
+ //
2041
+ // {
2042
+ // 'fee': '0.04080840',
2043
+ // 'isMaker': False,
2044
+ // 'marginUnfrozen': '0.75711984',
2045
+ // 'orderId': '376172779053188416',
2046
+ // 'orderSide': 'BUY',
2047
+ // 'positionSide': 'LONG',
2048
+ // 'price': '3400.70',
2049
+ // 'quantity': '2',
2050
+ // 'symbol': 'eth_usdt',
2051
+ // 'timestamp': 1719388579622
2052
+ // }
2053
+ //
1997
2054
  const marketId = this.safeString2(trade, 's', 'symbol');
1998
2055
  let marketType = (market !== undefined) ? market['type'] : undefined;
2056
+ const hasSpotKeys = ('b' in trade) || ('bizType' in trade) || ('oi' in trade);
1999
2057
  if (marketType === undefined) {
2000
- marketType = ('b' in trade) || ('bizType' in trade) ? 'spot' : 'contract';
2058
+ marketType = hasSpotKeys ? 'spot' : 'contract';
2001
2059
  }
2002
2060
  market = this.safeMarket(marketId, market, '_', marketType);
2003
2061
  const bidOrAsk = this.safeString(trade, 'm');
@@ -2006,10 +2064,17 @@ export default class xt extends Exchange {
2006
2064
  side = (bidOrAsk === 'BID') ? 'buy' : 'sell';
2007
2065
  }
2008
2066
  const buyerMaker = this.safeValue(trade, 'b');
2067
+ if (buyerMaker !== undefined) {
2068
+ side = 'buy';
2069
+ }
2009
2070
  let takerOrMaker = this.safeStringLower(trade, 'takerMaker');
2010
2071
  if (buyerMaker !== undefined) {
2011
2072
  takerOrMaker = buyerMaker ? 'maker' : 'taker';
2012
2073
  }
2074
+ const isMaker = this.safeBool(trade, 'isMaker');
2075
+ if (isMaker !== undefined) {
2076
+ takerOrMaker = isMaker ? 'maker' : 'taker';
2077
+ }
2013
2078
  const timestamp = this.safeIntegerN(trade, ['t', 'time', 'timestamp']);
2014
2079
  const quantity = this.safeString2(trade, 'q', 'quantity');
2015
2080
  let amount = undefined;
@@ -2030,7 +2095,7 @@ export default class xt extends Exchange {
2030
2095
  'timestamp': timestamp,
2031
2096
  'datetime': this.iso8601(timestamp),
2032
2097
  'symbol': market['symbol'],
2033
- 'order': this.safeString(trade, 'orderId'),
2098
+ 'order': this.safeString2(trade, 'orderId', 'oi'),
2034
2099
  'type': this.safeStringLower(trade, 'orderType'),
2035
2100
  'side': side,
2036
2101
  'takerOrMaker': takerOrMaker,
@@ -4711,7 +4776,7 @@ export default class xt extends Exchange {
4711
4776
  body['media'] = id;
4712
4777
  }
4713
4778
  }
4714
- const isUndefinedBody = ((method === 'GET') || (path === 'order/{orderId}'));
4779
+ const isUndefinedBody = ((method === 'GET') || (path === 'order/{orderId}') || (path === 'ws-token'));
4715
4780
  body = isUndefinedBody ? undefined : this.json(body);
4716
4781
  let payloadString = undefined;
4717
4782
  if ((endpoint === 'spot') || (endpoint === 'user')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.3.58",
3
+ "version": "4.3.59",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",