import { compare } from 'bcrypt-ts'; import NextAuth, { User, Session } from 'next-auth'; import Credentials from 'next-auth/providers/credentials'; import { getUser } from '@/db/queries'; import { authConfig } from './auth.config'; interface ExtendedSession extends Session { user: User; } export const { handlers: { GET, POST }, auth, signIn, signOut, } = NextAuth({ ...authConfig, providers: [ Credentials({ credentials: {}, async authorize({ email, password }: any) { let users = await getUser(email); if (users.length === 0) return null; let passwordsMatch = await compare(password, users[0].password!); if (passwordsMatch) return users[0] as any; }, }), ], callbacks: { async jwt({ token, user }) { if (user) { token.id = user.id; } return token; }, async session({ session, token, }: { session: ExtendedSession; token: any; }) { if (session.user) { session.user.id = token.id as string; } return session; }, }, });