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",