UNPKG

1inch-agent-kit

Version:

AI Agent Kit for 1inch - Connect any LLM to 1inch DeFi protocols

380 lines 18.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getQuote = getQuote; exports.getSwap = getSwap; exports.getSpender = getSpender; exports.getApproveTransaction = getApproveTransaction; exports.getAllowance = getAllowance; exports.getLiquiditySources = getLiquiditySources; exports.getTokens = getTokens; exports.executeSwap = executeSwap; exports.executeApprove = executeApprove; exports.swapAPI = swapAPI; const fetcher_1 = require("../../utils/fetcher"); const wallet_1 = require("../../utils/wallet"); const wallet_2 = require("../../utils/wallet"); // Individual endpoint functions async function getQuote(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const queryParams = new URLSearchParams(); queryParams.append('src', params.src); queryParams.append('dst', params.dst); queryParams.append('amount', params.amount); if (params.protocols) queryParams.append('protocols', params.protocols); if (params.fee !== undefined) queryParams.append('fee', params.fee.toString()); if (params.gasPrice) queryParams.append('gasPrice', params.gasPrice); if (params.complexityLevel !== undefined) queryParams.append('complexityLevel', params.complexityLevel.toString()); if (params.parts !== undefined) queryParams.append('parts', params.parts.toString()); if (params.mainRouteParts !== undefined) queryParams.append('mainRouteParts', params.mainRouteParts.toString()); if (params.gasLimit !== undefined) queryParams.append('gasLimit', params.gasLimit.toString()); if (params.includeTokensInfo !== undefined) queryParams.append('includeTokensInfo', params.includeTokensInfo.toString()); if (params.includeProtocols !== undefined) queryParams.append('includeProtocols', params.includeProtocols.toString()); if (params.includeGas !== undefined) queryParams.append('includeGas', params.includeGas.toString()); if (params.connectorTokens) queryParams.append('connectorTokens', params.connectorTokens); if (params.excludedProtocols) queryParams.append('excludedProtocols', params.excludedProtocols); const url = `/swap/v6.1/${params.chain}/quote?${queryParams.toString()}`; const response = await fetcher.get(url); return response; } async function getSwap(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const queryParams = new URLSearchParams(); queryParams.append('src', params.src); queryParams.append('dst', params.dst); queryParams.append('amount', params.amount); queryParams.append('from', params.from); queryParams.append('origin', params.origin); queryParams.append('slippage', params.slippage.toString()); if (params.protocols) queryParams.append('protocols', params.protocols); if (params.fee !== undefined) queryParams.append('fee', params.fee.toString()); if (params.gasPrice) queryParams.append('gasPrice', params.gasPrice); if (params.complexityLevel !== undefined) queryParams.append('complexityLevel', params.complexityLevel.toString()); if (params.parts !== undefined) queryParams.append('parts', params.parts.toString()); if (params.mainRouteParts !== undefined) queryParams.append('mainRouteParts', params.mainRouteParts.toString()); if (params.gasLimit !== undefined) queryParams.append('gasLimit', params.gasLimit.toString()); if (params.includeTokensInfo !== undefined) queryParams.append('includeTokensInfo', params.includeTokensInfo.toString()); if (params.includeProtocols !== undefined) queryParams.append('includeProtocols', params.includeProtocols.toString()); if (params.includeGas !== undefined) queryParams.append('includeGas', params.includeGas.toString()); if (params.connectorTokens) queryParams.append('connectorTokens', params.connectorTokens); if (params.excludedProtocols) queryParams.append('excludedProtocols', params.excludedProtocols); if (params.permit) queryParams.append('permit', params.permit); if (params.receiver) queryParams.append('receiver', params.receiver); if (params.referrer) queryParams.append('referrer', params.referrer); if (params.allowPartialFill !== undefined) queryParams.append('allowPartialFill', params.allowPartialFill.toString()); if (params.disableEstimate !== undefined) queryParams.append('disableEstimate', params.disableEstimate.toString()); if (params.compatibility !== undefined) queryParams.append('compatibility', params.compatibility.toString()); if (params.usePermit2 !== undefined) queryParams.append('usePermit2', params.usePermit2.toString()); const url = `/swap/v6.1/${params.chain}/swap?${queryParams.toString()}`; const response = await fetcher.get(url); return response; } async function getSpender(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const response = await fetcher.get(`/swap/v6.1/${params.chain}/approve/spender`); return response; } async function getApproveTransaction(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const queryParams = new URLSearchParams(); queryParams.append('tokenAddress', params.tokenAddress); if (params.amount) queryParams.append('amount', params.amount); const url = `/swap/v6.1/${params.chain}/approve/transaction?${queryParams.toString()}`; const response = await fetcher.get(url); return response; } async function getAllowance(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const queryParams = new URLSearchParams(); queryParams.append('tokenAddress', params.tokenAddress); queryParams.append('walletAddress', params.walletAddress); const url = `/swap/v6.1/${params.chain}/approve/allowance?${queryParams.toString()}`; const response = await fetcher.get(url); return response; } async function getLiquiditySources(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const response = await fetcher.get(`/swap/v6.1/${params.chain}/liquidity-sources`); return response; } async function getTokens(params) { const fetcher = new fetcher_1.OneInchFetcher(process.env.ONEINCH_API_KEY || ''); const response = await fetcher.get(`/swap/v6.1/${params.chain}/tokens`); return response; } // Wallet integration functions async function executeSwap(params) { try { // Get swap transaction data const swapResponse = await getSwap({ chain: params.chain, src: params.src, dst: params.dst, amount: params.amount, from: params.walletAddress, origin: params.walletAddress, slippage: params.slippage, protocols: params.protocols, fee: params.fee, gasPrice: params.gasPrice, receiver: params.receiver, allowPartialFill: params.allowPartialFill, disableEstimate: params.disableEstimate }); // Create wallet and sign transaction const wallet = wallet_2.WalletUtils.createWallet(params.privateKey, params.chain); await wallet_1.walletManager.initialize(wallet); const txResult = await wallet_1.walletManager.signAndSendTransaction({ to: swapResponse.tx.to, data: swapResponse.tx.data, value: BigInt(swapResponse.tx.value), gasPrice: BigInt(swapResponse.tx.gasPrice), gas: BigInt(swapResponse.tx.gas), chainId: params.chain }); return { txHash: txResult.hash, swapResponse }; } catch (error) { throw new Error(`Swap execution failed: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async function executeApprove(params) { try { // Get approve transaction data const approveResponse = await getApproveTransaction({ chain: params.chain, tokenAddress: params.tokenAddress, amount: params.amount }); // Create wallet and sign transaction const wallet = wallet_2.WalletUtils.createWallet(params.privateKey, params.chain); await wallet_1.walletManager.initialize(wallet); const txResult = await wallet_1.walletManager.signAndSendTransaction({ to: approveResponse.to, data: approveResponse.data, value: BigInt(approveResponse.value), gasPrice: BigInt(approveResponse.gasPrice), chainId: params.chain }); return { txHash: txResult.hash, approveResponse }; } catch (error) { throw new Error(`Approve execution failed: ${error instanceof Error ? error.message : 'Unknown error'}`); } } /** * Main swapAPI function that handles all Swap operations */ async function swapAPI(params) { try { // Validate endpoint parameter if (!params.endpoint) { throw new Error('Endpoint parameter is required. Please specify: getQuote, getSwap, getSpender, getApproveTransaction, getAllowance, getLiquiditySources, getTokens, executeSwap, or executeApprove'); } // Validate chain parameter if (!params.chain) { throw new Error('Chain parameter is required. Please specify a valid chain ID (e.g., 1 for Ethereum, 137 for Polygon)'); } switch (params.endpoint) { case 'getQuote': if (!params.src) { throw new Error('src parameter is required for getQuote. Please specify the source token address (e.g., "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" for ETH)'); } if (!params.dst) { throw new Error('dst parameter is required for getQuote. Please specify the destination token address (e.g., "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" for USDC)'); } if (!params.amount) { throw new Error('amount parameter is required for getQuote. Please specify the amount in wei (e.g., "1000000000000000000" for 1 ETH)'); } return await getQuote({ chain: params.chain, src: params.src, dst: params.dst, amount: params.amount, protocols: params.protocols, fee: params.fee, gasPrice: params.gasPrice, complexityLevel: params.complexityLevel, parts: params.parts, mainRouteParts: params.mainRouteParts, gasLimit: params.gasLimit, includeTokensInfo: params.includeTokensInfo, includeProtocols: params.includeProtocols, includeGas: params.includeGas, connectorTokens: params.connectorTokens, excludedProtocols: params.excludedProtocols }); case 'getSwap': if (!params.src) { throw new Error('src parameter is required for getSwap. Please specify the source token address'); } if (!params.dst) { throw new Error('dst parameter is required for getSwap. Please specify the destination token address'); } if (!params.amount) { throw new Error('amount parameter is required for getSwap. Please specify the amount in wei'); } if (!params.from) { throw new Error('from parameter is required for getSwap. Please specify the address that calls the 1inch contract'); } if (!params.origin) { throw new Error('origin parameter is required for getSwap. Please specify the EOA address that initiates the transaction'); } if (params.slippage === undefined) { throw new Error('slippage parameter is required for getSwap. Please specify the slippage tolerance percentage (e.g., 1 for 1%)'); } return await getSwap({ chain: params.chain, src: params.src, dst: params.dst, amount: params.amount, from: params.from, origin: params.origin, slippage: params.slippage, protocols: params.protocols, fee: params.fee, gasPrice: params.gasPrice, complexityLevel: params.complexityLevel, parts: params.parts, mainRouteParts: params.mainRouteParts, gasLimit: params.gasLimit, includeTokensInfo: params.includeTokensInfo, includeProtocols: params.includeProtocols, includeGas: params.includeGas, connectorTokens: params.connectorTokens, excludedProtocols: params.excludedProtocols, permit: params.permit, receiver: params.receiver, referrer: params.referrer, allowPartialFill: params.allowPartialFill, disableEstimate: params.disableEstimate, compatibility: params.compatibility, usePermit2: params.usePermit2 }); case 'getSpender': return await getSpender({ chain: params.chain }); case 'getApproveTransaction': if (!params.tokenAddress) { throw new Error('tokenAddress parameter is required for getApproveTransaction. Please specify the token address to approve'); } return await getApproveTransaction({ chain: params.chain, tokenAddress: params.tokenAddress, amount: params.amount }); case 'getAllowance': if (!params.tokenAddress) { throw new Error('tokenAddress parameter is required for getAllowance. Please specify the token address'); } if (!params.walletAddress) { throw new Error('walletAddress parameter is required for getAllowance. Please specify the wallet address'); } return await getAllowance({ chain: params.chain, tokenAddress: params.tokenAddress, walletAddress: params.walletAddress }); case 'getLiquiditySources': return await getLiquiditySources({ chain: params.chain }); case 'getTokens': return await getTokens({ chain: params.chain }); case 'executeSwap': if (!params.src) { throw new Error('src parameter is required for executeSwap. Please specify the source token address'); } if (!params.dst) { throw new Error('dst parameter is required for executeSwap. Please specify the destination token address'); } if (!params.amount) { throw new Error('amount parameter is required for executeSwap. Please specify the amount in wei'); } if (params.slippage === undefined) { throw new Error('slippage parameter is required for executeSwap. Please specify the slippage tolerance percentage'); } if (!params.walletAddress) { throw new Error('walletAddress parameter is required for executeSwap. Please specify the wallet address'); } if (!params.privateKey) { throw new Error('privateKey parameter is required for executeSwap. Please specify the private key for transaction signing'); } return await executeSwap({ chain: params.chain, src: params.src, dst: params.dst, amount: params.amount, slippage: params.slippage, walletAddress: params.walletAddress, privateKey: params.privateKey, protocols: params.protocols, fee: params.fee, gasPrice: params.gasPrice, receiver: params.receiver, allowPartialFill: params.allowPartialFill, disableEstimate: params.disableEstimate }); case 'executeApprove': if (!params.tokenAddress) { throw new Error('tokenAddress parameter is required for executeApprove. Please specify the token address'); } if (!params.amount) { throw new Error('amount parameter is required for executeApprove. Please specify the amount to approve'); } if (!params.walletAddress) { throw new Error('walletAddress parameter is required for executeApprove. Please specify the wallet address'); } if (!params.privateKey) { throw new Error('privateKey parameter is required for executeApprove. Please specify the private key for transaction signing'); } return await executeApprove({ chain: params.chain, tokenAddress: params.tokenAddress, amount: params.amount, walletAddress: params.walletAddress, privateKey: params.privateKey }); default: throw new Error(`Unknown endpoint: ${params.endpoint}. Valid endpoints are: getQuote, getSwap, getSpender, getApproveTransaction, getAllowance, getLiquiditySources, getTokens, executeSwap, executeApprove`); } } catch (error) { throw new Error(`Swap API error: ${error instanceof Error ? error.message : 'Unknown error'}`); } } //# sourceMappingURL=index.js.map