import { EventEmitter } from 'events';
import http from 'http';
import https from 'https';
export interface ConnectionPoolConfig {
    maxConnectionsPerHost: number;
    maxTotalConnections: number;
    connectionTimeout: number;
    keepAliveTimeout: number;
    maxIdleTime: number;
    enablePooling: boolean;
    enableKeepAlive: boolean;
    socketTimeout: number;
    maxRequestsPerConnection: number;
}
export interface ConnectionStats {
    activeConnections: number;
    idleConnections: number;
    totalRequests: number;
    reusedConnections: number;
    reuseRatio: number;
    averageConnectionDuration: number;
    poolUtilization: number;
    hostStats: Map<string, HostConnectionStats>;
}
export interface HostConnectionStats {
    host: string;
    activeConnections: number;
    idleConnections: number;
    totalRequests: number;
    reuseCount: number;
    averageResponseTime: number;
}
interface PooledConnection {
    id: string;
    host: string;
    port: number;
    protocol: 'http' | 'https';
    socket: any;
    createdAt: number;
    lastUsed: number;
    requestCount: number;
    isActive: boolean;
    state: 'connecting' | 'connected' | 'idle' | 'closing' | 'closed';
}
export declare class ConnectionPoolManager extends EventEmitter {
    private config;
    private connectionPool;
    private activeConnections;
    private pendingRequests;
    private stats;
    private cleanupTimer?;
    private requestIdCounter;
    private connectionIdCounter;
    private httpAgent?;
    private httpsAgent?;
    private isRunning;
    constructor(config?: Partial<ConnectionPoolConfig>);
    start(): void;
    stop(): void;
    getConnection(host: string, port: number, protocol?: 'http' | 'https'): Promise<PooledConnection>;
    returnConnection(connection: PooledConnection): void;
    getStats(): ConnectionStats;
    getPoolInfo(): {
        totalConnections: number;
        connectionsByHost: Map<string, number>;
        idleConnectionsByHost: Map<string, number>;
        activeConnectionsByHost: Map<string, number>;
        pendingRequestsByHost: Map<string, number>;
        oldestConnection: PooledConnection | null;
        newestConnection: PooledConnection | null;
    };
    forceCleanup(): Promise<void>;
    updateConfig(newConfig: Partial<ConnectionPoolConfig>): void;
    getAgents(): {
        httpAgent?: http.Agent;
        httpsAgent?: https.Agent;
    };
    private initializeAgents;
    private setupEventHandlers;
    private getIdleConnection;
    private canCreateNewConnection;
    private createNewConnection;
    private createSocket;
    private queueConnectionRequest;
    private activateConnection;
    private shouldReuseConnection;
    private processPendingRequests;
    private removePendingRequest;
    private getHostConnectionCount;
    private startCleanupTimer;
    private cleanupIdleConnections;
    private closeConnection;
    private closeAllConnections;
    private updateHostStats;
    private updateReuseRatio;
    private updatePoolStats;
}
export {};
//# sourceMappingURL=connection-pool-manager.d.ts.map