@camera.ui/server 0.0.102 → 0.0.103
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/interface/assets/{404-DcjTOtsn.js → 404-C4HBXE9H.js} +1 -1
- package/dist/interface/assets/{About-Z0xjt2an.js → About-BB65Lzts.js} +1 -1
- package/dist/interface/assets/{Adminpanel-jJdM9Wyf.js → Adminpanel-DksrdOX6.js} +1 -1
- package/dist/interface/assets/{Automation-dKVxSYor.js → Automation-DSyCezSx.js} +2 -2
- package/dist/interface/assets/{Automations-D9YE4Mmq.js → Automations-BqHoiN9D.js} +1 -1
- package/dist/interface/assets/{Camera-DQgI8RWI.js → Camera-BUkNxSX8.js} +2 -2
- package/dist/interface/assets/{CameraConsole-S-0rZ7xg.js → CameraConsole-B5tlzPMf.js} +1 -1
- package/dist/interface/assets/{Cameras-ZoYp56rC.js → Cameras-DnMkOoQ-.js} +1 -1
- package/dist/interface/assets/{Camview-DEvTC5Ek.js → Camview-pqMzyAGd.js} +1 -1
- package/dist/interface/assets/{Config-CX4ETkCe.js → Config-BXraGGzy.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-q5XPElmC.js → ConfigActionCameraControl-BW8EcAmD.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-CmnGOzGO.js → ConfigActionDelay-Cv1Jc4Af.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-BzMN1zFS.js → ConfigActionHttp-Exr4qXgr.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-C0Ix0ja1.js → ConfigActionImageInput-C_blNA7l.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-C40X49rY.js → ConfigActionNotification-c82sNKGj.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-qxLQ8kkv.js → ConfigActionOutput-BWWI1I05.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-D7aHqRD-.js → ConfigActionPlugin-C-ssa_L8.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-DM3KQ7TG.js → ConfigActionSensor-D84c6MGM.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-CIgxyJPp.js → ConfigActionSnapshot-gVinlxno.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-JBtt43a-.js → ConfigActionVariable-BSQEmP0j.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-Brr7stVC.js → ConfigConditionIfElse-C9741PPm.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-oRHcSSxf.js → ConfigConditionSensorState-BaTq_Nw9.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-CXtazUQ7.js → ConfigConditionSwitch-BlGjAB9K.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-TXuc_jcO.js → ConfigConditionTime-Drt82ljn.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-DPoXuR2T.js → ConfigTriggerDetection-CsMfvz0e.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-BvL4NSXf.js → ConfigTriggerGeofence-BDw4zW_P.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerManual-C33HC8lS.js → ConfigTriggerManual-Bq8BSgf-.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-cNoINZGa.js → ConfigTriggerSchedule-BBH8-VaZ.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-LK0fUaLN.js → ConfigTriggerSensor-DqT2GK2o.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-DDfsEWhh.js → ConfigTriggerSystem-wbIuPI0Y.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-a5sLrKRg.js → ConfigTriggerWebhook-B-8yle9W.js} +1 -1
- package/dist/interface/assets/{Console-D5AmMyfF.js → Console-CI1H4Qzv.js} +1 -1
- package/dist/interface/assets/{CuiActionButton-Duxc-trM.js → CuiActionButton-DGHrQXSc.js} +1 -1
- package/dist/interface/assets/{CuiAvatar-gGQZX4H6.js → CuiAvatar-BNZbtuaI.js} +1 -1
- package/dist/interface/assets/{CuiBBoxPlayground-DMRP_V2x.js → CuiBBoxPlayground-_SGm4cz1.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-BcfVSQXw.js +1 -0
- package/dist/interface/assets/{CuiBottomSheet-GcX2wd-j.js → CuiBottomSheet-VX6AuCso.js} +1 -1
- package/dist/interface/assets/{CuiCameraCard-Byn8vdEF.js → CuiCameraCard-BEGdNbhj.js} +1 -1
- package/dist/interface/assets/{CuiCameraPipCard-CP7mDdEc.js → CuiCameraPipCard-DpAujrhA.js} +1 -1
- package/dist/interface/assets/{CuiCameraRecordings-8YcPmj62.js → CuiCameraRecordings-BRVbZCzz.js} +1 -1
- package/dist/interface/assets/{CuiCameraShares-Ds7Ydvga.js → CuiCameraShares-dY9bxWdp.js} +1 -1
- package/dist/interface/assets/{CuiCameraSnapshot-BYCOw5NR.js → CuiCameraSnapshot-DvIhxEdj.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-rfiEjzzY.js → CuiCameraTable-Ykb8p1Tt.js} +1 -1
- package/dist/interface/assets/{CuiDataTable-DjKY2rAJ.js → CuiDataTable-DyzBmfqA.js} +1 -1
- package/dist/interface/assets/{CuiFloatingButton-BaAiuemi.js → CuiFloatingButton-B4byvsOs.js} +1 -1
- package/dist/interface/assets/{CuiImage-Cy4cCbB9.js → CuiImage-C0GGnNA9.js} +1 -1
- package/dist/interface/assets/{CuiMenu-CMnBfV9C.js → CuiMenu-KizSc3du.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-Dp0o4UCK.js → CuiPluginCard-DpllCJXe.js} +2 -2
- package/dist/interface/assets/{CuiPluginOAuthButton-Dn1i7Rc3.js → CuiPluginOAuthButton--Jp3Q0A3.js} +2 -2
- package/dist/interface/assets/{CuiQRCode-DqdRNve_.js → CuiQRCode-D2hEZT9L.js} +1 -1
- package/dist/interface/assets/{CuiRecordingsGrid-SU4cdMt3.js → CuiRecordingsGrid-BdcRMu0G.js} +1 -1
- package/dist/interface/assets/{CuiSchema-DVgwhbCy.js → CuiSchema-CkgT_tmr.js} +1 -1
- package/dist/interface/assets/{CuiTopNavbarItem-CR5y7dIk.js → CuiTopNavbarItem-DdZ2xZLa.js} +1 -1
- package/dist/interface/assets/{CuiTopbarSlot-BhsSSnaB.js → CuiTopbarSlot-BlbZqDDn.js} +1 -1
- package/dist/interface/assets/{Faces-DbKr3KHJ.js → Faces-BkETqRJ6.js} +1 -1
- package/dist/interface/assets/{FirstSteps-D7VNyJkR.js → FirstSteps-BilLeQ5G.js} +1 -1
- package/dist/interface/assets/{Instances-WgUL_c_X.js → Instances-BdSaPTUA.js} +1 -1
- package/dist/interface/assets/{Logs-C_tUhDiu.js → Logs-Dgi4WIz_.js} +1 -1
- package/dist/interface/assets/{Menu-B35lIrxn.js → Menu-CaUSuqY2.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-CuO4R9Tn.js → OAuthDeviceFlow-CX8VE9Op.js} +1 -1
- package/dist/interface/assets/{Plugin-Dt8qBsaL.js → Plugin-DiJY8ovk.js} +1 -1
- package/dist/interface/assets/{PluginConsole-C1Z3x7YJ.js → PluginConsole-B6YqeO05.js} +1 -1
- package/dist/interface/assets/{PluginSchema-BZgbOuMK.js → PluginSchema-g4Srx0FS.js} +1 -1
- package/dist/interface/assets/{Plugins-D5u8MyuS.js → Plugins-CMvoQGbI.js} +2 -2
- package/dist/interface/assets/{Recordings-27qcMkav.js → Recordings-CRZXMXeZ.js} +1 -1
- package/dist/interface/assets/{Settings-CfRWx2Bw.js → Settings-B5CPx04W.js} +1 -1
- package/dist/interface/assets/SettingsAccount-6i4VetmY.js +1 -0
- package/dist/interface/assets/{SettingsAccount-D0T_E5PY.js → SettingsAccount-BfZ8sdKS.js} +1 -1
- package/dist/interface/assets/{SettingsAppearance-TIxspygn.js → SettingsAppearance-CI7FpIXv.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-wh2bqft_.js +1 -0
- package/dist/interface/assets/{SettingsBackup-DrU_jvQQ.js → SettingsBackup-BybcQ1Qu.js} +1 -1
- package/dist/interface/assets/{SettingsNotifications-t-7QlO5J.js → SettingsNotifications-wtu6QB4B.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-Dk4XuZZx.js → SettingsRecordings-CUAdt-gW.js} +1 -1
- package/dist/interface/assets/{SettingsRemote-DG-DoCw6.js → SettingsRemote-CfMbi4U2.js} +1 -1
- package/dist/interface/assets/{SettingsSystem-B1-BrqF3.js → SettingsSystem-uDcUCmqx.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-C83HeCtY.js → SettingsUsers-DQD7uvLD.js} +1 -1
- package/dist/interface/assets/{Terminal-MSCRrILf.js → Terminal-BCqT206D.js} +1 -1
- package/dist/interface/assets/{VariableInput-Ccm5WyUF.js → VariableInput-B6XB9GPi.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-C2VQPcx4.js → VariableSuggestions-Bz3FsUVi.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-B5D1agkJ.js → VersionsHandler-XIP-8qdF.js} +1 -1
- package/dist/interface/assets/{Workers-iOl-KSYM.js → Workers-n0R8LJrp.js} +1 -1
- package/dist/interface/assets/api-CLcqLYO9.js +2 -0
- package/dist/interface/assets/{api-Clb3q6BS.js → api-CPYyBUl4.js} +1 -1
- package/dist/interface/assets/{auth-Dz4uNiDV.js → auth-BQz6cI2B.js} +1 -1
- package/dist/interface/assets/{automations-Brf6t3Bl.js → automations-Cz8XYNjF.js} +1 -1
- package/dist/interface/assets/{automations-Bbg_E0fP.js → automations-DuP9VcsG.js} +1 -1
- package/dist/interface/assets/{backup-DGUIWswX.js → backup-CHJcbko5.js} +1 -1
- package/dist/interface/assets/{cameras-Dz5UZpc3.js → cameras-BOHWrQm2.js} +1 -1
- package/dist/interface/assets/{cameras.schema-reb8bxRi.js → cameras.schema-DGaqX6vz.js} +1 -1
- package/dist/interface/assets/cloudHandoff-9LBU5i-Q.js +1 -0
- package/dist/interface/assets/{deviceId-D99ZUAFS.js → deviceId-B9H0nPQf.js} +1 -1
- package/dist/interface/assets/{hasPermission-D44ci-iH.js → hasPermission-BHM3xbrG.js} +1 -1
- package/dist/interface/assets/{instances-Cb6K1-mb.js → instances-8zX84KmH.js} +1 -1
- package/dist/interface/assets/{locale-BncIew1V.js → locale-DXhDcKlE.js} +1 -1
- package/dist/interface/assets/{main-5UsNmqPQ.js → main-CZoUmEEu.js} +2 -2
- package/dist/interface/assets/{notifications-CMZQ-2Mu.js → notifications-DpmIWiCl.js} +1 -1
- package/dist/interface/assets/{plugins-B5zOpwk5.js → plugins-BWlFg8TN.js} +1 -1
- package/dist/interface/assets/{round-restart-alt-BnQ65jUB.js → round-restart-alt-CRc-4ova.js} +1 -1
- package/dist/interface/assets/router-CYuS11OS.js +2 -0
- package/dist/interface/assets/{routerState-B8-atCZl.js → routerState-BIdUnXLb.js} +1 -1
- package/dist/interface/assets/{server-D9bvACdr.js → server-B3_iwGek.js} +1 -1
- package/dist/interface/assets/{shares-KWDL38x0.js → shares-DgzHTM68.js} +1 -1
- package/dist/interface/assets/{theme-C5VbiFUN.js → theme-BDv_45d8.js} +1 -1
- package/dist/interface/assets/{types-BD1lhOds.js → types-DZNoDDGr.js} +1 -1
- package/dist/interface/assets/{ui-DhLpf0gJ.js → ui-DSOnsqS6.js} +1 -1
- package/dist/interface/assets/{useBiometricCredentials-DkHplqIW.js → useBiometricCredentials-CIfX40Td.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-B7sUfzcj.js → useCameraOptions-C_h2n9yn.js} +1 -1
- package/dist/interface/assets/{useCuiCameraDrawer-Cm1CzGPT.js → useCuiCameraDrawer-Ca6U-GzM.js} +1 -1
- package/dist/interface/assets/{useCuiDialog-nDtDuLq-.js → useCuiDialog-C-2PMjxH.js} +1 -1
- package/dist/interface/assets/{useFileDownload-BGGtfpvc.js → useFileDownload-DntU1WW7.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-D6H2UEA3.js → useLogsSocket-R2SaD_bg.js} +1 -1
- package/dist/interface/assets/{useSharedComposables-SA61SVjO.js → useSharedComposables-CzkF-tst.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-BvExqanR.js → useStreamStatus-DFQPLtc1.js} +1 -1
- package/dist/interface/assets/{users.schema-DLRKvt0q.js → users.schema-Oy4QkALa.js} +1 -1
- package/dist/interface/assets/{vendor-cameraui-lEA-78Jn.js → vendor-cameraui-D-WYtlxb.js} +38 -38
- package/dist/interface/assets/{vendor-core-Dqc843Zs.js → vendor-core-CWeZebhd.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-DST-0Ea0.js → vendor-primevue-01WhBsPb.js} +1 -1
- package/dist/interface/assets/{view-grid-CGwcQ9EA.js → view-grid-RH-li4l6.js} +1 -1
- package/dist/interface/index.html +40 -40
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +4 -4
- package/dist/server/src/api/plugins/natsSubFirewall.d.ts +21 -0
- package/dist/server/src/api/plugins/natsSubFirewall.js +122 -0
- package/dist/server/src/api/plugins/natsSubFirewall.js.map +1 -0
- package/dist/server/src/api/plugins/proxy.plugin.js +68 -24
- package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.js +2 -2
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/camera/controller.js +1 -1
- package/dist/server/src/camera/controller.js.map +1 -1
- package/package.json +4 -4
- package/dist/interface/assets/CuiBottomSheet-BVnrlt1Q.js +0 -1
- package/dist/interface/assets/SettingsAccount-DTPk6AO-.js +0 -1
- package/dist/interface/assets/SettingsAppearance-B0g7xaoM.js +0 -1
- package/dist/interface/assets/api-DhzCRVL5.js +0 -2
- package/dist/interface/assets/cloudHandoff-Bc2179n6.js +0 -1
- package/dist/interface/assets/router-CliwduXG.js +0 -2
- /package/dist/interface/assets/{error-256-DLKVOU2S.png → logo-512-DLKVOU2S.png} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{At as e,F as t,Oi as n,Ri as r,U as i}from"./vendor-cameraui-lEA-78Jn.js";import{C as a,F as o,M as s,N as c,O as l,T as u,f as d,x as f}from"./api-DhzCRVL5.js";import{$n as p,F as m,I as h,Tn as g,Xn as _,Xt as v,Zt as y,en as b,er as x,sr as S,z as C}from"./vendor-CUsAwmr-.js";import{d as w,l as T}from"./vendor-core-Dqc843Zs.js";import{t as E}from"./hasPermission-D44ci-iH.js";import{t as ee}from"./useCuiDialog-nDtDuLq-.js";var D={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function O(e,t){return g(),b(`svg`,D,[...t[0]||=[y(`path`,{fill:`currentColor`,d:`M20.916 9.564a1 1 0 0 0-.513-1.316L7.328 2.492c-.995-.438-2.22.051-2.645 1.042l-2.21 5.154a2 2 0 0 0 1.052 2.624L9.563 13.9L8.323 17H4v-3H2v8h2v-3h4.323c.823 0 1.552-.494 1.856-1.258l1.222-3.054l5.205 2.23a1 1 0 0 0 1.31-.517l.312-.71l1.701.68l2-5l-1.536-.613zm-4.434 5.126L4.313 9.475l2.208-5.152l12.162 5.354z`},null,-1)]])}var k=_({name:`bx-cctv`,render:O}),A={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function j(e,t){return g(),b(`svg`,A,[...t[0]||=[y(`path`,{fill:`currentColor`,d:`M20 3H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2m-5 5h-2V6h2zm4 0h-2V6h2zm1 5H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2m-5 5h-2v-2h2zm4 0h-2v-2h2z`},null,-1)]])}var M=_({name:`bxs-server`,render:j});async function N(e){return(await s.get(`/instances`,{signal:e})).data}async function P(e){return(await s.post(`/instances`,e)).data}async function F({id:e,data:t}){return(await s.put(`/instances/${e}`,t)).data}async function I(e){await s.delete(`/instances/${e}`)}async function L(e){return(await s.patch(`/instances/${e}/favorite`)).data}async function R(e){return(await s.post(`/instances/${e}/login`)).data}async function z(e,t){return(await s.get(`/instances/${e}/status`,{signal:t})).data}var B=class{_queryClient=C();toast=a();t=u.global.t;listQuery(){return f({queryKey:[`instances`],queryFn:({signal:e})=>N(e)})}statusQueries(e){return h({queries:v(()=>S(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>z(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return m({mutationFn:P,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return m({mutationFn:F,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return m({mutationFn:async e=>{await I(e),await this._queryClient.cancelQueries({queryKey:[`instances`,e,`status`]}),this._queryClient.removeQueries({queryKey:[`instances`,e,`status`]})},onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.removed`),life:3e3})}})}toggleFavoriteMutation(){return m({mutationFn:L,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return m({mutationFn:R,onError:()=>{}})}},V=3e4,H=5e3,U=`__home__`,W=new Set([`localhost`,`127.0.0.1`,`::1`]),G=l(`Instances`);async function K(e,t){try{let n=AbortSignal.timeout(H),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return G.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return G.debug(`[probe]`,`${e} → FAIL`,n),!1}}function q(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function te(e,t){return{_id:t?._id??``,username:t?.username??``,email:t?.email,role:t?.role??``,firstLogin:t?.firstLogin,avatar:t?.avatar,access_token:e.access,refresh_token:e.refresh??``,token_type:`Bearer`,access_token_expires_at:e.accessExpiresAt??0,refresh_token_expires_at:e.refreshExpiresAt??0,internalAddresses:[],externalAddresses:[]}}var J=w(`instances`,()=>{let s=d(),l=T(),f=a(),m=ee(),h=C(),{t:g}=u.global,_=n(`instanceTokens`,{}),y=n(`activeInstanceId`,null),b=x(!1),S=x(null),w=x(0),D=0,O=x(null),k=x([]),A=r(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),j=v(()=>y.value===null),M=v(()=>y.value===null?null:k.value.find(e=>e.id===y.value)?.url??null);async function z(){try{if(!E(void 0,`admin`))return;let e=await N();k.value=e.instances,O.value=e.homeId,G.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){G.warn(`[fetch]`,`failed`,e)}}let B=v(()=>{let e=O.value;return k.value.filter(t=>!(e&&t.remoteHomeId&&t.remoteHomeId===e)).map(e=>{let t=_.value[e.id];return{id:e.id,name:e.name,url:e.url,hasCredentials:!!e.credentials,favorite:e.favorite??!0,userData:t?.userData??null,lastConnectedAt:t?.lastConnectedAt??null,isHome:!1}})});function H(){let e=_.value[U],t=y.value===null?c().target.value?.endpoint.url??e?.url??window.location.origin:e?.url??window.location.origin;return{id:`home`,name:g(`navigation.home`),url:t,hasCredentials:!1,favorite:!1,userData:e?.userData??null,lastConnectedAt:e?.lastConnectedAt??null,isHome:!0}}let J=v(()=>{if(y.value!==null){let e=B.value.find(e=>e.id===y.value);if(e)return e}return H()}),Y=v(()=>B.value.filter(e=>e.favorite)),X=v(()=>Y.value.length>0||y.value!==null||A.value!==null);function Z(e){return k.value.find(t=>t.id===e)?.favorite??!0}async function ne(e){let{favorite:t}=await L(e),n=k.value.find(t=>t.id===e);n&&(n.favorite=t)}async function re(e){let t=await P(e);return k.value=[...k.value,t],t}async function ie(e){await I(e),k.value=k.value.filter(t=>t.id!==e),delete _.value[e]}async function ae(e,t){let n=await F({id:e,data:t}),r=k.value.findIndex(t=>t.id===e);r!==-1&&(k.value[r]=n)}async function oe(e,t){let n=k.value.find(t=>t.id===e);return n?K(n.url,t):!1}function Q(){let e=c().target.value;if(!e?.tokens.access){G.debug(`[save-tokens]`,`skipped — no live access token`);return}let t=y.value??U;_.value[t]={userData:te(e.tokens,s.user??void 0),lastConnectedAt:Date.now(),url:e.endpoint.url},G.debug(`[save-tokens]`,`slot=${t} url=${e.endpoint.url}`)}function se(){if(y.value===null){o.value=null,G.debug(`[restore-override]`,`no active instance — home target`);return}let e=_.value[y.value],t=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;o.value=t,G.debug(`[restore-override]`,`activeId=${y.value} → ${t??`no cached url`}`)}async function ce(n){if(b.value){G.warn(`[switch]`,`ignored — another switch is already in progress`);return}let r=n===null?H():B.value.find(e=>e.id===n)??H();if(n!==null&&$(r.url)&&!await ue(r.name)){G.debug(`[switch]`,`URL handoff declined by user`);return}let a=++D;b.value=!0,S.value=r.name,G.debug(`[switch]`,`START targetId=${n??`home`} gen=${a}`),G.debug(`[switch]`,`target resolved — name="${r.name}" url=${r.url} hasCreds=${r.hasCredentials}`);try{if(n!==null){let e=await K(r.url);if(a!==D){G.debug(`[switch]`,`aborted after probe — newer gen=${D}`);return}if(!e){G.warn(`[switch]`,`target unreachable — ${r.url}`),f.add({severity:`warn`,detail:g(`instances.unreachable`,{name:r.name}),life:3e3});return}}let u=null;if(n!==null&&r.hasCredentials)try{u=await R(n),G.debug(`[switch]`,`backend relay login OK`)}catch(e){G.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(a!==D){G.debug(`[switch]`,`aborted after relay-login — newer gen=${D}`);return}Q();let d=n??U,p=u?q(u):le(d);if(G.debug(`[switch]`,`tokens source: ${u?`fresh`:p?`cached`:`none`} (slot=${d})`),n!==null&&$(r.url)){G.debug(`[switch]`,`URL handoff required — leaving SPA`),await de(r,u);return}let m=c();if(m.reset(),G.debug(`[switch]`,`kernel RESET`),e(),i(),t(),h.clear(),G.debug(`[switch]`,`vue-query cleared`),y.value=n,o.value=n===null?null:r.url,G.debug(`[switch]`,`activeId=${n} instanceOverride=${o.value??`null`}`),p&&u&&(_.value[d]={userData:u,lastConnectedAt:Date.now(),url:r.url},s.user={_id:u._id,username:u.username,role:u.role,firstLogin:u.firstLogin,avatar:u.avatar}),p){let e={url:r.url,mode:`direct-lan`,priority:0};G.debug(`[switch]`,`seedAndRetry → ${e.url}`),await Promise.race([m.seedAndRetry({endpoint:e,tokens:p},n??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),V))])}else{G.warn(`[switch]`,`no tokens — boot + route to login`),m.boot(n??`home`),s.user=null,l.push(`/`);return}if(a!==D){G.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${D}`);return}w.value++,G.debug(`[switch]`,`DONE gen=${a} → /home`),l.push(`/home`)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(G.error(`[switch]`,`TIMEOUT after ${V}ms`),f.add({severity:`error`,detail:g(`instances.switch_timeout`,{name:S.value??``}),life:3e3})):(G.error(`[switch]`,`failed`,e),f.add({severity:`error`,detail:e,life:3e3}))}finally{a===D&&(b.value=!1,S.value=null)}}function le(e){let t=_.value[e];return t?.userData?.access_token?q(t.userData):null}function $(e){try{let t=new URL(e),n=new URL(window.location.origin),r=n.protocol===`https:`&&t.protocol===`http:`,i=W.has(t.hostname)&&!W.has(n.hostname);return r||i}catch{return!1}}function ue(e){return G.warn(`[switch]`,`target "${e}" requires URL handoff — asking user confirmation`),new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};m.openTextDialog({data:{title:g(`instances.insecure_handoff_title`),confirmText:g(`instances.insecure_handoff_confirm`),contentText:g(`instances.insecure_handoff_message`,{name:e}),confirmButtonProps:{severity:`danger`}},onConfirm:()=>r(!0),onCancel:()=>r(!1)})})}async function de(e,t){let n={_reset:!0,_sourceUrl:window.location.origin,_instanceName:e.name};t&&Object.assign(n,t);let r=encodeURIComponent(btoa(JSON.stringify(n))),i=`${e.url.split(`#`)[0]}#auth=${r}`;G.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){_.value={},y.value=null,o.value=null,A.value=null,k.value=[],O.value=null,G.debug(`[reset]`,`store cleared`)}return{instances:B,activeInstance:J,activeId:y,activeUrl:M,isHomeActive:j,isMultiInstance:X,isSwitching:p(b),switchTargetName:p(S),switchKey:p(w),serverHomeId:O,redirectInfo:A,serverInstances:k,instanceTokens:_,favoriteInstances:Y,isFavorite:Z,toggleFavorite:ne,fetchInstances:z,addInstance:re,removeInstance:ie,updateInstance:ae,switchInstance:ce,probeInstance:oe,reset:fe,saveCurrentTokens:Q,restoreActiveOverride:se}});export{k as i,B as n,M as r,J as t};
|
|
1
|
+
import{At as e,F as t,Oi as n,Ri as r,U as i}from"./vendor-cameraui-D-WYtlxb.js";import{C as a,F as o,M as s,N as c,O as l,T as u,f as d,x as f}from"./api-CLcqLYO9.js";import{$n as p,F as m,I as h,Tn as g,Xn as _,Xt as v,Zt as y,en as b,er as x,sr as S,z as C}from"./vendor-CUsAwmr-.js";import{d as w,l as T}from"./vendor-core-CWeZebhd.js";import{t as E}from"./hasPermission-BHM3xbrG.js";import{t as ee}from"./useCuiDialog-C-2PMjxH.js";var D={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function O(e,t){return g(),b(`svg`,D,[...t[0]||=[y(`path`,{fill:`currentColor`,d:`M20.916 9.564a1 1 0 0 0-.513-1.316L7.328 2.492c-.995-.438-2.22.051-2.645 1.042l-2.21 5.154a2 2 0 0 0 1.052 2.624L9.563 13.9L8.323 17H4v-3H2v8h2v-3h4.323c.823 0 1.552-.494 1.856-1.258l1.222-3.054l5.205 2.23a1 1 0 0 0 1.31-.517l.312-.71l1.701.68l2-5l-1.536-.613zm-4.434 5.126L4.313 9.475l2.208-5.152l12.162 5.354z`},null,-1)]])}var k=_({name:`bx-cctv`,render:O}),A={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function j(e,t){return g(),b(`svg`,A,[...t[0]||=[y(`path`,{fill:`currentColor`,d:`M20 3H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2m-5 5h-2V6h2zm4 0h-2V6h2zm1 5H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2m-5 5h-2v-2h2zm4 0h-2v-2h2z`},null,-1)]])}var M=_({name:`bxs-server`,render:j});async function N(e){return(await s.get(`/instances`,{signal:e})).data}async function P(e){return(await s.post(`/instances`,e)).data}async function F({id:e,data:t}){return(await s.put(`/instances/${e}`,t)).data}async function I(e){await s.delete(`/instances/${e}`)}async function L(e){return(await s.patch(`/instances/${e}/favorite`)).data}async function R(e){return(await s.post(`/instances/${e}/login`)).data}async function z(e,t){return(await s.get(`/instances/${e}/status`,{signal:t})).data}var B=class{_queryClient=C();toast=a();t=u.global.t;listQuery(){return f({queryKey:[`instances`],queryFn:({signal:e})=>N(e)})}statusQueries(e){return h({queries:v(()=>S(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>z(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return m({mutationFn:P,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return m({mutationFn:F,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return m({mutationFn:async e=>{await I(e),await this._queryClient.cancelQueries({queryKey:[`instances`,e,`status`]}),this._queryClient.removeQueries({queryKey:[`instances`,e,`status`]})},onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.removed`),life:3e3})}})}toggleFavoriteMutation(){return m({mutationFn:L,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return m({mutationFn:R,onError:()=>{}})}},V=3e4,H=5e3,U=`__home__`,W=new Set([`localhost`,`127.0.0.1`,`::1`]),G=l(`Instances`);async function K(e,t){try{let n=AbortSignal.timeout(H),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return G.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return G.debug(`[probe]`,`${e} → FAIL`,n),!1}}function q(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function te(e,t){return{_id:t?._id??``,username:t?.username??``,email:t?.email,role:t?.role??``,firstLogin:t?.firstLogin,avatar:t?.avatar,access_token:e.access,refresh_token:e.refresh??``,token_type:`Bearer`,access_token_expires_at:e.accessExpiresAt??0,refresh_token_expires_at:e.refreshExpiresAt??0,internalAddresses:[],externalAddresses:[]}}var J=w(`instances`,()=>{let s=d(),l=T(),f=a(),m=ee(),h=C(),{t:g}=u.global,_=n(`instanceTokens`,{}),y=n(`activeInstanceId`,null),b=x(!1),S=x(null),w=x(0),D=0,O=x(null),k=x([]),A=r(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),j=v(()=>y.value===null),M=v(()=>y.value===null?null:k.value.find(e=>e.id===y.value)?.url??null);async function z(){try{if(!E(void 0,`admin`))return;let e=await N();k.value=e.instances,O.value=e.homeId,G.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){G.warn(`[fetch]`,`failed`,e)}}let B=v(()=>{let e=O.value;return k.value.filter(t=>!(e&&t.remoteHomeId&&t.remoteHomeId===e)).map(e=>{let t=_.value[e.id];return{id:e.id,name:e.name,url:e.url,hasCredentials:!!e.credentials,favorite:e.favorite??!0,userData:t?.userData??null,lastConnectedAt:t?.lastConnectedAt??null,isHome:!1}})});function H(){let e=_.value[U],t=y.value===null?c().target.value?.endpoint.url??e?.url??window.location.origin:e?.url??window.location.origin;return{id:`home`,name:g(`navigation.home`),url:t,hasCredentials:!1,favorite:!1,userData:e?.userData??null,lastConnectedAt:e?.lastConnectedAt??null,isHome:!0}}let J=v(()=>{if(y.value!==null){let e=B.value.find(e=>e.id===y.value);if(e)return e}return H()}),Y=v(()=>B.value.filter(e=>e.favorite)),X=v(()=>Y.value.length>0||y.value!==null||A.value!==null);function Z(e){return k.value.find(t=>t.id===e)?.favorite??!0}async function ne(e){let{favorite:t}=await L(e),n=k.value.find(t=>t.id===e);n&&(n.favorite=t)}async function re(e){let t=await P(e);return k.value=[...k.value,t],t}async function ie(e){await I(e),k.value=k.value.filter(t=>t.id!==e),delete _.value[e]}async function ae(e,t){let n=await F({id:e,data:t}),r=k.value.findIndex(t=>t.id===e);r!==-1&&(k.value[r]=n)}async function oe(e,t){let n=k.value.find(t=>t.id===e);return n?K(n.url,t):!1}function Q(){let e=c().target.value;if(!e?.tokens.access){G.debug(`[save-tokens]`,`skipped — no live access token`);return}let t=y.value??U;_.value[t]={userData:te(e.tokens,s.user??void 0),lastConnectedAt:Date.now(),url:e.endpoint.url},G.debug(`[save-tokens]`,`slot=${t} url=${e.endpoint.url}`)}function se(){if(y.value===null){o.value=null,G.debug(`[restore-override]`,`no active instance — home target`);return}let e=_.value[y.value],t=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;o.value=t,G.debug(`[restore-override]`,`activeId=${y.value} → ${t??`no cached url`}`)}async function ce(n){if(b.value){G.warn(`[switch]`,`ignored — another switch is already in progress`);return}let r=n===null?H():B.value.find(e=>e.id===n)??H();if(n!==null&&$(r.url)&&!await ue(r.name)){G.debug(`[switch]`,`URL handoff declined by user`);return}let a=++D;b.value=!0,S.value=r.name,G.debug(`[switch]`,`START targetId=${n??`home`} gen=${a}`),G.debug(`[switch]`,`target resolved — name="${r.name}" url=${r.url} hasCreds=${r.hasCredentials}`);try{if(n!==null){let e=await K(r.url);if(a!==D){G.debug(`[switch]`,`aborted after probe — newer gen=${D}`);return}if(!e){G.warn(`[switch]`,`target unreachable — ${r.url}`),f.add({severity:`warn`,detail:g(`instances.unreachable`,{name:r.name}),life:3e3});return}}let u=null;if(n!==null&&r.hasCredentials)try{u=await R(n),G.debug(`[switch]`,`backend relay login OK`)}catch(e){G.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(a!==D){G.debug(`[switch]`,`aborted after relay-login — newer gen=${D}`);return}Q();let d=n??U,p=u?q(u):le(d);if(G.debug(`[switch]`,`tokens source: ${u?`fresh`:p?`cached`:`none`} (slot=${d})`),n!==null&&$(r.url)){G.debug(`[switch]`,`URL handoff required — leaving SPA`),await de(r,u);return}let m=c();if(m.reset(),G.debug(`[switch]`,`kernel RESET`),e(),i(),t(),h.clear(),G.debug(`[switch]`,`vue-query cleared`),y.value=n,o.value=n===null?null:r.url,G.debug(`[switch]`,`activeId=${n} instanceOverride=${o.value??`null`}`),p&&u&&(_.value[d]={userData:u,lastConnectedAt:Date.now(),url:r.url},s.user={_id:u._id,username:u.username,role:u.role,firstLogin:u.firstLogin,avatar:u.avatar}),p){let e={url:r.url,mode:`direct-lan`,priority:0};G.debug(`[switch]`,`seedAndRetry → ${e.url}`),await Promise.race([m.seedAndRetry({endpoint:e,tokens:p},n??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),V))])}else{G.warn(`[switch]`,`no tokens — boot + route to login`),m.boot(n??`home`),s.user=null,l.push(`/`);return}if(a!==D){G.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${D}`);return}w.value++,G.debug(`[switch]`,`DONE gen=${a} → /home`),l.push(`/home`)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(G.error(`[switch]`,`TIMEOUT after ${V}ms`),f.add({severity:`error`,detail:g(`instances.switch_timeout`,{name:S.value??``}),life:3e3})):(G.error(`[switch]`,`failed`,e),f.add({severity:`error`,detail:e,life:3e3}))}finally{a===D&&(b.value=!1,S.value=null)}}function le(e){let t=_.value[e];return t?.userData?.access_token?q(t.userData):null}function $(e){try{let t=new URL(e),n=new URL(window.location.origin),r=n.protocol===`https:`&&t.protocol===`http:`,i=W.has(t.hostname)&&!W.has(n.hostname);return r||i}catch{return!1}}function ue(e){return G.warn(`[switch]`,`target "${e}" requires URL handoff — asking user confirmation`),new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};m.openTextDialog({data:{title:g(`instances.insecure_handoff_title`),confirmText:g(`instances.insecure_handoff_confirm`),contentText:g(`instances.insecure_handoff_message`,{name:e}),confirmButtonProps:{severity:`danger`}},onConfirm:()=>r(!0),onCancel:()=>r(!1)})})}async function de(e,t){let n={_reset:!0,_sourceUrl:window.location.origin,_instanceName:e.name};t&&Object.assign(n,t);let r=encodeURIComponent(btoa(JSON.stringify(n))),i=`${e.url.split(`#`)[0]}#auth=${r}`;G.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){_.value={},y.value=null,o.value=null,A.value=null,k.value=[],O.value=null,G.debug(`[reset]`,`store cleared`)}return{instances:B,activeInstance:J,activeId:y,activeUrl:M,isHomeActive:j,isMultiInstance:X,isSwitching:p(b),switchTargetName:p(S),switchKey:p(w),serverHomeId:O,redirectInfo:A,serverInstances:k,instanceTokens:_,favoriteInstances:Y,isFavorite:Z,toggleFavorite:ne,fetchInstances:z,addInstance:re,removeInstance:ie,updateInstance:ae,switchInstance:ce,probeInstance:oe,reset:fe,saveCurrentTokens:Q,restoreActiveOverride:se}});export{k as i,B as n,M as r,J as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Oi as e}from"./vendor-cameraui-
|
|
1
|
+
import{Oi as e}from"./vendor-cameraui-D-WYtlxb.js";import{T as t,w as n}from"./api-CLcqLYO9.js";import{_ as r,er as i,v as a,zn as o}from"./vendor-CUsAwmr-.js";import{d as s}from"./vendor-core-CWeZebhd.js";import{t as c}from"./useElectron-mh8HQUAI.js";import{b as l}from"./vendor-primevue-01WhBsPb.js";var u={de:a,en:r},d=s(`locale`,()=>{let r=e(`locale`,`en`),a=i(n),s=l(),{electron:d}=c(),f=t.global;function p(e){d?.send(`change-language`,e),f.locale.value=e}async function m(e){let t=u[e];t&&(s.config.locale=t)}return o(r,e=>{p(e),m(e)}),p(r.value),m(r.value),{languages:a,locale:r,setI18Nlocale:p,setPrimeVueLocale:m}});export{d as t};
|