Files
skybridge/kms/web/dist/665.js
2025-08-31 01:33:35 -04:00

1 line
49 KiB
JavaScript

"use strict";(self.webpackChunkkms=self.webpackChunkkms||[]).push([[665],{665:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(4914),l=a.n(n),r=a(7435),i=a(5101),s=a(5742),o=a(4133),c=a(3065),m=a(5302),p=a(1283);const d=()=>{const e=()=>{const e=window.location.pathname;return e.includes("/applications")?"applications":e.includes("/tokens")?"tokens":e.includes("/token-tester")?"token-tester":e.includes("/audit")?"audit":"dashboard"},[t,a]=l().useState(e()),[n,d]=l().useState(!1),[u,E]=l().useState("");return l().useEffect(()=>{const t=()=>{a(e())};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[]),l().createElement(r.Box,{w:"100%",pos:"relative"},l().createElement(r.Stack,{gap:"lg"},l().createElement("div",null,l().createElement(r.Group,{justify:"space-between",align:"flex-start"},l().createElement("div",null,l().createElement(r.Group,{align:"center",gap:"sm",mb:"xs"},l().createElement(r.Title,{order:1,size:"h2"},"Key Management System"),l().createElement(r.ActionIcon,{variant:"subtle",size:"lg",onClick:()=>{d(e=>!e)},"aria-label":n?"Remove from favorites":"Add to favorites"},n?l().createElement(i.IconStarFilled,{size:20,color:"gold"}):l().createElement(i.IconStar,{size:20})))),l().createElement(r.Group,{align:"flex-start",gap:"lg"},l().createElement("div",null,l().createElement(r.Select,{placeholder:"Choose a color",data:[{value:"red",label:"Red"},{value:"blue",label:"Blue"},{value:"green",label:"Green"},{value:"purple",label:"Purple"},{value:"orange",label:"Orange"},{value:"pink",label:"Pink"},{value:"teal",label:"Teal"}],value:u,onChange:e=>E(e||""),size:"sm",w:150}))))),l().createElement(r.Tabs,{value:t,onChange:e=>{if(e){const t="/app/kms",n="dashboard"===e?t:`${t}/${e}`;window.history.pushState(null,"",n),a(e),window.dispatchEvent(new PopStateEvent("popstate",{state:null}))}}},l().createElement(r.Tabs.List,null,l().createElement(r.Tabs.Tab,{value:"dashboard",leftSection:l().createElement(i.IconDashboard,{size:16})},"Dashboard"),l().createElement(r.Tabs.Tab,{value:"applications",leftSection:l().createElement(i.IconApps,{size:16})},"Applications"),l().createElement(r.Tabs.Tab,{value:"tokens",leftSection:l().createElement(i.IconKey,{size:16})},"Tokens"),l().createElement(r.Tabs.Tab,{value:"token-tester",leftSection:l().createElement(i.IconTestPipe,{size:16})},"Token Tester"),l().createElement(r.Tabs.Tab,{value:"audit",leftSection:l().createElement(i.IconFileText,{size:16})},"Audit Log")),l().createElement(r.Box,{pt:"md"},(()=>{switch(t){case"applications":return l().createElement(s.A,null);case"tokens":return l().createElement(o.A,null);case"token-tester":return l().createElement(c.A,null);case"audit":return l().createElement(m.A,null);default:return l().createElement(p.A,null)}})()))))}},1283:(e,t,a)=>{a.d(t,{A:()=>o});var n=a(4914),l=a.n(n),r=a(7435),i=a(5101),s=a(7246);const o=()=>{const[e,t]=(0,n.useState)(null),[a,o]=(0,n.useState)(!0);(0,n.useEffect)(()=>{c()},[]);const c=async()=>{try{o(!0);const e=await s.K.getApplications(100,0);let a=0;for(const t of e.data)try{a+=(await s.K.getTokensForApplication(t.app_id,100,0)).count}catch(e){console.debug(`No tokens found for app ${t.app_id}`)}const n={totalApplications:e.count,totalTokens:a,recentActivity:0,systemHealth:"healthy"};t(n)}catch(e){console.error("Failed to load dashboard data:",e),t({totalApplications:0,totalTokens:0,recentActivity:0,systemHealth:"error"})}finally{o(!1)}};if(a)return l().createElement(r.Stack,{align:"center",justify:"center",h:400},l().createElement(r.Loader,{size:"lg"}),l().createElement(r.Text,null,"Loading dashboard..."));const m=[{title:"Applications",value:e?.totalApplications||0,icon:i.IconApps,color:"blue",description:"Active applications"},{title:"API Tokens",value:e?.totalTokens||0,icon:i.IconKey,color:"green",description:"Generated tokens"},{title:"Recent Activity",value:e?.recentActivity||0,icon:i.IconActivity,color:"orange",description:"Events today"},{title:"System Health",value:"healthy"===e?.systemHealth?"100%":"85%",icon:"healthy"===e?.systemHealth?i.IconTrendingUp:i.IconAlertTriangle,color:"healthy"===e?.systemHealth?"green":"yellow",description:"System status"}];return l().createElement(r.Stack,{gap:"lg"},l().createElement(r.SimpleGrid,{cols:{base:1,sm:2,lg:4},spacing:"lg"},m.map(e=>l().createElement(r.Card,{key:e.title,shadow:"sm",radius:"md",withBorder:!0,p:"lg"},l().createElement(r.Group,{justify:"space-between",mb:"xs"},l().createElement(r.Text,{size:"sm",c:"dimmed",fw:500},e.title),l().createElement(r.ThemeIcon,{color:e.color,variant:"light",size:"lg"},l().createElement(e.icon,{size:20}))),l().createElement(r.Text,{size:"xl",fw:700,mb:"xs"},e.value),l().createElement(r.Text,{size:"xs",c:"dimmed"},e.description)))),l().createElement(r.Grid,null,l().createElement(r.Grid.Col,{span:{base:12,md:8}},l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},l().createElement(r.Title,{order:3,mb:"md"},"Activity Timeline"),l().createElement(r.Stack,{justify:"center",align:"center",h:200},l().createElement(r.Text,{c:"dimmed",ta:"center"},"Activity timeline will be displayed here",l().createElement("br",null),l().createElement(r.Text,{size:"xs",c:"dimmed"},"Integration with audit events coming soon"))))),l().createElement(r.Grid.Col,{span:{base:12,md:4}},l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},l().createElement(r.Title,{order:3,mb:"md"},"System Status"),l().createElement(r.Stack,{gap:"md",align:"center"},l().createElement(r.RingProgress,{size:120,thickness:12,sections:[{value:"healthy"===e?.systemHealth?100:85,color:"healthy"===e?.systemHealth?"green":"yellow"}],label:l().createElement(r.Text,{ta:"center",fw:700,size:"lg"},"healthy"===e?.systemHealth?"100%":"85%")}),l().createElement(r.Badge,{color:"healthy"===e?.systemHealth?"green":"yellow",variant:"light",size:"lg"},"healthy"===e?.systemHealth?"Healthy":"Warning"),l().createElement(r.Text,{size:"sm",c:"dimmed",ta:"center"},"All systems operational"))))))}},3065:(e,t,a)=>{a.d(t,{A:()=>E});var n=a(4914),l=a.n(n),r=a(7435),i=a(6658),s=a(5101),o=a(972),c=a(7373),m=a(7246),p=a(4353),d=a.n(p);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u.apply(null,arguments)}const E=()=>{const[e,t]=(0,n.useState)([]),[a,p]=(0,n.useState)(!1),[E,b]=(0,n.useState)(null),g=(0,o.m)({initialValues:{app_id:"",user_id:"",token:"",permissions:[]},validate:{app_id:e=>e.length<1?"Application is required":null,token:e=>e.length<1?"Token is required":null}});(0,n.useEffect)(()=>{h()},[]);const h=async()=>{try{const e=await m.K.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}};return l().createElement(r.Stack,{gap:"lg"},l().createElement(r.Grid,null,l().createElement(r.Grid.Col,{span:{base:12,md:6}},l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg"},l().createElement(r.Title,{order:3,mb:"md"},"Test Configuration"),l().createElement("form",{onSubmit:g.onSubmit(async e=>{try{p(!0),b(null);const t={...e,user_id:e.user_id||void 0,permissions:e.permissions&&e.permissions.length>0?e.permissions:void 0},a=await m.K.verifyToken(t);b(a),a.valid?c.notifications.show({title:"Token Verified",message:"Token is "+(a.permitted?"valid and permitted":"valid but not permitted"),color:a.permitted?"green":"orange"}):c.notifications.show({title:"Token Invalid",message:a.error||"Token verification failed",color:"red"})}catch(e){console.error("Failed to verify token:",e),c.notifications.show({title:"Error",message:"Failed to verify token",color:"red"})}finally{p(!1)}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,u({label:"Application",placeholder:"Select an application to test against",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},g.getInputProps("app_id"))),l().createElement(r.TextInput,u({label:"User ID (Optional)",placeholder:"user@example.com",description:"Leave empty for token-only verification"},g.getInputProps("user_id"))),l().createElement(r.Textarea,u({label:"Token",placeholder:"Paste your token here...",required:!0,minRows:3},g.getInputProps("token"))),l().createElement("div",null,l().createElement(r.Text,{size:"sm",fw:500,mb:"xs"},"Required Permissions (Optional)"),l().createElement(r.Text,{size:"xs",c:"dimmed",mb:"md"},"Leave empty to skip permission checks"),l().createElement(i.A,{permissions:g.values.permissions,onChange:e=>g.setFieldValue("permissions",e)})),l().createElement(r.Group,{justify:"flex-end"},l().createElement(r.Button,{type:"submit",loading:a,leftSection:a?l().createElement(r.Loader,{size:16}):l().createElement(s.IconTestPipe,{size:16}),disabled:0===e.length},a?"Testing...":"Test Token")))))),l().createElement(r.Grid.Col,{span:{base:12,md:6}},l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:"100%"},l().createElement(r.Title,{order:3,mb:"md"},"Test Results"),!E&&!a&&l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(s.IconTestPipe,{size:48,color:"gray"}),l().createElement(r.Text,{c:"dimmed",ta:"center"},'Configure your test parameters and click "Test Token" to see results')),a&&l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(r.Loader,{size:"lg"}),l().createElement(r.Text,null,"Verifying token...")),E&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement((e=>e.valid?e.valid&&e.permitted?s.IconCheck:s.IconAlertCircle:s.IconX)(E),{size:16}),title:E.valid?E.permitted?"Token Valid & Permitted":"Token Valid but Not Permitted":"Token Invalid",color:(e=>e.valid?e.valid&&e.permitted?"green":"orange":"red")(E)},E.error||(E.valid&&E.permitted?"Token is valid and has the required permissions":E.valid?"Token is valid but lacks some required permissions":"Token verification failed")),l().createElement(r.Divider,null),l().createElement(r.Stack,{gap:"xs"},l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Valid:"),l().createElement(r.Badge,{color:E.valid?"green":"red",variant:"light"},E.valid?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Permitted:"),l().createElement(r.Badge,{color:E.permitted?"green":"red",variant:"light"},E.permitted?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Type:"),l().createElement(r.Badge,{variant:"light"},E.token_type)),E.user_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"User ID:"),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},E.user_id)),E.expires_at&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Expires At:"),l().createElement(r.Text,{size:"sm"},d()(E.expires_at).format("MMM DD, YYYY HH:mm"))),E.max_valid_at&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Max Valid Until:"),l().createElement(r.Text,{size:"sm"},d()(E.max_valid_at).format("MMM DD, YYYY HH:mm")))),E.permissions&&E.permissions.length>0&&l().createElement(l().Fragment,null,l().createElement(r.Divider,null),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Token Permissions:"),l().createElement(r.Group,{gap:"xs"},E.permissions.map(e=>l().createElement(r.Badge,{key:e,variant:"light",size:"sm",color:"blue"},e))))),E.permission_results&&Object.keys(E.permission_results).length>0&&l().createElement(l().Fragment,null,l().createElement(r.Divider,null),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Permission Check Results:"),l().createElement(r.Stack,{gap:"xs"},Object.entries(E.permission_results).map(([e,t])=>l().createElement(r.Group,{key:e,justify:"space-between"},l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},e),l().createElement(r.Badge,{color:t?"green":"red",variant:"light",size:"sm"},t?"Granted":"Denied")))))),E.claims&&Object.keys(E.claims).length>0&&l().createElement(l().Fragment,null,l().createElement(r.Divider,null),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Token Claims:"),l().createElement(r.Code,{block:!0},JSON.stringify(E.claims,null,2)))))))),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(s.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can test tokens."))}},4133:(e,t,a)=>{a.d(t,{A:()=>E});var n=a(4914),l=a.n(n),r=a(7435),i=a(6658),s=a(5101),o=a(972),c=a(7373),m=a(7246),p=a(4353),d=a.n(p);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u.apply(null,arguments)}const E=()=>{const[e,t]=(0,n.useState)([]),[a,p]=(0,n.useState)([]),[E,b]=(0,n.useState)(!1),[g,h]=(0,n.useState)(!1),[T,f]=(0,n.useState)(!1),[_,y]=(0,n.useState)(null),k=(0,o.m)({initialValues:{app_id:"",owner:{type:"individual",name:"Admin User",owner:"admin@example.com"},permissions:[]},validate:{app_id:e=>e.length<1?"Application is required":null,permissions:e=>e.length<1?"At least one permission is required":null}});(0,n.useEffect)(()=>{w(),v()},[]);const w=async()=>{try{const e=await m.K.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}},v=async()=>{try{b(!0);const e=await m.K.getApplications(100,0),t=[];for(const a of e.data)try{const e=(await m.K.getTokensForApplication(a.app_id,100,0)).data.map(e=>({...e,app:a}));t.push(...e)}catch(e){}p(t)}catch(e){console.error("Failed to load tokens:",e),c.notifications.show({title:"Error",message:"Failed to load tokens",color:"red"})}finally{b(!1)}},x=e=>{navigator.clipboard.writeText(e),c.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},S=a.map(e=>l().createElement(r.Table.Tr,{key:e.id},l().createElement(r.Table.Td,null,l().createElement(r.Group,{gap:"xs"},l().createElement(s.IconKey,{size:16,color:"blue"}),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},e.id.substring(0,8),"..."))),l().createElement(r.Table.Td,null,l().createElement(r.Badge,{variant:"light",color:"blue"},e.app?.app_id||"Unknown")),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),l().createElement(r.Table.Td,null,l().createElement(r.Badge,{variant:"light",color:"green"},e.type)),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm"},d()(e.created_at).format("MMM DD, YYYY"))),l().createElement(r.Table.Td,null,l().createElement(r.Group,{gap:"xs"},l().createElement(r.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>x(e.id),title:"Copy Token ID"},l().createElement(s.IconCopy,{size:16})),l().createElement(r.ActionIcon,{variant:"subtle",color:"red",onClick:()=>(async e=>{if(window.confirm("Are you sure you want to delete this token? This action cannot be undone."))try{await m.K.deleteToken(e),c.notifications.show({title:"Success",message:"Token deleted successfully",color:"green"}),v()}catch(e){console.error("Failed to delete token:",e),c.notifications.show({title:"Error",message:"Failed to delete token",color:"red"})}})(e.id),title:"Delete Token"},l().createElement(s.IconTrash,{size:16}))))));return l().createElement(r.Stack,{gap:"lg"},l().createElement(r.Group,{justify:"space-between"},l().createElement("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"API Tokens")),l().createElement(r.Button,{leftSection:l().createElement(s.IconPlus,{size:16}),onClick:()=>{k.reset(),h(!0)},disabled:0===e.length},"Create Token")),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(s.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can create tokens."),E?l().createElement(r.Stack,{align:"center",justify:"center",h:200},l().createElement(r.Loader,{size:"lg"}),l().createElement(r.Text,null,"Loading tokens...")):0===a.length?l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},l().createElement(r.Stack,{align:"center",gap:"md"},l().createElement(s.IconKey,{size:48,color:"gray"}),l().createElement("div",{style:{textAlign:"center"}},l().createElement(r.Text,{fw:500,mb:"xs"},"No tokens found"),l().createElement(r.Text,{size:"sm",c:"dimmed"},"Create your first API token to start using the key management system")),e.length>0&&l().createElement(r.Button,{leftSection:l().createElement(s.IconPlus,{size:16}),onClick:()=>{k.reset(),h(!0)}},"Create Token"))):l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0},l().createElement(r.Table,null,l().createElement(r.Table.Thead,null,l().createElement(r.Table.Tr,null,l().createElement(r.Table.Th,null,"Token ID"),l().createElement(r.Table.Th,null,"Application"),l().createElement(r.Table.Th,null,"Owner"),l().createElement(r.Table.Th,null,"Type"),l().createElement(r.Table.Th,null,"Created"),l().createElement(r.Table.Th,null,"Actions"))),l().createElement(r.Table.Tbody,null,S))),l().createElement(r.Modal,{opened:g,onClose:()=>{h(!1),k.reset()},title:"Create New Token",size:"lg"},l().createElement("form",{onSubmit:k.onSubmit(async e=>{try{const{app_id:t,...a}=e,n=await m.K.createToken(t,a);y(n),h(!1),f(!0),k.reset(),v(),c.notifications.show({title:"Success",message:"Token created successfully",color:"green"})}catch(e){console.error("Failed to create token:",e),c.notifications.show({title:"Error",message:"Failed to create token",color:"red"})}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,u({label:"Application",placeholder:"Select an application",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},k.getInputProps("app_id"))),l().createElement(i.A,{permissions:k.values.permissions,onChange:e=>k.setFieldValue("permissions",e)}),l().createElement(r.TextInput,u({label:"Owner Name",placeholder:"Token owner name"},k.getInputProps("owner.name"))),l().createElement(r.TextInput,u({label:"Owner Email",placeholder:"owner@example.com"},k.getInputProps("owner.owner"))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{h(!1),k.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},"Create Token"))))),l().createElement(r.Modal,{opened:T,onClose:()=>{f(!1),y(null)},title:"Token Created Successfully",size:"lg"},_&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement(s.IconCheck,{size:16}),title:"Important",color:"green"},"This is the only time you will see the full token. Make sure to copy and store it securely."),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Token:"),l().createElement(r.Group,{gap:"xs"},l().createElement(r.Code,{block:!0,style:{fontSize:"12px",wordBreak:"break-all",flex:1}},_.token),l().createElement(r.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>x(_.token),title:"Copy Token"},l().createElement(s.IconCopy,{size:16})))),l().createElement(r.Divider,null),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token ID:"),l().createElement(r.Group,{gap:"xs"},l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},_.id),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>x(_.id)},l().createElement(s.IconCopy,{size:12})))),l().createElement(r.Group,{justify:"space-between",align:"flex-start"},l().createElement(r.Text,{fw:500},"Permissions:"),l().createElement(r.Stack,{gap:"xs",align:"flex-end"},_.permissions.map(e=>l().createElement(r.Badge,{key:e,variant:"light",size:"sm"},e)))),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Created:"),l().createElement(r.Text,{size:"sm"},d()(_.created_at).format("MMM DD, YYYY HH:mm"))),l().createElement(r.Group,{justify:"flex-end",mt:"lg"},l().createElement(r.Button,{onClick:()=>{f(!1),y(null)}},"Close")))))}},5302:(e,t,a)=>{a.d(t,{A:()=>p});var n=a(4914),l=a.n(n),r=a(7435),i=a(5101),s=a(7373),o=a(7246),c=a(4353),m=a.n(c);const p=()=>{const[e,t]=(0,n.useState)([]),[a,c]=(0,n.useState)(!1),[p,d]=(0,n.useState)(0),[u,E]=(0,n.useState)(1),[b]=(0,n.useState)(20),[g,h]=(0,n.useState)(!1),[T,f]=(0,n.useState)(null),[_,y]=(0,n.useState)({limit:b,offset:0,order_by:"timestamp",order_desc:!0});(0,n.useEffect)(()=>{k()},[_]);const k=async()=>{try{c(!0);const e=await o.K.getAuditEvents(_);t(e.events),d(e.total)}catch(e){console.error("Failed to load audit events:",e),s.notifications.show({title:"Error",message:"Failed to load audit events",color:"red"})}finally{c(!1)}},w=(e,t)=>{E(1),y(a=>({...a,[e]:t,offset:0}))},v=e=>{switch(e.toLowerCase()){case"success":return"green";case"failure":case"error":return"red";case"warning":return"yellow";default:return"gray"}},x=e=>e.startsWith("auth.")?"blue":e.startsWith("app.")?"purple":e.startsWith("token.")?"green":e.startsWith("permission.")?"orange":"gray",S=Math.ceil(p/b),A=e.map(e=>l().createElement(r.Table.Tr,{key:e.id},l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm"},m()(e.timestamp).format("MMM DD, HH:mm:ss"))),l().createElement(r.Table.Td,null,l().createElement(r.Badge,{color:x(e.type),variant:"light",size:"sm"},e.type)),l().createElement(r.Table.Td,null,l().createElement(r.Badge,{color:v(e.status),variant:"light",size:"sm"},e.status)),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm",c:"dimmed"},e.actor_id||"System")),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm",lineClamp:2},e.description)),l().createElement(r.Table.Td,null,l().createElement(r.Group,{gap:"xs"},l().createElement(r.Button,{variant:"subtle",size:"xs",leftSection:l().createElement(i.IconEye,{size:14}),onClick:()=>(e=>{f(e),h(!0)})(e)},"Details")))));return l().createElement(r.Stack,{gap:"lg"},l().createElement(r.Group,{justify:"space-between"},l().createElement("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Audit Log")),l().createElement(r.Button,{leftSection:l().createElement(i.IconRefresh,{size:16}),variant:"light",onClick:k,loading:a},"Refresh")),l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"md"},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500,size:"sm"},"Filters"),l().createElement(r.Button,{variant:"subtle",size:"xs",onClick:()=>{E(1),y({limit:b,offset:0,order_by:"timestamp",order_desc:!0})}},"Clear All")),l().createElement(r.Grid,null,l().createElement(r.Grid.Col,{span:{base:12,sm:6,md:3}},l().createElement(r.MultiSelect,{label:"Event Types",placeholder:"All types",data:[{value:"auth.login",label:"Authentication - Login"},{value:"auth.logout",label:"Authentication - Logout"},{value:"auth.token_verified",label:"Authentication - Token Verified"},{value:"app.created",label:"Application - Created"},{value:"app.updated",label:"Application - Updated"},{value:"app.deleted",label:"Application - Deleted"},{value:"token.created",label:"Token - Created"},{value:"token.revoked",label:"Token - Revoked"},{value:"token.validated",label:"Token - Validated"},{value:"permission.granted",label:"Permission - Granted"},{value:"permission.denied",label:"Permission - Denied"}],value:_.event_types||[],onChange:e=>w("event_types",e.length?e:void 0),clearable:!0,searchable:!0,size:"sm"})),l().createElement(r.Grid.Col,{span:{base:12,sm:6,md:3}},l().createElement(r.MultiSelect,{label:"Status",placeholder:"All statuses",data:[{value:"success",label:"Success"},{value:"failure",label:"Failure"},{value:"error",label:"Error"},{value:"warning",label:"Warning"}],value:_.statuses||[],onChange:e=>w("statuses",e.length?e:void 0),clearable:!0,size:"sm"})),l().createElement(r.Grid.Col,{span:{base:12,sm:6,md:3}},l().createElement(r.TextInput,{label:"Actor ID",placeholder:"user@example.com",value:_.actor_id||"",onChange:e=>w("actor_id",e.target.value||void 0),size:"sm",leftSection:l().createElement(i.IconSearch,{size:16})})),l().createElement(r.Grid.Col,{span:{base:12,sm:6,md:3}},l().createElement(r.TextInput,{label:"Resource ID",placeholder:"Resource identifier",value:_.resource_id||"",onChange:e=>w("resource_id",e.target.value||void 0),size:"sm",leftSection:l().createElement(i.IconSearch,{size:16})}))))),l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0},a?l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(r.Loader,{size:"lg"}),l().createElement(r.Text,null,"Loading audit events...")):0===e.length?l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(i.IconActivity,{size:48,color:"gray"}),l().createElement("div",{style:{textAlign:"center"}},l().createElement(r.Text,{fw:500,mb:"xs"},"No audit events found"),l().createElement(r.Text,{size:"sm",c:"dimmed"},Object.keys(_).filter(e=>"limit"!==e&&"offset"!==e&&"order_by"!==e&&"order_desc"!==e).some(e=>_[e])?"Try adjusting your filters or clearing them to see more results":"Audit events will appear here as system activities occur"))):l().createElement(l().Fragment,null,l().createElement(r.Table,null,l().createElement(r.Table.Thead,null,l().createElement(r.Table.Tr,null,l().createElement(r.Table.Th,null,"Timestamp"),l().createElement(r.Table.Th,null,"Event Type"),l().createElement(r.Table.Th,null,"Status"),l().createElement(r.Table.Th,null,"Actor"),l().createElement(r.Table.Th,null,"Description"),l().createElement(r.Table.Th,null,"Actions"))),l().createElement(r.Table.Tbody,null,A)),S>1&&l().createElement(r.Group,{justify:"space-between",mt:"md",px:"md",pb:"md"},l().createElement(r.Text,{size:"sm",c:"dimmed"},"Showing ",(u-1)*b+1," to ",Math.min(u*b,p)," of ",p," events"),l().createElement(r.Pagination,{total:S,value:u,onChange:e=>{E(e),y(t=>({...t,offset:(e-1)*b}))},size:"sm"})))),l().createElement(r.Modal,{opened:g,onClose:()=>h(!1),title:"Audit Event Details",size:"lg"},T&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Event ID:"),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},T.id)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Timestamp:"),l().createElement(r.Text,{size:"sm"},m()(T.timestamp).format("MMMM DD, YYYY HH:mm:ss"))),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Event Type:"),l().createElement(r.Badge,{color:x(T.type),variant:"light"},T.type)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Status:"),l().createElement(r.Badge,{color:v(T.status),variant:"light"},T.status)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Action:"),l().createElement(r.Text,{size:"sm"},T.action)),l().createElement(r.Divider,null),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Description:"),l().createElement(r.Text,{size:"sm"},T.description)),T.actor_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Actor ID:"),l().createElement(r.Text,{size:"sm"},T.actor_id)),T.actor_ip&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"IP Address:"),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},T.actor_ip)),T.resource_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Resource ID:"),l().createElement(r.Text,{size:"sm"},T.resource_id)),T.resource_type&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Resource Type:"),l().createElement(r.Badge,{variant:"outline",size:"sm"},T.resource_type)),T.request_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Request ID:"),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},T.request_id)),T.session_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Session ID:"),l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},T.session_id)),T.user_agent&&l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"User Agent:"),l().createElement(r.Text,{size:"xs",c:"dimmed",style:{fontFamily:"monospace"}},T.user_agent)),T.details&&Object.keys(T.details).length>0&&l().createElement(l().Fragment,null,l().createElement(r.Divider,null),l().createElement("div",null,l().createElement(r.Text,{fw:500,mb:"xs"},"Additional Details:"),l().createElement(r.Code,{block:!0},JSON.stringify(T.details,null,2)))))))}},5742:(e,t,a)=>{a.d(t,{A:()=>u});var n=a(4914),l=a.n(n),r=a(7435),i=a(5101),s=a(972),o=a(7373),c=a(7246),m=a(4353),p=a.n(m);function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(null,arguments)}const u=()=>{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)(!1),[u,E]=(0,n.useState)(!1),[b,g]=(0,n.useState)(null),[h,T]=(0,n.useState)(!1),[f,_]=(0,n.useState)(null),y=(0,s.m)({initialValues:{app_id:"",app_link:"",type:[],callback_url:"",token_prefix:"",token_renewal_duration:"24h",max_token_duration:"168h",owner:{type:"individual",name:"Admin User",owner:"admin@example.com"}},validate:{app_id:e=>e.length<1?"App ID is required":null,app_link:e=>e.length<1?"App Link is required":null,callback_url:e=>e.length<1?"Callback URL is required":null}});(0,n.useEffect)(()=>{k()},[]);const k=async()=>{try{m(!0);const e=await c.K.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e),o.notifications.show({title:"Error",message:"Failed to load applications",color:"red"})}finally{m(!1)}},w=e=>{const t=e.match(/^(\d+)([hmd]?)$/);if(!t)return 86400;const a=parseInt(t[1]);switch(t[2]||"h"){case"m":return 60*a;case"h":default:return 3600*a;case"d":return 86400*a}},v=e=>{navigator.clipboard.writeText(e),o.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},x=e.map(e=>l().createElement(r.Table.Tr,{key:e.app_id},l().createElement(r.Table.Td,null,l().createElement(r.Text,{fw:500},e.app_id)),l().createElement(r.Table.Td,null,l().createElement(r.Group,{gap:"xs"},e.type.map(e=>l().createElement(r.Badge,{key:e,variant:"light",size:"sm"},e)))),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),l().createElement(r.Table.Td,null,l().createElement(r.Text,{size:"sm"},p()(e.created_at).format("MMM DD, YYYY"))),l().createElement(r.Table.Td,null,l().createElement(r.Group,{gap:"xs"},l().createElement(r.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>(e=>{_(e),T(!0)})(e),title:"View Details"},l().createElement(i.IconEye,{size:16})),l().createElement(r.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>(e=>{g(e),y.setValues({app_id:e.app_id,app_link:e.app_link,type:e.type,callback_url:e.callback_url,token_prefix:e.token_prefix||"",token_renewal_duration:e.token_renewal_duration/3600+"h",max_token_duration:e.max_token_duration/3600+"h",owner:e.owner}),E(!0)})(e),title:"Edit"},l().createElement(i.IconEdit,{size:16})),l().createElement(r.ActionIcon,{variant:"subtle",color:"red",onClick:()=>(async e=>{if(window.confirm("Are you sure you want to delete this application?"))try{await c.K.deleteApplication(e),o.notifications.show({title:"Success",message:"Application deleted successfully",color:"green"}),k()}catch(e){console.error("Failed to delete application:",e),o.notifications.show({title:"Error",message:"Failed to delete application",color:"red"})}})(e.app_id),title:"Delete"},l().createElement(i.IconTrash,{size:16}))))));return l().createElement(r.Stack,{gap:"lg"},l().createElement(r.Group,{justify:"space-between"},l().createElement("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Applications")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{g(null),y.reset(),E(!0)}},"New Application")),a?l().createElement(r.Stack,{align:"center",justify:"center",h:200},l().createElement(r.Loader,{size:"lg"}),l().createElement(r.Text,null,"Loading applications...")):0===e.length?l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},l().createElement(r.Stack,{align:"center",gap:"md"},l().createElement(i.IconAlertCircle,{size:48,color:"gray"}),l().createElement("div",{style:{textAlign:"center"}},l().createElement(r.Text,{fw:500,mb:"xs"},"No applications found"),l().createElement(r.Text,{size:"sm",c:"dimmed"},"Create your first application to get started with the key management system")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{g(null),y.reset(),E(!0)}},"Create Application"))):l().createElement(r.Card,{shadow:"sm",radius:"md",withBorder:!0},l().createElement(r.Table,null,l().createElement(r.Table.Thead,null,l().createElement(r.Table.Tr,null,l().createElement(r.Table.Th,null,"Application ID"),l().createElement(r.Table.Th,null,"Type"),l().createElement(r.Table.Th,null,"Owner"),l().createElement(r.Table.Th,null,"Created"),l().createElement(r.Table.Th,null,"Actions"))),l().createElement(r.Table.Tbody,null,x))),l().createElement(r.Modal,{opened:u,onClose:()=>{E(!1),g(null),y.reset()},title:b?"Edit Application":"Create New Application",size:"lg"},l().createElement("form",{onSubmit:y.onSubmit(async e=>{try{const t={...e,token_renewal_duration:w(e.token_renewal_duration),max_token_duration:w(e.max_token_duration)};b?(await c.K.updateApplication(b.app_id,t),o.notifications.show({title:"Success",message:"Application updated successfully",color:"green"})):(await c.K.createApplication(t),o.notifications.show({title:"Success",message:"Application created successfully",color:"green"})),E(!1),g(null),y.reset(),k()}catch(e){console.error("Failed to save application:",e),o.notifications.show({title:"Error",message:"Failed to save application",color:"red"})}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.TextInput,d({label:"Application ID",placeholder:"my-app-id",required:!0},y.getInputProps("app_id"),{disabled:!!b})),l().createElement(r.TextInput,d({label:"Application Link",placeholder:"https://myapp.example.com",required:!0},y.getInputProps("app_link"))),l().createElement(r.MultiSelect,d({label:"Application Type",placeholder:"Select application types",data:[{value:"static",label:"Static"},{value:"user",label:"User"}],required:!0},y.getInputProps("type"))),l().createElement(r.TextInput,d({label:"Callback URL",placeholder:"https://myapp.example.com/callback",required:!0},y.getInputProps("callback_url"))),l().createElement(r.TextInput,d({label:"Token Prefix (Optional)",placeholder:"myapp_"},y.getInputProps("token_prefix"))),l().createElement(r.Group,{grow:!0},l().createElement(r.TextInput,d({label:"Token Renewal Duration",placeholder:"24h"},y.getInputProps("token_renewal_duration"))),l().createElement(r.TextInput,d({label:"Max Token Duration",placeholder:"168h"},y.getInputProps("max_token_duration")))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{E(!1),g(null),y.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},b?"Update Application":"Create Application"))))),l().createElement(r.Modal,{opened:h,onClose:()=>T(!1),title:"Application Details",size:"md"},f&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Application ID:"),l().createElement(r.Group,{gap:"xs"},l().createElement(r.Text,null,f.app_id),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>v(f.app_id)},l().createElement(i.IconCopy,{size:12})))),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"HMAC Key:"),l().createElement(r.Group,{gap:"xs"},l().createElement(r.Text,{size:"sm",style:{fontFamily:"monospace"}},f.hmac_key.substring(0,16),"..."),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>v(f.hmac_key)},l().createElement(i.IconCopy,{size:12})))),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Application Link:"),l().createElement(r.Text,{size:"sm"},f.app_link)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Callback URL:"),l().createElement(r.Text,{size:"sm"},f.callback_url)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Renewal:"),l().createElement(r.Text,{size:"sm"},f.token_renewal_duration/3600,"h")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Max Duration:"),l().createElement(r.Text,{size:"sm"},f.max_token_duration/3600,"h")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Created:"),l().createElement(r.Text,{size:"sm"},p()(f.created_at).format("MMM DD, YYYY HH:mm"))))))}},6658:(e,t,a)=>{a.d(t,{A:()=>o});var n=a(4914),l=a.n(n),r=a(7435),i=a(5101);const s=[{id:"app",label:"Application",description:"Access to application management",children:[{id:"app.read",label:"Read",description:"Read application information"},{id:"app.write",label:"Write",description:"Create and update applications"},{id:"app.delete",label:"Delete",description:"Delete applications"}]},{id:"token",label:"Token",description:"Access to token management",children:[{id:"token.read",label:"Read",description:"Read token information"},{id:"token.create",label:"Create",description:"Create new tokens"},{id:"token.revoke",label:"Revoke",description:"Revoke existing tokens"}]},{id:"repo",label:"Repository",description:"Access to repository operations",children:[{id:"repo.read",label:"Read",description:"Read repository data"},{id:"repo.write",label:"Write",description:"Write to repositories"},{id:"repo.admin",label:"Admin",description:"Administrative access to repositories"}]},{id:"permission",label:"Permission",description:"Access to permission management",children:[{id:"permission.read",label:"Read",description:"Read permission information"},{id:"permission.write",label:"Write",description:"Create and update permissions"},{id:"permission.grant",label:"Grant",description:"Grant permissions to tokens"},{id:"permission.revoke",label:"Revoke",description:"Revoke permissions from tokens"}]}],o=({permissions:e,onChange:t})=>{const[a,o]=(0,n.useState)(new Set);(0,n.useEffect)(()=>{const e=s.map(e=>e.id);o(new Set(e))},[]);const c=(n,s=0)=>{const m=(t=>{if(!t.children)return e.includes(t.id)?"checked":"unchecked";const a=t.children.filter(t=>e.includes(t.id));return 0===a.length?"unchecked":a.length===t.children.length?"checked":"indeterminate"})(n),p=a.has(n.id),d=n.children&&n.children.length>0;return l().createElement(r.Box,{key:n.id},l().createElement(r.Paper,{p:"xs",radius:"sm",style:{border:"1px solid var(--mantine-color-gray-3)",marginBottom:"2px"}},l().createElement(r.Group,{gap:"xs",wrap:"nowrap",align:"flex-start"},d?l().createElement(r.ActionIcon,{variant:"subtle",size:"sm",onClick:()=>{return e=n.id,void o(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a});var e},style:{marginTop:"1px"}},p?l().createElement(i.IconChevronDown,{size:14}):l().createElement(i.IconChevronRight,{size:14})):l().createElement(r.Box,{w:28}),l().createElement(r.Checkbox,{checked:"checked"===m,indeterminate:"indeterminate"===m,onChange:a=>((a,n)=>{let l=[...e];a.children?n?a.children.forEach(e=>{l.includes(e.id)||l.push(e.id)}):a.children.forEach(e=>{l=l.filter(t=>t!==e.id)}):n?l.includes(a.id)||l.push(a.id):l=l.filter(e=>e!==a.id),t(l)})(n,a.currentTarget.checked),size:"sm",style:{marginTop:"1px"}}),l().createElement(r.Box,{style:{flex:1}},l().createElement(r.Group,{gap:"xs",wrap:"nowrap"},l().createElement(r.Text,{size:"sm",fw:d?600:500},n.label,d&&" (all)"),n.description&&l().createElement(r.Text,{size:"xs",c:"dimmed",style:{whiteSpace:"nowrap"}},"- ",n.description))))),d&&l().createElement(r.Collapse,{in:p},l().createElement(r.Box,{pl:"lg",mt:"2px"},l().createElement(r.Stack,{gap:"2px"},n.children.map(e=>c(e,s+1))))))};return l().createElement(r.Stack,{gap:"xs"},l().createElement(r.Text,{size:"sm",fw:500,mb:"xs"},"Select permissions for this token"),s.map(e=>c(e)))}},7246:(e,t,a)=>{a.d(t,{K:()=>l});var n=a(7536);const l=new class{constructor(){this.baseURL={SHELL:"/bin/bash",npm_command:"run",SESSION_MANAGER:"local/unix:@/tmp/.ICE-unix/2780,unix/unix:/tmp/.ICE-unix/2780",npm_config_userconfig:"/home/bazzite/.npmrc",COLORTERM:"truecolor",XDG_CONFIG_DIRS:"/home/bazzite/.config/kdedefaults:/etc/xdg:/usr/share/kde-settings/kde-profile/default/xdg",npm_config_cache:"/home/bazzite/.npm",XDG_SESSION_PATH:"/org/freedesktop/DisplayManager/Session1",HISTCONTROL:"ignoredups",XDG_MENU_PREFIX:"plasma-",TERM_PROGRAM_VERSION:"1.103.1",HISTSIZE:"1000",HOSTNAME:"bazzite",ICEAUTHORITY:"/run/user/1000/iceauth_gsimwA",NODE:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.7.0/bin/node",SSH_AUTH_SOCK:"/run/user/1000/ssh-agent.socket",MEMORY_PRESSURE_WRITE:"c29tZSAyMDAwMDAgMjAwMDAwMAA=",COLOR:"1",npm_config_local_prefix:"/var/home/bazzite/Projects/skybridge/kms/web",HOMEBREW_PREFIX:"/home/linuxbrew/.linuxbrew",DESKTOP_SESSION:"plasma",GTK_RC_FILES:"/etc/gtk/gtkrc:/home/bazzite/.gtkrc:/home/bazzite/.config/gtkrc",NO_AT_BRIDGE:"1",GDK_CORE_DEVICE_EVENTS:"1",npm_config_globalconfig:"/home/bazzite/.npm-global/etc/npmrc",GPG_TTY:"/dev/pts/14",EDITOR:"/usr/bin/nano",XDG_SEAT:"seat0",PWD:"/home/bazzite/Projects/skybridge/kms/web",LOGNAME:"bazzite",XDG_SESSION_DESKTOP:"KDE",XDG_SESSION_TYPE:"wayland",npm_config_init_module:"/home/bazzite/.npm-init.js",SYSTEMD_EXEC_PID:"2873",_:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin/webpack",XAUTHORITY:"/run/user/1000/xauth_PJACoS",SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS:"0",VSCODE_GIT_ASKPASS_NODE:"/usr/share/code/code",ENABLE_IDE_INTEGRATION:"true",XKB_DEFAULT_MODEL:"pc105",GTK2_RC_FILES:"/home/bazzite/.gtkrc-2.0-kde4",HOME:"/home/bazzite",SSH_ASKPASS:"/usr/bin/ksshaskpass",LANG:"en_US.UTF-8",LS_COLORS:"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.crate=01;31:*.deb=01;31:*.drpm=01;31:*.dwm=01;31:*.dz=01;31:*.ear=01;31:*.egg=01;31:*.esd=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.pyz=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.swm=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.udeb=01;31:*.war=01;31:*.whl=01;31:*.wim=01;31:*.xz=01;31:*.z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:",XDG_CURRENT_DESKTOP:"KDE",npm_package_version:"1.0.0",MEMORY_PRESSURE_WATCH:"/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/session.slice/plasma-plasmashell.service/memory.pressure",WAYLAND_DISPLAY:"wayland-0",GIT_ASKPASS:"/usr/share/code/resources/app/extensions/git/dist/askpass.sh",XDG_SEAT_PATH:"/org/freedesktop/DisplayManager/Seat0",INVOCATION_ID:"819482c27c0a4082823284e5043016f1",MANAGERPID:"2409",INIT_CWD:"/var/home/bazzite/Projects/skybridge/kms/web",CHROME_DESKTOP:"code.desktop",STEAM_FRAME_FORCE_CLOSE:"1",KDE_SESSION_UID:"1000",INFOPATH:"/home/linuxbrew/.linuxbrew/share/info:/home/linuxbrew/.linuxbrew/share/info:",npm_lifecycle_script:"webpack --mode production",VSCODE_GIT_ASKPASS_EXTRA_ARGS:"",XKB_DEFAULT_LAYOUT:"us",CLAUDE_CODE_SSE_PORT:"58779",npm_config_npm_version:"11.5.1",XDG_SESSION_CLASS:"user",TERM:"xterm-256color",npm_package_name:"kms",npm_config_prefix:"/home/bazzite/.npm-global",LESSOPEN:"||/usr/bin/lesspipe.sh %s",USER:"bazzite",VSCODE_GIT_IPC_HANDLE:"/run/user/1000/vscode-git-dbf835287e.sock",HOMEBREW_CELLAR:"/home/linuxbrew/.linuxbrew/Cellar",QT_WAYLAND_RECONNECT:"1",KDE_SESSION_VERSION:"6",PAM_KWALLET5_LOGIN:"/run/user/1000/kwallet5.socket",SUDO_ASKPASS:"/usr/bin/ksshaskpass",DISPLAY:":0",npm_lifecycle_event:"build",SHLVL:"1",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",XDG_VTNR:"2",CLINE_ACTIVE:"true",XDG_SESSION_ID:"2",npm_config_user_agent:"npm/11.5.1 node/v24.7.0 linux x64 workspaces/false",npm_execpath:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/bin/npm-cli.js",XDG_RUNTIME_DIR:"/run/user/1000",DEBUGINFOD_URLS:"https://debuginfod.fedoraproject.org/ ",npm_package_json:"/var/home/bazzite/Projects/skybridge/kms/web/package.json",DEBUGINFOD_IMA_CERT_PATH:"/etc/keys/ima:",KDEDIRS:"/usr",VSCODE_GIT_ASKPASS_MAIN:"/usr/share/code/resources/app/extensions/git/dist/askpass-main.js",JOURNAL_STREAM:"9:22342",XDG_DATA_DIRS:"/home/bazzite/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",KDE_FULL_SESSION:"true",GDK_BACKEND:"x11",npm_config_noproxy:"",PATH:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin:/var/home/bazzite/Projects/skybridge/kms/node_modules/.bin:/var/home/bazzite/Projects/skybridge/node_modules/.bin:/var/home/bazzite/Projects/node_modules/.bin:/var/home/bazzite/node_modules/.bin:/var/home/node_modules/.bin:/var/node_modules/.bin:/node_modules/.bin:/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/home/bazzite/.npm-global/bin:/home/bazzite/.npm-global/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/bazzite/.npm-global/bin:/home/bazzite/.npm-global/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/bazzite/.npm-global/bin:/home/bazzite/.npm-global/bin:/home/bazzite/.local/bin:/home/bazzite/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin",npm_config_node_gyp:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js",ORIGINAL_XDG_CURRENT_DESKTOP:"KDE",DBUS_SESSION_BUS_ADDRESS:"unix:path=/run/user/1000/bus",npm_config_global_prefix:"/home/bazzite/.npm-global",KDE_APPLICATIONS_AS_SCOPE:"1",MAIL:"/var/spool/mail/bazzite",BREW_BASH_COMPLETION:"1",npm_node_execpath:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.7.0/bin/node",OLDPWD:"/home/bazzite/Projects/skybridge",TERM_PROGRAM:"vscode"}.REACT_APP_API_URL||"http://localhost:8080",this.api=n.A.create({baseURL:this.baseURL,headers:{"Content-Type":"application/json"}}),this.api.interceptors.request.use(e=>(e.headers["X-User-Email"]="admin@example.com",e)),this.api.interceptors.response.use(e=>e,e=>(console.error("API Error:",e),Promise.reject(e)))}async getApplications(e=50,t=0){return(await this.api.get(`/api/applications?limit=${e}&offset=${t}`)).data}async getApplication(e){return(await this.api.get(`/api/applications/${e}`)).data}async createApplication(e){return(await this.api.post("/api/applications",e)).data}async updateApplication(e,t){return(await this.api.put(`/api/applications/${e}`,t)).data}async deleteApplication(e){await this.api.delete(`/api/applications/${e}`)}async getTokensForApplication(e,t=50,a=0){return(await this.api.get(`/api/applications/${e}/tokens?limit=${t}&offset=${a}`)).data}async createToken(e,t){return(await this.api.post(`/api/applications/${e}/tokens`,t)).data}async deleteToken(e){await this.api.delete(`/api/tokens/${e}`)}async verifyToken(e){return(await this.api.post("/api/verify",e)).data}async getAuditEvents(e){const t=new URLSearchParams;e&&(e.event_types?.length&&e.event_types.forEach(e=>t.append("event_types",e)),e.statuses?.length&&e.statuses.forEach(e=>t.append("statuses",e)),e.actor_id&&t.set("actor_id",e.actor_id),e.resource_id&&t.set("resource_id",e.resource_id),e.resource_type&&t.set("resource_type",e.resource_type),e.start_time&&t.set("start_time",e.start_time),e.end_time&&t.set("end_time",e.end_time),e.limit&&t.set("limit",e.limit.toString()),e.offset&&t.set("offset",e.offset.toString()),e.order_by&&t.set("order_by",e.order_by),void 0!==e.order_desc&&t.set("order_desc",e.order_desc.toString()));const a="/api/audit/events"+(t.toString()?"?"+t.toString():"");return(await this.api.get(a)).data}async getAuditEvent(e){return(await this.api.get(`/api/audit/events/${e}`)).data}async getAuditStats(e){const t=new URLSearchParams;e&&(e.event_types?.length&&e.event_types.forEach(e=>t.append("event_types",e)),e.start_time&&t.set("start_time",e.start_time),e.end_time&&t.set("end_time",e.end_time),e.group_by&&t.set("group_by",e.group_by));const a="/api/audit/stats"+(t.toString()?"?"+t.toString():"");return(await this.api.get(a)).data}}}}]);