import type { AxiosRequestConfig } from 'axios';
import type { Logger } from 'winston';
import type { Cache } from './cache';
import type { RateLimiter } from './rate-limiter';
import type { KemonoConfig } from '../types/config';
/**
 * HTTP client for making API requests with retry, caching, and rate limiting
 */
export declare class HttpClient {
    private readonly cache;
    private readonly rateLimiter;
    private readonly logger;
    private readonly axios;
    constructor(config: KemonoConfig, cache: Cache, rateLimiter: RateLimiter, logger: Logger);
    /**
     * Make a GET request with caching and rate limiting
     * @param url Request URL
     * @param config Axios request config
     * @returns Response data
     */
    get<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
    /**
     * Make a POST request with rate limiting
     * @param url Request URL
     * @param data Request body
     * @param config Axios request config
     * @returns Response data
     */
    post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
    /**
     * Make a PUT request with rate limiting
     * @param url Request URL
     * @param data Request body
     * @param config Axios request config
     * @returns Response data
     */
    put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>;
    /**
     * Make a DELETE request with rate limiting
     * @param url Request URL
     * @param config Axios request config
     * @returns Response data
     */
    delete<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
}
/**
 * Create a new HTTP client instance
 */
export declare function createHttpClient(config: KemonoConfig, cache: Cache, rateLimiter: RateLimiter, logger: Logger): HttpClient;
