@camstack/addon-admin-ui 1.2.472 → 1.2.474
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-BoV-s8vY.js → AddonAssetIcon-DNTjc2uq.js} +1 -1
- package/dist/assets/Addons-CPaW6tLw.js +4 -0
- package/dist/assets/{AdminPage-DsAJhnoH.js → AdminPage-B4QlIiKh.js} +1 -1
- package/dist/assets/{AdminSectionedPage-DJx7aRbA.js → AdminSectionedPage-BIoU14zn.js} +1 -1
- package/dist/assets/AiProfiles-FpbSg3kP.js +3 -0
- package/dist/assets/{BrokerForm-B3-e-xSz.js → BrokerForm-CU4X3nL7.js} +1 -1
- package/dist/assets/Build-C2qKCizt.js +40 -0
- package/dist/assets/Calendars-BRTmlFIt.js +1 -0
- package/dist/assets/{Cluster-CES248-c.js → Cluster-BvxOiIZ7.js} +1 -1
- package/dist/assets/CompositionCreateForm-DCUy3waQ.js +1 -0
- package/dist/assets/{CompositionEditorPage-CBBOInEt.js → CompositionEditorPage-syg6YTJF.js} +1 -1
- package/dist/assets/Data-VG64mGmK.js +2 -0
- package/dist/assets/DeviceDetail-tZevLHDV.js +2 -0
- package/dist/assets/{DeviceDoActionFields-C9A5Vund.js → DeviceDoActionFields-BmEM1vFn.js} +1 -1
- package/dist/assets/{Devices-BDcBpfdH.js → Devices-B-b5cUYn.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-kQQSKYcm.js → EmbedPlayerPage-CI3OOtRg.js} +1 -1
- package/dist/assets/HelperWizard-4637ctxc.js +2 -0
- package/dist/assets/History-BJcol9mz.js +1 -0
- package/dist/assets/Identity-CjEfAbi1.js +1 -0
- package/dist/assets/IntegrationDetail-DLncDXox.js +1 -0
- package/dist/assets/{IntegrationHub-CDk7OQ80.js → IntegrationHub-B1soAFk9.js} +1 -1
- package/dist/assets/Integrations-DtQc1eDp.js +1 -0
- package/dist/assets/Integrations-xxkUIJ67.js +1 -0
- package/dist/assets/{Library-jAJ1leN_.js → Library-DbHcY62a.js} +1 -1
- package/dist/assets/Locations-CfYQkG2R.js +3 -0
- package/dist/assets/{Logs-CSouKCsq.js → Logs-CMYLVX21.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-DOTEtd0S.js → MaskShapeCanvas-BnMDm4ev.js} +1 -1
- package/dist/assets/{MotionZonesSettings-CvKLnfMs.js → MotionZonesSettings-DKqDt4OB.js} +1 -1
- package/dist/assets/{MyAccess-Dx2keRYZ.js → MyAccess-CjUd-G8J.js} +1 -1
- package/dist/assets/{Network-DqeiKBG_.js → Network-Dudx2Fcg.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-Bo6JkasG.js → NodeAddonsSettingsPanel-9_q0f4bE.js} +1 -1
- package/dist/assets/Notifications-DE5Wtais.js +1 -0
- package/dist/assets/{Pipeline-B8BnTTB6.js → Pipeline-r8TFI-Fa.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-B8RDIhLI.js → PrivacyMaskSettings-DZ2mewnu.js} +1 -1
- package/dist/assets/Recordings-BrpMcrZw.js +1 -0
- package/dist/assets/{ScanNetworkModal-D1789toC.js → ScanNetworkModal-DhahS87x.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-CidMFB_6.js → SceneMonitorEditor-CH7F9rZo.js} +1 -1
- package/dist/assets/SessionsList-BbD9LSdf.js +2 -0
- package/dist/assets/{Showroom-g9Vrk7ey.js → Showroom-BX1LrKmF.js} +1 -1
- package/dist/assets/{System-BFOcIYk6.js → System-CvErxLx3.js} +1 -1
- package/dist/assets/{Terminal-Dqvq98CQ.js → Terminal-COEKXIAj.js} +3 -3
- package/dist/assets/{Viewer-B6THeol3.js → Viewer-BW9JCbu_.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-EdjPwsFV.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-B4AOEb1R.js} +1 -1
- package/dist/assets/{addon-icons-context-BiqHN3N3.js → addon-icons-context-Bus8wGvh.js} +1 -1
- package/dist/assets/{archive-CnhS48Wh.js → archive-BTmhmQQp.js} +1 -1
- package/dist/assets/{assignment-candidates-BuyOLzEY.js → assignment-candidates-C4DL_rSh.js} +1 -1
- package/dist/assets/{authed-media-CIJCq1KJ.js → authed-media-C8FW8mvx.js} +1 -1
- package/dist/assets/{bell-off-7jyxJXpT.js → bell-off-DsAerV0u.js} +1 -1
- package/dist/assets/{board-model-BtdRuNBI.js → board-model-CnpzmN9f.js} +1 -1
- package/dist/assets/{boxes-BA97gZyJ.js → boxes-DT6bkxUA.js} +1 -1
- package/dist/assets/circle-slash-BFwh1Zbg.js +1 -0
- package/dist/assets/client-BbPYrWg7.js +358 -0
- package/dist/assets/{cloud-upload-qezQXv3c.js → cloud-upload-iGrXLaxX.js} +1 -1
- package/dist/assets/crop-FX76GBoF.js +1 -0
- package/dist/assets/{device-integration-icon-B4EZcZfv.js → device-integration-icon-XVdZ9pIS.js} +1 -1
- package/dist/assets/device-picker-model-B5MjkWnS.js +1 -0
- package/dist/assets/{dist-BlRomFG_.js → dist-Bd_kB5yG.js} +1 -1
- package/dist/assets/dist-D6Fj77pb.js +358 -0
- package/dist/assets/{eraser-DLPQtKgN.js → eraser-L4lKjV-e.js} +1 -1
- package/dist/assets/{format-BYDOzxSv.js → format-BTMQLjGl.js} +1 -1
- package/dist/assets/{hard-drive-download-g_5xAcFq.js → hard-drive-download-cfcxCkzE.js} +1 -1
- package/dist/assets/{hostInit-BDvZ4twh.js → hostInit-BBq0iCeL.js} +1 -1
- package/dist/assets/{i18n-D3CF2V_j.js → i18n-BO6gCPcC.js} +1 -1
- package/dist/assets/{icons-PobQxRhs.js → icons-Cv_Dcjty.js} +1 -1
- package/dist/assets/{index-Cv22-mxY.js → index-C8XwyZGE.js} +3 -3
- package/dist/assets/{key-C9NMIy5y.js → key-e3_N15fG.js} +1 -1
- package/dist/assets/{key-round-CaHb89Wi.js → key-round-x0Ig1rd2.js} +1 -1
- package/dist/assets/{layers-Avi8-PfM.js → layers-T4HoHbdn.js} +1 -1
- package/dist/assets/{linked-devices-model-DgyEbI0V.js → linked-devices-model-CObOrxIk.js} +1 -1
- package/dist/assets/{list-ordered-6-NGRbR7.js → list-ordered-I4dBVzRf.js} +1 -1
- package/dist/assets/{location-owned-usage-BbuferaC.js → location-owned-usage-D17U3uzz.js} +1 -1
- package/dist/assets/{log-in-D2R9cXBI.js → log-in-B1D0wNrs.js} +1 -1
- package/dist/assets/{memory-stick-ev8VFA2q.js → memory-stick-DYS3v1CU.js} +1 -1
- package/dist/assets/{message-square-plus-C0P6xmPe.js → message-square-plus-D64e2l9L.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-3ff2e228.js → mf-entry-bootstrap-0-c6a36508.js} +2 -2
- package/dist/assets/{mic-off-BdFkx2wJ.js → mic-off-hTqpFTxe.js} +1 -1
- package/dist/assets/{monitor-off-DUZRNTFt.js → monitor-off-Bj-JQM7b.js} +1 -1
- package/dist/assets/{monitor-smartphone-CsrrNdMJ.js → monitor-smartphone-CyTSF3mW.js} +1 -1
- package/dist/assets/mount-B5MjkWnS.js +1 -0
- package/dist/assets/{player-overlays-C6LCgH1T.js → player-overlays-CvKnZb5M.js} +1 -1
- package/dist/assets/{recycle-C3C83uwv.js → recycle-BLx8Nd-6.js} +1 -1
- package/dist/assets/remoteEntry-DBUvkI6n.js +1 -0
- package/dist/assets/{scan-eye-D2LQj-_4.js → scan-eye-CrOhuNWQ.js} +1 -1
- package/dist/assets/{scissors-DTz32yJa.js → scissors-C6HYvaxr.js} +1 -1
- package/dist/assets/{search-x-BQtbshQu.js → search-x-C8eiZDQW.js} +1 -1
- package/dist/assets/{send-BfSwFs7e.js → send-CNzJmniJ.js} +1 -1
- package/dist/assets/{settings-2-DJqkusF5.js → settings-2-Ccb0AMXU.js} +1 -1
- package/dist/assets/{speaker-D0AxWmRG.js → speaker-BsE4hqmg.js} +1 -1
- package/dist/assets/src-DKc14e9G.js +67 -0
- package/dist/assets/step-inspector-model-BeIQx3rW.js +1 -0
- package/dist/assets/{timer-reset-DVs9TXU7.js → timer-reset-Tun-zcxs.js} +1 -1
- package/dist/assets/{ungroup-vjygAxAO.js → ungroup-BdxY8QDj.js} +1 -1
- package/dist/assets/{unlink-VhqcHI2O.js → unlink-BVODHZoC.js} +1 -1
- package/dist/assets/{usb-CTNmHXln.js → usb-i2JzfEjl.js} +1 -1
- package/dist/assets/{use-scenes-feed-DBEhAxap.js → use-scenes-feed-CUQxwk-v.js} +1 -1
- package/dist/assets/{use-stationary-objects-BO1fOyUY.js → use-stationary-objects-Cqmb4Ymg.js} +1 -1
- package/dist/assets/useEventInvalidation-B5MjkWnS.js +1 -0
- package/dist/assets/{useNodeUrlSelection-qvARJSiD.js → useNodeUrlSelection-rnUQLTfb.js} +1 -1
- package/dist/assets/user-round-BkFCDGbj.js +1 -0
- package/dist/assets/{user-x-BZF64XMi.js → user-x-CIq05NC_.js} +1 -1
- package/dist/assets/{video-BDVDsrHB.js → video-CJw8Jnle.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-XXht_Mtf.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BWKP-Fxc.js} +2 -2
- package/dist/index.html +9 -9
- package/dist/server/addon.js +447 -11
- package/package.json +1 -1
- package/dist/assets/Addons-DLTlJq7l.js +0 -4
- package/dist/assets/AiProfiles-B8qFPcaJ.js +0 -3
- package/dist/assets/Build-LEBDM041.js +0 -40
- package/dist/assets/Calendars-BFKf7hvl.js +0 -1
- package/dist/assets/CompositionCreateForm-CZcZeaFU.js +0 -1
- package/dist/assets/Data-CGHht6N-.js +0 -2
- package/dist/assets/DeviceDetail-DYRNyiuG.js +0 -2
- package/dist/assets/History-DHqYgtT_.js +0 -1
- package/dist/assets/Identity-2aB-bcpG.js +0 -1
- package/dist/assets/IntegrationDetail-CHeCYf51.js +0 -1
- package/dist/assets/Integrations-CLdAR_bC.js +0 -1
- package/dist/assets/Integrations-DtA-SgPz.js +0 -1
- package/dist/assets/Locations-D_Y_LS__.js +0 -3
- package/dist/assets/Notifications-BdRSwtaZ.js +0 -1
- package/dist/assets/Recordings-_9tze7ES.js +0 -1
- package/dist/assets/SessionsList-BDFoAqB4.js +0 -2
- package/dist/assets/circle-slash-nVYwXt7M.js +0 -1
- package/dist/assets/client-DCH-eKE_.js +0 -358
- package/dist/assets/crop-CFXeH_mC.js +0 -1
- package/dist/assets/device-picker-model-C_qELDKl.js +0 -1
- package/dist/assets/dist-CMwJjIGP.js +0 -358
- package/dist/assets/event-targets-DO8Gz77i.js +0 -2
- package/dist/assets/mount-C_qELDKl.js +0 -1
- package/dist/assets/remoteEntry-DY95P5t1.js +0 -1
- package/dist/assets/src-V3rq3t7i.js +0 -67
- package/dist/assets/step-inspector-model-BwAjPOgf.js +0 -1
- package/dist/assets/useEventInvalidation-C_qELDKl.js +0 -1
- package/dist/assets/user-round-CPpARWUk.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{D as d,It as f,Nt as p,Rr as m,Tn as h,bi as g,bn as _,dn as v,en as y,hi as b,mi as x,mr as S,or as C,ot as w,rr as ee,sn as te,tr as ne,un as T,xi as re,yi as ie}from"./player-overlays-C6LCgH1T.js";import{Yr as ae}from"./client-DCH-eKE_.js";import{i as oe}from"./video-BDVDsrHB.js";import{t as E}from"./key-round-CaHb89Wi.js";import{Bn as se,Cn as ce,Cs as le,Hr as ue,Rn as de,Sn as D,Ss as fe,Tr as pe,Ur as me,Uu as O,Vn as k,Vr as A,Wr as j,Xu as M,Zr as N,_r as he,_s as ge,bn as _e,br as P,bs as F,dd as I,dr as ve,fr as ye,fu as be,gr as xe,gs as Se,hr as Ce,hs as we,id as L,lu as Te,mn as R,mr as Ee,ms as De,ou as Oe,pr as ke,vs as Ae,ws as je,xs as Me,ys as Ne,zn as z}from"./src-V3rq3t7i.js";import{t as B}from"./i18n-D3CF2V_j.js";import{t as V}from"./useTranslation-D3Is_4B6.js";import{T as Pe,lr as Fe,mr as Ie,x as Le}from"./index-Cv22-mxY.js";import{t as Re}from"./AdminSectionedPage-DJx7aRbA.js";import{t as H}from"./AdminPage-DsAJhnoH.js";import{t as ze}from"./NodeAddonsSettingsPanel-Bo6JkasG.js";import{t as Be}from"./AddonAssetIcon-BoV-s8vY.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(C,{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(x,{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 W=[`capabilities`,`listCapabilities`];function Ke(e){return e===`singleton`||e===`collection`}function qe(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:qe(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=w(),[i,s]=r(null),[c,d]=r(null),f=o({queryKey:W,queryFn:()=>t.trpcClient.capabilities.listCapabilities.query()}),p=n(()=>{let e=(f.data??[]).flatMap(e=>Ke(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]},[f.data]),m=n(()=>p.filter(e=>e.mode===`singleton`),[p]),h=n(()=>p.filter(e=>e.mode===`collection`),[p]),g=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:n.capName,addonId:n.addonId})}),await f.refetch()},onError:(t,n)=>{d({kind:`error`,message:e(`system.capabilities.failedToSet`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),_=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await f.refetch()},onError:(t,n)=>{d({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)}),v=l({mutationFn:e=>t.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:n.capName,nodeId:n.nodeId})}),await f.refetch()},onError:(t,n)=>{d({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)}),S=l({mutationFn:e=>t.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:n.capName,length:n.enabledAddonIds.length})}),await f.refetch()},onError:(t,n)=>{d({kind:`error`,message:e(`system.capabilities.failedToUpdate`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),C={onSelectSingleton:(e,t)=>g.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>_.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>v.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>S.mutate({capName:e,enabledAddonIds:t}),pendingCapability:i};return a(H,{embedded:!0,icon:y,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(x,{className:`h-3.5 w-3.5 shrink-0`}):u(b,{className:`h-3.5 w-3.5 shrink-0`}),u(`span`,{children:c.message})]}),f.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`})}),f.isError&&!f.isLoading&&u(pe,{title:e(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:f.error instanceof Error?f.error.message:e(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void f.refetch()}),!f.isLoading&&!f.isError&&p.length===0&&u(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:e(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!f.isLoading&&!f.isError&&p.length>0&&a(`div`,{className:`space-y-6`,children:[m.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:m,actions:C})]}),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.collectionEnableASet`,`Collection — enable a set`)}),u(U,{capabilities:h,actions:C})]})]})]})}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(R,{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(N,{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(D,{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(j,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:l===0,onClick:()=>o(l-1),children:u(g,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),a(`span`,{className:`tabular-nums`,children:[l+1,` / `,c]}),u(j,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:l>=c-1,onClick:()=>o(l+1),children:u(ie,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return u(j,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return u(j,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return u(j,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return u(j,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return u(j,{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(Fe,{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:p,text:`text-warning`,border:`border-warning/40`},info:{icon:S,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(j,{size:`sm`,variant:`ghost`,"aria-expanded":o,onClick:()=>s(e=>!e),children:[u(re,{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(j,{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(_e,{headingId:`keychain-status`,title:o(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:E,actions:a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[e.retiredWraps>0&&u(j,{size:`sm`,variant:`ghost`,disabled:t||s,onClick:i,children:o(`secrets.keychainStatusCard.purge`,{count:e.retiredWraps})}),u(j,{size:`sm`,variant:`outline`,disabled:t||s,onClick:r,children:o(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),u(j,{size:`sm`,variant:`outline`,disabled:t||s,onClick:n,children:o(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:a(`dl`,{className:`${d} 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(N,{variant:`danger`,className:`gap-1`,children:[u(ee,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.locked`,`Locked`)]}):a(N,{variant:`success`,className:`gap-1`,children:[u(te,{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(R,{value:e.fingerprint,srLabel:`fingerprint`})]})}),u(Y,{label:o(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:e.recoveryKeyDownloadedAt===null?u(N,{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(ve,{open:e!==null,onOpenChange:e=>!e&&n(),children:u(ke,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&a(s,{children:[a(xe,{children:[u(he,{className:`break-all`,children:e.entry.fieldPath}),a(Ee,{className:`break-all`,children:[e.entry.owner,` · `,e.entry.scope]})]}),u(ye,{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(Ce,{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(R,{value:e.value,label:i(`common.copy`,`Copy`),srLabel:`revealed value`}),u(j,{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),p=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(j,{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(j,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:s||c,onClick:()=>o(d),children:[u(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),t(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),u(D,{columns:_t(e),rows:p,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:ce,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?v:h,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(N,{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(j,{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(m,{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=ue(),r=A(),i=me(),a=Se(),o=le(),s=Ne(),c=F(),l=De(),u=we(),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:ae})})},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]=Ie();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=je({}),o=Ae({}),s=ge({limit:500}),c=Me({}),l=fe(),d=A(),[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:Pe(t),variant:`danger`})}},w=i(()=>_(null),[]);return a(H,{embedded:!0,icon:E,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(de,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[a(se,{children:[u(k,{value:`values`,children:e(`admin.system.secrets.storedValues`,`Stored values`)}),u(k,{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=Te(),o=be(),s=Oe(),[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 v=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 v()},b=async()=>{h(null),await o.mutateAsync(null),await v()},x=async()=>{h(null),await s.mutateAsync(),await v()},S=o.isPending||s.isPending||i.isLoading;return a(P,{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(ne,{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(N,{variant:`warning`,children:e(`settings.siteLocationCard.notConfigured`,`Not configured`)}):u(N,{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(M,{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(M,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":e(`settings.siteLocationCard.longitude`,`Longitude`)})]}),u(j,{type:`submit`,disabled:S,children:e(`common.save`,`Save`)}),a(j,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[u(_,{className:`h-3.5 w-3.5 mr-1`}),e(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),g===null?null:u(j,{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}=I(),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(T,{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=Le(`/system/settings`,{t:e,isAdmin:!0})??{icon:T,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{D as d,It as f,Nt as p,Rr as m,Tn as h,bi as g,bn as _,dn as v,en as y,hi as b,mi as x,mr as S,or as C,ot as w,rr as ee,sn as te,tr as ne,un as T,xi as re,yi as ie}from"./player-overlays-CvKnZb5M.js";import{Xr as ae}from"./client-BbPYrWg7.js";import{i as oe}from"./video-CJw8Jnle.js";import{t as E}from"./key-round-x0Ig1rd2.js";import{Bn as D,Cn as O,Cs as se,Er as ce,Gr as k,Hn as A,Hr as j,Qr as M,Ss as le,Ts as ue,Ur as de,Vn as fe,Wr as pe,Wu as N,Zu as P,_r as me,_s as he,ad as F,bs as I,fd as L,fr as R,gr as ge,gs as _e,hn as z,hr as ve,hs as ye,mr as be,pr as xe,pu as Se,su as Ce,uu as we,vr as Te,vs as Ee,wn as De,ws as Oe,xn as ke,xr as Ae,xs as je,ys as Me,zn as Ne}from"./src-DKc14e9G.js";import{t as B}from"./i18n-BO6gCPcC.js";import{t as V}from"./useTranslation-D3Is_4B6.js";import{T as Pe,lr as Fe,mr as Ie,x as Le}from"./index-C8XwyZGE.js";import{t as Re}from"./AdminSectionedPage-BIoU14zn.js";import{t as H}from"./AdminPage-B4QlIiKh.js";import{t as ze}from"./NodeAddonsSettingsPanel-9_q0f4bE.js";import{t as Be}from"./AddonAssetIcon-DNTjc2uq.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(C,{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(x,{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 W=[`capabilities`,`listCapabilities`];function Ke(e){return e===`singleton`||e===`collection`}function qe(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:qe(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=w(),[i,s]=r(null),[c,d]=r(null),f=o({queryKey:W,queryFn:()=>t.trpcClient.capabilities.listCapabilities.query()}),p=n(()=>{let e=(f.data??[]).flatMap(e=>Ke(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]},[f.data]),m=n(()=>p.filter(e=>e.mode===`singleton`),[p]),h=n(()=>p.filter(e=>e.mode===`collection`),[p]),g=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:n.capName,addonId:n.addonId})}),await f.refetch()},onError:(t,n)=>{d({kind:`error`,message:e(`system.capabilities.failedToSet`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),_=l({mutationFn:e=>t.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await f.refetch()},onError:(t,n)=>{d({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)}),v=l({mutationFn:e=>t.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:n.capName,nodeId:n.nodeId})}),await f.refetch()},onError:(t,n)=>{d({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)}),S=l({mutationFn:e=>t.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{s(e.capName),d(null)},onSuccess:async(t,n)=>{d({kind:`success`,message:e(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:n.capName,length:n.enabledAddonIds.length})}),await f.refetch()},onError:(t,n)=>{d({kind:`error`,message:e(`system.capabilities.failedToUpdate`,{cap:n.capName,error:t instanceof Error?t.message:e(`common.unknownError`)})})},onSettled:()=>s(null)}),C={onSelectSingleton:(e,t)=>g.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>_.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>v.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>S.mutate({capName:e,enabledAddonIds:t}),pendingCapability:i};return a(H,{embedded:!0,icon:y,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(x,{className:`h-3.5 w-3.5 shrink-0`}):u(b,{className:`h-3.5 w-3.5 shrink-0`}),u(`span`,{children:c.message})]}),f.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`})}),f.isError&&!f.isLoading&&u(ce,{title:e(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:f.error instanceof Error?f.error.message:e(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void f.refetch()}),!f.isLoading&&!f.isError&&p.length===0&&u(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:e(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!f.isLoading&&!f.isError&&p.length>0&&a(`div`,{className:`space-y-6`,children:[m.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:m,actions:C})]}),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.collectionEnableASet`,`Collection — enable a set`)}),u(U,{capabilities:h,actions:C})]})]})]})}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:F(`flex min-w-0 items-center gap-0.5`,r),children:[u(`span`,{className:F(`min-w-0 truncate font-mono`,i),title:o,children:e}),u(z,{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(M,{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(O,{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(k,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:l===0,onClick:()=>o(l-1),children:u(g,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),a(`span`,{className:`tabular-nums`,children:[l+1,` / `,c]}),u(k,{size:`sm`,variant:`outline`,"aria-label":t(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:l>=c-1,onClick:()=>o(l+1),children:u(ie,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return u(k,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return u(k,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return u(k,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return u(k,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return u(k,{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(Fe,{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:p,text:`text-warning`,border:`border-warning/40`},info:{icon:S,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:F(`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(k,{size:`sm`,variant:`ghost`,"aria-expanded":o,onClick:()=>s(e=>!e),children:[u(re,{className:F(`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:F(`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(k,{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(ke,{headingId:`keychain-status`,title:o(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:E,actions:a(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[e.retiredWraps>0&&u(k,{size:`sm`,variant:`ghost`,disabled:t||s,onClick:i,children:o(`secrets.keychainStatusCard.purge`,{count:e.retiredWraps})}),u(k,{size:`sm`,variant:`outline`,disabled:t||s,onClick:r,children:o(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),u(k,{size:`sm`,variant:`outline`,disabled:t||s,onClick:n,children:o(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:a(`dl`,{className:`${d} 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(M,{variant:`danger`,className:`gap-1`,children:[u(ee,{className:`h-3 w-3`,"aria-hidden":!0}),o(`secrets.keychainStatusCard.locked`,`Locked`)]}):a(M,{variant:`success`,className:`gap-1`,children:[u(te,{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(z,{value:e.fingerprint,srLabel:`fingerprint`})]})}),u(Y,{label:o(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:e.recoveryKeyDownloadedAt===null?u(M,{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(N);t(()=>{if(e===null)return;let t=Date.now();c(N);let r=setTimeout(n,N),i=setInterval(()=>c(Math.max(0,N-(Date.now()-t))),ft);return()=>{clearTimeout(r),clearInterval(i)}},[e,n]);let l=Math.ceil(o/1e3);return u(R,{open:e!==null,onOpenChange:e=>!e&&n(),children:u(be,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&a(s,{children:[a(me,{children:[u(Te,{className:`break-all`,children:e.entry.fieldPath}),a(ve,{className:`break-all`,children:[e.entry.owner,` · `,e.entry.scope]})]}),u(xe,{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(ge,{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(z,{value:e.value,label:i(`common.copy`,`Copy`),srLabel:`revealed value`}),u(k,{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),p=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(k,{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(k,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:s||c,onClick:()=>o(d),children:[u(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),t(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),u(O,{columns:_t(e),rows:p,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:De,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?v:h,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(M,{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(k,{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(m,{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=de(),r=j(),i=pe(),a=he(),o=Oe(),s=I(),c=je(),l=ye(),u=_e(),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:ae})})},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]=Ie();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=ue({}),o=Me({}),s=Ee({limit:500}),c=le({}),l=se(),d=j(),[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:Pe(t),variant:`danger`})}},w=i(()=>_(null),[]);return a(H,{embedded:!0,icon:E,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(Ne,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[a(fe,{children:[u(A,{value:`values`,children:e(`admin.system.secrets.storedValues`,`Stored values`)}),u(A,{value:`audit`,children:e(`admin.system.secrets.audit`,`Audit`)})]}),u(D,{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(D,{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=we(),o=Se(),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 v=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 v()},b=async()=>{h(null),await o.mutateAsync(null),await v()},x=async()=>{h(null),await s.mutateAsync(),await v()},S=o.isPending||s.isPending||i.isLoading;return a(Ae,{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(ne,{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(M,{variant:`warning`,children:e(`settings.siteLocationCard.notConfigured`,`Not configured`)}):u(M,{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(P,{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(P,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":e(`settings.siteLocationCard.longitude`,`Longitude`)})]}),u(k,{type:`submit`,disabled:S,children:e(`common.save`,`Save`)}),a(k,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[u(_,{className:`h-3.5 w-3.5 mr-1`}),e(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),g===null?null:u(k,{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}=L(),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(T,{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=Le(`/system/settings`,{t:e,isAdmin:!0})??{icon:T,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};
|