@camstack/addon-admin-ui 1.2.423 → 1.2.425
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-CsoRkxbe.js → AddonAssetIcon-CYCgFnh-.js} +1 -1
- package/dist/assets/{Addons-BktOW4F8.js → Addons-BrNO-gNV.js} +1 -1
- package/dist/assets/{AdminPage-BXCcRjRj.js → AdminPage-250c5IIz.js} +1 -1
- package/dist/assets/{AdminSectionedPage-Bxl6ynK9.js → AdminSectionedPage-Bx9l4jGV.js} +1 -1
- package/dist/assets/{AiProfiles-C1gPj2bX.js → AiProfiles-CUuAciGa.js} +1 -1
- package/dist/assets/{BrokerForm-IsugOBK4.js → BrokerForm-nkI-Qcl_.js} +1 -1
- package/dist/assets/{Build-B_z36azr.js → Build-BKUHKW99.js} +1 -1
- package/dist/assets/{Calendars-Cf3-_VqS.js → Calendars-B5LzurzV.js} +1 -1
- package/dist/assets/Cluster-BRfEOot0.js +1 -0
- package/dist/assets/{ClusterStepModel-HGdVtQDz.js → ClusterStepModel-RbVpM7O6.js} +1 -1
- package/dist/assets/{CompositionEditor-BpioOiB6.js → CompositionEditor-paHohkHN.js} +1 -1
- package/dist/assets/{CompositionEditorPage-uV-Cm8er.js → CompositionEditorPage-Dwc53zIU.js} +1 -1
- package/dist/assets/{Data-bKesoA54.js → Data-w3RkRs0J.js} +1 -1
- package/dist/assets/{DeviceDetail-BjXcgEMv.js → DeviceDetail-De_43vZZ.js} +1 -1
- package/dist/assets/{DeviceDoActionFields-CaAhrBBq.js → DeviceDoActionFields-GnzcNn1m.js} +1 -1
- package/dist/assets/{Devices-fjoSRvSX.js → Devices-CPzgp4KM.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-BKa9M_Zh.js → EmbedPlayerPage-f4jubzvX.js} +1 -1
- package/dist/assets/Identity-CAsJZhy-.js +1 -0
- package/dist/assets/{IntegrationDetail-DVT833aa.js → IntegrationDetail-DVzyFVQi.js} +1 -1
- package/dist/assets/{IntegrationHub-Diwlzwdk.js → IntegrationHub-Bufk1Dn6.js} +1 -1
- package/dist/assets/{Integrations-Bv9yI-aK.js → Integrations-CrWX5s2l.js} +1 -1
- package/dist/assets/{Integrations-D2m9GJEd.js → Integrations-DYJZbIJb.js} +1 -1
- package/dist/assets/{Library-CpjvRB_8.js → Library-CuaDA83A.js} +1 -1
- package/dist/assets/Locations-DC7Mbk0N.js +3 -0
- package/dist/assets/{Logs-ANsOyCMt.js → Logs-B3gxHPJx.js} +1 -1
- package/dist/assets/{MotionZonesSettings-D_qLVNYH.js → MotionZonesSettings-sQ16MBx7.js} +1 -1
- package/dist/assets/MyAccess-Dk-eK9Ik.js +2 -0
- package/dist/assets/Network-gdhbKSd3.js +1 -0
- package/dist/assets/{NodeAddonsSettingsPanel-Bhu-tW8k.js → NodeAddonsSettingsPanel-Dh4z-QGr.js} +1 -1
- package/dist/assets/{Notifications-BoUEVbJ-.js → Notifications-CP3XZDYw.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-C_nHi8iw.js → PrivacyMaskSettings-ck5SNB0S.js} +1 -1
- package/dist/assets/{Recordings-CciKKl6g.js → Recordings-C_wXXKNm.js} +1 -1
- package/dist/assets/{ScanNetworkModal-DstPO1i_.js → ScanNetworkModal-DL_B-AVn.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-BzVlh6Gr.js → SceneMonitorEditor-8CpDpVOM.js} +1 -1
- package/dist/assets/SessionsList-DZBaHZJv.js +2 -0
- package/dist/assets/{Showroom-C8zKWI0u.js → Showroom-CaiMghAf.js} +1 -1
- package/dist/assets/{System-8fNvqrsY.js → System-DBkSQMrh.js} +1 -1
- package/dist/assets/{Terminal-CI2Bx9Jq.js → Terminal-C6_w6IRM.js} +1 -1
- package/dist/assets/{Viewer-Dqzwha2F.js → Viewer-ClJ6Xfm_.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-KEhfqRL3.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DUcH4sBh.js} +1 -1
- package/dist/assets/{addon-icons-context-ESxHkko-.js → addon-icons-context-_Q-TMhpS.js} +1 -1
- package/dist/assets/{archive-EESnpwDQ.js → archive-5Mi3cn4y.js} +1 -1
- package/dist/assets/{authed-media-DbWnolm6.js → authed-media-CIBSu5eS.js} +1 -1
- package/dist/assets/{bell-off-CSUO3NcL.js → bell-off-O6w2Rfx2.js} +1 -1
- package/dist/assets/{boxes-F2kcHJh3.js → boxes-gwiYF6bh.js} +1 -1
- package/dist/assets/circle-slash-LeaAcO0Z.js +1 -0
- package/dist/assets/client-Cm-sr0wc.js +358 -0
- package/dist/assets/{cloud-upload-DaYCZ49o.js → cloud-upload-BkkCpA1A.js} +1 -1
- package/dist/assets/crop-CSoFpLsd.js +1 -0
- package/dist/assets/{device-integration-icon-DNAzKen7.js → device-integration-icon-CPrOtTLY.js} +1 -1
- package/dist/assets/device-picker-model-DSRwVBTr.js +1 -0
- package/dist/assets/{dist-CD_P-W4K.js → dist-CJ-8B9yY.js} +1 -1
- package/dist/assets/dist-DH3WcYkO.js +358 -0
- package/dist/assets/{eraser-Lfy_pBOl.js → eraser-TGwVVn87.js} +1 -1
- package/dist/assets/{file-up-D4zDJB-k.js → file-up-BGAdeddG.js} +1 -1
- package/dist/assets/{hard-drive-download-W35XVpPS.js → hard-drive-download-srWFcoIp.js} +1 -1
- package/dist/assets/{history-DQ9vKorT.js → history-BuUr8Pf8.js} +1 -1
- package/dist/assets/{hostInit-CQubQ_OP.js → hostInit-DWnakaq9.js} +1 -1
- package/dist/assets/{icons-dYEMPXRw.js → icons-DrL-Fdok.js} +1 -1
- package/dist/assets/index-D7FGxQMl.js +4 -0
- package/dist/assets/index-dmZ34NAY.css +2 -0
- package/dist/assets/{key-BL3RAip-.js → key-B0MTvYot.js} +1 -1
- package/dist/assets/{key-round-WrVw9weZ.js → key-round-Cl-qLeAZ.js} +1 -1
- package/dist/assets/{layers-BagSqCNw.js → layers-Df1aeR99.js} +1 -1
- package/dist/assets/{list-ordered-DZPbjPqk.js → list-ordered-BzkisKLy.js} +1 -1
- package/dist/assets/{location-owned-usage-CueI-yQx.js → location-owned-usage-CVdW20Z2.js} +1 -1
- package/dist/assets/{log-in-CPy0U03d.js → log-in-xkUb0jne.js} +1 -1
- package/dist/assets/{memory-stick-DyJ5Tk7i.js → memory-stick-C4-nNgvT.js} +1 -1
- package/dist/assets/{message-square-plus-brBt7pwi.js → message-square-plus-B2M8qlsN.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-8e819fac.js → mf-entry-bootstrap-0-cd3d1253.js} +2 -2
- package/dist/assets/{mic-off-DjwMxkEf.js → mic-off-C-BZDmBY.js} +1 -1
- package/dist/assets/{monitor-off-B51Pk6ca.js → monitor-off-DeEjoNtE.js} +1 -1
- package/dist/assets/{monitor-smartphone-BL4hI9CF.js → monitor-smartphone-DmzFXiIW.js} +1 -1
- package/dist/assets/mount-DSRwVBTr.js +1 -0
- package/dist/assets/{notification-schedule-field-C4N-WcPT.js → notification-schedule-field-BDMeSniX.js} +1 -1
- package/dist/assets/{octagon-alert-jd1vv87l.js → octagon-alert-AbeyZo0w.js} +1 -1
- package/dist/assets/{player-overlays-BOsDheHc.js → player-overlays-DEJGWVeQ.js} +1 -1
- package/dist/assets/{recycle-CBztR-tu.js → recycle-Cg5L5URL.js} +1 -1
- package/dist/assets/remoteEntry-Cdw06LwW.js +1 -0
- package/dist/assets/{scan-eye-DbKZpfih.js → scan-eye-QKQlUjSj.js} +1 -1
- package/dist/assets/{scissors-DCPxjz4N.js → scissors-CixnGpmu.js} +1 -1
- package/dist/assets/{search-x-DUTyCa9Y.js → search-x-Cjg-NClW.js} +1 -1
- package/dist/assets/{send-Boyf3SIM.js → send-C_JQVC2l.js} +1 -1
- package/dist/assets/{settings-2-BkCzMVmr.js → settings-2-0Dzmg5ID.js} +1 -1
- package/dist/assets/{speaker-nmF_x7US.js → speaker-D_GGxoIS.js} +1 -1
- package/dist/assets/{src-CCd-7AXY.js → src-CVCI1YgT.js} +3 -3
- package/dist/assets/{timer-reset-CkFpFTeE.js → timer-reset-DbjUS-e3.js} +1 -1
- package/dist/assets/{ungroup-BdveVhZq.js → ungroup-Bn_PEJ2F.js} +1 -1
- package/dist/assets/{unlink-Biu31rTD.js → unlink-C2XiU97D.js} +1 -1
- package/dist/assets/{usb-B3PCv4C7.js → usb-Yb2y3179.js} +1 -1
- package/dist/assets/{use-scenes-feed-CVqgJ1dp.js → use-scenes-feed-Bg10fjvd.js} +1 -1
- package/dist/assets/{use-stationary-objects-DBx5Fmhe.js → use-stationary-objects-BE7lNV-s.js} +1 -1
- package/dist/assets/useEventInvalidation-DSRwVBTr.js +1 -0
- package/dist/assets/{useNodeUrlSelection-6F8U-uWa.js → useNodeUrlSelection-DVvZOo0G.js} +1 -1
- package/dist/assets/user-round-Bn5beI9W.js +1 -0
- package/dist/assets/{user-x-C34u0XHr.js → user-x-HpPBhUXj.js} +1 -1
- package/dist/assets/{video-c8H5Zs-y.js → video-47m9GMk0.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-U-kBwSSC.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BHVW3f4G.js} +2 -2
- package/dist/index.html +10 -10
- package/dist/server/addon.js +47 -7
- package/package.json +1 -1
- package/dist/assets/Cluster-Toaq2cXH.js +0 -1
- package/dist/assets/Identity-DQ0v3wpf.js +0 -1
- package/dist/assets/Locations-BOqmVhMT.js +0 -3
- package/dist/assets/MyAccess-CYYdpIJp.js +0 -2
- package/dist/assets/Network-BgzNU0Jj.js +0 -1
- package/dist/assets/SessionsList-BGuCGBZB.js +0 -2
- package/dist/assets/circle-slash-C8fnQfsA.js +0 -1
- package/dist/assets/client-CLcJeoH9.js +0 -358
- package/dist/assets/crop-CA89ugtQ.js +0 -1
- package/dist/assets/device-picker-model-BmKHpH-F.js +0 -1
- package/dist/assets/dist-8eKR6eC_.js +0 -358
- package/dist/assets/index-BuW8Mb0x.js +0 -4
- package/dist/assets/index-Q7OTRxZX.css +0 -2
- package/dist/assets/mount-BmKHpH-F.js +0 -1
- package/dist/assets/remoteEntry-DLWJ6wcK.js +0 -1
- package/dist/assets/useEventInvalidation-BmKHpH-F.js +0 -1
- package/dist/assets/user-round-C2xetSEU.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as e,K as t,Q as n,S as r,W as i,q as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{D as s,It as c,ar as l,cn as u,di as d,dt as f,ot as p}from"./player-overlays-BOsDheHc.js";import{i as m,o as h}from"./video-c8H5Zs-y.js";import{t as g}from"./key-round-WrVw9weZ.js";import{t as _}from"./octagon-alert-jd1vv87l.js";import{An as v,Bn as y,Dn as b,Ht as x,Ln as S,Nl as C,Nt as w,On as ee,Pt as T,Qn as E,Tn as te,Ut as ne,Vt as re,Xl as ie,Zl as ae,Zn as oe,ar as se,gu as D,iu as O,jn as ce,kn as le,ma as ue}from"./src-CCd-7AXY.js";import{R as de,a as fe}from"./index-BuW8Mb0x.js";n();function k({id:e,title:t,icon:n,description:i,actions:a,tone:c=`default`,notice:l=null,onDismissNotice:u,children:d}){return o(re,{headingId:`access-${e}`,title:t,icon:n,actions:a,testId:`access-${e}`,children:r(`div`,{className:`${s} space-y-3`,children:[o(`div`,{className:O(`text-[11px] leading-relaxed`,c===`danger`?`rounded-md border border-danger/30 bg-danger/5 px-3 py-2 text-foreground`:`text-foreground-subtle`),children:i}),l!==null&&o(me,{notice:l,onDismiss:u}),d]})})}var pe={success:{icon:d,line:`border-success/30 text-foreground`,mark:`text-success`},danger:{icon:_,line:`border-danger/40 text-danger`,mark:`text-danger`}};function me({notice:e,onDismiss:t}){let n=pe[e.tone],i=n.icon;return r(`div`,{role:e.tone===`danger`?`alert`:`status`,className:O(`flex items-start gap-2 rounded-md border bg-surface px-3 py-2 text-[11px]`,n.line),children:[o(i,{className:O(`mt-0.5 h-3.5 w-3.5 shrink-0`,n.mark),"aria-hidden":!0}),o(`span`,{className:`min-w-0 flex-1`,children:e.message}),t!==void 0&&o(ae,{type:`button`,variant:`ghost`,size:`sm`,icon:f,"aria-label":`Dismiss`,onClick:t,className:`-my-1 h-5 w-5`})]})}function A(){let{data:e}=C();return i(()=>{let t=new Map;for(let n of e??[])t.set(n.id,n.username);return t},[e])}function j(e,t=null){return e===null?t:{tone:`danger`,message:e}}var M={active:`Active`,expired:`Expired`,revoked:`Revoked`,current:`This session`},he={active:`success`,expired:`warning`,revoked:`default`,current:`info`},ge={current:0,active:1,expired:2,revoked:3};function N(e,t){if(e===null)return t;let n=new Date(e);return Number.isNaN(n.getTime())?`—`:n.toLocaleString()}function _e({status:e}){return o(se,{variant:he[e],className:`text-[10px]`,children:M[e]})}function ve({row:e,action:t}){if(!t.isAvailable(e))return null;let n=t.icon,i=t.busyId===e.id;return r(y,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>t.onRun(e),disabled:t.disabled,"aria-label":`${t.label} ${e.name}`,className:`text-danger hover:bg-danger/10`,children:[i?o(l,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):o(n,{className:`h-3 w-3`,"aria-hidden":!0}),t.label]})}function ye(e){return[{key:`name`,header:`Name`,sortValue:e=>e.name.toLowerCase(),render:e=>r(`div`,{className:`min-w-0 max-w-[18rem]`,children:[o(`div`,{className:`truncate font-medium text-foreground`,title:e.name,children:e.name}),e.detail!==null&&o(`div`,{className:`truncate font-mono text-[10px] text-foreground-subtle`,title:e.detail,children:e.detail})]})},e.hideOwner?null:{key:`owner`,header:`Owner`,sortValue:e=>e.ownerName.toLowerCase(),render:e=>e.ownerName},{key:`kind`,header:`Kind / scope`,sortValue:e=>e.kind.toLowerCase(),nowrap:!1,render:e=>r(`div`,{className:`min-w-[8rem] max-w-[16rem]`,children:[o(`div`,{className:`text-foreground`,children:e.kind}),e.scope!==null&&o(`div`,{className:`line-clamp-2 text-[10px] text-foreground-subtle`,title:e.scope,children:e.scope})]})},{key:`status`,header:`Status`,sortValue:e=>ge[e.status],render:e=>o(_e,{status:e.status})},{key:`created`,header:`Created`,sortValue:e=>e.createdAt,render:e=>o(`span`,{className:`text-foreground-subtle`,children:N(e.createdAt,`—`)})},{key:`lastUsed`,header:`Last used`,sortValue:e=>e.lastUsedAt,render:e=>o(`span`,{className:`text-foreground-subtle`,children:N(e.lastUsedAt,`Never`)})},{key:`expires`,header:`Expires`,sortValue:e=>e.expiresAt,render:t=>o(`span`,{className:`text-foreground-subtle`,children:N(t.expiresAt,e.expiresNone)})},e.action===null?null:{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:t=>e.action===null?null:o(ve,{row:t,action:e.action})}].filter(e=>e!==null)}n();var P=6,F={"current-session":`your current session`,"not-active":`already gone`};function I(e,t){return`${String(e)} ${e===1?t.one:t.many}`}function be(e){let t=new Map;for(let n of e)t.set(n.status,(t.get(n.status)??0)+1);return[...t.entries()].map(([e,t])=>`${String(t)} ${M[e].toLowerCase()}`).join(`, `)}function L(e,t){let n=e.slice(0,P).map(e=>`• ${e.name} — ${e.ownerName}`),r=e.length>P?[`…and ${String(e.length-P)} more`]:[];return[`${I(e.length,t)} (${be(e)}) stop working at once. This cannot be undone.`,``,...n,...r].join(`
|
|
2
|
-
`)}function R(e,t,n){let r=E(),i=D.auth.revokeCredentials.useMutation(),[o,s]=a(null);return{run:async a=>{if(a.length===0)return!1;let o=String(a.length),c=await r({title:`Revoke ${I(a.length,t)}?`,message:L(a,t),label:`Type ${o} to confirm`,placeholder:o,confirmLabel:`Revoke ${o}`,variant:`danger`,validate:e=>e.trim()===o?null:`Type ${o} — the number of ${t.many} selected`});if(c===null||c.trim()!==o)return!1;s(null);try{let n=await i.mutateAsync({kind:e,ids:a.map(e=>e.id),confirmCount:a.length}),r=n.skipped.map(e=>F[e.reason]??e.reason);return s({tone:`success`,message:`Revoked ${I(n.revoked.length,t)}.`+(r.length>0?` Skipped ${String(r.length)}: ${[...new Set(r)].join(`, `)}.`:``)}),!0}catch(e){return s({tone:`danger`,message:`The revoke failed: ${e instanceof Error?e.message:`request failed`}. The list below is reloaded — check what is left.`}),!1}finally{n()}},busy:i.isPending,outcome:o,dismiss:()=>s(null)}}function xe(e,t){let n=E(),r=D.auth.revokeCredentials.useMutation(),[i,o]=a(null);return{run:async i=>{if(i.length===0)return!1;let a=String(i.length),s=await n({title:`Revoke ${I(i.length,e)}?`,message:L(i,e),label:`Type ${a} to confirm`,placeholder:a,confirmLabel:`Revoke ${a}`,variant:`danger`,validate:t=>t.trim()===a?null:`Type ${a} — the number of ${e.many} selected`});if(s===null||s.trim()!==a)return!1;o(null);let c=i.filter(e=>e.kind===`Scoped`).map(e=>e.id),l=i.filter(e=>e.kind===`Admin`).map(e=>e.id);try{let t=[],n=[];if(c.length>0){let e=await r.mutateAsync({kind:`scoped-token`,ids:c,confirmCount:c.length});t.push(...e.revoked),n.push(...e.skipped)}if(l.length>0){let e=await r.mutateAsync({kind:`admin-token`,ids:l,confirmCount:l.length});t.push(...e.revoked),n.push(...e.skipped)}let i=n.map(e=>F[e.reason]??e.reason);return o({tone:`success`,message:`Revoked ${I(t.length,e)}.`+(i.length>0?` Skipped ${String(i.length)}: ${[...new Set(i)].join(`, `)}.`:``)}),!0}catch(e){return o({tone:`danger`,message:`The revoke failed: ${e instanceof Error?e.message:`request failed`}. The list below is reloaded — check what is left.`}),!1}finally{t()}},busy:r.isPending,outcome:i,dismiss:()=>o(null)}}n();var Se={searchText:e=>[e.name,e.detail??``,e.ownerName,e.kind,e.scope??``],facetGroups:[{id:`status`,value:e=>e.status},{id:`owner`,value:e=>e.ownerName},{id:`kind`,value:e=>e.kind}]},Ce={status:`Status`,owner:`Owner`,kind:`Kind`},we=e=>e.status!==`current`,Te=[`active`,`current`];function z({rows:e,label:t,isLoading:n,loadError:s,emptyText:c,hideOwner:u=!1,expiresNone:d=`Never`,action:f,bulk:p,defaultStatus:m=Te}){let[h]=a(()=>m.length===0?{search:``,facets:[]}:{search:``,facets:[],groups:{status:[...m]}}),g=w(e,Se,h),[_,v]=a(()=>new Set),y=i(()=>ye({hideOwner:u,expiresNone:d,action:f??null}),[u,d,f]),b=i(()=>p===void 0?()=>!1:e=>we(e)&&p.isSelectable(e),[p]),C=i(()=>g.rows.filter(e=>_.has(e.id)&&b(e)),[g.rows,_,b]);return n?r(`div`,{className:`flex items-center gap-2 py-4 text-xs text-foreground-subtle`,children:[o(l,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":!0}),`Loading `,t,`…`]}):s===null?r(`div`,{className:`space-y-3`,children:[o(T,{state:g.state,facets:g.facets,groups:g.groups.filter(e=>!(u&&e.id===`owner`)).map(e=>({...e,label:Ce[e.id]??e.id,...e.id===`status`?{facetLabel:e=>M[e]??e}:{}})),labels:{searchPlaceholder:`Search ${t}…`,searchLabel:`Search ${t}`,facetsLabel:`Filter ${t}`,clearLabel:`Clear filters`},onSearch:g.setSearch,onToggleFacet:g.toggleFacet,onToggleGroupFacet:g.toggleGroupFacet,onClear:g.clear}),p!==void 0&&o(Ee,{bulk:p,shown:g.rows.filter(b),targets:C,onSelect:v}),o(x,{columns:y,rows:g.rows,rowKey:e=>e.id,minWidthPx:u?760:860,mobileMode:`scroll`,maxBodyHeight:ne,defaultSort:{columnKey:`created`,dir:`desc`},pageSize:25,paginationLabels:{navLabel:`${t} pages`,previous:`Previous page`,next:`Next page`,range:(e,t,n)=>`${e}–${t} of ${n}`},emptyMessage:g.active?`No ${t} match the filters.`:c,rowClassName:e=>e.status===`revoked`||e.status===`expired`?`opacity-70`:void 0,...p===void 0?{}:{selection:{selected:_,onChange:v,isSelectable:b,rowLabel:e=>`Select ${e.name} (${e.ownerName})`,pageLabel:`Select every ${p.noun.one} on this page`}}})]}):o(S,{title:`Could not load ${t}`,message:s})}function Ee({bulk:e,shown:t,targets:n,onSelect:i}){let{revoke:a,noun:s}=e,u=(e.quickSelect??[]).map(e=>({...e,rows:t.filter(e.match)})).filter(e=>e.rows.length>0),d=async()=>{await a.run(n)&&i(new Set)};return r(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`bulk-bar`,children:[t.length>0&&r(y,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>i(new Set(t.map(e=>e.id))),children:[`Select all `,String(t.length),` shown`]}),u.map(e=>r(y,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>i(new Set(e.rows.map(e=>e.id))),children:[e.label,` (`,String(e.rows.length),`)`]},e.label)),n.length>0&&r(`div`,{className:`ml-auto flex flex-wrap items-center gap-2`,children:[r(`span`,{className:`text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:[I(n.length,s),` selected`]}),r(y,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>i(new Set),children:[o(f,{className:`h-3 w-3`,"aria-hidden":!0}),`Clear selection`]}),r(y,{type:`button`,variant:`danger`,size:`sm`,disabled:a.busy,onClick:()=>void d(),children:[a.busy?o(l,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):o(c,{className:`h-3 w-3`,"aria-hidden":!0}),`Revoke `,I(n.length,s),`…`]})]})]})}var B=(e,t)=>t===null?`—`:e.get(t)??t;function V(e,t){return e!=null&&e<=t?`expired`:`active`}function De(e,t,n){return{id:e.id,name:n.client(e.client),detail:e.ip,ownerId:e.userId,ownerName:B(t,e.userId),kind:n.method(e.method),scope:null,status:e.current?`current`:`active`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}function Oe(e,t){return{id:e.id,name:e.integrationId,detail:null,ownerId:e.userId,ownerName:e.username,kind:e.integrationId,scope:t,status:e.revokedAt===null?`active`:`revoked`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:null}}var ke=`Scoped`,H=`Admin`;function Ae(e,t,n,r,i){return{id:e.id,name:e.name,detail:`${e.tokenPrefix}…`,ownerId:t,ownerName:B(n,t),kind:ke,scope:r,status:V(e.expiresAt,i),createdAt:e.createdAt,lastUsedAt:e.lastUsedAt??null,expiresAt:e.expiresAt??null}}function je(e,t,n){return{id:e.id,name:e.name,detail:`${e.tokenPrefix}…`,ownerId:e.createdBy,ownerName:B(t,e.createdBy),kind:H,scope:`Full administrator`,status:e.revokedAt===null?V(e.expiresAt,n):`revoked`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}var Me={"grid-view":`Grid`,"events-view":`Events`};function Ne(e,t){return e.map(e=>t.get(e)??`#${String(e)}`).join(`, `)}function Pe(e,t,n,r){let i=Me[e.scope.kind];return{id:e.id,name:`${i} · ${String(e.scope.deviceIds.length)} camera${e.scope.deviceIds.length===1?``:`s`}`,detail:`${e.tokenPrefix}…`,ownerId:e.userId,ownerName:B(t,e.userId),kind:e.scope.talk===!0?`${i} + talk`:i,scope:Ne(e.scope.deviceIds,n),status:V(e.expiresAt,r),createdAt:e.createdAt,lastUsedAt:e.lastUsedAt??null,expiresAt:e.expiresAt}}function U(e){return`${e.provider}\u0000${e.subject}`}function Fe(e,t){return{id:U(e),name:e.label??e.subject,detail:e.issuer,ownerId:e.userId,ownerName:B(t,e.userId),kind:e.provider,scope:null,status:`active`,createdAt:e.linkedAt,lastUsedAt:null,expiresAt:null}}function Ie(e,t){let n=e.allowedProviders;return{id:e.id,name:e.label,detail:`${e.tokenPrefix}…`,ownerId:e.userId??null,ownerName:B(t,e.userId??null),kind:e.isAdmin===!0?`Admin`:`Regular`,scope:n===void 0||n===`*`?`All providers`:n.join(`, `)||`All providers`,status:`active`,createdAt:e.createdAt??null,lastUsedAt:e.lastUsedAt??null,expiresAt:null}}var W=40,Le=[{test:/Electron\//,name:`CamStack desktop`},{test:/Edg(e|A|iOS)?\//,name:`Edge`},{test:/OPR\/|Opera/,name:`Opera`},{test:/Firefox\/|FxiOS\//,name:`Firefox`},{test:/Chrome\/|CriOS\//,name:`Chrome`},{test:/Version\/[\d.]+.*Safari\//,name:`Safari`}],Re=[{test:/iPhone/,name:`iPhone`},{test:/iPad/,name:`iPad`},{test:/Android/,name:`Android`},{test:/Mac OS X|Macintosh/,name:`macOS`},{test:/Windows/,name:`Windows`},{test:/CrOS/,name:`ChromeOS`},{test:/Linux/,name:`Linux`}],ze=[{test:/CFNetwork\/.*Darwin\//,name:`CamStack app on iOS`},{test:/^okhttp\//i,name:`CamStack app on Android`},{test:/^(node|undici)\b/i,name:`Script (Node.js)`},{test:/^curl\//i,name:`curl`}];function G(e,t){return e.find(e=>e.test.test(t))?.name??null}function Be(e){return e.length<=W?e:`${e.slice(0,W)}…`}function K(e){if(e===null||e.trim().length===0)return{label:`Unknown device`,raw:null};let t=e.trim(),n=G(ze,t);if(n!==null)return{label:n,raw:t};let r=G(Le,t),i=G(Re,t);return r!==null&&i!==null?{label:`${r} on ${i}`,raw:t}:r===null?{label:Be(t),raw:t}:{label:r,raw:t}}var Ve={password:`Password`,passkey:`Passkey`,sso:`Single sign-on`,handoff:`App hand-off`,exchange:`Session exchange`};function q(e){return Ve[e]??e}function J(e){if(e==null)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString()}n();function Y(e,t){return e instanceof Error&&e.message.length>0?e.message:t}function He(n){let i=p(),[s,c]=a(!1),[u,d]=a(``),[f,m]=a(null),[h,_]=a(null),x=t(null),S=e(e=>{x.current?.(e),x.current=null,c(!1),d(``),m(null),_(null)},[]),C=e(()=>new Promise(e=>{x.current?.(null),x.current=e,_(null),c(!0)}),[]),w=async()=>{m(`password`),_(null);try{let{reauthToken:e}=await i.reauthenticate({password:u});S(e)}catch(e){_(Y(e,`Password is incorrect`)),m(null)}},T=async()=>{m(`passkey`),_(null);try{let{optionsJSON:e}=await i.reauthBeginPasskey(),t=await fe({optionsJSON:e}),{reauthToken:n}=await i.reauthenticate({passkeyResponse:Object.fromEntries(Object.entries(t))});S(n)}catch(e){_(Y(e,`Passkey verification failed`)),m(null)}};return{requestProof:C,dialog:o(te,{open:s,onOpenChange:e=>!e&&S(null),children:r(b,{children:[r(v,{children:[o(ce,{children:`Confirm it’s you`}),r(ee,{children:[n,` needs your password or a passkey, even though you are signed in.`]})]}),r(`form`,{className:`space-y-3`,onSubmit:e=>{e.preventDefault(),u.length>0&&f===null&&w()},children:[o(ie,{type:`password`,autoComplete:`current-password`,placeholder:`Current password`,value:u,onChange:e=>d(e.target.value),"aria-label":`Current password`}),h!==null&&o(`p`,{role:`alert`,className:`text-xs text-danger`,children:h}),r(le,{className:`flex flex-wrap gap-2`,children:[r(y,{type:`button`,variant:`outline`,disabled:f!==null,onClick:()=>void T(),children:[f===`passkey`?o(l,{className:`h-4 w-4 animate-spin`}):o(g,{className:`h-4 w-4`}),`Use a passkey`]}),r(y,{type:`submit`,disabled:u.length===0||f!==null,children:[f===`password`&&o(l,{className:`h-4 w-4 animate-spin`}),`Confirm`]})]})]})]})})}}n();var X={one:`share link`,many:`share links`};function Z(e){let t=oe(),n=D.useUtils(),r=D.auth.listShareTokens.useQuery({owner:e}),o=A(),{data:s}=ue({isCamera:!0,projection:`slim`}),[l,u]=a(null),d=()=>void n.auth.listShareTokens.invalidate(),f=D.auth.revokeShareToken.useMutation({onSuccess:d,onError:e=>u(`Revoke failed: ${e.message}`)}),p=i(()=>{let e=new Map;for(let t of s??[])e.set(t.id,t.name);return e},[s]),m=Date.now(),h=(r.data??[]).map(e=>Pe(e,o,p,m)),g=async e=>{await t({title:`Revoke share link`,message:`Anyone holding this link to ${e.scope??e.name} loses access immediately. This cannot be undone.`,confirmLabel:`Revoke`,variant:`danger`})&&(u(null),f.mutate({id:e.id}))};return{rows:h,refresh:d,error:l,clearError:()=>u(null),isLoading:r.isLoading,loadError:r.isError?r.error?.message??`Request failed`:null,action:{label:`Revoke`,icon:c,isAvailable:()=>!0,onRun:e=>void g(e),busyId:f.isPending?f.variables?.id??null:null,disabled:f.isPending}}}function Ue(){let e=Z(`self`);return o(k,{notice:j(e.error),onDismissNotice:e.clearError,id:`my-share-links`,title:`Share links`,icon:u,description:`View-only links you created in the viewer app to share a grid or the events of some cameras. Revoking a link stops it working everywhere it was sent.`,children:o(z,{rows:e.rows,label:`share links`,isLoading:e.isLoading,loadError:e.loadError,emptyText:`You have no share links.`,hideOwner:!0,action:e.action})})}function We(){let{user:e}=de();return e?.isAdmin?o(Ge,{}):null}function Ge(){let e=Z(`all`),t=R(`share-link`,X,e.refresh);return o(k,{notice:j(e.error,t.outcome),onDismissNotice:()=>{e.clearError(),t.dismiss()},id:`share-links`,title:`Share links`,icon:u,description:`Every user's view-only share links. Revoking one stops it working for whoever it was sent to — a revoked link is deleted and cannot be restored.`,children:o(z,{rows:e.rows,label:`share links`,isLoading:e.isLoading,loadError:e.loadError,emptyText:`No user has any share links.`,action:{...e.action,disabled:e.action.disabled||t.busy},bulk:{revoke:t,noun:X,isSelectable:()=>!0,quickSelect:[{label:`Select expired`,match:e=>e.status===`expired`}]}})})}function Ke({isPending:e,error:t,what:n,onRetry:i,children:a}){return e?r(`div`,{className:`flex items-center gap-2 py-3 text-xs text-foreground-subtle`,role:`status`,"data-testid":`query-pending`,children:[o(l,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":!0}),`Reading `,n,`…`]}):t===null?a:o(S,{title:`Could not read ${n}`,message:t.message.length>0?t.message:`Request failed`,onRetry:i})}var qe=864e5,Je={active:`Valid`,expired:`Expired`,revoked:`Revoked`},Ye={active:`success`,expired:`warning`,revoked:`default`},Xe={active:0,expired:1,revoked:2},Ze={qr:`QR (by an admin)`,self:`Self-enrolled`},Qe={ios:`iOS`,android:`Android`,web:`Web`,other:`Other`};function $e(e){return e.status===`revoked`}function et(e){return e.status!==`revoked`}function tt(e,t=`—`){if(e===null)return t;let n=new Date(e);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function Q(e,t){return e===null||Number.isNaN(e)?null:Math.floor((e-t)/qe)}function nt(e,t){let n=Q(e,t);return n===null?`unknown`:n<0?`expired`:n<30?`soon`:`ok`}function rt(e,t){let n=Q(e,t);if(n===null)return`Unknown`;if(n===0)return`today`;if(n>0)return`in ${String(n)} day${n===1?``:`s`}`;let r=-n;return`${String(r)} day${r===1?``:`s`} ago`}function it(e){if(e===null)return null;let t=Date.parse(e);return Number.isNaN(t)?null:t}function at(e){return e===null||e.length===0?`—`:e.length<=17?e:`${e.slice(0,8)}…${e.slice(-8)}`}function $(e){return e.length<=10?e:`${e.slice(0,10)}…`}function ot(e){if(!e.online)return{allowed:!1,reason:`The node is offline - it cannot be renewed now.`};if(e.isHub&&e.https.kind===`served`){if(e.https.status.mode===`uploaded`)return{allowed:!1,reason:`This certificate was uploaded by an operator. Replace it where it was uploaded (Network → Local access), or revert to the generated one there.`};if(e.https.status.mode===`disabled`)return{allowed:!1,reason:`TLS is disabled on the hub - there is no certificate.`}}return{allowed:!0,reason:null}}var st={prepare:`asking the node for a key`,issue:`issuing the new certificate`,install:`installing it on the node`,reconnect:`waiting for the node to reconnect`,confirm:`confirming the node presents the new certificate`};function ct(e){if(e.ok)return{tone:`success`,message:`${e.nodeId}: new cluster certificate ${$(e.newSerial)} installed; the previous one was revoked.`};let t=e.keptPreviousLeaf?`The node keeps its previous certificate - nothing was broken.`:`The node may be without a valid certificate: check it and renew again.`;return{tone:`danger`,message:`${e.nodeId}: renewal failed while ${st[e.stage]} - ${e.reason}. ${t}`}}function lt(e,t){let n=Math.max(0,e-t),r=Math.ceil(n/1e3),i=Math.floor(r/60),a=r%60;return{expired:n===0,label:`${String(i)}:${String(a).padStart(2,`0`)}`}}function ut({sessions:e,isLoading:t,loadError:n,emptyText:i,onRevoke:a,revokingId:s}){return t?r(`div`,{className:`flex items-center gap-2 text-xs text-foreground-subtle`,children:[o(l,{className:`h-3.5 w-3.5 animate-spin`}),`Loading sessions…`]}):n===null?e.length===0?o(`div`,{className:`rounded border border-dashed border-border px-3 py-4 text-xs text-foreground-subtle text-center`,children:i}):o(`ul`,{className:`divide-y divide-border rounded-md border border-border`,children:e.map(e=>o(dt,{session:e,revoking:s===e.id,onRevoke:()=>a(e)},e.id))}):r(`div`,{className:`text-[11px] text-danger`,children:[`Could not load sessions: `,n]})}function dt({session:e,revoking:t,onRevoke:n}){let i=K(e.client);return r(`li`,{"data-testid":`session-row`,className:`flex items-start gap-3 px-3 py-2 text-xs`,children:[o(m,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 text-foreground-subtle`}),r(`div`,{className:`flex-1 min-w-0 space-y-0.5`,children:[r(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[o(`span`,{className:`font-medium text-foreground truncate`,title:i.raw??void 0,children:i.label}),e.current&&o(`span`,{className:`rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`,children:`This device`})]}),r(`div`,{className:`flex flex-wrap gap-x-3 text-[11px] text-foreground-subtle`,children:[o(`span`,{children:q(e.method)}),o(`span`,{className:`font-mono`,children:e.ip??`IP unknown`}),r(`span`,{children:[`Last active `,J(e.lastUsedAt)]}),r(`span`,{children:[`Expires `,J(e.expiresAt)]})]})]}),!e.current&&r(`button`,{onClick:n,disabled:t,className:`inline-flex items-center gap-1 rounded px-2 py-1 text-[10px] text-danger hover:bg-danger/10 disabled:opacity-50`,children:[t?o(l,{className:`h-3 w-3 animate-spin`}):o(h,{className:`h-3 w-3`}),`Sign out`]})]})}export{Oe as A,q as C,Ie as D,je as E,xe as F,k as I,j as L,Ae as M,z as N,U as O,R as P,A as R,K as S,H as T,$ as _,Ze as a,Ue as b,et as c,rt as d,ct as f,at as g,ot as h,Ye as i,De as j,Fe as k,lt as l,tt as m,Je as n,Qe as o,nt as p,Xe as r,$e as s,ut as t,it as u,Ke as v,J as w,He as x,We as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$i as e}from"./player-overlays-BOsDheHc.js";var t=e(`circle-slash`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`9`,x2:`15`,y1:`15`,y2:`9`,key:`1dfufj`}]]);export{t};
|