|
- 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<any, SessionWithTokens>(authOptions);
- const accessToken = session?.accessToken;
-
- return fetch(input, {
- ...init,
- headers: {
- ...init?.headers,
- ...(accessToken
- ? {
- Authorization: `Bearer ${accessToken}`,
- }
- : {}),
- },
- });
- };
-
- type FetchParams = Parameters<typeof fetch>;
-
- export async function serverFetchJson<T>(...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)}` : ""}`,
- );
- };
|