import axios from "axios"; import NextAuth, { NextAuthOptions } from "next-auth"; import { JWT } from "next-auth/jwt"; import CredentialsProvider from "next-auth/providers/credentials"; interface IToken { access: string; } const refreshToken = async (token: JWT): Promise => { const data = { refresh: token.refresh_token, }; const response = await axios.post( "https://api.kgroaduat.fishrungames.com/api/v1/token/refresh/", data ); return { ...token, access_token: response.data.access, }; }; export const authOptions: NextAuthOptions = { providers: [ CredentialsProvider({ name: "Credentials", credentials: { email: { label: "Email", type: "text", placeholder: "jsmith@example.com", }, password: { label: "Password", type: "password" }, }, async authorize(credentials, req) { if (!credentials?.email || !credentials?.password) return null; const { email, password } = credentials as any; const res = await fetch( "https://api.kgroaduat.fishrungames.com/api/v1/users/login/", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email, password, }), } ); if (res.status === 401) { console.log(res.status); return null; } const user = await res.json(); return user; }, }), ], pages: { signIn: "/sign-in", }, session: { strategy: "jwt", }, callbacks: { async jwt({ token, user }) { if (user) return { ...token, ...user }; return refreshToken(token); }, async session({ token, session }) { session.access_token = token.access_token; session.refresh_token = token.refresh_token; return session; }, }, }; const handler = NextAuth(authOptions); export { handler as GET, handler as POST };