@general-liquidity/gordon-cli 0.75.3 → 0.75.4

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 (2) hide show
  1. package/dist/gordon.js +758 -78
  2. package/package.json +1 -1
package/dist/gordon.js CHANGED
@@ -14715,7 +14715,7 @@ var init_config = __esm(() => {
14715
14715
  apiSecret: exports_external.string(),
14716
14716
  permissions: ExchangePermissionsSchema
14717
14717
  });
14718
- ExchangeTypeSchema = exports_external.enum(["binance", "binance_us", "coinbase", "kraken", "bitfinex", "hyperliquid"]);
14718
+ ExchangeTypeSchema = exports_external.enum(["binance", "binance_us", "coinbase", "kraken", "bitfinex", "hyperliquid", "uniswap"]);
14719
14719
  MultiExchangeConfigSchema = exports_external.object({
14720
14720
  id: exports_external.string(),
14721
14721
  type: ExchangeTypeSchema,
@@ -195776,9 +195776,666 @@ var init_hyperliquid3 = __esm(() => {
195776
195776
  init_errors3();
195777
195777
  });
195778
195778
 
195779
+ // src/infra/uniswap/types.ts
195780
+ var NATIVE_TOKEN = "0x0000000000000000000000000000000000000000", GAS_BUFFER_PERCENT = 0.15, WRAPPED_NATIVE, USDC_ADDRESSES, SUPPORTED_CHAIN_IDS, CHAIN_NAMES;
195781
+ var init_types10 = __esm(() => {
195782
+ WRAPPED_NATIVE = {
195783
+ 1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
195784
+ 10: "0x4200000000000000000000000000000000000006",
195785
+ 56: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
195786
+ 137: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",
195787
+ 8453: "0x4200000000000000000000000000000000000006",
195788
+ 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
195789
+ 43114: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"
195790
+ };
195791
+ USDC_ADDRESSES = {
195792
+ 1: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
195793
+ 10: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
195794
+ 56: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
195795
+ 137: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
195796
+ 8453: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
195797
+ 42161: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
195798
+ 43114: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"
195799
+ };
195800
+ SUPPORTED_CHAIN_IDS = [1, 10, 56, 130, 137, 196, 324, 480, 1868, 8453, 42161, 42220, 43114, 81457, 7777777];
195801
+ CHAIN_NAMES = {
195802
+ 1: "Ethereum",
195803
+ 10: "Optimism",
195804
+ 56: "BNB Chain",
195805
+ 130: "Unichain",
195806
+ 137: "Polygon",
195807
+ 196: "X Layer",
195808
+ 324: "zkSync",
195809
+ 480: "World Chain",
195810
+ 1868: "Soneium",
195811
+ 8453: "Base",
195812
+ 42161: "Arbitrum",
195813
+ 42220: "Celo",
195814
+ 43114: "Avalanche",
195815
+ 81457: "Blast",
195816
+ 7777777: "Zora"
195817
+ };
195818
+ });
195819
+
195820
+ // src/infra/uniswap/token-list.ts
195821
+ class UniswapTokenList {
195822
+ bySymbol = new Map;
195823
+ byAddress = new Map;
195824
+ cache = new Cache({ defaultTtl: CACHE_TTL_MS2, maxEntries: 1 });
195825
+ fetchPromise = null;
195826
+ isLoaded() {
195827
+ return this.cache.has("loaded");
195828
+ }
195829
+ async ensureLoaded() {
195830
+ if (this.isLoaded())
195831
+ return;
195832
+ if (this.fetchPromise)
195833
+ return this.fetchPromise;
195834
+ this.fetchPromise = this.fetchList();
195835
+ try {
195836
+ await this.fetchPromise;
195837
+ } finally {
195838
+ this.fetchPromise = null;
195839
+ }
195840
+ }
195841
+ async fetchList() {
195842
+ try {
195843
+ const res = await fetch(TOKEN_LIST_URL);
195844
+ if (!res.ok)
195845
+ throw new Error(`Token list fetch failed: ${res.status}`);
195846
+ const data = await res.json();
195847
+ this.buildMaps(data.tokens);
195848
+ this.cache.set("loaded", true, CACHE_TTL_MS2);
195849
+ } catch {
195850
+ if (this.bySymbol.size === 0) {
195851
+ this.buildHardcodedFallback();
195852
+ }
195853
+ }
195854
+ }
195855
+ buildMaps(tokens) {
195856
+ this.bySymbol.clear();
195857
+ this.byAddress.clear();
195858
+ const supportedChains = new Set(SUPPORTED_CHAIN_IDS);
195859
+ for (const raw of tokens) {
195860
+ if (supportedChains.has(raw.chainId)) {
195861
+ this.addToken({
195862
+ chainId: raw.chainId,
195863
+ address: raw.address,
195864
+ symbol: raw.symbol,
195865
+ name: raw.name,
195866
+ decimals: raw.decimals,
195867
+ logoURI: raw.logoURI
195868
+ });
195869
+ }
195870
+ if (raw.extensions?.bridgeInfo) {
195871
+ for (const [chainIdStr, bridge] of Object.entries(raw.extensions.bridgeInfo)) {
195872
+ const bridgeChainId = Number(chainIdStr);
195873
+ if (supportedChains.has(bridgeChainId)) {
195874
+ this.addToken({
195875
+ chainId: bridgeChainId,
195876
+ address: bridge.tokenAddress,
195877
+ symbol: raw.symbol,
195878
+ name: raw.name,
195879
+ decimals: raw.decimals,
195880
+ logoURI: raw.logoURI
195881
+ });
195882
+ }
195883
+ }
195884
+ }
195885
+ }
195886
+ }
195887
+ buildHardcodedFallback() {
195888
+ for (const [chainIdStr, address] of Object.entries(WRAPPED_NATIVE)) {
195889
+ const chainId = Number(chainIdStr);
195890
+ const symbol16 = chainId === 56 ? "WBNB" : chainId === 137 ? "WMATIC" : chainId === 43114 ? "WAVAX" : "WETH";
195891
+ this.addToken({ chainId, address, symbol: symbol16, name: `Wrapped Native (${symbol16})`, decimals: 18 });
195892
+ }
195893
+ for (const [chainIdStr, address] of Object.entries(USDC_ADDRESSES)) {
195894
+ const chainId = Number(chainIdStr);
195895
+ this.addToken({ chainId, address, symbol: "USDC", name: "USD Coin", decimals: 6 });
195896
+ }
195897
+ this.cache.set("loaded", true, CACHE_TTL_MS2);
195898
+ }
195899
+ addToken(token) {
195900
+ const key = `${token.symbol.toUpperCase()}:${token.chainId}`;
195901
+ const existing = this.bySymbol.get(key) || [];
195902
+ if (!existing.some((t2) => t2.address.toLowerCase() === token.address.toLowerCase())) {
195903
+ existing.push(token);
195904
+ this.bySymbol.set(key, existing);
195905
+ }
195906
+ this.byAddress.set(token.address.toLowerCase(), token);
195907
+ }
195908
+ async resolve(symbol16, chainId) {
195909
+ await this.ensureLoaded();
195910
+ const sym = symbol16.toUpperCase();
195911
+ const exact = this.bySymbol.get(`${sym}:${chainId}`);
195912
+ if (exact && exact.length > 0)
195913
+ return exact[0].address;
195914
+ const mainnet = this.bySymbol.get(`${sym}:1`);
195915
+ if (mainnet && mainnet.length > 0) {
195916
+ return mainnet[0].address;
195917
+ }
195918
+ for (const [key, tokens] of this.bySymbol) {
195919
+ if (key.startsWith(`${sym}:`)) {
195920
+ return tokens[0].address;
195921
+ }
195922
+ }
195923
+ return null;
195924
+ }
195925
+ async getToken(symbol16, chainId) {
195926
+ await this.ensureLoaded();
195927
+ const sym = symbol16.toUpperCase();
195928
+ const exact = this.bySymbol.get(`${sym}:${chainId}`);
195929
+ if (exact && exact.length > 0)
195930
+ return exact[0];
195931
+ const mainnet = this.bySymbol.get(`${sym}:1`);
195932
+ if (mainnet && mainnet.length > 0)
195933
+ return mainnet[0];
195934
+ return null;
195935
+ }
195936
+ async getTokenByAddress(address) {
195937
+ await this.ensureLoaded();
195938
+ return this.byAddress.get(address.toLowerCase()) || null;
195939
+ }
195940
+ }
195941
+ var TOKEN_LIST_URL = "https://tokens.uniswap.org", CACHE_TTL_MS2;
195942
+ var init_token_list = __esm(() => {
195943
+ init_types10();
195944
+ CACHE_TTL_MS2 = 24 * 60 * 60 * 1000;
195945
+ });
195946
+
195947
+ // src/infra/uniswap/client.ts
195948
+ class UniswapClient {
195949
+ apiKey;
195950
+ walletAddress;
195951
+ chainId;
195952
+ rateLimitState;
195953
+ circuitState = "closed";
195954
+ consecutiveFailures = 0;
195955
+ tokenList = new UniswapTokenList;
195956
+ constructor(apiKey, walletAddress, chainId = 1) {
195957
+ this.apiKey = apiKey;
195958
+ this.walletAddress = walletAddress;
195959
+ this.chainId = chainId;
195960
+ this.rateLimitState = {
195961
+ requestCount: 0,
195962
+ lastReset: Date.now(),
195963
+ throttledCount: 0
195964
+ };
195965
+ }
195966
+ get address() {
195967
+ return this.walletAddress;
195968
+ }
195969
+ get chain() {
195970
+ return this.chainId;
195971
+ }
195972
+ checkRateLimit() {
195973
+ const now2 = Date.now();
195974
+ if (now2 - this.rateLimitState.lastReset > 60000) {
195975
+ this.rateLimitState.requestCount = 0;
195976
+ this.rateLimitState.lastReset = now2;
195977
+ this.rateLimitState.throttledCount = 0;
195978
+ }
195979
+ }
195980
+ shouldThrottle() {
195981
+ this.checkRateLimit();
195982
+ return this.circuitState === "open" || this.rateLimitState.requestCount > RATE_LIMIT_CONFIG6.throttleThreshold;
195983
+ }
195984
+ getRateLimitStatus() {
195985
+ this.checkRateLimit();
195986
+ const usagePercent = this.rateLimitState.requestCount / RATE_LIMIT_CONFIG6.maxRequestsPerMinute * 100;
195987
+ return {
195988
+ currentRequests: this.rateLimitState.requestCount,
195989
+ maxRequests: RATE_LIMIT_CONFIG6.maxRequestsPerMinute,
195990
+ usagePercent: Math.round(usagePercent),
195991
+ isThrottling: this.shouldThrottle(),
195992
+ throttledCount: this.rateLimitState.throttledCount,
195993
+ timeUntilReset: Math.max(0, 60000 - (Date.now() - this.rateLimitState.lastReset))
195994
+ };
195995
+ }
195996
+ getCircuitBreakerState() {
195997
+ return this.circuitState;
195998
+ }
195999
+ resetCircuitBreaker() {
196000
+ this.circuitState = "closed";
196001
+ this.consecutiveFailures = 0;
196002
+ }
196003
+ getUsdcAddress() {
196004
+ return USDC_ADDRESSES[this.chainId] || USDC_ADDRESSES[1];
196005
+ }
196006
+ getWrappedNative() {
196007
+ return WRAPPED_NATIVE[this.chainId] || WRAPPED_NATIVE[1];
196008
+ }
196009
+ isNativeToken(token) {
196010
+ return token.toLowerCase() === NATIVE_TOKEN.toLowerCase();
196011
+ }
196012
+ async resolveSymbol(symbol16) {
196013
+ const s = symbol16.toUpperCase().replace(/[_\-/]/g, "");
196014
+ if (s.startsWith("0X") && s.includes("0X", 3)) {
196015
+ const parts = symbol16.split(/[_\-/]/);
196016
+ if (parts.length === 2) {
196017
+ const inToken = await this.tokenList.getTokenByAddress(parts[0]);
196018
+ const outToken = await this.tokenList.getTokenByAddress(parts[1]);
196019
+ return {
196020
+ tokenIn: parts[0],
196021
+ tokenOut: parts[1],
196022
+ tokenInDecimals: inToken?.decimals ?? 18,
196023
+ tokenOutDecimals: outToken?.decimals ?? 18
196024
+ };
196025
+ }
196026
+ }
196027
+ const quotePatterns = [
196028
+ [/USDC$/, "USDC", () => this.getUsdcAddress(), 6],
196029
+ [/USDT$/, "USDT", () => this.getUsdcAddress(), 6],
196030
+ [/ETH$/, "ETH", () => this.getWrappedNative(), 18],
196031
+ [/WETH$/, "WETH", () => this.getWrappedNative(), 18]
196032
+ ];
196033
+ for (const [pattern2, _quoteName, getQuoteAddress, quoteDecimals] of quotePatterns) {
196034
+ if (pattern2.test(s)) {
196035
+ const base2 = s.replace(pattern2, "");
196036
+ if (!base2)
196037
+ continue;
196038
+ if (base2 === "ETH" || base2 === "WETH") {
196039
+ return {
196040
+ tokenIn: this.getWrappedNative(),
196041
+ tokenOut: getQuoteAddress(),
196042
+ tokenInDecimals: 18,
196043
+ tokenOutDecimals: quoteDecimals
196044
+ };
196045
+ }
196046
+ const baseToken = await this.tokenList.getToken(base2, this.chainId);
196047
+ if (baseToken) {
196048
+ return {
196049
+ tokenIn: baseToken.address,
196050
+ tokenOut: getQuoteAddress(),
196051
+ tokenInDecimals: baseToken.decimals,
196052
+ tokenOutDecimals: quoteDecimals
196053
+ };
196054
+ }
196055
+ throw new Error(`Unknown token "${base2}" \u2014 not found in Uniswap token list for chain ${this.chainId}. ` + `Use a token address directly (e.g., "0x1234.../0xABCD...").`);
196056
+ }
196057
+ }
196058
+ throw new Error(`Cannot resolve symbol "${symbol16}" to token addresses. ` + `Use a supported pair like "UNIUSDC", "LINKETH", or raw addresses "0xABC.../0xDEF...".`);
196059
+ }
196060
+ async request(path5, body, extraHeaders) {
196061
+ this.checkRateLimit();
196062
+ this.rateLimitState.requestCount++;
196063
+ const url2 = `${BASE_URL4}${path5}`;
196064
+ const headers = {
196065
+ "Content-Type": "application/json",
196066
+ "x-api-key": this.apiKey,
196067
+ "x-universal-router-version": "2.0",
196068
+ ...extraHeaders
196069
+ };
196070
+ let lastError = null;
196071
+ for (let attempt = 0;attempt <= MAX_RETRIES2; attempt++) {
196072
+ if (attempt > 0) {
196073
+ const delay5 = BASE_DELAY_MS * 2 ** (attempt - 1);
196074
+ await new Promise((r) => setTimeout(r, delay5));
196075
+ }
196076
+ try {
196077
+ const res = await fetch(url2, {
196078
+ method: "POST",
196079
+ headers,
196080
+ body: JSON.stringify(body)
196081
+ });
196082
+ if (res.ok) {
196083
+ this.consecutiveFailures = 0;
196084
+ if (this.circuitState === "half-open")
196085
+ this.circuitState = "closed";
196086
+ return res.json();
196087
+ }
196088
+ const errorBody = await res.text().catch(() => "");
196089
+ if ([429, 500, 503].includes(res.status) && attempt < MAX_RETRIES2) {
196090
+ if (res.status === 429)
196091
+ this.rateLimitState.throttledCount++;
196092
+ lastError = new Error(`Uniswap API error ${res.status}: ${errorBody}`);
196093
+ continue;
196094
+ }
196095
+ this.consecutiveFailures++;
196096
+ if (this.consecutiveFailures >= 5)
196097
+ this.circuitState = "open";
196098
+ throw new Error(`Uniswap API error ${res.status}: ${errorBody}`);
196099
+ } catch (err) {
196100
+ if (err instanceof Error && err.message.startsWith("Uniswap API error")) {
196101
+ throw err;
196102
+ }
196103
+ lastError = err instanceof Error ? err : new Error(String(err));
196104
+ if (attempt >= MAX_RETRIES2) {
196105
+ this.consecutiveFailures++;
196106
+ if (this.consecutiveFailures >= 5)
196107
+ this.circuitState = "open";
196108
+ throw lastError;
196109
+ }
196110
+ }
196111
+ }
196112
+ throw lastError || new Error("Uniswap request failed");
196113
+ }
196114
+ async testConnection() {
196115
+ try {
196116
+ const weth = this.getWrappedNative();
196117
+ const usdc = this.getUsdcAddress();
196118
+ await this.getQuote(weth, usdc, "1000000000000000");
196119
+ return true;
196120
+ } catch {
196121
+ return false;
196122
+ }
196123
+ }
196124
+ async getQuote(tokenIn, tokenOut, amount, options = {}) {
196125
+ const tokenOutChainId = options.tokenOutChainId ?? this.chainId;
196126
+ const isCrossChain = tokenOutChainId !== this.chainId;
196127
+ const body = {
196128
+ type: options.type ?? "EXACT_INPUT",
196129
+ amount,
196130
+ tokenInChainId: this.chainId,
196131
+ tokenOutChainId,
196132
+ tokenIn,
196133
+ tokenOut,
196134
+ swapper: this.walletAddress,
196135
+ routingPreference: options.routingPreference ?? "BEST_PRICE"
196136
+ };
196137
+ if (options.slippageTolerance) {
196138
+ body.slippageTolerance = options.slippageTolerance;
196139
+ } else {
196140
+ body.autoSlippage = "DEFAULT";
196141
+ }
196142
+ if (options.permitAmount) {
196143
+ body.permitAmount = options.permitAmount;
196144
+ }
196145
+ const extraHeaders = isCrossChain ? { "x-chained-actions-enabled": "true" } : undefined;
196146
+ return this.request("/quote", body, extraHeaders);
196147
+ }
196148
+ async getSwapTransaction(quote, permit, deadline) {
196149
+ const body = {
196150
+ quote: quote.quote,
196151
+ refreshGasPrice: true,
196152
+ deadline: deadline ?? Math.floor(Date.now() / 1000) + 120
196153
+ };
196154
+ if (permit) {
196155
+ body.signature = permit.signature;
196156
+ body.permitData = permit.permitData;
196157
+ }
196158
+ const resp = await this.request("/swap", body);
196159
+ if (resp.swap.gasLimit) {
196160
+ const buffered = Math.ceil(Number(resp.swap.gasLimit) * (1 + GAS_BUFFER_PERCENT));
196161
+ resp.swap.gasLimit = buffered.toString();
196162
+ }
196163
+ return resp;
196164
+ }
196165
+ async checkApproval(token, amount) {
196166
+ if (this.isNativeToken(token)) {
196167
+ return { approval: null };
196168
+ }
196169
+ return this.request("/check_approval", {
196170
+ walletAddress: this.walletAddress,
196171
+ token,
196172
+ amount,
196173
+ chainId: this.chainId,
196174
+ includeGasInfo: true
196175
+ });
196176
+ }
196177
+ static validateSwapTransaction(data) {
196178
+ if (!data || data === "" || data === "0x")
196179
+ return false;
196180
+ return /^0x[0-9a-fA-F]+$/.test(data);
196181
+ }
196182
+ static isQuoteFresh(quoteTimestamp) {
196183
+ return Date.now() - quoteTimestamp < QUOTE_MAX_AGE_MS;
196184
+ }
196185
+ }
196186
+ var BASE_URL4 = "https://trade-api.gateway.uniswap.org/v1", MAX_RETRIES2 = 3, BASE_DELAY_MS = 500, QUOTE_MAX_AGE_MS = 30000, RATE_LIMIT_CONFIG6;
196187
+ var init_client9 = __esm(() => {
196188
+ init_types10();
196189
+ init_token_list();
196190
+ RATE_LIMIT_CONFIG6 = {
196191
+ maxRequestsPerMinute: 60,
196192
+ throttleThreshold: 50
196193
+ };
196194
+ });
196195
+
196196
+ // src/infra/uniswap/index.ts
196197
+ var init_uniswap = __esm(() => {
196198
+ init_client9();
196199
+ init_token_list();
196200
+ init_types10();
196201
+ });
196202
+
196203
+ // src/infra/exchange/adapters/uniswap.ts
196204
+ class UniswapAdapter {
196205
+ client;
196206
+ exchangeId = "uniswap";
196207
+ displayName = "Uniswap";
196208
+ localOrders = new Map;
196209
+ localTrades = new Map;
196210
+ orderCounter = 0;
196211
+ constructor(apiKey, walletAddress, chainId = 1) {
196212
+ this.client = new UniswapClient(apiKey, walletAddress, chainId);
196213
+ }
196214
+ async testConnection() {
196215
+ return this.client.testConnection();
196216
+ }
196217
+ async getExchangeInfo() {
196218
+ const symbols = SUPPORTED_CHAIN_IDS.map((cid) => ({
196219
+ symbol: `${CHAIN_NAMES[cid] || `Chain${cid}`}`,
196220
+ status: "TRADING",
196221
+ baseAsset: "ETH",
196222
+ quoteAsset: "USDC",
196223
+ baseAssetPrecision: 18,
196224
+ quoteAssetPrecision: 6,
196225
+ orderTypes: ["MARKET"],
196226
+ isSpotTradingAllowed: true,
196227
+ filters: []
196228
+ }));
196229
+ return {
196230
+ timezone: "UTC",
196231
+ serverTime: Date.now(),
196232
+ symbols
196233
+ };
196234
+ }
196235
+ async getPrice(symbol16) {
196236
+ const { tokenIn, tokenOut, tokenInDecimals, tokenOutDecimals } = await this.client.resolveSymbol(symbol16);
196237
+ const oneUnit = "1" + "0".repeat(tokenInDecimals);
196238
+ const quote = await this.client.getQuote(tokenIn, tokenOut, oneUnit);
196239
+ const outputAmount = quote.quote.output?.amount || quote.quote.amountOut;
196240
+ if (!outputAmount)
196241
+ throw new Error("No output amount in quote");
196242
+ return Number(outputAmount) / 10 ** tokenOutDecimals;
196243
+ }
196244
+ async getCandles(_symbol2, _interval, _limit) {
196245
+ return [];
196246
+ }
196247
+ async get24hrTickers() {
196248
+ return [];
196249
+ }
196250
+ async getTopSymbols(_n) {
196251
+ return ["ETHUSDC", "WBTCUSDC", "ARBUSDC", "LINKUSDC", "UNIUSDC"];
196252
+ }
196253
+ async getOrderBook(symbol16, _limit) {
196254
+ const price = await this.getPrice(symbol16);
196255
+ const spread = price * 0.003;
196256
+ return {
196257
+ lastUpdateId: Date.now(),
196258
+ bids: [{ price: price - spread / 2, quantity: 0 }],
196259
+ asks: [{ price: price + spread / 2, quantity: 0 }]
196260
+ };
196261
+ }
196262
+ async getBookTicker(symbol16) {
196263
+ const price = await this.getPrice(symbol16);
196264
+ const spread = price * 0.003;
196265
+ return {
196266
+ symbol: symbol16,
196267
+ bidPrice: price - spread / 2,
196268
+ bidQty: 0,
196269
+ askPrice: price + spread / 2,
196270
+ askQty: 0
196271
+ };
196272
+ }
196273
+ async getSpread(symbol16) {
196274
+ const price = await this.getPrice(symbol16);
196275
+ const spread = price * 0.003;
196276
+ return {
196277
+ spread,
196278
+ spreadPercent: 0.3,
196279
+ bidPrice: price - spread / 2,
196280
+ askPrice: price + spread / 2
196281
+ };
196282
+ }
196283
+ async getAvgPrice(symbol16) {
196284
+ const price = await this.getPrice(symbol16);
196285
+ return { mins: 5, price };
196286
+ }
196287
+ async getAccountInfo() {
196288
+ return {
196289
+ canTrade: true,
196290
+ canWithdraw: true,
196291
+ canDeposit: true,
196292
+ accountType: "DEX",
196293
+ balances: [],
196294
+ updateTime: Date.now()
196295
+ };
196296
+ }
196297
+ async getBalance(_asset) {
196298
+ return 0;
196299
+ }
196300
+ async getAllBalances() {
196301
+ return [];
196302
+ }
196303
+ async getFullAccountDetails() {
196304
+ return {
196305
+ accountInfo: await this.getAccountInfo(),
196306
+ totalUsdtValue: 0,
196307
+ nonZeroBalances: []
196308
+ };
196309
+ }
196310
+ async placeOrder(params) {
196311
+ const { tokenIn, tokenOut, tokenInDecimals, tokenOutDecimals } = await this.client.resolveSymbol(params.symbol);
196312
+ const isBuy = params.side === "BUY";
196313
+ const amount = params.quantity || params.quoteOrderQty || 0;
196314
+ const inputDecimals = isBuy ? tokenOutDecimals : tokenInDecimals;
196315
+ const rawAmount = Math.floor(amount * 10 ** inputDecimals).toString();
196316
+ const swapTokenIn = isBuy ? tokenOut : tokenIn;
196317
+ const swapTokenOut = isBuy ? tokenIn : tokenOut;
196318
+ let quote = await this.client.getQuote(swapTokenIn, swapTokenOut, rawAmount);
196319
+ let quoteTimestamp = Date.now();
196320
+ const approvalResult = await this.client.checkApproval(swapTokenIn, rawAmount);
196321
+ if (!UniswapClient.isQuoteFresh(quoteTimestamp)) {
196322
+ quote = await this.client.getQuote(swapTokenIn, swapTokenOut, rawAmount);
196323
+ quoteTimestamp = Date.now();
196324
+ }
196325
+ const deadline = Math.floor(Date.now() / 1000) + 120;
196326
+ const swapTx = await this.client.getSwapTransaction(quote, undefined, deadline);
196327
+ if (!UniswapClient.validateSwapTransaction(swapTx.swap.data)) {
196328
+ throw new Error("Invalid swap transaction data \u2014 cannot execute");
196329
+ }
196330
+ const orderId = `uniswap-${++this.orderCounter}-${Date.now()}`;
196331
+ const order = {
196332
+ orderId,
196333
+ clientOrderId: quote.requestId,
196334
+ symbol: params.symbol,
196335
+ side: params.side,
196336
+ type: "MARKET",
196337
+ status: "NEW",
196338
+ price: await this.getPrice(params.symbol),
196339
+ quantity: amount,
196340
+ executedQty: 0,
196341
+ cummulativeQuoteQty: 0,
196342
+ time: Date.now(),
196343
+ updateTime: Date.now()
196344
+ };
196345
+ this.localOrders.set(orderId, order);
196346
+ const meta3 = {
196347
+ _unsignedTx: swapTx.swap,
196348
+ _quoteTimestamp: quoteTimestamp
196349
+ };
196350
+ if (approvalResult.approval) {
196351
+ meta3._approvalTx = approvalResult.approval;
196352
+ }
196353
+ if (swapTx.txFailureReasons?.length) {
196354
+ meta3._txFailureReasons = swapTx.txFailureReasons;
196355
+ }
196356
+ Object.assign(order, meta3);
196357
+ return order;
196358
+ }
196359
+ async cancelOrder(_symbol2, orderId) {
196360
+ const order = this.localOrders.get(orderId);
196361
+ if (order && order.status === "NEW") {
196362
+ order.status = "CANCELED";
196363
+ order.updateTime = Date.now();
196364
+ }
196365
+ }
196366
+ async cancelAllOrders(symbol16) {
196367
+ const cancelled = [];
196368
+ for (const order of this.localOrders.values()) {
196369
+ if (order.symbol === symbol16 && order.status === "NEW") {
196370
+ order.status = "CANCELED";
196371
+ order.updateTime = Date.now();
196372
+ cancelled.push(order);
196373
+ }
196374
+ }
196375
+ return cancelled;
196376
+ }
196377
+ async getOpenOrders(symbol16) {
196378
+ const orders = Array.from(this.localOrders.values());
196379
+ return orders.filter((o) => o.status === "NEW" && (!symbol16 || o.symbol === symbol16));
196380
+ }
196381
+ async getOrderStatus(_symbol2, orderId) {
196382
+ const order = this.localOrders.get(String(orderId));
196383
+ if (!order)
196384
+ throw new Error(`Order ${orderId} not found`);
196385
+ return order;
196386
+ }
196387
+ async testOrder(params) {
196388
+ try {
196389
+ const { tokenIn, tokenOut, tokenInDecimals } = await this.client.resolveSymbol(params.symbol);
196390
+ const amount = params.quantity || params.quoteOrderQty || 0;
196391
+ const rawAmount = Math.floor(amount * 10 ** tokenInDecimals).toString();
196392
+ await this.client.getQuote(tokenIn, tokenOut, rawAmount);
196393
+ return true;
196394
+ } catch {
196395
+ return false;
196396
+ }
196397
+ }
196398
+ async getTradeHistory(symbol16, _limit) {
196399
+ return this.localTrades.get(symbol16) || [];
196400
+ }
196401
+ async getOrderHistory(symbol16, _limit) {
196402
+ return Array.from(this.localOrders.values()).filter((o) => o.symbol === symbol16);
196403
+ }
196404
+ async getDepositHistory(_limit) {
196405
+ return [];
196406
+ }
196407
+ async getWithdrawalHistory(_limit) {
196408
+ return [];
196409
+ }
196410
+ shouldThrottle() {
196411
+ return this.client.shouldThrottle();
196412
+ }
196413
+ getRateLimitStatus() {
196414
+ const status = this.client.getRateLimitStatus();
196415
+ return {
196416
+ currentWeight: status.currentRequests,
196417
+ maxWeight: status.maxRequests,
196418
+ usagePercent: status.usagePercent,
196419
+ isThrottling: status.isThrottling,
196420
+ throttledCount: status.throttledCount,
196421
+ timeUntilReset: status.timeUntilReset
196422
+ };
196423
+ }
196424
+ getCircuitBreakerState() {
196425
+ return this.client.getCircuitBreakerState();
196426
+ }
196427
+ resetCircuitBreaker() {
196428
+ this.client.resetCircuitBreaker();
196429
+ }
196430
+ }
196431
+ var init_uniswap2 = __esm(() => {
196432
+ init_uniswap();
196433
+ init_types10();
196434
+ });
196435
+
195779
196436
  // src/infra/exchange/factory.ts
195780
196437
  function getCacheKey(exchangeId, credentials) {
195781
- const key = exchangeId === "hyperliquid" ? credentials.walletPrivateKey || "" : credentials.apiKey;
196438
+ const key = exchangeId === "hyperliquid" || exchangeId === "uniswap" ? credentials.walletPrivateKey || credentials.apiKey : credentials.apiKey;
195782
196439
  const keyPrefix = key.substring(0, 8);
195783
196440
  return `${exchangeId}:${keyPrefix}`;
195784
196441
  }
@@ -195790,13 +196447,15 @@ var init_factory = __esm(() => {
195790
196447
  init_kraken3();
195791
196448
  init_bitfinex3();
195792
196449
  init_hyperliquid3();
196450
+ init_uniswap2();
195793
196451
  SUPPORTED_EXCHANGES = [
195794
196452
  "binance",
195795
196453
  "binance_us",
195796
196454
  "coinbase",
195797
196455
  "kraken",
195798
196456
  "bitfinex",
195799
- "hyperliquid"
196457
+ "hyperliquid",
196458
+ "uniswap"
195800
196459
  ];
195801
196460
  ExchangeFactory = class ExchangeFactory {
195802
196461
  static instanceCache = new Map;
@@ -195835,6 +196494,12 @@ var init_factory = __esm(() => {
195835
196494
  }
195836
196495
  exchange = new HyperliquidAdapter(credentials.walletPrivateKey);
195837
196496
  break;
196497
+ case "uniswap":
196498
+ if (!credentials.apiKey) {
196499
+ throw new Error("Uniswap requires an API key from developers.uniswap.org");
196500
+ }
196501
+ exchange = new UniswapAdapter(credentials.apiKey, credentials.walletPrivateKey || credentials.apiSecret, 1);
196502
+ break;
195838
196503
  default:
195839
196504
  throw new Error(`No adapter available for exchange: ${exchangeId}`);
195840
196505
  }
@@ -195872,6 +196537,7 @@ var init_exchange = __esm(() => {
195872
196537
  init_kraken3();
195873
196538
  init_bitfinex3();
195874
196539
  init_hyperliquid3();
196540
+ init_uniswap2();
195875
196541
  });
195876
196542
 
195877
196543
  // src/core/validator.ts
@@ -265114,7 +265780,7 @@ var init_iceberg = __esm(() => {
265114
265780
 
265115
265781
  // src/core/execution/algorithms/types.ts
265116
265782
  var ExecutionAlgorithmSchema, DEFAULT_TWAP_CONFIG, DEFAULT_VWAP_CONFIG, DEFAULT_ICEBERG_CONFIG;
265117
- var init_types10 = __esm(() => {
265783
+ var init_types11 = __esm(() => {
265118
265784
  init_zod();
265119
265785
  ExecutionAlgorithmSchema = exports_external.enum(["TWAP", "VWAP", "ICEBERG"]);
265120
265786
  DEFAULT_TWAP_CONFIG = {
@@ -265255,7 +265921,7 @@ var init_session_manager = __esm(() => {
265255
265921
  init_twap();
265256
265922
  init_vwap();
265257
265923
  init_iceberg();
265258
- init_types10();
265924
+ init_types11();
265259
265925
  logger69 = createModuleLogger("execution-session-manager");
265260
265926
  });
265261
265927
 
@@ -265352,7 +266018,7 @@ function describeIntent(intent2) {
265352
266018
  }
265353
266019
  var DURATION_PATTERNS;
265354
266020
  var init_intent_parser = __esm(() => {
265355
- init_types10();
266021
+ init_types11();
265356
266022
  DURATION_PATTERNS = [
265357
266023
  { pattern: /(\d+)\s*h(?:ours?)?/i, toMs: (m) => parseInt(m[1], 10) * 60 * 60 * 1000 },
265358
266024
  { pattern: /(\d+)\s*m(?:in(?:utes?)?)?/i, toMs: (m) => parseInt(m[1], 10) * 60 * 1000 },
@@ -267536,7 +268202,7 @@ var init_risk_management2 = __esm(() => {
267536
268202
  });
267537
268203
 
267538
268204
  // src/strategies/types.ts
267539
- var init_types11 = () => {};
268205
+ var init_types12 = () => {};
267540
268206
 
267541
268207
  // src/strategies/registry.ts
267542
268208
  class StrategyRegistry {
@@ -275860,7 +276526,7 @@ var init_dsl = __esm(() => {
275860
276526
 
275861
276527
  // src/strategies/index.ts
275862
276528
  var init_strategies = __esm(() => {
275863
- init_types11();
276529
+ init_types12();
275864
276530
  init_registry3();
275865
276531
  init_base_strategy();
275866
276532
  init_ensemble();
@@ -276380,7 +277046,7 @@ var init_strategies2 = __esm(() => {
276380
277046
 
276381
277047
  // src/backtest/types.ts
276382
277048
  var DEFAULT_BACKTEST_CONFIG, DEFAULT_BACKTEST_PARAMS;
276383
- var init_types12 = __esm(() => {
277049
+ var init_types13 = __esm(() => {
276384
277050
  DEFAULT_BACKTEST_CONFIG = {
276385
277051
  timeframe: "4h",
276386
277052
  days: 90,
@@ -277348,7 +278014,7 @@ function runBacktest(strategy, data, params, strategyParams) {
277348
278014
  return engine.run(strategy, data, strategyParams);
277349
278015
  }
277350
278016
  var init_engine2 = __esm(() => {
277351
- init_types12();
278017
+ init_types13();
277352
278018
  init_indicators();
277353
278019
  });
277354
278020
 
@@ -277356,7 +278022,7 @@ var init_engine2 = __esm(() => {
277356
278022
  function getCachedData(symbol16, timeframe, startTime, endTime) {
277357
278023
  const db = getDatabase();
277358
278024
  const now2 = Date.now();
277359
- const ttl = CACHE_TTL_MS2[timeframe] ?? CACHE_TTL_MS2["1h"];
278025
+ const ttl = CACHE_TTL_MS3[timeframe] ?? CACHE_TTL_MS3["1h"];
277360
278026
  const minFetchedAt = now2 - ttl;
277361
278027
  const query = db.prepare(`
277362
278028
  SELECT timestamp, open, high, low, close, volume
@@ -277536,7 +278202,7 @@ async function fetchHistoricalDataRange(exchange, symbol16, timeframe, startTime
277536
278202
  `);
277537
278203
  const cachedRows = query.all(upperSymbol, timeframe, startTime, endTime);
277538
278204
  const now2 = Date.now();
277539
- const ttl = CACHE_TTL_MS2[timeframe] ?? CACHE_TTL_MS2["1h"];
278205
+ const ttl = CACHE_TTL_MS3[timeframe] ?? CACHE_TTL_MS3["1h"];
277540
278206
  const cachedMap = new Map;
277541
278207
  for (const row of cachedRows) {
277542
278208
  cachedMap.set(row.timestamp, {
@@ -277586,7 +278252,7 @@ async function fetchHistoricalDataRange(exchange, symbol16, timeframe, startTime
277586
278252
  }
277587
278253
  return result;
277588
278254
  }
277589
- var logger74, BINANCE_KLINE_LIMIT = 1000, TIMEFRAME_MS, CACHE_TTL_MS2;
278255
+ var logger74, BINANCE_KLINE_LIMIT = 1000, TIMEFRAME_MS, CACHE_TTL_MS3;
277590
278256
  var init_historical = __esm(() => {
277591
278257
  init_storage();
277592
278258
  init_logger2();
@@ -277608,7 +278274,7 @@ var init_historical = __esm(() => {
277608
278274
  "1w": 7 * 24 * 60 * 60 * 1000,
277609
278275
  "1M": 30 * 24 * 60 * 60 * 1000
277610
278276
  };
277611
- CACHE_TTL_MS2 = {
278277
+ CACHE_TTL_MS3 = {
277612
278278
  "1m": 5 * 60 * 1000,
277613
278279
  "3m": 10 * 60 * 1000,
277614
278280
  "5m": 30 * 60 * 1000,
@@ -280361,7 +281027,7 @@ function standardDeviation(values) {
280361
281027
  }
280362
281028
  var logger77, DEFAULT_WALK_FORWARD_CONFIG;
280363
281029
  var init_walk_forward = __esm(() => {
280364
- init_types12();
281030
+ init_types13();
280365
281031
  init_engine2();
280366
281032
  init_logger2();
280367
281033
  logger77 = createModuleLogger("walk-forward");
@@ -281029,7 +281695,7 @@ var init_backtest = __esm(async () => {
281029
281695
  init_tools();
281030
281696
  init_zod();
281031
281697
  init_strategies();
281032
- init_types12();
281698
+ init_types13();
281033
281699
  init_engine2();
281034
281700
  init_historical();
281035
281701
  init_export();
@@ -284002,7 +284668,7 @@ var init_market_data = __esm(() => {
284002
284668
  // src/infra/agents/tools/liquidation-intelligence.ts
284003
284669
  async function fetchMarketData() {
284004
284670
  const now2 = Date.now();
284005
- if (_cache && now2 - _cache.timestamp < CACHE_TTL_MS3) {
284671
+ if (_cache && now2 - _cache.timestamp < CACHE_TTL_MS4) {
284006
284672
  return { meta: _cache.meta, assetCtxs: _cache.assetCtxs };
284007
284673
  }
284008
284674
  const controller = new AbortController;
@@ -284122,7 +284788,7 @@ function analyzeCrowding(ctx) {
284122
284788
  implication = "Balanced positioning \u2014 no significant crowd";
284123
284789
  return { direction, crowdingScore, implication };
284124
284790
  }
284125
- var HL_INFO_API = "https://api.hyperliquid.xyz/info", REQUEST_TIMEOUT_MS = 1e4, CACHE_TTL_MS3 = 1e4, _cache = null, getCascadeRiskTool, getLiquidationPressureTool, getCrowdingAnalysisTool, getSqueezeCandidatesTool, liquidationIntelligenceTools;
284791
+ var HL_INFO_API = "https://api.hyperliquid.xyz/info", REQUEST_TIMEOUT_MS = 1e4, CACHE_TTL_MS4 = 1e4, _cache = null, getCascadeRiskTool, getLiquidationPressureTool, getCrowdingAnalysisTool, getSqueezeCandidatesTool, liquidationIntelligenceTools;
284126
284792
  var init_liquidation_intelligence = __esm(() => {
284127
284793
  init_tools();
284128
284794
  init_zod();
@@ -285389,7 +286055,7 @@ var init_autonomous = __esm(() => {
285389
286055
 
285390
286056
  // src/infra/base/types.ts
285391
286057
  var BASE_CHAIN_CONFIG, BASE_TOKENS, REGISTRY_API_BASE = "https://base.org/api/registry";
285392
- var init_types13 = __esm(() => {
286058
+ var init_types14 = __esm(() => {
285393
286059
  BASE_CHAIN_CONFIG = {
285394
286060
  mainnet: {
285395
286061
  chainId: 8453,
@@ -285475,7 +286141,7 @@ function formatRegistryEntry(entry) {
285475
286141
  };
285476
286142
  }
285477
286143
  var init_registry4 = __esm(() => {
285478
- init_types13();
286144
+ init_types14();
285479
286145
  });
285480
286146
 
285481
286147
  // src/infra/base/chain.ts
@@ -285544,7 +286210,7 @@ async function getBaseTokenBalance(tokenAddress, walletAddress, decimals = 18, n
285544
286210
  return parseFloat(`${intPart}.${fracPart}`);
285545
286211
  }
285546
286212
  var init_chain2 = __esm(() => {
285547
- init_types13();
286213
+ init_types14();
285548
286214
  });
285549
286215
 
285550
286216
  // src/infra/base/basescan.ts
@@ -285767,7 +286433,7 @@ async function detectNewListings(opts = {}) {
285767
286433
  return signals;
285768
286434
  }
285769
286435
  var init_signals = __esm(() => {
285770
- init_types13();
286436
+ init_types14();
285771
286437
  });
285772
286438
 
285773
286439
  // src/infra/base/index.ts
@@ -285775,7 +286441,7 @@ var init_base4 = __esm(() => {
285775
286441
  init_registry4();
285776
286442
  init_chain2();
285777
286443
  init_signals();
285778
- init_types13();
286444
+ init_types14();
285779
286445
  });
285780
286446
 
285781
286447
  // src/infra/agents/tools/base-onchain.ts
@@ -286010,7 +286676,7 @@ var init_base_onchain = __esm(() => {
286010
286676
 
286011
286677
  // src/infra/agentkit/types.ts
286012
286678
  var CDP_ENV_KEYS;
286013
- var init_types14 = __esm(() => {
286679
+ var init_types15 = __esm(() => {
286014
286680
  CDP_ENV_KEYS = {
286015
286681
  API_KEY_ID: "CDP_API_KEY_ID",
286016
286682
  API_KEY_SECRET: "CDP_API_KEY_SECRET",
@@ -727995,7 +728661,7 @@ function createAcrossClient(options) {
727995
728661
  return AcrossClient.create(options);
727996
728662
  }
727997
728663
  var CLIENT_DEFAULTS;
727998
- var init_client9 = __esm(() => {
728664
+ var init_client10 = __esm(() => {
727999
728665
  init__esm();
728000
728666
  init_actions();
728001
728667
  init_constants2();
@@ -728009,7 +728675,7 @@ var init_client9 = __esm(() => {
728009
728675
  });
728010
728676
 
728011
728677
  // node_modules/@across-protocol/app-sdk/dist/types/index.js
728012
- var init_types15 = () => {};
728678
+ var init_types16 = () => {};
728013
728679
 
728014
728680
  // node_modules/@across-protocol/app-sdk/dist/index.js
728015
728681
  var exports_dist = {};
@@ -728076,8 +728742,8 @@ __export(exports_dist, {
728076
728742
  AcrossApiError: () => AcrossApiError
728077
728743
  });
728078
728744
  var init_dist15 = __esm(() => {
728079
- init_client9();
728080
- init_types15();
728745
+ init_client10();
728746
+ init_types16();
728081
728747
  init_actions();
728082
728748
  init_errors14();
728083
728749
  init_utils11();
@@ -880324,7 +880990,7 @@ var require_token_security = __commonJS((exports) => {
880324
880990
  Object.defineProperty(exports, "__esModule", { value: true });
880325
880991
  exports.isTokenSecurityChainId = exports.TokenSecurityChainIds = undefined;
880326
880992
  var index_js_1 = require_chain7();
880327
- var SUPPORTED_CHAIN_IDS = [
880993
+ var SUPPORTED_CHAIN_IDS2 = [
880328
880994
  index_js_1.EvmChainId.AVALANCHE,
880329
880995
  index_js_1.EvmChainId.BSC,
880330
880996
  index_js_1.EvmChainId.FANTOM,
@@ -880344,8 +881010,8 @@ var require_token_security = __commonJS((exports) => {
880344
881010
  index_js_1.EvmChainId.MANTA,
880345
881011
  index_js_1.EvmChainId.ZKLINK
880346
881012
  ];
880347
- exports.TokenSecurityChainIds = SUPPORTED_CHAIN_IDS;
880348
- var isTokenSecurityChainId = (chainId) => SUPPORTED_CHAIN_IDS.includes(chainId);
881013
+ exports.TokenSecurityChainIds = SUPPORTED_CHAIN_IDS2;
881014
+ var isTokenSecurityChainId = (chainId) => SUPPORTED_CHAIN_IDS2.includes(chainId);
880349
881015
  exports.isTokenSecurityChainId = isTokenSecurityChainId;
880350
881016
  });
880351
881017
 
@@ -1048457,11 +1049123,11 @@ var require_cjs8 = __commonJS((exports, module) => {
1048457
1049123
  wrapFetchWithPayment: () => wrapFetchWithPayment
1048458
1049124
  });
1048459
1049125
  module.exports = __toCommonJS2(src_exports);
1048460
- var import_types47 = require_types26();
1048461
- var import_client16 = require_client4();
1049126
+ var import_types51 = require_types26();
1049127
+ var import_client17 = require_client4();
1048462
1049128
  var import_shared = require_shared();
1048463
1049129
  var import_types210 = require_types26();
1048464
- function wrapFetchWithPayment(fetch3, walletClient, maxValue2 = BigInt(0.1 * 10 ** 6), paymentRequirementsSelector = import_client16.selectPaymentRequirements, config4) {
1049130
+ function wrapFetchWithPayment(fetch3, walletClient, maxValue2 = BigInt(0.1 * 10 ** 6), paymentRequirementsSelector = import_client17.selectPaymentRequirements, config4) {
1048465
1049131
  return async (input, init2) => {
1048466
1049132
  var _a16;
1048467
1049133
  const response = await fetch3(input, init2);
@@ -1048469,13 +1049135,13 @@ var require_cjs8 = __commonJS((exports, module) => {
1048469
1049135
  return response;
1048470
1049136
  }
1048471
1049137
  const { x402Version, accepts } = await response.json();
1048472
- const parsedPaymentRequirements = accepts.map((x) => import_types47.PaymentRequirementsSchema.parse(x));
1048473
- const network = (0, import_types47.isMultiNetworkSigner)(walletClient) ? undefined : import_types47.evm.isSignerWallet(walletClient) ? import_types47.ChainIdToNetwork[(_a16 = walletClient.chain) == null ? undefined : _a16.id] : (0, import_types47.isSvmSignerWallet)(walletClient) ? ["solana", "solana-devnet"] : undefined;
1049138
+ const parsedPaymentRequirements = accepts.map((x) => import_types51.PaymentRequirementsSchema.parse(x));
1049139
+ const network = (0, import_types51.isMultiNetworkSigner)(walletClient) ? undefined : import_types51.evm.isSignerWallet(walletClient) ? import_types51.ChainIdToNetwork[(_a16 = walletClient.chain) == null ? undefined : _a16.id] : (0, import_types51.isSvmSignerWallet)(walletClient) ? ["solana", "solana-devnet"] : undefined;
1048474
1049140
  const selectedPaymentRequirements = paymentRequirementsSelector(parsedPaymentRequirements, network, "exact");
1048475
1049141
  if (BigInt(selectedPaymentRequirements.maxAmountRequired) > maxValue2) {
1048476
1049142
  throw new Error("Payment amount exceeds maximum allowed");
1048477
1049143
  }
1048478
- const paymentHeader = await (0, import_client16.createPaymentHeader)(walletClient, x402Version, selectedPaymentRequirements, config4);
1049144
+ const paymentHeader = await (0, import_client17.createPaymentHeader)(walletClient, x402Version, selectedPaymentRequirements, config4);
1048479
1049145
  if (!init2) {
1048480
1049146
  throw new Error("Missing fetch request configuration");
1048481
1049147
  }
@@ -1050399,11 +1051065,11 @@ var require_cjs9 = __commonJS((exports, module) => {
1050399
1051065
  x402HTTPClient: () => import_client22.x402HTTPClient
1050400
1051066
  });
1050401
1051067
  module.exports = __toCommonJS2(src_exports);
1050402
- var import_client16 = require_client6();
1051068
+ var import_client17 = require_client6();
1050403
1051069
  var import_client22 = require_client6();
1050404
1051070
  var import_http6 = require_http10();
1050405
1051071
  function wrapFetchWithPayment(fetch3, client2) {
1050406
- const httpClient = client2 instanceof import_client16.x402HTTPClient ? client2 : new import_client16.x402HTTPClient(client2);
1051072
+ const httpClient = client2 instanceof import_client17.x402HTTPClient ? client2 : new import_client17.x402HTTPClient(client2);
1050407
1051073
  return async (input, init2) => {
1050408
1051074
  const request = new Request(input, init2);
1050409
1051075
  const clonedRequest = request.clone();
@@ -1050455,7 +1051121,7 @@ var require_cjs9 = __commonJS((exports, module) => {
1050455
1051121
  };
1050456
1051122
  }
1050457
1051123
  function wrapFetchWithPaymentFromConfig(fetch3, config4) {
1050458
- const client2 = import_client16.x402Client.fromConfig(config4);
1051124
+ const client2 = import_client17.x402Client.fromConfig(config4);
1050459
1051125
  return wrapFetchWithPayment(fetch3, client2);
1050460
1051126
  }
1050461
1051127
  });
@@ -1094875,7 +1095541,7 @@ var require_yelayActionProvider = __commonJS((exports) => {
1094875
1095541
  var constants_1 = require_constants39();
1094876
1095542
  var viem_1 = require__cjs();
1094877
1095543
  var utils_1 = require_utils25();
1094878
- var SUPPORTED_CHAIN_IDS = ["1", "146", "8453", "42161", "43114"];
1095544
+ var SUPPORTED_CHAIN_IDS2 = ["1", "146", "8453", "42161", "43114"];
1094879
1095545
 
1094880
1095546
  class YelayActionProvider extends actionProvider_1.ActionProvider {
1094881
1095547
  constructor() {
@@ -1095030,7 +1095696,7 @@ APY: ${vault.apy}%
1095030
1095696
  }
1095031
1095697
  }
1095032
1095698
  supportsNetwork(network) {
1095033
- return network.protocolFamily === "evm" && (network.chainId ? SUPPORTED_CHAIN_IDS.includes(network.chainId) : false);
1095699
+ return network.protocolFamily === "evm" && (network.chainId ? SUPPORTED_CHAIN_IDS2.includes(network.chainId) : false);
1095034
1095700
  }
1095035
1095701
  }
1095036
1095702
  exports.YelayActionProvider = YelayActionProvider;
@@ -1119289,14 +1119955,14 @@ function getAvailableActionNames() {
1119289
1119955
  }
1119290
1119956
  var import_agentkit, _agentKit = null, _actions = null;
1119291
1119957
  var init_provider3 = __esm(() => {
1119292
- init_types14();
1119958
+ init_types15();
1119293
1119959
  import_agentkit = __toESM(require_dist25(), 1);
1119294
1119960
  });
1119295
1119961
 
1119296
1119962
  // src/infra/agentkit/index.ts
1119297
1119963
  var init_agentkit = __esm(() => {
1119298
1119964
  init_provider3();
1119299
- init_types14();
1119965
+ init_types15();
1119300
1119966
  });
1119301
1119967
 
1119302
1119968
  // src/infra/agents/tools/agentkit-onchain.ts
@@ -1121457,7 +1122123,7 @@ var init_runtime_tools = __esm(() => {
1121457
1122123
 
1121458
1122124
  // src/core/regime/types.ts
1121459
1122125
  var MarketRegimeSchema, RegimeMetricsSchema, RegimeSignalSchema, RegimeSpanSchema, RegimeHistorySchema, MultiTimeframeRegimeSchema;
1121460
- var init_types16 = __esm(() => {
1122126
+ var init_types17 = __esm(() => {
1121461
1122127
  init_zod();
1121462
1122128
  MarketRegimeSchema = exports_external.enum([
1121463
1122129
  "trending_up",
@@ -1121685,7 +1122351,7 @@ var init_watcher = __esm(() => {
1121685
1122351
 
1121686
1122352
  // src/core/regime/index.ts
1121687
1122353
  var init_regime = __esm(() => {
1121688
- init_types16();
1122354
+ init_types17();
1121689
1122355
  init_classifier();
1121690
1122356
  init_detector();
1121691
1122357
  init_watcher();
@@ -1121697,7 +1122363,7 @@ var init_regime_tools = __esm(() => {
1121697
1122363
  init_tools();
1121698
1122364
  init_zod();
1121699
1122365
  init_regime();
1121700
- init_types16();
1122366
+ init_types17();
1121701
1122367
  init_types8();
1121702
1122368
  init_logger2();
1121703
1122369
  logger92 = createModuleLogger("regime-tools");
@@ -1122374,7 +1123040,7 @@ var init_advanced_tools = __esm(() => {
1122374
1123040
 
1122375
1123041
  // src/core/genome/types.ts
1122376
1123042
  var MutationSchema2, GenomeSchema, ExperimentSchema, MutationSuggestionSchema;
1122377
- var init_types17 = __esm(() => {
1123043
+ var init_types18 = __esm(() => {
1122378
1123044
  init_zod();
1122379
1123045
  MutationSchema2 = exports_external.object({
1122380
1123046
  mutation_id: exports_external.string().uuid(),
@@ -1122901,7 +1123567,7 @@ __export(exports_genome, {
1122901
1123567
  EvolutionLoop: () => EvolutionLoop
1122902
1123568
  });
1122903
1123569
  var init_genome = __esm(() => {
1122904
- init_types17();
1123570
+ init_types18();
1122905
1123571
  init_manager3();
1122906
1123572
  init_mutator();
1122907
1123573
  init_fitness();
@@ -1131950,7 +1132616,7 @@ var init_zod_compat = __esm(() => {
1131950
1132616
 
1131951
1132617
  // node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
1131952
1132618
  var LATEST_PROTOCOL_VERSION = "2025-11-25", SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task", JSONRPC_VERSION4 = "2.0", AssertObjectSchema, ProgressTokenSchema, CursorSchema, TaskCreationParamsSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success, RequestSchema4, NotificationsParamsSchema, NotificationSchema, ResultSchema4, RequestIdSchema, JSONRPCRequestSchema4, isJSONRPCRequest = (value) => JSONRPCRequestSchema4.safeParse(value).success, JSONRPCNotificationSchema4, isJSONRPCNotification = (value) => JSONRPCNotificationSchema4.safeParse(value).success, JSONRPCResultResponseSchema, isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success, ErrorCode, JSONRPCErrorResponseSchema, isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success, JSONRPCMessageSchema, JSONRPCResponseSchema4, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, ServerCapabilitiesSchema4, InitializeResultSchema, InitializedNotificationSchema, isInitializedNotification = (value) => InitializedNotificationSchema.safeParse(value).success, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema4, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ResourceContentsSchema4, TextResourceContentsSchema4, Base64Schema, BlobResourceContentsSchema4, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema4, ImageContentSchema4, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema4, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema4, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError, UrlElicitationRequiredError;
1131953
- var init_types18 = __esm(() => {
1132619
+ var init_types19 = __esm(() => {
1131954
1132620
  init_v42();
1131955
1132621
  SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"];
1131956
1132622
  AssertObjectSchema = custom((v) => v !== null && (typeof v === "object" || typeof v === "function"));
@@ -1133626,7 +1134292,7 @@ function mergeCapabilities(base4, additional) {
1133626
1134292
  var DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;
1133627
1134293
  var init_protocol3 = __esm(() => {
1133628
1134294
  init_zod_compat();
1133629
- init_types18();
1134295
+ init_types19();
1133630
1134296
  init_zod_json_schema_compat();
1133631
1134297
  });
1133632
1134298
 
@@ -1140201,8 +1140867,8 @@ class ExperimentalClientTasks {
1140201
1140867
  return this._client.requestStream(request, resultSchema, options);
1140202
1140868
  }
1140203
1140869
  }
1140204
- var init_client10 = __esm(() => {
1140205
- init_types18();
1140870
+ var init_client11 = __esm(() => {
1140871
+ init_types19();
1140206
1140872
  });
1140207
1140873
 
1140208
1140874
  // node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
@@ -1140283,12 +1140949,12 @@ function getSupportedElicitationModes(capabilities) {
1140283
1140949
  return { supportsFormMode, supportsUrlMode };
1140284
1140950
  }
1140285
1140951
  var Client2;
1140286
- var init_client11 = __esm(() => {
1140952
+ var init_client12 = __esm(() => {
1140287
1140953
  init_protocol3();
1140288
- init_types18();
1140954
+ init_types19();
1140289
1140955
  init_ajv_provider();
1140290
1140956
  init_zod_compat();
1140291
- init_client10();
1140957
+ init_client11();
1140292
1140958
  Client2 = class Client2 extends Protocol {
1140293
1140959
  constructor(_clientInfo, options) {
1140294
1140960
  super(options);
@@ -1141700,7 +1142366,7 @@ async function registerClient(authorizationServerUrl, { metadata, clientMetadata
1141700
1142366
  var UnauthorizedError2, AUTHORIZATION_CODE_RESPONSE_TYPE = "code", AUTHORIZATION_CODE_CHALLENGE_METHOD = "S256";
1141701
1142367
  var init_auth2 = __esm(() => {
1141702
1142368
  init_index_node2();
1141703
- init_types18();
1142369
+ init_types19();
1141704
1142370
  init_auth();
1141705
1142371
  init_auth();
1141706
1142372
  init_errors18();
@@ -1141893,7 +1142559,7 @@ class SSEClientTransport {
1141893
1142559
  var SseError;
1141894
1142560
  var init_sse = __esm(() => {
1141895
1142561
  init_dist16();
1141896
- init_types18();
1142562
+ init_types19();
1141897
1142563
  init_auth2();
1141898
1142564
  SseError = class SseError extends Error {
1141899
1142565
  constructor(code, message4, event2) {
@@ -1142390,7 +1143056,7 @@ function serializeMessage2(message4) {
1142390
1143056
  `;
1142391
1143057
  }
1142392
1143058
  var init_stdio = __esm(() => {
1142393
- init_types18();
1143059
+ init_types19();
1142394
1143060
  });
1142395
1143061
 
1142396
1143062
  // node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js
@@ -1142899,7 +1143565,7 @@ class StreamableHTTPClientTransport {
1142899
1143565
  }
1142900
1143566
  var DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS, StreamableHTTPError;
1142901
1143567
  var init_streamableHttp = __esm(() => {
1142902
- init_types18();
1143568
+ init_types19();
1142903
1143569
  init_auth2();
1142904
1143570
  init_stream();
1142905
1143571
  DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS = {
@@ -1143048,7 +1143714,7 @@ var init_exit_hook = __esm(() => {
1143048
1143714
  // node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
1143049
1143715
  var init_server = __esm(() => {
1143050
1143716
  init_protocol3();
1143051
- init_types18();
1143717
+ init_types19();
1143052
1143718
  init_ajv_provider();
1143053
1143719
  init_zod_compat();
1143054
1143720
  });
@@ -1147801,7 +1148467,7 @@ var require_content_type = __commonJS((exports) => {
1147801
1148467
  // node_modules/@modelcontextprotocol/sdk/dist/esm/server/sse.js
1147802
1148468
  var import_raw_body, import_content_type;
1147803
1148469
  var init_sse2 = __esm(() => {
1147804
- init_types18();
1148470
+ init_types19();
1147805
1148471
  import_raw_body = __toESM(require_raw_body(), 1);
1147806
1148472
  import_content_type = __toESM(require_content_type(), 1);
1147807
1148473
  });
@@ -1148013,7 +1148679,7 @@ var init_dist17 = __esm(() => {
1148013
1148679
 
1148014
1148680
  // node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js
1148015
1148681
  var init_webStandardStreamableHttp = __esm(() => {
1148016
- init_types18();
1148682
+ init_types19();
1148017
1148683
  });
1148018
1148684
 
1148019
1148685
  // node_modules/@modelcontextprotocol/sdk/dist/esm/server/streamableHttp.js
@@ -1148167,12 +1148833,12 @@ var init_dist18 = __esm(() => {
1148167
1148833
  init_error();
1148168
1148834
  init_tools();
1148169
1148835
  init_utils();
1148170
- init_client11();
1148836
+ init_client12();
1148171
1148837
  init_sse();
1148172
1148838
  init_stdio2();
1148173
1148839
  init_streamableHttp();
1148174
1148840
  init_protocol3();
1148175
- init_types18();
1148841
+ init_types19();
1148176
1148842
  init_exit_hook();
1148177
1148843
  init_zod();
1148178
1148844
  init_dist6();
@@ -1149739,7 +1150405,7 @@ function disableMCPHotReload() {
1149739
1150405
  }
1149740
1150406
  }
1149741
1150407
  var _mcpClient = null, _mcpTools = null, _initPromise = null, _hotReloadTimer = null, _lastPluginFingerprint = null;
1149742
- var init_client12 = __esm(() => {
1150408
+ var init_client13 = __esm(() => {
1149743
1150409
  init_dist18();
1149744
1150410
  init_installer();
1149745
1150411
  init_credentials();
@@ -1150736,7 +1151402,7 @@ var init_agents = __esm(async () => {
1150736
1151402
  init_registry2();
1150737
1151403
  init_shared_context();
1150738
1151404
  init_evals2();
1150739
- init_client12();
1151405
+ init_client13();
1150740
1151406
  await init_tools3();
1150741
1151407
  DEFAULT_MEMORY_CONFIG = {
1150742
1151408
  lastMessages: 20,
@@ -1154761,7 +1155427,7 @@ async function checkOrphanedOrders(exchange, activeTrades, result) {
1154761
1155427
  }
1154762
1155428
 
1154763
1155429
  // src/gateway/runtime/gateway-runtime.ts
1154764
- init_client12();
1155430
+ init_client13();
1154765
1155431
 
1154766
1155432
  // src/gateway/scheduler/local-cron.ts
1154767
1155433
  init_logger2();
@@ -1155615,7 +1156281,7 @@ class ReconciliationLoop {
1155615
1156281
  }
1155616
1156282
  }
1155617
1156283
  // src/gateway/daemon/process.ts
1155618
- init_client12();
1156284
+ init_client13();
1155619
1156285
  init_engine();
1155620
1156286
  var logger116 = createModuleLogger("gateway-daemon");
1155621
1156287
  async function startGatewayDaemonProcess() {
@@ -1161748,7 +1162414,7 @@ var import_react64 = __toESM(require_react(), 1);
1161748
1162414
  // package.json
1161749
1162415
  var package_default2 = {
1161750
1162416
  name: "@general-liquidity/gordon-cli",
1161751
- version: "0.75.3",
1162417
+ version: "0.75.4",
1161752
1162418
  description: "The Frontier Trading Agent",
1161753
1162419
  author: "General Liquidity, Inc.",
1161754
1162420
  license: "MIT",
@@ -1163876,7 +1164542,7 @@ async function ensureThreadRegistered() {
1163876
1164542
 
1163877
1164543
  // src/infra/agents/index.ts
1163878
1164544
  init_memory3();
1163879
- init_client12();
1164545
+ init_client13();
1163880
1164546
  init_reflection();
1163881
1164547
 
1163882
1164548
  // src/app/SetupWizard.tsx
@@ -1163893,7 +1164559,8 @@ var EXCHANGE_LABELS = {
1163893
1164559
  coinbase: "Coinbase",
1163894
1164560
  kraken: "Kraken",
1163895
1164561
  bitfinex: "Bitfinex",
1163896
- hyperliquid: "Hyperliquid"
1164562
+ hyperliquid: "Hyperliquid",
1164563
+ uniswap: "Uniswap"
1163897
1164564
  };
1163898
1164565
  var EXCHANGE_PASSPHRASE_REQUIRED = {
1163899
1164566
  binance: false,
@@ -1163901,7 +1164568,8 @@ var EXCHANGE_PASSPHRASE_REQUIRED = {
1163901
1164568
  coinbase: true,
1163902
1164569
  kraken: false,
1163903
1164570
  bitfinex: false,
1163904
- hyperliquid: false
1164571
+ hyperliquid: false,
1164572
+ uniswap: false
1163905
1164573
  };
1163906
1164574
  var EXCHANGE_WALLET_AUTH = {
1163907
1164575
  binance: false,
@@ -1163909,7 +1164577,8 @@ var EXCHANGE_WALLET_AUTH = {
1163909
1164577
  coinbase: false,
1163910
1164578
  kraken: false,
1163911
1164579
  bitfinex: false,
1163912
- hyperliquid: true
1164580
+ hyperliquid: true,
1164581
+ uniswap: true
1163913
1164582
  };
1163914
1164583
  var EXCHANGE_INSTRUCTIONS = {
1163915
1164584
  binance: [
@@ -1163949,6 +1164618,12 @@ var EXCHANGE_INSTRUCTIONS = {
1163949
1164618
  "IMPORTANT: Use a dedicated wallet with limited funds for trading",
1163950
1164619
  "Never use your main wallet's private key",
1163951
1164620
  "Fund your Hyperliquid account by depositing USDC on Arbitrum"
1164621
+ ],
1164622
+ uniswap: [
1164623
+ "Get an API key from developers.uniswap.org",
1164624
+ "Provide your wallet address (the address that will execute swaps)",
1164625
+ "Ensure your wallet has ETH for gas and tokens to trade",
1164626
+ "Supports 15+ chains: Ethereum, Base, Arbitrum, Polygon, Optimism, etc."
1163952
1164627
  ]
1163953
1164628
  };
1163954
1164629
  function maskSecret(value) {
@@ -1165784,7 +1166459,7 @@ function useTheme() {
1165784
1166459
  }
1165785
1166460
 
1165786
1166461
  // src/app/App.tsx
1165787
- init_client12();
1166462
+ init_client13();
1165788
1166463
  init_llm();
1165789
1166464
  init_binance2();
1165790
1166465
  init_exchange();
@@ -1168039,7 +1168714,7 @@ async function exchangeCompare(symbol16) {
1168039
1168714
  }
1168040
1168715
  }
1168041
1168716
  function isWalletBasedExchange(type2) {
1168042
- return type2 === "hyperliquid";
1168717
+ return type2 === "hyperliquid" || type2 === "uniswap";
1168043
1168718
  }
1168044
1168719
  function getExchangeSetupInstructions(type2) {
1168045
1168720
  const instructions = {
@@ -1168073,7 +1168748,12 @@ function getExchangeSetupInstructions(type2) {
1168073
1168748
  2. Export the private key from your wallet (MetaMask: Account Details > Export Private Key)
1168074
1168749
  3. IMPORTANT: Use a DEDICATED trading wallet with limited funds
1168075
1168750
  4. Fund your Hyperliquid account by depositing USDC on Arbitrum
1168076
- 5. Note: Hyperliquid uses wallet-based auth (no API key needed)`
1168751
+ 5. Note: Hyperliquid uses wallet-based auth (no API key needed)`,
1168752
+ uniswap: `
1168753
+ 1. Get an API key from developers.uniswap.org
1168754
+ 2. Provide your wallet address (the address that will execute swaps)
1168755
+ 3. Ensure your wallet has ETH for gas and tokens to trade
1168756
+ 4. Supports 15+ chains: Ethereum, Base, Arbitrum, Polygon, Optimism, etc.`
1168077
1168757
  };
1168078
1168758
  return instructions[type2] || "Follow the exchange documentation to create API keys.";
1168079
1168759
  }
@@ -1172011,7 +1172691,7 @@ async function checkForUpdates() {
1172011
1172691
 
1172012
1172692
  // src/index.tsx
1172013
1172693
  init_telemetry2();
1172014
- init_client12();
1172694
+ init_client13();
1172015
1172695
  var jsx_dev_runtime26 = __toESM(require_jsx_dev_runtime(), 1);
1172016
1172696
  var flags = parseFlags();
1172017
1172697
  var command = parseCommand();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@general-liquidity/gordon-cli",
3
- "version": "0.75.3",
3
+ "version": "0.75.4",
4
4
  "description": "The Frontier Trading Agent",
5
5
  "author": "General Liquidity, Inc.",
6
6
  "license": "MIT",