ssh2-sftp-client
Advanced tools
Comparing version 5.1.0 to 5.1.1
{ | ||
"name": "ssh2-sftp-client", | ||
"version": "5.1.0", | ||
"version": "5.1.1", | ||
"description": "ssh2 sftp client for node", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
734
src/index.js
@@ -80,3 +80,3 @@ /** | ||
const connectErrorListener = err => { | ||
this.removeListener('error', connectErrorListener); | ||
this.client.removeListener('ready', onceReady); | ||
if (operation.retry(err)) { | ||
@@ -98,35 +98,28 @@ // failed to connect, but not yet reached max attempt count | ||
const onceReady = () => { | ||
this.client.sftp((err, sftp) => { | ||
this.client.removeListener('error', connectErrorListener); | ||
if (err) { | ||
if (operation.retry(err)) { | ||
// failed to connect, but not yet reached max attempt count | ||
// remove the listeners and try again | ||
return; | ||
} | ||
// exhausted retries - do callback with error | ||
callback( | ||
utils.formatError(err, 'connect', err.code, attemptCount), | ||
null | ||
); | ||
return; | ||
} | ||
this.debugMsg('SFTP connection established'); | ||
this.sftp = sftp; | ||
callback(null, sftp); | ||
return; | ||
}); | ||
}; | ||
this.client | ||
.on('ready', () => { | ||
this.client.sftp((err, sftp) => { | ||
if (err) { | ||
this.client.removeListener('error', connectErrorListener); | ||
if (operation.retry(err)) { | ||
// failed to connect, but not yet reached max attempt count | ||
// remove the listeners and try again | ||
return; | ||
} | ||
// exhausted retries - do callback with error | ||
callback( | ||
utils.formatError(err, 'connect', err.code, attemptCount), | ||
null | ||
); | ||
} | ||
this.debugMsg('SFTP connection established'); | ||
this.sftp = sftp; | ||
// remove retry error listener and add generic error listener | ||
this.client.removeListener('error', connectErrorListener); | ||
this.client.on('close', utils.makeCloseListener(this)); | ||
this.client.on('error', err => { | ||
if (!this.errorHandled) { | ||
// error not already handled. Log it. | ||
console.error(`Error event: ${err.message}`); | ||
} | ||
//need to set to false in case another error raised | ||
this.errorHandled = false; | ||
}); | ||
callback(null, sftp); | ||
}); | ||
}) | ||
.on('error', connectErrorListener) | ||
.once('ready', onceReady) | ||
.once('error', connectErrorListener) | ||
.connect(config); | ||
@@ -200,30 +193,28 @@ }); | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`realPath -> ${remotePath}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'realPath'); | ||
this.client.prependListener('error', errorListener); | ||
if (utils.haveConnection(this, 'realPath', reject)) { | ||
this.sftp.realpath(remotePath, (err, absPath) => { | ||
if (err) { | ||
this.debugMsg(`realPath Error: ${err.message} Code: ${err.code}`); | ||
if (err.code === 2) { | ||
resolve(''); | ||
} else { | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${remotePath}`, | ||
'realPath', | ||
err.code | ||
) | ||
); | ||
} | ||
this.debugMsg(`realPath -> ${remotePath}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'realPath'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'realPath'); | ||
this.client.prependListener('error', errorListener); | ||
if (utils.haveConnection(this, 'realPath', reject)) { | ||
this.sftp.realpath(remotePath, (err, absPath) => { | ||
if (err) { | ||
this.debugMsg(`realPath Error: ${err.message} Code: ${err.code}`); | ||
if (err.code === 2) { | ||
resolve(''); | ||
} else { | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${remotePath}`, | ||
'realPath', | ||
err.code | ||
) | ||
); | ||
} | ||
this.debugMsg(`realPath <- ${absPath}`); | ||
resolve(absPath); | ||
}); | ||
} | ||
} finally { | ||
this.removeListener('error', errorListener); | ||
} | ||
this.debugMsg(`realPath <- ${absPath}`); | ||
resolve(absPath); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
} | ||
@@ -246,45 +237,44 @@ }); | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`stat -> ${aPath}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'stat'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.stat(aPath, (err, stats) => { | ||
if (err) { | ||
this.debugMsg(`stat error ${err.message} code: ${err.code}`); | ||
if (err.code === 2) { | ||
reject( | ||
utils.formatError( | ||
`No such file: ${remotePath}`, | ||
'_stat', | ||
errorCode.notexist | ||
) | ||
); | ||
} else { | ||
reject( | ||
utils.formatError(`${err.message} ${remotePath}`, '_stat') | ||
); | ||
} | ||
this.debugMsg(`stat -> ${aPath}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'stat'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'stat'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.stat(aPath, (err, stats) => { | ||
if (err) { | ||
this.debugMsg(`stat error ${err.message} code: ${err.code}`); | ||
if (err.code === 2) { | ||
reject( | ||
utils.formatError( | ||
`No such file: ${remotePath}`, | ||
'_stat', | ||
errorCode.notexist | ||
) | ||
); | ||
} else { | ||
this.debugMsg('stats <- ', stats); | ||
resolve({ | ||
mode: stats.mode, | ||
uid: stats.uid, | ||
gid: stats.gid, | ||
size: stats.size, | ||
accessTime: stats.atime * 1000, | ||
modifyTime: stats.mtime * 1000, | ||
isDirectory: stats.isDirectory(), | ||
isFile: stats.isFile(), | ||
isBlockDevice: stats.isBlockDevice(), | ||
isCharacterDevice: stats.isCharacterDevice(), | ||
isSymbolicLink: stats.isSymbolicLink(), | ||
isFIFO: stats.isFIFO(), | ||
isSocket: stats.isSocket() | ||
}); | ||
reject( | ||
utils.formatError(`${err.message} ${remotePath}`, '_stat') | ||
); | ||
} | ||
}); | ||
} finally { | ||
} else { | ||
this.debugMsg('stats <- ', stats); | ||
resolve({ | ||
mode: stats.mode, | ||
uid: stats.uid, | ||
gid: stats.gid, | ||
size: stats.size, | ||
accessTime: stats.atime * 1000, | ||
modifyTime: stats.mtime * 1000, | ||
isDirectory: stats.isDirectory(), | ||
isFile: stats.isFile(), | ||
isBlockDevice: stats.isBlockDevice(), | ||
isCharacterDevice: stats.isCharacterDevice(), | ||
isSymbolicLink: stats.isSymbolicLink(), | ||
isFIFO: stats.isFIFO(), | ||
isSocket: stats.isSocket() | ||
}); | ||
} | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -366,48 +356,46 @@ }; | ||
const reg = /-/gi; | ||
let errorListener; | ||
try { | ||
this.debugMsg(`list -> ${aPath} filter -> ${filter}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'list'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.readdir(aPath, (err, fileList) => { | ||
if (err) { | ||
this.debugMsg(`list error ${err.message} code: ${err.code}`); | ||
reject(utils.formatError(`${err.message} ${aPath}`, '_list')); | ||
this.debugMsg(`list -> ${aPath} filter -> ${filter}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'list'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'list'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.readdir(aPath, (err, fileList) => { | ||
if (err) { | ||
this.debugMsg(`list error ${err.message} code: ${err.code}`); | ||
reject(utils.formatError(`${err.message} ${aPath}`, '_list')); | ||
} else { | ||
this.debugMsg('list <- ', fileList); | ||
let newList = []; | ||
// reset file info | ||
if (fileList) { | ||
newList = fileList.map(item => { | ||
return { | ||
type: item.longname.substr(0, 1), | ||
name: item.filename, | ||
size: item.attrs.size, | ||
modifyTime: item.attrs.mtime * 1000, | ||
accessTime: item.attrs.atime * 1000, | ||
rights: { | ||
user: item.longname.substr(1, 3).replace(reg, ''), | ||
group: item.longname.substr(4, 3).replace(reg, ''), | ||
other: item.longname.substr(7, 3).replace(reg, '') | ||
}, | ||
owner: item.attrs.uid, | ||
group: item.attrs.gid | ||
}; | ||
}); | ||
} | ||
// provide some compatibility for auxList | ||
let regex; | ||
if (filter instanceof RegExp) { | ||
regex = filter; | ||
} else { | ||
this.debugMsg('list <- ', fileList); | ||
let newList = []; | ||
// reset file info | ||
if (fileList) { | ||
newList = fileList.map(item => { | ||
return { | ||
type: item.longname.substr(0, 1), | ||
name: item.filename, | ||
size: item.attrs.size, | ||
modifyTime: item.attrs.mtime * 1000, | ||
accessTime: item.attrs.atime * 1000, | ||
rights: { | ||
user: item.longname.substr(1, 3).replace(reg, ''), | ||
group: item.longname.substr(4, 3).replace(reg, ''), | ||
other: item.longname.substr(7, 3).replace(reg, '') | ||
}, | ||
owner: item.attrs.uid, | ||
group: item.attrs.gid | ||
}; | ||
}); | ||
} | ||
// provide some compatibility for auxList | ||
let regex; | ||
if (filter instanceof RegExp) { | ||
regex = filter; | ||
} else { | ||
let newPattern = filter.replace(/\*([^*])*?/gi, '.*'); | ||
regex = new RegExp(newPattern); | ||
} | ||
resolve(newList.filter(item => regex.test(item.name))); | ||
let newPattern = filter.replace(/\*([^*])*?/gi, '.*'); | ||
regex = new RegExp(newPattern); | ||
} | ||
}); | ||
} finally { | ||
resolve(newList.filter(item => regex.test(item.name))); | ||
} | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -450,51 +438,56 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`get -> ${sftpPath} `, options); | ||
errorListener = utils.makeErrorListener(reject, this, 'get'); | ||
this.client.prependListener('error', errorListener); | ||
let rdr = this.sftp.createReadStream(sftpPath, options); | ||
rdr.once('error', err => { | ||
this.debugMsg(`get -> ${sftpPath} `, options); | ||
let closeListener = utils.makeCloseListener(this, reject, 'get'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'get'); | ||
this.client.prependListener('error', errorListener); | ||
let rdr = this.sftp.createReadStream(sftpPath, options); | ||
rdr.once('error', err => { | ||
utils.removeListeners(rdr); | ||
reject(utils.formatError(`${err.message} ${sftpPath}`, '_get')); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
if (localDst === undefined) { | ||
// no dst specified, return buffer of data | ||
this.debugMsg('get returning buffer of data'); | ||
let concatStream = concat(buff => { | ||
rdr.removeAllListeners('error'); | ||
resolve(buff); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
rdr.pipe(concatStream); | ||
} else { | ||
let wtr; | ||
if (typeof localDst === 'string') { | ||
// dst local file path | ||
this.debugMsg('get returning local file'); | ||
wtr = fs.createWriteStream(localDst); | ||
} else { | ||
this.debugMsg('get returning data into supplied stream'); | ||
wtr = localDst; | ||
} | ||
wtr.once('error', err => { | ||
utils.removeListeners(rdr); | ||
reject(utils.formatError(`${err.message} ${sftpPath}`, '_get')); | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${typeof dst === 'string' ? localDst : ''}`, | ||
'_get' | ||
) | ||
); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
if (localDst === undefined) { | ||
// no dst specified, return buffer of data | ||
this.debugMsg('get returning buffer of data'); | ||
let concatStream = concat(buff => { | ||
rdr.removeAllListeners('error'); | ||
resolve(buff); | ||
}); | ||
rdr.pipe(concatStream); | ||
} else { | ||
let wtr; | ||
wtr.once('finish', () => { | ||
utils.removeListeners(rdr); | ||
if (typeof localDst === 'string') { | ||
// dst local file path | ||
this.debugMsg('get returning local file'); | ||
wtr = fs.createWriteStream(localDst); | ||
resolve(localDst); | ||
} else { | ||
this.debugMsg('get returning data into supplied stream'); | ||
wtr = localDst; | ||
resolve(wtr); | ||
} | ||
wtr.once('error', err => { | ||
utils.removeListeners(rdr); | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${typeof dst === 'string' ? localDst : ''}`, | ||
'_get' | ||
) | ||
); | ||
}); | ||
wtr.once('finish', () => { | ||
utils.removeListeners(rdr); | ||
if (typeof localDst === 'string') { | ||
resolve(localDst); | ||
} else { | ||
resolve(wtr); | ||
} | ||
}); | ||
rdr.pipe(wtr); | ||
} | ||
} finally { | ||
this.removeListener('error', errorListener); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
rdr.pipe(wtr); | ||
} | ||
@@ -548,22 +541,21 @@ }); | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`fastGet -> ${from} ${to} `, opts); | ||
errorListener = utils.makeErrorListener(reject, this, 'fastGet'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.fastGet(from, to, opts, err => { | ||
if (err) { | ||
this.debugMsg(`fastGet error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} src: ${from} dst: ${to}`, | ||
'fastGet' | ||
) | ||
); | ||
} | ||
resolve(`${from} was successfully download to ${to}!`); | ||
}); | ||
} finally { | ||
this.debugMsg(`fastGet -> ${from} ${to} `, opts); | ||
let closeListener = utils.makeCloseListener(this, reject, 'fastGet'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'fastGet'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.fastGet(from, to, opts, err => { | ||
if (err) { | ||
this.debugMsg(`fastGet error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} src: ${from} dst: ${to}`, | ||
'fastGet' | ||
) | ||
); | ||
} | ||
resolve(`${from} was successfully download to ${to}!`); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -619,22 +611,21 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`fastPut -> ${localPath} ${remotePath} `, opts); | ||
errorListener = utils.makeErrorListener(reject, this, 'fastPut'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.fastPut(from, to, opts, err => { | ||
if (err) { | ||
this.debugMsg(`fastPut error ${err.message} ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} Local: ${from} Remote: ${to}`, | ||
'_fastPut' | ||
) | ||
); | ||
} | ||
resolve(`${from} was successfully uploaded to ${to}!`); | ||
}); | ||
} finally { | ||
this.debugMsg(`fastPut -> ${localPath} ${remotePath} `, opts); | ||
let closeListener = utils.makeCloseListener(this, reject, 'fastPut'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'fastPut'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.fastPut(from, to, opts, err => { | ||
if (err) { | ||
this.debugMsg(`fastPut error ${err.message} ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} Local: ${from} Remote: ${to}`, | ||
'_fastPut' | ||
) | ||
); | ||
} | ||
resolve(`${from} was successfully uploaded to ${to}!`); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -681,42 +672,45 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`put -> ${dst} `, opts); | ||
errorListener = utils.makeErrorListener(reject, this, 'put'); | ||
this.client.prependListener('error', errorListener); | ||
let stream = this.sftp.createWriteStream(dst, opts); | ||
stream.once('error', err => { | ||
reject(utils.formatError(`${err.message} ${dst}`, 'put')); | ||
}); | ||
stream.once('finish', () => { | ||
this.debugMsg(`put -> ${dst} `, opts); | ||
let closeListener = utils.makeCloseListener(this, reject, 'put'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'put'); | ||
this.client.prependListener('error', errorListener); | ||
let stream = this.sftp.createWriteStream(dst, opts); | ||
stream.once('error', err => { | ||
reject(utils.formatError(`${err.message} ${dst}`, 'put')); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
stream.once('finish', () => { | ||
utils.removeListeners(stream); | ||
resolve(`Uploaded data stream to ${dst}`); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
if (src instanceof Buffer) { | ||
this.debugMsg('put source is a buffer'); | ||
stream.end(src); | ||
} else { | ||
let rdr; | ||
if (typeof src === 'string') { | ||
this.debugMsg(`put source is a file path: ${src}`); | ||
rdr = fs.createReadStream(src); | ||
} else { | ||
this.debugMsg('put source is a stream'); | ||
rdr = src; | ||
} | ||
rdr.once('error', err => { | ||
utils.removeListeners(stream); | ||
resolve(`Uploaded data stream to ${dst}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${ | ||
typeof localSrc === 'string' ? localSrc : '' | ||
}`, | ||
'put' | ||
) | ||
); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
if (src instanceof Buffer) { | ||
this.debugMsg('put source is a buffer'); | ||
stream.end(src); | ||
} else { | ||
let rdr; | ||
if (typeof src === 'string') { | ||
this.debugMsg(`put source is a file path: ${src}`); | ||
rdr = fs.createReadStream(src); | ||
} else { | ||
this.debugMsg('put source is a stream'); | ||
rdr = src; | ||
} | ||
rdr.once('error', err => { | ||
utils.removeListeners(stream); | ||
reject( | ||
utils.formatError( | ||
`${err.message} ${ | ||
typeof localSrc === 'string' ? localSrc : '' | ||
}`, | ||
'put' | ||
) | ||
); | ||
}); | ||
rdr.pipe(stream); | ||
} | ||
} finally { | ||
this.removeListener('error', errorListener); | ||
rdr.pipe(stream); | ||
} | ||
@@ -764,32 +758,33 @@ }); | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`append -> ${aPath} `, opts); | ||
errorListener = utils.makeErrorListener(reject, this, 'append'); | ||
this.client.prependListener('error', errorListener); | ||
let writerOptions; | ||
if (opts) { | ||
writerOptions = opts; | ||
writerOptions.flags = 'a'; | ||
} else { | ||
writerOptions = { | ||
flags: 'a' | ||
}; | ||
} | ||
let stream = this.sftp.createWriteStream(aPath, writerOptions); | ||
stream.once('error', err => { | ||
utils.removeListeners(stream); | ||
reject(utils.formatError(`${err.message} ${aPath}`, '_append')); | ||
}); | ||
stream.once('finish', () => { | ||
utils.removeListeners(stream); | ||
resolve(`Uploaded data stream to ${aPath}`); | ||
}); | ||
if (data instanceof Buffer) { | ||
stream.end(data); | ||
} else { | ||
data.pipe(stream); | ||
} | ||
} finally { | ||
this.debugMsg(`append -> ${aPath} `, opts); | ||
let closeListener = utils.makeCloseListener(this, reject, 'append'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'append'); | ||
this.client.prependListener('error', errorListener); | ||
let writerOptions; | ||
if (opts) { | ||
writerOptions = opts; | ||
writerOptions.flags = 'a'; | ||
} else { | ||
writerOptions = { | ||
flags: 'a' | ||
}; | ||
} | ||
let stream = this.sftp.createWriteStream(aPath, writerOptions); | ||
stream.once('error', err => { | ||
utils.removeListeners(stream); | ||
reject(utils.formatError(`${err.message} ${aPath}`, '_append')); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
stream.once('finish', () => { | ||
utils.removeListeners(stream); | ||
resolve(`Uploaded data stream to ${aPath}`); | ||
this.removeListener('error', errorListener); | ||
this.removeListener('close', closeListener); | ||
}); | ||
if (data instanceof Buffer) { | ||
stream.end(data); | ||
} else { | ||
data.pipe(stream); | ||
} | ||
@@ -846,19 +841,18 @@ }); | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`mkdir -> ${p}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'mkdir'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.mkdir(p, err => { | ||
if (err) { | ||
this.debugMsg(`mkdir error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_mkdir', err.code) | ||
); | ||
} | ||
resolve(`${p} directory created`); | ||
}); | ||
} finally { | ||
this.debugMsg(`mkdir -> ${p}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'mkdir'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'mkdir'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.mkdir(p, err => { | ||
if (err) { | ||
this.debugMsg(`mkdir error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_mkdir', err.code) | ||
); | ||
} | ||
resolve(`${p} directory created`); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -909,19 +903,18 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`rmdir -> ${p}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'rmdir'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.rmdir(p, err => { | ||
if (err) { | ||
this.debugMsg(`rmdir error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_rmdir', err.code) | ||
); | ||
} | ||
resolve('Successfully removed directory'); | ||
}); | ||
} finally { | ||
this.debugMsg(`rmdir -> ${p}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'rmdir'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'rmdir'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.rmdir(p, err => { | ||
if (err) { | ||
this.debugMsg(`rmdir error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_rmdir', err.code) | ||
); | ||
} | ||
resolve('Successfully removed directory'); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -976,19 +969,18 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`delete -> ${p}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'delete'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.unlink(p, err => { | ||
if (err) { | ||
this.debugMsg(`delete error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_delete', err.code) | ||
); | ||
} | ||
resolve('Successfully deleted file'); | ||
}); | ||
} finally { | ||
this.debugMsg(`delete -> ${p}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'delete'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'delete'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.unlink(p, err => { | ||
if (err) { | ||
this.debugMsg(`delete error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError(`${err.message} ${p}`, '_delete', err.code) | ||
); | ||
} | ||
resolve('Successfully deleted file'); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -1029,22 +1021,21 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`rename -> ${from} ${to}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'rename'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.rename(from, to, err => { | ||
if (err) { | ||
this.debugMsg(`rename error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} From: ${from} To: ${to}`, | ||
'_rename' | ||
) | ||
); | ||
} | ||
resolve(`Successfully renamed ${from} to ${to}`); | ||
}); | ||
} finally { | ||
this.debugMsg(`rename -> ${from} ${to}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'rename'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'rename'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.rename(from, to, err => { | ||
if (err) { | ||
this.debugMsg(`rename error ${err.message} code: ${err.code}`); | ||
reject( | ||
utils.formatError( | ||
`${err.message} From: ${from} To: ${to}`, | ||
'_rename' | ||
) | ||
); | ||
} | ||
resolve(`Successfully renamed ${from} to ${to}`); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -1106,16 +1097,15 @@ }; | ||
return new Promise((resolve, reject) => { | ||
let errorListener; | ||
try { | ||
this.debugMsg(`chmod -> ${p} ${m}`); | ||
errorListener = utils.makeErrorListener(reject, this, 'chmod'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.chmod(p, m, err => { | ||
if (err) { | ||
reject(utils.formatError(`${err.message} ${p}`, '_chmod')); | ||
} | ||
resolve('Successfully change file mode'); | ||
}); | ||
} finally { | ||
this.debugMsg(`chmod -> ${p} ${m}`); | ||
let closeListener = utils.makeCloseListener(this, reject, 'chmod'); | ||
this.client.prependListener('close', closeListener); | ||
let errorListener = utils.makeErrorListener(reject, this, 'chmod'); | ||
this.client.prependListener('error', errorListener); | ||
this.sftp.chmod(p, m, err => { | ||
if (err) { | ||
reject(utils.formatError(`${err.message} ${p}`, '_chmod')); | ||
} | ||
resolve('Successfully change file mode'); | ||
this.removeListener('error', errorListener); | ||
} | ||
this.removeListener('close', closeListener); | ||
}); | ||
}); | ||
@@ -1122,0 +1112,0 @@ }; |
@@ -116,3 +116,2 @@ 'use strict'; | ||
self.errorHandled = true; | ||
console.debug('Error event caught by method error handler'); | ||
reject(formatError(err, name)); | ||
@@ -125,3 +124,5 @@ }; | ||
if (!client.endCalled) { | ||
console.error(`${client.clientName} Connection ended unexpectedly`); | ||
console.error( | ||
`${client.clientName} End Listener: Connection ended unexpectedly` | ||
); | ||
} | ||
@@ -131,6 +132,10 @@ }; | ||
function makeCloseListener(client) { | ||
function makeCloseListener(client, reject, name) { | ||
return function() { | ||
if (!client.endCalled) { | ||
console.error(`${client.clientName}: Connection closed unexpectedly`); | ||
if (reject) { | ||
reject(formatError('Connection closed unepectedly', name)); | ||
} else { | ||
console.error(`${client.clientName}: Connection closed unexpectedly`); | ||
} | ||
} | ||
@@ -137,0 +142,0 @@ client.sftp = undefined; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
204629
2032
1848