/// import { z } from "zod"; const getDocsBody200Schema = z.object({}).strict(); const getHealthcheckBody200Schema = z .object({ http: z.enum(["healthy"]), database: z.enum(["healthy", "unhealthy"]), cache: z.enum(["healthy", "unhealthy"]), systemMemory: z.enum(["healthy", "unhealthy"]), processMemory: z.enum(["healthy", "unhealthy"]), }) .strict(); type HttpResult = | { success: true; headers: Record; data: T; } | { success: false; headers: Record; data: unknown; }; export function createClient( baseUrl: string, globalFetchOverrides: RequestInit = {}, jsonStringifier = JSON.stringify ) { async function getDocs( fetchOverrides: RequestInit = {} ): Promise>> { const url = new URL("/docs", baseUrl); const { headers, ...fetchOverridesWithoutHeaders } = fetchOverrides; const { headers: globalHeaders, ...globalFetchOverridesWithoutHeaders } = globalFetchOverrides; const response = await fetch(url.toString(), { method: "get", headers: { Accept: "application/json", "Content-Type": "application/json", ...globalHeaders, ...headers, }, ...globalFetchOverridesWithoutHeaders, ...fetchOverridesWithoutHeaders, }); if (!response.ok) { return { success: false, headers: Object.fromEntries(response.headers.entries()), data: await response.json(), }; } const data = await response.json(); return { success: true, headers: Object.fromEntries(response.headers.entries()), data: getDocsBody200Schema.parse(data), }; } async function getHealthcheck( fetchOverrides: RequestInit = {} ): Promise>> { const url = new URL("/healthcheck", baseUrl); const { headers, ...fetchOverridesWithoutHeaders } = fetchOverrides; const { headers: globalHeaders, ...globalFetchOverridesWithoutHeaders } = globalFetchOverrides; const response = await fetch(url.toString(), { method: "get", headers: { Accept: "application/json", "Content-Type": "application/json", ...globalHeaders, ...headers, }, ...globalFetchOverridesWithoutHeaders, ...fetchOverridesWithoutHeaders, }); if (!response.ok) { return { success: false, headers: Object.fromEntries(response.headers.entries()), data: await response.json(), }; } const data = await response.json(); return { success: true, headers: Object.fromEntries(response.headers.entries()), data: getHealthcheckBody200Schema.parse(data), }; } return { getDocs, getHealthcheck, }; } export function createTraceHeader({ traceId, parentSpanId, version, }: { traceId: string; parentSpanId: string; version?: string; }) { return { traceparent: [version ?? "00", traceId, parentSpanId, "01"].join("-"), }; }