41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
export type DevServerHealthStatus = {
|
|
enabled: true;
|
|
restartRequired: boolean;
|
|
reason: "backend_changes" | "pending_migrations" | "backend_changes_and_pending_migrations" | null;
|
|
lastChangedAt: string | null;
|
|
changedPathCount: number;
|
|
changedPathsSample: string[];
|
|
pendingMigrations: string[];
|
|
autoRestartEnabled: boolean;
|
|
activeRunCount: number;
|
|
waitingForIdle: boolean;
|
|
lastRestartAt: string | null;
|
|
};
|
|
|
|
export type HealthStatus = {
|
|
status: "ok";
|
|
version?: string;
|
|
deploymentMode?: "local_trusted" | "authenticated";
|
|
deploymentExposure?: "private" | "public";
|
|
authReady?: boolean;
|
|
bootstrapStatus?: "ready" | "bootstrap_pending";
|
|
bootstrapInviteActive?: boolean;
|
|
features?: {
|
|
companyDeletionEnabled?: boolean;
|
|
};
|
|
devServer?: DevServerHealthStatus;
|
|
};
|
|
|
|
export const healthApi = {
|
|
get: async (): Promise<HealthStatus> => {
|
|
const res = await fetch("/api/health", {
|
|
credentials: "include",
|
|
headers: { Accept: "application/json" },
|
|
});
|
|
if (!res.ok) {
|
|
const payload = await res.json().catch(() => null) as { error?: string } | null;
|
|
throw new Error(payload?.error ?? `Failed to load health (${res.status})`);
|
|
}
|
|
return res.json();
|
|
},
|
|
};
|