import type { CoolifyServiceWidget } from "@/lib/config/schema"; import type { ServiceStat } from "@/lib/types/service-result"; import { serviceBaseUrl } from "./base-url"; async function fetchCoolify(base: string, path: string, apiToken: string): Promise { const response = await fetch(`${base}${path}`, { headers: { Authorization: `Bearer ${apiToken}` }, signal: AbortSignal.timeout(5_000), }); if (!response.ok) { throw new Error(`Coolify API returned ${response.status}`); } return (await response.json()) as T; } export async function collectCoolify(widget: CoolifyServiceWidget): Promise<{ stats: ServiceStat[] }> { const base = serviceBaseUrl(widget); const [projects, resources] = await Promise.all([ fetchCoolify(base, "/api/v1/projects", widget.apiToken), fetchCoolify(base, "/api/v1/resources", widget.apiToken), ]); return { stats: [ { label: "Projects", value: String(projects.length) }, { label: "Resources", value: String(resources.length) }, ], }; }