diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts index c94e94f91..b02a617e0 100644 --- a/app/api/auth/[...nextauth]/route.ts +++ b/app/api/auth/[...nextauth]/route.ts @@ -1,41 +1,5 @@ -import NextAuth, { getServerSession, type NextAuthOptions } from "next-auth"; -import AzureADProvider from "next-auth/providers/azure-ad"; - -/** - * 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); +import { authOptions } from "@/app/auth"; +import NextAuth from "next-auth"; const handler = NextAuth(authOptions); diff --git a/app/auth.ts b/app/auth.ts new file mode 100644 index 000000000..c59ac9c6e --- /dev/null +++ b/app/auth.ts @@ -0,0 +1,63 @@ +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); diff --git a/app/config/server.ts b/app/config/server.ts index 6eab9ebec..d95c15770 100644 --- a/app/config/server.ts +++ b/app/config/server.ts @@ -7,7 +7,6 @@ declare global { CODE?: string; BASE_URL?: string; PROXY_URL?: string; - VERCEL?: string; HIDE_USER_API_KEY?: string; // disable user's api key input DISABLE_GPT4?: string; // allow user to use gpt-4 or not BUILD_MODE?: "standalone" | "export";