mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-06-11 16:54:44 +02:00
1 line
14 KiB
JavaScript
1 line
14 KiB
JavaScript
import{C as e,D as t,P as n,T as r,U as i,_t as a,h as ee,ht as o,l as s,m as te,o as c,p as ne,r as l,s as u,u as d}from"./runtime-core.esm-bundler-CINEgm0a.js";import{a as re}from"./runtime-dom.esm-bundler-B3VeUO8l.js";import{t as f}from"./api-C4t_bxtk.js";import{t as ie}from"./Spinner-CMJUE3iy.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`},Te={class:`py-3`},z={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=i(`overview`),V=i(!1),H=i(!1),U=i(null),W=i(null),G=i([]),K=i(null),q=i(null),$e=[{id:`overview`,label:`Overview`,icon:`overview`},{id:`clients`,label:`Authenticated Clients`,icon:`clients`},{id:`identities`,label:`By Identity`,icon:`identities`}];e(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=c(()=>q.value?G.value.filter(e=>e.identity_name===q.value):G.value),Q=c(()=>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(e,i)=>(r(),d(`div`,ae,[i[22]||=u(`div`,null,[u(`h1`,{class:`text-2xl font-bold text-content-primary dark:text-content-primary`},` Sessions & Access Control `),u(`p`,{class:`text-content-secondary dark:text-content-muted mt-2`},` Manage authenticated clients and access control lists `),u(`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?(r(),d(`div`,oe,[u(`div`,se,[i[1]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},` Total Identities `,-1),u(`div`,ce,a(K.value.total_identities),1)]),u(`div`,le,[i[2]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},` Authenticated Clients `,-1),u(`div`,ue,a(K.value.total_clients),1)]),u(`div`,de,[i[3]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},`Admin Clients`,-1),u(`div`,fe,a(K.value.admin_clients),1)]),u(`div`,pe,[i[4]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-sm mb-1`},`Guest Clients`,-1),u(`div`,me,a(K.value.guest_clients),1)])])):s(``,!0),u(`div`,he,[u(`div`,p,[(r(),d(l,null,t($e,e=>u(`button`,{key:e.id,onClick:t=>et(e.id),class:o([`px-4 py-2 text-sm font-medium transition-colors duration-200 border-b-2 mr-6 mb-2`,B.value===e.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`])},[u(`div`,h,[e.icon===`overview`?(r(),d(`svg`,g,[...i[5]||=[u(`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)]])):e.icon===`clients`?(r(),d(`svg`,_,[...i[6]||=[u(`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)]])):e.icon===`identities`?(r(),d(`svg`,v,[...i[7]||=[u(`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)]])):s(``,!0),ne(` `+a(e.label),1)])],10,m)),64))]),u(`div`,y,[H.value&&!V.value?(r(),d(`div`,b,[u(`div`,x,[te(ie,{class:`mx-auto mb-4`}),i[8]||=u(`div`,{class:`text-content-secondary dark:text-content-muted`},`Loading ACL data...`,-1)])])):U.value?(r(),d(`div`,S,[u(`div`,C,[i[9]||=u(`div`,{class:`text-accent-red mb-2`},`Failed to load ACL data`,-1),u(`div`,w,a(U.value),1),u(`button`,{onClick:J,class:`btn-primary`},` Retry `)])])):B.value===`overview`?(r(),d(`div`,T,[Q.value.length===0?(r(),d(`div`,E,` No identities configured `)):(r(),d(`div`,D,[(r(!0),d(l,null,t(Q.value,e=>(r(),d(`div`,{key:e.hash,class:`glass-card rounded-[10px] p-4 border border-stroke-subtle dark:border-white/10 hover:border-primary/30 transition-colors`},[u(`div`,O,[u(`div`,k,[u(`div`,A,[u(`h3`,j,a(e.name),1),u(`span`,{class:o([`px-2 py-0.5 text-xs font-medium rounded shrink-0`,nt(e.type)])},a(e.type),3)]),tt(e)?(r(),d(l,{key:0},[u(`div`,M,[e.registered===void 0?s(``,!0):(r(),d(`span`,N,[u(`span`,{class:o([`w-2 h-2 rounded-full shrink-0`,e.registered?`bg-accent-green`:`bg-accent-red`]),"aria-hidden":``},null,2),u(`span`,P,`Registered: `+a(e.registered?`Active`:`Inactive`),1)])),e.active===void 0?s(``,!0):(r(),d(`span`,F,[u(`span`,{class:o([`w-2 h-2 rounded-full shrink-0`,e.active?`bg-accent-green`:`bg-accent-red`]),"aria-hidden":``},null,2),u(`span`,I,`Bridge: `+a(e.active?`Connected`:`Disconnected`),1)])),e.client_ip?(r(),d(`span`,L,` Client: `+a(e.client_ip),1)):s(``,!0),e.hash?(r(),d(`span`,R,` Hash: `+a(e.hash),1)):s(``,!0)]),e.last_seen==null?s(``,!0):(r(),d(`p`,ge,` Last seen: `+a(X(e.last_seen)),1))],64)):(r(),d(l,{key:1},[u(`div`,_e,[u(`div`,null,[i[10]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Max Clients `,-1),u(`div`,ve,a($(e.max_clients)),1)]),u(`div`,null,[i[11]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Authenticated `,-1),u(`div`,ye,a($(e.authenticated_clients)),1)]),u(`div`,null,[i[12]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Admin Password `,-1),u(`div`,{class:o(e.has_admin_password?`text-accent-green`:`text-accent-red`)},a(e.has_admin_password==null?`N/A`:e.has_admin_password?`✓ Set`:`✗ Not Set`),3)]),u(`div`,null,[i[13]||=u(`div`,{class:`text-content-secondary dark:text-content-muted text-xs mb-1`},` Guest Password `,-1),u(`div`,{class:o(e.has_guest_password?`text-accent-green`:`text-accent-red`)},a(e.has_guest_password==null?`N/A`:e.has_guest_password?`✓ Set`:`✗ Not Set`),3)])]),u(`div`,be,[i[14]||=u(`span`,{class:`text-content-secondary dark:text-content-muted text-xs`},`Read-Only Access:`,-1),u(`span`,{class:o(e.allow_read_only?`text-accent-green`:`text-accent-red`)},a(e.allow_read_only==null?`N/A`:e.allow_read_only?`Allowed`:`Disabled`),3)])],64))])])]))),128))]))])):B.value===`clients`?(r(),d(`div`,xe,[G.value.length===0?(r(),d(`div`,Se,` No authenticated clients `)):(r(),d(`div`,Ce,[u(`table`,we,[i[15]||=u(`thead`,null,[u(`tr`,{class:`border-b border-stroke-subtle dark:border-stroke/10`},[u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Client `),u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Address `),u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Identity `),u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Permissions `),u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Last Activity `),u(`th`,{class:`text-left text-content-secondary dark:text-content-muted text-sm font-medium pb-3`},` Actions `)])],-1),u(`tbody`,null,[(r(!0),d(l,null,t(G.value,e=>(r(),d(`tr`,{key:e.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`},[u(`td`,Te,[u(`div`,z,a(e.public_key),1)]),u(`td`,Ee,[u(`div`,De,a(e.address),1)]),u(`td`,Oe,[u(`div`,ke,a(e.identity_name),1),u(`div`,Ae,a(e.identity_hash),1)]),u(`td`,je,[u(`span`,{class:o([`px-2 py-1 text-xs font-medium rounded`,e.permissions===`admin`?`bg-accent-green/20 text-accent-green`:`bg-secondary/20 text-secondary`])},a(e.permissions),3)]),u(`td`,Me,[u(`div`,Ne,a(X(e.last_activity)),1)]),u(`td`,Pe,[u(`button`,{onClick:t=>Y(e.public_key_full,e.identity_hash),class:`btn-danger-xs`},` Remove `,8,Fe)])]))),128))])])]))])):B.value===`identities`?(r(),d(`div`,Ie,[u(`div`,Le,[i[17]||=u(`label`,{class:`block text-content-secondary dark:text-content-muted text-sm mb-2`},`Filter by Identity`,-1),n(u(`select`,{"onUpdate:modelValue":i[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`},[i[16]||=u(`option`,{value:null},`All Identities`,-1),(r(!0),d(l,null,t(Q.value,e=>(r(),d(`option`,{key:e.name,value:e.name},a(e.name)+` (`+a(e.authenticated_clients??0)+` clients) `,9,Re))),128))],512),[[re,q.value]])]),Z.value.length===0?(r(),d(`div`,ze,` No clients for selected identity `)):(r(),d(`div`,Be,[(r(!0),d(l,null,t(Z.value,e=>(r(),d(`div`,{key:e.public_key_full,class:`glass-card rounded-[10px] p-4 border border-stroke-subtle dark:border-white/10`},[u(`div`,Ve,[u(`div`,He,[u(`div`,Ue,[u(`span`,{class:o([`px-2 py-1 text-xs font-medium rounded`,e.permissions===`admin`?`bg-accent-green/20 text-accent-green`:`bg-secondary/20 text-secondary`])},a(e.permissions),3),u(`span`,We,a(e.public_key),1)]),u(`div`,Ge,[u(`div`,null,[i[18]||=u(`span`,{class:`text-content-secondary dark:text-content-muted`},`Address:`,-1),u(`span`,Ke,a(e.address),1)]),u(`div`,null,[i[19]||=u(`span`,{class:`text-content-secondary dark:text-content-muted`},`Identity:`,-1),u(`span`,qe,a(e.identity_name)+` (`+a(e.identity_hash)+`)`,1)]),u(`div`,null,[i[20]||=u(`span`,{class:`text-content-secondary dark:text-content-muted`},`Last Activity:`,-1),u(`span`,Je,a(X(e.last_activity)),1)]),u(`div`,null,[i[21]||=u(`span`,{class:`text-content-secondary dark:text-content-muted`},`Last Login:`,-1),u(`span`,Ye,a(X(e.last_login_success)),1)])])]),u(`button`,{onClick:t=>Y(e.public_key_full,e.identity_hash),class:`ml-4 btn-danger-xs`},` Remove `,8,Xe)])]))),128))]))])):s(``,!0)])]),u(`div`,Ze,[u(`button`,{onClick:J,disabled:H.value,class:`btn-primary`},a(H.value?`Refreshing...`:`Refresh Data`),9,Qe)])]))}});export{B as default}; |