feat(web): Webhooks page + ALERTS nav group
New /webhooks admin page with table-based subscription management: - CREATE WEBHOOK (inline form row — no modal) with simple-event checkboxes (AttackerDetail / DeckyStatus / SystemStatus) that expand to bus-topic patterns server-side, and an advanced-mode textarea for raw NATS-style patterns. - Bulk-select + DELETE SELECTED with two-click arm pattern. - Per-row test-ping (zap), pencil edit, and delete actions. - Last-fired timestamp column. - Yellow banner surfacing insecure_url warnings (WH-03): http:// is allowed but flagged so operators see it on every page load. - Post-create secret modal — the secret is shown exactly once with a COPY button and a clear "won't see this again" notice. Sidebar nav regrouped: /live-logs and /webhooks now live under a new ALERTS NavGroup (Bell icon). The alertCount badge rides the Live Logs sub-item. Command palette gains a "Webhooks" GO TO entry with the `G W` chord. Side-fix: useFocusSearch.ts was failing the build under verbatimModuleSyntax (pre-existing, unrelated). Split the React import to satisfy tsc; no behavioural change.
This commit is contained in:
@@ -2,7 +2,7 @@ import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import {
|
||||
LayoutDashboard, Server, Network, Terminal, Archive, Crosshair,
|
||||
PlusCircle, Pause, RefreshCw, Download, HardDrive, Package, Settings,
|
||||
SearchX, Keyboard,
|
||||
SearchX, Keyboard, Webhook,
|
||||
} from 'lucide-react';
|
||||
import EmptyState from '../EmptyState/EmptyState';
|
||||
import './CommandPalette.css';
|
||||
@@ -22,7 +22,8 @@ const ITEMS: CmdItem[] = [
|
||||
{ section: 'GO TO', label: 'Dashboard', icon: LayoutDashboard, kbd: 'G D', kind: 'nav', payload: '/' },
|
||||
{ section: 'GO TO', label: 'Decoy Fleet', icon: Server, kbd: 'G F', kind: 'nav', payload: '/fleet' },
|
||||
{ section: 'GO TO', label: 'MazeNET', icon: Network, kbd: 'G M', kind: 'nav', payload: '/mazenet' },
|
||||
{ section: 'GO TO', label: 'Logs', icon: Terminal, kbd: 'G L', kind: 'nav', payload: '/live-logs' },
|
||||
{ section: 'GO TO', label: 'Live Logs', icon: Terminal, kbd: 'G L', kind: 'nav', payload: '/live-logs' },
|
||||
{ section: 'GO TO', label: 'Webhooks', icon: Webhook, kbd: 'G W', kind: 'nav', payload: '/webhooks' },
|
||||
{ section: 'GO TO', label: 'Bounty Vault', icon: Archive, kbd: 'G B', kind: 'nav', payload: '/bounty' },
|
||||
{ section: 'GO TO', label: 'Attackers', icon: Crosshair, kbd: 'G A', kind: 'nav', payload: '/attackers' },
|
||||
{ section: 'GO TO', label: 'SWARM Hosts', icon: HardDrive, kbd: 'G S', kind: 'nav', payload: '/swarm/hosts' },
|
||||
|
||||
Reference in New Issue
Block a user