1inch-agent-kit
Version:
AI Agent Kit for 1inch - Connect any LLM to 1inch DeFi protocols
86 lines • 3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OneInchFetcher = void 0;
const axios_1 = __importDefault(require("axios"));
/**
* HTTP client for 1inch API calls with retry logic and error handling
*/
class OneInchFetcher {
constructor(apiKey, baseURL = 'https://api.1inch.dev') {
this.apiKey = apiKey;
this.client = axios_1.default.create({
baseURL,
timeout: 30000,
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
});
// Add response interceptor for error handling
this.client.interceptors.response.use((response) => response, (error) => {
if (error.response?.data) {
const oneInchError = {
statusCode: error.response.status,
error: error.response.data.error || 'Unknown error',
description: error.response.data.description || 'No description provided',
requestId: error.response.data.requestId || 'No request ID',
};
throw new Error(`1inch API Error: ${oneInchError.error} - ${oneInchError.description} (Request ID: ${oneInchError.requestId})`);
}
throw error;
});
}
/**
* Make a GET request to the 1inch API
*/
async get(endpoint, params) {
try {
const response = await this.client.get(endpoint, { params });
return response.data;
}
catch (error) {
throw this.handleError(error);
}
}
/**
* Make a POST request to the 1inch API
*/
async post(endpoint, data) {
try {
const response = await this.client.post(endpoint, data);
return response.data;
}
catch (error) {
throw this.handleError(error);
}
}
/**
* Handle and format errors
*/
handleError(error) {
if (axios_1.default.isAxiosError(error)) {
if (error.response?.status === 401) {
return new Error('Invalid 1inch API key');
}
if (error.response?.status === 429) {
return new Error('Rate limit exceeded. Please try again later.');
}
if (error.response?.status && error.response.status >= 500) {
return new Error('1inch API server error. Please try again later.');
}
return new Error(`HTTP Error: ${error.response?.status} - ${error.message}`);
}
return error;
}
/**
* Get the underlying axios instance for advanced usage
*/
getClient() {
return this.client;
}
}
exports.OneInchFetcher = OneInchFetcher;
//# sourceMappingURL=fetcher.js.map