import { betterAuth } from "better-auth"; import { prismaAdapter } from "better-auth/adapters/prisma"; import { admin } from "better-auth/plugins"; import { prisma } from "./prisma"; import bcrypt from "bcryptjs"; import { sendWelcomeEmail } from "./email"; export const auth = betterAuth({ database: prismaAdapter(prisma, { provider: "postgresql", }), emailAndPassword: { enabled: true, requireEmailVerification: true, password: { hash: (password) => bcrypt.hash(password, 10), verify: ({ hash, password }) => bcrypt.compare(password, hash), }, }, databaseHooks: { user: { create: { after: async (user) => { await sendWelcomeEmail(user.email, user.name); }, }, }, }, plugins: [ admin({ defaultRole: "student", adminRoles: ["admin"], }), ], trustedOrigins: [ process.env.BETTER_AUTH_URL ?? "http://localhost:3000", "https://school.second-brain.ru", ], user: { additionalFields: { role: { type: "string", defaultValue: "student", input: false, }, }, }, }); export type Session = typeof auth.$Infer.Session; export type User = typeof auth.$Infer.Session.user;