1inch-agent-kit
Version:
AI Agent Kit for 1inch - Connect any LLM to 1inch DeFi protocols
380 lines • 18.7 kB
JavaScript
"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