52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { API, apiFetch, getAuthToken } from './client';
|
||
import type { AppConfig } from '../components/Settings/types';
|
||
|
||
export interface RestartResponse {
|
||
success: boolean;
|
||
message?: string;
|
||
}
|
||
|
||
export async function getAppConfig(): Promise<[AppConfig | null, string | null]> {
|
||
const [data, err] = await apiFetch<AppConfig>(API.config);
|
||
return [data, err?.message ?? null];
|
||
}
|
||
|
||
export async function updateAppConfig(config: AppConfig): Promise<[true, null] | [false, string]> {
|
||
const [, err] = await apiFetch<{ success: boolean }>(API.config, {
|
||
method: 'PUT',
|
||
body: { config },
|
||
});
|
||
return err ? [false, err.message] : [true, null];
|
||
}
|
||
|
||
export async function restartGateway(): Promise<{ status: number; data: RestartResponse }> {
|
||
const token = getAuthToken();
|
||
const resp = await fetch(API.restart, {
|
||
method: 'POST',
|
||
headers: token ? { Authorization: `Bearer ${token}` } : undefined,
|
||
});
|
||
const data = await resp.json().catch(() => ({ success: false }));
|
||
return { status: resp.status, data };
|
||
}
|
||
|
||
export async function checkHealth(): Promise<boolean> {
|
||
try {
|
||
const resp = await fetch(API.health);
|
||
return resp.ok;
|
||
} catch {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/** 从 /health 端点获取后端版本号(源自 Cargo.toml 的 CARGO_PKG_VERSION)。 */
|
||
export async function getVersion(): Promise<string | null> {
|
||
try {
|
||
const resp = await fetch(API.health);
|
||
if (!resp.ok) return null;
|
||
const data = (await resp.json()) as { status?: string; version?: string };
|
||
return data.version ?? null;
|
||
} catch {
|
||
return null;
|
||
}
|
||
}
|