import NextAuth, { type NextAuthOptions } from 'next-auth' import CredentialsProvider from 'next-auth/providers/credentials' import { PrismaClient } from '@prisma/client' import bcrypt from 'bcrypt' const prisma = new PrismaClient() export const authOptions: NextAuthOptions = { providers: [ CredentialsProvider({ name: 'Credentials', credentials: { email: { label: 'Email', type: 'email' }, password: { label: 'Password', type: 'password' }, }, async authorize(credentials) { if (!credentials?.email || !credentials?.password) { return null } const user = await prisma.user.findUnique({ where: { email: credentials.email }, }) if (!user) { return null } if (!user.password) { return null } const isValid = await bcrypt.compare(credentials.password, user.password) if (!isValid) { return null } return { id: user.id, email: user.email, name: user.name, role: user.role, username: user.username!, } }, }), ], session: { strategy: 'jwt', }, callbacks: { async jwt({ token, user }) { if (user) { token.id = user.id token.role = user.role token.username = user.username } return token }, async session({ session, token }) { if (session.user) { session.user.id = token.id as string session.user.role = token.role as "COUPLE" | "PLANNER" | "GUEST" session.user.username = token.username as string } return session }, }, secret: process.env.NEXTAUTH_SECRET, } const handler = NextAuth(authOptions) export { handler as GET, handler as POST }