@limitless-exchange/sdk 0.0.2 → 0.0.3

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/dist/index.js CHANGED
@@ -41,7 +41,6 @@ __export(index_exports, {
41
41
  DEFAULT_WS_URL: () => DEFAULT_WS_URL,
42
42
  HttpClient: () => HttpClient,
43
43
  MarketFetcher: () => MarketFetcher,
44
- MarketType: () => MarketType,
45
44
  MessageSigner: () => MessageSigner,
46
45
  NoOpLogger: () => NoOpLogger,
47
46
  OrderBuilder: () => OrderBuilder,
@@ -115,16 +114,11 @@ var Side = /* @__PURE__ */ ((Side2) => {
115
114
  Side2[Side2["SELL"] = 1] = "SELL";
116
115
  return Side2;
117
116
  })(Side || {});
118
- var OrderType = /* @__PURE__ */ ((OrderType3) => {
119
- OrderType3["FOK"] = "FOK";
120
- OrderType3["GTC"] = "GTC";
121
- return OrderType3;
117
+ var OrderType = /* @__PURE__ */ ((OrderType2) => {
118
+ OrderType2["FOK"] = "FOK";
119
+ OrderType2["GTC"] = "GTC";
120
+ return OrderType2;
122
121
  })(OrderType || {});
123
- var MarketType = /* @__PURE__ */ ((MarketType3) => {
124
- MarketType3["CLOB"] = "CLOB";
125
- MarketType3["NEGRISK"] = "NEGRISK";
126
- return MarketType3;
127
- })(MarketType || {});
128
122
  var SignatureType = /* @__PURE__ */ ((SignatureType2) => {
129
123
  SignatureType2[SignatureType2["EOA"] = 0] = "EOA";
130
124
  SignatureType2[SignatureType2["POLY_PROXY"] = 1] = "POLY_PROXY";
@@ -517,24 +511,31 @@ var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
517
511
  var CONTRACT_ADDRESSES = {
518
512
  // Base mainnet (chainId: 8453)
519
513
  8453: {
520
- CLOB: "0xa4409D988CA2218d956BeEFD3874100F444f0DC3",
521
- NEGRISK: "0x5a38afc17F7E97ad8d6C547ddb837E40B4aEDfC6"
514
+ USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
515
+ // Native USDC on Base
516
+ CTF: "0xC9c98965297Bc527861c898329Ee280632B76e18"
517
+ // Conditional Token Framework
522
518
  },
523
519
  // Base Sepolia testnet (chainId: 84532)
524
520
  84532: {
525
- CLOB: "0x...",
526
- // Add testnet addresses when available
527
- NEGRISK: "0x..."
521
+ USDC: "0x...",
522
+ CTF: "0x..."
528
523
  }
529
524
  };
530
- function getContractAddress(marketType, chainId = DEFAULT_CHAIN_ID) {
525
+ function getContractAddress(contractType, chainId = DEFAULT_CHAIN_ID) {
531
526
  const addresses = CONTRACT_ADDRESSES[chainId];
532
527
  if (!addresses) {
533
528
  throw new Error(
534
529
  `No contract addresses configured for chainId ${chainId}. Supported chains: ${Object.keys(CONTRACT_ADDRESSES).join(", ")}`
535
530
  );
536
531
  }
537
- return addresses[marketType];
532
+ const address = addresses[contractType];
533
+ if (!address || address === "0x...") {
534
+ throw new Error(
535
+ `Contract address for ${contractType} not available on chainId ${chainId}. Please configure the address in constants.ts or use environment variables.`
536
+ );
537
+ }
538
+ return address;
538
539
  }
539
540
 
540
541
  // src/api/http.ts
@@ -960,8 +961,7 @@ var OrderBuilder = class {
960
961
  * const fokOrder = builder.buildOrder({
961
962
  * tokenId: '123456',
962
963
  * makerAmount: 50, // 50 USDC to spend
963
- * side: Side.BUY,
964
- * marketType: MarketType.CLOB
964
+ * side: Side.BUY
965
965
  * });
966
966
  *
967
967
  * // GTC order (price + size)
@@ -969,8 +969,7 @@ var OrderBuilder = class {
969
969
  * tokenId: '123456',
970
970
  * price: 0.38,
971
971
  * size: 22.123, // Will be rounded to tick-aligned: 22.123 shares
972
- * side: Side.BUY,
973
- * marketType: MarketType.CLOB
972
+ * side: Side.BUY
974
973
  * });
975
974
  * ```
976
975
  */
@@ -1245,8 +1244,7 @@ var OrderSigner = class {
1245
1244
  * ```typescript
1246
1245
  * const signature = await signer.signOrder(unsignedOrder, {
1247
1246
  * chainId: 8453,
1248
- * contractAddress: '0x...',
1249
- * marketType: MarketType.CLOB
1247
+ * contractAddress: '0x...'
1250
1248
  * });
1251
1249
  * ```
1252
1250
  */
@@ -1254,7 +1252,7 @@ var OrderSigner = class {
1254
1252
  this.logger.debug("Signing order with EIP-712", {
1255
1253
  tokenId: order.tokenId,
1256
1254
  side: order.side,
1257
- marketType: config.marketType
1255
+ verifyingContract: config.contractAddress
1258
1256
  });
1259
1257
  const walletAddress = await this.wallet.getAddress();
1260
1258
  if (walletAddress.toLowerCase() !== order.signer.toLowerCase()) {
@@ -1479,14 +1477,221 @@ function validateSignedOrder(order) {
1479
1477
  }
1480
1478
  }
1481
1479
 
1480
+ // src/markets/fetcher.ts
1481
+ var MarketFetcher = class {
1482
+ /**
1483
+ * Creates a new market fetcher instance.
1484
+ *
1485
+ * @param httpClient - HTTP client for API requests
1486
+ * @param logger - Optional logger for debugging (default: no logging)
1487
+ *
1488
+ * @example
1489
+ * ```typescript
1490
+ * const fetcher = new MarketFetcher(httpClient);
1491
+ * ```
1492
+ */
1493
+ constructor(httpClient, logger) {
1494
+ this.httpClient = httpClient;
1495
+ this.logger = logger || new NoOpLogger();
1496
+ this.venueCache = /* @__PURE__ */ new Map();
1497
+ }
1498
+ /**
1499
+ * Gets active markets with query parameters and pagination support.
1500
+ *
1501
+ * @param params - Query parameters for filtering and pagination
1502
+ * @returns Promise resolving to active markets response
1503
+ * @throws Error if API request fails
1504
+ *
1505
+ * @example
1506
+ * ```typescript
1507
+ * // Get 8 markets sorted by LP rewards
1508
+ * const response = await fetcher.getActiveMarkets({
1509
+ * limit: 8,
1510
+ * sortBy: 'lp_rewards'
1511
+ * });
1512
+ * console.log(`Found ${response.data.length} of ${response.totalMarketsCount} markets`);
1513
+ *
1514
+ * // Get page 2
1515
+ * const page2 = await fetcher.getActiveMarkets({
1516
+ * limit: 8,
1517
+ * page: 2,
1518
+ * sortBy: 'ending_soon'
1519
+ * });
1520
+ * ```
1521
+ */
1522
+ async getActiveMarkets(params) {
1523
+ const queryParams = new URLSearchParams();
1524
+ if (params?.limit !== void 0) {
1525
+ queryParams.append("limit", params.limit.toString());
1526
+ }
1527
+ if (params?.page !== void 0) {
1528
+ queryParams.append("page", params.page.toString());
1529
+ }
1530
+ if (params?.sortBy) {
1531
+ queryParams.append("sortBy", params.sortBy);
1532
+ }
1533
+ const queryString = queryParams.toString();
1534
+ const endpoint = `/markets/active${queryString ? `?${queryString}` : ""}`;
1535
+ this.logger.debug("Fetching active markets", { params });
1536
+ try {
1537
+ const response = await this.httpClient.get(endpoint);
1538
+ this.logger.info("Active markets fetched successfully", {
1539
+ count: response.data.length,
1540
+ total: response.totalMarketsCount,
1541
+ sortBy: params?.sortBy,
1542
+ page: params?.page
1543
+ });
1544
+ return response;
1545
+ } catch (error) {
1546
+ this.logger.error("Failed to fetch active markets", error, { params });
1547
+ throw error;
1548
+ }
1549
+ }
1550
+ /**
1551
+ * Gets a single market by slug.
1552
+ *
1553
+ * @remarks
1554
+ * Automatically caches venue information for efficient order signing.
1555
+ * Always call this method before creating orders to ensure venue data
1556
+ * is available and avoid additional API requests.
1557
+ *
1558
+ * @param slug - Market slug identifier
1559
+ * @returns Promise resolving to market details
1560
+ * @throws Error if API request fails or market not found
1561
+ *
1562
+ * @example
1563
+ * ```typescript
1564
+ * const market = await fetcher.getMarket('bitcoin-price-2024');
1565
+ * console.log(`Market: ${market.title}`);
1566
+ *
1567
+ * // Venue is now cached for order signing
1568
+ * await orderClient.createOrder({
1569
+ * marketSlug: 'bitcoin-price-2024',
1570
+ * ...
1571
+ * });
1572
+ * ```
1573
+ */
1574
+ async getMarket(slug) {
1575
+ this.logger.debug("Fetching market", { slug });
1576
+ try {
1577
+ const market = await this.httpClient.get(`/markets/${slug}`);
1578
+ if (market.venue) {
1579
+ this.venueCache.set(slug, market.venue);
1580
+ this.logger.debug("Venue cached for order signing", {
1581
+ slug,
1582
+ exchange: market.venue.exchange,
1583
+ adapter: market.venue.adapter,
1584
+ cacheSize: this.venueCache.size
1585
+ });
1586
+ } else {
1587
+ this.logger.warn("Market has no venue data", { slug });
1588
+ }
1589
+ this.logger.info("Market fetched successfully", {
1590
+ slug,
1591
+ title: market.title
1592
+ });
1593
+ return market;
1594
+ } catch (error) {
1595
+ this.logger.error("Failed to fetch market", error, { slug });
1596
+ throw error;
1597
+ }
1598
+ }
1599
+ /**
1600
+ * Gets cached venue information for a market.
1601
+ *
1602
+ * @remarks
1603
+ * Returns venue data previously cached by getMarket() call.
1604
+ * Used internally by OrderClient for efficient order signing.
1605
+ *
1606
+ * @param slug - Market slug identifier
1607
+ * @returns Cached venue information, or undefined if not in cache
1608
+ *
1609
+ * @example
1610
+ * ```typescript
1611
+ * const venue = fetcher.getVenue('bitcoin-price-2024');
1612
+ * if (venue) {
1613
+ * console.log(`Exchange: ${venue.exchange}`);
1614
+ * }
1615
+ * ```
1616
+ */
1617
+ getVenue(slug) {
1618
+ const venue = this.venueCache.get(slug);
1619
+ if (venue) {
1620
+ this.logger.debug("Venue cache hit", {
1621
+ slug,
1622
+ exchange: venue.exchange
1623
+ });
1624
+ } else {
1625
+ this.logger.debug("Venue cache miss", { slug });
1626
+ }
1627
+ return venue;
1628
+ }
1629
+ /**
1630
+ * Gets the orderbook for a CLOB market.
1631
+ *
1632
+ * @param slug - Market slug identifier
1633
+ * @returns Promise resolving to orderbook data
1634
+ * @throws Error if API request fails
1635
+ *
1636
+ * @example
1637
+ * ```typescript
1638
+ * const orderbook = await fetcher.getOrderBook('bitcoin-price-2024');
1639
+ * console.log(`Bids: ${orderbook.bids.length}, Asks: ${orderbook.asks.length}`);
1640
+ * ```
1641
+ */
1642
+ async getOrderBook(slug) {
1643
+ this.logger.debug("Fetching orderbook", { slug });
1644
+ try {
1645
+ const orderbook = await this.httpClient.get(
1646
+ `/markets/${slug}/orderbook`
1647
+ );
1648
+ this.logger.info("Orderbook fetched successfully", {
1649
+ slug,
1650
+ bids: orderbook.bids.length,
1651
+ asks: orderbook.asks.length,
1652
+ tokenId: orderbook.tokenId
1653
+ });
1654
+ return orderbook;
1655
+ } catch (error) {
1656
+ this.logger.error("Failed to fetch orderbook", error, { slug });
1657
+ throw error;
1658
+ }
1659
+ }
1660
+ /**
1661
+ * Gets the current price for a token.
1662
+ *
1663
+ * @param tokenId - Token ID
1664
+ * @returns Promise resolving to price information
1665
+ * @throws Error if API request fails
1666
+ *
1667
+ * @example
1668
+ * ```typescript
1669
+ * const price = await fetcher.getPrice('123456');
1670
+ * console.log(`Current price: ${price.price}`);
1671
+ * ```
1672
+ */
1673
+ async getPrice(tokenId) {
1674
+ this.logger.debug("Fetching price", { tokenId });
1675
+ try {
1676
+ const price = await this.httpClient.get(`/prices/${tokenId}`);
1677
+ this.logger.info("Price fetched successfully", {
1678
+ tokenId,
1679
+ price: price.price
1680
+ });
1681
+ return price;
1682
+ } catch (error) {
1683
+ this.logger.error("Failed to fetch price", error, { tokenId });
1684
+ throw error;
1685
+ }
1686
+ }
1687
+ };
1688
+
1482
1689
  // src/orders/client.ts
1483
1690
  var OrderClient = class {
1484
1691
  /**
1485
1692
  * Creates a new order client instance.
1486
1693
  *
1487
1694
  * @param config - Order client configuration
1488
- *
1489
- * @throws Error if neither marketType nor signingConfig is provided
1490
1695
  */
1491
1696
  constructor(config) {
1492
1697
  this.httpClient = config.httpClient;
@@ -1495,32 +1700,18 @@ var OrderClient = class {
1495
1700
  const feeRateBps = config.userData.feeRateBps;
1496
1701
  this.orderBuilder = new OrderBuilder(config.wallet.address, feeRateBps, 1e-3);
1497
1702
  this.orderSigner = new OrderSigner(config.wallet, this.logger);
1703
+ this.marketFetcher = config.marketFetcher || new MarketFetcher(config.httpClient, this.logger);
1498
1704
  if (config.signingConfig) {
1499
1705
  this.signingConfig = config.signingConfig;
1500
- } else if (config.marketType) {
1501
- const chainId = parseInt(process.env.CHAIN_ID || "8453");
1502
- const contractAddress = config.marketType === "NEGRISK" /* NEGRISK */ ? process.env.NEGRISK_CONTRACT_ADDRESS || getContractAddress("NEGRISK", chainId) : process.env.CLOB_CONTRACT_ADDRESS || getContractAddress("CLOB", chainId);
1503
- this.signingConfig = {
1504
- chainId,
1505
- contractAddress,
1506
- marketType: config.marketType
1507
- };
1508
- this.logger.info("Auto-configured signing", {
1509
- chainId,
1510
- contractAddress,
1511
- marketType: config.marketType
1512
- });
1513
1706
  } else {
1514
1707
  const chainId = parseInt(process.env.CHAIN_ID || "8453");
1515
- const contractAddress = process.env.CLOB_CONTRACT_ADDRESS || getContractAddress("CLOB", chainId);
1708
+ const contractAddress = ZERO_ADDRESS;
1516
1709
  this.signingConfig = {
1517
- chainId,
1518
- contractAddress,
1519
- marketType: "CLOB" /* CLOB */
1520
- };
1521
- this.logger.debug("Using default CLOB configuration", {
1522
1710
  chainId,
1523
1711
  contractAddress
1712
+ };
1713
+ this.logger.info("Auto-configured signing (contract address from venue)", {
1714
+ chainId
1524
1715
  });
1525
1716
  }
1526
1717
  }
@@ -1529,24 +1720,31 @@ var OrderClient = class {
1529
1720
  *
1530
1721
  * @remarks
1531
1722
  * This method handles the complete order creation flow:
1532
- * 1. Build unsigned order
1533
- * 2. Sign with EIP-712
1534
- * 3. Submit to API
1723
+ * 1. Resolve venue address (from cache or API)
1724
+ * 2. Build unsigned order
1725
+ * 3. Sign with EIP-712 using venue.exchange as verifyingContract
1726
+ * 4. Submit to API
1727
+ *
1728
+ * Performance best practice: Always call marketFetcher.getMarket(marketSlug)
1729
+ * before createOrder() to cache venue data and avoid additional API requests.
1535
1730
  *
1536
1731
  * @param params - Order parameters
1537
1732
  * @returns Promise resolving to order response
1538
1733
  *
1539
- * @throws Error if order creation fails
1734
+ * @throws Error if order creation fails or venue not found
1540
1735
  *
1541
1736
  * @example
1542
1737
  * ```typescript
1738
+ * // Best practice: fetch market first to cache venue
1739
+ * const market = await marketFetcher.getMarket('bitcoin-2024');
1740
+ *
1543
1741
  * const order = await orderClient.createOrder({
1544
- * tokenId: '123456',
1742
+ * tokenId: market.tokens.yes,
1545
1743
  * price: 0.65,
1546
1744
  * size: 100,
1547
1745
  * side: Side.BUY,
1548
1746
  * orderType: OrderType.GTC,
1549
- * marketSlug: 'market-slug'
1747
+ * marketSlug: 'bitcoin-2024'
1550
1748
  * });
1551
1749
  *
1552
1750
  * console.log(`Order created: ${order.order.id}`);
@@ -1558,6 +1756,29 @@ var OrderClient = class {
1558
1756
  orderType: params.orderType,
1559
1757
  marketSlug: params.marketSlug
1560
1758
  });
1759
+ let venue = this.marketFetcher.getVenue(params.marketSlug);
1760
+ if (!venue) {
1761
+ this.logger.warn(
1762
+ "Venue not cached, fetching market details. For better performance, call marketFetcher.getMarket() before createOrder().",
1763
+ { marketSlug: params.marketSlug }
1764
+ );
1765
+ const market = await this.marketFetcher.getMarket(params.marketSlug);
1766
+ if (!market.venue) {
1767
+ throw new Error(
1768
+ `Market ${params.marketSlug} does not have venue information. Venue data is required for order signing.`
1769
+ );
1770
+ }
1771
+ venue = market.venue;
1772
+ }
1773
+ const dynamicSigningConfig = {
1774
+ ...this.signingConfig,
1775
+ contractAddress: venue.exchange
1776
+ };
1777
+ this.logger.debug("Using venue for order signing", {
1778
+ marketSlug: params.marketSlug,
1779
+ exchange: venue.exchange,
1780
+ adapter: venue.adapter
1781
+ });
1561
1782
  const unsignedOrder = this.orderBuilder.buildOrder(params);
1562
1783
  this.logger.debug("Built unsigned order", {
1563
1784
  salt: unsignedOrder.salt,
@@ -1566,7 +1787,7 @@ var OrderClient = class {
1566
1787
  });
1567
1788
  const signature = await this.orderSigner.signOrder(
1568
1789
  unsignedOrder,
1569
- this.signingConfig
1790
+ dynamicSigningConfig
1570
1791
  );
1571
1792
  const payload = {
1572
1793
  order: {
@@ -1749,162 +1970,6 @@ var OrderClient = class {
1749
1970
  }
1750
1971
  };
1751
1972
 
1752
- // src/markets/fetcher.ts
1753
- var MarketFetcher = class {
1754
- /**
1755
- * Creates a new market fetcher instance.
1756
- *
1757
- * @param httpClient - HTTP client for API requests
1758
- * @param logger - Optional logger for debugging (default: no logging)
1759
- *
1760
- * @example
1761
- * ```typescript
1762
- * const fetcher = new MarketFetcher(httpClient);
1763
- * ```
1764
- */
1765
- constructor(httpClient, logger) {
1766
- this.httpClient = httpClient;
1767
- this.logger = logger || new NoOpLogger();
1768
- }
1769
- /**
1770
- * Gets active markets with query parameters and pagination support.
1771
- *
1772
- * @param params - Query parameters for filtering and pagination
1773
- * @returns Promise resolving to active markets response
1774
- * @throws Error if API request fails
1775
- *
1776
- * @example
1777
- * ```typescript
1778
- * // Get 8 markets sorted by LP rewards
1779
- * const response = await fetcher.getActiveMarkets({
1780
- * limit: 8,
1781
- * sortBy: 'lp_rewards'
1782
- * });
1783
- * console.log(`Found ${response.data.length} of ${response.totalMarketsCount} markets`);
1784
- *
1785
- * // Get page 2
1786
- * const page2 = await fetcher.getActiveMarkets({
1787
- * limit: 8,
1788
- * page: 2,
1789
- * sortBy: 'ending_soon'
1790
- * });
1791
- * ```
1792
- */
1793
- async getActiveMarkets(params) {
1794
- const queryParams = new URLSearchParams();
1795
- if (params?.limit !== void 0) {
1796
- queryParams.append("limit", params.limit.toString());
1797
- }
1798
- if (params?.page !== void 0) {
1799
- queryParams.append("page", params.page.toString());
1800
- }
1801
- if (params?.sortBy) {
1802
- queryParams.append("sortBy", params.sortBy);
1803
- }
1804
- const queryString = queryParams.toString();
1805
- const endpoint = `/markets/active${queryString ? `?${queryString}` : ""}`;
1806
- this.logger.debug("Fetching active markets", { params });
1807
- try {
1808
- const response = await this.httpClient.get(endpoint);
1809
- this.logger.info("Active markets fetched successfully", {
1810
- count: response.data.length,
1811
- total: response.totalMarketsCount,
1812
- sortBy: params?.sortBy,
1813
- page: params?.page
1814
- });
1815
- return response;
1816
- } catch (error) {
1817
- this.logger.error("Failed to fetch active markets", error, { params });
1818
- throw error;
1819
- }
1820
- }
1821
- /**
1822
- * Gets a single market by slug.
1823
- *
1824
- * @param slug - Market slug identifier
1825
- * @returns Promise resolving to market details
1826
- * @throws Error if API request fails or market not found
1827
- *
1828
- * @example
1829
- * ```typescript
1830
- * const market = await fetcher.getMarket('bitcoin-price-2024');
1831
- * console.log(`Market: ${market.title}`);
1832
- * ```
1833
- */
1834
- async getMarket(slug) {
1835
- this.logger.debug("Fetching market", { slug });
1836
- try {
1837
- const market = await this.httpClient.get(`/markets/${slug}`);
1838
- this.logger.info("Market fetched successfully", {
1839
- slug,
1840
- title: market.title
1841
- });
1842
- return market;
1843
- } catch (error) {
1844
- this.logger.error("Failed to fetch market", error, { slug });
1845
- throw error;
1846
- }
1847
- }
1848
- /**
1849
- * Gets the orderbook for a CLOB market.
1850
- *
1851
- * @param slug - Market slug identifier
1852
- * @returns Promise resolving to orderbook data
1853
- * @throws Error if API request fails
1854
- *
1855
- * @example
1856
- * ```typescript
1857
- * const orderbook = await fetcher.getOrderBook('bitcoin-price-2024');
1858
- * console.log(`Bids: ${orderbook.bids.length}, Asks: ${orderbook.asks.length}`);
1859
- * ```
1860
- */
1861
- async getOrderBook(slug) {
1862
- this.logger.debug("Fetching orderbook", { slug });
1863
- try {
1864
- const orderbook = await this.httpClient.get(
1865
- `/markets/${slug}/orderbook`
1866
- );
1867
- this.logger.info("Orderbook fetched successfully", {
1868
- slug,
1869
- bids: orderbook.bids.length,
1870
- asks: orderbook.asks.length,
1871
- tokenId: orderbook.tokenId
1872
- });
1873
- return orderbook;
1874
- } catch (error) {
1875
- this.logger.error("Failed to fetch orderbook", error, { slug });
1876
- throw error;
1877
- }
1878
- }
1879
- /**
1880
- * Gets the current price for a token.
1881
- *
1882
- * @param tokenId - Token ID
1883
- * @returns Promise resolving to price information
1884
- * @throws Error if API request fails
1885
- *
1886
- * @example
1887
- * ```typescript
1888
- * const price = await fetcher.getPrice('123456');
1889
- * console.log(`Current price: ${price.price}`);
1890
- * ```
1891
- */
1892
- async getPrice(tokenId) {
1893
- this.logger.debug("Fetching price", { tokenId });
1894
- try {
1895
- const price = await this.httpClient.get(`/prices/${tokenId}`);
1896
- this.logger.info("Price fetched successfully", {
1897
- tokenId,
1898
- price: price.price
1899
- });
1900
- return price;
1901
- } catch (error) {
1902
- this.logger.error("Failed to fetch price", error, { tokenId });
1903
- throw error;
1904
- }
1905
- }
1906
- };
1907
-
1908
1973
  // src/portfolio/fetcher.ts
1909
1974
  var PortfolioFetcher = class {
1910
1975
  /**
@@ -2555,7 +2620,6 @@ var WebSocketClient = class {
2555
2620
  DEFAULT_WS_URL,
2556
2621
  HttpClient,
2557
2622
  MarketFetcher,
2558
- MarketType,
2559
2623
  MessageSigner,
2560
2624
  NoOpLogger,
2561
2625
  OrderBuilder,