@camstack/addon-admin-ui 1.2.429 → 1.2.431
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AddonAssetIcon-DR35yt0E.js → AddonAssetIcon-CngGyUbH.js} +1 -1
- package/dist/assets/{Addons-gkGgGpTC.js → Addons-COSbX7Q1.js} +2 -2
- package/dist/assets/{AdminPage-DAO24U0w.js → AdminPage-BFQa1eDk.js} +1 -1
- package/dist/assets/{AdminSectionedPage-B-qoE6ra.js → AdminSectionedPage-Bb00eMTj.js} +1 -1
- package/dist/assets/AiProfiles-DGok1qYw.js +3 -0
- package/dist/assets/{BrokerForm-B3xs9aBj.js → BrokerForm-NDMOvAlu.js} +1 -1
- package/dist/assets/{Build-DeMAJfjN.js → Build-BPgFXVbn.js} +4 -4
- package/dist/assets/{Calendars-VPH-vy-o.js → Calendars-DLuwgZXW.js} +1 -1
- package/dist/assets/Cluster-BUBVih9A.js +1 -0
- package/dist/assets/ClusterStepModel-DzduELev.js +1 -0
- package/dist/assets/{CompositionEditor-BrtLjoSu.js → CompositionEditor-DTgOmFqj.js} +1 -1
- package/dist/assets/{CompositionEditorPage-D51jS9td.js → CompositionEditorPage-D73l3mqU.js} +1 -1
- package/dist/assets/Data-Wqos-WHl.js +2 -0
- package/dist/assets/{DeviceDetail-D1qU_p1k.js → DeviceDetail-CwmpXUmk.js} +2 -2
- package/dist/assets/{DeviceDoActionFields-B62Nv4K7.js → DeviceDoActionFields-DKOJoFJc.js} +1 -1
- package/dist/assets/{Devices-Cf5Exjsk.js → Devices-D_SKAo6X.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-CnEcSJ8D.js → EmbedPlayerPage-DI4ac8Wo.js} +1 -1
- package/dist/assets/Identity-C25gG2Mh.js +1 -0
- package/dist/assets/IntegrationDetail-L73oZLMf.js +1 -0
- package/dist/assets/{IntegrationHub-DdjWEObX.js → IntegrationHub-DuVgrEey.js} +1 -1
- package/dist/assets/{Integrations-CU7Ll9U_.js → Integrations-CUPpCCtl.js} +1 -1
- package/dist/assets/{Integrations-uZB2ozhn.js → Integrations-Cgm8qaox.js} +1 -1
- package/dist/assets/{Library-DSuCaXt6.js → Library-Dm0AivX3.js} +1 -1
- package/dist/assets/Locations-B2TjRBpQ.js +3 -0
- package/dist/assets/{Logs-cm-1R2Z4.js → Logs-CeX1xx9_.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-CM9D4FOf.js → MaskShapeCanvas-GZ2ZMDcz.js} +1 -1
- package/dist/assets/{MotionZonesSettings-DqS8ndiK.js → MotionZonesSettings-B5gIoLVC.js} +1 -1
- package/dist/assets/MyAccess-DJvaTHrq.js +2 -0
- package/dist/assets/Network-D0uak4Dc.js +1 -0
- package/dist/assets/{NodeAddonsSettingsPanel-BMat4ckt.js → NodeAddonsSettingsPanel-kmgNnVID.js} +1 -1
- package/dist/assets/{Notifications-EPQiEZ1t.js → Notifications-DP0iwqUM.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-Bis0PO01.js → PrivacyMaskSettings-DWCvE7XZ.js} +1 -1
- package/dist/assets/Recordings-r5KE18a6.js +1 -0
- package/dist/assets/{ScanNetworkModal-dHWFmbFe.js → ScanNetworkModal-CHWsBmiM.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-SFMMIopn.js → SceneMonitorEditor-BNFYspNy.js} +1 -1
- package/dist/assets/SessionsList-OvrBa2rd.js +2 -0
- package/dist/assets/{Showroom-Er-hes9K.js → Showroom-DNgHGmg0.js} +1 -1
- package/dist/assets/{System-BDXxfgsq.js → System-CcDzJj6C.js} +1 -1
- package/dist/assets/{Terminal-B70jnm8e.js → Terminal-DpGR-56V.js} +5 -5
- package/dist/assets/{Viewer-BsGL5Dfa.js → Viewer-vqCH_LqM.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C7iEnSHU.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DR_v3lvi.js} +1 -1
- package/dist/assets/{addon-icons-context--6Hi3qRW.js → addon-icons-context-B2Gmu49a.js} +1 -1
- package/dist/assets/{archive-DtcjevJM.js → archive-CoV271Ga.js} +1 -1
- package/dist/assets/{authed-media-LCmlAEZ5.js → authed-media-BSx10sm9.js} +1 -1
- package/dist/assets/{bell-off-eQBpwamg.js → bell-off-CQHJCxaC.js} +1 -1
- package/dist/assets/{board-model-wzCmdEKJ.js → board-model-lagHZiI7.js} +1 -1
- package/dist/assets/{boxes-DikDfAoo.js → boxes-DKr2EDaB.js} +1 -1
- package/dist/assets/circle-slash-D1CG5tRc.js +1 -0
- package/dist/assets/client-CqsEJzhO.js +358 -0
- package/dist/assets/{cloud-upload-DI9XunFf.js → cloud-upload-D3IJwdmA.js} +1 -1
- package/dist/assets/crop-sD8BDahL.js +1 -0
- package/dist/assets/{device-integration-icon-D2lWVDM2.js → device-integration-icon-BHf83qVT.js} +1 -1
- package/dist/assets/device-picker-model-JBC8n4FU.js +1 -0
- package/dist/assets/dist-C3lDDHVX.js +358 -0
- package/dist/assets/{dist-ChQzskeX.js → dist-Dlrgg5It.js} +1 -1
- package/dist/assets/{eraser-Dl5ROV0l.js → eraser-BRuYxYS4.js} +1 -1
- package/dist/assets/{hard-drive-download-B1ard6ym.js → hard-drive-download-B14E8eTo.js} +1 -1
- package/dist/assets/{history-BMhP0SFG.js → history-Dn2pnfaZ.js} +1 -1
- package/dist/assets/{hostInit-FCvre9AW.js → hostInit-3qW3eaSU.js} +1 -1
- package/dist/assets/i18n-B-IeyHf7.js +1 -0
- package/dist/assets/icons-CvJTX54k.js +1 -0
- package/dist/assets/{index-DvOECbab.js → index-mBJW996X.js} +3 -3
- package/dist/assets/key-EeG_L4W9.js +1 -0
- package/dist/assets/{key-round-yCDTbIQb.js → key-round-C9pPg55h.js} +1 -1
- package/dist/assets/{layers-c960YTPf.js → layers-DhxisKd7.js} +1 -1
- package/dist/assets/{linked-devices-model-CB7qgVjI.js → linked-devices-model-CTfAwc1p.js} +1 -1
- package/dist/assets/{list-ordered-C7hEwAd1.js → list-ordered-Ckqq8GR7.js} +1 -1
- package/dist/assets/{location-owned-usage-D28vwYJT.js → location-owned-usage-eDtNCANy.js} +1 -1
- package/dist/assets/{log-in-DFfxcqYz.js → log-in-CAiH8-Mq.js} +1 -1
- package/dist/assets/{memory-stick-BBfIGrWx.js → memory-stick-Bir-K-V7.js} +1 -1
- package/dist/assets/{message-square-plus-D8ZUT6rz.js → message-square-plus-B_0WwbBk.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-3035e647.js → mf-entry-bootstrap-0-c62ae51c.js} +2 -2
- package/dist/assets/{mic-off-w2mFOBi3.js → mic-off-D5kT_DDX.js} +1 -1
- package/dist/assets/{monitor-off-DPi_gm_c.js → monitor-off-DzKNd6eJ.js} +1 -1
- package/dist/assets/{monitor-smartphone-9Ife1Trw.js → monitor-smartphone-D3ZPy75c.js} +1 -1
- package/dist/assets/mount-JBC8n4FU.js +1 -0
- package/dist/assets/{notification-schedule-field-BuLfSYLZ.js → notification-schedule-field-DaKiveMR.js} +1 -1
- package/dist/assets/{octagon-alert-C-jH7VH_.js → octagon-alert-BYNvsZ0Q.js} +1 -1
- package/dist/assets/{player-overlays-D0U2dNvn.js → player-overlays-DFTWiQ8-.js} +1 -1
- package/dist/assets/{recycle-Bbki65G2.js → recycle-DJUuC9xt.js} +1 -1
- package/dist/assets/remoteEntry-BhYjusn-.js +1 -0
- package/dist/assets/{scan-eye-AfIM_Dlr.js → scan-eye-_otUiDbW.js} +1 -1
- package/dist/assets/{scissors-CnL6g0BO.js → scissors-BU04yNa7.js} +1 -1
- package/dist/assets/{search-x-eqJd3G8u.js → search-x-Djycej4Y.js} +1 -1
- package/dist/assets/{send-B72RQ9UL.js → send-BNY2bJqA.js} +1 -1
- package/dist/assets/{settings-2-CXZ6DVRg.js → settings-2-BxpLi7pY.js} +1 -1
- package/dist/assets/{speaker-CcCWWecW.js → speaker-BspD0ixN.js} +1 -1
- package/dist/assets/src-CE3hNyCx.js +67 -0
- package/dist/assets/{timer-reset-B9Lihcw9.js → timer-reset-CPRU92uv.js} +1 -1
- package/dist/assets/{ungroup-D753owNE.js → ungroup-oYlFn3LE.js} +1 -1
- package/dist/assets/{unlink-DzoLNfsq.js → unlink-D0eJ5vAc.js} +1 -1
- package/dist/assets/{usb-CuSU-_EY.js → usb-C24Ua3ty.js} +1 -1
- package/dist/assets/{use-scenes-feed-CZjJNxfD.js → use-scenes-feed-DzzIer2d.js} +1 -1
- package/dist/assets/{use-stationary-objects-BoGqWyLV.js → use-stationary-objects-C-l1Z5zI.js} +1 -1
- package/dist/assets/useEventInvalidation-JBC8n4FU.js +1 -0
- package/dist/assets/{useNodeUrlSelection-BA6CgjTU.js → useNodeUrlSelection-Ba-ed7zb.js} +1 -1
- package/dist/assets/user-round-JzUTTasm.js +1 -0
- package/dist/assets/{user-x-PK8sSsso.js → user-x-CdpX6b_D.js} +1 -1
- package/dist/assets/{video-BBtESt54.js → video-vLKHp9E_.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BKfTL-9e.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-D83o1ikp.js} +2 -2
- package/dist/index.html +10 -10
- package/dist/server/addon.js +192 -30
- package/package.json +1 -1
- package/dist/assets/AiProfiles-BXcreqZP.js +0 -3
- package/dist/assets/Cluster-B-k0M79z.js +0 -1
- package/dist/assets/ClusterStepModel-DaAc_6nI.js +0 -1
- package/dist/assets/Data-IfJuKcwc.js +0 -2
- package/dist/assets/Identity-DNE80jdX.js +0 -1
- package/dist/assets/IntegrationDetail-LKbiJFU3.js +0 -1
- package/dist/assets/Locations-BeaznsZS.js +0 -3
- package/dist/assets/MyAccess-Dxb11B6h.js +0 -2
- package/dist/assets/Network-BCDUHSB0.js +0 -1
- package/dist/assets/Recordings-BCeoXxL4.js +0 -1
- package/dist/assets/SessionsList-BRTwG3uv.js +0 -2
- package/dist/assets/circle-slash-YVgGJTpJ.js +0 -1
- package/dist/assets/client-DYbvGOid.js +0 -358
- package/dist/assets/crop-CxZbpOyK.js +0 -1
- package/dist/assets/device-picker-model-C4w1vbly.js +0 -1
- package/dist/assets/dist-CPO0KWoy.js +0 -358
- package/dist/assets/file-up-WS3s_T9x.js +0 -1
- package/dist/assets/i18n-Vb3uBp7P.js +0 -1
- package/dist/assets/icons-DocdgFuy.js +0 -1
- package/dist/assets/key-B1M6i1mf.js +0 -1
- package/dist/assets/mount-C4w1vbly.js +0 -1
- package/dist/assets/remoteEntry-DYVoozgD.js +0 -1
- package/dist/assets/src-CGxdJN_f.js +0 -67
- package/dist/assets/useEventInvalidation-C4w1vbly.js +0 -1
- package/dist/assets/user-round-CMg3Ndlt.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,B as t,G as n,J as r,L as i,S as a,a as o,b as s,o as c,t as l,x as u}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{$t as d,D as f,Ir as p,It as m,Nt as h,_i as g,ar as _,er as v,fi as y,ln as b,nr as x,on as S,ot as C,pi as w,pr as ee,un as te,vi as ne,wn as re,yi as ie,yn as ae}from"./player-overlays-D0U2dNvn.js";import{t as T}from"./key-round-yCDTbIQb.js";import{t as oe}from"./octagon-alert-C-jH7VH_.js";import{ur as se}from"./client-DYbvGOid.js";import{An as ce,Bn as E,Co as le,Dn as ue,En as de,Eo as fe,Ft as D,Gl as O,Ln as k,On as pe,Pn as me,Ql as A,Qn as he,So as ge,Tn as _e,To as ve,Ut as j,Vt as M,Wt as N,Xn as P,Zn as F,_o as ye,ar as I,bo as be,en as xe,go as Se,il as Ce,jn as we,kn as Te,nn as Ee,ou as L,pu as De,rn as R,sl as Oe,tn as z,ul as ke,vo as Ae,wo as je,xo as Me,yo as Ne}from"./src-CGxdJN_f.js";import{t as B}from"./i18n-Vb3uBp7P.js";import{t as V}from"./useTranslation-D3Is_4B6.js";import{C as Pe,D as Fe,Y as Ie,et as Le}from"./index-DvOECbab.js";import{t as Re}from"./AdminSectionedPage-B-qoE6ra.js";import{t as H}from"./AdminPage-DAO24U0w.js";import{t as ze}from"./NodeAddonsSettingsPanel-BMat4ckt.js";import{t as Be}from"./AddonAssetIcon-DR35yt0E.js";e();var Ve={detection:`border-green-500`,detector:`border-green-500`,streaming:`border-blue-500`,decode:`border-blue-500`,decoder:`border-blue-500`,recording:`border-orange-500`,recorder:`border-orange-500`,transcoding:`border-purple-500`,transcoder:`border-purple-500`,restream:`border-cyan-500`,restreamer:`border-cyan-500`,storage:`border-yellow-500`,notification:`border-pink-500`,notifier:`border-pink-500`,faces:`border-indigo-500`},He={detection:`bg-green-500/5`,detector:`bg-green-500/5`,streaming:`bg-blue-500/5`,decode:`bg-blue-500/5`,decoder:`bg-blue-500/5`,recording:`bg-orange-500/5`,recorder:`bg-orange-500/5`,transcoding:`bg-purple-500/5`,transcoder:`bg-purple-500/5`,restream:`bg-cyan-500/5`,restreamer:`bg-cyan-500/5`,storage:`bg-yellow-500/5`,notification:`bg-pink-500/5`,notifier:`bg-pink-500/5`,faces:`bg-indigo-500/5`};function Ue({entry:e,actions:t}){let n=e.name.toLowerCase(),r=Ve[n]??`border-primary`,i=He[n]??`bg-primary/5`,o=e.providers.find(e=>e.active),s=t?.pendingCapability===e.name;return a(`div`,{className:`rounded-lg border-t-2 border border-border ${r} ${i} p-3 space-y-2`,children:[a(`div`,{className:`flex items-center justify-between gap-2`,children:[a(`span`,{className:`text-xs font-semibold text-foreground capitalize flex items-center gap-1.5`,children:[e.name,s&&u(_,{className:`h-3 w-3 animate-spin text-primary`})]}),u(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-medium ${e.mode===`singleton`?`bg-primary/10 text-primary`:`bg-info/10 text-info`}`,children:e.mode})]}),e.mode===`singleton`?u(We,{entry:e,actions:t,activeProvider:o,isPending:s}):u(Ge,{entry:e,actions:t,isPending:s})]})}function We({entry:e,actions:t,activeProvider:n,isPending:r}){let{t:i}=V();if(!t)return u(`div`,{children:n?a(`div`,{className:`flex items-center gap-1.5 text-[10px] text-foreground`,children:[u(y,{className:`h-3 w-3 text-green-400 shrink-0`}),u(`span`,{className:`font-medium`,children:n.addonName}),u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto`,children:`ACTIVE`})]}):u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:i(`addons.capabilityMap.noActiveProvider`,`No active provider`)})});if(e.providers.length===0)return u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:i(`addons.capabilityMap.noProviders`,`No providers`)});let o=`__inherit__`;return a(`div`,{className:`space-y-2`,children:[u(`div`,{className:`space-y-1`,children:e.providers.map(n=>{let i=n.active;return a(`button`,{type:`button`,disabled:r||i,onClick:()=>t.onSelectSingleton(e.name,n.addonId),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${i?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[u(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${i?`border-green-400 bg-green-400`:`border-border`}`}),u(`span`,{className:`font-medium truncate`,children:n.addonName}),i&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},n.addonId)})}),e.perNode&&e.perNode.length>0&&u(`div`,{className:`space-y-2 pt-1 border-t border-border/40`,children:e.perNode.map(n=>{let s=n.hasOverride&&n.resolvedActive?n.resolvedActive:o,c=[{value:o,label:n.resolvedActive?i(`addons.capabilityMap.inheritGlobalWith`,{provider:n.resolvedActive}):i(`addons.capabilityMap.inheritGlobal`)},...n.providers.map(e=>({value:e,label:e}))],l=r=>{r===o?t.onClearNodeSingleton(e.name,n.nodeId):t.onSelectNodeSingleton(e.name,n.nodeId,r)},d=r;return a(`div`,{className:`space-y-0.5`,children:[a(`div`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60 px-1.5`,children:[n.nodeId,n.hasOverride&&u(`span`,{className:`ml-1.5 rounded-full bg-primary/10 text-primary px-1 py-0.5 normal-case tracking-normal font-medium`,children:i(`common.override`)})]}),c.map(e=>{let t=s===e.value;return a(`button`,{type:`button`,disabled:d||t,onClick:()=>l(e.value),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${t?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[u(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${t?`border-green-400 bg-green-400`:`border-border`}`}),u(`span`,{className:`font-medium truncate`,children:e.label}),t&&e.value!==o&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},e.value)})]},n.nodeId)})})]})}function Ge({entry:e,actions:t,isPending:n}){let{t:r}=V();if(e.providers.length===0)return u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:r(`addons.capabilityMap.noProviders`,`No providers`)});if(!t)return u(`div`,{className:`space-y-1`,children:e.providers.map(e=>a(`div`,{className:`flex items-center justify-between gap-2 text-[10px]`,children:[u(`span`,{className:`text-foreground-subtle`,children:e.addonName}),e.active&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium`,children:`ACTIVE`})]},e.addonId))});let i=e.providers.filter(e=>e.active).map(e=>e.addonId),o=(n,r)=>{let a=r?[...new Set([...i,n])]:i.filter(e=>e!==n);t.onToggleCollection(e.name,a)};return u(`div`,{className:`space-y-1`,children:e.providers.map(e=>a(`label`,{className:`flex items-center justify-between gap-2 text-[10px] rounded px-1.5 py-1 transition-colors ${n?`opacity-50`:`hover:bg-surface-hover cursor-pointer`}`,children:[a(`span`,{className:`flex items-center gap-1.5 min-w-0`,children:[u(`input`,{type:`checkbox`,checked:e.active,disabled:n,onChange:t=>o(e.addonId,t.target.checked),className:`h-3 w-3 accent-green-500 shrink-0`}),u(`span`,{className:`text-foreground truncate`,children:e.addonName})]}),e.active&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium shrink-0`,children:`ACTIVE`})]},e.addonId))})}function U({capabilities:e,actions:t}){let{t:n}=V();return e.length===0?u(`div`,{className:`text-xs text-foreground-subtle text-center py-8`,children:n(`addons.capabilityMap.noCapabilitiesRegistered`,`No capabilities registered`)}):u(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3`,children:e.map(e=>u(Ue,{entry:e,actions:t},e.name))})}var Ke=[`capabilities`,`listCapabilities`];function qe(e){return e===`singleton`||e===`collection`}function W(e){let t=e.indexOf(`@`);return t===-1?B.t(`system.capabilities.providerHub`,{addonId:e}):`${e.slice(0,t)} (${e.slice(t+1)})`}function Je(e,t){return{name:e.name,mode:t,providers:e.providers.map(n=>({addonId:n,addonName:W(n),active:t===`singleton`?e.activeProvider===n:!e.disabledProviders.includes(n)})),...t===`singleton`&&e.perNode?{perNode:e.perNode}:{}}}function Ye(){let{t:e}=V(),t=C(),[i,s]=r(null),[c,f]=r(null),p=o({queryKey:Ke,queryFn:()=>t.trpcClient.capabilities.listCapabilities.query()}),m=n(()=>{let e=(p.data??[]).flatMap(e=>qe(e.mode)?[Je(e,e.mode)]:[]),t=e.filter(e=>e.mode===`singleton`).toSorted((e,t)=>e.name.localeCompare(t.name)),n=e.filter(e=>e.mode===`collection`).toSorted((e,t)=>e.name.localeCompare(t.name));return[...t,...n]},[p.data]),h=n(()=>m.filter(e=>e.mode===`singleton`),[m]),g=n(()=>m.filter(e=>e.mode===`collection`),[m]),_=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:n.capName,addonId:n.addonId})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToSet`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),v=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(e,t)=>{f({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToSetOnNode`,{cap:n.capName,node:n.nodeId,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),b=l({mutationFn:e=>t.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:n.capName,nodeId:n.nodeId})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToClearOnNode`,{cap:n.capName,node:n.nodeId,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),x=l({mutationFn:e=>t.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:n.capName,length:n.enabledAddonIds.length})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToUpdate`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),S={onSelectSingleton:(e,t)=>_.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>v.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>b.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>x.mutate({capName:e,enabledAddonIds:t}),pendingCapability:i};return a(H,{embedded:!0,icon:d,title:e(`system.capabilities.capabilities`,`Capabilities`),subtitle:e(`system.capabilities.chooseWhichProviderIsActive`,`Choose which provider is active for each system capability. Singleton caps pick exactly one provider; collection caps enable a set.`),children:[c&&a(`div`,{className:`flex items-center gap-2 rounded-md border px-3 py-2 text-xs ${c.kind===`success`?`border-success/30 bg-success/10 text-success`:`border-danger/40 bg-danger/10 text-danger`}`,children:[c.kind===`success`?u(y,{className:`h-3.5 w-3.5 shrink-0`}):u(w,{className:`h-3.5 w-3.5 shrink-0`}),u(`span`,{children:c.message})]}),p.isLoading&&u(`div`,{className:`flex items-center justify-center py-16`,children:u(`div`,{className:`animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full`})}),p.isError&&!p.isLoading&&u(k,{title:e(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:p.error instanceof Error?p.error.message:e(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void p.refetch()}),!p.isLoading&&!p.isError&&m.length===0&&u(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:e(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!p.isLoading&&!p.isError&&m.length>0&&a(`div`,{className:`space-y-6`,children:[h.length>0&&a(`section`,{className:`space-y-2`,children:[u(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:e(`system.capabilities.singletonPickOneProvider`,`Singleton — pick one provider`)}),u(U,{capabilities:h,actions:S})]}),g.length>0&&a(`section`,{className:`space-y-2`,children:[u(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:e(`system.capabilities.collectionEnableASet`,`Collection — enable a set`)}),u(U,{capabilities:g,actions:S})]})]})]})}var G=[`locked`,`reset`,`shares-backup`,`recovery-key`,`rotation-pending`,`orphans`],Xe={"key-missing":`helpers.keychainNotices.lockedKeyMissing`,"wrong-key":`helpers.keychainNotices.lockedWrongKey`,"key-file-unreadable":`helpers.keychainNotices.lockedKeyFileUnreadable`,"store-unavailable":`helpers.keychainNotices.lockedStoreUnavailable`,"not-initialized":`helpers.keychainNotices.lockedNotInitialized`,"decrypt-failed":`helpers.keychainNotices.lockedDecryptFailed`};function Ze(e){let t=Xe[e];return t===void 0?e:B.t(t)}function Qe({status:e,reset:t,pendingReentry:n,orphans:r}){let i=e.keychain.state===`locked`,a=e.keySource??e.configuredSource,o=[];return e.keychain.state===`locked`&&o.push({id:`locked`,tone:`danger`,title:B.t(`helpers.keychainNotices.locked`,{reason:Ze(e.keychain.reason)})}),t!==null&&t.acknowledgedAt===null&&o.push({id:`reset`,tone:`danger`,title:n>0?B.t(`helpers.keychainNotices.resetPending`,{count:n}):B.t(`helpers.keychainNotices.resetDone`)}),a.sharesBackupWithDatabase&&o.push({id:`shares-backup`,tone:`warning`,title:B.t(`helpers.keychainNotices.sharesBackup`)}),!i&&e.recoveryKeyDownloadedAt===null&&o.push({id:`recovery-key`,tone:`warning`,title:B.t(`helpers.keychainNotices.recoveryKey`)}),!i&&e.rotationPending&&o.push({id:`rotation-pending`,tone:`info`,title:B.t(`helpers.keychainNotices.rotationPending`)}),!i&&r>0&&o.push({id:`orphans`,tone:`info`,title:B.t(`helpers.keychainNotices.orphans`,{count:r})}),[...o].sort((e,t)=>G.indexOf(e.id)-G.indexOf(t.id))}var $e={dateStyle:`short`,timeStyle:`short`};function K(e){return e===null?`—`:new Date(e).toLocaleString(void 0,$e)}function q({value:e,copyValue:t,srLabel:n,maxWidthClass:r,className:i}){let o=t??e;return a(`span`,{className:L(`flex min-w-0 items-center gap-0.5`,r),children:[u(`span`,{className:L(`min-w-0 truncate font-mono`,i),title:o,children:e}),u(D,{value:o,srLabel:n,className:`h-6 shrink-0 px-1.5`})]})}e();var et=new Set([`reveal`,`download-recovery-key`,`rotate-master-key`,`reset`]);function tt(e){return[{key:`at`,header:e(`system.keychainAuditTable.colWhen`),render:e=>K(e.at)},{key:`action`,header:e(`system.keychainAuditTable.colAction`),render:e=>u(I,{variant:et.has(e.action)?`warning`:`default`,children:e.action})},{key:`actor`,header:e(`system.keychainAuditTable.colActor`),render:e=>u(`span`,{className:`font-mono`,children:e.actor})},{key:`ref`,header:e(`system.keychainAuditTable.colRef`),render:e=>e.ref===null?u(`span`,{className:`text-foreground-subtle`,children:`—`}):u(q,{value:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[22rem]`})},{key:`detail`,header:e(`system.keychainAuditTable.colDetail`),render:e=>u(`span`,{className:`text-foreground-muted`,children:e.detail??``})}]}function nt({entries:e}){let{t}=V(),[i,o]=r(0),s=n(()=>tt(t),[t]);if(e===void 0)return u(`p`,{className:`text-xs text-foreground-subtle`,children:t(`common.loading`,`Loading…`)});let c=Math.max(1,Math.ceil(e.length/25)),l=Math.min(i,c-1),d=l*25,f=e.slice(d,d+25);return a(`div`,{className:`space-y-2`,children:[u(j,{columns:s,rows:f,rowKey:e=>e.id,minWidthPx:760,emptyMessage:t(`secrets.keychainAuditTable.nothingHasBeenAuditedYet`,`Nothing has been audited yet.`)}),e.length>25&&a(`div`,{className:`flex flex-wrap items-center justify-between gap-2 text-[11px] text-foreground-subtle`,children:[u(`span`,{children:t(e.length>=500?`system.keychainAuditTable.rangeRecent`:`system.keychainAuditTable.range`,{from:d+1,to:d+f.length,total:e.length})}),a(`span`,{className:`inline-flex items-center gap-1`,children:[u(E,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:l===0,onClick:()=>o(l-1),children:u(ne,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),a(`span`,{className:`tabular-nums`,children:[l+1,` / `,c]}),u(E,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:l>=c-1,onClick:()=>o(l+1),children:u(g,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return u(E,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return u(E,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return u(E,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return u(E,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return u(E,{size:`sm`,variant:`outline`,onClick:t.onShowOrphans,children:B.t(`secrets.keychainNoticeContent.review`,`Review`)});case`shares-backup`:return null}}function it(e,t){switch(e){case`locked`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.noValueCanBeRead`,`No value can be read or stored. If the master key is lost for good, Reset archives every stored value and starts a new keychain; every secret field then reads “not set”.`)});case`reset`:return t.reset===null?null:u(at,{reset:t.reset,pending:t.pendingReentry});case`shares-backup`:return u(`p`,{children:u(Ie,{i18nKey:`secrets.keychainNoticeContent.backupKeyFile`,components:{code:u(`code`,{className:`font-mono`})}})});case`recovery-key`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.withoutACopyOfThe`,`Without a copy of the master key, the stored values cannot be recovered.`)});case`rotation-pending`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.theKeychainUnlockedWithA`,`The keychain unlocked with a previous key. Rotate to move onto the configured one.`)});case`orphans`:return null}}function at({reset:e,pending:t}){let{t:n}=V(),r=e.actor===`trigger-file`?n(`secrets.keychainNoticeContent.resetByTrigger`):n(`secrets.keychainNoticeContent.resetByAdmin`,{actor:e.actor});return a(`div`,{className:`space-y-1.5`,children:[u(`p`,{children:n(`secrets.keychainNoticeContent.resetDetail`,{when:K(e.at),by:r,archived:e.archived})}),t.length>0&&u(`ul`,{className:`max-h-40 space-y-0.5 overflow-y-auto rounded-md border border-border bg-background p-2 font-mono text-[11px] text-foreground`,children:t.map(e=>a(`li`,{className:`break-all`,children:[e.owner,` · `,e.scope,` · `,e.fieldPath]},e.ref))})]})}e();var ot=2,J={danger:{icon:oe,text:`text-danger`,border:`border-danger/40`},warning:{icon:h,text:`text-warning`,border:`border-warning/40`},info:{icon:ee,text:`text-info`,border:`border-border`}};function st({notices:e,renderAction:t,renderDetail:n}){let{t:i}=V(),[o,s]=r(!1),c=e[0];if(c===void 0)return null;let l=e.length>ot,d=l&&!o?e.slice(0,1):e,f=e.length-d.length;return a(`section`,{"aria-label":i(`secrets.keychainNotices.keychainNotices`,`Keychain notices`),className:L(`rounded-lg border bg-surface`,J[c.tone].border),children:[u(`ul`,{className:`divide-y divide-border`,children:d.map(e=>u(ct,{notice:e,action:t(e.id),detail:n(e.id)},e.id))}),l&&u(`div`,{className:`border-t border-border px-3 py-1`,children:a(E,{size:`sm`,variant:`ghost`,"aria-expanded":o,onClick:()=>s(e=>!e),children:[u(ie,{className:L(`h-3.5 w-3.5 transition-transform`,o&&`rotate-180`),"aria-hidden":!0}),o?i(`secrets.keychainNotices.showLess`,`Show less`):i(`secrets.keychainNotices.more`,`{{hidden}} more`,{hidden:f})]})})]})}function ct({notice:e,action:t,detail:n}){let{t:i}=V(),[o,s]=r(!1),c=J[e.tone],l=c.icon,d=n!=null,f=`keychain-notice-${e.id}`;return a(`li`,{className:`px-3 py-2`,children:[a(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-3`,children:[a(`p`,{className:`flex min-w-0 flex-1 items-start gap-2 text-xs text-foreground`,children:[u(l,{className:L(`mt-0.5 h-3.5 w-3.5 shrink-0`,c.text),"aria-hidden":!0}),u(`span`,{className:`min-w-0 break-words`,children:e.title})]}),a(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 pl-5 sm:pl-0`,children:[d&&u(E,{size:`sm`,variant:`ghost`,"aria-expanded":o,"aria-controls":f,onClick:()=>s(e=>!e),children:i(`secrets.keychainNotices.details`,`Details`)}),t]})]}),d&&o&&u(`div`,{id:f,className:`mt-2 pl-5 text-xs text-foreground-muted`,children:n})]})}var lt={"config-file":`Key file (config.yaml)`,"previous-config-file":`Previous key file`,platform:`OS keychain`,"default-file":`Default key file (data volume)`},ut=8;function dt({status:e,busy:t,onDownload:n,onRotate:r,onPurge:i}){let{t:o}=V(),s=e.keychain.state===`locked`,c=e.keySource??e.configuredSource;return u(M,{headingId:`keychain-status`,title:o(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:T,actions:a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[e.retiredWraps>0&&u(E,{size:`sm`,variant:`ghost`,disabled:t||s,onClick:i,children:o(`secrets.keychainStatusCard.purge`,{count:e.retiredWraps})}),u(E,{size:`sm`,variant:`outline`,disabled:t||s,onClick:r,children:o(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),u(E,{size:`sm`,variant:`outline`,disabled:t||s,onClick:n,children:o(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:a(`dl`,{className:`${f} grid grid-cols-1 gap-x-6 gap-y-3 sm:grid-cols-2 xl:grid-cols-4`,children:[a(Y,{label:o(`secrets.keychainStatusCard.state`,`State`),children:[s?a(I,{variant:`danger`,className:`gap-1`,children:[u(x,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.locked`,`Locked`)]}):a(I,{variant:`success`,className:`gap-1`,children:[u(S,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.unlocked`,`Unlocked`)]}),u(`span`,{className:`ml-2 text-foreground-subtle`,children:o(`common.stored`,{count:e.secretCount})})]}),a(Y,{label:o(`secrets.keychainStatusCard.keySource`,`Key source`),children:[u(`span`,{className:`block`,children:lt[c.kind]}),c.path!==void 0&&u(q,{value:c.path,srLabel:`key path`})]}),u(Y,{label:o(`secrets.keychainStatusCard.fingerprint`,`Fingerprint`),children:e.fingerprint===null?u(`span`,{className:`text-foreground-subtle`,children:`—`}):a(`span`,{className:`inline-flex items-center gap-0.5`,children:[u(`span`,{className:`font-mono`,title:e.fingerprint,children:e.fingerprint.slice(0,ut)}),u(D,{value:e.fingerprint,srLabel:`fingerprint`})]})}),u(Y,{label:o(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:e.recoveryKeyDownloadedAt===null?u(I,{variant:`warning`,children:o(`secrets.keychainStatusCard.notTaken`,`Not taken`)}):u(`span`,{children:o(`secrets.keychainStatusCard.taken`,{when:K(e.recoveryKeyDownloadedAt)})})})]})})}function Y({label:e,children:t}){return a(`div`,{className:`min-w-0 text-xs`,children:[u(`dt`,{className:`text-foreground-subtle`,children:e}),u(`dd`,{className:`mt-0.5 min-w-0 text-foreground`,children:t})]})}e();var ft=1e3;function pt({revealed:e,onClose:n}){let{t:i}=V(),[o,c]=r(O);t(()=>{if(e===null)return;let t=Date.now();c(O);let r=setTimeout(n,O),i=setInterval(()=>c(Math.max(0,O-(Date.now()-t))),ft);return()=>{clearTimeout(r),clearInterval(i)}},[e,n]);let l=Math.ceil(o/1e3);return u(_e,{open:e!==null,onOpenChange:e=>!e&&n(),children:u(ue,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&a(s,{children:[a(ce,{children:[u(we,{className:`break-all`,children:e.entry.fieldPath}),a(pe,{className:`break-all`,children:[e.entry.owner,` · `,e.entry.scope]})]}),u(de,{children:u(`pre`,{"data-testid":`revealed-value`,className:`whitespace-pre-wrap break-all rounded-md border border-border bg-background p-3 font-mono text-xs text-foreground`,children:e.value})}),a(Te,{className:`flex-col items-stretch gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[u(`p`,{className:`text-[11px] text-foreground-subtle`,children:i(`secrets.revealDialog.recorded`,{seconds:l})}),a(`div`,{className:`flex justify-end gap-2`,children:[u(D,{value:e.value,label:i(`common.copy`,`Copy`),srLabel:`revealed value`}),u(E,{size:`sm`,variant:`outline`,onClick:n,children:i(`secrets.revealDialog.hide`,`Hide`)})]})]})]})})})}var X={orphan:{labelKey:`secrets.secretsTableState.usageOrphan`,variant:`warning`,hintKey:`secrets.secretsTableState.usageOrphanHint`,rank:0},unknown:{labelKey:`secrets.secretsTableState.usageUnknown`,variant:`default`,hintKey:`secrets.secretsTableState.usageUnknownHint`,rank:1},"in-use":{labelKey:`secrets.secretsTableState.usageInUse`,variant:`success`,hintKey:`secrets.secretsTableState.usageInUseHint`,rank:2}},mt=[{id:`all`,labelKey:`common.all`},{id:`in-use`,labelKey:`secrets.secretsTableState.usageInUse`},{id:`orphan`,labelKey:`secrets.secretsTableState.filterOrphans`},{id:`unknown`,labelKey:`secrets.secretsTableState.usageUnknown`}],Z=`system`;function ht(e){let{t}=V(),{secrets:n,filter:r,onFilterChange:i,onDeleteOrphans:o,deleting:s,locked:c}=e;if(n===void 0)return u(`p`,{className:`text-xs text-foreground-subtle`,children:t(`common.loading`,`Loading…`)});let l=e=>e===`all`?n.length:n.filter(t=>t.usage===e).length,d=n.filter(e=>e.usage===`orphan`).map(e=>e.ref),f=r===`all`?n:n.filter(e=>e.usage===r);return a(`div`,{className:`space-y-2`,children:[a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[u(`div`,{className:`flex flex-wrap gap-1`,role:`group`,"aria-label":t(`secrets.secretsTable.filterByUsage`,`Filter by usage`),children:mt.map(e=>a(E,{size:`sm`,variant:r===e.id?`secondary`:`ghost`,"aria-pressed":r===e.id,className:r===e.id?`ring-1 ring-border`:void 0,onClick:()=>i(e.id),children:[t(e.labelKey),u(`span`,{className:`text-foreground-subtle tabular-nums`,children:l(e.id)})]},e.id))}),d.length>0&&a(E,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:s||c,onClick:()=>o(d),children:[u(m,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),t(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),u(j,{columns:_t(e),rows:f,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:N,defaultSort:{columnKey:`owner`,dir:`asc`},emptyMessage:n.length===0?t(`secrets.secretsTable.noValueIsStoredIn`,`No value is stored in the keychain yet.`):t(`secrets.secretsTable.noStoredValueMatchesThis`,`No stored value matches this filter.`)})]})}function gt({owner:e}){let{t}=V();return a(`span`,{className:`flex items-center gap-2`,children:[u(Be,{addonId:e,fallback:e===Z?te:re,tileClassName:`bg-surface-hover text-foreground-subtle`,size:`sm`}),u(`span`,{className:`font-medium`,children:e===Z?t(`secrets.secretsTable.hubSystem`,`Hub (system)`):e})]})}function _t({locked:e,onReveal:t,revealing:n}){return[{key:`owner`,header:B.t(`secrets.secretsTable.owner`,`Owner`),render:e=>u(gt,{owner:e.owner}),sortValue:e=>e.owner},{key:`scope`,header:B.t(`secrets.secretsTable.scope`,`Scope`),render:e=>u(`span`,{className:`block max-w-[11rem] truncate font-mono`,title:e.scope,children:e.scope}),sortValue:e=>e.scope},{key:`field`,header:B.t(`secrets.secretsTable.field`,`Field`),render:e=>u(q,{value:e.fieldPath,copyValue:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[16rem]`}),sortValue:e=>e.fieldPath},{key:`updated`,header:B.t(`secrets.secretsTable.updated`,`Updated`),render:e=>K(e.updatedAt),sortValue:e=>e.updatedAt},{key:`last-read`,header:B.t(`secrets.secretsTable.lastRead`,`Last read`),render:e=>K(e.lastReadAt),sortValue:e=>e.lastReadAt},{key:`status`,header:B.t(`secrets.secretsTable.status`,`Status`),render:e=>u(I,{variant:X[e.usage].variant,title:B.t(X[e.usage].hintKey),children:B.t(X[e.usage].labelKey)}),sortValue:e=>X[e.usage].rank},{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:r=>a(E,{size:`sm`,variant:`ghost`,disabled:e||n,"aria-label":B.t(`secrets.secretsTable.reveal`,`Reveal {{fieldPath}}`,{fieldPath:r.fieldPath}),title:e?B.t(`secrets.secretsTable.theKeychainIsLocked`,`The keychain is locked`):B.t(`secrets.secretsTable.revealAudited`,`Reveal (audited)`),onClick:()=>t(r),children:[u(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),B.t(`secrets.secretsTable.reveal2`,`Reveal`)]})}]}function vt(e){return e instanceof Error?e.message:String(e)}function yt(e){let{t}=V(),n=F(),r=P(),i=he(),a=Ae(),o=ve(),s=Me(),c=ge(),l=Se(),u=ye(),d=async(t,n)=>{try{await n()}catch(e){await r({title:t,message:vt(e),variant:`danger`})}e()};return{busy:a.isPending||o.isPending||s.isPending||c.isPending,deleting:u.isPending,download:async()=>{await n({title:t(`secrets.useKeychainActions.downloadTitle`),message:t(`secrets.useKeychainActions.downloadMessage`),confirmLabel:t(`secrets.useKeychainActions.downloadConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.downloadRefused`),async()=>{let e=await a.mutateAsync({});await i({title:t(`secrets.useKeychainActions.recoveryTitle`,{fingerprint:e.fingerprint}),message:t(`secrets.useKeychainActions.recoveryMessage`),defaultValue:e.key,readOnly:!0,confirmLabel:t(`secrets.useKeychainActions.recoveryDone`)})})},rotate:async()=>{await n({title:t(`secrets.useKeychainActions.rotateTitle`),message:t(`secrets.useKeychainActions.rotateMessage`),confirmLabel:t(`secrets.useKeychainActions.rotateConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.rotateRefused`),async()=>{let e=await o.mutateAsync({});await r({title:t(`secrets.useKeychainActions.rotatedTitle`),message:t(`secrets.useKeychainActions.rotatedMessage`,{fingerprint:e.fingerprint})})})},purge:async()=>{await n({title:t(`secrets.useKeychainActions.purgeTitle`),message:t(`secrets.useKeychainActions.purgeMessage`),confirmLabel:t(`secrets.useKeychainActions.purgeConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.purgeRefused`),async()=>{await s.mutateAsync({})})},reset:async()=>{await i({title:t(`secrets.useKeychainActions.resetTitle`),message:t(`secrets.useKeychainActions.resetMessage`,{confirmation:`RESET KEYCHAIN`}),confirmLabel:t(`secrets.useKeychainActions.resetConfirm`),validate:e=>e===`RESET KEYCHAIN`?null:t(`secrets.useKeychainActions.resetMismatch`)})===`RESET KEYCHAIN`&&await d(t(`secrets.useKeychainActions.resetRefused`),async()=>{await c.mutateAsync({confirm:se})})},acknowledgeReset:async()=>{await d(t(`secrets.useKeychainActions.dismissFailed`),async()=>{await l.mutateAsync({})})},deleteOrphans:async e=>{await n({title:t(`secrets.useKeychainActions.orphansTitle`,{count:e.length}),message:t(`secrets.useKeychainActions.orphansMessage`),confirmLabel:t(`secrets.useKeychainActions.orphansConfirm`),variant:`danger`})&&await d(t(`secrets.useKeychainActions.orphansRefused`),async()=>{let n=await u.mutateAsync({refs:[...e]});n.kept.length>0&&await r({title:t(`secrets.useKeychainActions.keptTitle`),message:t(`secrets.useKeychainActions.keptMessage`,{deleted:n.deleted.length,kept:n.kept.length})})})}}}e();var Q=`view`;function bt(){let[e,t]=Le();return[e.get(Q)===`audit`?`audit`:`values`,n=>{let r=new URLSearchParams(e);n===`values`?r.delete(Q):r.set(Q,n),t(r,{replace:!0})}]}function xt(){let{t:e}=V(),t=fe({}),o=be({}),s=Ne({limit:500}),c=le({}),l=je(),d=P(),[f,p]=bt(),[m,h]=r(`all`),[g,_]=r(null),v=yt(()=>{t.refetch(),o.refetch(),s.refetch(),c.refetch()}),y=t.data?.keychain.state===`locked`,b=n(()=>(o.data??[]).filter(e=>e.usage===`orphan`).length,[o.data]),x=n(()=>t.data===void 0?[]:Qe({status:t.data,reset:c.data?.reset??null,pendingReentry:c.data?.pendingReentry.length??0,orphans:b}),[t.data,c.data,b]),S={reset:c.data?.reset??null,pendingReentry:c.data?.pendingReentry??[],busy:v.busy,onReset:()=>void v.reset(),onAcknowledgeReset:()=>void v.acknowledgeReset(),onDownload:()=>void v.download(),onRotate:()=>void v.rotate(),onShowOrphans:()=>{h(`orphan`),p(`values`)}},C=async t=>{try{_({entry:t,value:(await l.mutateAsync({ref:t.ref})).value}),o.refetch()}catch(t){await d({title:e(`admin.system.secrets.revealRefused`,`Reveal refused`),message:Fe(t),variant:`danger`})}},w=i(()=>_(null),[]);return a(H,{embedded:!0,icon:T,title:e(`admin.system.secrets.secrets`,`Secrets`),subtitle:e(`admin.system.secrets.passwordsTokensAndKeysEncrypted`,`Passwords, tokens and keys, encrypted in the hub keychain. Values leave the hub only through an audited reveal.`),children:[u(st,{notices:x,renderAction:e=>rt(e,S),renderDetail:e=>it(e,S)}),t.data!==void 0&&u(dt,{status:t.data,busy:v.busy,onDownload:S.onDownload,onRotate:S.onRotate,onPurge:()=>void v.purge()}),a(xe,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[a(Ee,{children:[u(R,{value:`values`,children:e(`admin.system.secrets.storedValues`,`Stored values`)}),u(R,{value:`audit`,children:e(`admin.system.secrets.audit`,`Audit`)})]}),u(z,{value:`values`,children:u(ht,{secrets:o.data,locked:y,filter:m,onFilterChange:h,onReveal:e=>void C(e),revealing:l.isPending,onDeleteOrphans:e=>void v.deleteOrphans(e),deleting:v.deleting})}),u(z,{value:`audit`,children:u(nt,{entries:s.data})})]}),u(pt,{revealed:g,onClose:w})]})}e();var St=[[`system`]];function $(e){return e.toFixed(6).replace(/0+$/,``).replace(/\.$/,``)}function Ct(){let{t:e}=V(),n=c(),i=Oe(),o=ke(),s=Ce(),[l,d]=r(``),[f,p]=r(``),[m,h]=r(null),g=i.data?.location??null;t(()=>{d(g===null?``:$(g.latitude)),p(g===null?``:$(g.longitude))},[g]);let _=async()=>{await n.invalidateQueries({queryKey:St})},y=async e=>{e.preventDefault();let t=Number(l),n=Number(f);if(l.trim()===``||f.trim()===``){h(`Enter both a latitude and a longitude, or press Clear.`);return}if(!Number.isFinite(t)||t<-90||t>90){h(`Latitude must be between -90 and 90 decimal degrees.`);return}if(!Number.isFinite(n)||n<-180||n>180){h(`Longitude must be between -180 and 180 decimal degrees.`);return}h(null),await o.mutateAsync({latitude:t,longitude:n}),await _()},b=async()=>{h(null),await o.mutateAsync(null),await _()},x=async()=>{h(null),await s.mutateAsync(),await _()},S=o.isPending||s.isPending||i.isLoading;return a(me,{className:`space-y-3`,children:[a(`div`,{className:`flex items-start justify-between gap-3`,children:[a(`div`,{className:`flex items-start gap-2`,children:[u(v,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),u(`div`,{children:u(`h3`,{className:`text-sm font-medium`,children:e(`settings.siteLocationCard.siteLocation`,`Site location`)})})]}),g===null?u(I,{variant:`warning`,children:e(`settings.siteLocationCard.notConfigured`,`Not configured`)}):u(I,{variant:g.source===`operator-set`?`success`:`info`,children:g.source===`operator-set`?e(`settings.siteLocationCard.setByYou`,`Set by you`):e(`settings.siteLocationCard.derivedFromIp`,`Derived from IP`)})]}),g?.label!==void 0&&g.label!==``?u(`p`,{className:`text-xs text-muted-foreground`,children:e(`settings.siteLocationCard.detectedNear`,{place:g.label})}):null,g===null&&i.data?.derivationAttemptedAt!==null?a(`p`,{className:`text-xs text-warning`,children:[e(`settings.siteLocationCard.automaticDetectionFromThePublic`,`Automatic detection from the public IP did not succeed`),i.data?.derivationError!==null&&i.data?.derivationError!==void 0?`: ${i.data.derivationError}`:`.`,` `,e(`settings.siteLocationCard.itIsNotRetriedOn`,`It is not retried on its own — enter the coordinates, or press Detect.`)]}):null,a(`form`,{className:`flex flex-wrap items-end gap-3`,onSubmit:y,children:[a(`label`,{className:`flex flex-col gap-1 text-xs`,children:[u(`span`,{className:`text-muted-foreground`,children:e(`settings.siteLocationCard.latitude`,`Latitude`)}),u(A,{className:`w-40`,value:l,inputMode:`decimal`,placeholder:`40.851800`,onChange:e=>d(e.target.value),"aria-label":e(`settings.siteLocationCard.latitude`,`Latitude`)})]}),a(`label`,{className:`flex flex-col gap-1 text-xs`,children:[u(`span`,{className:`text-muted-foreground`,children:e(`settings.siteLocationCard.longitude`,`Longitude`)}),u(A,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":e(`settings.siteLocationCard.longitude`,`Longitude`)})]}),u(E,{type:`submit`,disabled:S,children:e(`common.save`,`Save`)}),a(E,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[u(ae,{className:`h-3.5 w-3.5 mr-1`}),e(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),g===null?null:u(E,{type:`button`,variant:`ghost`,disabled:S,onClick:b,children:e(`settings.siteLocationCard.clear`,`Clear`)})]}),m===null?null:u(`p`,{className:`text-xs text-danger`,children:m}),u(`p`,{className:`text-xs text-muted-foreground`,children:e(`settings.siteLocationCard.wgs84DecimalDegreesDetectAsks`,`WGS84 decimal degrees. Detect asks a public geo-IP service once and will not overwrite a value you typed — clear it first.`)})]})}function wt(){let{t:e}=V(),{nodes:t,isLoading:n}=De(),r=t.find(e=>e.isHub&&e.isOnline),i=r?.addons.map(e=>e.addonId)??[];return a(H,{embedded:!0,children:[u(Ct,{}),n?u(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:e(`admin.system.settings.loadingHubTopology`,`Loading hub topology…`)}):r?i.length===0?u(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:e(`admin.system.settings.noAddonsInstalledOnThe`,`No addons installed on the hub yet.`)}):u(ze,{nodeId:r.id,addonIds:i,level:`global`}):a(`div`,{className:`flex flex-col items-center justify-center text-muted-foreground text-sm gap-2 py-12`,children:[u(b,{className:`h-8 w-8 opacity-30`}),u(`p`,{children:e(`admin.system.settings.noOnlineHubNodeFound`,`No online hub node found.`)}),u(`p`,{className:`text-xs`,children:e(`admin.system.settings.settingsWillAppearOnceThe`,`Settings will appear once the hub is reachable.`)})]})]})}function Tt(){let{t:e}=V(),t=Pe(`/system/settings`,{t:e,isAdmin:!0})??{icon:b,title:e(`system.systemNav`,`System`)};return u(Re,{icon:t.icon,title:t.title,defaultSection:`settings`,sectionsLabel:`${t.title} sections`,sections:[{id:`settings`,label:e(`system.system.settings`,`Settings`),content:u(wt,{})},{id:`secrets`,label:e(`system.system.secrets`,`Secrets`),content:u(xt,{}),ownedParams:[`view`]},{id:`capabilities`,label:e(`system.system.capabilities`,`Capabilities`),content:u(Ye,{})}]})}export{Tt as SystemPage};
|
|
1
|
+
import{$ as e,B as t,G as n,J as r,L as i,S as a,a as o,b as s,o as c,t as l,x as u}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEHpkaJP.js";import{$t as d,D as f,Ir as p,It as m,Nt as h,_i as g,ar as _,er as v,fi as y,ln as b,nr as x,on as S,ot as C,pi as w,pr as ee,un as te,vi as ne,wn as re,yi as ie,yn as ae}from"./player-overlays-DFTWiQ8-.js";import{t as T}from"./key-round-C9pPg55h.js";import{t as oe}from"./octagon-alert-BYNvsZ0Q.js";import{ur as se}from"./client-CqsEJzhO.js";import{$l as E,An as ce,Bn as D,Co as le,Dn as ue,En as O,Eo as de,Ft as k,Kl as A,Ln as fe,On as pe,Pn as me,Qn as he,So as ge,Tn as _e,To as ve,Ut as j,Vt as M,Wt as N,Xn as P,Zn as F,_o as ye,al as be,ar as I,bo as xe,cl as Se,dl as Ce,en as we,go as Te,jn as Ee,kn as De,mu as Oe,nn as ke,rn as L,su as R,tn as z,vo as Ae,wo as je,xo as Me,yo as Ne}from"./src-CE3hNyCx.js";import{t as B}from"./i18n-B-IeyHf7.js";import{t as V}from"./useTranslation-D3Is_4B6.js";import{C as Pe,D as Fe,Y as Ie,et as Le}from"./index-mBJW996X.js";import{t as Re}from"./AdminSectionedPage-Bb00eMTj.js";import{t as H}from"./AdminPage-BFQa1eDk.js";import{t as ze}from"./NodeAddonsSettingsPanel-kmgNnVID.js";import{t as Be}from"./AddonAssetIcon-CngGyUbH.js";e();var Ve={detection:`border-green-500`,detector:`border-green-500`,streaming:`border-blue-500`,decode:`border-blue-500`,decoder:`border-blue-500`,recording:`border-orange-500`,recorder:`border-orange-500`,transcoding:`border-purple-500`,transcoder:`border-purple-500`,restream:`border-cyan-500`,restreamer:`border-cyan-500`,storage:`border-yellow-500`,notification:`border-pink-500`,notifier:`border-pink-500`,faces:`border-indigo-500`},He={detection:`bg-green-500/5`,detector:`bg-green-500/5`,streaming:`bg-blue-500/5`,decode:`bg-blue-500/5`,decoder:`bg-blue-500/5`,recording:`bg-orange-500/5`,recorder:`bg-orange-500/5`,transcoding:`bg-purple-500/5`,transcoder:`bg-purple-500/5`,restream:`bg-cyan-500/5`,restreamer:`bg-cyan-500/5`,storage:`bg-yellow-500/5`,notification:`bg-pink-500/5`,notifier:`bg-pink-500/5`,faces:`bg-indigo-500/5`};function Ue({entry:e,actions:t}){let n=e.name.toLowerCase(),r=Ve[n]??`border-primary`,i=He[n]??`bg-primary/5`,o=e.providers.find(e=>e.active),s=t?.pendingCapability===e.name;return a(`div`,{className:`rounded-lg border-t-2 border border-border ${r} ${i} p-3 space-y-2`,children:[a(`div`,{className:`flex items-center justify-between gap-2`,children:[a(`span`,{className:`text-xs font-semibold text-foreground capitalize flex items-center gap-1.5`,children:[e.name,s&&u(_,{className:`h-3 w-3 animate-spin text-primary`})]}),u(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-medium ${e.mode===`singleton`?`bg-primary/10 text-primary`:`bg-info/10 text-info`}`,children:e.mode})]}),e.mode===`singleton`?u(We,{entry:e,actions:t,activeProvider:o,isPending:s}):u(Ge,{entry:e,actions:t,isPending:s})]})}function We({entry:e,actions:t,activeProvider:n,isPending:r}){let{t:i}=V();if(!t)return u(`div`,{children:n?a(`div`,{className:`flex items-center gap-1.5 text-[10px] text-foreground`,children:[u(y,{className:`h-3 w-3 text-green-400 shrink-0`}),u(`span`,{className:`font-medium`,children:n.addonName}),u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto`,children:`ACTIVE`})]}):u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:i(`addons.capabilityMap.noActiveProvider`,`No active provider`)})});if(e.providers.length===0)return u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:i(`addons.capabilityMap.noProviders`,`No providers`)});let o=`__inherit__`;return a(`div`,{className:`space-y-2`,children:[u(`div`,{className:`space-y-1`,children:e.providers.map(n=>{let i=n.active;return a(`button`,{type:`button`,disabled:r||i,onClick:()=>t.onSelectSingleton(e.name,n.addonId),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${i?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[u(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${i?`border-green-400 bg-green-400`:`border-border`}`}),u(`span`,{className:`font-medium truncate`,children:n.addonName}),i&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},n.addonId)})}),e.perNode&&e.perNode.length>0&&u(`div`,{className:`space-y-2 pt-1 border-t border-border/40`,children:e.perNode.map(n=>{let s=n.hasOverride&&n.resolvedActive?n.resolvedActive:o,c=[{value:o,label:n.resolvedActive?i(`addons.capabilityMap.inheritGlobalWith`,{provider:n.resolvedActive}):i(`addons.capabilityMap.inheritGlobal`)},...n.providers.map(e=>({value:e,label:e}))],l=r=>{r===o?t.onClearNodeSingleton(e.name,n.nodeId):t.onSelectNodeSingleton(e.name,n.nodeId,r)},d=r;return a(`div`,{className:`space-y-0.5`,children:[a(`div`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60 px-1.5`,children:[n.nodeId,n.hasOverride&&u(`span`,{className:`ml-1.5 rounded-full bg-primary/10 text-primary px-1 py-0.5 normal-case tracking-normal font-medium`,children:i(`common.override`)})]}),c.map(e=>{let t=s===e.value;return a(`button`,{type:`button`,disabled:d||t,onClick:()=>l(e.value),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${t?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[u(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${t?`border-green-400 bg-green-400`:`border-border`}`}),u(`span`,{className:`font-medium truncate`,children:e.label}),t&&e.value!==o&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},e.value)})]},n.nodeId)})})]})}function Ge({entry:e,actions:t,isPending:n}){let{t:r}=V();if(e.providers.length===0)return u(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:r(`addons.capabilityMap.noProviders`,`No providers`)});if(!t)return u(`div`,{className:`space-y-1`,children:e.providers.map(e=>a(`div`,{className:`flex items-center justify-between gap-2 text-[10px]`,children:[u(`span`,{className:`text-foreground-subtle`,children:e.addonName}),e.active&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium`,children:`ACTIVE`})]},e.addonId))});let i=e.providers.filter(e=>e.active).map(e=>e.addonId),o=(n,r)=>{let a=r?[...new Set([...i,n])]:i.filter(e=>e!==n);t.onToggleCollection(e.name,a)};return u(`div`,{className:`space-y-1`,children:e.providers.map(e=>a(`label`,{className:`flex items-center justify-between gap-2 text-[10px] rounded px-1.5 py-1 transition-colors ${n?`opacity-50`:`hover:bg-surface-hover cursor-pointer`}`,children:[a(`span`,{className:`flex items-center gap-1.5 min-w-0`,children:[u(`input`,{type:`checkbox`,checked:e.active,disabled:n,onChange:t=>o(e.addonId,t.target.checked),className:`h-3 w-3 accent-green-500 shrink-0`}),u(`span`,{className:`text-foreground truncate`,children:e.addonName})]}),e.active&&u(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium shrink-0`,children:`ACTIVE`})]},e.addonId))})}function U({capabilities:e,actions:t}){let{t:n}=V();return e.length===0?u(`div`,{className:`text-xs text-foreground-subtle text-center py-8`,children:n(`addons.capabilityMap.noCapabilitiesRegistered`,`No capabilities registered`)}):u(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3`,children:e.map(e=>u(Ue,{entry:e,actions:t},e.name))})}var Ke=[`capabilities`,`listCapabilities`];function qe(e){return e===`singleton`||e===`collection`}function W(e){let t=e.indexOf(`@`);return t===-1?B.t(`system.capabilities.providerHub`,{addonId:e}):`${e.slice(0,t)} (${e.slice(t+1)})`}function Je(e,t){return{name:e.name,mode:t,providers:e.providers.map(n=>({addonId:n,addonName:W(n),active:t===`singleton`?e.activeProvider===n:!e.disabledProviders.includes(n)})),...t===`singleton`&&e.perNode?{perNode:e.perNode}:{}}}function Ye(){let{t:e}=V(),t=C(),[i,s]=r(null),[c,f]=r(null),p=o({queryKey:Ke,queryFn:()=>t.trpcClient.capabilities.listCapabilities.query()}),m=n(()=>{let e=(p.data??[]).flatMap(e=>qe(e.mode)?[Je(e,e.mode)]:[]),t=e.filter(e=>e.mode===`singleton`).toSorted((e,t)=>e.name.localeCompare(t.name)),n=e.filter(e=>e.mode===`collection`).toSorted((e,t)=>e.name.localeCompare(t.name));return[...t,...n]},[p.data]),h=n(()=>m.filter(e=>e.mode===`singleton`),[m]),g=n(()=>m.filter(e=>e.mode===`collection`),[m]),_=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:n.capName,addonId:n.addonId})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToSet`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),v=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(e,t)=>{f({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToSetOnNode`,{cap:n.capName,node:n.nodeId,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),b=l({mutationFn:e=>t.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:n.capName,nodeId:n.nodeId})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToClearOnNode`,{cap:n.capName,node:n.nodeId,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),x=l({mutationFn:e=>t.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{s(e.capName),f(null)},onSuccess:async(t,n)=>{f({kind:`success`,message:e(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:n.capName,length:n.enabledAddonIds.length})}),await p.refetch()},onError:(t,n)=>{f({kind:`error`,message:e(`system.capabilities.failedToUpdate`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),S={onSelectSingleton:(e,t)=>_.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>v.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>b.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>x.mutate({capName:e,enabledAddonIds:t}),pendingCapability:i};return a(H,{embedded:!0,icon:d,title:e(`system.capabilities.capabilities`,`Capabilities`),subtitle:e(`system.capabilities.chooseWhichProviderIsActive`,`Choose which provider is active for each system capability. Singleton caps pick exactly one provider; collection caps enable a set.`),children:[c&&a(`div`,{className:`flex items-center gap-2 rounded-md border px-3 py-2 text-xs ${c.kind===`success`?`border-success/30 bg-success/10 text-success`:`border-danger/40 bg-danger/10 text-danger`}`,children:[c.kind===`success`?u(y,{className:`h-3.5 w-3.5 shrink-0`}):u(w,{className:`h-3.5 w-3.5 shrink-0`}),u(`span`,{children:c.message})]}),p.isLoading&&u(`div`,{className:`flex items-center justify-center py-16`,children:u(`div`,{className:`animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full`})}),p.isError&&!p.isLoading&&u(fe,{title:e(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:p.error instanceof Error?p.error.message:e(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void p.refetch()}),!p.isLoading&&!p.isError&&m.length===0&&u(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:e(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!p.isLoading&&!p.isError&&m.length>0&&a(`div`,{className:`space-y-6`,children:[h.length>0&&a(`section`,{className:`space-y-2`,children:[u(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:e(`system.capabilities.singletonPickOneProvider`,`Singleton — pick one provider`)}),u(U,{capabilities:h,actions:S})]}),g.length>0&&a(`section`,{className:`space-y-2`,children:[u(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:e(`system.capabilities.collectionEnableASet`,`Collection — enable a set`)}),u(U,{capabilities:g,actions:S})]})]})]})}var G=[`locked`,`reset`,`shares-backup`,`recovery-key`,`rotation-pending`,`orphans`],Xe={"key-missing":`helpers.keychainNotices.lockedKeyMissing`,"wrong-key":`helpers.keychainNotices.lockedWrongKey`,"key-file-unreadable":`helpers.keychainNotices.lockedKeyFileUnreadable`,"store-unavailable":`helpers.keychainNotices.lockedStoreUnavailable`,"not-initialized":`helpers.keychainNotices.lockedNotInitialized`,"decrypt-failed":`helpers.keychainNotices.lockedDecryptFailed`};function Ze(e){let t=Xe[e];return t===void 0?e:B.t(t)}function Qe({status:e,reset:t,pendingReentry:n,orphans:r}){let i=e.keychain.state===`locked`,a=e.keySource??e.configuredSource,o=[];return e.keychain.state===`locked`&&o.push({id:`locked`,tone:`danger`,title:B.t(`helpers.keychainNotices.locked`,{reason:Ze(e.keychain.reason)})}),t!==null&&t.acknowledgedAt===null&&o.push({id:`reset`,tone:`danger`,title:n>0?B.t(`helpers.keychainNotices.resetPending`,{count:n}):B.t(`helpers.keychainNotices.resetDone`)}),a.sharesBackupWithDatabase&&o.push({id:`shares-backup`,tone:`warning`,title:B.t(`helpers.keychainNotices.sharesBackup`)}),!i&&e.recoveryKeyDownloadedAt===null&&o.push({id:`recovery-key`,tone:`warning`,title:B.t(`helpers.keychainNotices.recoveryKey`)}),!i&&e.rotationPending&&o.push({id:`rotation-pending`,tone:`info`,title:B.t(`helpers.keychainNotices.rotationPending`)}),!i&&r>0&&o.push({id:`orphans`,tone:`info`,title:B.t(`helpers.keychainNotices.orphans`,{count:r})}),[...o].sort((e,t)=>G.indexOf(e.id)-G.indexOf(t.id))}var $e={dateStyle:`short`,timeStyle:`short`};function K(e){return e===null?`—`:new Date(e).toLocaleString(void 0,$e)}function q({value:e,copyValue:t,srLabel:n,maxWidthClass:r,className:i}){let o=t??e;return a(`span`,{className:R(`flex min-w-0 items-center gap-0.5`,r),children:[u(`span`,{className:R(`min-w-0 truncate font-mono`,i),title:o,children:e}),u(k,{value:o,srLabel:n,className:`h-6 shrink-0 px-1.5`})]})}e();var et=new Set([`reveal`,`download-recovery-key`,`rotate-master-key`,`reset`]);function tt(e){return[{key:`at`,header:e(`system.keychainAuditTable.colWhen`),render:e=>K(e.at)},{key:`action`,header:e(`system.keychainAuditTable.colAction`),render:e=>u(I,{variant:et.has(e.action)?`warning`:`default`,children:e.action})},{key:`actor`,header:e(`system.keychainAuditTable.colActor`),render:e=>u(`span`,{className:`font-mono`,children:e.actor})},{key:`ref`,header:e(`system.keychainAuditTable.colRef`),render:e=>e.ref===null?u(`span`,{className:`text-foreground-subtle`,children:`—`}):u(q,{value:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[22rem]`})},{key:`detail`,header:e(`system.keychainAuditTable.colDetail`),render:e=>u(`span`,{className:`text-foreground-muted`,children:e.detail??``})}]}function nt({entries:e}){let{t}=V(),[i,o]=r(0),s=n(()=>tt(t),[t]);if(e===void 0)return u(`p`,{className:`text-xs text-foreground-subtle`,children:t(`common.loading`,`Loading…`)});let c=Math.max(1,Math.ceil(e.length/25)),l=Math.min(i,c-1),d=l*25,f=e.slice(d,d+25);return a(`div`,{className:`space-y-2`,children:[u(j,{columns:s,rows:f,rowKey:e=>e.id,minWidthPx:760,emptyMessage:t(`secrets.keychainAuditTable.nothingHasBeenAuditedYet`,`Nothing has been audited yet.`)}),e.length>25&&a(`div`,{className:`flex flex-wrap items-center justify-between gap-2 text-[11px] text-foreground-subtle`,children:[u(`span`,{children:t(e.length>=500?`system.keychainAuditTable.rangeRecent`:`system.keychainAuditTable.range`,{from:d+1,to:d+f.length,total:e.length})}),a(`span`,{className:`inline-flex items-center gap-1`,children:[u(D,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:l===0,onClick:()=>o(l-1),children:u(ne,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),a(`span`,{className:`tabular-nums`,children:[l+1,` / `,c]}),u(D,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:l>=c-1,onClick:()=>o(l+1),children:u(g,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return u(D,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return u(D,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return u(D,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return u(D,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return u(D,{size:`sm`,variant:`outline`,onClick:t.onShowOrphans,children:B.t(`secrets.keychainNoticeContent.review`,`Review`)});case`shares-backup`:return null}}function it(e,t){switch(e){case`locked`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.noValueCanBeRead`,`No value can be read or stored. If the master key is lost for good, Reset archives every stored value and starts a new keychain; every secret field then reads “not set”.`)});case`reset`:return t.reset===null?null:u(at,{reset:t.reset,pending:t.pendingReentry});case`shares-backup`:return u(`p`,{children:u(Ie,{i18nKey:`secrets.keychainNoticeContent.backupKeyFile`,components:{code:u(`code`,{className:`font-mono`})}})});case`recovery-key`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.withoutACopyOfThe`,`Without a copy of the master key, the stored values cannot be recovered.`)});case`rotation-pending`:return u(`p`,{children:B.t(`secrets.keychainNoticeContent.theKeychainUnlockedWithA`,`The keychain unlocked with a previous key. Rotate to move onto the configured one.`)});case`orphans`:return null}}function at({reset:e,pending:t}){let{t:n}=V(),r=e.actor===`trigger-file`?n(`secrets.keychainNoticeContent.resetByTrigger`):n(`secrets.keychainNoticeContent.resetByAdmin`,{actor:e.actor});return a(`div`,{className:`space-y-1.5`,children:[u(`p`,{children:n(`secrets.keychainNoticeContent.resetDetail`,{when:K(e.at),by:r,archived:e.archived})}),t.length>0&&u(`ul`,{className:`max-h-40 space-y-0.5 overflow-y-auto rounded-md border border-border bg-background p-2 font-mono text-[11px] text-foreground`,children:t.map(e=>a(`li`,{className:`break-all`,children:[e.owner,` · `,e.scope,` · `,e.fieldPath]},e.ref))})]})}e();var ot=2,J={danger:{icon:oe,text:`text-danger`,border:`border-danger/40`},warning:{icon:h,text:`text-warning`,border:`border-warning/40`},info:{icon:ee,text:`text-info`,border:`border-border`}};function st({notices:e,renderAction:t,renderDetail:n}){let{t:i}=V(),[o,s]=r(!1),c=e[0];if(c===void 0)return null;let l=e.length>ot,d=l&&!o?e.slice(0,1):e,f=e.length-d.length;return a(`section`,{"aria-label":i(`secrets.keychainNotices.keychainNotices`,`Keychain notices`),className:R(`rounded-lg border bg-surface`,J[c.tone].border),children:[u(`ul`,{className:`divide-y divide-border`,children:d.map(e=>u(ct,{notice:e,action:t(e.id),detail:n(e.id)},e.id))}),l&&u(`div`,{className:`border-t border-border px-3 py-1`,children:a(D,{size:`sm`,variant:`ghost`,"aria-expanded":o,onClick:()=>s(e=>!e),children:[u(ie,{className:R(`h-3.5 w-3.5 transition-transform`,o&&`rotate-180`),"aria-hidden":!0}),o?i(`secrets.keychainNotices.showLess`,`Show less`):i(`secrets.keychainNotices.more`,`{{hidden}} more`,{hidden:f})]})})]})}function ct({notice:e,action:t,detail:n}){let{t:i}=V(),[o,s]=r(!1),c=J[e.tone],l=c.icon,d=n!=null,f=`keychain-notice-${e.id}`;return a(`li`,{className:`px-3 py-2`,children:[a(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-3`,children:[a(`p`,{className:`flex min-w-0 flex-1 items-start gap-2 text-xs text-foreground`,children:[u(l,{className:R(`mt-0.5 h-3.5 w-3.5 shrink-0`,c.text),"aria-hidden":!0}),u(`span`,{className:`min-w-0 break-words`,children:e.title})]}),a(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 pl-5 sm:pl-0`,children:[d&&u(D,{size:`sm`,variant:`ghost`,"aria-expanded":o,"aria-controls":f,onClick:()=>s(e=>!e),children:i(`secrets.keychainNotices.details`,`Details`)}),t]})]}),d&&o&&u(`div`,{id:f,className:`mt-2 pl-5 text-xs text-foreground-muted`,children:n})]})}var lt={"config-file":`Key file (config.yaml)`,"previous-config-file":`Previous key file`,platform:`OS keychain`,"default-file":`Default key file (data volume)`},ut=8;function dt({status:e,busy:t,onDownload:n,onRotate:r,onPurge:i}){let{t:o}=V(),s=e.keychain.state===`locked`,c=e.keySource??e.configuredSource;return u(M,{headingId:`keychain-status`,title:o(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:T,actions:a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[e.retiredWraps>0&&u(D,{size:`sm`,variant:`ghost`,disabled:t||s,onClick:i,children:o(`secrets.keychainStatusCard.purge`,{count:e.retiredWraps})}),u(D,{size:`sm`,variant:`outline`,disabled:t||s,onClick:r,children:o(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),u(D,{size:`sm`,variant:`outline`,disabled:t||s,onClick:n,children:o(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:a(`dl`,{className:`${f} grid grid-cols-1 gap-x-6 gap-y-3 sm:grid-cols-2 xl:grid-cols-4`,children:[a(Y,{label:o(`secrets.keychainStatusCard.state`,`State`),children:[s?a(I,{variant:`danger`,className:`gap-1`,children:[u(x,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.locked`,`Locked`)]}):a(I,{variant:`success`,className:`gap-1`,children:[u(S,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.unlocked`,`Unlocked`)]}),u(`span`,{className:`ml-2 text-foreground-subtle`,children:o(`common.stored`,{count:e.secretCount})})]}),a(Y,{label:o(`secrets.keychainStatusCard.keySource`,`Key source`),children:[u(`span`,{className:`block`,children:lt[c.kind]}),c.path!==void 0&&u(q,{value:c.path,srLabel:`key path`})]}),u(Y,{label:o(`secrets.keychainStatusCard.fingerprint`,`Fingerprint`),children:e.fingerprint===null?u(`span`,{className:`text-foreground-subtle`,children:`—`}):a(`span`,{className:`inline-flex items-center gap-0.5`,children:[u(`span`,{className:`font-mono`,title:e.fingerprint,children:e.fingerprint.slice(0,ut)}),u(k,{value:e.fingerprint,srLabel:`fingerprint`})]})}),u(Y,{label:o(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:e.recoveryKeyDownloadedAt===null?u(I,{variant:`warning`,children:o(`secrets.keychainStatusCard.notTaken`,`Not taken`)}):u(`span`,{children:o(`secrets.keychainStatusCard.taken`,{when:K(e.recoveryKeyDownloadedAt)})})})]})})}function Y({label:e,children:t}){return a(`div`,{className:`min-w-0 text-xs`,children:[u(`dt`,{className:`text-foreground-subtle`,children:e}),u(`dd`,{className:`mt-0.5 min-w-0 text-foreground`,children:t})]})}e();var ft=1e3;function pt({revealed:e,onClose:n}){let{t:i}=V(),[o,c]=r(A);t(()=>{if(e===null)return;let t=Date.now();c(A);let r=setTimeout(n,A),i=setInterval(()=>c(Math.max(0,A-(Date.now()-t))),ft);return()=>{clearTimeout(r),clearInterval(i)}},[e,n]);let l=Math.ceil(o/1e3);return u(_e,{open:e!==null,onOpenChange:e=>!e&&n(),children:u(ue,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&a(s,{children:[a(ce,{children:[u(Ee,{className:`break-all`,children:e.entry.fieldPath}),a(pe,{className:`break-all`,children:[e.entry.owner,` · `,e.entry.scope]})]}),u(O,{children:u(`pre`,{"data-testid":`revealed-value`,className:`whitespace-pre-wrap break-all rounded-md border border-border bg-background p-3 font-mono text-xs text-foreground`,children:e.value})}),a(De,{className:`flex-col items-stretch gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[u(`p`,{className:`text-[11px] text-foreground-subtle`,children:i(`secrets.revealDialog.recorded`,{seconds:l})}),a(`div`,{className:`flex justify-end gap-2`,children:[u(k,{value:e.value,label:i(`common.copy`,`Copy`),srLabel:`revealed value`}),u(D,{size:`sm`,variant:`outline`,onClick:n,children:i(`secrets.revealDialog.hide`,`Hide`)})]})]})]})})})}var X={orphan:{labelKey:`secrets.secretsTableState.usageOrphan`,variant:`warning`,hintKey:`secrets.secretsTableState.usageOrphanHint`,rank:0},unknown:{labelKey:`secrets.secretsTableState.usageUnknown`,variant:`default`,hintKey:`secrets.secretsTableState.usageUnknownHint`,rank:1},"in-use":{labelKey:`secrets.secretsTableState.usageInUse`,variant:`success`,hintKey:`secrets.secretsTableState.usageInUseHint`,rank:2}},mt=[{id:`all`,labelKey:`common.all`},{id:`in-use`,labelKey:`secrets.secretsTableState.usageInUse`},{id:`orphan`,labelKey:`secrets.secretsTableState.filterOrphans`},{id:`unknown`,labelKey:`secrets.secretsTableState.usageUnknown`}],Z=`system`;function ht(e){let{t}=V(),{secrets:n,filter:r,onFilterChange:i,onDeleteOrphans:o,deleting:s,locked:c}=e;if(n===void 0)return u(`p`,{className:`text-xs text-foreground-subtle`,children:t(`common.loading`,`Loading…`)});let l=e=>e===`all`?n.length:n.filter(t=>t.usage===e).length,d=n.filter(e=>e.usage===`orphan`).map(e=>e.ref),f=r===`all`?n:n.filter(e=>e.usage===r);return a(`div`,{className:`space-y-2`,children:[a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[u(`div`,{className:`flex flex-wrap gap-1`,role:`group`,"aria-label":t(`secrets.secretsTable.filterByUsage`,`Filter by usage`),children:mt.map(e=>a(D,{size:`sm`,variant:r===e.id?`secondary`:`ghost`,"aria-pressed":r===e.id,className:r===e.id?`ring-1 ring-border`:void 0,onClick:()=>i(e.id),children:[t(e.labelKey),u(`span`,{className:`text-foreground-subtle tabular-nums`,children:l(e.id)})]},e.id))}),d.length>0&&a(D,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:s||c,onClick:()=>o(d),children:[u(m,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),t(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),u(j,{columns:_t(e),rows:f,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:N,defaultSort:{columnKey:`owner`,dir:`asc`},emptyMessage:n.length===0?t(`secrets.secretsTable.noValueIsStoredIn`,`No value is stored in the keychain yet.`):t(`secrets.secretsTable.noStoredValueMatchesThis`,`No stored value matches this filter.`)})]})}function gt({owner:e}){let{t}=V();return a(`span`,{className:`flex items-center gap-2`,children:[u(Be,{addonId:e,fallback:e===Z?te:re,tileClassName:`bg-surface-hover text-foreground-subtle`,size:`sm`}),u(`span`,{className:`font-medium`,children:e===Z?t(`secrets.secretsTable.hubSystem`,`Hub (system)`):e})]})}function _t({locked:e,onReveal:t,revealing:n}){return[{key:`owner`,header:B.t(`secrets.secretsTable.owner`,`Owner`),render:e=>u(gt,{owner:e.owner}),sortValue:e=>e.owner},{key:`scope`,header:B.t(`secrets.secretsTable.scope`,`Scope`),render:e=>u(`span`,{className:`block max-w-[11rem] truncate font-mono`,title:e.scope,children:e.scope}),sortValue:e=>e.scope},{key:`field`,header:B.t(`secrets.secretsTable.field`,`Field`),render:e=>u(q,{value:e.fieldPath,copyValue:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[16rem]`}),sortValue:e=>e.fieldPath},{key:`updated`,header:B.t(`secrets.secretsTable.updated`,`Updated`),render:e=>K(e.updatedAt),sortValue:e=>e.updatedAt},{key:`last-read`,header:B.t(`secrets.secretsTable.lastRead`,`Last read`),render:e=>K(e.lastReadAt),sortValue:e=>e.lastReadAt},{key:`status`,header:B.t(`secrets.secretsTable.status`,`Status`),render:e=>u(I,{variant:X[e.usage].variant,title:B.t(X[e.usage].hintKey),children:B.t(X[e.usage].labelKey)}),sortValue:e=>X[e.usage].rank},{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:r=>a(D,{size:`sm`,variant:`ghost`,disabled:e||n,"aria-label":B.t(`secrets.secretsTable.reveal`,`Reveal {{fieldPath}}`,{fieldPath:r.fieldPath}),title:e?B.t(`secrets.secretsTable.theKeychainIsLocked`,`The keychain is locked`):B.t(`secrets.secretsTable.revealAudited`,`Reveal (audited)`),onClick:()=>t(r),children:[u(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),B.t(`secrets.secretsTable.reveal2`,`Reveal`)]})}]}function vt(e){return e instanceof Error?e.message:String(e)}function yt(e){let{t}=V(),n=F(),r=P(),i=he(),a=Ae(),o=ve(),s=Me(),c=ge(),l=Te(),u=ye(),d=async(t,n)=>{try{await n()}catch(e){await r({title:t,message:vt(e),variant:`danger`})}e()};return{busy:a.isPending||o.isPending||s.isPending||c.isPending,deleting:u.isPending,download:async()=>{await n({title:t(`secrets.useKeychainActions.downloadTitle`),message:t(`secrets.useKeychainActions.downloadMessage`),confirmLabel:t(`secrets.useKeychainActions.downloadConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.downloadRefused`),async()=>{let e=await a.mutateAsync({});await i({title:t(`secrets.useKeychainActions.recoveryTitle`,{fingerprint:e.fingerprint}),message:t(`secrets.useKeychainActions.recoveryMessage`),defaultValue:e.key,readOnly:!0,confirmLabel:t(`secrets.useKeychainActions.recoveryDone`)})})},rotate:async()=>{await n({title:t(`secrets.useKeychainActions.rotateTitle`),message:t(`secrets.useKeychainActions.rotateMessage`),confirmLabel:t(`secrets.useKeychainActions.rotateConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.rotateRefused`),async()=>{let e=await o.mutateAsync({});await r({title:t(`secrets.useKeychainActions.rotatedTitle`),message:t(`secrets.useKeychainActions.rotatedMessage`,{fingerprint:e.fingerprint})})})},purge:async()=>{await n({title:t(`secrets.useKeychainActions.purgeTitle`),message:t(`secrets.useKeychainActions.purgeMessage`),confirmLabel:t(`secrets.useKeychainActions.purgeConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.purgeRefused`),async()=>{await s.mutateAsync({})})},reset:async()=>{await i({title:t(`secrets.useKeychainActions.resetTitle`),message:t(`secrets.useKeychainActions.resetMessage`,{confirmation:`RESET KEYCHAIN`}),confirmLabel:t(`secrets.useKeychainActions.resetConfirm`),validate:e=>e===`RESET KEYCHAIN`?null:t(`secrets.useKeychainActions.resetMismatch`)})===`RESET KEYCHAIN`&&await d(t(`secrets.useKeychainActions.resetRefused`),async()=>{await c.mutateAsync({confirm:se})})},acknowledgeReset:async()=>{await d(t(`secrets.useKeychainActions.dismissFailed`),async()=>{await l.mutateAsync({})})},deleteOrphans:async e=>{await n({title:t(`secrets.useKeychainActions.orphansTitle`,{count:e.length}),message:t(`secrets.useKeychainActions.orphansMessage`),confirmLabel:t(`secrets.useKeychainActions.orphansConfirm`),variant:`danger`})&&await d(t(`secrets.useKeychainActions.orphansRefused`),async()=>{let n=await u.mutateAsync({refs:[...e]});n.kept.length>0&&await r({title:t(`secrets.useKeychainActions.keptTitle`),message:t(`secrets.useKeychainActions.keptMessage`,{deleted:n.deleted.length,kept:n.kept.length})})})}}}e();var Q=`view`;function bt(){let[e,t]=Le();return[e.get(Q)===`audit`?`audit`:`values`,n=>{let r=new URLSearchParams(e);n===`values`?r.delete(Q):r.set(Q,n),t(r,{replace:!0})}]}function xt(){let{t:e}=V(),t=de({}),o=xe({}),s=Ne({limit:500}),c=le({}),l=je(),d=P(),[f,p]=bt(),[m,h]=r(`all`),[g,_]=r(null),v=yt(()=>{t.refetch(),o.refetch(),s.refetch(),c.refetch()}),y=t.data?.keychain.state===`locked`,b=n(()=>(o.data??[]).filter(e=>e.usage===`orphan`).length,[o.data]),x=n(()=>t.data===void 0?[]:Qe({status:t.data,reset:c.data?.reset??null,pendingReentry:c.data?.pendingReentry.length??0,orphans:b}),[t.data,c.data,b]),S={reset:c.data?.reset??null,pendingReentry:c.data?.pendingReentry??[],busy:v.busy,onReset:()=>void v.reset(),onAcknowledgeReset:()=>void v.acknowledgeReset(),onDownload:()=>void v.download(),onRotate:()=>void v.rotate(),onShowOrphans:()=>{h(`orphan`),p(`values`)}},C=async t=>{try{_({entry:t,value:(await l.mutateAsync({ref:t.ref})).value}),o.refetch()}catch(t){await d({title:e(`admin.system.secrets.revealRefused`,`Reveal refused`),message:Fe(t),variant:`danger`})}},w=i(()=>_(null),[]);return a(H,{embedded:!0,icon:T,title:e(`admin.system.secrets.secrets`,`Secrets`),subtitle:e(`admin.system.secrets.passwordsTokensAndKeysEncrypted`,`Passwords, tokens and keys, encrypted in the hub keychain. Values leave the hub only through an audited reveal.`),children:[u(st,{notices:x,renderAction:e=>rt(e,S),renderDetail:e=>it(e,S)}),t.data!==void 0&&u(dt,{status:t.data,busy:v.busy,onDownload:S.onDownload,onRotate:S.onRotate,onPurge:()=>void v.purge()}),a(we,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[a(ke,{children:[u(L,{value:`values`,children:e(`admin.system.secrets.storedValues`,`Stored values`)}),u(L,{value:`audit`,children:e(`admin.system.secrets.audit`,`Audit`)})]}),u(z,{value:`values`,children:u(ht,{secrets:o.data,locked:y,filter:m,onFilterChange:h,onReveal:e=>void C(e),revealing:l.isPending,onDeleteOrphans:e=>void v.deleteOrphans(e),deleting:v.deleting})}),u(z,{value:`audit`,children:u(nt,{entries:s.data})})]}),u(pt,{revealed:g,onClose:w})]})}e();var St=[[`system`]];function $(e){return e.toFixed(6).replace(/0+$/,``).replace(/\.$/,``)}function Ct(){let{t:e}=V(),n=c(),i=Se(),o=Ce(),s=be(),[l,d]=r(``),[f,p]=r(``),[m,h]=r(null),g=i.data?.location??null;t(()=>{d(g===null?``:$(g.latitude)),p(g===null?``:$(g.longitude))},[g]);let _=async()=>{await n.invalidateQueries({queryKey:St})},y=async e=>{e.preventDefault();let t=Number(l),n=Number(f);if(l.trim()===``||f.trim()===``){h(`Enter both a latitude and a longitude, or press Clear.`);return}if(!Number.isFinite(t)||t<-90||t>90){h(`Latitude must be between -90 and 90 decimal degrees.`);return}if(!Number.isFinite(n)||n<-180||n>180){h(`Longitude must be between -180 and 180 decimal degrees.`);return}h(null),await o.mutateAsync({latitude:t,longitude:n}),await _()},b=async()=>{h(null),await o.mutateAsync(null),await _()},x=async()=>{h(null),await s.mutateAsync(),await _()},S=o.isPending||s.isPending||i.isLoading;return a(me,{className:`space-y-3`,children:[a(`div`,{className:`flex items-start justify-between gap-3`,children:[a(`div`,{className:`flex items-start gap-2`,children:[u(v,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),u(`div`,{children:u(`h3`,{className:`text-sm font-medium`,children:e(`settings.siteLocationCard.siteLocation`,`Site location`)})})]}),g===null?u(I,{variant:`warning`,children:e(`settings.siteLocationCard.notConfigured`,`Not configured`)}):u(I,{variant:g.source===`operator-set`?`success`:`info`,children:g.source===`operator-set`?e(`settings.siteLocationCard.setByYou`,`Set by you`):e(`settings.siteLocationCard.derivedFromIp`,`Derived from IP`)})]}),g?.label!==void 0&&g.label!==``?u(`p`,{className:`text-xs text-muted-foreground`,children:e(`settings.siteLocationCard.detectedNear`,{place:g.label})}):null,g===null&&i.data?.derivationAttemptedAt!==null?a(`p`,{className:`text-xs text-warning`,children:[e(`settings.siteLocationCard.automaticDetectionFromThePublic`,`Automatic detection from the public IP did not succeed`),i.data?.derivationError!==null&&i.data?.derivationError!==void 0?`: ${i.data.derivationError}`:`.`,` `,e(`settings.siteLocationCard.itIsNotRetriedOn`,`It is not retried on its own — enter the coordinates, or press Detect.`)]}):null,a(`form`,{className:`flex flex-wrap items-end gap-3`,onSubmit:y,children:[a(`label`,{className:`flex flex-col gap-1 text-xs`,children:[u(`span`,{className:`text-muted-foreground`,children:e(`settings.siteLocationCard.latitude`,`Latitude`)}),u(E,{className:`w-40`,value:l,inputMode:`decimal`,placeholder:`40.851800`,onChange:e=>d(e.target.value),"aria-label":e(`settings.siteLocationCard.latitude`,`Latitude`)})]}),a(`label`,{className:`flex flex-col gap-1 text-xs`,children:[u(`span`,{className:`text-muted-foreground`,children:e(`settings.siteLocationCard.longitude`,`Longitude`)}),u(E,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":e(`settings.siteLocationCard.longitude`,`Longitude`)})]}),u(D,{type:`submit`,disabled:S,children:e(`common.save`,`Save`)}),a(D,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[u(ae,{className:`h-3.5 w-3.5 mr-1`}),e(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),g===null?null:u(D,{type:`button`,variant:`ghost`,disabled:S,onClick:b,children:e(`settings.siteLocationCard.clear`,`Clear`)})]}),m===null?null:u(`p`,{className:`text-xs text-danger`,children:m}),u(`p`,{className:`text-xs text-muted-foreground`,children:e(`settings.siteLocationCard.wgs84DecimalDegreesDetectAsks`,`WGS84 decimal degrees. Detect asks a public geo-IP service once and will not overwrite a value you typed — clear it first.`)})]})}function wt(){let{t:e}=V(),{nodes:t,isLoading:n}=Oe(),r=t.find(e=>e.isHub&&e.isOnline),i=r?.addons.map(e=>e.addonId)??[];return a(H,{embedded:!0,children:[u(Ct,{}),n?u(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:e(`admin.system.settings.loadingHubTopology`,`Loading hub topology…`)}):r?i.length===0?u(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:e(`admin.system.settings.noAddonsInstalledOnThe`,`No addons installed on the hub yet.`)}):u(ze,{nodeId:r.id,addonIds:i,level:`global`}):a(`div`,{className:`flex flex-col items-center justify-center text-muted-foreground text-sm gap-2 py-12`,children:[u(b,{className:`h-8 w-8 opacity-30`}),u(`p`,{children:e(`admin.system.settings.noOnlineHubNodeFound`,`No online hub node found.`)}),u(`p`,{className:`text-xs`,children:e(`admin.system.settings.settingsWillAppearOnceThe`,`Settings will appear once the hub is reachable.`)})]})]})}function Tt(){let{t:e}=V(),t=Pe(`/system/settings`,{t:e,isAdmin:!0})??{icon:b,title:e(`system.systemNav`,`System`)};return u(Re,{icon:t.icon,title:t.title,defaultSection:`settings`,sectionsLabel:`${t.title} sections`,sections:[{id:`settings`,label:e(`system.system.settings`,`Settings`),content:u(wt,{})},{id:`secrets`,label:e(`system.system.secrets`,`Secrets`),content:u(xt,{}),ownedParams:[`view`]},{id:`capabilities`,label:e(`system.system.capabilities`,`Capabilities`),content:u(Ye,{})}]})}export{Tt as SystemPage};
|