Standardise AbortController cancellation in setup and server health hooks

Add abortable API signals for setup status and server health/log fetches, document hook cancellation patterns, and cover stale refresh cancellation with tests.
This commit is contained in:
2026-04-21 17:38:35 +02:00
parent cf5a000bf5
commit e683108965
7 changed files with 203 additions and 12 deletions

View File

@@ -550,17 +550,18 @@ export async function deleteJailLocalOverride(name: string): Promise<void> {
export async function fetchFail2BanLog(
lines?: number,
filter?: string,
signal?: AbortSignal,
): Promise<Fail2BanLogResponse> {
const params = new URLSearchParams();
if (lines !== undefined) params.set("lines", String(lines));
if (filter !== undefined && filter !== "") params.set("filter", filter);
const query = params.toString() ? `?${params.toString()}` : "";
return get<Fail2BanLogResponse>(`${ENDPOINTS.configFail2BanLog}${query}`);
return get<Fail2BanLogResponse>(`${ENDPOINTS.configFail2BanLog}${query}`, signal);
}
/** Fetch fail2ban service health status with current log configuration. */
export async function fetchServiceStatus(): Promise<ServiceStatusResponse> {
return get<ServiceStatusResponse>(ENDPOINTS.configServiceStatus);
export async function fetchServiceStatus(signal?: AbortSignal): Promise<ServiceStatusResponse> {
return get<ServiceStatusResponse>(ENDPOINTS.configServiceStatus, signal);
}
// ---------------------------------------------------------------------------

View File

@@ -18,8 +18,8 @@ import type {
*
* @returns Setup status response with a `completed` boolean.
*/
export async function getSetupStatus(): Promise<SetupStatusResponse> {
return api.get<SetupStatusResponse>(ENDPOINTS.setup);
export async function getSetupStatus(signal?: AbortSignal): Promise<SetupStatusResponse> {
return api.get<SetupStatusResponse>(ENDPOINTS.setup, signal);
}
/**