"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import DashboardLayout from "@/components/DashboardLayout"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { ScrollText } from "lucide-react"; interface AuditEvent { id: string; action: string; targetType: string; targetId: string | null; result: string; ipAddress: string | null; metadata: Record; correlationId: string; createdAt: string; } export default function AuditLogPage() { const [events, setEvents] = useState([]); const [total, setTotal] = useState(0); const [actionFilter, setActionFilter] = useState(""); useEffect(() => { const params: Record = {}; if (actionFilter) params.action = actionFilter; api.get("/v1/audit-events", params).then((res) => { if (res.success && res.data) { setEvents(res.data); setTotal(res.meta?.total || 0); } }); }, [actionFilter]); return (

Audit Log

{total} event(s) recorded

setActionFilter(e.target.value)} className="w-64" />
{events.length === 0 ? (

No audit events recorded yet.

) : ( Time Action Target Result IP Correlation ID {events.map((event) => ( {new Date(event.createdAt).toLocaleString()} {event.action} {event.targetType} {event.targetId && ( ({event.targetId.substring(0, 8)}...) )} {event.result} {event.ipAddress || "\u2014"} {event.correlationId.substring(0, 12)}... ))}
)}
); }