import { AxiosRequestConfig } from 'axios';
import { BaseService, ServiceConfig, ServiceResponse } from "./base-service.js";
export interface ExternalApiConfig extends ServiceConfig {
    baseURL?: string;
    apiKey?: string;
    headers?: Record<string, string>;
    rateLimit?: {
        requests: number;
        windowMs: number;
    };
}
export interface ApiRequest {
    url: string;
    method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
    data?: any;
    params?: Record<string, any>;
    headers?: Record<string, string>;
}
export interface RateLimitState {
    requests: number;
    windowStart: number;
    blocked: boolean;
}
export declare class ExternalApiService extends BaseService {
    private apiConfig;
    private client;
    private rateLimit?;
    private rateLimitState;
    constructor(apiConfig: ExternalApiConfig);
    /**
     * Make a GET request
     */
    get<T = any>(url: string, params?: Record<string, any>, config?: AxiosRequestConfig): Promise<ServiceResponse<T>>;
    /**
     * Make a POST request
     */
    post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ServiceResponse<T>>;
    /**
     * Make a PUT request
     */
    put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ServiceResponse<T>>;
    /**
     * Make a DELETE request
     */
    delete<T = any>(url: string, config?: AxiosRequestConfig): Promise<ServiceResponse<T>>;
    /**
     * Generic request method
     */
    private makeRequest;
    /**
     * Check rate limiting
     */
    private checkRateLimit;
    /**
     * Sanitize request to prevent injection attacks
     */
    private sanitizeRequest;
    /**
     * Sanitize HTTP headers
     */
    private sanitizeHeaders;
    /**
     * Handle request interceptor
     */
    private handleRequest;
    /**
     * Handle request error
     */
    private handleRequestError;
    /**
     * Handle response interceptor
     */
    private handleResponse;
    /**
     * Handle response error
     */
    private handleResponseError;
    /**
     * Health check implementation
     */
    healthCheck(): Promise<boolean>;
    /**
     * Get rate limit status
     */
    getRateLimitStatus(): {
        enabled: boolean;
        requests: number;
        limit: number;
        windowMs: number;
        blocked: boolean;
        resetTime?: number;
    };
    /**
     * Reset rate limit (useful for testing)
     */
    resetRateLimit(): void;
    /**
     * Update API configuration
     */
    updateConfig(config: Partial<ExternalApiConfig>): void;
}
