import NextAuth, { type NextAuthOptions } from "next-auth"; import DiscordProvider from "next-auth/providers/discord"; import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { db } from "@/db"; import { accounts, sessions, users, verificationTokens } from "@/db/schema"; export const authOptions: NextAuthOptions = { adapter: DrizzleAdapter(db, { usersTable: users, accountsTable: accounts, sessionsTable: sessions, verificationTokensTable: verificationTokens, }), providers: [ DiscordProvider({ clientId: process.env.DISCORD_CLIENT_ID!, clientSecret: process.env.DISCORD_CLIENT_SECRET!, }), ], callbacks: { async session({ session, user }) { if (session.user) { (session.user as any).id = user.id; // Attach discordId from accounts table const acct = await db.query.accounts.findFirst({ where: (a, { eq, and }) => and(eq(a.userId, user.id), eq(a.provider, "discord")), }); if (acct) { (session.user as typeof session.user & { discordId: string }).discordId = acct.providerAccountId; } } return session; }, }, secret: process.env.NEXTAUTH_SECRET, }; const handler = NextAuth(authOptions); export { handler as GET, handler as POST };