BUG-715/716/717: typed engine failures with logs and split copy, natal-only open, on-demand tabs, 10s timeout, in-memory cache, no speed-promise eyebrow.
26 lines
1.0 KiB
TypeScript
26 lines
1.0 KiB
TypeScript
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 };
|
|
}
|