From 7e584ba53b8cb3c2b2d9c290f51e2d96f075e60d Mon Sep 17 00:00:00 2001 From: Ryan Copley Date: Wed, 27 Aug 2025 12:27:50 -0400 Subject: [PATCH] - --- kms/web/dist/665.js | 2 +- kms/web/dist/main.js | 2 +- kms/web/src/App.tsx | 67 ++++++++++++++++++--- kms/web/src/components/Applications.tsx | 3 - kms/web/src/components/Audit.tsx | 3 - kms/web/src/components/Dashboard.tsx | 9 --- kms/web/src/components/TokenTester.tsx | 9 --- kms/web/src/components/Tokens.tsx | 3 - web/dist/main.js | 2 +- web/src/App.tsx | 11 +++- web/src/components/Header.tsx | 56 ++++++++++-------- web/src/components/Navigation.tsx | 79 +++++++++++-------------- web/src/pages/HomePage.tsx | 54 +++-------------- 13 files changed, 144 insertions(+), 156 deletions(-) diff --git a/kms/web/dist/665.js b/kms/web/dist/665.js index feb891b..53f4d22 100644 --- a/kms/web/dist/665.js +++ b/kms/web/dist/665.js @@ -1 +1 @@ -"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());return l().useEffect(()=>{const t=()=>{a(e())};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[]),l().createElement(r.Box,{w:"100%"},l().createElement(r.Stack,{gap:"lg"},l().createElement("div",null,l().createElement(r.Title,{order:1,size:"h2",mb:"xs"},"Key Management System"),l().createElement(r.Text,{c:"dimmed",size:"sm"},"Manage API keys, tokens, and access permissions")),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 Promise.all([s.K.getApplications(100,0)]),a={totalApplications:e.count,totalTokens:0,recentActivity:0,systemHealth:"healthy"};t(a)}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("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Dashboard Overview"),l().createElement(r.Text,{c:"dimmed"},"Monitor your key management system status and metrics")),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:()=>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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)(!1),[u,E]=(0,n.useState)(null),b=(0,s.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)(()=>{g()},[]);const g=async()=>{try{const e=await c.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("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Token Tester"),l().createElement(r.Text,{c:"dimmed"},"Test and verify API tokens against your applications")),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:b.onSubmit(async e=>{try{m(!0),E(null);const t={...e,user_id:e.user_id||void 0,permissions:e.permissions&&e.permissions.length>0?e.permissions:void 0},a=await c.K.verifyToken(t);E(a),a.valid?o.notifications.show({title:"Token Verified",message:"Token is "+(a.permitted?"valid and permitted":"valid but not permitted"),color:a.permitted?"green":"orange"}):o.notifications.show({title:"Token Invalid",message:a.error||"Token verification failed",color:"red"})}catch(e){console.error("Failed to verify token:",e),o.notifications.show({title:"Error",message:"Failed to verify token",color:"red"})}finally{m(!1)}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,d({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(", ")})`}))},b.getInputProps("app_id"))),l().createElement(r.TextInput,d({label:"User ID (Optional)",placeholder:"user@example.com",description:"Leave empty for token-only verification"},b.getInputProps("user_id"))),l().createElement(r.Textarea,d({label:"Token",placeholder:"Paste your token here...",required:!0,minRows:3},b.getInputProps("token"))),l().createElement(r.MultiSelect,d({label:"Required Permissions (Optional)",placeholder:"Select permissions to test",description:"Leave empty to skip permission checks",data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},b.getInputProps("permissions"),{searchable:!0})),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(i.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"),!u&&!a&&l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(i.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...")),u&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement((e=>e.valid?e.valid&&e.permitted?i.IconCheck:i.IconAlertCircle:i.IconX)(u),{size:16}),title:u.valid?u.permitted?"Token Valid & Permitted":"Token Valid but Not Permitted":"Token Invalid",color:(e=>e.valid?e.valid&&e.permitted?"green":"orange":"red")(u)},u.error||(u.valid&&u.permitted?"Token is valid and has the required permissions":u.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:u.valid?"green":"red",variant:"light"},u.valid?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Permitted:"),l().createElement(r.Badge,{color:u.permitted?"green":"red",variant:"light"},u.permitted?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Type:"),l().createElement(r.Badge,{variant:"light"},u.token_type)),u.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"}},u.user_id)),u.expires_at&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Expires At:"),l().createElement(r.Text,{size:"sm"},p()(u.expires_at).format("MMM DD, YYYY HH:mm"))),u.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"},p()(u.max_valid_at).format("MMM DD, YYYY HH:mm")))),u.permissions&&u.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"},u.permissions.map(e=>l().createElement(r.Badge,{key:e,variant:"light",size:"sm",color:"blue"},e))))),u.permission_results&&Object.keys(u.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(u.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")))))),u.claims&&Object.keys(u.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(u.claims,null,2)))))))),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(i.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:()=>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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)([]),[u,E]=(0,n.useState)(!1),[b,g]=(0,n.useState)(!1),[T,h]=(0,n.useState)(!1),[_,y]=(0,n.useState)(null),f=(0,s.m)({initialValues:{app_id:"",owner:{type:"user",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(),k()},[]);const w=async()=>{try{const e=await c.K.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}},k=async()=>{try{E(!0);const e=await c.K.getApplications(100,0),t=[];for(const a of e.data)try{const e=(await c.K.getTokensForApplication(a.app_id,100,0)).data.map(e=>({...e,app:a}));t.push(...e)}catch(e){}m(t)}catch(e){console.error("Failed to load tokens:",e),o.notifications.show({title:"Error",message:"Failed to load tokens",color:"red"})}finally{E(!1)}},v=e=>{navigator.clipboard.writeText(e),o.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},x=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(i.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"},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:()=>v(e.id),title:"Copy Token ID"},l().createElement(i.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 c.K.deleteToken(e),o.notifications.show({title:"Success",message:"Token deleted successfully",color:"green"}),k()}catch(e){console.error("Failed to delete token:",e),o.notifications.show({title:"Error",message:"Failed to delete token",color:"red"})}})(e.id),title:"Delete Token"},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"},"API Tokens"),l().createElement(r.Text,{c:"dimmed"},"Manage static API tokens for your applications")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{f.reset(),g(!0)},disabled:0===e.length},"Create Token")),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(i.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can create tokens."),u?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(i.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(i.IconPlus,{size:16}),onClick:()=>{f.reset(),g(!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,x))),l().createElement(r.Modal,{opened:b,onClose:()=>{g(!1),f.reset()},title:"Create New Token",size:"md"},l().createElement("form",{onSubmit:f.onSubmit(async e=>{try{const{app_id:t,...a}=e,n=await c.K.createToken(t,a);y(n),g(!1),h(!0),f.reset(),k(),o.notifications.show({title:"Success",message:"Token created successfully",color:"green"})}catch(e){console.error("Failed to create token:",e),o.notifications.show({title:"Error",message:"Failed to create token",color:"red"})}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,d({label:"Application",placeholder:"Select an application",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},f.getInputProps("app_id"))),l().createElement(r.MultiSelect,d({label:"Permissions",placeholder:"Select permissions for this token",required:!0,data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},f.getInputProps("permissions"),{searchable:!0})),l().createElement(r.TextInput,d({label:"Owner Name",placeholder:"Token owner name"},f.getInputProps("owner.name"))),l().createElement(r.TextInput,d({label:"Owner Email",placeholder:"owner@example.com"},f.getInputProps("owner.owner"))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{g(!1),f.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},"Create Token"))))),l().createElement(r.Modal,{opened:T,onClose:()=>{h(!1),y(null)},title:"Token Created Successfully",size:"lg"},_&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement(i.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:()=>v(_.token),title:"Copy Token"},l().createElement(i.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:()=>v(_.id)},l().createElement(i.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"},p()(_.created_at).format("MMM DD, YYYY HH:mm"))),l().createElement(r.Group,{justify:"flex-end",mt:"lg"},l().createElement(r.Button,{onClick:()=>{h(!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,T]=(0,n.useState)(!1),[h,_]=(0,n.useState)(null),[y,f]=(0,n.useState)({limit:b,offset:0,order_by:"timestamp",order_desc:!0});(0,n.useEffect)(()=>{w()},[y]);const w=async()=>{try{c(!0);const e=await o.K.getAuditEvents(y);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)}},k=(e,t)=>{E(1),f(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=>{_(e),T(!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.Text,{c:"dimmed"},"View and search system audit events and security logs")),l().createElement(r.Button,{leftSection:l().createElement(i.IconRefresh,{size:16}),variant:"light",onClick:w,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),f({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:y.event_types||[],onChange:e=>k("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:y.statuses||[],onChange:e=>k("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:y.actor_id||"",onChange:e=>k("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:y.resource_id||"",onChange:e=>k("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(y).filter(e=>"limit"!==e&&"offset"!==e&&"order_by"!==e&&"order_desc"!==e).some(e=>y[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),f(t=>({...t,offset:(e-1)*b}))},size:"sm"})))),l().createElement(r.Modal,{opened:g,onClose:()=>T(!1),title:"Audit Event Details",size:"lg"},h&&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"}},h.id)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Timestamp:"),l().createElement(r.Text,{size:"sm"},m()(h.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(h.type),variant:"light"},h.type)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Status:"),l().createElement(r.Badge,{color:v(h.status),variant:"light"},h.status)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Action:"),l().createElement(r.Text,{size:"sm"},h.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"},h.description)),h.actor_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Actor ID:"),l().createElement(r.Text,{size:"sm"},h.actor_id)),h.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"}},h.actor_ip)),h.resource_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Resource ID:"),l().createElement(r.Text,{size:"sm"},h.resource_id)),h.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"},h.resource_type)),h.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"}},h.request_id)),h.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"}},h.session_id)),h.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"}},h.user_agent)),h.details&&Object.keys(h.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(h.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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)(!1),[u,E]=(0,n.useState)(!1),[b,g]=(0,n.useState)(null),[T,h]=(0,n.useState)(!1),[_,y]=(0,n.useState)(null),f=(0,s.m)({initialValues:{app_id:"",app_link:"",type:[],callback_url:"",token_prefix:"",token_renewal_duration:"24h",max_token_duration:"168h",owner:{type:"user",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)(()=>{w()},[]);const w=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)}},k=e=>{navigator.clipboard.writeText(e),o.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},v=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=>{y(e),h(!0)})(e),title:"View Details"},l().createElement(i.IconEye,{size:16})),l().createElement(r.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>(e=>{g(e),f.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"}),w()}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.Text,{c:"dimmed"},"Manage your registered applications and their configurations")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{g(null),f.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),f.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,v))),l().createElement(r.Modal,{opened:u,onClose:()=>{E(!1),g(null),f.reset()},title:b?"Edit Application":"Create New Application",size:"lg"},l().createElement("form",{onSubmit:f.onSubmit(async e=>{try{b?(await c.K.updateApplication(b.app_id,e),o.notifications.show({title:"Success",message:"Application updated successfully",color:"green"})):(await c.K.createApplication(e),o.notifications.show({title:"Success",message:"Application created successfully",color:"green"})),E(!1),g(null),f.reset(),w()}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},f.getInputProps("app_id"),{disabled:!!b})),l().createElement(r.TextInput,d({label:"Application Link",placeholder:"https://myapp.example.com",required:!0},f.getInputProps("app_link"))),l().createElement(r.MultiSelect,d({label:"Application Type",placeholder:"Select application types",data:[{value:"web",label:"Web Application"},{value:"mobile",label:"Mobile Application"},{value:"api",label:"API Service"},{value:"cli",label:"CLI Tool"},{value:"service",label:"Background Service"}],required:!0},f.getInputProps("type"))),l().createElement(r.TextInput,d({label:"Callback URL",placeholder:"https://myapp.example.com/callback",required:!0},f.getInputProps("callback_url"))),l().createElement(r.TextInput,d({label:"Token Prefix (Optional)",placeholder:"myapp_"},f.getInputProps("token_prefix"))),l().createElement(r.Group,{grow:!0},l().createElement(r.TextInput,d({label:"Token Renewal Duration",placeholder:"24h"},f.getInputProps("token_renewal_duration"))),l().createElement(r.TextInput,d({label:"Max Token Duration",placeholder:"168h"},f.getInputProps("max_token_duration")))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{E(!1),g(null),f.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},b?"Update Application":"Create Application"))))),l().createElement(r.Modal,{opened:T,onClose:()=>h(!1),title:"Application Details",size:"md"},_&&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,_.app_id),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>k(_.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"}},_.hmac_key.substring(0,16),"..."),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>k(_.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"},_.app_link)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Callback URL:"),l().createElement(r.Text,{size:"sm"},_.callback_url)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Renewal:"),l().createElement(r.Text,{size:"sm"},_.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"},_.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()(_.created_at).format("MMM DD, YYYY HH:mm"))))))}},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/2821,unix/unix:/tmp/.ICE-unix/2821",COREPACK_ENABLE_AUTO_PIN:"0",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",HOSTNAME:"bazzite",HISTSIZE:"1000",ICEAUTHORITY:"/run/user/1000/iceauth_BYCzKU",NODE:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.6.0/bin/node",SSH_AUTH_SOCK:"/run/user/1000/ssh-agent.socket",MEMORY_PRESSURE_WRITE:"c29tZSAyMDAwMDAgMjAwMDAwMAA=",COLOR:"0",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:"not a tty",EDITOR:"/usr/bin/nano",XDG_SEAT:"seat0",PWD:"/var/home/bazzite/Projects/skybridge/kms/web",XDG_SESSION_DESKTOP:"KDE",LOGNAME:"bazzite",XDG_SESSION_TYPE:"wayland",npm_config_init_module:"/home/bazzite/.npm-init.js",SYSTEMD_EXEC_PID:"2913",_:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin/webpack",XAUTHORITY:"/run/user/1000/xauth_yhtnnV",SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS:"0",VSCODE_GIT_ASKPASS_NODE:"/usr/share/code/code",ENABLE_IDE_INTEGRATION:"true",CLAUDECODE:"1",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:"d321aef5e720442f8313c810fbda021f",MANAGERPID:"2439",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:"27272",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:"2",GIT_EDITOR:"true",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",XDG_VTNR:"2",XDG_SESSION_ID:"2",npm_config_user_agent:"npm/11.5.1 node/v24.6.0 linux x64 workspaces/false",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"delta",npm_execpath:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/bin/npm-cli.js",XDG_RUNTIME_DIR:"/run/user/1000",CLAUDE_CODE_ENTRYPOINT:"cli",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:30102",XDG_DATA_DIRS:"/home/bazzite/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",GDK_BACKEND:"x11",KDE_FULL_SESSION:"true",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.6.0/bin/node",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}}}}]); \ No newline at end of file +"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.Text,{c:"dimmed",size:"sm"},"Manage API keys, tokens, and access permissions")),l().createElement(r.Box,{pos:"fixed",top:60,right:0,h:"calc(100vh - 60px)",w:200,bg:"gray.1",p:"md",style:{borderLeft:"1px solid var(--mantine-color-gray-3)",zIndex:100}},l().createElement(r.Text,{size:"sm",fw:600,mb:"md"},"Color Selector"),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"})))),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",pr:220},(()=>{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 Promise.all([s.K.getApplications(100,0)]),a={totalApplications:e.count,totalTokens:0,recentActivity:0,systemHealth:"healthy"};t(a)}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("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Dashboard Overview"),l().createElement(r.Text,{c:"dimmed"},"Monitor your key management system status and metrics")),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:()=>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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)(!1),[u,E]=(0,n.useState)(null),b=(0,s.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)(()=>{g()},[]);const g=async()=>{try{const e=await c.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("div",null,l().createElement(r.Title,{order:2,mb:"xs"},"Token Tester"),l().createElement(r.Text,{c:"dimmed"},"Test and verify API tokens against your applications")),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:b.onSubmit(async e=>{try{m(!0),E(null);const t={...e,user_id:e.user_id||void 0,permissions:e.permissions&&e.permissions.length>0?e.permissions:void 0},a=await c.K.verifyToken(t);E(a),a.valid?o.notifications.show({title:"Token Verified",message:"Token is "+(a.permitted?"valid and permitted":"valid but not permitted"),color:a.permitted?"green":"orange"}):o.notifications.show({title:"Token Invalid",message:a.error||"Token verification failed",color:"red"})}catch(e){console.error("Failed to verify token:",e),o.notifications.show({title:"Error",message:"Failed to verify token",color:"red"})}finally{m(!1)}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,d({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(", ")})`}))},b.getInputProps("app_id"))),l().createElement(r.TextInput,d({label:"User ID (Optional)",placeholder:"user@example.com",description:"Leave empty for token-only verification"},b.getInputProps("user_id"))),l().createElement(r.Textarea,d({label:"Token",placeholder:"Paste your token here...",required:!0,minRows:3},b.getInputProps("token"))),l().createElement(r.MultiSelect,d({label:"Required Permissions (Optional)",placeholder:"Select permissions to test",description:"Leave empty to skip permission checks",data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},b.getInputProps("permissions"),{searchable:!0})),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(i.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"),!u&&!a&&l().createElement(r.Stack,{align:"center",justify:"center",h:300},l().createElement(i.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...")),u&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement((e=>e.valid?e.valid&&e.permitted?i.IconCheck:i.IconAlertCircle:i.IconX)(u),{size:16}),title:u.valid?u.permitted?"Token Valid & Permitted":"Token Valid but Not Permitted":"Token Invalid",color:(e=>e.valid?e.valid&&e.permitted?"green":"orange":"red")(u)},u.error||(u.valid&&u.permitted?"Token is valid and has the required permissions":u.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:u.valid?"green":"red",variant:"light"},u.valid?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Permitted:"),l().createElement(r.Badge,{color:u.permitted?"green":"red",variant:"light"},u.permitted?"Yes":"No")),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Type:"),l().createElement(r.Badge,{variant:"light"},u.token_type)),u.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"}},u.user_id)),u.expires_at&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Expires At:"),l().createElement(r.Text,{size:"sm"},p()(u.expires_at).format("MMM DD, YYYY HH:mm"))),u.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"},p()(u.max_valid_at).format("MMM DD, YYYY HH:mm")))),u.permissions&&u.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"},u.permissions.map(e=>l().createElement(r.Badge,{key:e,variant:"light",size:"sm",color:"blue"},e))))),u.permission_results&&Object.keys(u.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(u.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")))))),u.claims&&Object.keys(u.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(u.claims,null,2)))))))),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(i.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:()=>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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)([]),[u,E]=(0,n.useState)(!1),[b,g]=(0,n.useState)(!1),[T,h]=(0,n.useState)(!1),[_,y]=(0,n.useState)(null),f=(0,s.m)({initialValues:{app_id:"",owner:{type:"user",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(),k()},[]);const w=async()=>{try{const e=await c.K.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}},k=async()=>{try{E(!0);const e=await c.K.getApplications(100,0),t=[];for(const a of e.data)try{const e=(await c.K.getTokensForApplication(a.app_id,100,0)).data.map(e=>({...e,app:a}));t.push(...e)}catch(e){}m(t)}catch(e){console.error("Failed to load tokens:",e),o.notifications.show({title:"Error",message:"Failed to load tokens",color:"red"})}finally{E(!1)}},v=e=>{navigator.clipboard.writeText(e),o.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},x=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(i.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"},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:()=>v(e.id),title:"Copy Token ID"},l().createElement(i.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 c.K.deleteToken(e),o.notifications.show({title:"Success",message:"Token deleted successfully",color:"green"}),k()}catch(e){console.error("Failed to delete token:",e),o.notifications.show({title:"Error",message:"Failed to delete token",color:"red"})}})(e.id),title:"Delete Token"},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"},"API Tokens"),l().createElement(r.Text,{c:"dimmed"},"Manage static API tokens for your applications")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{f.reset(),g(!0)},disabled:0===e.length},"Create Token")),0===e.length&&l().createElement(r.Alert,{icon:l().createElement(i.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can create tokens."),u?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(i.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(i.IconPlus,{size:16}),onClick:()=>{f.reset(),g(!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,x))),l().createElement(r.Modal,{opened:b,onClose:()=>{g(!1),f.reset()},title:"Create New Token",size:"md"},l().createElement("form",{onSubmit:f.onSubmit(async e=>{try{const{app_id:t,...a}=e,n=await c.K.createToken(t,a);y(n),g(!1),h(!0),f.reset(),k(),o.notifications.show({title:"Success",message:"Token created successfully",color:"green"})}catch(e){console.error("Failed to create token:",e),o.notifications.show({title:"Error",message:"Failed to create token",color:"red"})}})},l().createElement(r.Stack,{gap:"md"},l().createElement(r.Select,d({label:"Application",placeholder:"Select an application",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},f.getInputProps("app_id"))),l().createElement(r.MultiSelect,d({label:"Permissions",placeholder:"Select permissions for this token",required:!0,data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},f.getInputProps("permissions"),{searchable:!0})),l().createElement(r.TextInput,d({label:"Owner Name",placeholder:"Token owner name"},f.getInputProps("owner.name"))),l().createElement(r.TextInput,d({label:"Owner Email",placeholder:"owner@example.com"},f.getInputProps("owner.owner"))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{g(!1),f.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},"Create Token"))))),l().createElement(r.Modal,{opened:T,onClose:()=>{h(!1),y(null)},title:"Token Created Successfully",size:"lg"},_&&l().createElement(r.Stack,{gap:"md"},l().createElement(r.Alert,{icon:l().createElement(i.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:()=>v(_.token),title:"Copy Token"},l().createElement(i.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:()=>v(_.id)},l().createElement(i.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"},p()(_.created_at).format("MMM DD, YYYY HH:mm"))),l().createElement(r.Group,{justify:"flex-end",mt:"lg"},l().createElement(r.Button,{onClick:()=>{h(!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,T]=(0,n.useState)(!1),[h,_]=(0,n.useState)(null),[y,f]=(0,n.useState)({limit:b,offset:0,order_by:"timestamp",order_desc:!0});(0,n.useEffect)(()=>{w()},[y]);const w=async()=>{try{c(!0);const e=await o.K.getAuditEvents(y);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)}},k=(e,t)=>{E(1),f(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=>{_(e),T(!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.Text,{c:"dimmed"},"View and search system audit events and security logs")),l().createElement(r.Button,{leftSection:l().createElement(i.IconRefresh,{size:16}),variant:"light",onClick:w,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),f({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:y.event_types||[],onChange:e=>k("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:y.statuses||[],onChange:e=>k("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:y.actor_id||"",onChange:e=>k("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:y.resource_id||"",onChange:e=>k("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(y).filter(e=>"limit"!==e&&"offset"!==e&&"order_by"!==e&&"order_desc"!==e).some(e=>y[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),f(t=>({...t,offset:(e-1)*b}))},size:"sm"})))),l().createElement(r.Modal,{opened:g,onClose:()=>T(!1),title:"Audit Event Details",size:"lg"},h&&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"}},h.id)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Timestamp:"),l().createElement(r.Text,{size:"sm"},m()(h.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(h.type),variant:"light"},h.type)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Status:"),l().createElement(r.Badge,{color:v(h.status),variant:"light"},h.status)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Action:"),l().createElement(r.Text,{size:"sm"},h.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"},h.description)),h.actor_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Actor ID:"),l().createElement(r.Text,{size:"sm"},h.actor_id)),h.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"}},h.actor_ip)),h.resource_id&&l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Resource ID:"),l().createElement(r.Text,{size:"sm"},h.resource_id)),h.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"},h.resource_type)),h.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"}},h.request_id)),h.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"}},h.session_id)),h.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"}},h.user_agent)),h.details&&Object.keys(h.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(h.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{const[e,t]=(0,n.useState)([]),[a,m]=(0,n.useState)(!1),[u,E]=(0,n.useState)(!1),[b,g]=(0,n.useState)(null),[T,h]=(0,n.useState)(!1),[_,y]=(0,n.useState)(null),f=(0,s.m)({initialValues:{app_id:"",app_link:"",type:[],callback_url:"",token_prefix:"",token_renewal_duration:"24h",max_token_duration:"168h",owner:{type:"user",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)(()=>{w()},[]);const w=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)}},k=e=>{navigator.clipboard.writeText(e),o.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},v=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=>{y(e),h(!0)})(e),title:"View Details"},l().createElement(i.IconEye,{size:16})),l().createElement(r.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>(e=>{g(e),f.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"}),w()}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.Text,{c:"dimmed"},"Manage your registered applications and their configurations")),l().createElement(r.Button,{leftSection:l().createElement(i.IconPlus,{size:16}),onClick:()=>{g(null),f.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),f.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,v))),l().createElement(r.Modal,{opened:u,onClose:()=>{E(!1),g(null),f.reset()},title:b?"Edit Application":"Create New Application",size:"lg"},l().createElement("form",{onSubmit:f.onSubmit(async e=>{try{b?(await c.K.updateApplication(b.app_id,e),o.notifications.show({title:"Success",message:"Application updated successfully",color:"green"})):(await c.K.createApplication(e),o.notifications.show({title:"Success",message:"Application created successfully",color:"green"})),E(!1),g(null),f.reset(),w()}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},f.getInputProps("app_id"),{disabled:!!b})),l().createElement(r.TextInput,d({label:"Application Link",placeholder:"https://myapp.example.com",required:!0},f.getInputProps("app_link"))),l().createElement(r.MultiSelect,d({label:"Application Type",placeholder:"Select application types",data:[{value:"web",label:"Web Application"},{value:"mobile",label:"Mobile Application"},{value:"api",label:"API Service"},{value:"cli",label:"CLI Tool"},{value:"service",label:"Background Service"}],required:!0},f.getInputProps("type"))),l().createElement(r.TextInput,d({label:"Callback URL",placeholder:"https://myapp.example.com/callback",required:!0},f.getInputProps("callback_url"))),l().createElement(r.TextInput,d({label:"Token Prefix (Optional)",placeholder:"myapp_"},f.getInputProps("token_prefix"))),l().createElement(r.Group,{grow:!0},l().createElement(r.TextInput,d({label:"Token Renewal Duration",placeholder:"24h"},f.getInputProps("token_renewal_duration"))),l().createElement(r.TextInput,d({label:"Max Token Duration",placeholder:"168h"},f.getInputProps("max_token_duration")))),l().createElement(r.Group,{justify:"flex-end",mt:"md"},l().createElement(r.Button,{variant:"subtle",onClick:()=>{E(!1),g(null),f.reset()}},"Cancel"),l().createElement(r.Button,{type:"submit"},b?"Update Application":"Create Application"))))),l().createElement(r.Modal,{opened:T,onClose:()=>h(!1),title:"Application Details",size:"md"},_&&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,_.app_id),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>k(_.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"}},_.hmac_key.substring(0,16),"..."),l().createElement(r.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>k(_.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"},_.app_link)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Callback URL:"),l().createElement(r.Text,{size:"sm"},_.callback_url)),l().createElement(r.Group,{justify:"space-between"},l().createElement(r.Text,{fw:500},"Token Renewal:"),l().createElement(r.Text,{size:"sm"},_.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"},_.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()(_.created_at).format("MMM DD, YYYY HH:mm"))))))}},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/2821,unix/unix:/tmp/.ICE-unix/2821",COREPACK_ENABLE_AUTO_PIN:"0",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",HOSTNAME:"bazzite",HISTSIZE:"1000",ICEAUTHORITY:"/run/user/1000/iceauth_BYCzKU",NODE:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.6.0/bin/node",SSH_AUTH_SOCK:"/run/user/1000/ssh-agent.socket",MEMORY_PRESSURE_WRITE:"c29tZSAyMDAwMDAgMjAwMDAwMAA=",COLOR:"0",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:"not a tty",EDITOR:"/usr/bin/nano",XDG_SEAT:"seat0",PWD:"/var/home/bazzite/Projects/skybridge/kms/web",XDG_SESSION_DESKTOP:"KDE",LOGNAME:"bazzite",XDG_SESSION_TYPE:"wayland",npm_config_init_module:"/home/bazzite/.npm-init.js",SYSTEMD_EXEC_PID:"2913",_:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin/webpack",XAUTHORITY:"/run/user/1000/xauth_yhtnnV",SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS:"0",VSCODE_GIT_ASKPASS_NODE:"/usr/share/code/code",ENABLE_IDE_INTEGRATION:"true",CLAUDECODE:"1",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:"d321aef5e720442f8313c810fbda021f",MANAGERPID:"2439",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:"27272",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:"2",GIT_EDITOR:"true",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",XDG_VTNR:"2",XDG_SESSION_ID:"2",npm_config_user_agent:"npm/11.5.1 node/v24.6.0 linux x64 workspaces/false",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"delta",npm_execpath:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/bin/npm-cli.js",XDG_RUNTIME_DIR:"/run/user/1000",CLAUDE_CODE_ENTRYPOINT:"cli",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:30102",XDG_DATA_DIRS:"/home/bazzite/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",GDK_BACKEND:"x11",KDE_FULL_SESSION:"true",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.6.0/bin/node",OLDPWD:"/var/home/bazzite/Projects/skybridge/web",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}}}}]); \ No newline at end of file diff --git a/kms/web/dist/main.js b/kms/web/dist/main.js index 6751ada..a5c38b1 100644 --- a/kms/web/dist/main.js +++ b/kms/web/dist/main.js @@ -1,2 +1,2 @@ /*! For license information please see main.js.LICENSE.txt */ -(()=>{var e,t,r,n,a={2017:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,a,o;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(a=n;0!==a--;)if(!e(t[a],r[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(o=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(a=n;0!==a--;)if(!Object.prototype.hasOwnProperty.call(r,o[a]))return!1;for(a=n;0!==a--;){var i=o[a];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},4353:function(e){e.exports=function(){"use strict";var e=6e4,t=36e5,r="millisecond",n="second",a="minute",o="hour",i="day",s="week",l="month",c="quarter",u="year",d="date",p="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,h={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},b=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},E={s:b,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),a=r%60;return(t<=0?"+":"-")+b(n,2,"0")+":"+b(a,2,"0")},m:function e(t,r){if(t.date()1)return e(i[0])}else{var s=t.name;y[s]=t,a=s}return!n&&a&&(g=a),a||!n&&g},S=function(e,t){if(v(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new k(r)},_=E;_.l=T,_.i=v,_.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var k=function(){function h(e){this.$L=T(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var b=h.prototype;return b.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(_.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(m);if(n){var a=n[2]-1||0,o=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)):new Date(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)}}return new Date(t)}(e),this.init()},b.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},b.$utils=function(){return _},b.isValid=function(){return!(this.$d.toString()===p)},b.isSame=function(e,t){var r=S(e);return this.startOf(t)<=r&&r<=this.endOf(t)},b.isAfter=function(e,t){return S(e){"use strict";var n=r(6672);t.createRoot=n.createRoot,t.hydrateRoot=n.hydrateRoot},6439:(e,t,r)=>{"use strict";var n={};r.r(n),r.d(n,{hasBrowserEnv:()=>pt,hasStandardBrowserEnv:()=>ft,hasStandardBrowserWebWorkerEnv:()=>ht,navigator:()=>mt,origin:()=>bt});var a,o,i=r(4914),s=r.n(i),l=r(5338),c=r(6672);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}var E;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(E||(E={})),new Set(["lazy","caseSensitive","path","id","index","children"]),Error;const g=["post","put","patch","delete"],y=(new Set(g),["get",...g]);function w(){return w=Object.assign?Object.assign.bind():function(e){for(var t=1;t({basename:u,navigator:s,static:l,future:w({v7_relativeSplatPath:!1},c)}),[u,c,s,l]);"string"==typeof n&&(n=b(n));let{pathname:m="/",search:f="",hash:h="",state:E=null,key:g="default"}=n,y=i.useMemo(()=>{let e=function(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&"/"!==n?null:e.slice(r)||"/"}(m,u);return null==e?null:{location:{pathname:e,search:f,hash:h,state:E,key:g},navigationType:o}},[u,m,f,h,E,g,o]);return null==y?null:i.createElement(v.Provider,{value:d},i.createElement(T.Provider,{children:r,value:y}))}i.Component,i.startTransition,new Promise(()=>{}),i.Component,new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const _=i.startTransition;function k(e){let{basename:t,children:r,future:n,window:o}=e,s=i.useRef();var l;null==s.current&&(s.current=(void 0===(l={window:o,v5Compat:!0})&&(l={}),function(e,t,r,n){void 0===n&&(n={});let{window:o=document.defaultView,v5Compat:i=!1}=n,s=o.history,l=a.Pop,c=null,b=E();function E(){return(s.state||{idx:null}).idx}function g(){l=a.Pop;let e=E(),t=null==e?null:e-b;b=e,c&&c({action:l,location:w.location,delta:t})}function y(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,r="string"==typeof e?e:h(e);return r=r.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==b&&(b=0,s.replaceState(u({},s.state,{idx:b}),""));let w={get action(){return l},get location(){return e(o,s)},listen(e){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(d,g),c=e,()=>{o.removeEventListener(d,g),c=null}},createHref:e=>t(o,e),createURL:y,encodeLocation(e){let t=y(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){l=a.Push;let n=f(w.location,e,t);r&&r(n,e),b=E()+1;let u=m(n,b),d=w.createHref(n);try{s.pushState(u,"",d)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(d)}i&&c&&c({action:l,location:w.location,delta:1})},replace:function(e,t){l=a.Replace;let n=f(w.location,e,t);r&&r(n,e),b=E();let o=m(n,b),u=w.createHref(n);s.replaceState(o,"",u),i&&c&&c({action:l,location:w.location,delta:0})},go:e=>s.go(e)};return w}(function(e,t){let{pathname:r,search:n,hash:a}=e.location;return f("",{pathname:r,search:n,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:h(t)},null,l)));let c=s.current,[b,E]=i.useState({action:c.action,location:c.location}),{v7_startTransition:g}=n||{},y=i.useCallback(e=>{g&&_?_(()=>E(e)):E(e)},[E,g]);return i.useLayoutEffect(()=>c.listen(y),[c,y]),i.useEffect(()=>{return null==(e=n)||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),void(t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation));var e,t},[n]),i.createElement(S,{basename:t,children:r,location:b.location,navigationType:b.action,navigator:c,future:n})}var x,O,A,C;c.flushSync,i.useId,"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement,(C=x||(x={})).UseScrollRestoration="useScrollRestoration",C.UseSubmit="useSubmit",C.UseSubmitFetcher="useSubmitFetcher",C.UseFetcher="useFetcher",C.useViewTransitionState="useViewTransitionState",(A=O||(O={})).UseFetcher="useFetcher",A.UseFetchers="useFetchers",A.UseScrollRestoration="useScrollRestoration";var R=r(7435),D=r(5101);const I="undefined"!=typeof window?i.useLayoutEffect:i.useEffect;function j(e,t){I(()=>{if(e)return window.addEventListener(e,t),()=>window.removeEventListener(e,t)},[e])}function z(e){return null===e||"object"!=typeof e?{}:Object.keys(e).reduce((t,r)=>{const n=e[r];return null!=n&&!1!==n&&(t[r]=n),t},{})}function P(e,t){if(null===t||"object"!=typeof t)return{};const r={...t};return Object.keys(t).forEach(t=>{t.includes(`${String(e)}.`)&&delete r[t]}),r}function L(e,t){const r=e.substring(t.length+1).split(".")[0];return parseInt(r,10)}function F(e,t,r,n){if(void 0===t)return r;const a=`${String(e)}`;let o=r;-1===n&&(o=P(`${a}.${t}`,o));const i={...o},s=new Set;return Object.entries(o).filter(([e])=>{if(!e.startsWith(`${a}.`))return!1;const r=L(e,a);return!Number.isNaN(r)&&r>=t}).forEach(([e,t])=>{const r=L(e,a),o=e.replace(`${a}.${r}`,`${a}.${r+n}`);i[o]=t,s.add(o),s.has(e)||delete i[e]}),i}function M(e){return"string"!=typeof e?[]:e.split(".")}function N(e,t){const r=M(e);if(0===r.length||"object"!=typeof t||null===t)return;let n=t[r[0]];for(let e=1;er!==t),r):r}function q(e,t,r,n){const a=N(e,n);if(!Array.isArray(a))return n;if(a.length<=r)return n;const o=[...a];return o[r]=t,B(e,o,n)}var Y=r(2017);function W(e,t){const r=Object.keys(e);if("string"==typeof t){const n=r.filter(e=>e.startsWith(`${t}.`));return e[t]||n.some(t=>e[t])||!1}return r.some(t=>e[t])}function K(e,t){return e?`${e}-${t.toString()}`:t.toString()}const X=Symbol("root-rule");function J(e,t,r="",n={}){return"object"!=typeof e||null===e?n:Object.keys(e).reduce((n,a)=>{const o=e[a],i=`${""===r?"":`${r}.`}${a}`,s=N(i,t);let l=!1;return"function"==typeof o&&(n[i]=o(s,t,i)),"object"==typeof o&&Array.isArray(s)&&(l=!0,s.forEach((e,r)=>J(o,t,`${i}.${r}`,n)),X in o&&(n[i]=o[X](s,t,i))),"object"==typeof o&&"object"==typeof s&&null!==s&&(l||J(o,t,i,n),X in o&&(n[i]=o[X](s,t,i))),n},n)}function Z(e,t){return function(e){const t=z(e);return{hasErrors:Object.keys(t).length>0,errors:t}}("function"==typeof e?e(t):J(e,t))}function Q(e,t,r){if("string"!=typeof e)return{hasError:!1,error:null};const n=Z(t,r),a=Object.keys(n.errors).find(t=>e.split(".").every((e,r)=>e===t.split(".")[r]));return{hasError:!!a,error:a?n.errors[a]:null}}function ee(e,t){return!!t&&("boolean"==typeof t?t:!!Array.isArray(t)&&t.includes(e.replace(/[.][0-9]+/g,".__MANTINE_FORM_INDEX__")))}function te({name:e,mode:t="controlled",initialValues:r,initialErrors:n={},initialDirty:a={},initialTouched:o={},clearInputErrorOnChange:s=!0,validateInputOnChange:l=!1,validateInputOnBlur:c=!1,onValuesChange:u,transformValues:d=e=>e,enhanceGetInputProps:p,validate:m,onSubmitPreventDefault:f="always",touchTrigger:h="change"}={}){const b=function(e){const[t,r]=(0,i.useState)(z(e)),n=(0,i.useRef)(t),a=(0,i.useCallback)(e=>{r(t=>{const r=z("function"==typeof e?e(t):e);return n.current=r,r})},[]),o=(0,i.useCallback)(()=>a({}),[]),s=(0,i.useCallback)(e=>{void 0!==n.current[e]&&a(t=>{const r={...t};return delete r[e],r})},[t]),l=(0,i.useCallback)((e,t)=>{null==t||!1===t?s(e):n.current[e]!==t&&a(r=>({...r,[e]:t}))},[t]);return{errorsState:t,setErrors:a,clearErrors:o,setFieldError:l,clearFieldError:s}}(n),E=function({initialValues:e,onValuesChange:t,mode:r}){const n=(0,i.useRef)(!1),[a,o]=(0,i.useState)(e||{}),s=(0,i.useRef)(a),l=(0,i.useRef)(a),c=(0,i.useCallback)(({values:e,subscribers:r,updateState:n=!0,mergeWithPreviousValues:a=!0})=>{const i=s.current,l=e instanceof Function?e(s.current):e,c=a?{...i,...l}:l;s.current=c,n&&o(c),t?.(c,i),r?.filter(Boolean).forEach(e=>e({updatedValues:c,previousValues:i}))},[t]),u=(0,i.useCallback)(e=>{const t=N(e.path,s.current),r=e.value instanceof Function?e.value(t):e.value;if(t!==r){const t=s.current,n=B(e.path,r,s.current);c({values:n,updateState:e.updateState}),e.subscribers?.filter(Boolean).forEach(r=>r({path:e.path,updatedValues:n,previousValues:t}))}},[c]),d=(0,i.useCallback)(e=>{l.current=e},[]),p=(0,i.useCallback)((e,t)=>{n.current||(n.current=!0,c({values:e,updateState:"controlled"===r}),d(e),t())},[c]),m=(0,i.useCallback)(()=>{c({values:l.current,updateState:!0,mergeWithPreviousValues:!1})},[c]),f=(0,i.useCallback)(()=>s.current,[]),h=(0,i.useCallback)(()=>l.current,[]);return{initialized:n,stateValues:a,refValues:s,valuesSnapshot:l,setValues:c,setFieldValue:u,resetValues:m,setValuesSnapshot:d,initialize:p,getValues:f,getValuesSnapshot:h}}({initialValues:r,onValuesChange:u,mode:t}),g=function({initialDirty:e,initialTouched:t,mode:r,$values:n}){const[a,o]=(0,i.useState)(t),[s,l]=(0,i.useState)(e),c=(0,i.useRef)(t),u=(0,i.useRef)(e),d=(0,i.useCallback)(e=>{const t="function"==typeof e?e(c.current):e;c.current=t,"controlled"===r&&o(t)},[]),p=(0,i.useCallback)((e,t=!1)=>{const n="function"==typeof e?e(u.current):e;u.current=n,("controlled"===r||t)&&l(n)},[]),m=(0,i.useCallback)(()=>d({}),[]),f=(0,i.useCallback)(e=>{const t=e?{...n.refValues.current,...e}:n.refValues.current;n.setValuesSnapshot(t),p({})},[]),h=(0,i.useCallback)((e,t)=>{d(r=>W(r,e)===t?r:{...r,[e]:t})},[]),b=(0,i.useCallback)((e,t,r)=>{p(r=>W(r,e)===t?r:{...r,[e]:t},r)},[]),E=(0,i.useCallback)((e,t)=>{const r=W(u.current,e),a=!Y(N(e,n.getValuesSnapshot()),t),o=P(e,u.current);o[e]=a,p(o,r!==a)},[]),g=(0,i.useCallback)(e=>W(c.current,e),[]),y=(0,i.useCallback)(e=>p(t=>{if("string"!=typeof e)return t;const r=P(e,t);return delete r[e],Y(r,t)?t:r}),[]),w=(0,i.useCallback)(e=>{if(e){const t=N(e,u.current);if("boolean"==typeof t)return t;const r=N(e,n.refValues.current),a=N(e,n.valuesSnapshot.current);return!Y(r,a)}return Object.keys(u.current).length>0?W(u.current):!Y(n.refValues.current,n.valuesSnapshot.current)},[]),v=(0,i.useCallback)(()=>u.current,[]),T=(0,i.useCallback)(()=>c.current,[]);return{touchedState:a,dirtyState:s,touchedRef:c,dirtyRef:u,setTouched:d,setDirty:p,resetDirty:f,resetTouched:m,isTouched:g,setFieldTouched:h,setFieldDirty:b,setTouchedState:o,setDirtyState:l,clearFieldDirty:y,isDirty:w,getDirty:v,getTouched:T,setCalculatedFieldDirty:E}}({initialDirty:a,initialTouched:o,$values:E,mode:t}),y=function({$values:e,$errors:t,$status:r}){return{reorderListItem:(0,i.useCallback)((n,a)=>{r.clearFieldDirty(n),t.setErrors(e=>function(e,{from:t,to:r},n){const a=`${e}.${t}`,o=`${e}.${r}`,i={...n},s=new Set;return Object.keys(n).forEach(e=>{if(s.has(e))return;let t,r;if(e.startsWith(a)?(t=e,r=e.replace(a,o)):e.startsWith(o)&&(t=e.replace(o,a),r=e),t&&r){const e=i[t],n=i[r];void 0===n?delete i[t]:i[t]=n,void 0===e?delete i[r]:i[r]=e,s.add(t),s.add(r)}}),i}(n,a,e)),e.setValues({values:V(n,a,e.refValues.current),updateState:!0})},[]),removeListItem:(0,i.useCallback)((n,a)=>{r.clearFieldDirty(n),t.setErrors(e=>F(n,a,e,-1)),e.setValues({values:H(n,a,e.refValues.current),updateState:!0})},[]),insertListItem:(0,i.useCallback)((n,a,o)=>{r.clearFieldDirty(n),t.setErrors(e=>F(n,o,e,1)),e.setValues({values:G(n,a,o,e.refValues.current),updateState:!0})},[]),replaceListItem:(0,i.useCallback)((t,n,a)=>{r.clearFieldDirty(t),e.setValues({values:q(t,a,n,e.refValues.current),updateState:!0})},[])}}({$values:E,$errors:b,$status:g}),w=function({$status:e}){const t=(0,i.useRef)({}),r=(0,i.useCallback)((e,r)=>{(0,i.useEffect)(()=>(t.current[e]=t.current[e]||[],t.current[e].push(r),()=>{t.current[e]=t.current[e].filter(e=>e!==r)}),[r])},[]),n=(0,i.useCallback)(r=>t.current[r]?t.current[r].map(t=>n=>t({previousValue:N(r,n.previousValues),value:N(r,n.updatedValues),touched:e.isTouched(r),dirty:e.isDirty(r)})):[],[]);return{subscribers:t,watch:r,getFieldSubscribers:n}}({$status:g}),[v,T]=(0,i.useState)(0),[S,_]=(0,i.useState)({}),[k,x]=(0,i.useState)(!1),O=(0,i.useCallback)(()=>{E.resetValues(),b.clearErrors(),g.resetDirty(),g.resetTouched(),"uncontrolled"===t&&T(e=>e+1)},[]),A=(0,i.useCallback)(e=>{s&&b.clearErrors(),"uncontrolled"===t&&T(e=>e+1),Object.keys(w.subscribers.current).forEach(t=>{N(t,E.refValues.current)!==N(t,e)&&w.getFieldSubscribers(t).forEach(t=>t({previousValues:e,updatedValues:E.refValues.current}))})},[s]),C=(0,i.useCallback)(e=>{const r=E.refValues.current;E.initialize(e,()=>"uncontrolled"===t&&T(e=>e+1)),A(r)},[A]),R=(0,i.useCallback)((e,r,n)=>{const a=ee(e,l),o=r instanceof Function?r(N(e,E.refValues.current)):r;g.setCalculatedFieldDirty(e,o),"change"===h&&g.setFieldTouched(e,!0),!a&&s&&b.clearFieldError(e),E.setFieldValue({path:e,value:r,updateState:"controlled"===t,subscribers:[...w.getFieldSubscribers(e),a?t=>{const r=Q(e,m,t.updatedValues);r.hasError?b.setFieldError(e,r.error):b.clearFieldError(e)}:null,!1!==n?.forceUpdate&&"controlled"!==t?()=>_(t=>({...t,[e]:(t[e]||0)+1})):null]})},[u,m]),D=(0,i.useCallback)(e=>{const r=E.refValues.current;E.setValues({values:e,updateState:"controlled"===t}),A(r)},[u,A]),I=(0,i.useCallback)(()=>{const e=Z(m,E.refValues.current);return b.setErrors(e.errors),e},[m]),L=(0,i.useCallback)(e=>{const t=Q(e,m,E.refValues.current);return t.hasError?b.setFieldError(e,t.error):b.clearFieldError(e),t},[m]),M=(0,i.useCallback)(e=>{e.preventDefault(),O()},[]),$=(0,i.useCallback)(e=>e?!Q(e,m,E.refValues.current).hasError:!Z(m,E.refValues.current).hasErrors,[m]),U=(0,i.useCallback)(t=>document.querySelector(`[data-path="${K(e,t)}"]`),[]),X={watch:w.watch,initialized:E.initialized.current,values:E.stateValues,getValues:E.getValues,getInitialValues:E.getValuesSnapshot,setInitialValues:E.setValuesSnapshot,initialize:C,setValues:D,setFieldValue:R,submitting:k,setSubmitting:x,errors:b.errorsState,setErrors:b.setErrors,setFieldError:b.setFieldError,clearFieldError:b.clearFieldError,clearErrors:b.clearErrors,resetDirty:g.resetDirty,setTouched:g.setTouched,setDirty:g.setDirty,isTouched:g.isTouched,resetTouched:g.resetTouched,isDirty:g.isDirty,getTouched:g.getTouched,getDirty:g.getDirty,reorderListItem:y.reorderListItem,insertListItem:y.insertListItem,removeListItem:y.removeListItem,replaceListItem:y.replaceListItem,reset:O,validate:I,validateField:L,getInputProps:(r,{type:n="input",withError:a=!0,withFocus:o=!0,...i}={})=>{var s;const l={onChange:(s=e=>R(r,e,{forceUpdate:!1}),e=>{if(e)if("function"==typeof e)s(e);else if("object"==typeof e&&"nativeEvent"in e){const{currentTarget:t}=e;t instanceof HTMLInputElement?"checkbox"===t.type?s(t.checked):s(t.value):(t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&s(t.value)}else s(e);else s(e)}),"data-path":K(e,r)};return a&&(l.error=b.errorsState[r]),"checkbox"===n?l["controlled"===t?"checked":"defaultChecked"]=N(r,E.refValues.current):l["controlled"===t?"value":"defaultValue"]=N(r,E.refValues.current),o&&(l.onFocus=()=>g.setFieldTouched(r,!0),l.onBlur=()=>{if(ee(r,c)){const e=Q(r,m,E.refValues.current);e.hasError?b.setFieldError(r,e.error):b.clearFieldError(r)}}),Object.assign(l,p?.({inputProps:l,field:r,options:{type:n,withError:a,withFocus:o,...i},form:X}))},onSubmit:(e,t)=>r=>{"always"===f&&r?.preventDefault();const n=I();if(n.hasErrors)"validation-failed"===f&&r?.preventDefault(),t?.(n.errors,E.refValues.current,r);else{const t=e?.(d(E.refValues.current),r);t instanceof Promise&&(x(!0),t.finally(()=>x(!1)))}},onReset:M,isValid:$,getTransformedValues:e=>d(e||E.refValues.current),key:e=>`${v}-${e}-${S[e]||0}`,getInputNode:U};return function(e,t){e&&function(e){if(!/^[0-9a-zA-Z-]+$/.test(e))throw new Error(`[@mantine/use-form] Form name "${e}" is invalid, it should contain only letters, numbers and dashes`)}(e),j(`mantine-form:${e}:set-field-value`,e=>t.setFieldValue(e.detail.path,e.detail.value)),j(`mantine-form:${e}:set-values`,e=>t.setValues(e.detail)),j(`mantine-form:${e}:set-initial-values`,e=>t.setInitialValues(e.detail)),j(`mantine-form:${e}:set-errors`,e=>t.setErrors(e.detail)),j(`mantine-form:${e}:set-field-error`,e=>t.setFieldError(e.detail.path,e.detail.error)),j(`mantine-form:${e}:clear-field-error`,e=>t.clearFieldError(e.detail)),j(`mantine-form:${e}:clear-errors`,t.clearErrors),j(`mantine-form:${e}:reset`,t.reset),j(`mantine-form:${e}:validate`,t.validate),j(`mantine-form:${e}:validate-field`,e=>t.validateField(e.detail)),j(`mantine-form:${e}:reorder-list-item`,e=>t.reorderListItem(e.detail.path,e.detail.payload)),j(`mantine-form:${e}:remove-list-item`,e=>t.removeListItem(e.detail.path,e.detail.index)),j(`mantine-form:${e}:insert-list-item`,e=>t.insertListItem(e.detail.path,e.detail.item,e.detail.index)),j(`mantine-form:${e}:set-dirty`,e=>t.setDirty(e.detail)),j(`mantine-form:${e}:set-touched`,e=>t.setTouched(e.detail)),j(`mantine-form:${e}:reset-dirty`,e=>t.resetDirty(e.detail)),j(`mantine-form:${e}:reset-touched`,t.resetTouched)}(e,X),X}var re=r(7373);function ne(e,t){return function(){return e.apply(t,arguments)}}const{toString:ae}=Object.prototype,{getPrototypeOf:oe}=Object,{iterator:ie,toStringTag:se}=Symbol,le=(ce=Object.create(null),e=>{const t=ae.call(e);return ce[t]||(ce[t]=t.slice(8,-1).toLowerCase())});var ce;const ue=e=>(e=e.toLowerCase(),t=>le(t)===e),de=e=>t=>typeof t===e,{isArray:pe}=Array,me=de("undefined");function fe(e){return null!==e&&!me(e)&&null!==e.constructor&&!me(e.constructor)&&Ee(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const he=ue("ArrayBuffer"),be=de("string"),Ee=de("function"),ge=de("number"),ye=e=>null!==e&&"object"==typeof e,we=e=>{if("object"!==le(e))return!1;const t=oe(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||se in e||ie in e)},ve=ue("Date"),Te=ue("File"),Se=ue("Blob"),_e=ue("FileList"),ke=ue("URLSearchParams"),[xe,Oe,Ae,Ce]=["ReadableStream","Request","Response","Headers"].map(ue);function Re(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,a;if("object"!=typeof e&&(e=[e]),pe(e))for(n=0,a=e.length;n0;)if(n=r[a],t===n.toLowerCase())return n;return null}const Ie="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,je=e=>!me(e)&&e!==Ie,ze=(Pe="undefined"!=typeof Uint8Array&&oe(Uint8Array),e=>Pe&&e instanceof Pe);var Pe;const Le=ue("HTMLFormElement"),Fe=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),Me=ue("RegExp"),Ne=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};Re(r,(r,a)=>{let o;!1!==(o=t(r,a,e))&&(n[a]=o||r)}),Object.defineProperties(e,n)},$e=ue("AsyncFunction"),Ue=(Be="function"==typeof setImmediate,Ve=Ee(Ie.postMessage),Be?setImmediate:Ve?(Ge=`axios@${Math.random()}`,He=[],Ie.addEventListener("message",({source:e,data:t})=>{e===Ie&&t===Ge&&He.length&&He.shift()()},!1),e=>{He.push(e),Ie.postMessage(Ge,"*")}):e=>setTimeout(e));var Be,Ve,Ge,He;const qe="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ie):"undefined"!=typeof process&&process.nextTick||Ue,Ye={isArray:pe,isArrayBuffer:he,isBuffer:fe,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Ee(e.append)&&("formdata"===(t=le(e))||"object"===t&&Ee(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&he(e.buffer),t},isString:be,isNumber:ge,isBoolean:e=>!0===e||!1===e,isObject:ye,isPlainObject:we,isEmptyObject:e=>{if(!ye(e)||fe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:xe,isRequest:Oe,isResponse:Ae,isHeaders:Ce,isUndefined:me,isDate:ve,isFile:Te,isBlob:Se,isRegExp:Me,isFunction:Ee,isStream:e=>ye(e)&&Ee(e.pipe),isURLSearchParams:ke,isTypedArray:ze,isFileList:_e,forEach:Re,merge:function e(){const{caseless:t}=je(this)&&this||{},r={},n=(n,a)=>{const o=t&&De(r,a)||a;we(r[o])&&we(n)?r[o]=e(r[o],n):we(n)?r[o]=e({},n):pe(n)?r[o]=n.slice():r[o]=n};for(let e=0,t=arguments.length;e(Re(t,(t,n)=>{r&&Ee(t)?e[n]=ne(t,r):e[n]=t},{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let a,o,i;const s={};if(t=t||{},null==e)return t;do{for(a=Object.getOwnPropertyNames(e),o=a.length;o-- >0;)i=a[o],n&&!n(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==r&&oe(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:le,kindOfTest:ue,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(pe(e))return e;let t=e.length;if(!ge(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[ie]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:Le,hasOwnProperty:Fe,hasOwnProp:Fe,reduceDescriptors:Ne,freezeMethods:e=>{Ne(e,(t,r)=>{if(Ee(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];Ee(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))})},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach(e=>{r[e]=!0})};return pe(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,r){return t.toUpperCase()+r}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:De,global:Ie,isContextDefined:je,isSpecCompliantForm:function(e){return!!(e&&Ee(e.append)&&"FormData"===e[se]&&e[ie])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(ye(e)){if(t.indexOf(e)>=0)return;if(fe(e))return e;if(!("toJSON"in e)){t[n]=e;const a=pe(e)?[]:{};return Re(e,(e,t)=>{const o=r(e,n+1);!me(o)&&(a[t]=o)}),t[n]=void 0,a}}return e};return r(e,0)},isAsyncFn:$e,isThenable:e=>e&&(ye(e)||Ee(e))&&Ee(e.then)&&Ee(e.catch),setImmediate:Ue,asap:qe,isIterable:e=>null!=e&&Ee(e[ie])};function We(e,t,r,n,a){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),a&&(this.response=a,this.status=a.status?a.status:null)}Ye.inherits(We,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Ye.toJSONObject(this.config),code:this.code,status:this.status}}});const Ke=We.prototype,Xe={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Xe[e]={value:e}}),Object.defineProperties(We,Xe),Object.defineProperty(Ke,"isAxiosError",{value:!0}),We.from=(e,t,r,n,a,o)=>{const i=Object.create(Ke);return Ye.toFlatObject(e,i,function(e){return e!==Error.prototype},e=>"isAxiosError"!==e),We.call(i,e.message,t,r,n,a),i.cause=e,i.name=e.name,o&&Object.assign(i,o),i};const Je=We;function Ze(e){return Ye.isPlainObject(e)||Ye.isArray(e)}function Qe(e){return Ye.endsWith(e,"[]")?e.slice(0,-2):e}function et(e,t,r){return e?e.concat(t).map(function(e,t){return e=Qe(e),!r&&t?"["+e+"]":e}).join(r?".":""):t}const tt=Ye.toFlatObject(Ye,{},null,function(e){return/^is[A-Z]/.test(e)}),rt=function(e,t,r){if(!Ye.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=Ye.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!Ye.isUndefined(t[e])})).metaTokens,a=r.visitor||c,o=r.dots,i=r.indexes,s=(r.Blob||"undefined"!=typeof Blob&&Blob)&&Ye.isSpecCompliantForm(t);if(!Ye.isFunction(a))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(Ye.isDate(e))return e.toISOString();if(Ye.isBoolean(e))return e.toString();if(!s&&Ye.isBlob(e))throw new Je("Blob is not supported. Use a Buffer instead.");return Ye.isArrayBuffer(e)||Ye.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,r,a){let s=e;if(e&&!a&&"object"==typeof e)if(Ye.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(Ye.isArray(e)&&function(e){return Ye.isArray(e)&&!e.some(Ze)}(e)||(Ye.isFileList(e)||Ye.endsWith(r,"[]"))&&(s=Ye.toArray(e)))return r=Qe(r),s.forEach(function(e,n){!Ye.isUndefined(e)&&null!==e&&t.append(!0===i?et([r],n,o):null===i?r:r+"[]",l(e))}),!1;return!!Ze(e)||(t.append(et(a,r,o),l(e)),!1)}const u=[],d=Object.assign(tt,{defaultVisitor:c,convertValue:l,isVisitable:Ze});if(!Ye.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!Ye.isUndefined(r)){if(-1!==u.indexOf(r))throw Error("Circular reference detected in "+n.join("."));u.push(r),Ye.forEach(r,function(r,o){!0===(!(Ye.isUndefined(r)||null===r)&&a.call(t,r,Ye.isString(o)?o.trim():o,n,d))&&e(r,n?n.concat(o):[o])}),u.pop()}}(e),t};function nt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function at(e,t){this._pairs=[],e&&rt(e,this,t)}const ot=at.prototype;ot.append=function(e,t){this._pairs.push([e,t])},ot.toString=function(e){const t=e?function(t){return e.call(this,t,nt)}:nt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};const it=at;function st(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function lt(e,t,r){if(!t)return e;const n=r&&r.encode||st;Ye.isFunction(r)&&(r={serialize:r});const a=r&&r.serialize;let o;if(o=a?a(t,r):Ye.isURLSearchParams(t)?t.toString():new it(t,r).toString(n),o){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}const ct=class{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Ye.forEach(this.handlers,function(t){null!==t&&e(t)})}},ut={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},dt={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:it,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},pt="undefined"!=typeof window&&"undefined"!=typeof document,mt="object"==typeof navigator&&navigator||void 0,ft=pt&&(!mt||["ReactNative","NativeScript","NS"].indexOf(mt.product)<0),ht="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,bt=pt&&window.location.href||"http://localhost",Et={...n,...dt},gt=function(e){function t(e,r,n,a){let o=e[a++];if("__proto__"===o)return!0;const i=Number.isFinite(+o),s=a>=e.length;return o=!o&&Ye.isArray(n)?n.length:o,s?(Ye.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!i):(n[o]&&Ye.isObject(n[o])||(n[o]=[]),t(e,r,n[o],a)&&Ye.isArray(n[o])&&(n[o]=function(e){const t={},r=Object.keys(e);let n;const a=r.length;let o;for(n=0;n{t(function(e){return Ye.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),n,r,0)}),r}return null},yt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,a=Ye.isObject(e);if(a&&Ye.isHTMLForm(e)&&(e=new FormData(e)),Ye.isFormData(e))return n?JSON.stringify(gt(e)):e;if(Ye.isArrayBuffer(e)||Ye.isBuffer(e)||Ye.isStream(e)||Ye.isFile(e)||Ye.isBlob(e)||Ye.isReadableStream(e))return e;if(Ye.isArrayBufferView(e))return e.buffer;if(Ye.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(a){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return rt(e,new Et.classes.URLSearchParams,{visitor:function(e,t,r,n){return Et.isNode&&Ye.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((o=Ye.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return rt(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return a||n?(t.setContentType("application/json",!1),function(e){if(Ye.isString(e))try{return(0,JSON.parse)(e),Ye.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||yt.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(Ye.isResponse(e)||Ye.isReadableStream(e))return e;if(e&&Ye.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw Je.from(e,Je.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Et.classes.FormData,Blob:Et.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Ye.forEach(["delete","get","head","post","put","patch"],e=>{yt.headers[e]={}});const wt=yt,vt=Ye.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Tt=Symbol("internals");function St(e){return e&&String(e).trim().toLowerCase()}function _t(e){return!1===e||null==e?e:Ye.isArray(e)?e.map(_t):String(e)}function kt(e,t,r,n,a){return Ye.isFunction(n)?n.call(this,t,r):(a&&(t=r),Ye.isString(t)?Ye.isString(n)?-1!==t.indexOf(n):Ye.isRegExp(n)?n.test(t):void 0:void 0)}class xt{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function a(e,t,r){const a=St(t);if(!a)throw new Error("header name must be a non-empty string");const o=Ye.findKey(n,a);(!o||void 0===n[o]||!0===r||void 0===r&&!1!==n[o])&&(n[o||t]=_t(e))}const o=(e,t)=>Ye.forEach(e,(e,r)=>a(e,r,t));if(Ye.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(Ye.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))o((e=>{const t={};let r,n,a;return e&&e.split("\n").forEach(function(e){a=e.indexOf(":"),r=e.substring(0,a).trim().toLowerCase(),n=e.substring(a+1).trim(),!r||t[r]&&vt[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t})(e),t);else if(Ye.isObject(e)&&Ye.isIterable(e)){let r,n,a={};for(const t of e){if(!Ye.isArray(t))throw TypeError("Object iterator must return a key-value pair");a[n=t[0]]=(r=a[n])?Ye.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}o(a,t)}else null!=e&&a(t,e,r);return this}get(e,t){if(e=St(e)){const r=Ye.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(Ye.isFunction(t))return t.call(this,e,r);if(Ye.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=St(e)){const r=Ye.findKey(this,e);return!(!r||void 0===this[r]||t&&!kt(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function a(e){if(e=St(e)){const a=Ye.findKey(r,e);!a||t&&!kt(0,r[a],a,t)||(delete r[a],n=!0)}}return Ye.isArray(e)?e.forEach(a):a(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const a=t[r];e&&!kt(0,this[a],a,e,!0)||(delete this[a],n=!0)}return n}normalize(e){const t=this,r={};return Ye.forEach(this,(n,a)=>{const o=Ye.findKey(r,a);if(o)return t[o]=_t(n),void delete t[a];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}(a):String(a).trim();i!==a&&delete t[a],t[i]=_t(n),r[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Ye.forEach(this,(r,n)=>{null!=r&&!1!==r&&(t[n]=e&&Ye.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(e=>r.set(e)),r}static accessor(e){const t=(this[Tt]=this[Tt]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=St(e);t[n]||(function(e,t){const r=Ye.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(e,r,a){return this[n].call(this,t,e,r,a)},configurable:!0})})}(r,e),t[n]=!0)}return Ye.isArray(e)?e.forEach(n):n(e),this}}xt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Ye.reduceDescriptors(xt.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}}),Ye.freezeMethods(xt);const Ot=xt;function At(e,t){const r=this||wt,n=t||r,a=Ot.from(n.headers);let o=n.data;return Ye.forEach(e,function(e){o=e.call(r,o,a.normalize(),t?t.status:void 0)}),a.normalize(),o}function Ct(e){return!(!e||!e.__CANCEL__)}function Rt(e,t,r){Je.call(this,null==e?"canceled":e,Je.ERR_CANCELED,t,r),this.name="CanceledError"}Ye.inherits(Rt,Je,{__CANCEL__:!0});const Dt=Rt;function It(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new Je("Request failed with status code "+r.status,[Je.ERR_BAD_REQUEST,Je.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}const jt=(e,t,r=3)=>{let n=0;const a=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let a,o=0,i=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=n[i];a||(a=l),r[o]=s,n[o]=l;let u=i,d=0;for(;u!==o;)d+=r[u++],u%=e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),l-a{a=o,r=null,n&&(clearTimeout(n),n=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-a;s>=o?i(e,t):(r=e,n||(n=setTimeout(()=>{n=null,i(r)},o-s)))},()=>r&&i(r)]}(r=>{const o=r.loaded,i=r.lengthComputable?r.total:void 0,s=o-n,l=a(s);n=o,e({loaded:o,total:i,progress:i?o/i:void 0,bytes:s,rate:l||void 0,estimated:l&&i&&o<=i?(i-o)/l:void 0,event:r,lengthComputable:null!=i,[t?"download":"upload"]:!0})},r)},zt=(e,t)=>{const r=null!=e;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},Pt=e=>(...t)=>Ye.asap(()=>e(...t)),Lt=Et.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,Et.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(Et.origin),Et.navigator&&/(msie|trident)/i.test(Et.navigator.userAgent)):()=>!0,Ft=Et.hasStandardBrowserEnv?{write(e,t,r,n,a,o){const i=[e+"="+encodeURIComponent(t)];Ye.isNumber(r)&&i.push("expires="+new Date(r).toGMTString()),Ye.isString(n)&&i.push("path="+n),Ye.isString(a)&&i.push("domain="+a),!0===o&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Mt(e,t,r){let n=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(n||0==r)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Nt=e=>e instanceof Ot?{...e}:e;function $t(e,t){t=t||{};const r={};function n(e,t,r,n){return Ye.isPlainObject(e)&&Ye.isPlainObject(t)?Ye.merge.call({caseless:n},e,t):Ye.isPlainObject(t)?Ye.merge({},t):Ye.isArray(t)?t.slice():t}function a(e,t,r,a){return Ye.isUndefined(t)?Ye.isUndefined(e)?void 0:n(void 0,e,0,a):n(e,t,0,a)}function o(e,t){if(!Ye.isUndefined(t))return n(void 0,t)}function i(e,t){return Ye.isUndefined(t)?Ye.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function s(r,a,o){return o in t?n(r,a):o in e?n(void 0,r):void 0}const l={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,r)=>a(Nt(e),Nt(t),0,!0)};return Ye.forEach(Object.keys({...e,...t}),function(n){const o=l[n]||a,i=o(e[n],t[n],n);Ye.isUndefined(i)&&o!==s||(r[n]=i)}),r}const Ut=e=>{const t=$t({},e);let r,{data:n,withXSRFToken:a,xsrfHeaderName:o,xsrfCookieName:i,headers:s,auth:l}=t;if(t.headers=s=Ot.from(s),t.url=lt(Mt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),Ye.isFormData(n))if(Et.hasStandardBrowserEnv||Et.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(r=s.getContentType())){const[e,...t]=r?r.split(";").map(e=>e.trim()).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(Et.hasStandardBrowserEnv&&(a&&Ye.isFunction(a)&&(a=a(t)),a||!1!==a&&Lt(t.url))){const e=o&&i&&Ft.read(i);e&&s.set(o,e)}return t},Bt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,r){const n=Ut(e);let a=n.data;const o=Ot.from(n.headers).normalize();let i,s,l,c,u,{responseType:d,onUploadProgress:p,onDownloadProgress:m}=n;function f(){c&&c(),u&&u(),n.cancelToken&&n.cancelToken.unsubscribe(i),n.signal&&n.signal.removeEventListener("abort",i)}let h=new XMLHttpRequest;function b(){if(!h)return;const n=Ot.from("getAllResponseHeaders"in h&&h.getAllResponseHeaders());It(function(e){t(e),f()},function(e){r(e),f()},{data:d&&"text"!==d&&"json"!==d?h.response:h.responseText,status:h.status,statusText:h.statusText,headers:n,config:e,request:h}),h=null}h.open(n.method.toUpperCase(),n.url,!0),h.timeout=n.timeout,"onloadend"in h?h.onloadend=b:h.onreadystatechange=function(){h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))&&setTimeout(b)},h.onabort=function(){h&&(r(new Je("Request aborted",Je.ECONNABORTED,e,h)),h=null)},h.onerror=function(){r(new Je("Network Error",Je.ERR_NETWORK,e,h)),h=null},h.ontimeout=function(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const a=n.transitional||ut;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new Je(t,a.clarifyTimeoutError?Je.ETIMEDOUT:Je.ECONNABORTED,e,h)),h=null},void 0===a&&o.setContentType(null),"setRequestHeader"in h&&Ye.forEach(o.toJSON(),function(e,t){h.setRequestHeader(t,e)}),Ye.isUndefined(n.withCredentials)||(h.withCredentials=!!n.withCredentials),d&&"json"!==d&&(h.responseType=n.responseType),m&&([l,u]=jt(m,!0),h.addEventListener("progress",l)),p&&h.upload&&([s,c]=jt(p),h.upload.addEventListener("progress",s),h.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(i=t=>{h&&(r(!t||t.type?new Dt(null,e,h):t),h.abort(),h=null)},n.cancelToken&&n.cancelToken.subscribe(i),n.signal&&(n.signal.aborted?i():n.signal.addEventListener("abort",i)));const E=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(n.url);E&&-1===Et.protocols.indexOf(E)?r(new Je("Unsupported protocol "+E+":",Je.ERR_BAD_REQUEST,e)):h.send(a||null)})},Vt=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,n=new AbortController;const a=function(e){if(!r){r=!0,i();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Je?t:new Dt(t instanceof Error?t.message:t))}};let o=t&&setTimeout(()=>{o=null,a(new Je(`timeout ${t} of ms exceeded`,Je.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(a):e.removeEventListener("abort",a)}),e=null)};e.forEach(e=>e.addEventListener("abort",a));const{signal:s}=n;return s.unsubscribe=()=>Ye.asap(i),s}},Gt=function*(e,t){let r=e.byteLength;if(!t||r{const a=async function*(e,t){for await(const r of async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}}finally{await t.cancel()}}(e))yield*Gt(r,t)}(e,t);let o,i=0,s=e=>{o||(o=!0,n&&n(e))};return new ReadableStream({async pull(e){try{const{done:t,value:n}=await a.next();if(t)return s(),void e.close();let o=n.byteLength;if(r){let e=i+=o;r(e)}e.enqueue(new Uint8Array(n))}catch(e){throw s(e),e}},cancel:e=>(s(e),a.return())},{highWaterMark:2})},qt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Yt=qt&&"function"==typeof ReadableStream,Wt=qt&&("function"==typeof TextEncoder?(Kt=new TextEncoder,e=>Kt.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Kt;const Xt=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Jt=Yt&&Xt(()=>{let e=!1;const t=new Request(Et.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Zt=Yt&&Xt(()=>Ye.isReadableStream(new Response("").body)),Qt={stream:Zt&&(e=>e.body)};var er;qt&&(er=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Qt[e]&&(Qt[e]=Ye.isFunction(er[e])?t=>t[e]():(t,r)=>{throw new Je(`Response type '${e}' is not supported`,Je.ERR_NOT_SUPPORT,r)})}));const tr={http:null,xhr:Bt,fetch:qt&&(async e=>{let{url:t,method:r,data:n,signal:a,cancelToken:o,timeout:i,onDownloadProgress:s,onUploadProgress:l,responseType:c,headers:u,withCredentials:d="same-origin",fetchOptions:p}=Ut(e);c=c?(c+"").toLowerCase():"text";let m,f=Vt([a,o&&o.toAbortSignal()],i);const h=f&&f.unsubscribe&&(()=>{f.unsubscribe()});let b;try{if(l&&Jt&&"get"!==r&&"head"!==r&&0!==(b=await(async(e,t)=>{const r=Ye.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(Ye.isBlob(e))return e.size;if(Ye.isSpecCompliantForm(e)){const t=new Request(Et.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return Ye.isArrayBufferView(e)||Ye.isArrayBuffer(e)?e.byteLength:(Ye.isURLSearchParams(e)&&(e+=""),Ye.isString(e)?(await Wt(e)).byteLength:void 0)})(t):r})(u,n))){let e,r=new Request(t,{method:"POST",body:n,duplex:"half"});if(Ye.isFormData(n)&&(e=r.headers.get("content-type"))&&u.setContentType(e),r.body){const[e,t]=zt(b,jt(Pt(l)));n=Ht(r.body,65536,e,t)}}Ye.isString(d)||(d=d?"include":"omit");const a="credentials"in Request.prototype;m=new Request(t,{...p,signal:f,method:r.toUpperCase(),headers:u.normalize().toJSON(),body:n,duplex:"half",credentials:a?d:void 0});let o=await fetch(m,p);const i=Zt&&("stream"===c||"response"===c);if(Zt&&(s||i&&h)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=o[t]});const t=Ye.toFiniteNumber(o.headers.get("content-length")),[r,n]=s&&zt(t,jt(Pt(s),!0))||[];o=new Response(Ht(o.body,65536,r,()=>{n&&n(),h&&h()}),e)}c=c||"text";let E=await Qt[Ye.findKey(Qt,c)||"text"](o,e);return!i&&h&&h(),await new Promise((t,r)=>{It(t,r,{data:E,headers:Ot.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:m})})}catch(t){if(h&&h(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Je("Network Error",Je.ERR_NETWORK,e,m),{cause:t.cause||t});throw Je.from(t,t&&t.code,e,m)}})};Ye.forEach(tr,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const rr=e=>`- ${e}`,nr=e=>Ye.isFunction(e)||null===e||!1===e,ar=e=>{e=Ye.isArray(e)?e:[e];const{length:t}=e;let r,n;const a={};for(let o=0;o`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let r=t?e.length>1?"since :\n"+e.map(rr).join("\n"):" "+rr(e[0]):"as no adapter specified";throw new Je("There is no suitable adapter to dispatch the request "+r,"ERR_NOT_SUPPORT")}return n};function or(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Dt(null,e)}function ir(e){return or(e),e.headers=Ot.from(e.headers),e.data=At.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ar(e.adapter||wt.adapter)(e).then(function(t){return or(e),t.data=At.call(e,e.transformResponse,t),t.headers=Ot.from(t.headers),t},function(t){return Ct(t)||(or(e),t&&t.response&&(t.response.data=At.call(e,e.transformResponse,t.response),t.response.headers=Ot.from(t.response.headers))),Promise.reject(t)})}const sr="1.11.0",lr={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{lr[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const cr={};lr.transitional=function(e,t,r){function n(e,t){return"[Axios v"+sr+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,a,o)=>{if(!1===e)throw new Je(n(a," has been removed"+(t?" in "+t:"")),Je.ERR_DEPRECATED);return t&&!cr[a]&&(cr[a]=!0,console.warn(n(a," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,a,o)}},lr.spelling=function(e){return(t,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};const ur={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Je("options must be an object",Je.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let a=n.length;for(;a-- >0;){const o=n[a],i=t[o];if(i){const t=e[o],r=void 0===t||i(t,o,e);if(!0!==r)throw new Je("option "+o+" must be "+r,Je.ERR_BAD_OPTION_VALUE);continue}if(!0!==r)throw new Je("Unknown option "+o,Je.ERR_BAD_OPTION)}},validators:lr},dr=ur.validators;class pr{constructor(e){this.defaults=e||{},this.interceptors={request:new ct,response:new ct}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=$t(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:a}=t;void 0!==r&&ur.assertOptions(r,{silentJSONParsing:dr.transitional(dr.boolean),forcedJSONParsing:dr.transitional(dr.boolean),clarifyTimeoutError:dr.transitional(dr.boolean)},!1),null!=n&&(Ye.isFunction(n)?t.paramsSerializer={serialize:n}:ur.assertOptions(n,{encode:dr.function,serialize:dr.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ur.assertOptions(t,{baseUrl:dr.spelling("baseURL"),withXsrfToken:dr.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=a&&Ye.merge(a.common,a[t.method]);a&&Ye.forEach(["delete","get","head","post","put","patch","common"],e=>{delete a[e]}),t.headers=Ot.concat(o,a);const i=[];let s=!0;this.interceptors.request.forEach(function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,i.unshift(e.fulfilled,e.rejected))});const l=[];let c;this.interceptors.response.forEach(function(e){l.push(e.fulfilled,e.rejected)});let u,d=0;if(!s){const e=[ir.bind(this),void 0];for(e.unshift(...i),e.push(...l),u=e.length,c=Promise.resolve(t);d{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null}),this.promise.then=e=>{let t;const n=new Promise(e=>{r.subscribe(e),t=e}).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e(function(e,n,a){r.reason||(r.reason=new Dt(e,n,a),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new fr(function(t){e=t}),cancel:e}}}const hr=fr,br={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(br).forEach(([e,t])=>{br[t]=e});const Er=br,gr=function e(t){const r=new mr(t),n=ne(mr.prototype.request,r);return Ye.extend(n,mr.prototype,r,{allOwnKeys:!0}),Ye.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e($t(t,r))},n}(wt);gr.Axios=mr,gr.CanceledError=Dt,gr.CancelToken=hr,gr.isCancel=Ct,gr.VERSION=sr,gr.toFormData=rt,gr.AxiosError=Je,gr.Cancel=gr.CanceledError,gr.all=function(e){return Promise.all(e)},gr.spread=function(e){return function(t){return e.apply(null,t)}},gr.isAxiosError=function(e){return Ye.isObject(e)&&!0===e.isAxiosError},gr.mergeConfig=$t,gr.AxiosHeaders=Ot,gr.formToJSON=e=>gt(Ye.isHTMLForm(e)?new FormData(e):e),gr.getAdapter=ar,gr.HttpStatusCode=Er,gr.default=gr;const yr=gr,wr=new class{constructor(){this.baseURL={SHELL:"/bin/bash",npm_command:"run",SESSION_MANAGER:"local/unix:@/tmp/.ICE-unix/2821,unix/unix:/tmp/.ICE-unix/2821",COREPACK_ENABLE_AUTO_PIN:"0",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",HOSTNAME:"bazzite",HISTSIZE:"1000",ICEAUTHORITY:"/run/user/1000/iceauth_BYCzKU",NODE:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.6.0/bin/node",SSH_AUTH_SOCK:"/run/user/1000/ssh-agent.socket",MEMORY_PRESSURE_WRITE:"c29tZSAyMDAwMDAgMjAwMDAwMAA=",COLOR:"0",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:"not a tty",EDITOR:"/usr/bin/nano",XDG_SEAT:"seat0",PWD:"/var/home/bazzite/Projects/skybridge/kms/web",XDG_SESSION_DESKTOP:"KDE",LOGNAME:"bazzite",XDG_SESSION_TYPE:"wayland",npm_config_init_module:"/home/bazzite/.npm-init.js",SYSTEMD_EXEC_PID:"2913",_:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin/webpack",XAUTHORITY:"/run/user/1000/xauth_yhtnnV",SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS:"0",VSCODE_GIT_ASKPASS_NODE:"/usr/share/code/code",ENABLE_IDE_INTEGRATION:"true",CLAUDECODE:"1",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:"d321aef5e720442f8313c810fbda021f",MANAGERPID:"2439",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:"27272",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:"2",GIT_EDITOR:"true",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",XDG_VTNR:"2",XDG_SESSION_ID:"2",npm_config_user_agent:"npm/11.5.1 node/v24.6.0 linux x64 workspaces/false",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"delta",npm_execpath:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/bin/npm-cli.js",XDG_RUNTIME_DIR:"/run/user/1000",CLAUDE_CODE_ENTRYPOINT:"cli",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:30102",XDG_DATA_DIRS:"/home/bazzite/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",GDK_BACKEND:"x11",KDE_FULL_SESSION:"true",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.6.0/bin/node",TERM_PROGRAM:"vscode"}.REACT_APP_API_URL||"http://localhost:8080",this.api=yr.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,r=0){return(await this.api.get(`/api/applications/${e}/tokens?limit=${t}&offset=${r}`)).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 r="/api/audit/events"+(t.toString()?"?"+t.toString():"");return(await this.api.get(r)).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 r="/api/audit/stats"+(t.toString()?"?"+t.toString():"");return(await this.api.get(r)).data}};var vr=r(4353),Tr=r.n(vr);function Sr(){return Sr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(!1),[l,c]=(0,i.useState)(null),[u,d]=(0,i.useState)(!1),[p,m]=(0,i.useState)(null),f=te({initialValues:{app_id:"",app_link:"",type:[],callback_url:"",token_prefix:"",token_renewal_duration:"24h",max_token_duration:"168h",owner:{type:"user",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,i.useEffect)(()=>{h()},[]);const h=async()=>{try{n(!0);const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e),re.notifications.show({title:"Error",message:"Failed to load applications",color:"red"})}finally{n(!1)}},b=e=>{navigator.clipboard.writeText(e),re.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},E=e.map(e=>s().createElement(R.Table.Tr,{key:e.app_id},s().createElement(R.Table.Td,null,s().createElement(R.Text,{fw:500},e.app_id)),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},e.type.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm"},e)))),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.created_at).format("MMM DD, YYYY"))),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>(e=>{m(e),d(!0)})(e),title:"View Details"},s().createElement(D.IconEye,{size:16})),s().createElement(R.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>(e=>{c(e),f.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}),o(!0)})(e),title:"Edit"},s().createElement(D.IconEdit,{size:16})),s().createElement(R.ActionIcon,{variant:"subtle",color:"red",onClick:()=>(async e=>{if(window.confirm("Are you sure you want to delete this application?"))try{await wr.deleteApplication(e),re.notifications.show({title:"Success",message:"Application deleted successfully",color:"green"}),h()}catch(e){console.error("Failed to delete application:",e),re.notifications.show({title:"Error",message:"Failed to delete application",color:"red"})}})(e.app_id),title:"Delete"},s().createElement(D.IconTrash,{size:16}))))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Applications"),s().createElement(R.Text,{c:"dimmed"},"Manage your registered applications and their configurations")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{c(null),f.reset(),o(!0)}},"New Application")),r?s().createElement(R.Stack,{align:"center",justify:"center",h:200},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading applications...")):0===e.length?s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},s().createElement(R.Stack,{align:"center",gap:"md"},s().createElement(D.IconAlertCircle,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No applications found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},"Create your first application to get started with the key management system")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{c(null),f.reset(),o(!0)}},"Create Application"))):s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Application ID"),s().createElement(R.Table.Th,null,"Type"),s().createElement(R.Table.Th,null,"Owner"),s().createElement(R.Table.Th,null,"Created"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,E))),s().createElement(R.Modal,{opened:a,onClose:()=>{o(!1),c(null),f.reset()},title:l?"Edit Application":"Create New Application",size:"lg"},s().createElement("form",{onSubmit:f.onSubmit(async e=>{try{l?(await wr.updateApplication(l.app_id,e),re.notifications.show({title:"Success",message:"Application updated successfully",color:"green"})):(await wr.createApplication(e),re.notifications.show({title:"Success",message:"Application created successfully",color:"green"})),o(!1),c(null),f.reset(),h()}catch(e){console.error("Failed to save application:",e),re.notifications.show({title:"Error",message:"Failed to save application",color:"red"})}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.TextInput,Sr({label:"Application ID",placeholder:"my-app-id",required:!0},f.getInputProps("app_id"),{disabled:!!l})),s().createElement(R.TextInput,Sr({label:"Application Link",placeholder:"https://myapp.example.com",required:!0},f.getInputProps("app_link"))),s().createElement(R.MultiSelect,Sr({label:"Application Type",placeholder:"Select application types",data:[{value:"web",label:"Web Application"},{value:"mobile",label:"Mobile Application"},{value:"api",label:"API Service"},{value:"cli",label:"CLI Tool"},{value:"service",label:"Background Service"}],required:!0},f.getInputProps("type"))),s().createElement(R.TextInput,Sr({label:"Callback URL",placeholder:"https://myapp.example.com/callback",required:!0},f.getInputProps("callback_url"))),s().createElement(R.TextInput,Sr({label:"Token Prefix (Optional)",placeholder:"myapp_"},f.getInputProps("token_prefix"))),s().createElement(R.Group,{grow:!0},s().createElement(R.TextInput,Sr({label:"Token Renewal Duration",placeholder:"24h"},f.getInputProps("token_renewal_duration"))),s().createElement(R.TextInput,Sr({label:"Max Token Duration",placeholder:"168h"},f.getInputProps("max_token_duration")))),s().createElement(R.Group,{justify:"flex-end",mt:"md"},s().createElement(R.Button,{variant:"subtle",onClick:()=>{o(!1),c(null),f.reset()}},"Cancel"),s().createElement(R.Button,{type:"submit"},l?"Update Application":"Create Application"))))),s().createElement(R.Modal,{opened:u,onClose:()=>d(!1),title:"Application Details",size:"md"},p&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Application ID:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,null,p.app_id),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>b(p.app_id)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"HMAC Key:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},p.hmac_key.substring(0,16),"..."),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>b(p.hmac_key)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Application Link:"),s().createElement(R.Text,{size:"sm"},p.app_link)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Callback URL:"),s().createElement(R.Text,{size:"sm"},p.callback_url)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token Renewal:"),s().createElement(R.Text,{size:"sm"},p.token_renewal_duration/3600,"h")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Max Duration:"),s().createElement(R.Text,{size:"sm"},p.max_token_duration/3600,"h")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Created:"),s().createElement(R.Text,{size:"sm"},Tr()(p.created_at).format("MMM DD, YYYY HH:mm"))))))};function kr(){return kr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)([]),[a,o]=(0,i.useState)(!1),[l,c]=(0,i.useState)(!1),[u,d]=(0,i.useState)(!1),[p,m]=(0,i.useState)(null),f=te({initialValues:{app_id:"",owner:{type:"user",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,i.useEffect)(()=>{h(),b()},[]);const h=async()=>{try{const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}},b=async()=>{try{o(!0);const e=await wr.getApplications(100,0),t=[];for(const r of e.data)try{const e=(await wr.getTokensForApplication(r.app_id,100,0)).data.map(e=>({...e,app:r}));t.push(...e)}catch(e){}n(t)}catch(e){console.error("Failed to load tokens:",e),re.notifications.show({title:"Error",message:"Failed to load tokens",color:"red"})}finally{o(!1)}},E=e=>{navigator.clipboard.writeText(e),re.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},g=r.map(e=>s().createElement(R.Table.Tr,{key:e.id},s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(D.IconKey,{size:16,color:"blue"}),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},e.id.substring(0,8),"..."))),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{variant:"light",color:"blue"},e.app?.app_id||"Unknown")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{variant:"light",color:"green"},e.type)),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.created_at).format("MMM DD, YYYY"))),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>E(e.id),title:"Copy Token ID"},s().createElement(D.IconCopy,{size:16})),s().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 wr.deleteToken(e),re.notifications.show({title:"Success",message:"Token deleted successfully",color:"green"}),b()}catch(e){console.error("Failed to delete token:",e),re.notifications.show({title:"Error",message:"Failed to delete token",color:"red"})}})(e.id),title:"Delete Token"},s().createElement(D.IconTrash,{size:16}))))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"API Tokens"),s().createElement(R.Text,{c:"dimmed"},"Manage static API tokens for your applications")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{f.reset(),c(!0)},disabled:0===e.length},"Create Token")),0===e.length&&s().createElement(R.Alert,{icon:s().createElement(D.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can create tokens."),a?s().createElement(R.Stack,{align:"center",justify:"center",h:200},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading tokens...")):0===r.length?s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},s().createElement(R.Stack,{align:"center",gap:"md"},s().createElement(D.IconKey,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No tokens found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},"Create your first API token to start using the key management system")),e.length>0&&s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{f.reset(),c(!0)}},"Create Token"))):s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Token ID"),s().createElement(R.Table.Th,null,"Application"),s().createElement(R.Table.Th,null,"Owner"),s().createElement(R.Table.Th,null,"Type"),s().createElement(R.Table.Th,null,"Created"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,g))),s().createElement(R.Modal,{opened:l,onClose:()=>{c(!1),f.reset()},title:"Create New Token",size:"md"},s().createElement("form",{onSubmit:f.onSubmit(async e=>{try{const{app_id:t,...r}=e,n=await wr.createToken(t,r);m(n),c(!1),d(!0),f.reset(),b(),re.notifications.show({title:"Success",message:"Token created successfully",color:"green"})}catch(e){console.error("Failed to create token:",e),re.notifications.show({title:"Error",message:"Failed to create token",color:"red"})}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Select,kr({label:"Application",placeholder:"Select an application",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},f.getInputProps("app_id"))),s().createElement(R.MultiSelect,kr({label:"Permissions",placeholder:"Select permissions for this token",required:!0,data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},f.getInputProps("permissions"),{searchable:!0})),s().createElement(R.TextInput,kr({label:"Owner Name",placeholder:"Token owner name"},f.getInputProps("owner.name"))),s().createElement(R.TextInput,kr({label:"Owner Email",placeholder:"owner@example.com"},f.getInputProps("owner.owner"))),s().createElement(R.Group,{justify:"flex-end",mt:"md"},s().createElement(R.Button,{variant:"subtle",onClick:()=>{c(!1),f.reset()}},"Cancel"),s().createElement(R.Button,{type:"submit"},"Create Token"))))),s().createElement(R.Modal,{opened:u,onClose:()=>{d(!1),m(null)},title:"Token Created Successfully",size:"lg"},p&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Alert,{icon:s().createElement(D.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."),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Code,{block:!0,style:{fontSize:"12px",wordBreak:"break-all",flex:1}},p.token),s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>E(p.token),title:"Copy Token"},s().createElement(D.IconCopy,{size:16})))),s().createElement(R.Divider,null),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token ID:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},p.id),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>E(p.id)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between",align:"flex-start"},s().createElement(R.Text,{fw:500},"Permissions:"),s().createElement(R.Stack,{gap:"xs",align:"flex-end"},p.permissions.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm"},e)))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Created:"),s().createElement(R.Text,{size:"sm"},Tr()(p.created_at).format("MMM DD, YYYY HH:mm"))),s().createElement(R.Group,{justify:"flex-end",mt:"lg"},s().createElement(R.Button,{onClick:()=>{d(!1),m(null)}},"Close")))))};function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(null),l=te({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,i.useEffect)(()=>{c()},[]);const c=async()=>{try{const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}};return s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Token Tester"),s().createElement(R.Text,{c:"dimmed"},"Test and verify API tokens against your applications")),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,md:6}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg"},s().createElement(R.Title,{order:3,mb:"md"},"Test Configuration"),s().createElement("form",{onSubmit:l.onSubmit(async e=>{try{n(!0),o(null);const t={...e,user_id:e.user_id||void 0,permissions:e.permissions&&e.permissions.length>0?e.permissions:void 0},r=await wr.verifyToken(t);o(r),r.valid?re.notifications.show({title:"Token Verified",message:"Token is "+(r.permitted?"valid and permitted":"valid but not permitted"),color:r.permitted?"green":"orange"}):re.notifications.show({title:"Token Invalid",message:r.error||"Token verification failed",color:"red"})}catch(e){console.error("Failed to verify token:",e),re.notifications.show({title:"Error",message:"Failed to verify token",color:"red"})}finally{n(!1)}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Select,Or({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(", ")})`}))},l.getInputProps("app_id"))),s().createElement(R.TextInput,Or({label:"User ID (Optional)",placeholder:"user@example.com",description:"Leave empty for token-only verification"},l.getInputProps("user_id"))),s().createElement(R.Textarea,Or({label:"Token",placeholder:"Paste your token here...",required:!0,minRows:3},l.getInputProps("token"))),s().createElement(R.MultiSelect,Or({label:"Required Permissions (Optional)",placeholder:"Select permissions to test",description:"Leave empty to skip permission checks",data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},l.getInputProps("permissions"),{searchable:!0})),s().createElement(R.Group,{justify:"flex-end"},s().createElement(R.Button,{type:"submit",loading:r,leftSection:r?s().createElement(R.Loader,{size:16}):s().createElement(D.IconTestPipe,{size:16}),disabled:0===e.length},r?"Testing...":"Test Token")))))),s().createElement(R.Grid.Col,{span:{base:12,md:6}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:"100%"},s().createElement(R.Title,{order:3,mb:"md"},"Test Results"),!a&&!r&&s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(D.IconTestPipe,{size:48,color:"gray"}),s().createElement(R.Text,{c:"dimmed",ta:"center"},'Configure your test parameters and click "Test Token" to see results')),r&&s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Verifying token...")),a&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Alert,{icon:s().createElement((e=>e.valid?e.valid&&e.permitted?D.IconCheck:D.IconAlertCircle:D.IconX)(a),{size:16}),title:a.valid?a.permitted?"Token Valid & Permitted":"Token Valid but Not Permitted":"Token Invalid",color:(e=>e.valid?e.valid&&e.permitted?"green":"orange":"red")(a)},a.error||(a.valid&&a.permitted?"Token is valid and has the required permissions":a.valid?"Token is valid but lacks some required permissions":"Token verification failed")),s().createElement(R.Divider,null),s().createElement(R.Stack,{gap:"xs"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Valid:"),s().createElement(R.Badge,{color:a.valid?"green":"red",variant:"light"},a.valid?"Yes":"No")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Permitted:"),s().createElement(R.Badge,{color:a.permitted?"green":"red",variant:"light"},a.permitted?"Yes":"No")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token Type:"),s().createElement(R.Badge,{variant:"light"},a.token_type)),a.user_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"User ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},a.user_id)),a.expires_at&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Expires At:"),s().createElement(R.Text,{size:"sm"},Tr()(a.expires_at).format("MMM DD, YYYY HH:mm"))),a.max_valid_at&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Max Valid Until:"),s().createElement(R.Text,{size:"sm"},Tr()(a.max_valid_at).format("MMM DD, YYYY HH:mm")))),a.permissions&&a.permissions.length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token Permissions:"),s().createElement(R.Group,{gap:"xs"},a.permissions.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm",color:"blue"},e))))),a.permission_results&&Object.keys(a.permission_results).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Permission Check Results:"),s().createElement(R.Stack,{gap:"xs"},Object.entries(a.permission_results).map(([e,t])=>s().createElement(R.Group,{key:e,justify:"space-between"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},e),s().createElement(R.Badge,{color:t?"green":"red",variant:"light",size:"sm"},t?"Granted":"Denied")))))),a.claims&&Object.keys(a.claims).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token Claims:"),s().createElement(R.Code,{block:!0},JSON.stringify(a.claims,null,2)))))))),0===e.length&&s().createElement(R.Alert,{icon:s().createElement(D.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can test tokens."))},Cr=()=>{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(0),[l,c]=(0,i.useState)(1),[u]=(0,i.useState)(20),[d,p]=(0,i.useState)(!1),[m,f]=(0,i.useState)(null),[h,b]=(0,i.useState)({limit:u,offset:0,order_by:"timestamp",order_desc:!0});(0,i.useEffect)(()=>{E()},[h]);const E=async()=>{try{n(!0);const e=await wr.getAuditEvents(h);t(e.events),o(e.total)}catch(e){console.error("Failed to load audit events:",e),re.notifications.show({title:"Error",message:"Failed to load audit events",color:"red"})}finally{n(!1)}},g=(e,t)=>{c(1),b(r=>({...r,[e]:t,offset:0}))},y=e=>{switch(e.toLowerCase()){case"success":return"green";case"failure":case"error":return"red";case"warning":return"yellow";default:return"gray"}},w=e=>e.startsWith("auth.")?"blue":e.startsWith("app.")?"purple":e.startsWith("token.")?"green":e.startsWith("permission.")?"orange":"gray",v=Math.ceil(a/u),T=e.map(e=>s().createElement(R.Table.Tr,{key:e.id},s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.timestamp).format("MMM DD, HH:mm:ss"))),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{color:w(e.type),variant:"light",size:"sm"},e.type)),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{color:y(e.status),variant:"light",size:"sm"},e.status)),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.actor_id||"System")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",lineClamp:2},e.description)),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.Button,{variant:"subtle",size:"xs",leftSection:s().createElement(D.IconEye,{size:14}),onClick:()=>(e=>{f(e),p(!0)})(e)},"Details")))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Audit Log"),s().createElement(R.Text,{c:"dimmed"},"View and search system audit events and security logs")),s().createElement(R.Button,{leftSection:s().createElement(D.IconRefresh,{size:16}),variant:"light",onClick:E,loading:r},"Refresh")),s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"md"},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500,size:"sm"},"Filters"),s().createElement(R.Button,{variant:"subtle",size:"xs",onClick:()=>{c(1),b({limit:u,offset:0,order_by:"timestamp",order_desc:!0})}},"Clear All")),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().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:h.event_types||[],onChange:e=>g("event_types",e.length?e:void 0),clearable:!0,searchable:!0,size:"sm"})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().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:h.statuses||[],onChange:e=>g("statuses",e.length?e:void 0),clearable:!0,size:"sm"})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().createElement(R.TextInput,{label:"Actor ID",placeholder:"user@example.com",value:h.actor_id||"",onChange:e=>g("actor_id",e.target.value||void 0),size:"sm",leftSection:s().createElement(D.IconSearch,{size:16})})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().createElement(R.TextInput,{label:"Resource ID",placeholder:"Resource identifier",value:h.resource_id||"",onChange:e=>g("resource_id",e.target.value||void 0),size:"sm",leftSection:s().createElement(D.IconSearch,{size:16})}))))),s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},r?s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading audit events...")):0===e.length?s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(D.IconActivity,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No audit events found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},Object.keys(h).filter(e=>"limit"!==e&&"offset"!==e&&"order_by"!==e&&"order_desc"!==e).some(e=>h[e])?"Try adjusting your filters or clearing them to see more results":"Audit events will appear here as system activities occur"))):s().createElement(s().Fragment,null,s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Timestamp"),s().createElement(R.Table.Th,null,"Event Type"),s().createElement(R.Table.Th,null,"Status"),s().createElement(R.Table.Th,null,"Actor"),s().createElement(R.Table.Th,null,"Description"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,T)),v>1&&s().createElement(R.Group,{justify:"space-between",mt:"md",px:"md",pb:"md"},s().createElement(R.Text,{size:"sm",c:"dimmed"},"Showing ",(l-1)*u+1," to ",Math.min(l*u,a)," of ",a," events"),s().createElement(R.Pagination,{total:v,value:l,onChange:e=>{c(e),b(t=>({...t,offset:(e-1)*u}))},size:"sm"})))),s().createElement(R.Modal,{opened:d,onClose:()=>p(!1),title:"Audit Event Details",size:"lg"},m&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Event ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.id)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Timestamp:"),s().createElement(R.Text,{size:"sm"},Tr()(m.timestamp).format("MMMM DD, YYYY HH:mm:ss"))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Event Type:"),s().createElement(R.Badge,{color:w(m.type),variant:"light"},m.type)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Status:"),s().createElement(R.Badge,{color:y(m.status),variant:"light"},m.status)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Action:"),s().createElement(R.Text,{size:"sm"},m.action)),s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Description:"),s().createElement(R.Text,{size:"sm"},m.description)),m.actor_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Actor ID:"),s().createElement(R.Text,{size:"sm"},m.actor_id)),m.actor_ip&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"IP Address:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.actor_ip)),m.resource_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Resource ID:"),s().createElement(R.Text,{size:"sm"},m.resource_id)),m.resource_type&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Resource Type:"),s().createElement(R.Badge,{variant:"outline",size:"sm"},m.resource_type)),m.request_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Request ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.request_id)),m.session_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Session ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.session_id)),m.user_agent&&s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"User Agent:"),s().createElement(R.Text,{size:"xs",c:"dimmed",style:{fontFamily:"monospace"}},m.user_agent)),m.details&&Object.keys(m.details).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Additional Details:"),s().createElement(R.Code,{block:!0},JSON.stringify(m.details,null,2)))))))},Rr=()=>{const[e,t]=(0,i.useState)(null),[r,n]=(0,i.useState)(!0);(0,i.useEffect)(()=>{a()},[]);const a=async()=>{try{n(!0);const[e]=await Promise.all([wr.getApplications(100,0)]),r={totalApplications:e.count,totalTokens:0,recentActivity:0,systemHealth:"healthy"};t(r)}catch(e){console.error("Failed to load dashboard data:",e),t({totalApplications:0,totalTokens:0,recentActivity:0,systemHealth:"error"})}finally{n(!1)}};if(r)return s().createElement(R.Stack,{align:"center",justify:"center",h:400},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading dashboard..."));const o=[{title:"Applications",value:e?.totalApplications||0,icon:D.IconApps,color:"blue",description:"Active applications"},{title:"API Tokens",value:e?.totalTokens||0,icon:D.IconKey,color:"green",description:"Generated tokens"},{title:"Recent Activity",value:e?.recentActivity||0,icon:D.IconActivity,color:"orange",description:"Events today"},{title:"System Health",value:"healthy"===e?.systemHealth?"100%":"85%",icon:"healthy"===e?.systemHealth?D.IconTrendingUp:D.IconAlertTriangle,color:"healthy"===e?.systemHealth?"green":"yellow",description:"System status"}];return s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Dashboard Overview"),s().createElement(R.Text,{c:"dimmed"},"Monitor your key management system status and metrics")),s().createElement(R.SimpleGrid,{cols:{base:1,sm:2,lg:4},spacing:"lg"},o.map(e=>s().createElement(R.Card,{key:e.title,shadow:"sm",radius:"md",withBorder:!0,p:"lg"},s().createElement(R.Group,{justify:"space-between",mb:"xs"},s().createElement(R.Text,{size:"sm",c:"dimmed",fw:500},e.title),s().createElement(R.ThemeIcon,{color:e.color,variant:"light",size:"lg"},s().createElement(e.icon,{size:20}))),s().createElement(R.Text,{size:"xl",fw:700,mb:"xs"},e.value),s().createElement(R.Text,{size:"xs",c:"dimmed"},e.description)))),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,md:8}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},s().createElement(R.Title,{order:3,mb:"md"},"Activity Timeline"),s().createElement(R.Stack,{justify:"center",align:"center",h:200},s().createElement(R.Text,{c:"dimmed",ta:"center"},"Activity timeline will be displayed here",s().createElement("br",null),s().createElement(R.Text,{size:"xs",c:"dimmed"},"Integration with audit events coming soon"))))),s().createElement(R.Grid.Col,{span:{base:12,md:4}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},s().createElement(R.Title,{order:3,mb:"md"},"System Status"),s().createElement(R.Stack,{gap:"md",align:"center"},s().createElement(R.RingProgress,{size:120,thickness:12,sections:[{value:"healthy"===e?.systemHealth?100:85,color:"healthy"===e?.systemHealth?"green":"yellow"}],label:s().createElement(R.Text,{ta:"center",fw:700,size:"lg"},"healthy"===e?.systemHealth?"100%":"85%")}),s().createElement(R.Badge,{color:"healthy"===e?.systemHealth?"green":"yellow",variant:"light",size:"lg"},"healthy"===e?.systemHealth?"Healthy":"Warning"),s().createElement(R.Text,{size:"sm",c:"dimmed",ta:"center"},"All systems operational"))))))},Dr=()=>{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,r]=s().useState(e());return s().useEffect(()=>{const t=()=>{r(e())};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[]),s().createElement(R.Box,{w:"100%"},s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Title,{order:1,size:"h2",mb:"xs"},"Key Management System"),s().createElement(R.Text,{c:"dimmed",size:"sm"},"Manage API keys, tokens, and access permissions")),s().createElement(R.Tabs,{value:t,onChange:e=>{if(e){const t="/app/kms",n="dashboard"===e?t:`${t}/${e}`;window.history.pushState(null,"",n),r(e),window.dispatchEvent(new PopStateEvent("popstate",{state:null}))}}},s().createElement(R.Tabs.List,null,s().createElement(R.Tabs.Tab,{value:"dashboard",leftSection:s().createElement(D.IconDashboard,{size:16})},"Dashboard"),s().createElement(R.Tabs.Tab,{value:"applications",leftSection:s().createElement(D.IconApps,{size:16})},"Applications"),s().createElement(R.Tabs.Tab,{value:"tokens",leftSection:s().createElement(D.IconKey,{size:16})},"Tokens"),s().createElement(R.Tabs.Tab,{value:"token-tester",leftSection:s().createElement(D.IconTestPipe,{size:16})},"Token Tester"),s().createElement(R.Tabs.Tab,{value:"audit",leftSection:s().createElement(D.IconFileText,{size:16})},"Audit Log")),s().createElement(R.Box,{pt:"md"},(()=>{switch(t){case"applications":return s().createElement(_r,null);case"tokens":return s().createElement(xr,null);case"token-tester":return s().createElement(Ar,null);case"audit":return s().createElement(Cr,null);default:return s().createElement(Rr,null)}})()))))};l.createRoot(document.getElementById("root")).render(s().createElement(s().StrictMode,null,s().createElement(R.MantineProvider,null,s().createElement(k,null,s().createElement(Dr,null)))))}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return a[e].call(r.exports,r,r.exports,i),r.exports}i.m=a,i.c=o,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var a=Object.create(null);i.r(a);var o={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&r;("object"==typeof s||"function"==typeof s)&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach(e=>o[e]=()=>r[e]);return o.default=()=>r,i.d(a,o),a},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,r)=>(i.f[r](e,t),t),[])),i.u=e=>e+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="kms:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(m);var a=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach(e=>e(n)),t)return t(n)},m=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),l&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{i.S={};var e={},t={};i.I=(r,n)=>{n||(n=[]);var a=t[r];if(a||(a=t[r]={}),!(n.indexOf(a)>=0)){if(n.push(a),e[r])return e[r];i.o(i.S,r)||(i.S[r]={});var o=i.S[r],s=(e,t,r,n)=>{var a=o[e]=o[e]||{},i=a[t];(!i||!i.loaded&&(!n!=!i.eager?n:"kms">i.from))&&(a[t]={get:r,from:"kms",eager:!!n})},l=[];return"default"===r&&(s("@mantine/core","7.17.8",()=>Promise.all([i.e(63),i.e(914),i.e(600)]).then(()=>()=>i(3063))),s("@mantine/hooks","7.17.8",()=>Promise.all([i.e(870),i.e(914)]).then(()=>()=>i(5870))),s("@mantine/notifications","7.17.8",()=>Promise.all([i.e(875),i.e(914),i.e(600),i.e(435)]).then(()=>()=>i(3875))),s("@tabler/icons-react","2.47.0",()=>Promise.all([i.e(396),i.e(914)]).then(()=>()=>i(2396))),s("react-dom","18.3.1",()=>Promise.all([i.e(961),i.e(914)]).then(()=>()=>i(961))),s("react","18.3.1",()=>i.e(540).then(()=>()=>i(6540)))),e[r]=l.length?Promise.all(l).then(()=>e[r]=1):1}}})(),(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e=e=>{var t=e=>e.split(".").map(e=>+e==e?+e:e),r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=r[1]?t(r[1]):[];return r[2]&&(n.length++,n.push.apply(n,t(r[2]))),r[3]&&(n.push([]),n.push.apply(n,t(r[3]))),n},t=e=>{var r=e[0],n="";if(1===e.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o0?".":"")+(a=2,s);return n}var i=[];for(o=1;o{if(0 in t){n=e(n);var a=t[0],o=a<0;o&&(a=-a-1);for(var i=0,s=1,l=!0;;s++,i++){var c,u,d=s=n.length||"o"==(u=(typeof(c=n[i]))[0]))return!l||("u"==d?s>a&&!o:""==d!=o);if("u"==u){if(!l||"u"!=d)return!1}else if(l)if(d==u)if(s<=a){if(c!=t[s])return!1}else{if(o?c>t[s]:c{var a=n?(e=>Object.keys(e).reduce((t,r)=>(e[r].eager&&(t[r]=e[r]),t),{}))(t[r]):t[r];return Object.keys(a).reduce((t,r)=>!t||!a[t].loaded&&((t,r)=>{t=e(t),r=e(r);for(var n=0;;){if(n>=t.length)return n=r.length)return"u"==o;var i=r[n],s=(typeof i)[0];if(o!=s)return"o"==o&&"n"==s||"s"==s||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return ar?r():((e,t)=>(e=>{throw new Error(e)})("Shared module "+t+" doesn't exist in shared scope "+e))(e,t),o=(e=>function(t,r,n,a,o){var s=i.I(t);return s&&s.then&&!n?s.then(e.bind(e,t,i.S[t],r,!1,a,o)):e(t,i.S[t],r,n,a,o)})((e,o,s,l,c,u)=>{if(!((e,t)=>e&&i.o(e,t))(o,s))return a(e,s,u);var d,p,m=n(o,s,l);return r(c,m)||(p=((e,r,n,a)=>"Unsatisfied version "+n+" from "+(n&&e[r][n].from)+" of shared singleton module "+r+" (required "+t(a)+")")(o,s,m,c),"undefined"!=typeof console&&console.warn&&console.warn(p)),(d=o[s][m]).loaded=1,d.get()}),s={},l={4914:()=>o("default","react",!1,[1,18,2,0],()=>i.e(540).then(()=>()=>i(6540))),6672:()=>o("default","react-dom",!1,[1,18,2,0],()=>i.e(961).then(()=>()=>i(961))),7435:()=>o("default","@mantine/core",!1,[1,7,0,0],()=>Promise.all([i.e(63),i.e(600)]).then(()=>()=>i(3063))),5101:()=>o("default","@tabler/icons-react",!1,[1,2,40,0],()=>i.e(396).then(()=>()=>i(2396))),7373:()=>o("default","@mantine/notifications",!1,[1,7,0,0],()=>Promise.all([i.e(875),i.e(600)]).then(()=>()=>i(3875))),8705:()=>o("default","@mantine/hooks",!1,[1,7,0,0],()=>i.e(870).then(()=>()=>i(5870)))};[4914,6672,7435,5101,7373].forEach(e=>{i.m[e]=t=>{s[e]=0,delete i.c[e];var r=l[e]();if("function"!=typeof r)throw new Error("Shared module is not available for eager consumption: "+e);t.exports=r()}});var c={435:[7435],600:[6672,8705],792:[4914,6672,7435,5101,7373],914:[4914]},u={};i.f.consumes=(e,t)=>{i.o(c,e)&&c[e].forEach(e=>{if(i.o(s,e))return t.push(s[e]);if(!u[e]){var r=t=>{s[e]=0,i.m[e]=r=>{delete i.c[e],r.exports=t()}};u[e]=!0;var n=t=>{delete s[e],i.m[e]=r=>{throw delete i.c[e],t}};try{var a=l[e]();a.then?t.push(s[e]=a.then(r).catch(n)):r(a)}catch(e){n(e)}}})}})(),(()=>{var e={435:0,792:0,914:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else if(/^(435|600|914)$/.test(t))e[t]=0;else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=i.p+i.u(t),s=new Error;i.l(o,r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",s.name="ChunkLoadError",s.type=a,s.request=o,n[1](s)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,a,[o,s,l]=r,c=0;if(o.some(t=>0!==e[t])){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);l&&l(i)}for(t&&t(r);c{var e,t,r,n,a={2017:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,a,o;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(a=n;0!==a--;)if(!e(t[a],r[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(o=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(a=n;0!==a--;)if(!Object.prototype.hasOwnProperty.call(r,o[a]))return!1;for(a=n;0!==a--;){var i=o[a];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},4353:function(e){e.exports=function(){"use strict";var e=6e4,t=36e5,r="millisecond",n="second",a="minute",o="hour",i="day",s="week",l="month",c="quarter",u="year",d="date",p="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,f=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,h={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},b=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},E={s:b,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),a=r%60;return(t<=0?"+":"-")+b(n,2,"0")+":"+b(a,2,"0")},m:function e(t,r){if(t.date()1)return e(i[0])}else{var s=t.name;y[s]=t,a=s}return!n&&a&&(g=a),a||!n&&g},S=function(e,t){if(v(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new k(r)},_=E;_.l=T,_.i=v,_.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var k=function(){function h(e){this.$L=T(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var b=h.prototype;return b.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(_.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(m);if(n){var a=n[2]-1||0,o=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)):new Date(n[1],a,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)}}return new Date(t)}(e),this.init()},b.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},b.$utils=function(){return _},b.isValid=function(){return!(this.$d.toString()===p)},b.isSame=function(e,t){var r=S(e);return this.startOf(t)<=r&&r<=this.endOf(t)},b.isAfter=function(e,t){return S(e){"use strict";var n=r(6672);t.createRoot=n.createRoot,t.hydrateRoot=n.hydrateRoot},6439:(e,t,r)=>{"use strict";var n={};r.r(n),r.d(n,{hasBrowserEnv:()=>pt,hasStandardBrowserEnv:()=>ft,hasStandardBrowserWebWorkerEnv:()=>ht,navigator:()=>mt,origin:()=>bt});var a,o,i=r(4914),s=r.n(i),l=r(5338),c=r(6672);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}var E;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(E||(E={})),new Set(["lazy","caseSensitive","path","id","index","children"]),Error;const g=["post","put","patch","delete"],y=(new Set(g),["get",...g]);function w(){return w=Object.assign?Object.assign.bind():function(e){for(var t=1;t({basename:u,navigator:s,static:l,future:w({v7_relativeSplatPath:!1},c)}),[u,c,s,l]);"string"==typeof n&&(n=b(n));let{pathname:m="/",search:f="",hash:h="",state:E=null,key:g="default"}=n,y=i.useMemo(()=>{let e=function(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&"/"!==n?null:e.slice(r)||"/"}(m,u);return null==e?null:{location:{pathname:e,search:f,hash:h,state:E,key:g},navigationType:o}},[u,m,f,h,E,g,o]);return null==y?null:i.createElement(v.Provider,{value:d},i.createElement(T.Provider,{children:r,value:y}))}i.Component,i.startTransition,new Promise(()=>{}),i.Component,new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const _=i.startTransition;function k(e){let{basename:t,children:r,future:n,window:o}=e,s=i.useRef();var l;null==s.current&&(s.current=(void 0===(l={window:o,v5Compat:!0})&&(l={}),function(e,t,r,n){void 0===n&&(n={});let{window:o=document.defaultView,v5Compat:i=!1}=n,s=o.history,l=a.Pop,c=null,b=E();function E(){return(s.state||{idx:null}).idx}function g(){l=a.Pop;let e=E(),t=null==e?null:e-b;b=e,c&&c({action:l,location:w.location,delta:t})}function y(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,r="string"==typeof e?e:h(e);return r=r.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==b&&(b=0,s.replaceState(u({},s.state,{idx:b}),""));let w={get action(){return l},get location(){return e(o,s)},listen(e){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(d,g),c=e,()=>{o.removeEventListener(d,g),c=null}},createHref:e=>t(o,e),createURL:y,encodeLocation(e){let t=y(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){l=a.Push;let n=f(w.location,e,t);r&&r(n,e),b=E()+1;let u=m(n,b),d=w.createHref(n);try{s.pushState(u,"",d)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(d)}i&&c&&c({action:l,location:w.location,delta:1})},replace:function(e,t){l=a.Replace;let n=f(w.location,e,t);r&&r(n,e),b=E();let o=m(n,b),u=w.createHref(n);s.replaceState(o,"",u),i&&c&&c({action:l,location:w.location,delta:0})},go:e=>s.go(e)};return w}(function(e,t){let{pathname:r,search:n,hash:a}=e.location;return f("",{pathname:r,search:n,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:h(t)},null,l)));let c=s.current,[b,E]=i.useState({action:c.action,location:c.location}),{v7_startTransition:g}=n||{},y=i.useCallback(e=>{g&&_?_(()=>E(e)):E(e)},[E,g]);return i.useLayoutEffect(()=>c.listen(y),[c,y]),i.useEffect(()=>{return null==(e=n)||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),void(t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation));var e,t},[n]),i.createElement(S,{basename:t,children:r,location:b.location,navigationType:b.action,navigator:c,future:n})}var x,O,A,C;c.flushSync,i.useId,"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement,(C=x||(x={})).UseScrollRestoration="useScrollRestoration",C.UseSubmit="useSubmit",C.UseSubmitFetcher="useSubmitFetcher",C.UseFetcher="useFetcher",C.useViewTransitionState="useViewTransitionState",(A=O||(O={})).UseFetcher="useFetcher",A.UseFetchers="useFetchers",A.UseScrollRestoration="useScrollRestoration";var R=r(7435),D=r(5101);const I="undefined"!=typeof window?i.useLayoutEffect:i.useEffect;function z(e,t){I(()=>{if(e)return window.addEventListener(e,t),()=>window.removeEventListener(e,t)},[e])}function j(e){return null===e||"object"!=typeof e?{}:Object.keys(e).reduce((t,r)=>{const n=e[r];return null!=n&&!1!==n&&(t[r]=n),t},{})}function P(e,t){if(null===t||"object"!=typeof t)return{};const r={...t};return Object.keys(t).forEach(t=>{t.includes(`${String(e)}.`)&&delete r[t]}),r}function L(e,t){const r=e.substring(t.length+1).split(".")[0];return parseInt(r,10)}function F(e,t,r,n){if(void 0===t)return r;const a=`${String(e)}`;let o=r;-1===n&&(o=P(`${a}.${t}`,o));const i={...o},s=new Set;return Object.entries(o).filter(([e])=>{if(!e.startsWith(`${a}.`))return!1;const r=L(e,a);return!Number.isNaN(r)&&r>=t}).forEach(([e,t])=>{const r=L(e,a),o=e.replace(`${a}.${r}`,`${a}.${r+n}`);i[o]=t,s.add(o),s.has(e)||delete i[e]}),i}function M(e){return"string"!=typeof e?[]:e.split(".")}function N(e,t){const r=M(e);if(0===r.length||"object"!=typeof t||null===t)return;let n=t[r[0]];for(let e=1;er!==t),r):r}function q(e,t,r,n){const a=N(e,n);if(!Array.isArray(a))return n;if(a.length<=r)return n;const o=[...a];return o[r]=t,B(e,o,n)}var Y=r(2017);function W(e,t){const r=Object.keys(e);if("string"==typeof t){const n=r.filter(e=>e.startsWith(`${t}.`));return e[t]||n.some(t=>e[t])||!1}return r.some(t=>e[t])}function K(e,t){return e?`${e}-${t.toString()}`:t.toString()}const X=Symbol("root-rule");function J(e,t,r="",n={}){return"object"!=typeof e||null===e?n:Object.keys(e).reduce((n,a)=>{const o=e[a],i=`${""===r?"":`${r}.`}${a}`,s=N(i,t);let l=!1;return"function"==typeof o&&(n[i]=o(s,t,i)),"object"==typeof o&&Array.isArray(s)&&(l=!0,s.forEach((e,r)=>J(o,t,`${i}.${r}`,n)),X in o&&(n[i]=o[X](s,t,i))),"object"==typeof o&&"object"==typeof s&&null!==s&&(l||J(o,t,i,n),X in o&&(n[i]=o[X](s,t,i))),n},n)}function Z(e,t){return function(e){const t=j(e);return{hasErrors:Object.keys(t).length>0,errors:t}}("function"==typeof e?e(t):J(e,t))}function Q(e,t,r){if("string"!=typeof e)return{hasError:!1,error:null};const n=Z(t,r),a=Object.keys(n.errors).find(t=>e.split(".").every((e,r)=>e===t.split(".")[r]));return{hasError:!!a,error:a?n.errors[a]:null}}function ee(e,t){return!!t&&("boolean"==typeof t?t:!!Array.isArray(t)&&t.includes(e.replace(/[.][0-9]+/g,".__MANTINE_FORM_INDEX__")))}function te({name:e,mode:t="controlled",initialValues:r,initialErrors:n={},initialDirty:a={},initialTouched:o={},clearInputErrorOnChange:s=!0,validateInputOnChange:l=!1,validateInputOnBlur:c=!1,onValuesChange:u,transformValues:d=e=>e,enhanceGetInputProps:p,validate:m,onSubmitPreventDefault:f="always",touchTrigger:h="change"}={}){const b=function(e){const[t,r]=(0,i.useState)(j(e)),n=(0,i.useRef)(t),a=(0,i.useCallback)(e=>{r(t=>{const r=j("function"==typeof e?e(t):e);return n.current=r,r})},[]),o=(0,i.useCallback)(()=>a({}),[]),s=(0,i.useCallback)(e=>{void 0!==n.current[e]&&a(t=>{const r={...t};return delete r[e],r})},[t]),l=(0,i.useCallback)((e,t)=>{null==t||!1===t?s(e):n.current[e]!==t&&a(r=>({...r,[e]:t}))},[t]);return{errorsState:t,setErrors:a,clearErrors:o,setFieldError:l,clearFieldError:s}}(n),E=function({initialValues:e,onValuesChange:t,mode:r}){const n=(0,i.useRef)(!1),[a,o]=(0,i.useState)(e||{}),s=(0,i.useRef)(a),l=(0,i.useRef)(a),c=(0,i.useCallback)(({values:e,subscribers:r,updateState:n=!0,mergeWithPreviousValues:a=!0})=>{const i=s.current,l=e instanceof Function?e(s.current):e,c=a?{...i,...l}:l;s.current=c,n&&o(c),t?.(c,i),r?.filter(Boolean).forEach(e=>e({updatedValues:c,previousValues:i}))},[t]),u=(0,i.useCallback)(e=>{const t=N(e.path,s.current),r=e.value instanceof Function?e.value(t):e.value;if(t!==r){const t=s.current,n=B(e.path,r,s.current);c({values:n,updateState:e.updateState}),e.subscribers?.filter(Boolean).forEach(r=>r({path:e.path,updatedValues:n,previousValues:t}))}},[c]),d=(0,i.useCallback)(e=>{l.current=e},[]),p=(0,i.useCallback)((e,t)=>{n.current||(n.current=!0,c({values:e,updateState:"controlled"===r}),d(e),t())},[c]),m=(0,i.useCallback)(()=>{c({values:l.current,updateState:!0,mergeWithPreviousValues:!1})},[c]),f=(0,i.useCallback)(()=>s.current,[]),h=(0,i.useCallback)(()=>l.current,[]);return{initialized:n,stateValues:a,refValues:s,valuesSnapshot:l,setValues:c,setFieldValue:u,resetValues:m,setValuesSnapshot:d,initialize:p,getValues:f,getValuesSnapshot:h}}({initialValues:r,onValuesChange:u,mode:t}),g=function({initialDirty:e,initialTouched:t,mode:r,$values:n}){const[a,o]=(0,i.useState)(t),[s,l]=(0,i.useState)(e),c=(0,i.useRef)(t),u=(0,i.useRef)(e),d=(0,i.useCallback)(e=>{const t="function"==typeof e?e(c.current):e;c.current=t,"controlled"===r&&o(t)},[]),p=(0,i.useCallback)((e,t=!1)=>{const n="function"==typeof e?e(u.current):e;u.current=n,("controlled"===r||t)&&l(n)},[]),m=(0,i.useCallback)(()=>d({}),[]),f=(0,i.useCallback)(e=>{const t=e?{...n.refValues.current,...e}:n.refValues.current;n.setValuesSnapshot(t),p({})},[]),h=(0,i.useCallback)((e,t)=>{d(r=>W(r,e)===t?r:{...r,[e]:t})},[]),b=(0,i.useCallback)((e,t,r)=>{p(r=>W(r,e)===t?r:{...r,[e]:t},r)},[]),E=(0,i.useCallback)((e,t)=>{const r=W(u.current,e),a=!Y(N(e,n.getValuesSnapshot()),t),o=P(e,u.current);o[e]=a,p(o,r!==a)},[]),g=(0,i.useCallback)(e=>W(c.current,e),[]),y=(0,i.useCallback)(e=>p(t=>{if("string"!=typeof e)return t;const r=P(e,t);return delete r[e],Y(r,t)?t:r}),[]),w=(0,i.useCallback)(e=>{if(e){const t=N(e,u.current);if("boolean"==typeof t)return t;const r=N(e,n.refValues.current),a=N(e,n.valuesSnapshot.current);return!Y(r,a)}return Object.keys(u.current).length>0?W(u.current):!Y(n.refValues.current,n.valuesSnapshot.current)},[]),v=(0,i.useCallback)(()=>u.current,[]),T=(0,i.useCallback)(()=>c.current,[]);return{touchedState:a,dirtyState:s,touchedRef:c,dirtyRef:u,setTouched:d,setDirty:p,resetDirty:f,resetTouched:m,isTouched:g,setFieldTouched:h,setFieldDirty:b,setTouchedState:o,setDirtyState:l,clearFieldDirty:y,isDirty:w,getDirty:v,getTouched:T,setCalculatedFieldDirty:E}}({initialDirty:a,initialTouched:o,$values:E,mode:t}),y=function({$values:e,$errors:t,$status:r}){return{reorderListItem:(0,i.useCallback)((n,a)=>{r.clearFieldDirty(n),t.setErrors(e=>function(e,{from:t,to:r},n){const a=`${e}.${t}`,o=`${e}.${r}`,i={...n},s=new Set;return Object.keys(n).forEach(e=>{if(s.has(e))return;let t,r;if(e.startsWith(a)?(t=e,r=e.replace(a,o)):e.startsWith(o)&&(t=e.replace(o,a),r=e),t&&r){const e=i[t],n=i[r];void 0===n?delete i[t]:i[t]=n,void 0===e?delete i[r]:i[r]=e,s.add(t),s.add(r)}}),i}(n,a,e)),e.setValues({values:V(n,a,e.refValues.current),updateState:!0})},[]),removeListItem:(0,i.useCallback)((n,a)=>{r.clearFieldDirty(n),t.setErrors(e=>F(n,a,e,-1)),e.setValues({values:H(n,a,e.refValues.current),updateState:!0})},[]),insertListItem:(0,i.useCallback)((n,a,o)=>{r.clearFieldDirty(n),t.setErrors(e=>F(n,o,e,1)),e.setValues({values:G(n,a,o,e.refValues.current),updateState:!0})},[]),replaceListItem:(0,i.useCallback)((t,n,a)=>{r.clearFieldDirty(t),e.setValues({values:q(t,a,n,e.refValues.current),updateState:!0})},[])}}({$values:E,$errors:b,$status:g}),w=function({$status:e}){const t=(0,i.useRef)({}),r=(0,i.useCallback)((e,r)=>{(0,i.useEffect)(()=>(t.current[e]=t.current[e]||[],t.current[e].push(r),()=>{t.current[e]=t.current[e].filter(e=>e!==r)}),[r])},[]),n=(0,i.useCallback)(r=>t.current[r]?t.current[r].map(t=>n=>t({previousValue:N(r,n.previousValues),value:N(r,n.updatedValues),touched:e.isTouched(r),dirty:e.isDirty(r)})):[],[]);return{subscribers:t,watch:r,getFieldSubscribers:n}}({$status:g}),[v,T]=(0,i.useState)(0),[S,_]=(0,i.useState)({}),[k,x]=(0,i.useState)(!1),O=(0,i.useCallback)(()=>{E.resetValues(),b.clearErrors(),g.resetDirty(),g.resetTouched(),"uncontrolled"===t&&T(e=>e+1)},[]),A=(0,i.useCallback)(e=>{s&&b.clearErrors(),"uncontrolled"===t&&T(e=>e+1),Object.keys(w.subscribers.current).forEach(t=>{N(t,E.refValues.current)!==N(t,e)&&w.getFieldSubscribers(t).forEach(t=>t({previousValues:e,updatedValues:E.refValues.current}))})},[s]),C=(0,i.useCallback)(e=>{const r=E.refValues.current;E.initialize(e,()=>"uncontrolled"===t&&T(e=>e+1)),A(r)},[A]),R=(0,i.useCallback)((e,r,n)=>{const a=ee(e,l),o=r instanceof Function?r(N(e,E.refValues.current)):r;g.setCalculatedFieldDirty(e,o),"change"===h&&g.setFieldTouched(e,!0),!a&&s&&b.clearFieldError(e),E.setFieldValue({path:e,value:r,updateState:"controlled"===t,subscribers:[...w.getFieldSubscribers(e),a?t=>{const r=Q(e,m,t.updatedValues);r.hasError?b.setFieldError(e,r.error):b.clearFieldError(e)}:null,!1!==n?.forceUpdate&&"controlled"!==t?()=>_(t=>({...t,[e]:(t[e]||0)+1})):null]})},[u,m]),D=(0,i.useCallback)(e=>{const r=E.refValues.current;E.setValues({values:e,updateState:"controlled"===t}),A(r)},[u,A]),I=(0,i.useCallback)(()=>{const e=Z(m,E.refValues.current);return b.setErrors(e.errors),e},[m]),L=(0,i.useCallback)(e=>{const t=Q(e,m,E.refValues.current);return t.hasError?b.setFieldError(e,t.error):b.clearFieldError(e),t},[m]),M=(0,i.useCallback)(e=>{e.preventDefault(),O()},[]),$=(0,i.useCallback)(e=>e?!Q(e,m,E.refValues.current).hasError:!Z(m,E.refValues.current).hasErrors,[m]),U=(0,i.useCallback)(t=>document.querySelector(`[data-path="${K(e,t)}"]`),[]),X={watch:w.watch,initialized:E.initialized.current,values:E.stateValues,getValues:E.getValues,getInitialValues:E.getValuesSnapshot,setInitialValues:E.setValuesSnapshot,initialize:C,setValues:D,setFieldValue:R,submitting:k,setSubmitting:x,errors:b.errorsState,setErrors:b.setErrors,setFieldError:b.setFieldError,clearFieldError:b.clearFieldError,clearErrors:b.clearErrors,resetDirty:g.resetDirty,setTouched:g.setTouched,setDirty:g.setDirty,isTouched:g.isTouched,resetTouched:g.resetTouched,isDirty:g.isDirty,getTouched:g.getTouched,getDirty:g.getDirty,reorderListItem:y.reorderListItem,insertListItem:y.insertListItem,removeListItem:y.removeListItem,replaceListItem:y.replaceListItem,reset:O,validate:I,validateField:L,getInputProps:(r,{type:n="input",withError:a=!0,withFocus:o=!0,...i}={})=>{var s;const l={onChange:(s=e=>R(r,e,{forceUpdate:!1}),e=>{if(e)if("function"==typeof e)s(e);else if("object"==typeof e&&"nativeEvent"in e){const{currentTarget:t}=e;t instanceof HTMLInputElement?"checkbox"===t.type?s(t.checked):s(t.value):(t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)&&s(t.value)}else s(e);else s(e)}),"data-path":K(e,r)};return a&&(l.error=b.errorsState[r]),"checkbox"===n?l["controlled"===t?"checked":"defaultChecked"]=N(r,E.refValues.current):l["controlled"===t?"value":"defaultValue"]=N(r,E.refValues.current),o&&(l.onFocus=()=>g.setFieldTouched(r,!0),l.onBlur=()=>{if(ee(r,c)){const e=Q(r,m,E.refValues.current);e.hasError?b.setFieldError(r,e.error):b.clearFieldError(r)}}),Object.assign(l,p?.({inputProps:l,field:r,options:{type:n,withError:a,withFocus:o,...i},form:X}))},onSubmit:(e,t)=>r=>{"always"===f&&r?.preventDefault();const n=I();if(n.hasErrors)"validation-failed"===f&&r?.preventDefault(),t?.(n.errors,E.refValues.current,r);else{const t=e?.(d(E.refValues.current),r);t instanceof Promise&&(x(!0),t.finally(()=>x(!1)))}},onReset:M,isValid:$,getTransformedValues:e=>d(e||E.refValues.current),key:e=>`${v}-${e}-${S[e]||0}`,getInputNode:U};return function(e,t){e&&function(e){if(!/^[0-9a-zA-Z-]+$/.test(e))throw new Error(`[@mantine/use-form] Form name "${e}" is invalid, it should contain only letters, numbers and dashes`)}(e),z(`mantine-form:${e}:set-field-value`,e=>t.setFieldValue(e.detail.path,e.detail.value)),z(`mantine-form:${e}:set-values`,e=>t.setValues(e.detail)),z(`mantine-form:${e}:set-initial-values`,e=>t.setInitialValues(e.detail)),z(`mantine-form:${e}:set-errors`,e=>t.setErrors(e.detail)),z(`mantine-form:${e}:set-field-error`,e=>t.setFieldError(e.detail.path,e.detail.error)),z(`mantine-form:${e}:clear-field-error`,e=>t.clearFieldError(e.detail)),z(`mantine-form:${e}:clear-errors`,t.clearErrors),z(`mantine-form:${e}:reset`,t.reset),z(`mantine-form:${e}:validate`,t.validate),z(`mantine-form:${e}:validate-field`,e=>t.validateField(e.detail)),z(`mantine-form:${e}:reorder-list-item`,e=>t.reorderListItem(e.detail.path,e.detail.payload)),z(`mantine-form:${e}:remove-list-item`,e=>t.removeListItem(e.detail.path,e.detail.index)),z(`mantine-form:${e}:insert-list-item`,e=>t.insertListItem(e.detail.path,e.detail.item,e.detail.index)),z(`mantine-form:${e}:set-dirty`,e=>t.setDirty(e.detail)),z(`mantine-form:${e}:set-touched`,e=>t.setTouched(e.detail)),z(`mantine-form:${e}:reset-dirty`,e=>t.resetDirty(e.detail)),z(`mantine-form:${e}:reset-touched`,t.resetTouched)}(e,X),X}var re=r(7373);function ne(e,t){return function(){return e.apply(t,arguments)}}const{toString:ae}=Object.prototype,{getPrototypeOf:oe}=Object,{iterator:ie,toStringTag:se}=Symbol,le=(ce=Object.create(null),e=>{const t=ae.call(e);return ce[t]||(ce[t]=t.slice(8,-1).toLowerCase())});var ce;const ue=e=>(e=e.toLowerCase(),t=>le(t)===e),de=e=>t=>typeof t===e,{isArray:pe}=Array,me=de("undefined");function fe(e){return null!==e&&!me(e)&&null!==e.constructor&&!me(e.constructor)&&Ee(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const he=ue("ArrayBuffer"),be=de("string"),Ee=de("function"),ge=de("number"),ye=e=>null!==e&&"object"==typeof e,we=e=>{if("object"!==le(e))return!1;const t=oe(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||se in e||ie in e)},ve=ue("Date"),Te=ue("File"),Se=ue("Blob"),_e=ue("FileList"),ke=ue("URLSearchParams"),[xe,Oe,Ae,Ce]=["ReadableStream","Request","Response","Headers"].map(ue);function Re(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,a;if("object"!=typeof e&&(e=[e]),pe(e))for(n=0,a=e.length;n0;)if(n=r[a],t===n.toLowerCase())return n;return null}const Ie="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,ze=e=>!me(e)&&e!==Ie,je=(Pe="undefined"!=typeof Uint8Array&&oe(Uint8Array),e=>Pe&&e instanceof Pe);var Pe;const Le=ue("HTMLFormElement"),Fe=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),Me=ue("RegExp"),Ne=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};Re(r,(r,a)=>{let o;!1!==(o=t(r,a,e))&&(n[a]=o||r)}),Object.defineProperties(e,n)},$e=ue("AsyncFunction"),Ue=(Be="function"==typeof setImmediate,Ve=Ee(Ie.postMessage),Be?setImmediate:Ve?(Ge=`axios@${Math.random()}`,He=[],Ie.addEventListener("message",({source:e,data:t})=>{e===Ie&&t===Ge&&He.length&&He.shift()()},!1),e=>{He.push(e),Ie.postMessage(Ge,"*")}):e=>setTimeout(e));var Be,Ve,Ge,He;const qe="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Ie):"undefined"!=typeof process&&process.nextTick||Ue,Ye={isArray:pe,isArrayBuffer:he,isBuffer:fe,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Ee(e.append)&&("formdata"===(t=le(e))||"object"===t&&Ee(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&he(e.buffer),t},isString:be,isNumber:ge,isBoolean:e=>!0===e||!1===e,isObject:ye,isPlainObject:we,isEmptyObject:e=>{if(!ye(e)||fe(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:xe,isRequest:Oe,isResponse:Ae,isHeaders:Ce,isUndefined:me,isDate:ve,isFile:Te,isBlob:Se,isRegExp:Me,isFunction:Ee,isStream:e=>ye(e)&&Ee(e.pipe),isURLSearchParams:ke,isTypedArray:je,isFileList:_e,forEach:Re,merge:function e(){const{caseless:t}=ze(this)&&this||{},r={},n=(n,a)=>{const o=t&&De(r,a)||a;we(r[o])&&we(n)?r[o]=e(r[o],n):we(n)?r[o]=e({},n):pe(n)?r[o]=n.slice():r[o]=n};for(let e=0,t=arguments.length;e(Re(t,(t,n)=>{r&&Ee(t)?e[n]=ne(t,r):e[n]=t},{allOwnKeys:n}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let a,o,i;const s={};if(t=t||{},null==e)return t;do{for(a=Object.getOwnPropertyNames(e),o=a.length;o-- >0;)i=a[o],n&&!n(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==r&&oe(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:le,kindOfTest:ue,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(pe(e))return e;let t=e.length;if(!ge(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[ie]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:Le,hasOwnProperty:Fe,hasOwnProp:Fe,reduceDescriptors:Ne,freezeMethods:e=>{Ne(e,(t,r)=>{if(Ee(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];Ee(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))})},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach(e=>{r[e]=!0})};return pe(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,r){return t.toUpperCase()+r}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:De,global:Ie,isContextDefined:ze,isSpecCompliantForm:function(e){return!!(e&&Ee(e.append)&&"FormData"===e[se]&&e[ie])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(ye(e)){if(t.indexOf(e)>=0)return;if(fe(e))return e;if(!("toJSON"in e)){t[n]=e;const a=pe(e)?[]:{};return Re(e,(e,t)=>{const o=r(e,n+1);!me(o)&&(a[t]=o)}),t[n]=void 0,a}}return e};return r(e,0)},isAsyncFn:$e,isThenable:e=>e&&(ye(e)||Ee(e))&&Ee(e.then)&&Ee(e.catch),setImmediate:Ue,asap:qe,isIterable:e=>null!=e&&Ee(e[ie])};function We(e,t,r,n,a){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),a&&(this.response=a,this.status=a.status?a.status:null)}Ye.inherits(We,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Ye.toJSONObject(this.config),code:this.code,status:this.status}}});const Ke=We.prototype,Xe={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Xe[e]={value:e}}),Object.defineProperties(We,Xe),Object.defineProperty(Ke,"isAxiosError",{value:!0}),We.from=(e,t,r,n,a,o)=>{const i=Object.create(Ke);return Ye.toFlatObject(e,i,function(e){return e!==Error.prototype},e=>"isAxiosError"!==e),We.call(i,e.message,t,r,n,a),i.cause=e,i.name=e.name,o&&Object.assign(i,o),i};const Je=We;function Ze(e){return Ye.isPlainObject(e)||Ye.isArray(e)}function Qe(e){return Ye.endsWith(e,"[]")?e.slice(0,-2):e}function et(e,t,r){return e?e.concat(t).map(function(e,t){return e=Qe(e),!r&&t?"["+e+"]":e}).join(r?".":""):t}const tt=Ye.toFlatObject(Ye,{},null,function(e){return/^is[A-Z]/.test(e)}),rt=function(e,t,r){if(!Ye.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=Ye.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!Ye.isUndefined(t[e])})).metaTokens,a=r.visitor||c,o=r.dots,i=r.indexes,s=(r.Blob||"undefined"!=typeof Blob&&Blob)&&Ye.isSpecCompliantForm(t);if(!Ye.isFunction(a))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(Ye.isDate(e))return e.toISOString();if(Ye.isBoolean(e))return e.toString();if(!s&&Ye.isBlob(e))throw new Je("Blob is not supported. Use a Buffer instead.");return Ye.isArrayBuffer(e)||Ye.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,r,a){let s=e;if(e&&!a&&"object"==typeof e)if(Ye.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(Ye.isArray(e)&&function(e){return Ye.isArray(e)&&!e.some(Ze)}(e)||(Ye.isFileList(e)||Ye.endsWith(r,"[]"))&&(s=Ye.toArray(e)))return r=Qe(r),s.forEach(function(e,n){!Ye.isUndefined(e)&&null!==e&&t.append(!0===i?et([r],n,o):null===i?r:r+"[]",l(e))}),!1;return!!Ze(e)||(t.append(et(a,r,o),l(e)),!1)}const u=[],d=Object.assign(tt,{defaultVisitor:c,convertValue:l,isVisitable:Ze});if(!Ye.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!Ye.isUndefined(r)){if(-1!==u.indexOf(r))throw Error("Circular reference detected in "+n.join("."));u.push(r),Ye.forEach(r,function(r,o){!0===(!(Ye.isUndefined(r)||null===r)&&a.call(t,r,Ye.isString(o)?o.trim():o,n,d))&&e(r,n?n.concat(o):[o])}),u.pop()}}(e),t};function nt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function at(e,t){this._pairs=[],e&&rt(e,this,t)}const ot=at.prototype;ot.append=function(e,t){this._pairs.push([e,t])},ot.toString=function(e){const t=e?function(t){return e.call(this,t,nt)}:nt;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};const it=at;function st(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function lt(e,t,r){if(!t)return e;const n=r&&r.encode||st;Ye.isFunction(r)&&(r={serialize:r});const a=r&&r.serialize;let o;if(o=a?a(t,r):Ye.isURLSearchParams(t)?t.toString():new it(t,r).toString(n),o){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}const ct=class{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Ye.forEach(this.handlers,function(t){null!==t&&e(t)})}},ut={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},dt={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:it,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},pt="undefined"!=typeof window&&"undefined"!=typeof document,mt="object"==typeof navigator&&navigator||void 0,ft=pt&&(!mt||["ReactNative","NativeScript","NS"].indexOf(mt.product)<0),ht="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,bt=pt&&window.location.href||"http://localhost",Et={...n,...dt},gt=function(e){function t(e,r,n,a){let o=e[a++];if("__proto__"===o)return!0;const i=Number.isFinite(+o),s=a>=e.length;return o=!o&&Ye.isArray(n)?n.length:o,s?(Ye.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!i):(n[o]&&Ye.isObject(n[o])||(n[o]=[]),t(e,r,n[o],a)&&Ye.isArray(n[o])&&(n[o]=function(e){const t={},r=Object.keys(e);let n;const a=r.length;let o;for(n=0;n{t(function(e){return Ye.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),n,r,0)}),r}return null},yt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,a=Ye.isObject(e);if(a&&Ye.isHTMLForm(e)&&(e=new FormData(e)),Ye.isFormData(e))return n?JSON.stringify(gt(e)):e;if(Ye.isArrayBuffer(e)||Ye.isBuffer(e)||Ye.isStream(e)||Ye.isFile(e)||Ye.isBlob(e)||Ye.isReadableStream(e))return e;if(Ye.isArrayBufferView(e))return e.buffer;if(Ye.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(a){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return rt(e,new Et.classes.URLSearchParams,{visitor:function(e,t,r,n){return Et.isNode&&Ye.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((o=Ye.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return rt(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return a||n?(t.setContentType("application/json",!1),function(e){if(Ye.isString(e))try{return(0,JSON.parse)(e),Ye.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||yt.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(Ye.isResponse(e)||Ye.isReadableStream(e))return e;if(e&&Ye.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw Je.from(e,Je.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Et.classes.FormData,Blob:Et.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Ye.forEach(["delete","get","head","post","put","patch"],e=>{yt.headers[e]={}});const wt=yt,vt=Ye.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Tt=Symbol("internals");function St(e){return e&&String(e).trim().toLowerCase()}function _t(e){return!1===e||null==e?e:Ye.isArray(e)?e.map(_t):String(e)}function kt(e,t,r,n,a){return Ye.isFunction(n)?n.call(this,t,r):(a&&(t=r),Ye.isString(t)?Ye.isString(n)?-1!==t.indexOf(n):Ye.isRegExp(n)?n.test(t):void 0:void 0)}class xt{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function a(e,t,r){const a=St(t);if(!a)throw new Error("header name must be a non-empty string");const o=Ye.findKey(n,a);(!o||void 0===n[o]||!0===r||void 0===r&&!1!==n[o])&&(n[o||t]=_t(e))}const o=(e,t)=>Ye.forEach(e,(e,r)=>a(e,r,t));if(Ye.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(Ye.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))o((e=>{const t={};let r,n,a;return e&&e.split("\n").forEach(function(e){a=e.indexOf(":"),r=e.substring(0,a).trim().toLowerCase(),n=e.substring(a+1).trim(),!r||t[r]&&vt[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t})(e),t);else if(Ye.isObject(e)&&Ye.isIterable(e)){let r,n,a={};for(const t of e){if(!Ye.isArray(t))throw TypeError("Object iterator must return a key-value pair");a[n=t[0]]=(r=a[n])?Ye.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}o(a,t)}else null!=e&&a(t,e,r);return this}get(e,t){if(e=St(e)){const r=Ye.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(Ye.isFunction(t))return t.call(this,e,r);if(Ye.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=St(e)){const r=Ye.findKey(this,e);return!(!r||void 0===this[r]||t&&!kt(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function a(e){if(e=St(e)){const a=Ye.findKey(r,e);!a||t&&!kt(0,r[a],a,t)||(delete r[a],n=!0)}}return Ye.isArray(e)?e.forEach(a):a(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const a=t[r];e&&!kt(0,this[a],a,e,!0)||(delete this[a],n=!0)}return n}normalize(e){const t=this,r={};return Ye.forEach(this,(n,a)=>{const o=Ye.findKey(r,a);if(o)return t[o]=_t(n),void delete t[a];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}(a):String(a).trim();i!==a&&delete t[a],t[i]=_t(n),r[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Ye.forEach(this,(r,n)=>{null!=r&&!1!==r&&(t[n]=e&&Ye.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(e=>r.set(e)),r}static accessor(e){const t=(this[Tt]=this[Tt]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=St(e);t[n]||(function(e,t){const r=Ye.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(e,r,a){return this[n].call(this,t,e,r,a)},configurable:!0})})}(r,e),t[n]=!0)}return Ye.isArray(e)?e.forEach(n):n(e),this}}xt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Ye.reduceDescriptors(xt.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}}),Ye.freezeMethods(xt);const Ot=xt;function At(e,t){const r=this||wt,n=t||r,a=Ot.from(n.headers);let o=n.data;return Ye.forEach(e,function(e){o=e.call(r,o,a.normalize(),t?t.status:void 0)}),a.normalize(),o}function Ct(e){return!(!e||!e.__CANCEL__)}function Rt(e,t,r){Je.call(this,null==e?"canceled":e,Je.ERR_CANCELED,t,r),this.name="CanceledError"}Ye.inherits(Rt,Je,{__CANCEL__:!0});const Dt=Rt;function It(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new Je("Request failed with status code "+r.status,[Je.ERR_BAD_REQUEST,Je.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}const zt=(e,t,r=3)=>{let n=0;const a=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let a,o=0,i=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=n[i];a||(a=l),r[o]=s,n[o]=l;let u=i,d=0;for(;u!==o;)d+=r[u++],u%=e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),l-a{a=o,r=null,n&&(clearTimeout(n),n=null),e(...t)};return[(...e)=>{const t=Date.now(),s=t-a;s>=o?i(e,t):(r=e,n||(n=setTimeout(()=>{n=null,i(r)},o-s)))},()=>r&&i(r)]}(r=>{const o=r.loaded,i=r.lengthComputable?r.total:void 0,s=o-n,l=a(s);n=o,e({loaded:o,total:i,progress:i?o/i:void 0,bytes:s,rate:l||void 0,estimated:l&&i&&o<=i?(i-o)/l:void 0,event:r,lengthComputable:null!=i,[t?"download":"upload"]:!0})},r)},jt=(e,t)=>{const r=null!=e;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},Pt=e=>(...t)=>Ye.asap(()=>e(...t)),Lt=Et.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,Et.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(Et.origin),Et.navigator&&/(msie|trident)/i.test(Et.navigator.userAgent)):()=>!0,Ft=Et.hasStandardBrowserEnv?{write(e,t,r,n,a,o){const i=[e+"="+encodeURIComponent(t)];Ye.isNumber(r)&&i.push("expires="+new Date(r).toGMTString()),Ye.isString(n)&&i.push("path="+n),Ye.isString(a)&&i.push("domain="+a),!0===o&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Mt(e,t,r){let n=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(n||0==r)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Nt=e=>e instanceof Ot?{...e}:e;function $t(e,t){t=t||{};const r={};function n(e,t,r,n){return Ye.isPlainObject(e)&&Ye.isPlainObject(t)?Ye.merge.call({caseless:n},e,t):Ye.isPlainObject(t)?Ye.merge({},t):Ye.isArray(t)?t.slice():t}function a(e,t,r,a){return Ye.isUndefined(t)?Ye.isUndefined(e)?void 0:n(void 0,e,0,a):n(e,t,0,a)}function o(e,t){if(!Ye.isUndefined(t))return n(void 0,t)}function i(e,t){return Ye.isUndefined(t)?Ye.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function s(r,a,o){return o in t?n(r,a):o in e?n(void 0,r):void 0}const l={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,r)=>a(Nt(e),Nt(t),0,!0)};return Ye.forEach(Object.keys({...e,...t}),function(n){const o=l[n]||a,i=o(e[n],t[n],n);Ye.isUndefined(i)&&o!==s||(r[n]=i)}),r}const Ut=e=>{const t=$t({},e);let r,{data:n,withXSRFToken:a,xsrfHeaderName:o,xsrfCookieName:i,headers:s,auth:l}=t;if(t.headers=s=Ot.from(s),t.url=lt(Mt(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),Ye.isFormData(n))if(Et.hasStandardBrowserEnv||Et.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(r=s.getContentType())){const[e,...t]=r?r.split(";").map(e=>e.trim()).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(Et.hasStandardBrowserEnv&&(a&&Ye.isFunction(a)&&(a=a(t)),a||!1!==a&&Lt(t.url))){const e=o&&i&&Ft.read(i);e&&s.set(o,e)}return t},Bt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,r){const n=Ut(e);let a=n.data;const o=Ot.from(n.headers).normalize();let i,s,l,c,u,{responseType:d,onUploadProgress:p,onDownloadProgress:m}=n;function f(){c&&c(),u&&u(),n.cancelToken&&n.cancelToken.unsubscribe(i),n.signal&&n.signal.removeEventListener("abort",i)}let h=new XMLHttpRequest;function b(){if(!h)return;const n=Ot.from("getAllResponseHeaders"in h&&h.getAllResponseHeaders());It(function(e){t(e),f()},function(e){r(e),f()},{data:d&&"text"!==d&&"json"!==d?h.response:h.responseText,status:h.status,statusText:h.statusText,headers:n,config:e,request:h}),h=null}h.open(n.method.toUpperCase(),n.url,!0),h.timeout=n.timeout,"onloadend"in h?h.onloadend=b:h.onreadystatechange=function(){h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))&&setTimeout(b)},h.onabort=function(){h&&(r(new Je("Request aborted",Je.ECONNABORTED,e,h)),h=null)},h.onerror=function(){r(new Je("Network Error",Je.ERR_NETWORK,e,h)),h=null},h.ontimeout=function(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const a=n.transitional||ut;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new Je(t,a.clarifyTimeoutError?Je.ETIMEDOUT:Je.ECONNABORTED,e,h)),h=null},void 0===a&&o.setContentType(null),"setRequestHeader"in h&&Ye.forEach(o.toJSON(),function(e,t){h.setRequestHeader(t,e)}),Ye.isUndefined(n.withCredentials)||(h.withCredentials=!!n.withCredentials),d&&"json"!==d&&(h.responseType=n.responseType),m&&([l,u]=zt(m,!0),h.addEventListener("progress",l)),p&&h.upload&&([s,c]=zt(p),h.upload.addEventListener("progress",s),h.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(i=t=>{h&&(r(!t||t.type?new Dt(null,e,h):t),h.abort(),h=null)},n.cancelToken&&n.cancelToken.subscribe(i),n.signal&&(n.signal.aborted?i():n.signal.addEventListener("abort",i)));const E=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(n.url);E&&-1===Et.protocols.indexOf(E)?r(new Je("Unsupported protocol "+E+":",Je.ERR_BAD_REQUEST,e)):h.send(a||null)})},Vt=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,n=new AbortController;const a=function(e){if(!r){r=!0,i();const t=e instanceof Error?e:this.reason;n.abort(t instanceof Je?t:new Dt(t instanceof Error?t.message:t))}};let o=t&&setTimeout(()=>{o=null,a(new Je(`timeout ${t} of ms exceeded`,Je.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(a):e.removeEventListener("abort",a)}),e=null)};e.forEach(e=>e.addEventListener("abort",a));const{signal:s}=n;return s.unsubscribe=()=>Ye.asap(i),s}},Gt=function*(e,t){let r=e.byteLength;if(!t||r{const a=async function*(e,t){for await(const r of async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}}finally{await t.cancel()}}(e))yield*Gt(r,t)}(e,t);let o,i=0,s=e=>{o||(o=!0,n&&n(e))};return new ReadableStream({async pull(e){try{const{done:t,value:n}=await a.next();if(t)return s(),void e.close();let o=n.byteLength;if(r){let e=i+=o;r(e)}e.enqueue(new Uint8Array(n))}catch(e){throw s(e),e}},cancel:e=>(s(e),a.return())},{highWaterMark:2})},qt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Yt=qt&&"function"==typeof ReadableStream,Wt=qt&&("function"==typeof TextEncoder?(Kt=new TextEncoder,e=>Kt.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Kt;const Xt=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Jt=Yt&&Xt(()=>{let e=!1;const t=new Request(Et.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Zt=Yt&&Xt(()=>Ye.isReadableStream(new Response("").body)),Qt={stream:Zt&&(e=>e.body)};var er;qt&&(er=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Qt[e]&&(Qt[e]=Ye.isFunction(er[e])?t=>t[e]():(t,r)=>{throw new Je(`Response type '${e}' is not supported`,Je.ERR_NOT_SUPPORT,r)})}));const tr={http:null,xhr:Bt,fetch:qt&&(async e=>{let{url:t,method:r,data:n,signal:a,cancelToken:o,timeout:i,onDownloadProgress:s,onUploadProgress:l,responseType:c,headers:u,withCredentials:d="same-origin",fetchOptions:p}=Ut(e);c=c?(c+"").toLowerCase():"text";let m,f=Vt([a,o&&o.toAbortSignal()],i);const h=f&&f.unsubscribe&&(()=>{f.unsubscribe()});let b;try{if(l&&Jt&&"get"!==r&&"head"!==r&&0!==(b=await(async(e,t)=>{const r=Ye.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(Ye.isBlob(e))return e.size;if(Ye.isSpecCompliantForm(e)){const t=new Request(Et.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return Ye.isArrayBufferView(e)||Ye.isArrayBuffer(e)?e.byteLength:(Ye.isURLSearchParams(e)&&(e+=""),Ye.isString(e)?(await Wt(e)).byteLength:void 0)})(t):r})(u,n))){let e,r=new Request(t,{method:"POST",body:n,duplex:"half"});if(Ye.isFormData(n)&&(e=r.headers.get("content-type"))&&u.setContentType(e),r.body){const[e,t]=jt(b,zt(Pt(l)));n=Ht(r.body,65536,e,t)}}Ye.isString(d)||(d=d?"include":"omit");const a="credentials"in Request.prototype;m=new Request(t,{...p,signal:f,method:r.toUpperCase(),headers:u.normalize().toJSON(),body:n,duplex:"half",credentials:a?d:void 0});let o=await fetch(m,p);const i=Zt&&("stream"===c||"response"===c);if(Zt&&(s||i&&h)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=o[t]});const t=Ye.toFiniteNumber(o.headers.get("content-length")),[r,n]=s&&jt(t,zt(Pt(s),!0))||[];o=new Response(Ht(o.body,65536,r,()=>{n&&n(),h&&h()}),e)}c=c||"text";let E=await Qt[Ye.findKey(Qt,c)||"text"](o,e);return!i&&h&&h(),await new Promise((t,r)=>{It(t,r,{data:E,headers:Ot.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:m})})}catch(t){if(h&&h(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new Je("Network Error",Je.ERR_NETWORK,e,m),{cause:t.cause||t});throw Je.from(t,t&&t.code,e,m)}})};Ye.forEach(tr,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const rr=e=>`- ${e}`,nr=e=>Ye.isFunction(e)||null===e||!1===e,ar=e=>{e=Ye.isArray(e)?e:[e];const{length:t}=e;let r,n;const a={};for(let o=0;o`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));let r=t?e.length>1?"since :\n"+e.map(rr).join("\n"):" "+rr(e[0]):"as no adapter specified";throw new Je("There is no suitable adapter to dispatch the request "+r,"ERR_NOT_SUPPORT")}return n};function or(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Dt(null,e)}function ir(e){return or(e),e.headers=Ot.from(e.headers),e.data=At.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ar(e.adapter||wt.adapter)(e).then(function(t){return or(e),t.data=At.call(e,e.transformResponse,t),t.headers=Ot.from(t.headers),t},function(t){return Ct(t)||(or(e),t&&t.response&&(t.response.data=At.call(e,e.transformResponse,t.response),t.response.headers=Ot.from(t.response.headers))),Promise.reject(t)})}const sr="1.11.0",lr={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{lr[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const cr={};lr.transitional=function(e,t,r){function n(e,t){return"[Axios v"+sr+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,a,o)=>{if(!1===e)throw new Je(n(a," has been removed"+(t?" in "+t:"")),Je.ERR_DEPRECATED);return t&&!cr[a]&&(cr[a]=!0,console.warn(n(a," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,a,o)}},lr.spelling=function(e){return(t,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};const ur={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Je("options must be an object",Je.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let a=n.length;for(;a-- >0;){const o=n[a],i=t[o];if(i){const t=e[o],r=void 0===t||i(t,o,e);if(!0!==r)throw new Je("option "+o+" must be "+r,Je.ERR_BAD_OPTION_VALUE);continue}if(!0!==r)throw new Je("Unknown option "+o,Je.ERR_BAD_OPTION)}},validators:lr},dr=ur.validators;class pr{constructor(e){this.defaults=e||{},this.interceptors={request:new ct,response:new ct}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=$t(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:a}=t;void 0!==r&&ur.assertOptions(r,{silentJSONParsing:dr.transitional(dr.boolean),forcedJSONParsing:dr.transitional(dr.boolean),clarifyTimeoutError:dr.transitional(dr.boolean)},!1),null!=n&&(Ye.isFunction(n)?t.paramsSerializer={serialize:n}:ur.assertOptions(n,{encode:dr.function,serialize:dr.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ur.assertOptions(t,{baseUrl:dr.spelling("baseURL"),withXsrfToken:dr.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=a&&Ye.merge(a.common,a[t.method]);a&&Ye.forEach(["delete","get","head","post","put","patch","common"],e=>{delete a[e]}),t.headers=Ot.concat(o,a);const i=[];let s=!0;this.interceptors.request.forEach(function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,i.unshift(e.fulfilled,e.rejected))});const l=[];let c;this.interceptors.response.forEach(function(e){l.push(e.fulfilled,e.rejected)});let u,d=0;if(!s){const e=[ir.bind(this),void 0];for(e.unshift(...i),e.push(...l),u=e.length,c=Promise.resolve(t);d{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null}),this.promise.then=e=>{let t;const n=new Promise(e=>{r.subscribe(e),t=e}).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e(function(e,n,a){r.reason||(r.reason=new Dt(e,n,a),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new fr(function(t){e=t}),cancel:e}}}const hr=fr,br={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(br).forEach(([e,t])=>{br[t]=e});const Er=br,gr=function e(t){const r=new mr(t),n=ne(mr.prototype.request,r);return Ye.extend(n,mr.prototype,r,{allOwnKeys:!0}),Ye.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e($t(t,r))},n}(wt);gr.Axios=mr,gr.CanceledError=Dt,gr.CancelToken=hr,gr.isCancel=Ct,gr.VERSION=sr,gr.toFormData=rt,gr.AxiosError=Je,gr.Cancel=gr.CanceledError,gr.all=function(e){return Promise.all(e)},gr.spread=function(e){return function(t){return e.apply(null,t)}},gr.isAxiosError=function(e){return Ye.isObject(e)&&!0===e.isAxiosError},gr.mergeConfig=$t,gr.AxiosHeaders=Ot,gr.formToJSON=e=>gt(Ye.isHTMLForm(e)?new FormData(e):e),gr.getAdapter=ar,gr.HttpStatusCode=Er,gr.default=gr;const yr=gr,wr=new class{constructor(){this.baseURL={SHELL:"/bin/bash",npm_command:"run",SESSION_MANAGER:"local/unix:@/tmp/.ICE-unix/2821,unix/unix:/tmp/.ICE-unix/2821",COREPACK_ENABLE_AUTO_PIN:"0",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",HOSTNAME:"bazzite",HISTSIZE:"1000",ICEAUTHORITY:"/run/user/1000/iceauth_BYCzKU",NODE:"/var/home/linuxbrew/.linuxbrew/Cellar/node/24.6.0/bin/node",SSH_AUTH_SOCK:"/run/user/1000/ssh-agent.socket",MEMORY_PRESSURE_WRITE:"c29tZSAyMDAwMDAgMjAwMDAwMAA=",COLOR:"0",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:"not a tty",EDITOR:"/usr/bin/nano",XDG_SEAT:"seat0",PWD:"/var/home/bazzite/Projects/skybridge/kms/web",XDG_SESSION_DESKTOP:"KDE",LOGNAME:"bazzite",XDG_SESSION_TYPE:"wayland",npm_config_init_module:"/home/bazzite/.npm-init.js",SYSTEMD_EXEC_PID:"2913",_:"/var/home/bazzite/Projects/skybridge/kms/web/node_modules/.bin/webpack",XAUTHORITY:"/run/user/1000/xauth_yhtnnV",SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS:"0",VSCODE_GIT_ASKPASS_NODE:"/usr/share/code/code",ENABLE_IDE_INTEGRATION:"true",CLAUDECODE:"1",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:"d321aef5e720442f8313c810fbda021f",MANAGERPID:"2439",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:"27272",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:"2",GIT_EDITOR:"true",HOMEBREW_REPOSITORY:"/home/linuxbrew/.linuxbrew/Homebrew",XDG_VTNR:"2",XDG_SESSION_ID:"2",npm_config_user_agent:"npm/11.5.1 node/v24.6.0 linux x64 workspaces/false",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"delta",npm_execpath:"/var/home/linuxbrew/.linuxbrew/lib/node_modules/npm/bin/npm-cli.js",XDG_RUNTIME_DIR:"/run/user/1000",CLAUDE_CODE_ENTRYPOINT:"cli",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:30102",XDG_DATA_DIRS:"/home/bazzite/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share",GDK_BACKEND:"x11",KDE_FULL_SESSION:"true",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.6.0/bin/node",OLDPWD:"/var/home/bazzite/Projects/skybridge/web",TERM_PROGRAM:"vscode"}.REACT_APP_API_URL||"http://localhost:8080",this.api=yr.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,r=0){return(await this.api.get(`/api/applications/${e}/tokens?limit=${t}&offset=${r}`)).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 r="/api/audit/events"+(t.toString()?"?"+t.toString():"");return(await this.api.get(r)).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 r="/api/audit/stats"+(t.toString()?"?"+t.toString():"");return(await this.api.get(r)).data}};var vr=r(4353),Tr=r.n(vr);function Sr(){return Sr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(!1),[l,c]=(0,i.useState)(null),[u,d]=(0,i.useState)(!1),[p,m]=(0,i.useState)(null),f=te({initialValues:{app_id:"",app_link:"",type:[],callback_url:"",token_prefix:"",token_renewal_duration:"24h",max_token_duration:"168h",owner:{type:"user",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,i.useEffect)(()=>{h()},[]);const h=async()=>{try{n(!0);const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e),re.notifications.show({title:"Error",message:"Failed to load applications",color:"red"})}finally{n(!1)}},b=e=>{navigator.clipboard.writeText(e),re.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},E=e.map(e=>s().createElement(R.Table.Tr,{key:e.app_id},s().createElement(R.Table.Td,null,s().createElement(R.Text,{fw:500},e.app_id)),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},e.type.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm"},e)))),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.created_at).format("MMM DD, YYYY"))),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>(e=>{m(e),d(!0)})(e),title:"View Details"},s().createElement(D.IconEye,{size:16})),s().createElement(R.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>(e=>{c(e),f.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}),o(!0)})(e),title:"Edit"},s().createElement(D.IconEdit,{size:16})),s().createElement(R.ActionIcon,{variant:"subtle",color:"red",onClick:()=>(async e=>{if(window.confirm("Are you sure you want to delete this application?"))try{await wr.deleteApplication(e),re.notifications.show({title:"Success",message:"Application deleted successfully",color:"green"}),h()}catch(e){console.error("Failed to delete application:",e),re.notifications.show({title:"Error",message:"Failed to delete application",color:"red"})}})(e.app_id),title:"Delete"},s().createElement(D.IconTrash,{size:16}))))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Applications"),s().createElement(R.Text,{c:"dimmed"},"Manage your registered applications and their configurations")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{c(null),f.reset(),o(!0)}},"New Application")),r?s().createElement(R.Stack,{align:"center",justify:"center",h:200},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading applications...")):0===e.length?s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},s().createElement(R.Stack,{align:"center",gap:"md"},s().createElement(D.IconAlertCircle,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No applications found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},"Create your first application to get started with the key management system")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{c(null),f.reset(),o(!0)}},"Create Application"))):s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Application ID"),s().createElement(R.Table.Th,null,"Type"),s().createElement(R.Table.Th,null,"Owner"),s().createElement(R.Table.Th,null,"Created"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,E))),s().createElement(R.Modal,{opened:a,onClose:()=>{o(!1),c(null),f.reset()},title:l?"Edit Application":"Create New Application",size:"lg"},s().createElement("form",{onSubmit:f.onSubmit(async e=>{try{l?(await wr.updateApplication(l.app_id,e),re.notifications.show({title:"Success",message:"Application updated successfully",color:"green"})):(await wr.createApplication(e),re.notifications.show({title:"Success",message:"Application created successfully",color:"green"})),o(!1),c(null),f.reset(),h()}catch(e){console.error("Failed to save application:",e),re.notifications.show({title:"Error",message:"Failed to save application",color:"red"})}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.TextInput,Sr({label:"Application ID",placeholder:"my-app-id",required:!0},f.getInputProps("app_id"),{disabled:!!l})),s().createElement(R.TextInput,Sr({label:"Application Link",placeholder:"https://myapp.example.com",required:!0},f.getInputProps("app_link"))),s().createElement(R.MultiSelect,Sr({label:"Application Type",placeholder:"Select application types",data:[{value:"web",label:"Web Application"},{value:"mobile",label:"Mobile Application"},{value:"api",label:"API Service"},{value:"cli",label:"CLI Tool"},{value:"service",label:"Background Service"}],required:!0},f.getInputProps("type"))),s().createElement(R.TextInput,Sr({label:"Callback URL",placeholder:"https://myapp.example.com/callback",required:!0},f.getInputProps("callback_url"))),s().createElement(R.TextInput,Sr({label:"Token Prefix (Optional)",placeholder:"myapp_"},f.getInputProps("token_prefix"))),s().createElement(R.Group,{grow:!0},s().createElement(R.TextInput,Sr({label:"Token Renewal Duration",placeholder:"24h"},f.getInputProps("token_renewal_duration"))),s().createElement(R.TextInput,Sr({label:"Max Token Duration",placeholder:"168h"},f.getInputProps("max_token_duration")))),s().createElement(R.Group,{justify:"flex-end",mt:"md"},s().createElement(R.Button,{variant:"subtle",onClick:()=>{o(!1),c(null),f.reset()}},"Cancel"),s().createElement(R.Button,{type:"submit"},l?"Update Application":"Create Application"))))),s().createElement(R.Modal,{opened:u,onClose:()=>d(!1),title:"Application Details",size:"md"},p&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Application ID:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,null,p.app_id),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>b(p.app_id)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"HMAC Key:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},p.hmac_key.substring(0,16),"..."),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>b(p.hmac_key)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Application Link:"),s().createElement(R.Text,{size:"sm"},p.app_link)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Callback URL:"),s().createElement(R.Text,{size:"sm"},p.callback_url)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token Renewal:"),s().createElement(R.Text,{size:"sm"},p.token_renewal_duration/3600,"h")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Max Duration:"),s().createElement(R.Text,{size:"sm"},p.max_token_duration/3600,"h")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Created:"),s().createElement(R.Text,{size:"sm"},Tr()(p.created_at).format("MMM DD, YYYY HH:mm"))))))};function kr(){return kr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)([]),[a,o]=(0,i.useState)(!1),[l,c]=(0,i.useState)(!1),[u,d]=(0,i.useState)(!1),[p,m]=(0,i.useState)(null),f=te({initialValues:{app_id:"",owner:{type:"user",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,i.useEffect)(()=>{h(),b()},[]);const h=async()=>{try{const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}},b=async()=>{try{o(!0);const e=await wr.getApplications(100,0),t=[];for(const r of e.data)try{const e=(await wr.getTokensForApplication(r.app_id,100,0)).data.map(e=>({...e,app:r}));t.push(...e)}catch(e){}n(t)}catch(e){console.error("Failed to load tokens:",e),re.notifications.show({title:"Error",message:"Failed to load tokens",color:"red"})}finally{o(!1)}},E=e=>{navigator.clipboard.writeText(e),re.notifications.show({title:"Copied",message:"Copied to clipboard",color:"blue"})},g=r.map(e=>s().createElement(R.Table.Tr,{key:e.id},s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(D.IconKey,{size:16,color:"blue"}),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},e.id.substring(0,8),"..."))),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{variant:"light",color:"blue"},e.app?.app_id||"Unknown")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.owner.name," (",e.owner.owner,")")),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{variant:"light",color:"green"},e.type)),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.created_at).format("MMM DD, YYYY"))),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>E(e.id),title:"Copy Token ID"},s().createElement(D.IconCopy,{size:16})),s().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 wr.deleteToken(e),re.notifications.show({title:"Success",message:"Token deleted successfully",color:"green"}),b()}catch(e){console.error("Failed to delete token:",e),re.notifications.show({title:"Error",message:"Failed to delete token",color:"red"})}})(e.id),title:"Delete Token"},s().createElement(D.IconTrash,{size:16}))))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"API Tokens"),s().createElement(R.Text,{c:"dimmed"},"Manage static API tokens for your applications")),s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{f.reset(),c(!0)},disabled:0===e.length},"Create Token")),0===e.length&&s().createElement(R.Alert,{icon:s().createElement(D.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can create tokens."),a?s().createElement(R.Stack,{align:"center",justify:"center",h:200},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading tokens...")):0===r.length?s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"xl"},s().createElement(R.Stack,{align:"center",gap:"md"},s().createElement(D.IconKey,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No tokens found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},"Create your first API token to start using the key management system")),e.length>0&&s().createElement(R.Button,{leftSection:s().createElement(D.IconPlus,{size:16}),onClick:()=>{f.reset(),c(!0)}},"Create Token"))):s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Token ID"),s().createElement(R.Table.Th,null,"Application"),s().createElement(R.Table.Th,null,"Owner"),s().createElement(R.Table.Th,null,"Type"),s().createElement(R.Table.Th,null,"Created"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,g))),s().createElement(R.Modal,{opened:l,onClose:()=>{c(!1),f.reset()},title:"Create New Token",size:"md"},s().createElement("form",{onSubmit:f.onSubmit(async e=>{try{const{app_id:t,...r}=e,n=await wr.createToken(t,r);m(n),c(!1),d(!0),f.reset(),b(),re.notifications.show({title:"Success",message:"Token created successfully",color:"green"})}catch(e){console.error("Failed to create token:",e),re.notifications.show({title:"Error",message:"Failed to create token",color:"red"})}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Select,kr({label:"Application",placeholder:"Select an application",required:!0,data:e.map(e=>({value:e.app_id,label:`${e.app_id} (${e.type.join(", ")})`}))},f.getInputProps("app_id"))),s().createElement(R.MultiSelect,kr({label:"Permissions",placeholder:"Select permissions for this token",required:!0,data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},f.getInputProps("permissions"),{searchable:!0})),s().createElement(R.TextInput,kr({label:"Owner Name",placeholder:"Token owner name"},f.getInputProps("owner.name"))),s().createElement(R.TextInput,kr({label:"Owner Email",placeholder:"owner@example.com"},f.getInputProps("owner.owner"))),s().createElement(R.Group,{justify:"flex-end",mt:"md"},s().createElement(R.Button,{variant:"subtle",onClick:()=>{c(!1),f.reset()}},"Cancel"),s().createElement(R.Button,{type:"submit"},"Create Token"))))),s().createElement(R.Modal,{opened:u,onClose:()=>{d(!1),m(null)},title:"Token Created Successfully",size:"lg"},p&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Alert,{icon:s().createElement(D.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."),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Code,{block:!0,style:{fontSize:"12px",wordBreak:"break-all",flex:1}},p.token),s().createElement(R.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>E(p.token),title:"Copy Token"},s().createElement(D.IconCopy,{size:16})))),s().createElement(R.Divider,null),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token ID:"),s().createElement(R.Group,{gap:"xs"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},p.id),s().createElement(R.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>E(p.id)},s().createElement(D.IconCopy,{size:12})))),s().createElement(R.Group,{justify:"space-between",align:"flex-start"},s().createElement(R.Text,{fw:500},"Permissions:"),s().createElement(R.Stack,{gap:"xs",align:"flex-end"},p.permissions.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm"},e)))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Created:"),s().createElement(R.Text,{size:"sm"},Tr()(p.created_at).format("MMM DD, YYYY HH:mm"))),s().createElement(R.Group,{justify:"flex-end",mt:"lg"},s().createElement(R.Button,{onClick:()=>{d(!1),m(null)}},"Close")))))};function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(null),l=te({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,i.useEffect)(()=>{c()},[]);const c=async()=>{try{const e=await wr.getApplications(100,0);t(e.data)}catch(e){console.error("Failed to load applications:",e)}};return s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Token Tester"),s().createElement(R.Text,{c:"dimmed"},"Test and verify API tokens against your applications")),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,md:6}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg"},s().createElement(R.Title,{order:3,mb:"md"},"Test Configuration"),s().createElement("form",{onSubmit:l.onSubmit(async e=>{try{n(!0),o(null);const t={...e,user_id:e.user_id||void 0,permissions:e.permissions&&e.permissions.length>0?e.permissions:void 0},r=await wr.verifyToken(t);o(r),r.valid?re.notifications.show({title:"Token Verified",message:"Token is "+(r.permitted?"valid and permitted":"valid but not permitted"),color:r.permitted?"green":"orange"}):re.notifications.show({title:"Token Invalid",message:r.error||"Token verification failed",color:"red"})}catch(e){console.error("Failed to verify token:",e),re.notifications.show({title:"Error",message:"Failed to verify token",color:"red"})}finally{n(!1)}})},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Select,Or({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(", ")})`}))},l.getInputProps("app_id"))),s().createElement(R.TextInput,Or({label:"User ID (Optional)",placeholder:"user@example.com",description:"Leave empty for token-only verification"},l.getInputProps("user_id"))),s().createElement(R.Textarea,Or({label:"Token",placeholder:"Paste your token here...",required:!0,minRows:3},l.getInputProps("token"))),s().createElement(R.MultiSelect,Or({label:"Required Permissions (Optional)",placeholder:"Select permissions to test",description:"Leave empty to skip permission checks",data:["app.read","app.write","app.delete","token.read","token.create","token.revoke","repo.read","repo.write","repo.admin","permission.read","permission.write"].map(e=>({value:e,label:e}))},l.getInputProps("permissions"),{searchable:!0})),s().createElement(R.Group,{justify:"flex-end"},s().createElement(R.Button,{type:"submit",loading:r,leftSection:r?s().createElement(R.Loader,{size:16}):s().createElement(D.IconTestPipe,{size:16}),disabled:0===e.length},r?"Testing...":"Test Token")))))),s().createElement(R.Grid.Col,{span:{base:12,md:6}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:"100%"},s().createElement(R.Title,{order:3,mb:"md"},"Test Results"),!a&&!r&&s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(D.IconTestPipe,{size:48,color:"gray"}),s().createElement(R.Text,{c:"dimmed",ta:"center"},'Configure your test parameters and click "Test Token" to see results')),r&&s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Verifying token...")),a&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Alert,{icon:s().createElement((e=>e.valid?e.valid&&e.permitted?D.IconCheck:D.IconAlertCircle:D.IconX)(a),{size:16}),title:a.valid?a.permitted?"Token Valid & Permitted":"Token Valid but Not Permitted":"Token Invalid",color:(e=>e.valid?e.valid&&e.permitted?"green":"orange":"red")(a)},a.error||(a.valid&&a.permitted?"Token is valid and has the required permissions":a.valid?"Token is valid but lacks some required permissions":"Token verification failed")),s().createElement(R.Divider,null),s().createElement(R.Stack,{gap:"xs"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Valid:"),s().createElement(R.Badge,{color:a.valid?"green":"red",variant:"light"},a.valid?"Yes":"No")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Permitted:"),s().createElement(R.Badge,{color:a.permitted?"green":"red",variant:"light"},a.permitted?"Yes":"No")),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Token Type:"),s().createElement(R.Badge,{variant:"light"},a.token_type)),a.user_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"User ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},a.user_id)),a.expires_at&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Expires At:"),s().createElement(R.Text,{size:"sm"},Tr()(a.expires_at).format("MMM DD, YYYY HH:mm"))),a.max_valid_at&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Max Valid Until:"),s().createElement(R.Text,{size:"sm"},Tr()(a.max_valid_at).format("MMM DD, YYYY HH:mm")))),a.permissions&&a.permissions.length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token Permissions:"),s().createElement(R.Group,{gap:"xs"},a.permissions.map(e=>s().createElement(R.Badge,{key:e,variant:"light",size:"sm",color:"blue"},e))))),a.permission_results&&Object.keys(a.permission_results).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Permission Check Results:"),s().createElement(R.Stack,{gap:"xs"},Object.entries(a.permission_results).map(([e,t])=>s().createElement(R.Group,{key:e,justify:"space-between"},s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},e),s().createElement(R.Badge,{color:t?"green":"red",variant:"light",size:"sm"},t?"Granted":"Denied")))))),a.claims&&Object.keys(a.claims).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Token Claims:"),s().createElement(R.Code,{block:!0},JSON.stringify(a.claims,null,2)))))))),0===e.length&&s().createElement(R.Alert,{icon:s().createElement(D.IconAlertCircle,{size:16}),title:"No Applications Found",color:"yellow"},"You need to create at least one application before you can test tokens."))},Cr=()=>{const[e,t]=(0,i.useState)([]),[r,n]=(0,i.useState)(!1),[a,o]=(0,i.useState)(0),[l,c]=(0,i.useState)(1),[u]=(0,i.useState)(20),[d,p]=(0,i.useState)(!1),[m,f]=(0,i.useState)(null),[h,b]=(0,i.useState)({limit:u,offset:0,order_by:"timestamp",order_desc:!0});(0,i.useEffect)(()=>{E()},[h]);const E=async()=>{try{n(!0);const e=await wr.getAuditEvents(h);t(e.events),o(e.total)}catch(e){console.error("Failed to load audit events:",e),re.notifications.show({title:"Error",message:"Failed to load audit events",color:"red"})}finally{n(!1)}},g=(e,t)=>{c(1),b(r=>({...r,[e]:t,offset:0}))},y=e=>{switch(e.toLowerCase()){case"success":return"green";case"failure":case"error":return"red";case"warning":return"yellow";default:return"gray"}},w=e=>e.startsWith("auth.")?"blue":e.startsWith("app.")?"purple":e.startsWith("token.")?"green":e.startsWith("permission.")?"orange":"gray",v=Math.ceil(a/u),T=e.map(e=>s().createElement(R.Table.Tr,{key:e.id},s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm"},Tr()(e.timestamp).format("MMM DD, HH:mm:ss"))),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{color:w(e.type),variant:"light",size:"sm"},e.type)),s().createElement(R.Table.Td,null,s().createElement(R.Badge,{color:y(e.status),variant:"light",size:"sm"},e.status)),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",c:"dimmed"},e.actor_id||"System")),s().createElement(R.Table.Td,null,s().createElement(R.Text,{size:"sm",lineClamp:2},e.description)),s().createElement(R.Table.Td,null,s().createElement(R.Group,{gap:"xs"},s().createElement(R.Button,{variant:"subtle",size:"xs",leftSection:s().createElement(D.IconEye,{size:14}),onClick:()=>(e=>{f(e),p(!0)})(e)},"Details")))));return s().createElement(R.Stack,{gap:"lg"},s().createElement(R.Group,{justify:"space-between"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Audit Log"),s().createElement(R.Text,{c:"dimmed"},"View and search system audit events and security logs")),s().createElement(R.Button,{leftSection:s().createElement(D.IconRefresh,{size:16}),variant:"light",onClick:E,loading:r},"Refresh")),s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"md"},s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500,size:"sm"},"Filters"),s().createElement(R.Button,{variant:"subtle",size:"xs",onClick:()=>{c(1),b({limit:u,offset:0,order_by:"timestamp",order_desc:!0})}},"Clear All")),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().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:h.event_types||[],onChange:e=>g("event_types",e.length?e:void 0),clearable:!0,searchable:!0,size:"sm"})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().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:h.statuses||[],onChange:e=>g("statuses",e.length?e:void 0),clearable:!0,size:"sm"})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().createElement(R.TextInput,{label:"Actor ID",placeholder:"user@example.com",value:h.actor_id||"",onChange:e=>g("actor_id",e.target.value||void 0),size:"sm",leftSection:s().createElement(D.IconSearch,{size:16})})),s().createElement(R.Grid.Col,{span:{base:12,sm:6,md:3}},s().createElement(R.TextInput,{label:"Resource ID",placeholder:"Resource identifier",value:h.resource_id||"",onChange:e=>g("resource_id",e.target.value||void 0),size:"sm",leftSection:s().createElement(D.IconSearch,{size:16})}))))),s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0},r?s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading audit events...")):0===e.length?s().createElement(R.Stack,{align:"center",justify:"center",h:300},s().createElement(D.IconActivity,{size:48,color:"gray"}),s().createElement("div",{style:{textAlign:"center"}},s().createElement(R.Text,{fw:500,mb:"xs"},"No audit events found"),s().createElement(R.Text,{size:"sm",c:"dimmed"},Object.keys(h).filter(e=>"limit"!==e&&"offset"!==e&&"order_by"!==e&&"order_desc"!==e).some(e=>h[e])?"Try adjusting your filters or clearing them to see more results":"Audit events will appear here as system activities occur"))):s().createElement(s().Fragment,null,s().createElement(R.Table,null,s().createElement(R.Table.Thead,null,s().createElement(R.Table.Tr,null,s().createElement(R.Table.Th,null,"Timestamp"),s().createElement(R.Table.Th,null,"Event Type"),s().createElement(R.Table.Th,null,"Status"),s().createElement(R.Table.Th,null,"Actor"),s().createElement(R.Table.Th,null,"Description"),s().createElement(R.Table.Th,null,"Actions"))),s().createElement(R.Table.Tbody,null,T)),v>1&&s().createElement(R.Group,{justify:"space-between",mt:"md",px:"md",pb:"md"},s().createElement(R.Text,{size:"sm",c:"dimmed"},"Showing ",(l-1)*u+1," to ",Math.min(l*u,a)," of ",a," events"),s().createElement(R.Pagination,{total:v,value:l,onChange:e=>{c(e),b(t=>({...t,offset:(e-1)*u}))},size:"sm"})))),s().createElement(R.Modal,{opened:d,onClose:()=>p(!1),title:"Audit Event Details",size:"lg"},m&&s().createElement(R.Stack,{gap:"md"},s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Event ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.id)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Timestamp:"),s().createElement(R.Text,{size:"sm"},Tr()(m.timestamp).format("MMMM DD, YYYY HH:mm:ss"))),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Event Type:"),s().createElement(R.Badge,{color:w(m.type),variant:"light"},m.type)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Status:"),s().createElement(R.Badge,{color:y(m.status),variant:"light"},m.status)),s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Action:"),s().createElement(R.Text,{size:"sm"},m.action)),s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Description:"),s().createElement(R.Text,{size:"sm"},m.description)),m.actor_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Actor ID:"),s().createElement(R.Text,{size:"sm"},m.actor_id)),m.actor_ip&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"IP Address:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.actor_ip)),m.resource_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Resource ID:"),s().createElement(R.Text,{size:"sm"},m.resource_id)),m.resource_type&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Resource Type:"),s().createElement(R.Badge,{variant:"outline",size:"sm"},m.resource_type)),m.request_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Request ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.request_id)),m.session_id&&s().createElement(R.Group,{justify:"space-between"},s().createElement(R.Text,{fw:500},"Session ID:"),s().createElement(R.Text,{size:"sm",style:{fontFamily:"monospace"}},m.session_id)),m.user_agent&&s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"User Agent:"),s().createElement(R.Text,{size:"xs",c:"dimmed",style:{fontFamily:"monospace"}},m.user_agent)),m.details&&Object.keys(m.details).length>0&&s().createElement(s().Fragment,null,s().createElement(R.Divider,null),s().createElement("div",null,s().createElement(R.Text,{fw:500,mb:"xs"},"Additional Details:"),s().createElement(R.Code,{block:!0},JSON.stringify(m.details,null,2)))))))},Rr=()=>{const[e,t]=(0,i.useState)(null),[r,n]=(0,i.useState)(!0);(0,i.useEffect)(()=>{a()},[]);const a=async()=>{try{n(!0);const[e]=await Promise.all([wr.getApplications(100,0)]),r={totalApplications:e.count,totalTokens:0,recentActivity:0,systemHealth:"healthy"};t(r)}catch(e){console.error("Failed to load dashboard data:",e),t({totalApplications:0,totalTokens:0,recentActivity:0,systemHealth:"error"})}finally{n(!1)}};if(r)return s().createElement(R.Stack,{align:"center",justify:"center",h:400},s().createElement(R.Loader,{size:"lg"}),s().createElement(R.Text,null,"Loading dashboard..."));const o=[{title:"Applications",value:e?.totalApplications||0,icon:D.IconApps,color:"blue",description:"Active applications"},{title:"API Tokens",value:e?.totalTokens||0,icon:D.IconKey,color:"green",description:"Generated tokens"},{title:"Recent Activity",value:e?.recentActivity||0,icon:D.IconActivity,color:"orange",description:"Events today"},{title:"System Health",value:"healthy"===e?.systemHealth?"100%":"85%",icon:"healthy"===e?.systemHealth?D.IconTrendingUp:D.IconAlertTriangle,color:"healthy"===e?.systemHealth?"green":"yellow",description:"System status"}];return s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Title,{order:2,mb:"xs"},"Dashboard Overview"),s().createElement(R.Text,{c:"dimmed"},"Monitor your key management system status and metrics")),s().createElement(R.SimpleGrid,{cols:{base:1,sm:2,lg:4},spacing:"lg"},o.map(e=>s().createElement(R.Card,{key:e.title,shadow:"sm",radius:"md",withBorder:!0,p:"lg"},s().createElement(R.Group,{justify:"space-between",mb:"xs"},s().createElement(R.Text,{size:"sm",c:"dimmed",fw:500},e.title),s().createElement(R.ThemeIcon,{color:e.color,variant:"light",size:"lg"},s().createElement(e.icon,{size:20}))),s().createElement(R.Text,{size:"xl",fw:700,mb:"xs"},e.value),s().createElement(R.Text,{size:"xs",c:"dimmed"},e.description)))),s().createElement(R.Grid,null,s().createElement(R.Grid.Col,{span:{base:12,md:8}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},s().createElement(R.Title,{order:3,mb:"md"},"Activity Timeline"),s().createElement(R.Stack,{justify:"center",align:"center",h:200},s().createElement(R.Text,{c:"dimmed",ta:"center"},"Activity timeline will be displayed here",s().createElement("br",null),s().createElement(R.Text,{size:"xs",c:"dimmed"},"Integration with audit events coming soon"))))),s().createElement(R.Grid.Col,{span:{base:12,md:4}},s().createElement(R.Card,{shadow:"sm",radius:"md",withBorder:!0,p:"lg",h:300},s().createElement(R.Title,{order:3,mb:"md"},"System Status"),s().createElement(R.Stack,{gap:"md",align:"center"},s().createElement(R.RingProgress,{size:120,thickness:12,sections:[{value:"healthy"===e?.systemHealth?100:85,color:"healthy"===e?.systemHealth?"green":"yellow"}],label:s().createElement(R.Text,{ta:"center",fw:700,size:"lg"},"healthy"===e?.systemHealth?"100%":"85%")}),s().createElement(R.Badge,{color:"healthy"===e?.systemHealth?"green":"yellow",variant:"light",size:"lg"},"healthy"===e?.systemHealth?"Healthy":"Warning"),s().createElement(R.Text,{size:"sm",c:"dimmed",ta:"center"},"All systems operational"))))))},Dr=()=>{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,r]=s().useState(e()),[n,a]=s().useState(!1),[o,i]=s().useState("");return s().useEffect(()=>{const t=()=>{r(e())};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[]),s().createElement(R.Box,{w:"100%",pos:"relative"},s().createElement(R.Stack,{gap:"lg"},s().createElement("div",null,s().createElement(R.Group,{justify:"space-between",align:"flex-start"},s().createElement("div",null,s().createElement(R.Group,{align:"center",gap:"sm",mb:"xs"},s().createElement(R.Title,{order:1,size:"h2"},"Key Management System"),s().createElement(R.ActionIcon,{variant:"subtle",size:"lg",onClick:()=>{a(e=>!e)},"aria-label":n?"Remove from favorites":"Add to favorites"},n?s().createElement(D.IconStarFilled,{size:20,color:"gold"}):s().createElement(D.IconStar,{size:20}))),s().createElement(R.Text,{c:"dimmed",size:"sm"},"Manage API keys, tokens, and access permissions")),s().createElement(R.Box,{pos:"fixed",top:60,right:0,h:"calc(100vh - 60px)",w:200,bg:"gray.1",p:"md",style:{borderLeft:"1px solid var(--mantine-color-gray-3)",zIndex:100}},s().createElement(R.Text,{size:"sm",fw:600,mb:"md"},"Color Selector"),s().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:o,onChange:e=>i(e||""),size:"sm"})))),s().createElement(R.Tabs,{value:t,onChange:e=>{if(e){const t="/app/kms",n="dashboard"===e?t:`${t}/${e}`;window.history.pushState(null,"",n),r(e),window.dispatchEvent(new PopStateEvent("popstate",{state:null}))}}},s().createElement(R.Tabs.List,null,s().createElement(R.Tabs.Tab,{value:"dashboard",leftSection:s().createElement(D.IconDashboard,{size:16})},"Dashboard"),s().createElement(R.Tabs.Tab,{value:"applications",leftSection:s().createElement(D.IconApps,{size:16})},"Applications"),s().createElement(R.Tabs.Tab,{value:"tokens",leftSection:s().createElement(D.IconKey,{size:16})},"Tokens"),s().createElement(R.Tabs.Tab,{value:"token-tester",leftSection:s().createElement(D.IconTestPipe,{size:16})},"Token Tester"),s().createElement(R.Tabs.Tab,{value:"audit",leftSection:s().createElement(D.IconFileText,{size:16})},"Audit Log")),s().createElement(R.Box,{pt:"md",pr:220},(()=>{switch(t){case"applications":return s().createElement(_r,null);case"tokens":return s().createElement(xr,null);case"token-tester":return s().createElement(Ar,null);case"audit":return s().createElement(Cr,null);default:return s().createElement(Rr,null)}})()))))};l.createRoot(document.getElementById("root")).render(s().createElement(s().StrictMode,null,s().createElement(R.MantineProvider,null,s().createElement(k,null,s().createElement(Dr,null)))))}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return a[e].call(r.exports,r,r.exports,i),r.exports}i.m=a,i.c=o,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var a=Object.create(null);i.r(a);var o={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&r;("object"==typeof s||"function"==typeof s)&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach(e=>o[e]=()=>r[e]);return o.default=()=>r,i.d(a,o),a},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,r)=>(i.f[r](e,t),t),[])),i.u=e=>e+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="kms:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(m);var a=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach(e=>e(n)),t)return t(n)},m=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),l&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{i.S={};var e={},t={};i.I=(r,n)=>{n||(n=[]);var a=t[r];if(a||(a=t[r]={}),!(n.indexOf(a)>=0)){if(n.push(a),e[r])return e[r];i.o(i.S,r)||(i.S[r]={});var o=i.S[r],s=(e,t,r,n)=>{var a=o[e]=o[e]||{},i=a[t];(!i||!i.loaded&&(!n!=!i.eager?n:"kms">i.from))&&(a[t]={get:r,from:"kms",eager:!!n})},l=[];return"default"===r&&(s("@mantine/core","7.17.8",()=>Promise.all([i.e(63),i.e(914),i.e(600)]).then(()=>()=>i(3063))),s("@mantine/hooks","7.17.8",()=>Promise.all([i.e(870),i.e(914)]).then(()=>()=>i(5870))),s("@mantine/notifications","7.17.8",()=>Promise.all([i.e(875),i.e(914),i.e(600),i.e(435)]).then(()=>()=>i(3875))),s("@tabler/icons-react","2.47.0",()=>Promise.all([i.e(396),i.e(914)]).then(()=>()=>i(2396))),s("react-dom","18.3.1",()=>Promise.all([i.e(961),i.e(914)]).then(()=>()=>i(961))),s("react","18.3.1",()=>i.e(540).then(()=>()=>i(6540)))),e[r]=l.length?Promise.all(l).then(()=>e[r]=1):1}}})(),(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e=e=>{var t=e=>e.split(".").map(e=>+e==e?+e:e),r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=r[1]?t(r[1]):[];return r[2]&&(n.length++,n.push.apply(n,t(r[2]))),r[3]&&(n.push([]),n.push.apply(n,t(r[3]))),n},t=e=>{var r=e[0],n="";if(1===e.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o0?".":"")+(a=2,s);return n}var i=[];for(o=1;o{if(0 in t){n=e(n);var a=t[0],o=a<0;o&&(a=-a-1);for(var i=0,s=1,l=!0;;s++,i++){var c,u,d=s=n.length||"o"==(u=(typeof(c=n[i]))[0]))return!l||("u"==d?s>a&&!o:""==d!=o);if("u"==u){if(!l||"u"!=d)return!1}else if(l)if(d==u)if(s<=a){if(c!=t[s])return!1}else{if(o?c>t[s]:c{var a=n?(e=>Object.keys(e).reduce((t,r)=>(e[r].eager&&(t[r]=e[r]),t),{}))(t[r]):t[r];return Object.keys(a).reduce((t,r)=>!t||!a[t].loaded&&((t,r)=>{t=e(t),r=e(r);for(var n=0;;){if(n>=t.length)return n=r.length)return"u"==o;var i=r[n],s=(typeof i)[0];if(o!=s)return"o"==o&&"n"==s||"s"==s||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return ar?r():((e,t)=>(e=>{throw new Error(e)})("Shared module "+t+" doesn't exist in shared scope "+e))(e,t),o=(e=>function(t,r,n,a,o){var s=i.I(t);return s&&s.then&&!n?s.then(e.bind(e,t,i.S[t],r,!1,a,o)):e(t,i.S[t],r,n,a,o)})((e,o,s,l,c,u)=>{if(!((e,t)=>e&&i.o(e,t))(o,s))return a(e,s,u);var d,p,m=n(o,s,l);return r(c,m)||(p=((e,r,n,a)=>"Unsatisfied version "+n+" from "+(n&&e[r][n].from)+" of shared singleton module "+r+" (required "+t(a)+")")(o,s,m,c),"undefined"!=typeof console&&console.warn&&console.warn(p)),(d=o[s][m]).loaded=1,d.get()}),s={},l={4914:()=>o("default","react",!1,[1,18,2,0],()=>i.e(540).then(()=>()=>i(6540))),6672:()=>o("default","react-dom",!1,[1,18,2,0],()=>i.e(961).then(()=>()=>i(961))),7435:()=>o("default","@mantine/core",!1,[1,7,0,0],()=>Promise.all([i.e(63),i.e(600)]).then(()=>()=>i(3063))),5101:()=>o("default","@tabler/icons-react",!1,[1,2,40,0],()=>i.e(396).then(()=>()=>i(2396))),7373:()=>o("default","@mantine/notifications",!1,[1,7,0,0],()=>Promise.all([i.e(875),i.e(600)]).then(()=>()=>i(3875))),8705:()=>o("default","@mantine/hooks",!1,[1,7,0,0],()=>i.e(870).then(()=>()=>i(5870)))};[4914,6672,7435,5101,7373].forEach(e=>{i.m[e]=t=>{s[e]=0,delete i.c[e];var r=l[e]();if("function"!=typeof r)throw new Error("Shared module is not available for eager consumption: "+e);t.exports=r()}});var c={435:[7435],600:[6672,8705],792:[4914,6672,7435,5101,7373],914:[4914]},u={};i.f.consumes=(e,t)=>{i.o(c,e)&&c[e].forEach(e=>{if(i.o(s,e))return t.push(s[e]);if(!u[e]){var r=t=>{s[e]=0,i.m[e]=r=>{delete i.c[e],r.exports=t()}};u[e]=!0;var n=t=>{delete s[e],i.m[e]=r=>{throw delete i.c[e],t}};try{var a=l[e]();a.then?t.push(s[e]=a.then(r).catch(n)):r(a)}catch(e){n(e)}}})}})(),(()=>{var e={435:0,792:0,914:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else if(/^(435|600|914)$/.test(t))e[t]=0;else{var a=new Promise((r,a)=>n=e[t]=[r,a]);r.push(n[2]=a);var o=i.p+i.u(t),s=new Error;i.l(o,r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",s.name="ChunkLoadError",s.type=a,s.request=o,n[1](s)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,a,[o,s,l]=r,c=0;if(o.some(t=>0!==e[t])){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);l&&l(i)}for(t&&t(r);c { }; const [currentRoute, setCurrentRoute] = React.useState(getCurrentRoute()); + const [isFavorited, setIsFavorited] = React.useState(false); + const [selectedColor, setSelectedColor] = React.useState(''); // Listen for URL changes (for when the shell navigates) React.useEffect(() => { @@ -51,6 +55,21 @@ const App: React.FC = () => { } }; + const toggleFavorite = () => { + setIsFavorited(prev => !prev); + }; + + const colorOptions = [ + { 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' }, + ]; + + const renderContent = () => { switch (currentRoute) { case 'applications': @@ -67,15 +86,45 @@ const App: React.FC = () => { }; return ( - +
- - Key Management System - - - Manage API keys, tokens, and access permissions - + +
+ + + Key Management System + + + {isFavorited ? ( + + ) : ( + + )} + + +
+ + {/* Right-side controls */} + +
+ {/* Search Box */} { + ); diff --git a/web/src/components/Navigation.tsx b/web/src/components/Navigation.tsx index c4d8fe8..e5cface 100644 --- a/web/src/components/Navigation.tsx +++ b/web/src/components/Navigation.tsx @@ -1,12 +1,8 @@ import React from 'react'; -import { NavLink, Stack, Text, Group } from '@mantine/core'; +import { NavLink, Stack, Text } from '@mantine/core'; import { useNavigate, useLocation } from 'react-router-dom'; import { - IconHome, - IconApps, IconDashboard, - IconChartLine, - IconStar, IconKey, } from '@tabler/icons-react'; @@ -14,25 +10,8 @@ const Navigation: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); - const navigationItems = [ - { - label: 'Home', - icon: IconHome, - path: '/', - }, - { - label: 'Favorites', - icon: IconStar, - path: '/favorites', - }, - { - label: 'All Applications', - icon: IconApps, - path: '/apps', - }, - ]; - - const applications = [ + // Define all available applications + const allAvailableApplications = [ { label: 'Demo App', icon: IconDashboard, @@ -43,34 +22,26 @@ const Navigation: React.FC = () => { icon: IconKey, path: '/app/kms', }, - { - label: 'Analytics', - icon: IconChartLine, - path: '/app/analytics', - }, ]; + // Define which apps are favorited (you could make this dynamic later) + const favoritePaths = ['/app/demo']; + + const favoriteApplications = allAvailableApplications.filter(app => + favoritePaths.includes(app.path) + ); + + const nonFavoriteApplications = allAvailableApplications.filter(app => + !favoritePaths.includes(app.path) + ); + return ( - Navigation + Favorites - {navigationItems.map((item) => ( - } - active={location.pathname === item.path} - onClick={() => navigate(item.path)} - /> - ))} - - - Applications - - - {applications.map((app) => ( + {favoriteApplications.map((app) => ( { onClick={() => navigate(app.path)} /> ))} + + {nonFavoriteApplications.length > 0 && ( + <> + + All Applications + + + {nonFavoriteApplications.map((app) => ( + } + active={location.pathname.startsWith(app.path)} + onClick={() => navigate(app.path)} + /> + ))} + + )} ); }; diff --git a/web/src/pages/HomePage.tsx b/web/src/pages/HomePage.tsx index e5bf3b2..2c21c55 100644 --- a/web/src/pages/HomePage.tsx +++ b/web/src/pages/HomePage.tsx @@ -14,11 +14,7 @@ import { IconStar, IconStarFilled, IconDashboard, - IconChartLine, - IconSettings, - IconUsers, - IconFiles, - IconMail, + IconKey, } from '@tabler/icons-react'; import Breadcrumbs from '../components/Breadcrumbs'; @@ -33,56 +29,24 @@ interface App { const HomePage: React.FC = () => { const navigate = useNavigate(); - const [favoriteApps, setFavoriteApps] = useState(['demo', 'analytics']); + const [favoriteApps, setFavoriteApps] = useState(['demo']); const availableApps: App[] = [ { id: 'demo', name: 'Demo App', - description: 'Sample application for testing', + description: 'Sample microfrontend application for testing module federation', icon: IconDashboard, path: '/app/demo', category: 'Development', }, { - id: 'analytics', - name: 'Analytics', - description: 'Data analytics and reporting', - icon: IconChartLine, - path: '/app/analytics', - category: 'Analytics', - }, - { - id: 'settings', - name: 'Settings', - description: 'System configuration', - icon: IconSettings, - path: '/app/settings', - category: 'System', - }, - { - id: 'users', - name: 'User Management', - description: 'Manage users and permissions', - icon: IconUsers, - path: '/app/users', - category: 'Administration', - }, - { - id: 'files', - name: 'File Manager', - description: 'Browse and manage files', - icon: IconFiles, - path: '/app/files', - category: 'Utilities', - }, - { - id: 'mail', - name: 'Mail Client', - description: 'Email management', - icon: IconMail, - path: '/app/mail', - category: 'Communication', + id: 'kms', + name: 'Key Management System', + description: 'Manage API keys, tokens, and access permissions for applications', + icon: IconKey, + path: '/app/kms', + category: 'Security', }, ];