@camera.ui/server 0.0.94 → 0.0.95
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-BvpgHGlA.js → 404-Clo6qjGo.js} +1 -1
- package/dist/interface/assets/{About-BCNMNyg8.js → About-Bfjj72u5.js} +1 -1
- package/dist/interface/assets/{Adminpanel-B0OTwlea.js → Adminpanel-B_SQSHyD.js} +1 -1
- package/dist/interface/assets/{Automation-BTp9IgO9.js → Automation-CQm0ZHfh.js} +2 -2
- package/dist/interface/assets/{Automations-DYnpW6sZ.js → Automations-Dbs6NMx-.js} +1 -1
- package/dist/interface/assets/{Camera-BaYP1YDU.js → Camera-CTIUE1PX.js} +2 -2
- package/dist/interface/assets/{CameraConsole-BdmOe5_y.js → CameraConsole-BQVlxqb1.js} +1 -1
- package/dist/interface/assets/{Cameras-BX1vYQf1.js → Cameras-CyZMjvQu.js} +1 -1
- package/dist/interface/assets/{Camview-WKrFnWE_.js → Camview-BnpJaGfI.js} +1 -1
- package/dist/interface/assets/{Config-MiH-DMPP.js → Config-Dc7jeUIy.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-DY9lfyb-.js → ConfigActionCameraControl-aMa-699v.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-BzoTjUZt.js → ConfigActionNotification-D_4Y919Q.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-DdXWHgcG.js → ConfigActionPlugin-DMAUig6Q.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-D8_z1S-I.js → ConfigActionSensor-DuHOX22J.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-BImtQaNm.js → ConfigActionSnapshot-Dtde_3hQ.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-BiZJOBjM.js → ConfigConditionSensorState-CyPhwS7K.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-Cd7sZk8S.js → ConfigTriggerDetection-C7RtR75f.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-qhLKaH1I.js → ConfigTriggerGeofence-CDU2jx7z.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-fn74bD5T.js → ConfigTriggerSensor-t0MTHl1T.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-C6tHuU5p.js → ConfigTriggerSystem-DXCusYWo.js} +1 -1
- package/dist/interface/assets/{Console-CouprsTc.js → Console-D32_FF2q.js} +1 -1
- package/dist/interface/assets/{CuiAvatar-4mQ1VfCP.js → CuiAvatar-DQfgB_0j.js} +1 -1
- package/dist/interface/assets/{CuiBottomSheet-k8Zb5XD1.js → CuiBottomSheet-Cgbt7aQP.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-HO59nDTz.js +1 -0
- package/dist/interface/assets/{CuiCameraCard-CGhZ-FYr.js → CuiCameraCard-BJpi9GYb.js} +1 -1
- package/dist/interface/assets/{CuiCameraPipCard-BzzOZlKR.js → CuiCameraPipCard-CLa09t5W.js} +1 -1
- package/dist/interface/assets/{CuiCameraRecordings-vljiYHz7.js → CuiCameraRecordings-DbPr4N27.js} +1 -1
- package/dist/interface/assets/{CuiCameraShares-kPpvCTUH.js → CuiCameraShares-BCTN3Ie-.js} +1 -1
- package/dist/interface/assets/{CuiCameraSnapshot-BWDbpVN7.js → CuiCameraSnapshot-fX1tTzWs.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-C8X20w8S.js → CuiCameraTable-DMKLoisE.js} +1 -1
- package/dist/interface/assets/{CuiImage-CJBGhAfQ.js → CuiImage-Ab94PYIg.js} +1 -1
- package/dist/interface/assets/{CuiMenu-DhzA8fK1.js → CuiMenu-CX2XxBmg.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-cbmwOjLF.js → CuiPluginCard-DQXny68Q.js} +2 -2
- package/dist/interface/assets/{CuiPluginOAuthButton-Dn87Ix6E.js → CuiPluginOAuthButton-BvRVOPAt.js} +2 -2
- package/dist/interface/assets/{CuiQRCode-CMROqC15.js → CuiQRCode-DOVuTNfQ.js} +1 -1
- package/dist/interface/assets/{CuiRecordingsGrid-BkA9YcHq.js → CuiRecordingsGrid-CS01gjpz.js} +1 -1
- package/dist/interface/assets/{CuiSchema-BeMqdQ_W.js → CuiSchema-L35JTZ5Y.js} +1 -1
- package/dist/interface/assets/{Faces-CNRBtzW7.js → Faces-DLdVxTYg.js} +1 -1
- package/dist/interface/assets/{FirstSteps-CNuVbY5-.js → FirstSteps-c4m_l-s9.js} +1 -1
- package/dist/interface/assets/{Instances-CrUVwyDT.js → Instances-BE8EkRQ4.js} +1 -1
- package/dist/interface/assets/{Menu-DMCqoiJX.js → Menu-BK9rk_sp.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-DVHqJJ0-.js → OAuthDeviceFlow-DwoyMn6e.js} +1 -1
- package/dist/interface/assets/{Plugin-4QhPU2z5.js → Plugin-B4UvyHA4.js} +1 -1
- package/dist/interface/assets/{PluginConsole-BGcYTBBP.js → PluginConsole-00dw-HUB.js} +1 -1
- package/dist/interface/assets/{PluginSchema-BsQbR0zX.js → PluginSchema-7qwKEn6c.js} +1 -1
- package/dist/interface/assets/{Plugins-B5g1RJAK.js → Plugins-CFXvg0P-.js} +2 -2
- package/dist/interface/assets/{Recordings-KHQAIrEW.js → Recordings-MSRod46b.js} +1 -1
- package/dist/interface/assets/{Settings-DRsnud_Q.js → Settings-CnGCN9cC.js} +1 -1
- package/dist/interface/assets/SettingsAccount-DoFSZhI5.js +1 -0
- package/dist/interface/assets/{SettingsAccount-DySpU4el.js → SettingsAccount-lIy74Kjh.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-DA8ON3Ts.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-CGdPmMkM.js → SettingsAppearance-DLnlx8bM.js} +1 -1
- package/dist/interface/assets/{SettingsBackup-BmGR_7CF.js → SettingsBackup-CpBqig7H.js} +1 -1
- package/dist/interface/assets/{SettingsNotifications-BVKeFwwT.js → SettingsNotifications-di325j-b.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-Dr9-c7f7.js → SettingsRecordings-DvNlji2N.js} +1 -1
- package/dist/interface/assets/{SettingsRemote-ht_onhMJ.js → SettingsRemote-Kb-ichM0.js} +1 -1
- package/dist/interface/assets/{SettingsSystem-B0UMgWbE.js → SettingsSystem-C0OHXycw.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-Bb1juUy8.js → SettingsUsers-Dx8Fm2QE.js} +1 -1
- package/dist/interface/assets/{Terminal-DvvXgMu-.js → Terminal-BR9InMiL.js} +1 -1
- package/dist/interface/assets/VersionsHandler-J7N_cZBS.js +7 -0
- package/dist/interface/assets/{Workers-D_wZn8hC.js → Workers-BINNsLDU.js} +1 -1
- package/dist/interface/assets/{api-DbOpzNbt.js → api-D23Y8GEd.js} +1 -1
- package/dist/interface/assets/api-DjhIYzsF.js +2 -0
- package/dist/interface/assets/{auth-C14L3iEn.js → auth-CeN6oTgU.js} +1 -1
- package/dist/interface/assets/{automations-BwTCZACp.js → automations-G3fWqK-C.js} +1 -1
- package/dist/interface/assets/{backup-I44o7LfB.js → backup-KFYNv85J.js} +1 -1
- package/dist/interface/assets/{cameras-CJU6PhVu.js → cameras-DeAGPYqb.js} +1 -1
- package/dist/interface/assets/cloudHandoff-Di9OHN7W.js +1 -0
- package/dist/interface/assets/copy-16-filled-DUaht4LK.js +1 -0
- package/dist/interface/assets/{deviceId-3kTQbnbi.js → deviceId-CgRNCVsl.js} +1 -1
- package/dist/interface/assets/{hasPermission-CuUcJNef.js → hasPermission-nr9uI1sh.js} +1 -1
- package/dist/interface/assets/{instances-fJJkMjZZ.js → instances-Cz4DJwNc.js} +1 -1
- package/dist/interface/assets/{locale-JdE3H3At.js → locale-fNpCK2bH.js} +1 -1
- package/dist/interface/assets/{main-smWr0ZCq.js → main-sGc9j7q_.js} +2 -2
- package/dist/interface/assets/{notifications-BHvHIRSM.js → notifications-euShmBTH.js} +1 -1
- package/dist/interface/assets/{plugins-C6jbSDXS.js → plugins-DsiC2cVL.js} +1 -1
- package/dist/interface/assets/{round-restart-alt-CNkzBawa.js → round-restart-alt-AXgxJgvx.js} +1 -1
- package/dist/interface/assets/{router-BZ7fTrv9.js → router-BLvVFGz9.js} +2 -2
- package/dist/interface/assets/{server-BBHyrnAu.js → server-CfW4FWmD.js} +1 -1
- package/dist/interface/assets/{shares-DQJerWK4.js → shares-CifP6qUz.js} +1 -1
- package/dist/interface/assets/{theme-B2nITMtK.js → theme-3K07RHLA.js} +1 -1
- package/dist/interface/assets/{useBiometricCredentials-wKhzGV-q.js → useBiometricCredentials-DS-lOPkp.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-CtBJS7bp.js → useCameraOptions-CO9VqYVT.js} +1 -1
- package/dist/interface/assets/{useCuiDialog-Bp7p3zLy.js → useCuiDialog-BlhSS0jk.js} +1 -1
- package/dist/interface/assets/{useFileDownload-CBx3wVDu.js → useFileDownload-DEM9UhjP.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-BTa94fXn.js → useLogsSocket-CNAQ1g8I.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-Dj6ybIhF.js → useStreamStatus-Bn6gxutk.js} +1 -1
- package/dist/interface/assets/{view-grid-CstDugYR.js → view-grid-Cg2Wk0qw.js} +1 -1
- package/dist/interface/index.html +26 -26
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +9 -5
- package/dist/server/src/api/controllers/plugins.controller.d.ts +0 -1
- package/dist/server/src/api/controllers/plugins.controller.js +22 -108
- package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
- package/dist/server/src/api/controllers/server.controller.js +2 -13
- package/dist/server/src/api/controllers/server.controller.js.map +1 -1
- package/dist/server/src/api/services/backup.service.js.map +1 -1
- package/dist/server/src/api/services/instances.service.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.d.ts +0 -2
- package/dist/server/src/api/services/plugins.service.js +10 -111
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.d.ts +0 -2
- package/dist/server/src/api/websocket/nsp/server.js +17 -90
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/utils/npm/auth.d.ts +2 -0
- package/dist/server/src/utils/npm/auth.js +54 -0
- package/dist/server/src/utils/npm/auth.js.map +1 -0
- package/dist/server/src/utils/npm/index.d.ts +44 -0
- package/dist/server/src/utils/npm/index.js +115 -0
- package/dist/server/src/utils/npm/index.js.map +1 -0
- package/package.json +9 -5
- package/dist/interface/assets/CuiBottomSheet-FXwjLm5t.js +0 -1
- package/dist/interface/assets/SettingsAccount-Cny3sanY.js +0 -1
- package/dist/interface/assets/SettingsAppearance-DvKlfkfH.js +0 -1
- package/dist/interface/assets/VersionsHandler-BkjcICiT.js +0 -7
- package/dist/interface/assets/api-Tan5u5QZ.js +0 -2
- package/dist/interface/assets/cloudHandoff-AW0MqbxU.js +0 -1
- package/dist/interface/assets/copy-16-filled-CG924HKI.js +0 -1
- /package/dist/interface/assets/{logo-512-DLKVOU2S.png → error-256-DLKVOU2S.png} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,N as t,S as n,b as r,d as i,j as a,w as o}from"./api-Tan5u5QZ.js";import{$n as s,$t as c,F as l,I as u,Qn as d,Xt as f,Yn as p,Yt as m,or as h,wn as g,z as _}from"./vendor-TwHhULaP.js";import{Di as v,J as ee,Li as y,O as b,kt as x}from"./vendor-cameraui-CeENiq5U.js";import{d as S,l as C}from"./vendor-core-D8xC2dee.js";import{t as te}from"./hasPermission-CuUcJNef.js";import{t as w}from"./useCuiDialog-Bp7p3zLy.js";var T={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function E(e,t){return g(),c(`svg`,T,[...t[0]||=[f(`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 D=p({name:`bx-cctv`,render:E}),O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(e,t){return g(),c(`svg`,O,[...t[0]||=[f(`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 A=p({name:`bxs-server`,render:k});async function j(t){return(await e.get(`/instances`,{signal:t})).data}async function M(t){return(await e.post(`/instances`,t)).data}async function N({id:t,data:n}){return(await e.put(`/instances/${t}`,n)).data}async function P(t){await e.delete(`/instances/${t}`)}async function F(t){return(await e.patch(`/instances/${t}/favorite`)).data}async function I(t){return(await e.post(`/instances/${t}/login`)).data}async function L(t,n){return(await e.get(`/instances/${t}/status`,{signal:n})).data}var R=class{_queryClient=_();toast=n();t=o.global.t;listQuery(){return r({queryKey:[`instances`],queryFn:({signal:e})=>j(e)})}statusQueries(e){return u({queries:m(()=>h(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>L(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return l({mutationFn:M,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return l({mutationFn:N,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return l({mutationFn:async e=>{await P(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 l({mutationFn:F,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return l({mutationFn:I,onError:()=>{}})}};function z(e){let{prefix:t,enabled:n}=e;function r(e,r,i,a){if(!n)return;let o=new Date,s=`[${t} ${String(o.getHours()).padStart(2,`0`)}:${String(o.getMinutes()).padStart(2,`0`)}:${String(o.getSeconds()).padStart(2,`0`)}.${String(o.getMilliseconds()).padStart(3,`0`)}]`;a===void 0?console[e](s,`[${r}]`,i):console[e](s,`[${r}]`,i,a)}return{info:(e,t,n)=>r(`log`,e,t,n),event:(e,t,n)=>r(`log`,e,`[Event] ${t}`,n),warn:(e,t,n)=>r(`warn`,e,t,n),error:(e,t,n)=>r(`error`,e,t,n)}}var B=3e4,V=5e3,H=`__home__`,U=new Set([`localhost`,`127.0.0.1`,`::1`]),W=z({prefix:`Instances`,enabled:!0});async function G(e,t){try{let n=AbortSignal.timeout(V),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return W.event(`probe`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return W.event(`probe`,`${e} → FAIL`,n),!1}}function K(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function q(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=S(`instances`,()=>{let e=i(),r=C(),c=n(),l=w(),u=_(),{t:f}=o.global,p=v(`instanceTokens`,{}),h=v(`activeInstanceId`,null),g=s(!1),S=s(null),T=s(0),E=0,D=s(null),O=s([]),k=y(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),A=m(()=>h.value===null),L=m(()=>h.value===null?null:O.value.find(e=>e.id===h.value)?.url??null);async function R(){try{if(!te(void 0,`admin`))return;let e=await j();O.value=e.instances,D.value=e.homeId,W.info(`fetch`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){W.warn(`fetch`,`failed`,e)}}let z=m(()=>{let e=D.value;return O.value.filter(t=>!(e&&t.remoteHomeId&&t.remoteHomeId===e)).map(e=>{let t=p.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 V(){let e=p.value[H],t=h.value===null?a().target.value?.endpoint.url??e?.url??window.location.origin:e?.url??window.location.origin;return{id:`home`,name:f(`navigation.home`),url:t,hasCredentials:!1,favorite:!1,userData:e?.userData??null,lastConnectedAt:e?.lastConnectedAt??null,isHome:!0}}let J=m(()=>{if(h.value!==null){let e=z.value.find(e=>e.id===h.value);if(e)return e}return V()}),Y=m(()=>z.value.filter(e=>e.favorite)),X=m(()=>Y.value.length>0||h.value!==null||k.value!==null);function Z(e){return O.value.find(t=>t.id===e)?.favorite??!0}async function ne(e){let{favorite:t}=await F(e),n=O.value.find(t=>t.id===e);n&&(n.favorite=t)}async function re(e){let t=await M(e);return O.value=[...O.value,t],t}async function ie(e){await P(e),O.value=O.value.filter(t=>t.id!==e),delete p.value[e]}async function ae(e,t){let n=await N({id:e,data:t}),r=O.value.findIndex(t=>t.id===e);r!==-1&&(O.value[r]=n)}async function oe(e,t){let n=O.value.find(t=>t.id===e);return n?G(n.url,t):!1}function Q(){let t=a().target.value;if(!t?.tokens.access){W.event(`save-tokens`,`skipped — no live access token`);return}let n=h.value??H;p.value[n]={userData:q(t.tokens,e.user??void 0),lastConnectedAt:Date.now(),url:t.endpoint.url},W.event(`save-tokens`,`slot=${n} url=${t.endpoint.url}`)}function se(){if(h.value===null){t.value=null,W.event(`restore-override`,`no active instance — home target`);return}let e=p.value[h.value],n=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;t.value=n,W.event(`restore-override`,`activeId=${h.value} → ${n??`no cached url`}`)}async function ce(n){if(g.value){W.warn(`switch`,`ignored — another switch is already in progress`);return}let i=n===null?V():z.value.find(e=>e.id===n)??V();if(n!==null&&$(i.url)&&!await ue(i.name)){W.info(`switch`,`URL handoff declined by user`);return}let o=++E;g.value=!0,S.value=i.name,W.info(`switch`,`START targetId=${n??`home`} gen=${o}`),W.info(`switch`,`target resolved — name="${i.name}" url=${i.url} hasCreds=${i.hasCredentials}`);try{if(n!==null){let e=await G(i.url);if(o!==E){W.event(`switch`,`aborted after probe — newer gen=${E}`);return}if(!e){W.warn(`switch`,`target unreachable — ${i.url}`),c.add({severity:`warn`,detail:f(`instances.unreachable`,{name:i.name}),life:3e3});return}}let s=null;if(n!==null&&i.hasCredentials)try{s=await I(n),W.event(`switch`,`backend relay login OK`)}catch(e){W.warn(`switch`,`backend relay login FAILED — will try cached tokens`,e)}if(o!==E){W.event(`switch`,`aborted after relay-login — newer gen=${E}`);return}Q();let l=n??H,d=s?K(s):le(l);if(W.event(`switch`,`tokens source: ${s?`fresh`:d?`cached`:`none`} (slot=${l})`),n!==null&&$(i.url)){W.info(`switch`,`URL handoff required — leaving SPA`),await de(i,s);return}let m=a();if(m.reset(),W.event(`switch`,`kernel RESET`),x(),b(),ee(),u.clear(),W.event(`switch`,`vue-query cleared`),h.value=n,t.value=n===null?null:i.url,W.event(`switch`,`activeId=${n} instanceOverride=${t.value??`null`}`),d&&s&&(p.value[l]={userData:s,lastConnectedAt:Date.now(),url:i.url},e.user={_id:s._id,username:s.username,role:s.role,firstLogin:s.firstLogin,avatar:s.avatar}),d){let e={url:i.url,mode:`direct-lan`,priority:0};W.info(`switch`,`seedAndRetry → ${e.url}`),await Promise.race([m.seedAndRetry({endpoint:e,tokens:d},n??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),B))])}else{W.warn(`switch`,`no tokens — boot + route to login`),m.boot(n??`home`),e.user=null,r.push(`/`);return}if(o!==E){W.event(`switch`,`aborted after seedAndRetry — newer gen=${E}`);return}T.value++,W.info(`switch`,`DONE gen=${o} → /home`),r.push(`/home`)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(W.error(`switch`,`TIMEOUT after ${B}ms`),c.add({severity:`error`,detail:f(`instances.switch_timeout`,{name:S.value??``}),life:3e3})):(W.error(`switch`,`failed`,e),c.add({severity:`error`,detail:e,life:3e3}))}finally{o===E&&(g.value=!1,S.value=null)}}function le(e){let t=p.value[e];return t?.userData?.access_token?K(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=U.has(t.hostname)&&!U.has(n.hostname);return r||i}catch{return!1}}function ue(e){return W.warn(`switch`,`target "${e}" requires URL handoff — asking user confirmation`),new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};l.openTextDialog({data:{title:f(`instances.insecure_handoff_title`),confirmText:f(`instances.insecure_handoff_confirm`),contentText:f(`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}`;W.info(`url-handoff`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){p.value={},h.value=null,t.value=null,k.value=null,O.value=[],D.value=null,W.info(`reset`,`store cleared`)}return{instances:z,activeInstance:J,activeId:h,activeUrl:L,isHomeActive:A,isMultiInstance:X,isSwitching:d(g),switchTargetName:d(S),switchKey:d(T),serverHomeId:D,redirectInfo:k,serverInstances:O,instanceTokens:p,favoriteInstances:Y,isFavorite:Z,toggleFavorite:ne,fetchInstances:R,addInstance:re,removeInstance:ie,updateInstance:ae,switchInstance:ce,probeInstance:oe,reset:fe,saveCurrentTokens:Q,restoreActiveOverride:se}});export{D as a,A as i,z as n,R as r,J as t};
|
|
1
|
+
import{A as e,N as t,S as n,b as r,d as i,j as a,w as o}from"./api-DjhIYzsF.js";import{$n as s,$t as c,F as l,I as u,Qn as d,Xt as f,Yn as p,Yt as m,or as h,wn as g,z as _}from"./vendor-TwHhULaP.js";import{Di as v,J as ee,Li as y,O as b,kt as x}from"./vendor-cameraui-CeENiq5U.js";import{d as S,l as C}from"./vendor-core-D8xC2dee.js";import{t as te}from"./hasPermission-nr9uI1sh.js";import{t as w}from"./useCuiDialog-BlhSS0jk.js";var T={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function E(e,t){return g(),c(`svg`,T,[...t[0]||=[f(`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 D=p({name:`bx-cctv`,render:E}),O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(e,t){return g(),c(`svg`,O,[...t[0]||=[f(`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 A=p({name:`bxs-server`,render:k});async function j(t){return(await e.get(`/instances`,{signal:t})).data}async function M(t){return(await e.post(`/instances`,t)).data}async function N({id:t,data:n}){return(await e.put(`/instances/${t}`,n)).data}async function P(t){await e.delete(`/instances/${t}`)}async function F(t){return(await e.patch(`/instances/${t}/favorite`)).data}async function I(t){return(await e.post(`/instances/${t}/login`)).data}async function L(t,n){return(await e.get(`/instances/${t}/status`,{signal:n})).data}var R=class{_queryClient=_();toast=n();t=o.global.t;listQuery(){return r({queryKey:[`instances`],queryFn:({signal:e})=>j(e)})}statusQueries(e){return u({queries:m(()=>h(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>L(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return l({mutationFn:M,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return l({mutationFn:N,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return l({mutationFn:async e=>{await P(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 l({mutationFn:F,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return l({mutationFn:I,onError:()=>{}})}};function z(e){let{prefix:t,enabled:n}=e;function r(e,r,i,a){if(!n)return;let o=new Date,s=`[${t} ${String(o.getHours()).padStart(2,`0`)}:${String(o.getMinutes()).padStart(2,`0`)}:${String(o.getSeconds()).padStart(2,`0`)}.${String(o.getMilliseconds()).padStart(3,`0`)}]`;a===void 0?console[e](s,`[${r}]`,i):console[e](s,`[${r}]`,i,a)}return{info:(e,t,n)=>r(`log`,e,t,n),event:(e,t,n)=>r(`log`,e,`[Event] ${t}`,n),warn:(e,t,n)=>r(`warn`,e,t,n),error:(e,t,n)=>r(`error`,e,t,n)}}var B=3e4,V=5e3,H=`__home__`,U=new Set([`localhost`,`127.0.0.1`,`::1`]),W=z({prefix:`Instances`,enabled:!0});async function G(e,t){try{let n=AbortSignal.timeout(V),r=t?AbortSignal.any([n,t]):n,i=await fetch(`${e}/api/health`,{signal:r});return W.event(`probe`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return W.event(`probe`,`${e} → FAIL`,n),!1}}function K(e){return{access:e.access_token,accessExpiresAt:e.access_token_expires_at,refresh:e.refresh_token,refreshExpiresAt:e.refresh_token_expires_at}}function q(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=S(`instances`,()=>{let e=i(),r=C(),c=n(),l=w(),u=_(),{t:f}=o.global,p=v(`instanceTokens`,{}),h=v(`activeInstanceId`,null),g=s(!1),S=s(null),T=s(0),E=0,D=s(null),O=s([]),k=y(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),A=m(()=>h.value===null),L=m(()=>h.value===null?null:O.value.find(e=>e.id===h.value)?.url??null);async function R(){try{if(!te(void 0,`admin`))return;let e=await j();O.value=e.instances,D.value=e.homeId,W.info(`fetch`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){W.warn(`fetch`,`failed`,e)}}let z=m(()=>{let e=D.value;return O.value.filter(t=>!(e&&t.remoteHomeId&&t.remoteHomeId===e)).map(e=>{let t=p.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 V(){let e=p.value[H],t=h.value===null?a().target.value?.endpoint.url??e?.url??window.location.origin:e?.url??window.location.origin;return{id:`home`,name:f(`navigation.home`),url:t,hasCredentials:!1,favorite:!1,userData:e?.userData??null,lastConnectedAt:e?.lastConnectedAt??null,isHome:!0}}let J=m(()=>{if(h.value!==null){let e=z.value.find(e=>e.id===h.value);if(e)return e}return V()}),Y=m(()=>z.value.filter(e=>e.favorite)),X=m(()=>Y.value.length>0||h.value!==null||k.value!==null);function Z(e){return O.value.find(t=>t.id===e)?.favorite??!0}async function ne(e){let{favorite:t}=await F(e),n=O.value.find(t=>t.id===e);n&&(n.favorite=t)}async function re(e){let t=await M(e);return O.value=[...O.value,t],t}async function ie(e){await P(e),O.value=O.value.filter(t=>t.id!==e),delete p.value[e]}async function ae(e,t){let n=await N({id:e,data:t}),r=O.value.findIndex(t=>t.id===e);r!==-1&&(O.value[r]=n)}async function oe(e,t){let n=O.value.find(t=>t.id===e);return n?G(n.url,t):!1}function Q(){let t=a().target.value;if(!t?.tokens.access){W.event(`save-tokens`,`skipped — no live access token`);return}let n=h.value??H;p.value[n]={userData:q(t.tokens,e.user??void 0),lastConnectedAt:Date.now(),url:t.endpoint.url},W.event(`save-tokens`,`slot=${n} url=${t.endpoint.url}`)}function se(){if(h.value===null){t.value=null,W.event(`restore-override`,`no active instance — home target`);return}let e=p.value[h.value],n=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;t.value=n,W.event(`restore-override`,`activeId=${h.value} → ${n??`no cached url`}`)}async function ce(n){if(g.value){W.warn(`switch`,`ignored — another switch is already in progress`);return}let i=n===null?V():z.value.find(e=>e.id===n)??V();if(n!==null&&$(i.url)&&!await ue(i.name)){W.info(`switch`,`URL handoff declined by user`);return}let o=++E;g.value=!0,S.value=i.name,W.info(`switch`,`START targetId=${n??`home`} gen=${o}`),W.info(`switch`,`target resolved — name="${i.name}" url=${i.url} hasCreds=${i.hasCredentials}`);try{if(n!==null){let e=await G(i.url);if(o!==E){W.event(`switch`,`aborted after probe — newer gen=${E}`);return}if(!e){W.warn(`switch`,`target unreachable — ${i.url}`),c.add({severity:`warn`,detail:f(`instances.unreachable`,{name:i.name}),life:3e3});return}}let s=null;if(n!==null&&i.hasCredentials)try{s=await I(n),W.event(`switch`,`backend relay login OK`)}catch(e){W.warn(`switch`,`backend relay login FAILED — will try cached tokens`,e)}if(o!==E){W.event(`switch`,`aborted after relay-login — newer gen=${E}`);return}Q();let l=n??H,d=s?K(s):le(l);if(W.event(`switch`,`tokens source: ${s?`fresh`:d?`cached`:`none`} (slot=${l})`),n!==null&&$(i.url)){W.info(`switch`,`URL handoff required — leaving SPA`),await de(i,s);return}let m=a();if(m.reset(),W.event(`switch`,`kernel RESET`),x(),b(),ee(),u.clear(),W.event(`switch`,`vue-query cleared`),h.value=n,t.value=n===null?null:i.url,W.event(`switch`,`activeId=${n} instanceOverride=${t.value??`null`}`),d&&s&&(p.value[l]={userData:s,lastConnectedAt:Date.now(),url:i.url},e.user={_id:s._id,username:s.username,role:s.role,firstLogin:s.firstLogin,avatar:s.avatar}),d){let e={url:i.url,mode:`direct-lan`,priority:0};W.info(`switch`,`seedAndRetry → ${e.url}`),await Promise.race([m.seedAndRetry({endpoint:e,tokens:d},n??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),B))])}else{W.warn(`switch`,`no tokens — boot + route to login`),m.boot(n??`home`),e.user=null,r.push(`/`);return}if(o!==E){W.event(`switch`,`aborted after seedAndRetry — newer gen=${E}`);return}T.value++,W.info(`switch`,`DONE gen=${o} → /home`),r.push(`/home`)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(W.error(`switch`,`TIMEOUT after ${B}ms`),c.add({severity:`error`,detail:f(`instances.switch_timeout`,{name:S.value??``}),life:3e3})):(W.error(`switch`,`failed`,e),c.add({severity:`error`,detail:e,life:3e3}))}finally{o===E&&(g.value=!1,S.value=null)}}function le(e){let t=p.value[e];return t?.userData?.access_token?K(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=U.has(t.hostname)&&!U.has(n.hostname);return r||i}catch{return!1}}function ue(e){return W.warn(`switch`,`target "${e}" requires URL handoff — asking user confirmation`),new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};l.openTextDialog({data:{title:f(`instances.insecure_handoff_title`),confirmText:f(`instances.insecure_handoff_confirm`),contentText:f(`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}`;W.info(`url-handoff`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){p.value={},h.value=null,t.value=null,k.value=null,O.value=[],D.value=null,W.info(`reset`,`store cleared`)}return{instances:z,activeInstance:J,activeId:h,activeUrl:L,isHomeActive:A,isMultiInstance:X,isSwitching:d(g),switchTargetName:d(S),switchKey:d(T),serverHomeId:D,redirectInfo:k,serverInstances:O,instanceTokens:p,favoriteInstances:Y,isFavorite:Z,toggleFavorite:ne,fetchInstances:R,addInstance:re,removeInstance:ie,updateInstance:ae,switchInstance:ce,probeInstance:oe,reset:fe,saveCurrentTokens:Q,restoreActiveOverride:se}});export{D as a,A as i,z as n,R as r,J as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,w as t}from"./api-
|
|
1
|
+
import{C as e,w as t}from"./api-DjhIYzsF.js";import{$n as n,Rn as r,_ as i,v as a}from"./vendor-TwHhULaP.js";import{Di as o}from"./vendor-cameraui-CeENiq5U.js";import{d as s}from"./vendor-core-D8xC2dee.js";import{t as c}from"./useElectron-mh8HQUAI.js";import{b as l}from"./vendor-primevue-D-xm-xIu.js";var u={de:a,en:i},d=s(`locale`,()=>{let i=o(`locale`,`en`),a=n(e),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 r(i,e=>{p(e),m(e)}),p(i.value),m(i.value),{languages:a,locale:i,setI18Nlocale:p,setPrimeVueLocale:m}});export{d as t};
|