pure-js-sftp
Version:
A pure JavaScript SFTP client with revolutionary RSA-SHA2 compatibility fixes. Zero native dependencies, built on ssh2-streams with 100% SSH key support.
86 lines • 2.69 kB
TypeScript
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