np
Version:
A better `npm publish`
25 lines (18 loc) • 969 B
JavaScript
import {execa} from 'execa';
import {from, catchError} from 'rxjs';
import Version from '../version.js';
import handleNpmError from './handle-npm-error.js';
import {npmNetworkTimeout, version as npmVersionCheck} from './util.js';
export const getEnable2faArguments = async (packageName, options) => {
const npmVersion = await npmVersionCheck();
const arguments_ = new Version(npmVersion).satisfies('>=9.0.0')
? ['access', 'set', 'mfa=publish', packageName]
: ['access', '2fa-required', packageName];
if (options && options.otp) {
arguments_.push('--otp', options.otp);
}
return arguments_;
};
const enable2fa = async (packageName, options) => execa('npm', await getEnable2faArguments(packageName, options), {timeout: npmNetworkTimeout});
const tryEnable2fa = (task, packageName, options) => from(enable2fa(packageName, options)).pipe(catchError(error => handleNpmError(error, task, otp => enable2fa(packageName, {otp}))));
export default tryEnable2fa;