Spaces:
Runtime error
Runtime error
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 <T extends z.ZodTypeAny>( | |
path: string, | |
schema: T, | |
accessToken?: string, | |
organizationId?: string | |
): Promise<z.infer<T>> => { | |
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 <T extends z.ZodTypeAny>( | |
path: string, | |
schema: T, | |
body: unknown, | |
accessToken?: string, | |
organizationId?: string | |
): Promise<z.infer<T>> => { | |
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 <T extends z.ZodTypeAny>( | |
path: string, | |
schema: T, | |
body: unknown, | |
accessToken?: string, | |
organizationId?: string | |
): Promise<z.infer<T>> => { | |
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 <T extends z.ZodTypeAny>( | |
path: string, | |
schema: T, | |
body: unknown, | |
accessToken?: string, | |
organizationId?: string | |
): Promise<z.infer<T>> => { | |
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()); | |
}; | |