diff --git a/node_modules/npm-registry-client/CHANGELOG.md b/node_modules/npm-registry-client/CHANGELOG.md index bc74d3f0e88a5..138b3be2d9e5c 100644 --- a/node_modules/npm-registry-client/CHANGELOG.md +++ b/node_modules/npm-registry-client/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +# [8.6.0](https://github.com/npm/npm-registry-client/compare/v8.5.1...v8.6.0) (2018-07-13) + + +### Features + +* **access:** Add support for npm access to set per-package 2fa requirements ([8b472d2](https://github.com/npm/npm-registry-client/commit/8b472d2)) + + + ## [8.5.1](https://github.com/npm/npm-registry-client/compare/v8.5.0...v8.5.1) (2018-03-08) diff --git a/node_modules/npm-registry-client/lib/access.js b/node_modules/npm-registry-client/lib/access.js index d8d65a9442a25..caa80b12191c1 100644 --- a/node_modules/npm-registry-client/lib/access.js +++ b/node_modules/npm-registry-client/lib/access.js @@ -16,6 +16,12 @@ subcommands.public = function (uri, params, cb) { subcommands.restricted = function (uri, params, cb) { return setAccess.call(this, 'restricted', uri, params, cb) } +subcommands['2fa-required'] = function (uri, params, cb) { + return setRequires2fa.call(this, true, uri, params, cb) +} +subcommands['2fa-not-required'] = function (uri, params, cb) { + return setRequires2fa.call(this, false, uri, params, cb) +} function setAccess (access, uri, params, cb) { return this.request(apiUri(uri, 'package', params.package, 'access'), { @@ -25,6 +31,14 @@ function setAccess (access, uri, params, cb) { }, cb) } +function setRequires2fa (requires2fa, uri, params, cb) { + return this.request(apiUri(uri, 'package', params.package, 'access'), { + method: 'POST', + auth: params.auth, + body: JSON.stringify({ publish_requires_tfa: requires2fa }) + }, cb) +} + subcommands.grant = function (uri, params, cb) { var reqUri = apiUri(uri, 'team', params.scope, params.team, 'package') return this.request(reqUri, { diff --git a/node_modules/npm-registry-client/lib/request.js b/node_modules/npm-registry-client/lib/request.js index 471546c1d29b8..5987bfa6fb0e4 100644 --- a/node_modules/npm-registry-client/lib/request.js +++ b/node_modules/npm-registry-client/lib/request.js @@ -289,13 +289,26 @@ function requestDone (method, where, cb) { } if (!parsed.error) { - er = makeError( - 'Registry returned ' + response.statusCode + - ' for ' + method + - ' on ' + where, - name, - response.statusCode - ) + if (response.statusCode === 401 && response.headers['www-authenticate']) { + const auth = response.headers['www-authenticate'].split(/,\s*/).map(s => s.toLowerCase()) + if (auth.indexOf('ipaddress') !== -1) { + er = makeError('Login is not allowed from your IP address', name, response.statusCode, 'EAUTHIP') + } else if (auth.indexOf('otp') !== -1) { + er = makeError('OTP required for this operation', name, response.statusCode, 'EOTP') + } else { + er = makeError('Unable to authenticate, need: ' + response.headers['www-authenticate'], name, response.statusCode, 'EAUTHUNKNOWN') + } + } else { + const msg = parsed.message ? ': ' + parsed.message : '' + er = makeError( + 'Registry returned ' + response.statusCode + + ' for ' + method + + ' on ' + where + + msg, + name, + response.statusCode + ) + } } else if (name && parsed.error === 'not_found') { er = makeError('404 Not Found: ' + name, name, response.statusCode) } else if (name && parsed.error === 'User not found') { @@ -312,12 +325,12 @@ function requestDone (method, where, cb) { }.bind(this) } -function makeError (message, name, code) { +function makeError (message, name, statusCode, code) { var er = new Error(message) if (name) er.pkgid = name - if (code) { - er.statusCode = code - er.code = 'E' + code + if (statusCode) { + er.statusCode = statusCode + er.code = code || 'E' + statusCode } return er } diff --git a/node_modules/npm-registry-client/package.json b/node_modules/npm-registry-client/package.json index 6058da582b930..3e0f48be2c319 100644 --- a/node_modules/npm-registry-client/package.json +++ b/node_modules/npm-registry-client/package.json @@ -1,14 +1,8 @@ { - "_args": [ - [ - "npm-registry-client@8.5.1", - "/Users/rebecca/code/npm" - ] - ], - "_from": "npm-registry-client@8.5.1", - "_id": "npm-registry-client@8.5.1", + "_from": "npm-registry-client@8.6.0", + "_id": "npm-registry-client@8.6.0", "_inBundle": false, - "_integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", + "_integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", "_location": "/npm-registry-client", "_phantomChildren": { "safe-buffer": "5.1.2" @@ -16,19 +10,21 @@ "_requested": { "type": "version", "registry": true, - "raw": "npm-registry-client@8.5.1", + "raw": "npm-registry-client@8.6.0", "name": "npm-registry-client", "escapedName": "npm-registry-client", - "rawSpec": "8.5.1", + "rawSpec": "8.6.0", "saveSpec": null, - "fetchSpec": "8.5.1" + "fetchSpec": "8.6.0" }, "_requiredBy": [ + "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.5.1.tgz", - "_spec": "8.5.1", - "_where": "/Users/rebecca/code/npm", + "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", + "_shasum": "7f1529f91450732e89f8518e0f21459deea3e4c4", + "_spec": "npm-registry-client@8.6.0", + "_where": "/Users/zkat/Documents/code/work/npm", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -37,6 +33,7 @@ "bugs": { "url": "https://github.com/npm/npm-registry-client/issues" }, + "bundleDependencies": false, "dependencies": { "concat-stream": "^1.5.2", "graceful-fs": "^4.1.6", @@ -51,6 +48,7 @@ "slide": "^1.1.3", "ssri": "^5.2.4" }, + "deprecated": false, "description": "Client for the npm registry", "devDependencies": { "negotiator": "^0.6.1", @@ -60,7 +58,7 @@ "rimraf": "^2.5.4", "standard": "^11.0.0", "standard-version": "^4.3.0", - "tap": "^11.1.2" + "tap": "^12.0.1" }, "files": [ "lib", @@ -83,5 +81,5 @@ "release": "standard-version -s", "test": "tap --nyc-arg=--all --coverage test/*.js" }, - "version": "8.5.1" + "version": "8.6.0" } diff --git a/package-lock.json b/package-lock.json index 7698a87f7ac91..dce6a032f34c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3130,9 +3130,9 @@ } }, "npm-registry-client": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.5.1.tgz", - "integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", + "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", "requires": { "concat-stream": "^1.5.2", "graceful-fs": "^4.1.6", diff --git a/package.json b/package.json index 1c7bf88ae7de6..ff49f6dd4e4f3 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "npm-packlist": "^1.1.11", "npm-pick-manifest": "^2.1.0", "npm-profile": "^3.0.2", - "npm-registry-client": "^8.5.1", + "npm-registry-client": "^8.6.0", "npm-registry-fetch": "^1.1.0", "npm-user-validate": "~1.0.0", "npmlog": "~4.1.2",