@vigilbase/cli
Version:
Vigilbase CLI — security scanners, agent tools, and Vigilbase One from the terminal.
62 lines (61 loc) • 2.65 kB
JavaScript
import { z } from 'zod';
import { limitValue, validateArguments } from './legacy-validation.js';
import { asArray, asRecord, ok, outputJson, requireOneClient, withSpinner, } from './helpers.js';
export const handleWatchdog = async (ctx) => {
const subcommand = (ctx.rest[0] ?? 'list').toLowerCase();
let limit, targetId;
if (subcommand === 'scans' || subcommand === 'scan') {
validateArguments(ctx, 1, ['target-id', 'limit']);
limit = limitValue(ctx.values.limit, 20, 100);
targetId = z.string().uuid().optional().parse(ctx.values['target-id']);
}
else if (['list', 'targets', 'status'].includes(subcommand))
validateArguments(ctx, ctx.rest[0] === undefined ? 0 : 1);
else
throw new Error('Usage: vigilbase watchdog [list|scans]');
const one = await requireOneClient(ctx);
if (subcommand === 'list' || subcommand === 'targets' || subcommand === 'status') {
const payload = await withSpinner(ctx, 'Loading watchdog targets', () => one.getWatchdogTargets());
if (ctx.mode === 'json') {
outputJson(ctx, payload);
return ok();
}
const targets = asArray(payload.targets);
if (!targets.length) {
ctx.writer.stdout('No watchdog targets.');
return ok();
}
for (const raw of targets) {
const target = asRecord(raw);
if (!target)
continue;
ctx.writer.stdout(`${String(target.domain).padEnd(28)} ${String(target.uptimeStatus || '-')}${typeof target.uptime24h === 'number'
? ` 24h=${Math.round(target.uptime24h * 100) / 100}`
: ''}`);
}
return ok();
}
if (subcommand === 'scans' || subcommand === 'scan') {
const payload = await withSpinner(ctx, 'Loading watchdog scans', () => one.getWatchdogScans({
targetId,
limit,
}));
if (ctx.mode === 'json') {
outputJson(ctx, payload);
return ok();
}
const scans = asArray(payload.scans);
if (!scans.length) {
ctx.writer.stdout('No watchdog scans.');
return ok();
}
for (const raw of scans) {
const scan = asRecord(raw);
if (!scan)
continue;
ctx.writer.stdout(`${String(scan.id).slice(0, 8)} ${String(scan.status || '-').padEnd(10)} ${String(scan.scanType || '-')} ${String(scan.createdAt || '')}`);
}
return ok();
}
throw new Error('Usage: vigilbase watchdog [list|scans] [--target-id …] [--limit …] [--json]');
};