import type { z } from "zod"; import { env } from "../env/client.mjs"; function getHeaders(accessToken: string | undefined, organizationId: string | undefined) { return { "Content-Type": "application/json", Authorization: `Bearer ${accessToken || ""}`, ...(organizationId ? { "X-Organization-Id": organizationId } : {}), }; } export const get = async ( path: string, schema: T, accessToken?: string, organizationId?: string ): Promise> => { const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, { method: "GET", headers: getHeaders(accessToken, organizationId), }); if (!response.ok) { throw new Error("Request failed"); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return schema.parse(await response.json()); }; export const post = async ( path: string, schema: T, body: unknown, accessToken?: string, organizationId?: string ): Promise> => { const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, { body: JSON.stringify(body), method: "POST", headers: getHeaders(accessToken, organizationId), }); if (!response.ok) { throw new Error("Request failed"); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return schema.parse(await response.json()); }; export const put = async ( path: string, schema: T, body: unknown, accessToken?: string, organizationId?: string ): Promise> => { const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, { body: JSON.stringify(body), method: "PUT", headers: getHeaders(accessToken, organizationId), }); if (!response.ok) { throw new Error(response.statusText); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return schema.parse(await response.json()); }; export const delete_ = async ( path: string, schema: T, body: unknown, accessToken?: string, organizationId?: string ): Promise> => { const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, { body: JSON.stringify(body), method: "DELETE", headers: getHeaders(accessToken, organizationId), }); if (!response.ok) { throw new Error(response.statusText); } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return schema.parse(await response.json()); };