hak-saucerswap-plugin 1.0.1 → 2.0.0
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/LICENSE +1 -1
- package/README.md +17 -93
- package/dist/index.cjs +179 -89
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +179 -90
- package/dist/index.js.map +1 -1
- package/package.json +5 -16
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/endpoints.ts","../src/api/client.ts","../src/config.ts","../src/tools/farms.ts","../src/utils/amm.ts","../src/utils/tokens.ts","../src/utils/transactions.ts","../src/utils/units.ts","../src/tools/liquidity.ts","../src/tools/pools.ts","../src/utils/quote.ts","../src/tools/quote.ts","../src/tools/swap.ts","../src/index.ts"],"names":["axios","z","TokenId","AccountId","ContractId","AgentMode","params","ContractFunctionParameters","ContractExecuteTransaction","resolveDeadline"],"mappings":"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","file":"index.cjs","sourcesContent":["export const SAUCER_ENDPOINTS = {\n poolsV1: \"/pools\",\n poolsV2: \"/v2/pools\",\n swapQuote: \"/v1/swap/quote\",\n tokens: \"/tokens\",\n farms: \"/farms\",\n stats: \"/stats\",\n} as const;\n","import axios, { type AxiosError, type AxiosInstance } from \"axios\";\nimport type {\n ApiFarm,\n ApiLiquidityPool,\n ApiSwapQuote,\n ApiToken,\n PoolVersion,\n SaucerSwapClientOptions,\n} from \"../types\";\nimport { SAUCER_ENDPOINTS } from \"./endpoints\";\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst isRetryableError = (error: AxiosError): boolean => {\n if (error.code === \"ECONNRESET\" || error.code === \"ETIMEDOUT\") {\n return true;\n }\n const status = error.response?.status;\n if (!status) {\n return true;\n }\n return status === 429 || (status >= 500 && status < 600);\n};\n\nexport class SaucerSwapClient {\n private readonly http: AxiosInstance;\n private readonly retries: number;\n private tokensCache: ApiToken[] | null = null;\n private tokenIndex: Map<string, ApiToken> | null = null;\n\n constructor(options: SaucerSwapClientOptions & { http?: AxiosInstance } = {}) {\n this.retries = options.retries ?? 2;\n this.http =\n options.http ??\n axios.create({\n baseURL: options.baseUrl ?? \"https://api.saucerswap.finance\",\n timeout: options.timeoutMs ?? 10_000,\n });\n }\n\n private async request<T>(path: string, params?: Record<string, string | number>): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= this.retries; attempt += 1) {\n try {\n const response = await this.http.get<T>(path, { params });\n return response.data;\n } catch (error) {\n const axiosError = error as AxiosError;\n lastError = axiosError;\n if (attempt < this.retries && isRetryableError(axiosError)) {\n await sleep(200 * 2 ** attempt);\n continue;\n }\n throw axiosError;\n }\n }\n throw lastError;\n }\n\n async getTokens(): Promise<ApiToken[]> {\n const tokens = await this.request<ApiToken[]>(SAUCER_ENDPOINTS.tokens);\n this.cacheTokens(tokens);\n return tokens;\n }\n\n async getTokenByIdOrSymbol(input: string): Promise<ApiToken | null> {\n if (!this.tokenIndex) {\n await this.getTokens();\n }\n return this.tokenIndex?.get(input.toLowerCase()) ?? null;\n }\n\n async resolveTokenId(input: string): Promise<string> {\n if (/^\\d+\\.\\d+\\.\\d+$/.test(input)) {\n return input;\n }\n const token = await this.getTokenByIdOrSymbol(input);\n return token?.id ?? input;\n }\n\n async getPools(version: PoolVersion): Promise<ApiLiquidityPool[]> {\n const endpoint = version === \"v1\" ? SAUCER_ENDPOINTS.poolsV1 : SAUCER_ENDPOINTS.poolsV2;\n return this.request<ApiLiquidityPool[]>(endpoint);\n }\n\n async getPoolByTokens(\n tokenA: string,\n tokenB: string,\n version: PoolVersion,\n ): Promise<ApiLiquidityPool | null> {\n const pools = await this.getPools(version);\n const match = pools.find((pool) => {\n const direct = pool.tokenA.id === tokenA && pool.tokenB.id === tokenB;\n const inverse = pool.tokenA.id === tokenB && pool.tokenB.id === tokenA;\n return direct || inverse;\n });\n return match ?? null;\n }\n\n async getSwapQuote(params: {\n fromToken: string;\n toToken: string;\n amount: string;\n }): Promise<ApiSwapQuote> {\n const { fromToken, toToken, amount } = params;\n return this.request<ApiSwapQuote>(SAUCER_ENDPOINTS.swapQuote, {\n tokenIn: fromToken,\n tokenOut: toToken,\n amount,\n fromToken,\n toToken,\n });\n }\n\n async getFarms(): Promise<ApiFarm[]> {\n return this.request<ApiFarm[]>(SAUCER_ENDPOINTS.farms);\n }\n\n async getStats(): Promise<Record<string, unknown>> {\n return this.request<Record<string, unknown>>(SAUCER_ENDPOINTS.stats);\n }\n\n private cacheTokens(tokens: ApiToken[]) {\n this.tokensCache = tokens;\n this.tokenIndex = new Map();\n for (const token of tokens) {\n this.tokenIndex.set(token.id.toLowerCase(), token);\n this.tokenIndex.set(token.symbol.toLowerCase(), token);\n this.tokenIndex.set(token.name.toLowerCase(), token);\n }\n }\n}\n\nexport const createSaucerSwapClient = (options: SaucerSwapClientOptions): SaucerSwapClient => {\n return new SaucerSwapClient(options);\n};\n","import type { PoolVersion, SaucerSwapConfig } from \"./types\";\n\nconst DEFAULT_CONFIG: SaucerSwapConfig = {\n baseUrl: \"https://api.saucerswap.finance\",\n timeoutMs: 10_000,\n retries: 2,\n routerContractId: undefined,\n routerV2ContractId: undefined,\n wrappedHbarTokenId: undefined,\n tokenAliases: {},\n defaultPoolVersion: \"v2\",\n gasLimit: 2_000_000,\n deadlineMinutes: 20,\n};\n\nconst toNumber = (value: string | undefined, fallback: number): number => {\n if (!value) {\n return fallback;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n};\n\nconst readTokenAliases = (value: string | undefined): Record<string, string> => {\n if (!value) {\n return {};\n }\n try {\n const parsed = JSON.parse(value);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Record<string, string>;\n }\n } catch {\n return {};\n }\n return {};\n};\n\nconst readPoolVersion = (value: string | undefined): PoolVersion | undefined => {\n if (value === \"v1\" || value === \"v2\") {\n return value;\n }\n return undefined;\n};\n\nconst readContextConfig = (context: unknown): Partial<SaucerSwapConfig> => {\n if (!context || typeof context !== \"object\") {\n return {};\n }\n const ctx = context as {\n config?: { saucerswap?: Partial<SaucerSwapConfig> };\n pluginConfig?: { saucerswap?: Partial<SaucerSwapConfig> };\n };\n return {\n ...(ctx.pluginConfig?.saucerswap ?? {}),\n ...(ctx.config?.saucerswap ?? {}),\n };\n};\n\nexport const resolveSaucerSwapConfig = (context?: unknown): SaucerSwapConfig => {\n const ctxConfig = readContextConfig(context);\n const envAliases = readTokenAliases(process.env.SAUCERSWAP_TOKEN_ALIASES);\n const envDefaultVersion = readPoolVersion(process.env.SAUCERSWAP_DEFAULT_POOL_VERSION);\n\n return {\n ...DEFAULT_CONFIG,\n ...ctxConfig,\n baseUrl: ctxConfig.baseUrl ?? process.env.SAUCERSWAP_BASE_URL ?? DEFAULT_CONFIG.baseUrl,\n timeoutMs:\n ctxConfig.timeoutMs ?? toNumber(process.env.SAUCERSWAP_TIMEOUT_MS, DEFAULT_CONFIG.timeoutMs),\n retries: ctxConfig.retries ?? toNumber(process.env.SAUCERSWAP_RETRIES, DEFAULT_CONFIG.retries),\n routerContractId: ctxConfig.routerContractId ?? process.env.SAUCERSWAP_ROUTER_CONTRACT_ID,\n routerV2ContractId:\n ctxConfig.routerV2ContractId ?? process.env.SAUCERSWAP_ROUTER_V2_CONTRACT_ID,\n wrappedHbarTokenId:\n ctxConfig.wrappedHbarTokenId ?? process.env.SAUCERSWAP_WRAPPED_HBAR_TOKEN_ID,\n tokenAliases: {\n ...envAliases,\n ...(ctxConfig.tokenAliases ?? {}),\n },\n defaultPoolVersion:\n ctxConfig.defaultPoolVersion ?? envDefaultVersion ?? DEFAULT_CONFIG.defaultPoolVersion,\n gasLimit:\n ctxConfig.gasLimit ?? toNumber(process.env.SAUCERSWAP_GAS_LIMIT, DEFAULT_CONFIG.gasLimit),\n deadlineMinutes:\n ctxConfig.deadlineMinutes ??\n toNumber(process.env.SAUCERSWAP_DEADLINE_MINUTES, DEFAULT_CONFIG.deadlineMinutes),\n };\n};\n","import type { Tool } from \"hedera-agent-kit\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\n\nconst farmsInputSchema = z.object({\n poolId: z.number().int().positive().optional().describe(\"Optional pool ID to filter farms\"),\n});\n\nexport const farmsTool: Tool = {\n method: \"saucerswap_get_farms\",\n name: \"SaucerSwap Get Farms\",\n description: \"Get active farming opportunities on SaucerSwap.\",\n parameters: farmsInputSchema,\n execute: async (_client, context, params) => {\n const args = farmsInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n try {\n const farms = await api.getFarms();\n const filtered = args.poolId ? farms.filter((farm) => farm.poolId === args.poolId) : farms;\n\n return {\n success: true,\n farms: filtered,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n","export const calculatePriceImpact = (\n inputAmount: string,\n outputAmount: string,\n poolReserveIn: string,\n poolReserveOut: string,\n): number | null => {\n const inAmount = Number(inputAmount);\n const outAmount = Number(outputAmount);\n const reserveIn = Number(poolReserveIn);\n const reserveOut = Number(poolReserveOut);\n if (\n !Number.isFinite(inAmount) ||\n !Number.isFinite(outAmount) ||\n !Number.isFinite(reserveIn) ||\n !Number.isFinite(reserveOut) ||\n inAmount <= 0 ||\n outAmount <= 0 ||\n reserveIn <= 0 ||\n reserveOut <= 0\n ) {\n return null;\n }\n const expectedOutput = (inAmount * reserveOut) / (reserveIn + inAmount);\n if (!Number.isFinite(expectedOutput) || expectedOutput <= 0) {\n return null;\n }\n return ((expectedOutput - outAmount) / expectedOutput) * 100;\n};\n\nexport const applySlippageToAmount = (amount: string, slippageTolerance: number): string => {\n const amountBig = BigInt(amount);\n const bps = Math.max(0, Math.round(slippageTolerance * 100));\n const numerator = BigInt(10_000 - bps);\n return ((amountBig * numerator) / 10_000n).toString();\n};\n","import { AccountId, ContractId, TokenId } from \"@hashgraph/sdk\";\nimport type { SaucerSwapConfig } from \"../types\";\n\nexport const normalizeTokenAlias = (token: string, config: SaucerSwapConfig): string => {\n const tokenLower = token.toLowerCase();\n for (const [alias, value] of Object.entries(config.tokenAliases)) {\n if (alias.toLowerCase() === tokenLower) {\n return value;\n }\n }\n if (tokenLower === \"hbar\" && config.wrappedHbarTokenId) {\n return config.wrappedHbarTokenId;\n }\n return token;\n};\n\nexport const requireTokenId = (token: string): string => {\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(token)) {\n throw new Error(`Token ID required for on-chain actions: ${token}`);\n }\n return token;\n};\n\nexport const tokenIdToSolidityAddress = (tokenId: string): string => {\n return TokenId.fromString(tokenId).toSolidityAddress();\n};\n\nexport const accountIdToSolidityAddress = (accountId: string): string => {\n return AccountId.fromString(accountId).toSolidityAddress();\n};\n\nexport const contractIdFromString = (contractId: string): ContractId => {\n return ContractId.fromString(contractId);\n};\n","import type { Client, Transaction } from \"@hashgraph/sdk\";\nimport { AgentMode } from \"hedera-agent-kit\";\n\nexport const finalizeTransaction = async (\n transaction: Transaction,\n client: Client,\n context: unknown,\n extra: Record<string, unknown>,\n) => {\n const mode = (context as { mode?: AgentMode | string }).mode;\n if (mode === AgentMode.RETURN_BYTES || mode === \"returnBytes\" || mode === \"RETURN_BYTES\") {\n const txBytes = await transaction.toBytes();\n return {\n success: true,\n transactionBytes: Buffer.from(txBytes).toString(\"base64\"),\n ...extra,\n };\n }\n\n const response = await transaction.execute(client);\n const receipt = await response.getReceipt(client);\n\n return {\n success: true,\n transactionId: response.transactionId?.toString(),\n status: receipt.status.toString(),\n ...extra,\n };\n};\n","export const parseUnits = (amount: string, decimals: number): string => {\n if (!amount || typeof amount !== \"string\") {\n throw new Error(\"Amount must be a non-empty string.\");\n }\n if (decimals < 0) {\n throw new Error(\"Decimals must be non-negative.\");\n }\n const trimmed = amount.trim();\n if (!/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error(`Invalid amount format: ${amount}`);\n }\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (fraction.length > decimals) {\n throw new Error(`Amount has more than ${decimals} decimal places.`);\n }\n const paddedFraction = fraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`;\n const normalized = combined.replace(/^0+/, \"\");\n return normalized === \"\" ? \"0\" : normalized;\n};\n\nexport const formatUnits = (amount: string, decimals: number): string => {\n if (!amount || typeof amount !== \"string\") {\n throw new Error(\"Amount must be a non-empty string.\");\n }\n if (decimals < 0) {\n throw new Error(\"Decimals must be non-negative.\");\n }\n const trimmed = amount.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`Invalid integer amount: ${amount}`);\n }\n const padded = trimmed.padStart(decimals + 1, \"0\");\n const whole = padded.slice(0, -decimals);\n const fraction = padded.slice(-decimals).replace(/0+$/, \"\");\n return fraction.length > 0 ? `${whole}.${fraction}` : whole;\n};\n","import { ContractExecuteTransaction, ContractFunctionParameters } from \"@hashgraph/sdk\";\nimport type { Tool } from \"hedera-agent-kit\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount } from \"../utils/amm\";\nimport {\n accountIdToSolidityAddress,\n contractIdFromString,\n normalizeTokenAlias,\n requireTokenId,\n tokenIdToSolidityAddress,\n} from \"../utils/tokens\";\nimport { finalizeTransaction } from \"../utils/transactions\";\nimport { parseUnits } from \"../utils/units\";\n\nconst addLiquidityInputSchema = z.object({\n tokenA: z.string().describe(\"First token ID\"),\n tokenB: z.string().describe(\"Second token ID\"),\n amountA: z.string().describe(\"Amount of tokenA to add\"),\n amountB: z.string().describe(\"Amount of tokenB to add\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n});\n\nconst removeLiquidityInputSchema = z.object({\n tokenA: z.string().describe(\"First token ID\"),\n tokenB: z.string().describe(\"Second token ID\"),\n lpTokenAmount: z.string().describe(\"Amount of LP tokens to burn\"),\n minAmountA: z.string().describe(\"Minimum amount of tokenA to receive\"),\n minAmountB: z.string().describe(\"Minimum amount of tokenB to receive\"),\n});\n\nconst resolveDeadline = (defaultMinutes: number): number => {\n return Math.floor(Date.now() / 1000) + defaultMinutes * 60;\n};\n\nconst resolveRouterContract = (config: ReturnType<typeof resolveSaucerSwapConfig>): string => {\n const routerContractId =\n config.defaultPoolVersion === \"v2\"\n ? (config.routerV2ContractId ?? config.routerContractId)\n : (config.routerContractId ?? config.routerV2ContractId);\n if (!routerContractId) {\n throw new Error(\"Missing SaucerSwap router contract ID configuration.\");\n }\n return routerContractId;\n};\n\nexport const addLiquidityTool: Tool = {\n method: \"saucerswap_add_liquidity\",\n name: \"SaucerSwap Add Liquidity\",\n description: \"Add liquidity to a SaucerSwap pool.\",\n parameters: addLiquidityInputSchema,\n execute: async (client, context, params) => {\n const args = addLiquidityInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for liquidity actions.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const tokenAInput = normalizeTokenAlias(args.tokenA, config);\n const tokenBInput = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenAInput);\n const tokenBId = await api.resolveTokenId(tokenBInput);\n\n const tokenA = await api.getTokenByIdOrSymbol(tokenAId);\n const tokenB = await api.getTokenByIdOrSymbol(tokenBId);\n\n if (!tokenA || !tokenB) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const amountADesired = parseUnits(args.amountA, tokenA.decimals);\n const amountBDesired = parseUnits(args.amountB, tokenB.decimals);\n const amountAMin = applySlippageToAmount(amountADesired, slippageTolerance);\n const amountBMin = applySlippageToAmount(amountBDesired, slippageTolerance);\n\n const routerContractId = resolveRouterContract(config);\n const deadline = resolveDeadline(config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n\n const params = new ContractFunctionParameters()\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenAId)))\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenBId)))\n .addUint256(amountADesired)\n .addUint256(amountBDesired)\n .addUint256(amountAMin)\n .addUint256(amountBMin)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"addLiquidity\", params);\n\n return await finalizeTransaction(transaction, client, context, {\n amountADesired,\n amountBDesired,\n amountAMin,\n amountBMin,\n });\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n\nexport const removeLiquidityTool: Tool = {\n method: \"saucerswap_remove_liquidity\",\n name: \"SaucerSwap Remove Liquidity\",\n description: \"Remove liquidity from a SaucerSwap pool.\",\n parameters: removeLiquidityInputSchema,\n execute: async (client, context, params) => {\n const args = removeLiquidityInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for liquidity actions.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const tokenAInput = normalizeTokenAlias(args.tokenA, config);\n const tokenBInput = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenAInput);\n const tokenBId = await api.resolveTokenId(tokenBInput);\n\n const pool = await api.getPoolByTokens(tokenAId, tokenBId, config.defaultPoolVersion);\n if (!pool) {\n return {\n success: false,\n error: \"Unable to locate pool for the provided token pair.\",\n };\n }\n\n const tokenA = await api.getTokenByIdOrSymbol(tokenAId);\n const tokenB = await api.getTokenByIdOrSymbol(tokenBId);\n if (!tokenA || !tokenB) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const lpAmount = parseUnits(args.lpTokenAmount, pool.lpToken.decimals);\n const minAmountA = parseUnits(args.minAmountA, tokenA.decimals);\n const minAmountB = parseUnits(args.minAmountB, tokenB.decimals);\n\n const routerContractId = resolveRouterContract(config);\n const deadline = resolveDeadline(config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n\n const params = new ContractFunctionParameters()\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenAId)))\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenBId)))\n .addUint256(lpAmount)\n .addUint256(minAmountA)\n .addUint256(minAmountB)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"removeLiquidity\", params);\n\n return await finalizeTransaction(transaction, client, context, {\n lpAmount,\n minAmountA,\n minAmountB,\n });\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n","import type { Tool } from \"hedera-agent-kit\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { normalizeTokenAlias } from \"../utils/tokens\";\n\nconst poolsInputSchema = z.object({\n tokenA: z.string().optional().describe(\"First token ID or symbol\"),\n tokenB: z.string().optional().describe(\"Second token ID or symbol\"),\n version: z.enum([\"v1\", \"v2\"]).optional().describe(\"Pool version\"),\n limit: z.number().int().positive().optional().describe(\"Maximum number of pools to return\"),\n});\n\nexport const poolsTool: Tool = {\n method: \"saucerswap_get_pools\",\n name: \"SaucerSwap Get Pools\",\n description: \"Query SaucerSwap liquidity pools and reserves.\",\n parameters: poolsInputSchema,\n execute: async (_client, context, params) => {\n const args = poolsInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n try {\n const version = args.version ?? config.defaultPoolVersion;\n const pools = await api.getPools(version);\n\n let filtered = pools;\n if (args.tokenA && args.tokenB) {\n const tokenA = normalizeTokenAlias(args.tokenA, config);\n const tokenB = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenA);\n const tokenBId = await api.resolveTokenId(tokenB);\n filtered = pools.filter((pool) => {\n const direct = pool.tokenA.id === tokenAId && pool.tokenB.id === tokenBId;\n const inverse = pool.tokenA.id === tokenBId && pool.tokenB.id === tokenAId;\n return direct || inverse;\n });\n }\n\n if (args.limit && args.limit > 0) {\n filtered = filtered.slice(0, args.limit);\n }\n\n return {\n success: true,\n version,\n pools: filtered,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n","import type { ApiSwapQuote, SwapQuote } from \"../types\";\n\nconst readAmount = (value: unknown): string | null => {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value.toString();\n }\n return null;\n};\n\nexport const normalizeSwapQuote = (quote: ApiSwapQuote, fallbackAmountIn: string): SwapQuote => {\n const amountIn = readAmount(quote.amountIn) ?? fallbackAmountIn;\n const expectedOutput =\n readAmount(quote.expectedOutput) ??\n readAmount(quote.amountOut) ??\n readAmount((quote as { amountOutMin?: string | number }).amountOutMin) ??\n \"\";\n\n if (!expectedOutput) {\n throw new Error(\"SaucerSwap quote did not include an output amount.\");\n }\n\n return {\n amountIn,\n expectedOutput,\n priceImpact: typeof quote.priceImpact === \"number\" ? quote.priceImpact : null,\n route: Array.isArray(quote.route) ? quote.route : [],\n raw: quote,\n };\n};\n","import type { Tool } from \"hedera-agent-kit\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount, calculatePriceImpact } from \"../utils/amm\";\nimport { normalizeSwapQuote } from \"../utils/quote\";\nimport { normalizeTokenAlias } from \"../utils/tokens\";\n\nconst quoteInputSchema = z.object({\n fromToken: z.string().describe(\"Token ID to swap from (e.g., 'HBAR' or '0.0.123456')\"),\n toToken: z.string().describe(\"Token ID to swap to\"),\n amount: z.string().describe(\"Amount to swap (decimal format)\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n});\n\nexport const quoteTool: Tool = {\n method: \"saucerswap_get_swap_quote\",\n name: \"SaucerSwap Get Swap Quote\",\n description: \"Get a price quote for swapping tokens on SaucerSwap.\",\n parameters: quoteInputSchema,\n execute: async (_client, context, params) => {\n const args = quoteInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const client = (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient;\n const api = client ?? createSaucerSwapClient(config);\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n try {\n const fromToken = normalizeTokenAlias(args.fromToken, config);\n const toToken = normalizeTokenAlias(args.toToken, config);\n const fromTokenId = await api.resolveTokenId(fromToken);\n const toTokenId = await api.resolveTokenId(toToken);\n const rawQuote = await api.getSwapQuote({\n fromToken: fromTokenId,\n toToken: toTokenId,\n amount: args.amount,\n });\n\n const normalized = normalizeSwapQuote(rawQuote, args.amount);\n\n if (normalized.priceImpact === null) {\n const pool = await api.getPoolByTokens(fromTokenId, toTokenId, config.defaultPoolVersion);\n if (pool && rawQuote.amountIn && rawQuote.amountOut) {\n const isAToB = pool.tokenA.id === fromTokenId;\n const reserveIn = isAToB ? pool.tokenReserveA : pool.tokenReserveB;\n const reserveOut = isAToB ? pool.tokenReserveB : pool.tokenReserveA;\n normalized.priceImpact = calculatePriceImpact(\n rawQuote.amountIn,\n rawQuote.amountOut,\n reserveIn,\n reserveOut,\n );\n }\n }\n\n let minOutput: string | null = null;\n if (normalized.expectedOutput.includes(\".\")) {\n const expectedNumber = Number(normalized.expectedOutput);\n minOutput = Number.isFinite(expectedNumber)\n ? (expectedNumber * (1 - slippageTolerance / 100)).toString()\n : null;\n } else {\n minOutput = applySlippageToAmount(normalized.expectedOutput, slippageTolerance);\n }\n\n return {\n success: true,\n quote: normalized,\n minOutput,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n","import { ContractExecuteTransaction, ContractFunctionParameters } from \"@hashgraph/sdk\";\nimport type { Tool } from \"hedera-agent-kit\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount } from \"../utils/amm\";\nimport { normalizeSwapQuote } from \"../utils/quote\";\nimport {\n accountIdToSolidityAddress,\n contractIdFromString,\n normalizeTokenAlias,\n requireTokenId,\n tokenIdToSolidityAddress,\n} from \"../utils/tokens\";\nimport { finalizeTransaction } from \"../utils/transactions\";\nimport { parseUnits } from \"../utils/units\";\n\nconst swapInputSchema = z.object({\n fromToken: z.string().describe(\"Token ID to swap from (e.g., 'HBAR' or '0.0.123456')\"),\n toToken: z.string().describe(\"Token ID to swap to\"),\n amount: z.string().describe(\"Amount to swap (decimal format)\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n deadline: z\n .number()\n .optional()\n .describe(\"Transaction deadline in minutes from now or a unix timestamp\"),\n});\n\nconst resolveDeadline = (deadlineInput: number | undefined, defaultMinutes: number): number => {\n const now = Math.floor(Date.now() / 1000);\n if (!deadlineInput) {\n return now + defaultMinutes * 60;\n }\n if (deadlineInput > now + 60) {\n return Math.floor(deadlineInput);\n }\n return now + Math.round(deadlineInput) * 60;\n};\n\nconst amountToSmallest = (amount: string, decimals: number): string => {\n return parseUnits(amount, decimals);\n};\n\nconst expectedToSmallest = (amount: string, decimals: number): string => {\n return amount.includes(\".\") ? parseUnits(amount, decimals) : amount;\n};\n\nexport const swapTool: Tool = {\n method: \"saucerswap_swap_tokens\",\n name: \"SaucerSwap Swap Tokens\",\n description: \"Execute a token swap on SaucerSwap DEX.\",\n parameters: swapInputSchema,\n execute: async (client, context, params) => {\n const args = swapInputSchema.parse(params);\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for swaps.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const fromTokenAlias = normalizeTokenAlias(args.fromToken, config);\n const toTokenAlias = normalizeTokenAlias(args.toToken, config);\n const fromTokenId = await api.resolveTokenId(fromTokenAlias);\n const toTokenId = await api.resolveTokenId(toTokenAlias);\n\n const fromTokenMeta = await api.getTokenByIdOrSymbol(fromTokenId);\n const toTokenMeta = await api.getTokenByIdOrSymbol(toTokenId);\n\n if (!fromTokenMeta || !toTokenMeta) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const quote = normalizeSwapQuote(\n await api.getSwapQuote({\n fromToken: fromTokenId,\n toToken: toTokenId,\n amount: args.amount,\n }),\n args.amount,\n );\n\n const amountInSmallest = amountToSmallest(args.amount, fromTokenMeta.decimals);\n const expectedOutSmallest = expectedToSmallest(quote.expectedOutput, toTokenMeta.decimals);\n const minOutSmallest = applySlippageToAmount(expectedOutSmallest, slippageTolerance);\n\n const routerContractId =\n config.defaultPoolVersion === \"v2\"\n ? (config.routerV2ContractId ?? config.routerContractId)\n : (config.routerContractId ?? config.routerV2ContractId);\n\n if (!routerContractId) {\n return {\n success: false,\n error: \"Missing SaucerSwap router contract ID configuration.\",\n };\n }\n\n const deadline = resolveDeadline(args.deadline, config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n const path = [\n tokenIdToSolidityAddress(requireTokenId(fromTokenId)),\n tokenIdToSolidityAddress(requireTokenId(toTokenId)),\n ];\n\n const params = new ContractFunctionParameters()\n .addUint256(amountInSmallest)\n .addUint256(minOutSmallest)\n .addAddressArray(path)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"swapExactTokensForTokens\", params);\n\n return await finalizeTransaction(transaction, client, context, {\n estimatedOutput: quote.expectedOutput,\n minOutput: minOutSmallest,\n priceImpact: quote.priceImpact,\n route: quote.route,\n });\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n },\n};\n","import type { Plugin } from \"hedera-agent-kit\";\nimport { farmsTool } from \"./tools/farms\";\nimport { addLiquidityTool, removeLiquidityTool } from \"./tools/liquidity\";\nimport { poolsTool } from \"./tools/pools\";\nimport { quoteTool } from \"./tools/quote\";\nimport { swapTool } from \"./tools/swap\";\n\nexport const saucerswapPlugin: Plugin = {\n name: \"saucerswap\",\n description:\n \"Integration with SaucerSwap DEX for token swaps, liquidity provision, and yield farming\",\n tools: () => [swapTool, quoteTool, poolsTool, addLiquidityTool, removeLiquidityTool, farmsTool],\n};\n\nexport { saucerswapPlugin as default };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/endpoints.ts","../src/api/client.ts","../src/config.ts","../src/tools/farms.ts","../src/utils/amm.ts","../src/utils/tokens.ts","../src/utils/units.ts","../src/tools/liquidity.ts","../src/tools/pools.ts","../src/utils/quote.ts","../src/tools/quote.ts","../src/tools/swap.ts","../src/index.ts"],"names":["axios","z","BaseTool","TokenId","AccountId","ContractId","ContractFunctionParameters","ContractExecuteTransaction","handleTransaction","resolveDeadline"],"mappings":"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","file":"index.cjs","sourcesContent":["export const SAUCER_ENDPOINTS = {\n poolsV1: \"/pools\",\n poolsV2: \"/v2/pools\",\n swapQuote: \"/v1/swap/quote\",\n tokens: \"/tokens\",\n farms: \"/farms\",\n stats: \"/stats\",\n} as const;\n","import axios, { type AxiosError, type AxiosInstance } from \"axios\";\nimport type {\n ApiFarm,\n ApiLiquidityPool,\n ApiSwapQuote,\n ApiToken,\n PoolVersion,\n SaucerSwapClientOptions,\n} from \"../types\";\nimport { SAUCER_ENDPOINTS } from \"./endpoints\";\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst isRetryableError = (error: AxiosError): boolean => {\n if (error.code === \"ECONNRESET\" || error.code === \"ETIMEDOUT\") {\n return true;\n }\n const status = error.response?.status;\n if (!status) {\n return true;\n }\n return status === 429 || (status >= 500 && status < 600);\n};\n\nexport class SaucerSwapClient {\n private readonly http: AxiosInstance;\n private readonly retries: number;\n private tokensCache: ApiToken[] | null = null;\n private tokenIndex: Map<string, ApiToken> | null = null;\n\n constructor(options: SaucerSwapClientOptions & { http?: AxiosInstance } = {}) {\n this.retries = options.retries ?? 2;\n this.http =\n options.http ??\n axios.create({\n baseURL: options.baseUrl ?? \"https://api.saucerswap.finance\",\n timeout: options.timeoutMs ?? 10_000,\n headers: options.apiKey ? { \"x-api-key\": options.apiKey } : undefined,\n });\n }\n\n private async request<T>(path: string, params?: Record<string, string | number>): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= this.retries; attempt += 1) {\n try {\n const response = await this.http.get<T>(path, { params });\n return response.data;\n } catch (error) {\n const axiosError = error as AxiosError;\n lastError = axiosError;\n if (attempt < this.retries && isRetryableError(axiosError)) {\n await sleep(200 * 2 ** attempt);\n continue;\n }\n throw axiosError;\n }\n }\n throw lastError;\n }\n\n async getTokens(): Promise<ApiToken[]> {\n const tokens = await this.request<ApiToken[]>(SAUCER_ENDPOINTS.tokens);\n this.cacheTokens(tokens);\n return tokens;\n }\n\n async getTokenByIdOrSymbol(input: string): Promise<ApiToken | null> {\n if (!this.tokenIndex) {\n await this.getTokens();\n }\n return this.tokenIndex?.get(input.toLowerCase()) ?? null;\n }\n\n async resolveTokenId(input: string): Promise<string> {\n if (/^\\d+\\.\\d+\\.\\d+$/.test(input)) {\n return input;\n }\n const token = await this.getTokenByIdOrSymbol(input);\n return token?.id ?? input;\n }\n\n async getPools(version: PoolVersion): Promise<ApiLiquidityPool[]> {\n const endpoint = version === \"v1\" ? SAUCER_ENDPOINTS.poolsV1 : SAUCER_ENDPOINTS.poolsV2;\n return this.request<ApiLiquidityPool[]>(endpoint);\n }\n\n async getPoolByTokens(\n tokenA: string,\n tokenB: string,\n version: PoolVersion,\n ): Promise<ApiLiquidityPool | null> {\n const pools = await this.getPools(version);\n const match = pools.find((pool) => {\n const direct = pool.tokenA.id === tokenA && pool.tokenB.id === tokenB;\n const inverse = pool.tokenA.id === tokenB && pool.tokenB.id === tokenA;\n return direct || inverse;\n });\n return match ?? null;\n }\n\n async getSwapQuote(params: {\n fromToken: string;\n toToken: string;\n amount: string;\n }): Promise<ApiSwapQuote> {\n const { fromToken, toToken, amount } = params;\n return this.request<ApiSwapQuote>(SAUCER_ENDPOINTS.swapQuote, {\n tokenIn: fromToken,\n tokenOut: toToken,\n amount,\n fromToken,\n toToken,\n });\n }\n\n async getFarms(): Promise<ApiFarm[]> {\n return this.request<ApiFarm[]>(SAUCER_ENDPOINTS.farms);\n }\n\n async getStats(): Promise<Record<string, unknown>> {\n return this.request<Record<string, unknown>>(SAUCER_ENDPOINTS.stats);\n }\n\n private cacheTokens(tokens: ApiToken[]) {\n this.tokensCache = tokens;\n this.tokenIndex = new Map();\n for (const token of tokens) {\n this.tokenIndex.set(token.id.toLowerCase(), token);\n this.tokenIndex.set(token.symbol.toLowerCase(), token);\n this.tokenIndex.set(token.name.toLowerCase(), token);\n }\n }\n}\n\nexport const createSaucerSwapClient = (options: SaucerSwapClientOptions): SaucerSwapClient => {\n return new SaucerSwapClient(options);\n};\n","import type { PoolVersion, SaucerSwapConfig } from \"./types\";\n\nconst DEFAULT_CONFIG: SaucerSwapConfig = {\n baseUrl: \"https://api.saucerswap.finance\",\n timeoutMs: 10_000,\n retries: 2,\n routerContractId: undefined,\n routerV2ContractId: undefined,\n wrappedHbarTokenId: undefined,\n tokenAliases: {},\n defaultPoolVersion: \"v2\",\n gasLimit: 2_000_000,\n deadlineMinutes: 20,\n};\n\nconst toNumber = (value: string | undefined, fallback: number): number => {\n if (!value) {\n return fallback;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n};\n\nconst readTokenAliases = (value: string | undefined): Record<string, string> => {\n if (!value) {\n return {};\n }\n try {\n const parsed = JSON.parse(value);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Record<string, string>;\n }\n } catch {\n return {};\n }\n return {};\n};\n\nconst readPoolVersion = (value: string | undefined): PoolVersion | undefined => {\n if (value === \"v1\" || value === \"v2\") {\n return value;\n }\n return undefined;\n};\n\nconst readContextConfig = (context: unknown): Partial<SaucerSwapConfig> => {\n if (!context || typeof context !== \"object\") {\n return {};\n }\n const ctx = context as {\n config?: { saucerswap?: Partial<SaucerSwapConfig> };\n pluginConfig?: { saucerswap?: Partial<SaucerSwapConfig> };\n };\n return {\n ...(ctx.pluginConfig?.saucerswap ?? {}),\n ...(ctx.config?.saucerswap ?? {}),\n };\n};\n\nexport const resolveSaucerSwapConfig = (context?: unknown): SaucerSwapConfig => {\n const ctxConfig = readContextConfig(context);\n const envAliases = readTokenAliases(process.env.SAUCERSWAP_TOKEN_ALIASES);\n const envDefaultVersion = readPoolVersion(process.env.SAUCERSWAP_DEFAULT_POOL_VERSION);\n\n return {\n ...DEFAULT_CONFIG,\n ...ctxConfig,\n baseUrl: ctxConfig.baseUrl ?? process.env.SAUCERSWAP_BASE_URL ?? DEFAULT_CONFIG.baseUrl,\n timeoutMs:\n ctxConfig.timeoutMs ?? toNumber(process.env.SAUCERSWAP_TIMEOUT_MS, DEFAULT_CONFIG.timeoutMs),\n retries: ctxConfig.retries ?? toNumber(process.env.SAUCERSWAP_RETRIES, DEFAULT_CONFIG.retries),\n apiKey: ctxConfig.apiKey ?? process.env.SAUCERSWAP_API_KEY,\n routerContractId: ctxConfig.routerContractId ?? process.env.SAUCERSWAP_ROUTER_CONTRACT_ID,\n routerV2ContractId:\n ctxConfig.routerV2ContractId ?? process.env.SAUCERSWAP_ROUTER_V2_CONTRACT_ID,\n wrappedHbarTokenId:\n ctxConfig.wrappedHbarTokenId ?? process.env.SAUCERSWAP_WRAPPED_HBAR_TOKEN_ID,\n tokenAliases: {\n ...envAliases,\n ...(ctxConfig.tokenAliases ?? {}),\n },\n defaultPoolVersion:\n ctxConfig.defaultPoolVersion ?? envDefaultVersion ?? DEFAULT_CONFIG.defaultPoolVersion,\n gasLimit:\n ctxConfig.gasLimit ?? toNumber(process.env.SAUCERSWAP_GAS_LIMIT, DEFAULT_CONFIG.gasLimit),\n deadlineMinutes:\n ctxConfig.deadlineMinutes ??\n toNumber(process.env.SAUCERSWAP_DEADLINE_MINUTES, DEFAULT_CONFIG.deadlineMinutes),\n };\n};\n","import { BaseTool, type Context } from \"@hashgraph/hedera-agent-kit\";\nimport type { Client } from \"@hiero-ledger/sdk\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\n\nconst farmsInputSchema = z.object({\n poolId: z.number().int().positive().optional().describe(\"Optional pool ID to filter farms\"),\n});\n\ntype FarmsInput = z.infer<typeof farmsInputSchema>;\n\nexport class FarmsTool extends BaseTool<FarmsInput, FarmsInput> {\n method = \"saucerswap_get_farms\";\n name = \"SaucerSwap Get Farms\";\n description = \"Get active farming opportunities on SaucerSwap.\";\n parameters = farmsInputSchema;\n\n async normalizeParams(\n params: FarmsInput,\n _context: Context,\n _client: Client,\n ): Promise<FarmsInput> {\n return farmsInputSchema.parse(params);\n }\n\n async coreAction(args: FarmsInput, context: Context, _client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n try {\n const farms = await api.getFarms();\n const filtered = args.poolId ? farms.filter((farm) => farm.poolId === args.poolId) : farms;\n\n return {\n success: true,\n farms: filtered,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(_coreActionResult: unknown, _context: Context) {\n return false;\n }\n\n async secondaryAction(_request: unknown, _client: Client, _context: Context) {\n return null;\n }\n}\n\nexport const farmsTool = new FarmsTool();\n","export const calculatePriceImpact = (\n inputAmount: string,\n outputAmount: string,\n poolReserveIn: string,\n poolReserveOut: string,\n): number | null => {\n const inAmount = Number(inputAmount);\n const outAmount = Number(outputAmount);\n const reserveIn = Number(poolReserveIn);\n const reserveOut = Number(poolReserveOut);\n if (\n !Number.isFinite(inAmount) ||\n !Number.isFinite(outAmount) ||\n !Number.isFinite(reserveIn) ||\n !Number.isFinite(reserveOut) ||\n inAmount <= 0 ||\n outAmount <= 0 ||\n reserveIn <= 0 ||\n reserveOut <= 0\n ) {\n return null;\n }\n const expectedOutput = (inAmount * reserveOut) / (reserveIn + inAmount);\n if (!Number.isFinite(expectedOutput) || expectedOutput <= 0) {\n return null;\n }\n return ((expectedOutput - outAmount) / expectedOutput) * 100;\n};\n\nexport const applySlippageToAmount = (amount: string, slippageTolerance: number): string => {\n const amountBig = BigInt(amount);\n const bps = Math.max(0, Math.round(slippageTolerance * 100));\n const numerator = BigInt(10_000 - bps);\n return ((amountBig * numerator) / 10_000n).toString();\n};\n","import { AccountId, ContractId, TokenId } from \"@hiero-ledger/sdk\";\nimport type { SaucerSwapConfig } from \"../types\";\n\nexport const normalizeTokenAlias = (token: string, config: SaucerSwapConfig): string => {\n const tokenLower = token.toLowerCase();\n for (const [alias, value] of Object.entries(config.tokenAliases)) {\n if (alias.toLowerCase() === tokenLower) {\n return value;\n }\n }\n if (tokenLower === \"hbar\" && config.wrappedHbarTokenId) {\n return config.wrappedHbarTokenId;\n }\n return token;\n};\n\nexport const requireTokenId = (token: string): string => {\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(token)) {\n throw new Error(`Token ID required for on-chain actions: ${token}`);\n }\n return token;\n};\n\nexport const tokenIdToSolidityAddress = (tokenId: string): string => {\n return TokenId.fromString(tokenId).toSolidityAddress();\n};\n\nexport const accountIdToSolidityAddress = (accountId: string): string => {\n return AccountId.fromString(accountId).toSolidityAddress();\n};\n\nexport const contractIdFromString = (contractId: string): ContractId => {\n return ContractId.fromString(contractId);\n};\n","export const parseUnits = (amount: string, decimals: number): string => {\n if (!amount || typeof amount !== \"string\") {\n throw new Error(\"Amount must be a non-empty string.\");\n }\n if (decimals < 0) {\n throw new Error(\"Decimals must be non-negative.\");\n }\n const trimmed = amount.trim();\n if (!/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error(`Invalid amount format: ${amount}`);\n }\n const [whole, fraction = \"\"] = trimmed.split(\".\");\n if (fraction.length > decimals) {\n throw new Error(`Amount has more than ${decimals} decimal places.`);\n }\n const paddedFraction = fraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`;\n const normalized = combined.replace(/^0+/, \"\");\n return normalized === \"\" ? \"0\" : normalized;\n};\n\nexport const formatUnits = (amount: string, decimals: number): string => {\n if (!amount || typeof amount !== \"string\") {\n throw new Error(\"Amount must be a non-empty string.\");\n }\n if (decimals < 0) {\n throw new Error(\"Decimals must be non-negative.\");\n }\n const trimmed = amount.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`Invalid integer amount: ${amount}`);\n }\n const padded = trimmed.padStart(decimals + 1, \"0\");\n const whole = padded.slice(0, -decimals);\n const fraction = padded.slice(-decimals).replace(/0+$/, \"\");\n return fraction.length > 0 ? `${whole}.${fraction}` : whole;\n};\n","import {\n BaseTool,\n type Context,\n handleTransaction,\n type RawTransactionResponse,\n} from \"@hashgraph/hedera-agent-kit\";\nimport {\n type Client,\n ContractExecuteTransaction,\n ContractFunctionParameters,\n Transaction,\n} from \"@hiero-ledger/sdk\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount } from \"../utils/amm\";\nimport {\n accountIdToSolidityAddress,\n contractIdFromString,\n normalizeTokenAlias,\n requireTokenId,\n tokenIdToSolidityAddress,\n} from \"../utils/tokens\";\nimport { parseUnits } from \"../utils/units\";\n\nconst addLiquidityInputSchema = z.object({\n tokenA: z.string().describe(\"First token ID\"),\n tokenB: z.string().describe(\"Second token ID\"),\n amountA: z.string().describe(\"Amount of tokenA to add\"),\n amountB: z.string().describe(\"Amount of tokenB to add\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n});\n\nconst removeLiquidityInputSchema = z.object({\n tokenA: z.string().describe(\"First token ID\"),\n tokenB: z.string().describe(\"Second token ID\"),\n lpTokenAmount: z.string().describe(\"Amount of LP tokens to burn\"),\n minAmountA: z.string().describe(\"Minimum amount of tokenA to receive\"),\n minAmountB: z.string().describe(\"Minimum amount of tokenB to receive\"),\n});\n\ntype AddLiquidityInput = z.infer<typeof addLiquidityInputSchema>;\ntype RemoveLiquidityInput = z.infer<typeof removeLiquidityInputSchema>;\n\ntype AddLiquidityExtras = {\n amountADesired: string;\n amountBDesired: string;\n amountAMin: string;\n amountBMin: string;\n};\n\ntype RemoveLiquidityExtras = {\n lpAmount: string;\n minAmountA: string;\n minAmountB: string;\n};\n\ntype LiquidityCorePayload<E> = {\n transaction: Transaction;\n extras: E;\n};\n\nconst isLiquidityCorePayload = (\n value: unknown,\n): value is LiquidityCorePayload<Record<string, unknown>> =>\n typeof value === \"object\" && value !== null && \"transaction\" in value;\n\nconst addLiquidityPostProcess = (response: RawTransactionResponse) =>\n `SaucerSwap add liquidity submitted. Status: ${response.status}. Transaction ID: ${response.transactionId}`;\n\nconst removeLiquidityPostProcess = (response: RawTransactionResponse) =>\n `SaucerSwap remove liquidity submitted. Status: ${response.status}. Transaction ID: ${response.transactionId}`;\n\nconst resolveDeadline = (defaultMinutes: number): number => {\n return Math.floor(Date.now() / 1000) + defaultMinutes * 60;\n};\n\nconst resolveRouterContract = (config: ReturnType<typeof resolveSaucerSwapConfig>): string => {\n const routerContractId =\n config.defaultPoolVersion === \"v2\"\n ? (config.routerV2ContractId ?? config.routerContractId)\n : (config.routerContractId ?? config.routerV2ContractId);\n if (!routerContractId) {\n throw new Error(\"Missing SaucerSwap router contract ID configuration.\");\n }\n return routerContractId;\n};\n\nexport class AddLiquidityTool extends BaseTool<AddLiquidityInput, AddLiquidityInput> {\n method = \"saucerswap_add_liquidity\";\n name = \"SaucerSwap Add Liquidity\";\n description = \"Add liquidity to a SaucerSwap pool.\";\n parameters = addLiquidityInputSchema;\n\n async normalizeParams(\n params: AddLiquidityInput,\n _context: Context,\n _client: Client,\n ): Promise<AddLiquidityInput> {\n return addLiquidityInputSchema.parse(params);\n }\n\n async coreAction(args: AddLiquidityInput, context: Context, client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for liquidity actions.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const tokenAInput = normalizeTokenAlias(args.tokenA, config);\n const tokenBInput = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenAInput);\n const tokenBId = await api.resolveTokenId(tokenBInput);\n\n const tokenA = await api.getTokenByIdOrSymbol(tokenAId);\n const tokenB = await api.getTokenByIdOrSymbol(tokenBId);\n\n if (!tokenA || !tokenB) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const amountADesired = parseUnits(args.amountA, tokenA.decimals);\n const amountBDesired = parseUnits(args.amountB, tokenB.decimals);\n const amountAMin = applySlippageToAmount(amountADesired, slippageTolerance);\n const amountBMin = applySlippageToAmount(amountBDesired, slippageTolerance);\n\n const routerContractId = resolveRouterContract(config);\n const deadline = resolveDeadline(config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n\n const params = new ContractFunctionParameters()\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenAId)))\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenBId)))\n .addUint256(amountADesired)\n .addUint256(amountBDesired)\n .addUint256(amountAMin)\n .addUint256(amountBMin)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"addLiquidity\", params);\n\n const payload: LiquidityCorePayload<AddLiquidityExtras> = {\n transaction,\n extras: { amountADesired, amountBDesired, amountAMin, amountBMin },\n };\n return payload;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(coreActionResult: unknown, _context: Context) {\n return isLiquidityCorePayload(coreActionResult);\n }\n\n async secondaryAction(\n payload: LiquidityCorePayload<AddLiquidityExtras>,\n client: Client,\n context: Context,\n ) {\n const result = await handleTransaction(\n payload.transaction,\n client,\n context,\n addLiquidityPostProcess,\n );\n return { ...result, ...payload.extras };\n }\n}\n\nexport class RemoveLiquidityTool extends BaseTool<RemoveLiquidityInput, RemoveLiquidityInput> {\n method = \"saucerswap_remove_liquidity\";\n name = \"SaucerSwap Remove Liquidity\";\n description = \"Remove liquidity from a SaucerSwap pool.\";\n parameters = removeLiquidityInputSchema;\n\n async normalizeParams(\n params: RemoveLiquidityInput,\n _context: Context,\n _client: Client,\n ): Promise<RemoveLiquidityInput> {\n return removeLiquidityInputSchema.parse(params);\n }\n\n async coreAction(args: RemoveLiquidityInput, context: Context, client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for liquidity actions.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const tokenAInput = normalizeTokenAlias(args.tokenA, config);\n const tokenBInput = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenAInput);\n const tokenBId = await api.resolveTokenId(tokenBInput);\n\n const pool = await api.getPoolByTokens(tokenAId, tokenBId, config.defaultPoolVersion);\n if (!pool) {\n return {\n success: false,\n error: \"Unable to locate pool for the provided token pair.\",\n };\n }\n\n const tokenA = await api.getTokenByIdOrSymbol(tokenAId);\n const tokenB = await api.getTokenByIdOrSymbol(tokenBId);\n if (!tokenA || !tokenB) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const lpAmount = parseUnits(args.lpTokenAmount, pool.lpToken.decimals);\n const minAmountA = parseUnits(args.minAmountA, tokenA.decimals);\n const minAmountB = parseUnits(args.minAmountB, tokenB.decimals);\n\n const routerContractId = resolveRouterContract(config);\n const deadline = resolveDeadline(config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n\n const params = new ContractFunctionParameters()\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenAId)))\n .addAddress(tokenIdToSolidityAddress(requireTokenId(tokenBId)))\n .addUint256(lpAmount)\n .addUint256(minAmountA)\n .addUint256(minAmountB)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"removeLiquidity\", params);\n\n const payload: LiquidityCorePayload<RemoveLiquidityExtras> = {\n transaction,\n extras: { lpAmount, minAmountA, minAmountB },\n };\n return payload;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(coreActionResult: unknown, _context: Context) {\n return isLiquidityCorePayload(coreActionResult);\n }\n\n async secondaryAction(\n payload: LiquidityCorePayload<RemoveLiquidityExtras>,\n client: Client,\n context: Context,\n ) {\n const result = await handleTransaction(\n payload.transaction,\n client,\n context,\n removeLiquidityPostProcess,\n );\n return { ...result, ...payload.extras };\n }\n}\n\nexport const addLiquidityTool = new AddLiquidityTool();\nexport const removeLiquidityTool = new RemoveLiquidityTool();\n","import { BaseTool, type Context } from \"@hashgraph/hedera-agent-kit\";\nimport type { Client } from \"@hiero-ledger/sdk\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { normalizeTokenAlias } from \"../utils/tokens\";\n\nconst poolsInputSchema = z.object({\n tokenA: z.string().optional().describe(\"First token ID or symbol\"),\n tokenB: z.string().optional().describe(\"Second token ID or symbol\"),\n version: z.enum([\"v1\", \"v2\"]).optional().describe(\"Pool version\"),\n limit: z.number().int().positive().optional().describe(\"Maximum number of pools to return\"),\n});\n\ntype PoolsInput = z.infer<typeof poolsInputSchema>;\n\nexport class PoolsTool extends BaseTool<PoolsInput, PoolsInput> {\n method = \"saucerswap_get_pools\";\n name = \"SaucerSwap Get Pools\";\n description = \"Query SaucerSwap liquidity pools and reserves.\";\n parameters = poolsInputSchema;\n\n async normalizeParams(\n params: PoolsInput,\n _context: Context,\n _client: Client,\n ): Promise<PoolsInput> {\n return poolsInputSchema.parse(params);\n }\n\n async coreAction(args: PoolsInput, context: Context, _client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n try {\n const version = args.version ?? config.defaultPoolVersion;\n const pools = await api.getPools(version);\n\n let filtered = pools;\n if (args.tokenA && args.tokenB) {\n const tokenA = normalizeTokenAlias(args.tokenA, config);\n const tokenB = normalizeTokenAlias(args.tokenB, config);\n const tokenAId = await api.resolveTokenId(tokenA);\n const tokenBId = await api.resolveTokenId(tokenB);\n filtered = pools.filter((pool) => {\n const direct = pool.tokenA.id === tokenAId && pool.tokenB.id === tokenBId;\n const inverse = pool.tokenA.id === tokenBId && pool.tokenB.id === tokenAId;\n return direct || inverse;\n });\n }\n\n if (args.limit && args.limit > 0) {\n filtered = filtered.slice(0, args.limit);\n }\n\n return {\n success: true,\n version,\n pools: filtered,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(_coreActionResult: unknown, _context: Context) {\n return false;\n }\n\n async secondaryAction(_request: unknown, _client: Client, _context: Context) {\n return null;\n }\n}\n\nexport const poolsTool = new PoolsTool();\n","import type { ApiSwapQuote, SwapQuote } from \"../types\";\n\nconst readAmount = (value: unknown): string | null => {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value.toString();\n }\n return null;\n};\n\nexport const normalizeSwapQuote = (quote: ApiSwapQuote, fallbackAmountIn: string): SwapQuote => {\n const amountIn = readAmount(quote.amountIn) ?? fallbackAmountIn;\n const expectedOutput =\n readAmount(quote.expectedOutput) ??\n readAmount(quote.amountOut) ??\n readAmount((quote as { amountOutMin?: string | number }).amountOutMin) ??\n \"\";\n\n if (!expectedOutput) {\n throw new Error(\"SaucerSwap quote did not include an output amount.\");\n }\n\n return {\n amountIn,\n expectedOutput,\n priceImpact: typeof quote.priceImpact === \"number\" ? quote.priceImpact : null,\n route: Array.isArray(quote.route) ? quote.route : [],\n raw: quote,\n };\n};\n","import { BaseTool, type Context } from \"@hashgraph/hedera-agent-kit\";\nimport type { Client } from \"@hiero-ledger/sdk\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount, calculatePriceImpact } from \"../utils/amm\";\nimport { normalizeSwapQuote } from \"../utils/quote\";\nimport { normalizeTokenAlias } from \"../utils/tokens\";\n\nconst quoteInputSchema = z.object({\n fromToken: z.string().describe(\"Token ID to swap from (e.g., 'HBAR' or '0.0.123456')\"),\n toToken: z.string().describe(\"Token ID to swap to\"),\n amount: z.string().describe(\"Amount to swap (decimal format)\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n});\n\ntype QuoteInput = z.infer<typeof quoteInputSchema>;\n\nexport class QuoteTool extends BaseTool<QuoteInput, QuoteInput> {\n method = \"saucerswap_get_swap_quote\";\n name = \"SaucerSwap Get Swap Quote\";\n description = \"Get a price quote for swapping tokens on SaucerSwap.\";\n parameters = quoteInputSchema;\n\n async normalizeParams(\n params: QuoteInput,\n _context: Context,\n _client: Client,\n ): Promise<QuoteInput> {\n return quoteInputSchema.parse(params);\n }\n\n async coreAction(args: QuoteInput, context: Context, _client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const cachedApi = (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient;\n const api = cachedApi ?? createSaucerSwapClient(config);\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n try {\n const fromToken = normalizeTokenAlias(args.fromToken, config);\n const toToken = normalizeTokenAlias(args.toToken, config);\n const fromTokenId = await api.resolveTokenId(fromToken);\n const toTokenId = await api.resolveTokenId(toToken);\n const rawQuote = await api.getSwapQuote({\n fromToken: fromTokenId,\n toToken: toTokenId,\n amount: args.amount,\n });\n\n const normalized = normalizeSwapQuote(rawQuote, args.amount);\n\n if (normalized.priceImpact === null) {\n const pool = await api.getPoolByTokens(fromTokenId, toTokenId, config.defaultPoolVersion);\n if (pool && rawQuote.amountIn && rawQuote.amountOut) {\n const isAToB = pool.tokenA.id === fromTokenId;\n const reserveIn = isAToB ? pool.tokenReserveA : pool.tokenReserveB;\n const reserveOut = isAToB ? pool.tokenReserveB : pool.tokenReserveA;\n normalized.priceImpact = calculatePriceImpact(\n rawQuote.amountIn,\n rawQuote.amountOut,\n reserveIn,\n reserveOut,\n );\n }\n }\n\n let minOutput: string | null = null;\n if (normalized.expectedOutput.includes(\".\")) {\n const expectedNumber = Number(normalized.expectedOutput);\n minOutput = Number.isFinite(expectedNumber)\n ? (expectedNumber * (1 - slippageTolerance / 100)).toString()\n : null;\n } else {\n minOutput = applySlippageToAmount(normalized.expectedOutput, slippageTolerance);\n }\n\n return {\n success: true,\n quote: normalized,\n minOutput,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(_coreActionResult: unknown, _context: Context) {\n return false;\n }\n\n async secondaryAction(_request: unknown, _client: Client, _context: Context) {\n return null;\n }\n}\n\nexport const quoteTool = new QuoteTool();\n","import {\n BaseTool,\n type Context,\n handleTransaction,\n type RawTransactionResponse,\n} from \"@hashgraph/hedera-agent-kit\";\nimport {\n type Client,\n ContractExecuteTransaction,\n ContractFunctionParameters,\n Transaction,\n} from \"@hiero-ledger/sdk\";\nimport { z } from \"zod\";\nimport { createSaucerSwapClient } from \"../api/client\";\nimport { resolveSaucerSwapConfig } from \"../config\";\nimport { applySlippageToAmount } from \"../utils/amm\";\nimport { normalizeSwapQuote } from \"../utils/quote\";\nimport {\n accountIdToSolidityAddress,\n contractIdFromString,\n normalizeTokenAlias,\n requireTokenId,\n tokenIdToSolidityAddress,\n} from \"../utils/tokens\";\nimport { parseUnits } from \"../utils/units\";\n\nconst swapInputSchema = z.object({\n fromToken: z.string().describe(\"Token ID to swap from (e.g., 'HBAR' or '0.0.123456')\"),\n toToken: z.string().describe(\"Token ID to swap to\"),\n amount: z.string().describe(\"Amount to swap (decimal format)\"),\n slippageTolerance: z\n .number()\n .optional()\n .default(0.5)\n .describe(\"Maximum slippage tolerance percentage\"),\n deadline: z\n .number()\n .optional()\n .describe(\"Transaction deadline in minutes from now or a unix timestamp\"),\n});\n\ntype SwapInput = z.infer<typeof swapInputSchema>;\n\ntype SwapExtras = {\n estimatedOutput: string;\n minOutput: string;\n priceImpact: number | null;\n route: string[];\n};\n\ntype SwapCorePayload = {\n transaction: Transaction;\n extras: SwapExtras;\n};\n\nconst isSwapCorePayload = (value: unknown): value is SwapCorePayload =>\n typeof value === \"object\" && value !== null && \"transaction\" in value;\n\nconst swapPostProcess = (response: RawTransactionResponse) =>\n `SaucerSwap swap submitted. Status: ${response.status}. Transaction ID: ${response.transactionId}`;\n\nconst resolveDeadline = (deadlineInput: number | undefined, defaultMinutes: number): number => {\n const now = Math.floor(Date.now() / 1000);\n if (!deadlineInput) {\n return now + defaultMinutes * 60;\n }\n if (deadlineInput > now + 60) {\n return Math.floor(deadlineInput);\n }\n return now + Math.round(deadlineInput) * 60;\n};\n\nconst amountToSmallest = (amount: string, decimals: number): string => {\n return parseUnits(amount, decimals);\n};\n\nconst expectedToSmallest = (amount: string, decimals: number): string => {\n return amount.includes(\".\") ? parseUnits(amount, decimals) : amount;\n};\n\nexport class SwapTool extends BaseTool<SwapInput, SwapInput> {\n method = \"saucerswap_swap_tokens\";\n name = \"SaucerSwap Swap Tokens\";\n description = \"Execute a token swap on SaucerSwap DEX.\";\n parameters = swapInputSchema;\n\n async normalizeParams(params: SwapInput, _context: Context, _client: Client): Promise<SwapInput> {\n return swapInputSchema.parse(params);\n }\n\n async coreAction(args: SwapInput, context: Context, client: Client) {\n const config = resolveSaucerSwapConfig(context);\n const operatorAccountId = client?.operatorAccountId?.toString();\n const slippageTolerance = args.slippageTolerance ?? 0.5;\n\n if (!operatorAccountId) {\n return {\n success: false,\n error: \"Hedera client with an operator account is required for swaps.\",\n };\n }\n\n try {\n const api =\n (context as { saucerswapClient?: ReturnType<typeof createSaucerSwapClient> })\n .saucerswapClient ?? createSaucerSwapClient(config);\n\n const fromTokenAlias = normalizeTokenAlias(args.fromToken, config);\n const toTokenAlias = normalizeTokenAlias(args.toToken, config);\n const fromTokenId = await api.resolveTokenId(fromTokenAlias);\n const toTokenId = await api.resolveTokenId(toTokenAlias);\n\n const fromTokenMeta = await api.getTokenByIdOrSymbol(fromTokenId);\n const toTokenMeta = await api.getTokenByIdOrSymbol(toTokenId);\n\n if (!fromTokenMeta || !toTokenMeta) {\n return {\n success: false,\n error: \"Unable to resolve token metadata from SaucerSwap API.\",\n };\n }\n\n const quote = normalizeSwapQuote(\n await api.getSwapQuote({\n fromToken: fromTokenId,\n toToken: toTokenId,\n amount: args.amount,\n }),\n args.amount,\n );\n\n const amountInSmallest = amountToSmallest(args.amount, fromTokenMeta.decimals);\n const expectedOutSmallest = expectedToSmallest(quote.expectedOutput, toTokenMeta.decimals);\n const minOutSmallest = applySlippageToAmount(expectedOutSmallest, slippageTolerance);\n\n const routerContractId =\n config.defaultPoolVersion === \"v2\"\n ? (config.routerV2ContractId ?? config.routerContractId)\n : (config.routerContractId ?? config.routerV2ContractId);\n\n if (!routerContractId) {\n return {\n success: false,\n error: \"Missing SaucerSwap router contract ID configuration.\",\n };\n }\n\n const deadline = resolveDeadline(args.deadline, config.deadlineMinutes);\n const toAddress = accountIdToSolidityAddress(operatorAccountId);\n const path = [\n tokenIdToSolidityAddress(requireTokenId(fromTokenId)),\n tokenIdToSolidityAddress(requireTokenId(toTokenId)),\n ];\n\n const params = new ContractFunctionParameters()\n .addUint256(amountInSmallest)\n .addUint256(minOutSmallest)\n .addAddressArray(path)\n .addAddress(toAddress)\n .addUint256(deadline);\n\n const transaction = new ContractExecuteTransaction()\n .setContractId(contractIdFromString(routerContractId))\n .setGas(config.gasLimit)\n .setFunction(\"swapExactTokensForTokens\", params);\n\n const payload: SwapCorePayload = {\n transaction,\n extras: {\n estimatedOutput: quote.expectedOutput,\n minOutput: minOutSmallest,\n priceImpact: quote.priceImpact,\n route: quote.route,\n },\n };\n return payload;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n override async shouldSecondaryAction(coreActionResult: unknown, _context: Context) {\n return isSwapCorePayload(coreActionResult);\n }\n\n async secondaryAction(payload: SwapCorePayload, client: Client, context: Context) {\n const result = await handleTransaction(\n payload.transaction,\n client,\n context,\n swapPostProcess,\n );\n return { ...result, ...payload.extras };\n }\n}\n\nexport const swapTool = new SwapTool();\n","import type { Plugin } from \"@hashgraph/hedera-agent-kit\";\nimport { farmsTool } from \"./tools/farms\";\nimport { addLiquidityTool, removeLiquidityTool } from \"./tools/liquidity\";\nimport { poolsTool } from \"./tools/pools\";\nimport { quoteTool } from \"./tools/quote\";\nimport { swapTool } from \"./tools/swap\";\n\nexport const saucerswapPluginToolNames = {\n SAUCERSWAP_GET_SWAP_QUOTE_TOOL: \"saucerswap_get_swap_quote\",\n SAUCERSWAP_SWAP_TOKENS_TOOL: \"saucerswap_swap_tokens\",\n SAUCERSWAP_GET_POOLS_TOOL: \"saucerswap_get_pools\",\n SAUCERSWAP_ADD_LIQUIDITY_TOOL: \"saucerswap_add_liquidity\",\n SAUCERSWAP_REMOVE_LIQUIDITY_TOOL: \"saucerswap_remove_liquidity\",\n SAUCERSWAP_GET_FARMS_TOOL: \"saucerswap_get_farms\",\n} as const;\n\nexport const saucerswapPlugin: Plugin = {\n name: \"saucerswap\",\n description:\n \"Integration with SaucerSwap DEX for token swaps, liquidity provision, and yield farming\",\n tools: () => [swapTool, quoteTool, poolsTool, addLiquidityTool, removeLiquidityTool, farmsTool],\n};\n\nexport { saucerswapPlugin as default };\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import { Plugin } from 'hedera-agent-kit';
|
|
1
|
+
import { Plugin } from '@hashgraph/hedera-agent-kit';
|
|
2
2
|
|
|
3
|
+
declare const saucerswapPluginToolNames: {
|
|
4
|
+
readonly SAUCERSWAP_GET_SWAP_QUOTE_TOOL: "saucerswap_get_swap_quote";
|
|
5
|
+
readonly SAUCERSWAP_SWAP_TOKENS_TOOL: "saucerswap_swap_tokens";
|
|
6
|
+
readonly SAUCERSWAP_GET_POOLS_TOOL: "saucerswap_get_pools";
|
|
7
|
+
readonly SAUCERSWAP_ADD_LIQUIDITY_TOOL: "saucerswap_add_liquidity";
|
|
8
|
+
readonly SAUCERSWAP_REMOVE_LIQUIDITY_TOOL: "saucerswap_remove_liquidity";
|
|
9
|
+
readonly SAUCERSWAP_GET_FARMS_TOOL: "saucerswap_get_farms";
|
|
10
|
+
};
|
|
3
11
|
declare const saucerswapPlugin: Plugin;
|
|
4
12
|
|
|
5
|
-
export { saucerswapPlugin as default, saucerswapPlugin };
|
|
13
|
+
export { saucerswapPlugin as default, saucerswapPlugin, saucerswapPluginToolNames };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import { Plugin } from 'hedera-agent-kit';
|
|
1
|
+
import { Plugin } from '@hashgraph/hedera-agent-kit';
|
|
2
2
|
|
|
3
|
+
declare const saucerswapPluginToolNames: {
|
|
4
|
+
readonly SAUCERSWAP_GET_SWAP_QUOTE_TOOL: "saucerswap_get_swap_quote";
|
|
5
|
+
readonly SAUCERSWAP_SWAP_TOKENS_TOOL: "saucerswap_swap_tokens";
|
|
6
|
+
readonly SAUCERSWAP_GET_POOLS_TOOL: "saucerswap_get_pools";
|
|
7
|
+
readonly SAUCERSWAP_ADD_LIQUIDITY_TOOL: "saucerswap_add_liquidity";
|
|
8
|
+
readonly SAUCERSWAP_REMOVE_LIQUIDITY_TOOL: "saucerswap_remove_liquidity";
|
|
9
|
+
readonly SAUCERSWAP_GET_FARMS_TOOL: "saucerswap_get_farms";
|
|
10
|
+
};
|
|
3
11
|
declare const saucerswapPlugin: Plugin;
|
|
4
12
|
|
|
5
|
-
export { saucerswapPlugin as default, saucerswapPlugin };
|
|
13
|
+
export { saucerswapPlugin as default, saucerswapPlugin, saucerswapPluginToolNames };
|