first commit

This commit is contained in:
Your NamebaishaliHolocron
2026-06-15 12:57:03 +05:30
commit b9ac5ae0b2
398 changed files with 49583 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
"use server";
import { getValidAccessToken } from "ikoncomponents";
import { redirect } from "next/navigation";
export interface ExtraOptionsProps {
isAccessTokenRequird?: boolean;
revalidatePaths?: string[];
isReturnErrorResult?: boolean;
}
export const baseApiRequest = async (
url: string,
init: RequestInit,
extraOptions?: ExtraOptionsProps,
) => {
const headers = new Headers(init.headers);
if (!headers.get("Content-Type")) {
headers.set("Content-Type", "application/json");
}
if (extraOptions?.isAccessTokenRequird !== false) {
const accessToken = await getValidAccessToken(
process.env.NEXT_PUBLIC_IKON_API_URL || "",
);
if (!accessToken?.trim()) {
redirect("/login.html");
}
headers.set("Authorization", `Bearer ${accessToken.trim()}`);
}
const response = await fetch(url, {
...init,
headers,
});
const contentType = response.headers.get("Content-Type");
if (!response.ok) {
let body = "";
try {
body = contentType?.includes("application/json")
? await response.json()
: await response.text();
} catch {
/* ignore */
}
const message =
typeof body === "string"
? body
: (() => {
try {
return JSON.stringify(body);
} catch {
return String(body);
}
})();
console.error(
`API Request Failed - ${init.method} ${url}: HTTP ${response.status} ${message}`,
);
if (extraOptions?.isReturnErrorResult) {
return body;
}
throw new Error(`HTTP ${response.status}: ${message}`);
}
return contentType?.includes("application/json")
? await response.json()
: await response.text();
};