26 lines
1.6 KiB
TypeScript
26 lines
1.6 KiB
TypeScript
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);
|
|
}
|
|
}
|