Files
pyMC_Repeater/repeater/web/html/assets/Sessions-CTrtKCPc.js
T
2026-05-18 14:50:45 +01:00

1 line
14 KiB
JavaScript

import{Ct as e,E as t,V as n,Y as r,g as ee,j as i,k as a,l as o,m as te,o as s,p as ne,r as c,s as l,u,xt as d}from"./runtime-core.esm-bundler-C5QBTNWE.js";import{t as f}from"./api-DBiYn0RS.js";import{t as re}from"./Spinner-CYvUNW0P.js";import{f as ie}from"./index-CG181k2K.js";var ae={class:`p-6 space-y-6`},oe={key:0,class:`grid grid-cols-1 md:grid-cols-4 gap-4`},se={class:`glass-card rounded-[15px] p-4`},ce={class:`text-2xl font-bold text-content-primary dark:text-content-primary`},le={class:`glass-card rounded-[15px] p-4`},ue={class:`text-2xl font-bold text-primary`},de={class:`glass-card rounded-[15px] p-4`},fe={class:`text-2xl font-bold text-accent-green`},pe={class:`glass-card rounded-[15px] p-4`},me={class:`text-2xl font-bold text-secondary`},he={class:`glass-card rounded-[15px] p-6`},p={class:`flex flex-wrap border-b border-stroke-subtle dark:border-stroke/10 mb-6`},m=[`onClick`],h={class:`flex items-center gap-2`},g={key:0,class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},_={key:1,class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},v={key:2,class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},y={class:`min-h-[400px]`},b={key:0,class:`flex items-center justify-center py-12`},x={class:`text-center`},S={key:1,class:`flex items-center justify-center py-12`},C={class:`text-center`},w={class:`text-content-secondary dark:text-content-muted text-sm mb-4`},T={key:2,class:`space-y-4`},E={key:0,class:`text-center py-12 text-content-secondary dark:text-content-muted`},D={key:1,class:`space-y-4`},O={class:`flex items-start justify-between`},k={class:`flex-1 min-w-0`},A={class:`flex items-center gap-2 flex-wrap mb-3`},j={class:`text-lg font-semibold text-content-primary dark:text-content-primary truncate`},M={class:`flex flex-wrap items-center gap-x-4 gap-y-2 text-sm`},N={key:0,class:`flex items-center gap-1.5`},P={class:`text-content-secondary dark:text-content-muted`},F={key:1,class:`flex items-center gap-1.5`},I={class:`text-content-secondary dark:text-content-muted`},L={key:2,class:`text-content-secondary dark:text-content-muted font-mono text-xs`},R={key:3,class:`text-content-muted dark:text-content-muted font-mono text-xs`},ge={key:0,class:`text-content-muted dark:text-content-muted text-xs mt-2 mb-0`},_e={class:`grid grid-cols-2 md:grid-cols-4 gap-4 mt-4`},ve={class:`text-content-primary dark:text-content-primary font-medium`},ye={class:`text-primary font-medium`},be={class:`mt-3 flex items-center gap-2`},xe={key:3,class:`space-y-4`},Se={key:0,class:`text-center py-12 text-content-secondary dark:text-content-muted`},Ce={key:1,class:`overflow-x-auto`},we={class:`w-full`},z={class:`py-3`},Te={class:`font-mono text-sm text-content-primary dark:text-content-primary`},Ee={class:`py-3`},De={class:`font-mono text-xs text-content-secondary dark:text-content-muted`},Oe={class:`py-3`},ke={class:`text-sm text-content-primary dark:text-content-primary`},Ae={class:`text-xs text-content-muted dark:text-content-muted`},je={class:`py-3`},Me={class:`py-3`},Ne={class:`text-sm text-content-secondary dark:text-content-muted`},Pe={class:`py-3`},Fe=[`onClick`],Ie={key:4,class:`space-y-4`},Le={class:`mb-4`},Re=[`value`],ze={key:0,class:`text-center py-12 text-content-secondary dark:text-content-muted`},Be={key:1,class:`grid grid-cols-1 gap-4`},Ve={class:`flex items-start justify-between`},He={class:`flex-1`},Ue={class:`flex items-center gap-3 mb-3`},We={class:`text-content-primary dark:text-content-primary font-mono text-sm`},Ge={class:`grid grid-cols-1 md:grid-cols-2 gap-3 text-sm`},Ke={class:`text-content-primary dark:text-content-primary/90 font-mono ml-2`},qe={class:`text-content-primary dark:text-content-primary/90 ml-2`},Je={class:`text-content-primary dark:text-content-primary/90 ml-2`},Ye={class:`text-content-primary dark:text-content-primary/90 ml-2`},Xe=[`onClick`],Ze={class:`flex justify-end`},Qe=[`disabled`],B=ee({name:`SessionsView`,__name:`Sessions`,setup(ee){let B=r(`overview`),V=r(!1),H=r(!1),U=r(null),W=r(null),G=r([]),K=r(null),q=r(null),$e=[{id:`overview`,label:`Overview`,icon:`overview`},{id:`clients`,label:`Authenticated Clients`,icon:`clients`},{id:`identities`,label:`By Identity`,icon:`identities`}];t(async()=>{await J(),V.value=!0});async function J(){H.value=!0,U.value=null;try{let e=await f.getACLInfo();e.success&&(W.value=e.data);let t=await f.getACLClients();t.success&&t.data&&(G.value=t.data.clients||[]);let n=await f.getACLStats();n.success&&(K.value=n.data)}catch(e){U.value=e instanceof Error?e.message:`Failed to load ACL data`,console.error(`Error fetching ACL data:`,e)}finally{H.value=!1}}async function Y(e,t){if(confirm(`Are you sure you want to remove this client from the ACL?`))try{let n=await f.removeACLClient({public_key:e,identity_hash:t});n.success?await J():alert(`Failed to remove client: ${n.error}`)}catch(e){alert(`Error removing client: ${e}`)}}function X(e){return e?new Date(e*1e3).toLocaleString():`Never`}function et(e){B.value=e}let Z=s(()=>q.value?G.value.filter(e=>e.identity_name===q.value):G.value),Q=s(()=>W.value&&W.value.acls||[]);function tt(e){return e?.type===`companion`}function nt(e){return e===`repeater`?`bg-primary/20 text-primary`:e===`companion`?`bg-accent-purple/20 text-accent-purple`:`bg-secondary/20 text-secondary`}function $(e){return e==null?`N/A`:typeof e==`boolean`?e?``:``:String(e)}return(t,r)=>(a(),u(`div`,ae,[r[22]||=l(`div`,null,[l(`h1`,{class:`text-2xl font-bold text-content-primary dark:text-content-primary`},` Sessions & Access Control `),l(`p`,{class:`text-content-secondary dark:text-content-muted mt-2`},` Manage authenticated clients and access control lists `),l(`p`,{class:`text-content-muted dark:text-content-muted text-sm mt-1`},` Repeater, room servers, and companion identities; companions do not accept client logins. `)],-1),K.value?(a(),u(`div`,oe,[l(`div`,se,[r[1]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},` Total Identities `,-1),l(`div`,ce,e(K.value.total_identities),1)]),l(`div`,le,[r[2]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},` Authenticated Clients `,-1),l(`div`,ue,e(K.value.total_clients),1)]),l(`div`,de,[r[3]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},`Admin Clients`,-1),l(`div`,fe,e(K.value.admin_clients),1)]),l(`div`,pe,[r[4]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},`Guest Clients`,-1),l(`div`,me,e(K.value.guest_clients),1)])])):o(``,!0),l(`div`,he,[l(`div`,p,[(a(),u(c,null,i($e,t=>l(`button`,{key:t.id,onClick:e=>et(t.id),class:d([`px-4 py-2 text-sm font-medium transition-colors duration-200 border-b-2 mr-6 mb-2`,B.value===t.id?`text-primary border-primary`:`text-content-secondary dark:text-content-muted border-transparent hover:text-content-primary dark:hover:text-content-primary hover:border-stroke-subtle dark:hover:border-stroke/30`])},[l(`div`,h,[t.icon===`overview`?(a(),u(`svg`,g,[...r[5]||=[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z`},null,-1)]])):t.icon===`clients`?(a(),u(`svg`,_,[...r[6]||=[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z`},null,-1)]])):t.icon===`identities`?(a(),u(`svg`,v,[...r[7]||=[l(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 6H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V8a2 2 0 00-2-2h-5m-4 0V5a2 2 0 114 0v1m-4 0a2 2 0 104 0m-5 8a2 2 0 100-4 2 2 0 000 4zm0 0c1.306 0 2.417.835 2.83 2M9 14a3.001 3.001 0 00-2.83 2M15 11h3m-3 4h2`},null,-1)]])):o(``,!0),ne(` `+e(t.label),1)])],10,m)),64))]),l(`div`,y,[H.value&&!V.value?(a(),u(`div`,b,[l(`div`,x,[te(re,{class:`mx-auto mb-4`}),r[8]||=l(`div`,{class:`text-content-secondary dark:text-content-muted`},`Loading ACL data...`,-1)])])):U.value?(a(),u(`div`,S,[l(`div`,C,[r[9]||=l(`div`,{class:`text-accent-red mb-2`},`Failed to load ACL data`,-1),l(`div`,w,e(U.value),1),l(`button`,{onClick:J,class:`btn-primary`},` Retry `)])])):B.value===`overview`?(a(),u(`div`,T,[Q.value.length===0?(a(),u(`div`,E,` No identities configured `)):(a(),u(`div`,D,[(a(!0),u(c,null,i(Q.value,t=>(a(),u(`div`,{key:t.hash,class:`glass-card rounded-[10px] p-4 border border-stroke-subtle dark:border-white/10 hover:border-primary/30 transition-colors`},[l(`div`,O,[l(`div`,k,[l(`div`,A,[l(`h3`,j,e(t.name),1),l(`span`,{class:d([`px-2 py-0.5 text-xs font-medium rounded shrink-0`,nt(t.type)])},e(t.type),3)]),tt(t)?(a(),u(c,{key:0},[l(`div`,M,[t.registered===void 0?o(``,!0):(a(),u(`span`,N,[l(`span`,{class:d([`w-2 h-2 rounded-full shrink-0`,t.registered?`bg-accent-green`:`bg-accent-red`]),"aria-hidden":``},null,2),l(`span`,P,`Registered: `+e(t.registered?`Active`:`Inactive`),1)])),t.active===void 0?o(``,!0):(a(),u(`span`,F,[l(`span`,{class:d([`w-2 h-2 rounded-full shrink-0`,t.active?`bg-accent-green`:`bg-accent-red`]),"aria-hidden":``},null,2),l(`span`,I,`Bridge: `+e(t.active?`Connected`:`Disconnected`),1)])),t.client_ip?(a(),u(`span`,L,` Client: `+e(t.client_ip),1)):o(``,!0),t.hash?(a(),u(`span`,R,` Hash: `+e(t.hash),1)):o(``,!0)]),t.last_seen==null?o(``,!0):(a(),u(`p`,ge,` Last seen: `+e(X(t.last_seen)),1))],64)):(a(),u(c,{key:1},[l(`div`,_e,[l(`div`,null,[r[10]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Max Clients `,-1),l(`div`,ve,e($(t.max_clients)),1)]),l(`div`,null,[r[11]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Authenticated `,-1),l(`div`,ye,e($(t.authenticated_clients)),1)]),l(`div`,null,[r[12]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Admin Password `,-1),l(`div`,{class:d(t.has_admin_password?`text-accent-green`:`text-accent-red`)},e(t.has_admin_password==null?`N/A`:t.has_admin_password?`✓ Set`:`✗ Not Set`),3)]),l(`div`,null,[r[13]||=l(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Guest Password `,-1),l(`div`,{class:d(t.has_guest_password?`text-accent-green`:`text-accent-red`)},e(t.has_guest_password==null?`N/A`:t.has_guest_password?`✓ Set`:`✗ Not Set`),3)])]),l(`div`,be,[r[14]||=l(`span`,{class:`text-content-secondary dark:text-content-muted text-xs`},`Read-Only Access:`,-1),l(`span`,{class:d(t.allow_read_only?`text-accent-green`:`text-accent-red`)},e(t.allow_read_only==null?`N/A`:t.allow_read_only?`Allowed`:`Disabled`),3)])],64))])])]))),128))]))])):B.value===`clients`?(a(),u(`div`,xe,[G.value.length===0?(a(),u(`div`,Se,` No authenticated clients `)):(a(),u(`div`,Ce,[l(`table`,we,[r[15]||=l(`thead`,null,[l(`tr`,{class:`border-b border-stroke-subtle dark:border-stroke/10`},[l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Client `),l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Address `),l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Identity `),l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Permissions `),l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Last Activity `),l(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Actions `)])],-1),l(`tbody`,null,[(a(!0),u(c,null,i(G.value,t=>(a(),u(`tr`,{key:t.public_key_full,class:`border-b border-stroke-subtle dark:border-white/5 hover:bg-gray-100/50 dark:hover:bg-white/5 transition-colors`},[l(`td`,z,[l(`div`,Te,e(t.public_key),1)]),l(`td`,Ee,[l(`div`,De,e(t.address),1)]),l(`td`,Oe,[l(`div`,ke,e(t.identity_name),1),l(`div`,Ae,e(t.identity_hash),1)]),l(`td`,je,[l(`span`,{class:d([`px-2 py-1 text-xs font-medium rounded`,t.permissions===`admin`?`bg-accent-green/20 text-accent-green`:`bg-secondary/20 text-secondary`])},e(t.permissions),3)]),l(`td`,Me,[l(`div`,Ne,e(X(t.last_activity)),1)]),l(`td`,Pe,[l(`button`,{onClick:e=>Y(t.public_key_full,t.identity_hash),class:`btn-danger-xs`},` Remove `,8,Fe)])]))),128))])])]))])):B.value===`identities`?(a(),u(`div`,Ie,[l(`div`,Le,[r[17]||=l(`label`,{class:`block text-content-secondary dark:text-content-muted text-sm mb-2`},`Filter by Identity`,-1),n(l(`select`,{"onUpdate:modelValue":r[0]||=e=>q.value=e,class:`bg-background-mute dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary focus:outline-none focus:border-primary/50 transition-colors`},[r[16]||=l(`option`,{value:null},`All Identities`,-1),(a(!0),u(c,null,i(Q.value,t=>(a(),u(`option`,{key:t.name,value:t.name},e(t.name)+` (`+e(t.authenticated_clients??0)+` clients) `,9,Re))),128))],512),[[ie,q.value]])]),Z.value.length===0?(a(),u(`div`,ze,` No clients for selected identity `)):(a(),u(`div`,Be,[(a(!0),u(c,null,i(Z.value,t=>(a(),u(`div`,{key:t.public_key_full,class:`glass-card rounded-[10px] p-4 border border-stroke-subtle dark:border-white/10`},[l(`div`,Ve,[l(`div`,He,[l(`div`,Ue,[l(`span`,{class:d([`px-2 py-1 text-xs font-medium rounded`,t.permissions===`admin`?`bg-accent-green/20 text-accent-green`:`bg-secondary/20 text-secondary`])},e(t.permissions),3),l(`span`,We,e(t.public_key),1)]),l(`div`,Ge,[l(`div`,null,[r[18]||=l(`span`,{class:`text-content-secondary dark:text-content-muted`},`Address:`,-1),l(`span`,Ke,e(t.address),1)]),l(`div`,null,[r[19]||=l(`span`,{class:`text-content-secondary dark:text-content-muted`},`Identity:`,-1),l(`span`,qe,e(t.identity_name)+` (`+e(t.identity_hash)+`)`,1)]),l(`div`,null,[r[20]||=l(`span`,{class:`text-content-secondary dark:text-content-muted`},`Last Activity:`,-1),l(`span`,Je,e(X(t.last_activity)),1)]),l(`div`,null,[r[21]||=l(`span`,{class:`text-content-secondary dark:text-content-muted`},`Last Login:`,-1),l(`span`,Ye,e(X(t.last_login_success)),1)])])]),l(`button`,{onClick:e=>Y(t.public_key_full,t.identity_hash),class:`ml-4 btn-danger-xs`},` Remove `,8,Xe)])]))),128))]))])):o(``,!0)])]),l(`div`,Ze,[l(`button`,{onClick:J,disabled:H.value,class:`btn-primary`},e(H.value?`Refreshing...`:`Refresh Data`),9,Qe)])]))}});export{B as default};