Backend: GET /health/dwh (unauthenticated) calls tht db ping with a 5s timeout. Frontend: checkDwhHealth() races a 5s timer against the fetch; on failure a non-dismissable Dialog with Retry appears immediately. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { apiFetch } from "./client";
|
|
import type {
|
|
Principal, ResumeSessionResult, SessionScope, SessionSummary, SessionDocument, UiResponse,
|
|
} from "./types";
|
|
|
|
export const createSession = (i: { question: string; name?: string }) =>
|
|
apiFetch<{ id: string }>("/sessions", { method: "POST", body: JSON.stringify(i) });
|
|
|
|
/** Best-effort warm-up; callers must not await it before showing the composer. */
|
|
export const prewarmRuntime = () =>
|
|
apiFetch<void>("/runtime/prewarm", { method: "POST" });
|
|
|
|
export const getMe = () => apiFetch<Principal>("/me");
|
|
|
|
export const listSessions = (scope: SessionScope = "mine") =>
|
|
apiFetch<SessionSummary[]>(`/sessions?scope=${scope}`);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
export const getSession = (id: string) => apiFetch<any>(`/sessions/${id}`);
|
|
|
|
export const postResponse = (id: string, uiResponse: UiResponse) =>
|
|
apiFetch<void>(`/sessions/${id}/response`, {
|
|
method: "POST",
|
|
body: JSON.stringify({ ui_response: uiResponse }),
|
|
});
|
|
|
|
export const postSteer = (id: string, text: string) =>
|
|
apiFetch<void>(`/sessions/${id}/steer`, {
|
|
method: "POST",
|
|
body: JSON.stringify({ text }),
|
|
});
|
|
|
|
export const closeSession = (id: string) =>
|
|
apiFetch<void>(`/sessions/${id}/close`, { method: "POST" });
|
|
|
|
export const resumeSession = (id: string) =>
|
|
apiFetch<ResumeSessionResult>(`/sessions/${id}/resume`, { method: "POST" });
|
|
|
|
export const renameSession = (id: string, name: string) =>
|
|
apiFetch<void>(`/sessions/${id}/rename`, { method: "POST", body: JSON.stringify({ name }) });
|
|
|
|
export const setSessionGroup = (id: string, group: string) =>
|
|
apiFetch<void>(`/sessions/${id}/group`, { method: "POST", body: JSON.stringify({ group }) });
|
|
|
|
export const archiveSession = (id: string) =>
|
|
apiFetch<void>(`/sessions/${id}/archive`, { method: "POST" });
|
|
|
|
export const unarchiveSession = (id: string) =>
|
|
apiFetch<void>(`/sessions/${id}/unarchive`, { method: "POST" });
|
|
|
|
export const deleteSession = (id: string) =>
|
|
apiFetch<void>(`/sessions/${id}`, { method: "DELETE" });
|
|
|
|
export const getSessionDocuments = (id: string) =>
|
|
apiFetch<SessionDocument[]>(`/sessions/${id}/documents`);
|
|
|
|
export async function checkDwhHealth(): Promise<{ ok: boolean }> {
|
|
const timeout = new Promise<{ ok: false }>((r) => setTimeout(() => r({ ok: false }), 5000));
|
|
try {
|
|
return await Promise.race([
|
|
apiFetch<{ ok: boolean; detail: string }>("/health/dwh"),
|
|
timeout,
|
|
]);
|
|
} catch {
|
|
return { ok: false };
|
|
}
|
|
}
|