1inch-agent-kit
Version:
AI Agent Kit for 1inch - Connect any LLM to 1inch DeFi protocols
307 lines • 12.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getActiveOrders = getActiveOrders;
exports.getSettlementAddress = getSettlementAddress;
exports.getOrderByHash = getOrderByHash;
exports.getOrdersByHashes = getOrdersByHashes;
exports.getOrdersByMaker = getOrdersByMaker;
exports.getQuote = getQuote;
exports.getQuoteWithCustomPreset = getQuoteWithCustomPreset;
exports.submitOrder = submitOrder;
exports.submitMultipleOrders = submitMultipleOrders;
exports.fusionAPI = fusionAPI;
const fetcher_1 = require("../../utils/fetcher");
// ============================================================================
// ORDERS API FUNCTIONS
// ============================================================================
/**
* Get gasless swap active orders
*/
async function getActiveOrders(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
const queryParams = {};
if (params.page !== undefined)
queryParams.page = params.page;
if (params.limit !== undefined)
queryParams.limit = params.limit;
if (params.version !== undefined)
queryParams.version = params.version;
return await fetcher.get(`/fusion/orders/v2.0/${params.chain}/order/active`, queryParams);
}
/**
* Get actual settlement contract address
*/
async function getSettlementAddress(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
return await fetcher.get(`/fusion/orders/v2.0/${params.chain}/order/settlement`);
}
/**
* Get order status by order hash
*/
async function getOrderByHash(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
return await fetcher.get(`/fusion/orders/v2.0/${params.chain}/order/status/${params.orderHash}`);
}
/**
* Get orders by hashes
*/
async function getOrdersByHashes(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
const requestBody = {
orderHashes: params.orderHashes
};
return await fetcher.post(`/fusion/orders/v2.0/${params.chain}/order/status`, requestBody);
}
/**
* Get orders by maker address
*/
async function getOrdersByMaker(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
const queryParams = {};
if (params.page !== undefined)
queryParams.page = params.page;
if (params.limit !== undefined)
queryParams.limit = params.limit;
if (params.timestampFrom !== undefined)
queryParams.timestampFrom = params.timestampFrom;
if (params.timestampTo !== undefined)
queryParams.timestampTo = params.timestampTo;
if (params.makerToken !== undefined)
queryParams.makerToken = params.makerToken;
if (params.takerToken !== undefined)
queryParams.takerToken = params.takerToken;
if (params.withToken !== undefined)
queryParams.withToken = params.withToken;
if (params.version !== undefined)
queryParams.version = params.version;
return await fetcher.get(`/fusion/orders/v2.0/${params.chain}/order/maker/${params.address}`, queryParams);
}
// ============================================================================
// QUOTER API FUNCTIONS
// ============================================================================
/**
* Get quote details based on input data
*/
async function getQuote(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
const queryParams = {
fromTokenAddress: params.fromTokenAddress,
toTokenAddress: params.toTokenAddress,
amount: params.amount,
walletAddress: params.walletAddress
};
if (params.enableEstimate !== undefined)
queryParams.enableEstimate = params.enableEstimate;
if (params.fee !== undefined)
queryParams.fee = params.fee;
if (params.showDestAmountMinusFee !== undefined)
queryParams.showDestAmountMinusFee = params.showDestAmountMinusFee;
if (params.isPermit2 !== undefined)
queryParams.isPermit2 = params.isPermit2;
if (params.surplus !== undefined)
queryParams.surplus = params.surplus;
if (params.permit !== undefined)
queryParams.permit = params.permit;
if (params.slippage !== undefined)
queryParams.slippage = params.slippage;
if (params.source !== undefined)
queryParams.source = params.source;
return await fetcher.get(`/fusion/quoter/v2.0/${params.chain}/quote/receive`, queryParams);
}
/**
* Get quote with custom preset details
*/
async function getQuoteWithCustomPreset(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
const queryParams = {
fromTokenAddress: params.fromTokenAddress,
toTokenAddress: params.toTokenAddress,
amount: params.amount,
walletAddress: params.walletAddress
};
if (params.enableEstimate !== undefined)
queryParams.enableEstimate = params.enableEstimate;
if (params.fee !== undefined)
queryParams.fee = params.fee;
if (params.showDestAmountMinusFee !== undefined)
queryParams.showDestAmountMinusFee = params.showDestAmountMinusFee;
if (params.isPermit2 !== undefined)
queryParams.isPermit2 = params.isPermit2;
if (params.surplus !== undefined)
queryParams.surplus = params.surplus;
if (params.permit !== undefined)
queryParams.permit = params.permit;
if (params.source !== undefined)
queryParams.source = params.source;
return await fetcher.post(`/fusion/quoter/v2.0/${params.chain}/quote/receive?${new URLSearchParams(queryParams)}`, params.customPreset);
}
// ============================================================================
// RELAYER API FUNCTIONS
// ============================================================================
/**
* Submit a limit order that resolvers will be able to fill
*/
async function submitOrder(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
await fetcher.post(`/fusion/relayer/v2.0/${params.chain}/order/submit`, params.order);
}
/**
* Submit a list of limit orders which resolvers will be able to fill
*/
async function submitMultipleOrders(params) {
const apiKey = process.env.ONEINCH_API_KEY;
if (!apiKey) {
throw new Error("1inch API key is required.");
}
const fetcher = new fetcher_1.OneInchFetcher(apiKey);
await fetcher.post(`/fusion/relayer/v2.0/${params.chain}/order/submit/many`, params.orders);
}
/**
* Main Fusion API function that routes to specific endpoints based on action
*/
async function fusionAPI(params) {
switch (params.action) {
case "getActiveOrders":
return await getActiveOrders({
chain: params.chain,
page: params.page,
limit: params.limit,
version: params.version,
wallet: params.wallet
});
case "getSettlementAddress":
return await getSettlementAddress({
chain: params.chain,
wallet: params.wallet
});
case "getOrderByHash":
if (!params.orderHash) {
throw new Error("orderHash is required for getOrderByHash action");
}
return await getOrderByHash({
chain: params.chain,
orderHash: params.orderHash,
wallet: params.wallet
});
case "getOrdersByHashes":
if (!params.orderHashes || params.orderHashes.length === 0) {
throw new Error("orderHashes array is required for getOrdersByHashes action");
}
return await getOrdersByHashes({
chain: params.chain,
orderHashes: params.orderHashes,
wallet: params.wallet
});
case "getOrdersByMaker":
if (!params.address) {
throw new Error("address is required for getOrdersByMaker action");
}
return await getOrdersByMaker({
chain: params.chain,
address: params.address,
page: params.page,
limit: params.limit,
timestampFrom: params.timestampFrom,
timestampTo: params.timestampTo,
makerToken: params.makerToken,
takerToken: params.takerToken,
withToken: params.withToken,
version: params.version,
wallet: params.wallet
});
case "getQuote":
if (!params.fromTokenAddress || !params.toTokenAddress || !params.amount || !params.walletAddress) {
throw new Error("fromTokenAddress, toTokenAddress, amount, and walletAddress are required for getQuote action");
}
return await getQuote({
chain: params.chain,
fromTokenAddress: params.fromTokenAddress,
toTokenAddress: params.toTokenAddress,
amount: params.amount,
walletAddress: params.walletAddress,
enableEstimate: params.enableEstimate,
fee: params.fee,
showDestAmountMinusFee: params.showDestAmountMinusFee,
isPermit2: params.isPermit2,
surplus: params.surplus,
permit: params.permit,
slippage: params.slippage,
source: params.source,
wallet: params.wallet
});
case "getQuoteWithCustomPreset":
if (!params.fromTokenAddress || !params.toTokenAddress || !params.amount || !params.walletAddress || !params.customPreset) {
throw new Error("fromTokenAddress, toTokenAddress, amount, walletAddress, and customPreset are required for getQuoteWithCustomPreset action");
}
return await getQuoteWithCustomPreset({
chain: params.chain,
fromTokenAddress: params.fromTokenAddress,
toTokenAddress: params.toTokenAddress,
amount: params.amount,
walletAddress: params.walletAddress,
customPreset: params.customPreset,
enableEstimate: params.enableEstimate,
fee: params.fee,
showDestAmountMinusFee: params.showDestAmountMinusFee,
isPermit2: params.isPermit2,
surplus: params.surplus,
permit: params.permit,
slippage: params.slippage,
source: params.source,
wallet: params.wallet
});
case "submitOrder":
if (!params.order) {
throw new Error("order is required for submitOrder action");
}
return await submitOrder({
chain: params.chain,
order: params.order,
wallet: params.wallet
});
case "submitMultipleOrders":
if (!params.orders || params.orders.length === 0) {
throw new Error("orders array is required for submitMultipleOrders action");
}
return await submitMultipleOrders({
chain: params.chain,
orders: params.orders,
wallet: params.wallet
});
default:
throw new Error(`Unknown action: ${params.action}`);
}
}
//# sourceMappingURL=index.js.map