whoosh

A streaming sftp client

Usage no npm install needed!

<script type="module">
  import whoosh from 'https://cdn.skypack.dev/whoosh';
</script>

README

Whoosh

Whoosh is an ultra thin wrapper for SFTPStream, with the additional benefit of being able to easily stream in memory content to/from an SFTP server.

NPM version NPM downloads Build Status Code Climate Test Coverage Code Style Dependency Status devDependencies Status

API

connect(<params>, <cb>)

Connect to an sftp server

Whoosh.connect({
    hostname: 'sftp.example.com',
    port: 22,
    username: 'fred',
    password: 'secret'
}, (err, client) => {
    // profit :)
})

See the ssh2 client docs for a full list of connection parameters

disconnect(<cb>)

Disconnect from an sftp server

Whoosh.connect(config, (err, client) => {
    client.disconnect(() => {
        // Disconnected
    })
})

isConnected()

Returns true when connected to the SFTP server. Useful for checking whether a previously established connection has dropped.

Whoosh.connect(config, (err, client) => {
    if (err) throw err
    client.isConnected() // returns true
})

isConnected(<cb>)

Asynchronous version of isConnected

Whoosh.connect(config, (err, client) => {
    if (err) throw err
    client.isConnected((err, connected) => {
        // Check connected status here
    )}
})

getContent(<path>, [<options>], <cb>)

Streams the contents of a remote file to a variable

Whoosh.connect(config, (err, client) => {
    if (err) throw err
    client.getContent('some/remote/file', (err, content, stats) => {
        client.disconnect(() => {
            if (err) throw err
            console.log(`Downloaded ${stats.bytes} bytes in ${stats.duration} ms`)
        )}
    })
})

The options parameter is is optional. When specified it is passed straight through to SFTPStream's createReadStream method.

putContent(<content;>, <path>, [<options>], <cb>)

Streams the contents of a variable to a remote file

Whoosh.connect(config, (err, client) => {
    if (err) throw err
    client.putContent('some conent', 'some/remote/file', (err, stats) => {
        client.disconnect(() => {
            if (err) throw err
            console.log(`Uploaded ${stats.bytes} bytes in ${stats.duration} ms`)
        })
    })
})

The options parameter is is optional. When specified it is passed straight through to SFTPStream's createWriteStream method.

exists

Reports on whether a remote file exists

Whoosh.connect(config, function(err, client) {
    if (err) throw err
    client.exists('some/remote/file', (err, exists) => {
        client.disconnect(() => {
            if (err) throw err
            console.log(exists ? 'File exists' : 'File does not exist')
        )}
    })
})

Everything else

The client object is just a decorated instance of SFTPStream so all the other SFTP methods are available. e.g.

Whoosh.connect(config, function(err, client) {
    if (err) throw err
    client.unlink('some/remote/file', function(err) {
        client.disconnect(() => {
            if (err) throw err
            console.log('Deleted some/remote/file')
        })
    })
})

keyboard interactive

If the server requires keyboard interactive authentication you can configure this as follows...

Whoosh.connect({
    hostname: 'sftp.example.com',
    port: 22,
    tryKeyboard: true,
    challenges: [
        {
            pattern: /^Username:$/,
            response: 'fred'
        },
        {
            pattern: /^Password:$/,
            response: 'secret'
        }
    ]
}, (err, client) => {
    // profit :)
})

The exact challenge patterns will be server dependent.