import { SessionWithTokens, authOptions } from "@/config/authConfig"; import { getServerSession } from "next-auth"; import { headers } from "next/headers"; import { redirect } from "next/navigation"; export const serverFetch: typeof fetch = async (input, init) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const session = await getServerSession(authOptions); const accessToken = session?.accessToken; return fetch(input, { ...init, headers: { ...init?.headers, ...(accessToken ? { Authorization: `Bearer ${accessToken}`, } : {}), }, }); }; type FetchParams = Parameters; export async function serverFetchJson(...args: FetchParams) { const response = await serverFetch(...args); if (response.ok) { return response.json() as T; } else { switch (response.status) { case 401: signOutUser(); default: throw Error("Something went wrong fetching data in server."); } } } export const signOutUser = () => { const headersList = headers(); const referer = headersList.get("referer"); redirect( `/logout${referer ? `?callbackUrl=${encodeURIComponent(referer)}` : ""}`, ); };