2025 / tooling /scripts /src /create-user.ts
daqc's picture
Initial commit
ad19202
import { auth } from "@repo/auth";
import { createUser, createUserAccount, getUserByEmail } from "@repo/database";
import { logger } from "@repo/logs";
import { nanoid } from "nanoid";
async function main() {
logger.info("Let's create a new user for your application!");
const email = await logger.prompt("Enter an email:", {
required: true,
placeholder: "admin@example.com",
type: "text",
});
const name = await logger.prompt("Enter a name:", {
required: true,
placeholder: "Adam Admin",
type: "text",
});
const isAdmin = await logger.prompt("Should user be an admin?", {
required: true,
type: "confirm",
default: false,
});
const authContext = await auth.$context;
const adminPassword = nanoid(16);
const hashedPassword = await authContext.password.hash(adminPassword);
// check if user exists
const user = await getUserByEmail(email);
if (user) {
logger.error("User with this email already exists!");
return;
}
const adminUser = await createUser({
email,
name,
role: isAdmin ? "admin" : "user",
emailVerified: true,
onboardingComplete: true,
});
if (!adminUser) {
logger.error("Failed to create user!");
return;
}
await createUserAccount({
userId: adminUser.id,
providerId: "credential",
accountId: adminUser.id,
hashedPassword,
});
logger.success("User created successfully!");
logger.info(`Here is the password for the new user: ${adminPassword}`);
}
main();