import { chartViewResponseSchema, type ChartViewResponse } from "./chart-view-contract.ts"; import type { ChartViewLayer } from "./chart-view-engine.ts"; export async function fetchChartView(input: { layers?: readonly ChartViewLayer[]; signal?: AbortSignal; }): Promise<{ httpStatus: number; body: ChartViewResponse | null }> { const query = input.layers?.length ? `?layers=${input.layers.join(",")}` : ""; const response = await fetch(`/api/chart-view${query}`, { credentials: "same-origin", headers: { Accept: "application/json" }, cache: "no-store", signal: input.signal, }); let json: unknown = null; try { json = await response.json(); } catch (error) { const errorName = error instanceof Error ? error.name : "Error"; console.warn("chart_view_client_bad_payload", { errorName, httpStatus: response.status }); return { httpStatus: response.status, body: null }; } const parsed = chartViewResponseSchema.safeParse(json); return { httpStatus: response.status, body: parsed.success ? parsed.data : null }; }