UNPKG

declarations

Version:

[![npm version](https://badge.fury.io/js/declarations.svg)](https://www.npmjs.com/package/declarations)

431 lines (402 loc) 18.8 kB
// Type definitions for ssh2 // Project: https://github.com/mscdex/ssh2 // Definitions by: Qubo <https://github.com/tkQubo> // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// <reference path="../node/node.d.ts" /> declare module "ssh2" { import stream = require('stream'); namespace ssh2 { interface Client extends NodeJS.EventEmitter { Server: ServerStatic; new(): Client; /** * SFTPStream.STATUS_CODE from ssh2-streams. */ SFTP_STATUS_CODE: Sftp.StatusCode; /** * SFTPStream.OPEN_MODE from ssh2-streams. */ SFTP_OPEN_MODE: Sftp.OpenMode; //TODO: Type ssh2-streams /** * utility methods from ssh2-streams. */ utils: Utils; connect(config: ConnectConfig): void; end(): void; destroy(): void; exec(command: string, options: ExecOption, callback: ChannelCallback): boolean; exec(command: string, callback: ChannelCallback): boolean; shell(window: boolean|PseudoTtySettings, options: boolean|number|X11Settings, callback: ChannelCallback): boolean; shell(window: boolean|PseudoTtySettings, callback: ChannelCallback): boolean; shell(callback: ChannelCallback): boolean; subsys(subsystem: string, callback: ChannelCallback): boolean; sftp(callback: SftpCallback): boolean; forwardIn(bindAddr: string, bindPort: number, callback?: ForwardInCallback): boolean; unforwardIn(bindAddr: string, bindPort: number, callback?: ErrorCallback): boolean; forwardOut(srcIP: string, srcPort: number, dstIP: string, dstPort: number, callback: ChannelCallback): boolean; openssh_noMoreSessions(callback?: ErrorCallback): boolean; openssh_forwardInStreamLocal(socketPath: string, callback?: ErrorCallback): boolean; openssh_unforwardInStreamLocal(socketPath: string, callback?: ErrorCallback): boolean; openssh_forwardOutStreamLocal(socketPath: string, callback?: ChannelCallback): boolean; } interface ConnectConfig { /** * @description Hostname or IP address of the server. * @default 'localhost' */ host?: string; /** * @description Port number of the server. * @default 22 */ port?: number; /** * @description Only connect via resolved IPv4 address for `host`. * @default false */ forceIPv4?: boolean; /** * @description Only connect via resolved IPv6 address for `host`. * @default false */ forceIPv6?: boolean; /** * @description 'md5' or 'sha1'. The host's key is hashed using this method and passed to the **hostVerifier** function. * @default (none) */ hostHash?: string; /** * @description Function that is passed a string hex hash of the host's key for verification purposes. * Return `true` to continue with the handshake or `false` to reject and disconnect. */ hostVerifier?: (keyHash: string) => boolean; /** * @description Username for authentication. */ username?: string; /** * @description Password for password-based user authentication. */ password?: string; /** * @description Path to ssh-agent's UNIX socket for ssh-agent-based user authentication. * Windows users: set to 'pageant' for authenticating with Pageant or (actual) path to a cygwin "UNIX socket." */ agent?: string; /** * @description Buffer or string that contains a private key for either key-based or hostbased user authentication (OpenSSH format). */ privateKey?: Buffer|string; /** * @description For an encrypted private key, this is the passphrase used to decrypt it. */ passphrase?: string; /** * @description Along with **localUsername** and **privateKey**, set this to a non-empty string for hostbased user authentication. */ localHostname?: string; /** * @description Along with **localHostname** and **privateKey**, set this to a non-empty string for hostbased user authentication. */ localUsername?: string; /** * @description Try keyboard-interactive user authentication if primary user authentication method fails. * If you set this to `true`, you need to handle the `keyboard-interactive` event. */ tryKeyboard?: boolean; /** * @description How often (in milliseconds) to send SSH-level keepalive packets to the server * (in a similar way as OpenSSH's ServerAliveInterval config option). Set to 0 to disable. * @default 0 */ keepaliveInterval?: number; /** * @description How many consecutive, unanswered SSH-level keepalive packets that can be sent to the server * before disconnection (similar to OpenSSH's ServerAliveCountMax config option). * @default 3 */ keepaliveCountMax?: number; /** * @description How long (in milliseconds) to wait for the SSH handshake to complete. * @default 20000 */ readyTimeout?: number; /** * @description Performs a strict server vendor check before sending vendor-specific requests, * etc. (e.g. check for OpenSSH server when using `openssh_noMoreSessions()`) * @default true */ strictVendor?: boolean; /** * A ReadableStream to use for communicating with the server instead of creating and using a new TCP connection (useful for connection hopping). */ sock?: NodeJS.ReadableStream; /** * @description Set to `true` to use OpenSSH agent forwarding (`auth-agent@openssh.com`) for the life of the connection. `agent` must also be set to use this feature. * @default false */ agentForward?: boolean; /** * @description Set this to a function that receives a single string argument to get detailed (local) debug information. */ debug?: (information: string) => any; } interface ExecOption { /** * @description An environment to use for the execution of the command. */ env?: any; /** * @description Set to true to allocate a pseudo-tty with defaults, or an object containing specific pseudo-tty settings * (see 'Pseudo-TTY settings'). Setting up a pseudo-tty can be useful when working with remote processes * that expect input from an actual terminal (e.g. sudo's password prompt). */ pty?: boolean|PseudoTtySettings; /** * @description Set to true to use defaults below, set to a number to specify a specific screen number, * or an object. */ x11?: boolean|number|X11Settings; } interface X11Settings { /** * Allow just a single connection? * @default false */ single?: boolean; /** * Screen number to use * @default 0 */ screen?: number; } interface PseudoTtySettings { /** * @description * Number of rows * @default 24 */ rows?: number; /** * @description * Number of columns * @default 80 */ cols?: number; /** * @description * Height in pixels * @default 480 */ height?: number; /** * @description * Width in pixels * @default 640 */ width?: number; /** * @description The value to use for $TERM * @default 'vt100' */ term?: string; } interface ForwardInCallback { (err?: Error, bindPort?: number): void; } interface ChannelCallback { (err?: Error, channel?: Channel): void; } interface SftpCallback { (err?: Error, sftp?: Sftp.Wrapper): void; } interface ErrorCallback { (err?: Error): void; } interface Channel extends stream.Duplex { new(info?: any, client?: any, options?: any): Channel; eof(): boolean; close(): boolean; destroy(): void; setWindow(rows: number, cols: number, height: number, width: number): boolean; signal(signalName: string): boolean; exit(name: string, coreDumped: boolean, msg: string): boolean; exit(status: number): boolean; stderr?: ServerStderr; } interface ServerStderr extends NodeJS.WritableStream { new(channel: Channel): ServerStderr; } interface ServerStatic { new(config: ServerConfig, listener?: any): Server; createServer(config: ServerConfig, listener?: any): Server; KEEPALIVE_INTERVAL: number; KEEPALIVE_CLIENT_INTERVAL: number; KEEPALIVE_CLIENT_COUNT_MAX: number; } interface Server extends NodeJS.EventEmitter { listen(port: number, hostname?: string, backlog?: number, callback?: Function): Server; listen(port: number, hostname?: string, callback?: Function): Server; listen(path: string, callback?: Function): Server; listen(handle: any, listeningListener?: Function): Server; address(): { port: number; family: string; address: string; }; getConnections(callback: any): any; //TODO: No type close(callback?: Function): Server; ref(): void; unref(): void; } interface ServerConfig { /** * @description Buffer or string that contains the host private key (OpenSSH format). */ privateKey: Buffer|string; /** * @description For an encrypted host private key, this is the passphrase used to decrypt it. */ passphrase?: string; /** * @description A message that is sent to clients immediately upon connection, before handshaking begins. */ banner?: string; /** * @description A custom server software name/version identifier. * @default 'ssh2js' + moduleVersion + 'srv' */ indent?: string; /** * @description This is the highWaterMark to use for the parser stream. * @default 32 * 1024 */ highWaterMark?: number; /** * @description Set this to a function that receives a single string argument to get detailed (local) debug information. */ debug?: (information: string) => any; } // utility methods from ssh2-streams. interface Utils { iv_inc: Function; isStreamCipher: Function; isGCM: Function; readInt: Function; readString: Function; parseKey: Function; genPublicKey: Function; convertPPKPrivate: Function; verifyPPKMAC: Function; decryptKey: Function; } namespace Sftp { // SFTPStream.STATUS_CODE from ssh2-streams. interface StatusCode { OK: number; EOF: number; NO_SUCH_FILE: number; PERMISSION_DENIED: number; FAILURE: number; BAD_MESSAGE: number; NO_CONNECTION: number; CONNECTION_LOST: number; OP_UNSUPPORTED: number; } // SFTPStream.OPEN_MODE from ssh2-streams. interface OpenMode { READ: number; WRITE: number; APPEND: number; CREAT: number; TRUNC: number; EXCL: number; } interface Attributes { mode: number; uid: number; gid: number; size: number; atime: number; mtime: number; } interface InputAttributes { mode?: number; uid?: number; gid?: number; size?: number; atime?: number; mtime?: number; } interface Stats extends Attributes { isDirectory(): boolean; isFile(): boolean; isBlockDevice(): boolean; isCharacterDevice(): boolean; isSymbloicLink(): boolean; isFIFO(): boolean; isSocket(): boolean; } interface Wrapper extends NodeJS.EventEmitter { fastGet(remotePath: string, localPath: string, callback: (err: any) => void): void; fastGet(remotePath: string, localPath: string, options: TransferOptions, callback: (err: any) => void): void; fastPut(localPath: string, remotePath: string, callback: (err: any) => void): void; fastPut(localPath: string, remotePath: string, options: TransferOptions, callback: (err: any) => void): void; createReadStream(path: string, options?: ReadStreamOptions): stream.Readable; createWriteStream(path: string, options?: WriteStreamOptions): stream.Writable; open(filename: string, mode: string, callback: (err: any, handle: Buffer) => void): boolean; open(filename: string, mode: string, attributes: InputAttributes, callback: (err: any, handle: Buffer) => void): boolean; close(handle: Buffer, callback: (err: any) => void): boolean; readData(handle: Buffer, buffer: Buffer, offset: number, length: number, position: number, callback: (err: any, bytesRead: number, buffer: Buffer, position: number) => void): boolean; writeData(handle: Buffer, buffer: Buffer, offset: number, length: number, position: number, callback: (err: any) => void): boolean; fstat(handle: Buffer, callback: (err: any, stats: Stats) => void): boolean; fsetstat(handle: Buffer, attributes: InputAttributes, callback: (err: any) => void): boolean; futimes(handle: Buffer, atime: number | Date, mtime: number | Date, callback: (err: any) => void): boolean; fchown(handle: Buffer, uid: number, gid: number, callback: (err: any) => void): boolean; fchmod(handle: Buffer, mode: number | string, callback: (err: any) => void): boolean; opendir(path: string, callback: (err: any, handle: Buffer) => void): boolean; readdir(location: string | Buffer, callback: (err: any, list: ReadDirItem[]) => void): boolean; unlink(path: string, callback: (err: any) => void): boolean; rename(srcPath: string, destPath: string, callback: (err: any) => void): boolean; mkdir(path: string, callback: (err: any) => void): boolean; mkdir(path: string, attributes: InputAttributes, callback: (err: any) => void): boolean; rmdir(path: string, callback: (err: any) => void): boolean; stat(path: string, callback: (err: any, stats: Stats) => void): boolean; lstat(path: string, callback: (err: any, stats: Stats) => void): boolean; setstat(path: string, attributes: InputAttributes, callback: (err: any) => void): boolean; utimes(path: string, atime: number | Date, mtime: number | Date, callback: (err: any) => void): boolean; chown(path: string, uid: number, gid: number, callback: (err: any) => void): boolean; chmod(path: string, mode: number | string, callback: (err: any) => void): boolean; readlink(path: string, callback: (err: any, target: string) => void): boolean; symlink(targetPath: string, linkPath: string, callback: (err: any) => void): boolean; realpath(path: string, callback: (err: any, absPath: string) => void): boolean; ext_openssh_rename(srcPath: string, destPath: string, callback: (err: any) => void): boolean; ext_openssh_statvfs(path: string, callback: (err: any, fsInfo: any) => void): boolean; ext_openssh_fstatvfs(handle: Buffer, callback: (err: any, fsInfo: any) => void): boolean; ext_openssh_hardlink(targetPath: string, linkPath: string, callback: (err: any) => void): boolean; ext_openssh_fsync(handle: Buffer, callback: (err: any, fsInfo: any) => void): boolean; } interface TransferOptions { concurrency?: number; chunkSize?: number; step?: (total_transferred: number, chunk: number, total: number) => void; } interface ReadStreamOptions { flags?: string; encoding?: string; handle?: Buffer; mode?: number; autoClose?: boolean; start?: number; end?: number; } interface WriteStreamOptions { flags?: string; encoding?: string; mode?: number; } interface ReadDirItem { filename: string; longname: string; attrs: Attributes; } } } var ssh2: ssh2.Client; export = ssh2; }