import { getServerSession, type DefaultSession, type NextAuthOptions, } from "next-auth"; import AzureADProvider from "next-auth/providers/azure-ad"; /** * Module augmentation for `next-auth` types. Allows us to add custom properties to the `session` * object and keep type safety. * * @see https://next-auth.js.org/getting-started/typescript#module-augmentation */ declare module "next-auth" { interface Session extends DefaultSession { user: { id: string; // ...other properties // role: UserRole; } & DefaultSession["user"]; } // interface User { // // ...other properties // // role: UserRole; // } } /** * Options for NextAuth.js used to configure adapters, providers, callbacks, etc. * * @see https://next-auth.js.org/configuration/options */ export const authOptions: NextAuthOptions = { callbacks: { session: ({ session, token }) => ({ ...session, user: { ...session.user, id: token.sub, }, }), }, providers: [ AzureADProvider({ clientId: process.env.AZURE_AD_CLIENT_ID ?? "", clientSecret: process.env.AZURE_AD_CLIENT_SECRET ?? "", tenantId: process.env.AZURE_AD_TENANT_ID ?? "", }), ], pages: { signIn: "/login", signOut: "/login", error: "/login", }, }; /** * Wrapper for `getServerSession` so that you don't need to import the `authOptions` in every file. * * @see https://next-auth.js.org/configuration/nextjs */ export const getServerAuthSession = () => getServerSession(authOptions);