ragvault
Version:
Securely manage and query your private data using a local vector database. Your private RAG.
62 lines (61 loc) • 2.24 kB
JavaScript
import chalk from "chalk";
import inquirer from "inquirer";
import { createSpinner } from "nanospinner";
import { sleep } from "../../utils/sleep.js";
import { hashPassword } from "../../utils/bcrypt.js";
import { saveUsers } from "../../utils/user-transactions.js";
export async function register(users, session) {
const { username, password, securityQuestion, securityAnswer } = await inquirer.prompt([
{
type: "input",
name: "username",
message: "Choose a username:",
validate: (input) => input.trim() !== "" || "Username cannot be empty",
},
{
type: "password",
name: "password",
message: "Choose a password:",
validate: (input) => input.trim().length >= 8 ||
"Password must be at least 8 characters long",
},
{
type: "password",
name: "confirmPassword",
message: "Confirm your password:",
validate: (input, answers) => input === answers.password || "Passwords do not match",
},
{
type: "input",
name: "securityQuestion",
message: "Enter a security question for password reset:",
validate: (input) => input.trim() !== "" || "Security question cannot be empty",
},
{
type: "password",
name: "securityAnswer",
message: "Enter the answer to your security question:",
validate: (input) => input.trim() !== "" || "Security answer cannot be empty",
},
]);
const spinner = createSpinner("Registering...").start();
await sleep(1000);
if (users[username]) {
spinner.error({
text: chalk.red("Username already exists. Please choose another."),
});
return null;
}
users[username] = {
username,
password: await hashPassword(password),
securityQuestion,
securityAnswer: await hashPassword(securityAnswer),
openAIKey: "",
collectionName: "",
claudeKey: "",
};
await saveUsers(users);
spinner.success({ text: chalk.green("Registration successful!") });
return users[username];
}