'use client' import { useEffect, useState } from 'react' const API_BASE = '/api/v1' interface AuditLog { id: string action: string resource: string resourceId: string | null createdAt: string adminUser: { email: string; firstName: string; lastName: string } | null } const ACTION_COLORS: Record = { CREATE: 'text-emerald-400 bg-emerald-950/40', UPDATE: 'text-sky-400 bg-sky-950/40', DELETE: 'text-red-400 bg-red-950/40', SUSPEND: 'text-amber-400 bg-amber-950/40', ACTIVATE: 'text-emerald-400 bg-emerald-950/40', LOGIN: 'text-zinc-400 bg-zinc-800', } export default function AdminAuditLogsPage() { const [logs, setLogs] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [filter, setFilter] = useState('') useEffect(() => { const token = localStorage.getItem('admin_token') ?? '' fetch(`${API_BASE}/admin/audit-logs`, { headers: { Authorization: `Bearer ${token}` }, cache: 'no-store', }) .then((r) => r.json()) .then((json) => setLogs(json.data ?? [])) .catch((err) => setError(err.message)) .finally(() => setLoading(false)) }, []) const filtered = filter ? logs.filter((l) => l.action.toLowerCase().includes(filter.toLowerCase()) || l.resource.toLowerCase().includes(filter.toLowerCase())) : logs return (

Platform

Audit Logs

setFilter(e.target.value)} />
{error &&
{error}
}
{loading ? ( ) : filtered.length === 0 ? ( ) : filtered.map((log) => ( ))}
Action Entity Entity ID Admin Time
Loading…
No logs found
{log.action} {log.resource} {log.resourceId ? `${log.resourceId.slice(0, 12)}…` : '—'} {log.adminUser ? `${log.adminUser.firstName} ${log.adminUser.lastName}` : '—'} {new Date(log.createdAt).toLocaleString()}
) }