@@ -7,6 +7,9 @@ var readPackageJson = require('read-package-json')
7
7
var mapToRegistry = require ( './utils/map-to-registry.js' )
8
8
var npm = require ( './npm.js' )
9
9
var output = require ( './utils/output.js' )
10
+ const readUserInfo = require ( './utils/read-user-info.js' )
11
+ const Bluebird = require ( 'bluebird' )
12
+ const registryAccess = Bluebird . promisify ( npm . registry . access . bind ( npm . registry ) )
10
13
11
14
var whoami = require ( './whoami' )
12
15
@@ -17,6 +20,8 @@ access.usage =
17
20
'npm access restricted [<package>]\n' +
18
21
'npm access grant <read-only|read-write> <scope:team> [<package>]\n' +
19
22
'npm access revoke <scope:team> [<package>]\n' +
23
+ 'npm access 2fa-required <package>\n' +
24
+ 'npm access 2fa-not-required <package>\n' +
20
25
'npm access ls-packages [<user>|<scope>|<scope:team>]\n' +
21
26
'npm access ls-collaborators [<package> [<user>]]\n' +
22
27
'npm access edit [<package>]'
@@ -61,17 +66,22 @@ function access (args, cb) {
61
66
62
67
function invokeCmd ( err , uri , auth , base ) {
63
68
if ( err ) { return cb ( err ) }
64
- params . auth = auth
65
- try {
66
- return npm . registry . access ( cmd , uri , params , function ( err , data ) {
67
- if ( ! err && data ) {
68
- output ( JSON . stringify ( data , undefined , 2 ) )
69
- }
70
- cb ( err , data )
69
+ return Bluebird . try ( ( ) => {
70
+ params . auth = auth
71
+ try {
72
+ return registryAccess ( cmd , uri , params )
73
+ } catch ( err ) {
74
+ throw err . message + '\n\nUsage:\n' + access . usage
75
+ }
76
+ } ) . catch ( err => {
77
+ if ( err . code !== 'EOTP' ) throw err
78
+ return readUserInfo . otp ( 'Enter OTP: ' ) . then ( otp => {
79
+ params . auth . otp = otp
80
+ return registryAccess ( cmd , uri , params )
71
81
} )
72
- } catch ( e ) {
73
- cb ( e . message + '\n\nUsage:\n' + access . usage )
74
- }
82
+ } ) . then ( data => {
83
+ return output ( data ? JSON . stringify ( data , undefined , 2 ) : '"ok"' )
84
+ } ) . asCallback ( cb )
75
85
}
76
86
}
77
87
0 commit comments