@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.
- package/dist/gordon.js +758 -78
- 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 ||
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 <
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
728080
|
-
|
|
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
|
|
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 =
|
|
880348
|
-
var isTokenSecurityChainId = (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
|
|
1048461
|
-
var
|
|
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 =
|
|
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) =>
|
|
1048473
|
-
const network = (0,
|
|
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,
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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 ?
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1140205
|
-
|
|
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
|
|
1140952
|
+
var init_client12 = __esm(() => {
|
|
1140287
1140953
|
init_protocol3();
|
|
1140288
|
-
|
|
1140954
|
+
init_types19();
|
|
1140289
1140955
|
init_ajv_provider();
|
|
1140290
1140956
|
init_zod_compat();
|
|
1140291
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1148836
|
+
init_client12();
|
|
1148171
1148837
|
init_sse();
|
|
1148172
1148838
|
init_stdio2();
|
|
1148173
1148839
|
init_streamableHttp();
|
|
1148174
1148840
|
init_protocol3();
|
|
1148175
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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();
|