47 lines
1.1 KiB
TypeScript
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;
|
|
};
|