PageSourceSearch

https://vagle.ai/assets/AdminAuditLogs-FXLTHCIm.js

js vagle.ai collected 2026-10-05 13:12:08 UTC 3,658 bytes, 1 lines download raw bytes

1import{b as v,j as a}from"./index-BxsKcnXk.js";import{b as t}from"./vendor-BPYN3F7l.js";import{A}from"./AdminLayout-BEewFLFf.js";import{R as S}from"./refresh-cw-DqFeiZkw.js";import"./icons-tq9NNN10.js";import"./sparkles-j75W13a8.js";import"./chart-column-w_dZEG7k.js";import"./users-EWlXbQ1n.js";const P="",I=()=>{const[i,p]=t.useState([]),[l,m]=t.useState(!0),[h,x]=t.useState(null),[n,u]=t.useState(""),[s,c]=t.useState(1),[r,g]=t.useState(1),[f,N]=t.useState(0);t.useEffect(()=>{o()},[n,s]);const y=()=>({headers:{Authorization:`Bearer ${localStorage.getItem("token")}`}}),o=async()=>{try{m(!0),x(null);const e=new URLSearchParams({page:s,limit:40});n&&e.append("action",n);const d=await v.get(`${P}/api/admin/audit-logs?${e}`,y());d.data.success&&(p(d.data.logs||[]),N(d.data.total||0),g(d.data.totalPages||1))}catch(e){console.error("Admin audit log load error:",e),x(e.response?.data?.error||"Failed to load activity history")}finally{m(!1)}},b=[...new Set(i.map(e=>e.action).filter(Boolean))].sort(),j=e=>e?e.replace(/_/g," "):"Unknown action";return a.jsxs(A,{children:[a.jsxs("div",{className:"admin-header",children:[a.jsxs("div",{className:"admin-header-main",children:[a.jsx("h1",{children:"Activity History"}),a.jsx("p",{children:"Audit every super-admin change across credits, access, impersonation, API keys, and platform controls."})]}),a.jsxs("button",{onClick:o,className:"admin-btn admin-btn-primary",children:[a.jsx(S,{size:16})," Refresh"]})]}),a.jsxs("div",{className:"admin-card",children:[a.jsxs("div",{className:"admin-filters",children:[a.jsxs("select",{value:n,onChange:e=>{u(e.target.value),c(1)},className:"admin-filter-select",children:[a.jsx("option",{value:"",children:"All actions"}),b.map(e=>a.jsx("option",{value:e,children:j(e)},e))]}),!l&&a.jsxs("div",{className:"admin-audit-total",children:["Showing ",a.jsx("strong",{children:i.length})," of ",a.jsx("strong",{children:f})," events"]})]}),l?a.jsx("div",{className:"admin-loading",children:"Loading activity history..."}):h?a.jsxs("div",{className:"admin-error",children:[a.jsx("p",{children:h}),a.jsx("button",{onClick:o,className:"admin-btn-retry",children:"Retry"})]}):a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"admin-table-container",children:a.jsxs("table",{className:"admin-table",children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{children:"Action"}),a.jsx("th",{children:"Admin"}),a.jsx("th",{children:"Target"}),a.jsx("th",{children:"Resource"}),a.jsx("th",{children:"Details"}),a.jsx("th",{children:"Time"})]})}),a.jsx("tbody",{children:i.length===0?a.jsx("tr",{children:a.jsx("td",{colSpan:"6",className:"admin-empty-cell",children:"No admin activity found"})}):i.map(e=>a.jsxs("tr",{children:[a.jsx("td",{children:a.jsx("span",{className:"admin-badge admin-badge-info",children:j(e.action)})}),a.jsx("td",{children:e.adminEmail||"-"}),a.jsx("td",{children:e.targetUserEmail||"-"}),a.jsx("td",{children:e.resourceType||"system"}),a.jsx("td",{children:a.jsx("code",{className:"admin-audit-metadata",children:e.metadata&&Object.keys(e.metadata).length?JSON.stringify(e.metadata):"No metadata"})}),a.jsx("td",{children:e.timestamp?new Date(e.timestamp).toLocaleString():"-"})]},e._id||`${e.action}-${e.timestamp}`))})]})}),r>1&&a.jsxs("div",{className:"admin-pagination",children:[a.jsx("button",{onClick:()=>c(e=>Math.max(1,e-1)),disabled:s===1,className:"admin-btn-pagination",children:"Previous"}),a.jsxs("span",{className:"admin-pagination-info",children:["Page ",s," of ",r]}),a.jsx("button",{onClick:()=>c(e=>Math.min(r,e+1)),disabled:s===r,className:"admin-btn-pagination",children:"Next"})]})]})]})]})};export{I as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.