UNPKG

@vigilbase/cli

Version:

Vigilbase CLI — security scanners, agent tools, and Vigilbase One from the terminal.

62 lines (61 loc) • 2.65 kB
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]'); };