UNPKG

namastejs

Version:

A spiritual greeting from your JavaScript code. Because every function deserves a 'Namaste ๐Ÿ™'

117 lines (100 loc) โ€ข 3.35 kB
const readline = require("readline"); const { encode, decode } = require("./vaultCrypto"); const { readVault, writeVault } = require("./vaultStorage"); function prompt(question) { const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); return new Promise((resolve) => rl.question(question, (answer) => { rl.close(); resolve(answer.trim()); }) ); } async function vaultCLI(command, keyArg) { const vault = readVault(); switch (command) { case "add": { const key = await prompt("๐Ÿ”‘ Service name (e.g., github): "); const username = await prompt("๐Ÿ‘ค Username: "); const password = await prompt( "๐Ÿ” Password (leave blank to auto-generate): " ); const pwd = password || Math.random().toString(36).slice(-12) + Date.now().toString(36).slice(-4); if (vault[key]) { const confirm = await prompt( `โš ๏ธ '${key}' already exists. Overwrite? (yes/no): ` ); if (confirm.toLowerCase() !== "yes") { console.log("โŽ Cancelled."); return; } } vault[key] = { username, password: encode(pwd), }; writeVault(vault); console.log(`โœ… Saved: ${key}`); break; } case "get": { const key = keyArg || (await prompt("๐Ÿ” Service name: ")); if (!vault[key]) return console.log("โŒ Not found."); const { username, password } = vault[key]; console.log(`\n๐Ÿ‘ค Username: ${username}`); console.log(`๐Ÿ” Password: ${decode(password)}\n`); break; } case "list": { const keys = Object.keys(vault); if (!keys.length) return console.log("๐Ÿ“ญ Vault is empty."); console.log("๐Ÿ“š Stored services:\n"); keys.forEach((key) => console.log("โ€ข", key)); console.log(); break; } case "delete": { const key = keyArg || (await prompt("๐Ÿ—‘ Service to delete: ")); if (!vault[key]) return console.log("โŒ Not found."); const confirm = await prompt( `โš ๏ธ Are you sure you want to delete '${key}'? (yes/no): ` ); if (confirm.toLowerCase() === "yes") { delete vault[key]; writeVault(vault); console.log(`โœ… '${key}' deleted.`); } else { console.log("โŽ Cancelled."); } break; } case "clear": { const confirm1 = await prompt( "โš ๏ธ This will erase everything. Type 'confirm': " ); const confirm2 = await prompt("โš ๏ธ Are you really sure? Type 'yes': "); if (confirm1 === "confirm" && confirm2 === "yes") { writeVault({}); console.log("๐Ÿงจ Vault cleared."); } else { console.log("โŽ Cancelled."); } break; } default: console.log("๐Ÿ“– Commands:"); console.log("add โ†’ Add new credential"); console.log("get KEY โ†’ Show credential for a service"); console.log("list โ†’ List all saved services"); console.log("delete KEY โ†’ Remove a service"); console.log("clear โ†’ Wipe entire vault\n"); break; } } module.exports = { vaultCLI };