import { EventEmitter } from 'events';
export interface SSH2StreamsConfig {
    host: string;
    port?: number;
    username: string;
    privateKey?: Buffer | string;
    password?: string;
    passphrase?: string;
    connectTimeout?: number;
    algorithms?: {
        kex?: string[];
        cipher?: string[];
        hmac?: string[];
        compress?: string[];
    };
}
export interface SFTPChannel extends EventEmitter {
    write(data: Buffer): void;
    end(): void;
}
export declare class SSH2StreamsTransport extends EventEmitter {
    private socket;
    private ssh;
    private config;
    private connected;
    private authenticated;
    private sftpChannel;
    private pendingChannels;
    private currentWindowSize;
    private initialWindowSize;
    private maxPacketSize;
    private serverMaxWindowSize;
    adaptiveMetrics: {
        successfulTransfers: number;
        timeouts: number;
        avgTransferSpeed: number;
        lastAdjustmentTime: number;
        avgResponseTime: number;
        serverCapabilities: {
            maxPacketSize: number;
            preferredTimeout: number;
            optimalChunkSize: number;
        };
    };
    private isOpenSSHRSAKey;
    constructor(config: SSH2StreamsConfig);
    private setupEventHandlers;
    private startAuthentication;
    private createChannelWrapper;
    connect(): Promise<void>;
    openSFTP(): Promise<SFTPChannel>;
    disconnect(): void;
    isConnected(): boolean;
    getCurrentWindowSize(): number;
    getSafeConcurrency(chunkSize: number, maxConcurrency?: number): number;
    getOptimalConcurrency(chunkSize: number): number;
    /**
     * Get maximum safe SFTP chunk size based on SSH packet size limits
     */
    getMaxSafeChunkSize(): number;
    /**
     * Calculate adaptive timeout based on server performance
     */
    getAdaptiveTimeout(operationType: 'control' | 'data' | 'connection', dataSize?: number): number;
    /**
     * Calculate optimal chunk size based on server capabilities and performance
     */
    getAdaptiveChunkSize(transferType: 'upload' | 'download', bytesProcessed?: number): number;
    /**
     * Get current success rate for adaptive decisions
     */
    private getSuccessRate;
    /**
     * Calculate optimal window size based on server capabilities
     */
    private calculateOptimalWindowSize;
    /**
     * Dynamically adjust parameters based on transfer performance
     */
    adaptPerformance(transferSpeed: number, hadTimeout: boolean, responseTimeMs?: number): void;
    /**
     * Send SSH keepalive ping - uses connection validation
     */
    ping(): Promise<void>;
}
//# sourceMappingURL=ssh2-streams-transport.d.ts.map