import { error, json } from '@sveltejs/kit'; import { deleteHost, getHost, hostDeletionStatus, HostDeletionError, listHostOperations, updateHost } from '$lib/server/hosts/index.js'; import { hostApiError, objectBody, requireManagementOrigin } from '$lib/server/hosts/http.js'; import { presentHostPreparation } from '$lib/server/hosts/preparation.js'; import { config } from '$lib/server/config.js'; type Event = { request: Request; params: { id: string } }; export function GET({ request, params }: Event) { requireManagementOrigin(request); const host = getHost(params.id); if (!host) error(404, 'Host not found.'); // Payloads and results can contain RCON keys or staged credentials. History // exposes metadata only; agent APIs remain the only command delivery path. return json({ host: presentHostPreparation(host), defaultRuntimeImage: config.komodo.defaultImage, deletion: hostDeletionStatus(host.id), operations: listHostOperations(host.id).map(({ payload: _payload, result: _result, ...operation }) => operation) }); } export async function PATCH({ request, params }: Event) { requireManagementOrigin(request); try { return json({ host: updateHost(params.id, await objectBody(request)) }); } catch (cause) { return hostApiError(cause); } } export function DELETE({ request, params }: Event) { requireManagementOrigin(request); try { const result = deleteHost(params.id); return json(result, { status: result.deleted ? 200 : 202 }); } catch (cause) { if (cause instanceof HostDeletionError) return json({ error: cause.message, blockers: cause.blockers }, { status: cause.status }); return hostApiError(cause); } }