UNPKG

hardhat-secure-accounts

Version:
134 lines 5.03 kB
"use strict"; 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("./account"); const logger_1 = require("../helpers/logger"); const error_1 = require("../helpers/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.SecureAccountPluginError('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.SecureAccountPluginError('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) { 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