Files
TJWaterFrontend_Refine/src/lib/requestHeaders.ts
T

47 lines
1.1 KiB
TypeScript

import { getAccessToken } from "@/lib/authToken";
import { useProjectStore } from "@/store/projectStore";
export type AuthHeaderMode = "include" | "omit";
export type ProjectHeaderMode = "auto" | "include" | "omit";
export interface AuthContextHeaderOptions {
authHeaderMode?: AuthHeaderMode;
projectHeaderMode?: ProjectHeaderMode;
}
const shouldIncludeProjectHeader = (
url: string,
projectHeaderMode: ProjectHeaderMode,
) => {
if (projectHeaderMode === "include") {
return true;
}
if (projectHeaderMode === "omit") {
return false;
}
return !url.includes("/api/v1/meta/projects");
};
export const applyAuthContextHeaders = async (
url: string,
headers: Headers,
options: AuthContextHeaderOptions = {},
) => {
const accessToken = await getAccessToken();
if (accessToken && options.authHeaderMode !== "omit") {
headers.set("Authorization", `Bearer ${accessToken}`);
}
const projectId = useProjectStore.getState().currentProjectId;
if (
projectId &&
shouldIncludeProjectHeader(url, options.projectHeaderMode ?? "auto")
) {
headers.set("X-Project-Id", projectId);
}
return headers;
};