import { PrismaAdapter } from "@auth/prisma-adapter";
import {
getServerSession,
type DefaultSession,
type NextAuthOptions,
} from "next-auth";
import { type Adapter } from "next-auth/adapters";
import DiscordProvider from "next-auth/providers/discord";
import * as Sentry from "@sentry/nextjs";
import { env } from "~/env.mjs";
import { db } from "~/server/db";
declare module "next-auth" {
interface Session extends DefaultSession {
user: {
id: string;
} & DefaultSession["user"];
}
}
export const authOptions: NextAuthOptions = {
callbacks: {
session: ({ session, user }) => ({
...session,
user: {
...session.user,
id: user.id,
},
}),
},
events: {
signIn({ user }) {
console.log("User signed in, Sentry has registered", user);
Sentry.setUser({ id: user.id });
},
signOut() {
console.log("User signed out, Sentry has been cleared");
Sentry.setUser(null);
},
},
adapter: PrismaAdapter(db) as Adapter,
providers: [
DiscordProvider({
clientId: env.DISCORD_CLIENT_ID!,
clientSecret: env.DISCORD_CLIENT_SECRET!,
}),
],
};
export const getServerAuthSession = () => getServerSession(authOptions);