UNPKG

@nomicfoundation/hardhat-keystore

Version:

A module for managing keystore files that store a map from IDs to encrypted string values.

45 lines 2.12 kB
import { PLUGIN_ID } from "../constants.js"; import { createMasterKey, deriveMasterKeyFromKeystore, } from "../keystores/encryption.js"; import { askPassword, setUpPassword } from "../keystores/password.js"; import { UserDisplayMessages } from "../ui/user-display-messages.js"; import { setupKeystoreLoaderFrom } from "../utils/setup-keystore-loader-from.js"; import { validateKey } from "../utils/validate-key.js"; const taskSet = async (setArgs, hre) => { const keystoreLoader = setupKeystoreLoaderFrom(hre); await set(setArgs, keystoreLoader, hre.interruptions.requestSecretInput.bind(hre.interruptions)); }; export const set = async ({ key, force }, keystoreLoader, requestSecretInput, consoleLog = console.log) => { if (!(await validateKey(key))) { consoleLog(UserDisplayMessages.displayInvalidKeyErrorMessage(key)); process.exitCode = 1; return; } const isKeystoreInitialized = await keystoreLoader.isKeystoreInitialized(); const password = isKeystoreInitialized ? await askPassword(requestSecretInput) : await setUpPassword(requestSecretInput, consoleLog); if (isKeystoreInitialized === false) { await keystoreLoader.createUnsavedKeystore(createMasterKey({ password })); } const keystore = await keystoreLoader.loadKeystore(); const masterKey = deriveMasterKeyFromKeystore({ encryptedKeystore: keystore.toJSON(), password, }); if (!force && (await keystore.hasKey(key, masterKey))) { consoleLog(UserDisplayMessages.displayKeyAlreadyExistsWarning(key)); process.exitCode = 1; return; } const secret = await requestSecretInput(PLUGIN_ID, UserDisplayMessages.enterSecretMessage()); if (secret.length === 0) { consoleLog(UserDisplayMessages.displaySecretCannotBeEmptyErrorMessage()); process.exitCode = 1; return; } await keystore.addNewValue(key, secret, masterKey); await keystoreLoader.saveKeystoreToFile(); consoleLog(UserDisplayMessages.displayKeySetInfoMessage(key)); }; export default taskSet; //# sourceMappingURL=set.js.map