From e0e59686048c772648e90d78afc6d8f71dd48445 Mon Sep 17 00:00:00 2001 From: Theophilus Omoregbee Date: Mon, 29 Jan 2018 10:13:55 +0100 Subject: [PATCH 1/2] fix: updated error to rightly signify what happened and work around --- src/lib/npm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/npm.js b/src/lib/npm.js index 91fb98d..5ab5d16 100644 --- a/src/lib/npm.js +++ b/src/lib/npm.js @@ -48,7 +48,7 @@ async function getNpmToken({npm, options}) { }); if (err) log.verbose(`Error: ${err}`); - if (!token) throw new Error(`Could not login to npm.`); + if (!token) throw new Error(`Could not login to npm because you don't have token generated, run 'npm token create'.`); if (options.keychain) { passwordStorage.set(npm.username, npm.password); From aac04906701889d4bb17b2ae75671bb2dea012ee Mon Sep 17 00:00:00 2001 From: Theophilus Omorebee Date: Sat, 17 Mar 2018 15:33:02 +0100 Subject: [PATCH 2/2] fix: possible cause of error, and no need for npm token create --- src/lib/npm.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lib/npm.js b/src/lib/npm.js index 5ab5d16..2d0c9c4 100644 --- a/src/lib/npm.js +++ b/src/lib/npm.js @@ -23,8 +23,9 @@ async function getNpmToken({npm, options}) { const uri = url.resolve(npm.registry, '-/user/org.couchdb.user:' + encodeURIComponent(npm.username)); - const {err, token} = await new Promise(resolve => { + const {err, token, possibleCause=''} = await new Promise(resolve => { client.request(uri, {method: 'PUT', body}, async (err, parsed, raw, response) => { + if (err && err.code === 'E401' && response.headers['www-authenticate'] === 'OTP') { await askForOTP(uri, body, npm); resolve({token: npm.token}); @@ -38,17 +39,17 @@ async function getNpmToken({npm, options}) { body, }) .then(res => resolve(res)) - .catch(err => resolve({err})); + .catch(err => resolve({err, possibleCause: err.message})); } else if (err) { - resolve({err}); + resolve({err, possibleCause:'Bad username or password'}); } else { - resolve(response.body); + resolve(parsed);// at this point a token was created, so no need for future `npm token create` } }); }); if (err) log.verbose(`Error: ${err}`); - if (!token) throw new Error(`Could not login to npm because you don't have token generated, run 'npm token create'.`); + if (!token) throw new Error(`Could not login to npm. ${possibleCause}`); if (options.keychain) { passwordStorage.set(npm.username, npm.password);