hardhat-secure-accounts
Version:
Account management plugin for Hardhat
137 lines • 5.13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isRepl = void 0;
exports.getAccountOrAsk = getAccountOrAsk;
exports.getPasswordOrAsk = getPasswordOrAsk;
exports.getStringOrAsk = getStringOrAsk;
exports.askForConfirmation = askForConfirmation;
const enquirer_1 = __importDefault(require("enquirer"));
const prompt_sync_1 = __importDefault(require("prompt-sync"));
const account_1 = require("../lib/account");
const logger_1 = require("./logger");
const error_1 = require("./error");
const isRepl = () => !!require('repl').repl;
exports.isRepl = isRepl;
async function getAccountOrAsk(_name, accountsDir) {
(0, logger_1.logDebug)(_name === undefined
? 'No account name provided, prompting user'
: `Account name provided, skipping prompt.`);
const name = _name !== null && _name !== void 0 ? _name : (await askForAccount((0, account_1.getSecureAccounts)(accountsDir)));
(0, logger_1.logDebug)(`Account name ${name}`);
const account = (0, account_1.getSecureAccount)(accountsDir, name);
if (account === undefined) {
throw new error_1.SecureAccountsPluginError('Account not found!');
}
(0, logger_1.logDebug)(`Found account ${account.name} at ${account.filename}`);
return account;
}
async function getPasswordOrAsk(_password) {
(0, logger_1.logDebug)(_password === undefined
? 'No password provided, prompting user'
: `Password provided, skipping prompt.`);
const password = _password !== null && _password !== void 0 ? _password : (await askForPassword());
if (password === undefined) {
throw new error_1.SecureAccountsPluginError('Password not provided!');
}
return password;
}
async function getStringOrAsk(name, question, _value) {
(0, logger_1.logDebug)(_value === undefined
? `No ${name} provided, prompting user`
: `${name} provided, skipping prompt.`);
return _value !== null && _value !== void 0 ? _value : (await askForString(question));
}
async function askForAccount(accounts) {
if (accounts.length === 0) {
throw new error_1.SecureAccountsPluginError('No accounts found!');
}
const question = 'Choose an account to unlock';
let answer = '';
const options = accounts.map((a) => a.name);
(0, logger_1.logDebug)(`Managed accounts: ${options.join(', ')}`);
if ((0, exports.isRepl)()) {
(0, logger_1.logWarn)('REPL detected, using prompt-sync');
console.log('Available accounts: ', options.join(', '));
// Function to autocomplete account names
function complete(commands) {
return function (str) {
let i;
let ret = [];
for (i = 0; i < commands.length; i++) {
if (commands[i].indexOf(str) == 0)
ret.push(commands[i]);
}
return ret;
};
}
const prompt = (0, prompt_sync_1.default)();
answer = prompt(`${question} (use tab to autocomplete): `, { autocomplete: complete(options) });
}
else {
const response = await enquirer_1.default.prompt({
type: 'select',
name: 'account',
message: question,
choices: options,
});
answer = response.account;
}
return answer;
}
async function askForPassword() {
const question = 'Enter the password for this account';
let answer = '';
if ((0, exports.isRepl)()) {
(0, logger_1.logWarn)('REPL detected, using prompt-sync');
const prompt = (0, prompt_sync_1.default)();
answer = prompt(`${question}: `, { echo: '*' });
}
else {
const response = await enquirer_1.default.prompt({
type: 'password',
name: 'password',
message: question,
});
answer = response.password;
}
return answer;
}
async function askForString(question) {
let answer = '';
if ((0, exports.isRepl)()) {
(0, logger_1.logWarn)('REPL detected, using prompt-sync');
const prompt = (0, prompt_sync_1.default)();
answer = prompt(`${question}: `);
}
else {
const response = await enquirer_1.default.prompt({
type: 'input',
name: 'name',
message: question,
});
answer = response.name;
}
return answer;
}
async function askForConfirmation(question) {
let answer = false;
if ((0, exports.isRepl)()) {
(0, logger_1.logWarn)('REPL detected, using prompt-sync');
const prompt = (0, prompt_sync_1.default)();
const response = prompt(`${question} (y/N): `);
answer = ['y', 'Y'].includes(response);
}
else {
const response = await enquirer_1.default.prompt({
type: 'confirm',
name: 'yes',
message: question,
});
answer = response.yes;
}
return answer;
}
//# sourceMappingURL=ask.js.map