@camera.ui/server 2.0.6 → 2.0.8
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-ekmIpFW1.js → 404-Bwt4L1PJ.js} +1 -1
- package/dist/interface/assets/{About-CvajU0JT.js → About-DXvLHUof.js} +1 -1
- package/dist/interface/assets/Adminpanel-BIcl_Mwn.js +1 -0
- package/dist/interface/assets/Automation-DZIieg3O.js +2 -0
- package/dist/interface/assets/{AutomationImport-U7r6BcW_.js → AutomationImport-BlBlNStY.js} +2 -2
- package/dist/interface/assets/{AutomationStore-DZBtLuIs.js → AutomationStore-CkSq2Gra.js} +2 -2
- package/dist/interface/assets/{AutomationStoreDetail-BXpOtPMl.js → AutomationStoreDetail-BT1wMcK2.js} +2 -2
- package/dist/interface/assets/{Automations-DGHcWJ0h.js → Automations-DSeK-PfA.js} +2 -2
- package/dist/interface/assets/Camera-osDYTJPw.js +2 -0
- package/dist/interface/assets/{CameraConsole-DPI9LjVK.js → CameraConsole-DGQ3V0iM.js} +1 -1
- package/dist/interface/assets/Cameras-DNsE3_T0.js +652 -0
- package/dist/interface/assets/Camview-Dpe-mn9j.js +1 -0
- package/dist/interface/assets/{Config-B1ZKVfMn.js → Config-o6JSaUcr.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-BHKVJQqx.js → ConfigActionCameraControl-N-w9YidE.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-BS1vLvDQ.js → ConfigActionDelay-1kd69ysm.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-BKlRdtJr.js → ConfigActionHttp-qUm57oW4.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-DveJ7oK8.js → ConfigActionImageInput-Cr8faOB5.js} +1 -1
- package/dist/interface/assets/ConfigActionMqtt-uRSh5B2A.js +1 -0
- package/dist/interface/assets/{ConfigActionNotification-Cn3qFFiK.js → ConfigActionNotification-DrWQGvXh.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-Bg6d4zFD.js → ConfigActionOutput-NPiNPB7G.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-u-_sCQs9.js → ConfigActionPlugin-fETPjKeY.js} +1 -1
- package/dist/interface/assets/ConfigActionSensor-BU01CTIY.js +1 -0
- package/dist/interface/assets/{ConfigActionSnapshot-DN4UC9jz.js → ConfigActionSnapshot-MHiUaSA7.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-Yufao52p.js → ConfigActionVariable-Du5R50EA.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-X9Sf0RwG.js → ConfigConditionIfElse-DjNPMKsc.js} +1 -1
- package/dist/interface/assets/ConfigConditionSensorState-CAAfaSvc.js +1 -0
- package/dist/interface/assets/{ConfigConditionSwitch-B4OICWxL.js → ConfigConditionSwitch-Dfr-9vLZ.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-DRhAEuuC.js → ConfigConditionTime-Ce8AortY.js} +1 -1
- package/dist/interface/assets/ConfigSensorValueInput-MZiAptuc.js +1 -0
- package/dist/interface/assets/{ConfigTriggerDetection-CzI4hgRA.js → ConfigTriggerDetection-Cv22vFn6.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-BtPyKte4.js +1 -0
- package/dist/interface/assets/{ConfigTriggerManual-Jjh7ZhyC.js → ConfigTriggerManual-DZPdLXoe.js} +1 -1
- package/dist/interface/assets/ConfigTriggerMqtt-p4FUGJg6.js +1 -0
- package/dist/interface/assets/{ConfigTriggerSchedule-Dr6ALguI.js → ConfigTriggerSchedule-DQX6czW4.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-DLxdw9Fd.js → ConfigTriggerSensor-BrYITWwc.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-DYDpUWwi.js → ConfigTriggerSystem-DJ0lU8F0.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-DiW3cwjT.js → ConfigTriggerWebhook-Czyo2Bs-.js} +1 -1
- package/dist/interface/assets/Console-ChT_3diZ.js +1 -0
- package/dist/interface/assets/{CuiActionButton-iNuXCl7_.js → CuiActionButton-BAlSwXzv.js} +1 -1
- package/dist/interface/assets/{CuiAvatar-B1PdXoLS.js → CuiAvatar-1UQTTFMr.js} +1 -1
- package/dist/interface/assets/{CuiBBoxPlayground-BJYeyVTF.js → CuiBBoxPlayground-yYOBCXTq.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-1GDyn88O.js +1 -0
- package/dist/interface/assets/{CuiBottomSheet-B57WDcr5.js → CuiBottomSheet-D1F_ll0S.js} +1 -1
- package/dist/interface/assets/CuiCameraCard-8iX_qqBM.js +1 -0
- package/dist/interface/assets/{CuiCameraPipCard-BAOlD5uq.js → CuiCameraPipCard-ULjqsCqF.js} +1 -1
- package/dist/interface/assets/CuiCameraRecordings-D2SS0ZeD.js +1 -0
- package/dist/interface/assets/{CuiCameraShares-CMzYmZt7.js → CuiCameraShares-DoX75x2g.js} +1 -1
- package/dist/interface/assets/{CuiCameraSnapshot-BcJfNxnj.js → CuiCameraSnapshot-Duouoet1.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-CmyHU7oP.js → CuiCameraTable-BZbdmy4s.js} +2 -2
- package/dist/interface/assets/{CuiDataTable-Cd1jvrN0.js → CuiDataTable-CB7aMmp9.js} +1 -1
- package/dist/interface/assets/{CuiFloatingButton-B3_fNyCP.js → CuiFloatingButton-DdI-E8dh.js} +1 -1
- package/dist/interface/assets/{CuiImage-BupeZIam.js → CuiImage-BVVPyvep.js} +1 -1
- package/dist/interface/assets/{CuiMenu-C-rnBf9W.js → CuiMenu-D9y4WDoP.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-Cs3gCugA.js → CuiPluginCard-BkhKzqHn.js} +2 -2
- package/dist/interface/assets/{CuiPluginCategoryChip-D_ICXcvd.js → CuiPluginCategoryChip-yMnZpSGr.js} +1 -1
- package/dist/interface/assets/{CuiPluginOAuthButton-B1e0NCmA.js → CuiPluginOAuthButton-BzoWSejV.js} +2 -2
- package/dist/interface/assets/{CuiPluginTrustBadge-CuxXssET.js → CuiPluginTrustBadge-Bcnptf84.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-46CN267y.js → CuiQRCode-CBD3pXKm.js} +1 -1
- package/dist/interface/assets/CuiRecordingsGrid-C7b258rk.js +1 -0
- package/dist/interface/assets/{CuiRecordingsGrid-DRBC07wN.css → CuiRecordingsGrid-COHg3ZCT.css} +1 -1
- package/dist/interface/assets/CuiSchema-sipNW_5x.js +1 -0
- package/dist/interface/assets/{CuiTopNavbarItem-CmnJEc_r.js → CuiTopNavbarItem--MOi9UUw.js} +1 -1
- package/dist/interface/assets/{CuiTopbarSlot-T_pdxsit.js → CuiTopbarSlot-Bcw46PzA.js} +1 -1
- package/dist/interface/assets/Faces-BV-dx0a6.js +1 -0
- package/dist/interface/assets/FirstSteps-L8ko4cum.js +1 -0
- package/dist/interface/assets/{Instances-CXPH9NdC.js → Instances-CWdIVekg.js} +1 -1
- package/dist/interface/assets/{Logs-jN6cBnCk.js → Logs-DjtSfpCe.js} +1 -1
- package/dist/interface/assets/{Menu-BhWV3vKB.js → Menu-Ci8FIulr.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-XfU0jZ6x.js → OAuthDeviceFlow-bevFeCiw.js} +1 -1
- package/dist/interface/assets/Plugin-DYR_1oRT.js +1 -0
- package/dist/interface/assets/{PluginConsole-DoeboO_n.js → PluginConsole-C8GuAzBZ.js} +1 -1
- package/dist/interface/assets/PluginDetail-BsIkPUY8.css +1 -0
- package/dist/interface/assets/PluginDetail-COgvgpQg.js +2 -0
- package/dist/interface/assets/{PluginSchema-BD-rLvro.js → PluginSchema-DM406ULU.js} +1 -1
- package/dist/interface/assets/PluginSearch-DowK0yhn.js +2 -0
- package/dist/interface/assets/PluginSearch-dkPdwrjj.js +1 -0
- package/dist/interface/assets/Plugins-BUgOxY_-.js +1 -0
- package/dist/interface/assets/Recordings-DO1BPBKp.css +1 -0
- package/dist/interface/assets/Recordings-DvECWzpM.js +1 -0
- package/dist/interface/assets/{Settings-BAVtA47G2.js → Settings-nhIKBth_2.js} +1 -1
- package/dist/interface/assets/SettingsAccount-B3yFFMS8.js +1 -0
- package/dist/interface/assets/{SettingsAccount-NUdKG4ow.js → SettingsAccount-Bh6QsmCo.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-CWAGTnDU.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-SLzxaqjN.js → SettingsAppearance-D9VGcz8w.js} +1 -1
- package/dist/interface/assets/SettingsBackup-kZQoQ4RY.js +1 -0
- package/dist/interface/assets/SettingsMqtt-C234dN5h.js +1 -0
- package/dist/interface/assets/{SettingsNotifications-DB4CcddP.js → SettingsNotifications-CZigp16N.js} +1 -1
- package/dist/interface/assets/SettingsRecordings-CLk_8Yeo.js +1 -0
- package/dist/interface/assets/SettingsRemote-HTQY2mvW.js +1 -0
- package/dist/interface/assets/SettingsRemote-T38YVHal.css +1 -0
- package/dist/interface/assets/SettingsSystem-D52Vn9V5.js +2 -0
- package/dist/interface/assets/{SettingsUsers-CCp_3xlV.js → SettingsUsers-CUd4VvGK.js} +1 -1
- package/dist/interface/assets/{Terminal-BHvfL8kE.js → Terminal-1yUKu_cE.js} +2 -2
- package/dist/interface/assets/VariableInput-fT57kg7f.js +1 -0
- package/dist/interface/assets/{VariableSuggestions-BbT0U9F0.js → VariableSuggestions-DwhFBKzJ.js} +1 -1
- package/dist/interface/assets/VersionsHandler-CuV7deaY.js +7 -0
- package/dist/interface/assets/{Workers-ELW90lll.js → Workers-FgWY2jig.js} +2 -2
- package/dist/interface/assets/{api-BRin642H.js → api-BkmWxHU6.js} +1 -1
- package/dist/interface/assets/api-BxUTlh4_.js +2 -0
- package/dist/interface/assets/api-C31uUd3g.css +2 -0
- package/dist/interface/assets/{auth-D5gzm869.js → auth-DZBJ2qjy.js} +1 -1
- package/dist/interface/assets/{automations-CmA6Yx5B.js → automations-BnCx_cHm.js} +1 -1
- package/dist/interface/assets/{automations-B9KDzbWq.js → automations-Dd-6vvka.js} +1 -1
- package/dist/interface/assets/{cameras-CYwpMvA8.js → cameras-C0LS9WsX.js} +1 -1
- package/dist/interface/assets/cameras.schema-B1jQYShz.js +1 -0
- package/dist/interface/assets/cloudHandoff-CHjHRMBL.js +1 -0
- package/dist/interface/assets/{config-BLaep_I5.js → config-C6KVzOJb.js} +1 -1
- package/dist/interface/assets/{deviceId-B7SNJduj.js → deviceId-DT9HiB_U.js} +1 -1
- package/dist/interface/assets/{hasPermission-FP_aMe9r.js → hasPermission-DWgF7Hjs.js} +1 -1
- package/dist/interface/assets/{instances-DWzDpyhw.js → instances-BURHqdgB.js} +1 -1
- package/dist/interface/assets/main-Dk5JAon5.js +3 -0
- package/dist/interface/assets/{main-7zIUc9Mt.css → main-ehiYxATC.css} +1 -1
- package/dist/interface/assets/nodeDefinitions-DSoFiL7W.js +1 -0
- package/dist/interface/assets/{notifications-Dae9EImK.js → notifications-CeVyOoSN.js} +1 -1
- package/dist/interface/assets/{plugins-bWz9yaCS.js → plugins-DmYBke-a.js} +1 -1
- package/dist/interface/assets/{round-restart-alt-C6zOLIvt.js → round-restart-alt-BfvIzoUm.js} +1 -1
- package/dist/interface/assets/router-Cfm3yxgM.js +2 -0
- package/dist/interface/assets/{routerState-D1WXHNt5.js → routerState-B08WcvfU.js} +1 -1
- package/dist/interface/assets/{server-Uk7xnHXH.js → server-DWE6V3df.js} +1 -1
- package/dist/interface/assets/{shares-Cz4zuZa_.js → shares-Cz-SRsRm.js} +1 -1
- package/dist/interface/assets/{theme-GXDCnY_7.js → theme-57Z8cefl.js} +1 -1
- package/dist/interface/assets/transit-connection-variant-CXkATe8I.js +1 -0
- package/dist/interface/assets/trash-can-outline-gVM4WyHG.js +1 -0
- package/dist/interface/assets/{types-jpiqSoyF.js → types-Dyn_Sb2s.js} +1 -1
- package/dist/interface/assets/{ui-DzCa9zWL.js → ui-Cv0M3koY.js} +1 -1
- package/dist/interface/assets/{useAppVersion-CqnE2uYa.js → useAppVersion-DSG8IzPH.js} +1 -1
- package/dist/interface/assets/{useBackupRestore-Dm7jUOC-.js → useBackupRestore-Cjv5ehJg.js} +1 -1
- package/dist/interface/assets/{useBiometricCredentials-DJqfT1lk.js → useBiometricCredentials-Cq0kbhwW.js} +1 -1
- package/dist/interface/assets/useCameraOptions-DBsYZ6gv.js +1 -0
- package/dist/interface/assets/{useCuiCameraDrawer-D1zCpVbQ.js → useCuiCameraDrawer-BcAYizqy.js} +1 -1
- package/dist/interface/assets/{useCuiDialog-C02Or5oR.js → useCuiDialog-BrXNUR_F.js} +1 -1
- package/dist/interface/assets/{useFileDownload-CwxydJkw.js → useFileDownload-DmEs3ezY.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-CunaH_T7.js → useLogsSocket-CochcRpr.js} +2 -2
- package/dist/interface/assets/{useServerRestart-BQO5FbNN.js → useServerRestart-7GFofrfB.js} +1 -1
- package/dist/interface/assets/{useSharedComposables-BrdI_nDH.js → useSharedComposables-ffwWlpSL.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-e7l-QLmI.js → useStreamStatus-CELgmbpk.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-CW45dNAk.js → useUpdateChannel-BscyY2G0.js} +1 -1
- package/dist/interface/assets/{useUserOptions-EhjyVt4P.js → useUserOptions-CVGaxYdb.js} +1 -1
- package/dist/interface/assets/users.schema-DiUkDzPj.js +1 -0
- package/dist/interface/assets/{vendor-cameraui-E9E7fP4y.js → vendor-cameraui-DDdtrYBn.js} +1 -1
- package/dist/interface/assets/{vendor-core-D2PMTaN3.js → vendor-core-CZuWsjWr.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-Ba4XR6PC.js → vendor-primevue-DB14kOh6.js} +80 -80
- package/dist/interface/assets/view-grid-DIwBs1jl.js +1 -0
- package/dist/interface/index.html +46 -45
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +7 -5
- package/dist/server/requirements.txt +2 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +4 -0
- package/dist/server/src/api/controllers/mqtt.controller.d.ts +10 -0
- package/dist/server/src/api/controllers/mqtt.controller.js +42 -0
- package/dist/server/src/api/controllers/mqtt.controller.js.map +1 -0
- package/dist/server/src/api/controllers/virtualsensors.controller.d.ts +11 -0
- package/dist/server/src/api/controllers/virtualsensors.controller.js +61 -0
- package/dist/server/src/api/controllers/virtualsensors.controller.js.map +1 -0
- package/dist/server/src/api/database/constants.d.ts +2 -0
- package/dist/server/src/api/database/constants.js +2 -0
- package/dist/server/src/api/database/constants.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +3 -1
- package/dist/server/src/api/database/index.js +31 -2
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +39 -1
- package/dist/server/src/api/index.d.ts +2 -0
- package/dist/server/src/api/index.js +21 -2
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/routes/index.js +4 -0
- package/dist/server/src/api/routes/index.js.map +1 -1
- package/dist/server/src/api/routes/mqtt.routes.d.ts +2 -0
- package/dist/server/src/api/routes/mqtt.routes.js +50 -0
- package/dist/server/src/api/routes/mqtt.routes.js.map +1 -0
- package/dist/server/src/api/routes/virtualsensors.routes.d.ts +2 -0
- package/dist/server/src/api/routes/virtualsensors.routes.js +63 -0
- package/dist/server/src/api/routes/virtualsensors.routes.js.map +1 -0
- package/dist/server/src/api/schemas/cameras.schema.d.ts +1 -0
- package/dist/server/src/api/schemas/cameras.schema.js +4 -2
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/mqtt.schema.d.ts +67 -0
- package/dist/server/src/api/schemas/mqtt.schema.js +53 -0
- package/dist/server/src/api/schemas/mqtt.schema.js.map +1 -0
- package/dist/server/src/api/schemas/virtualsensors.schema.d.ts +29 -0
- package/dist/server/src/api/schemas/virtualsensors.schema.js +14 -0
- package/dist/server/src/api/schemas/virtualsensors.schema.js.map +1 -0
- package/dist/server/src/api/services/cameras.service.js +3 -3
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/mqtt.service.d.ts +13 -0
- package/dist/server/src/api/services/mqtt.service.js +46 -0
- package/dist/server/src/api/services/mqtt.service.js.map +1 -0
- package/dist/server/src/api/services/virtualsensors.service.d.ts +20 -0
- package/dist/server/src/api/services/virtualsensors.service.js +151 -0
- package/dist/server/src/api/services/virtualsensors.service.js.map +1 -0
- package/dist/server/src/api/types/index.d.ts +19 -0
- package/dist/server/src/api/types/index.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.d.ts +2 -0
- package/dist/server/src/api/websocket/nsp/server.js +12 -0
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/workers.d.ts +1 -0
- package/dist/server/src/api/websocket/nsp/workers.js +3 -0
- package/dist/server/src/api/websocket/nsp/workers.js.map +1 -1
- package/dist/server/src/api.d.ts +2 -0
- package/dist/server/src/api.js +22 -3
- package/dist/server/src/api.js.map +1 -1
- package/dist/server/src/automations/actions/index.js +2 -0
- package/dist/server/src/automations/actions/index.js.map +1 -1
- package/dist/server/src/automations/actions/mqtt.d.ts +2 -0
- package/dist/server/src/automations/actions/mqtt.js +14 -0
- package/dist/server/src/automations/actions/mqtt.js.map +1 -0
- package/dist/server/src/automations/conditions/index.js +1 -0
- package/dist/server/src/automations/conditions/index.js.map +1 -1
- package/dist/server/src/automations/context.d.ts +4 -0
- package/dist/server/src/automations/context.js +17 -0
- package/dist/server/src/automations/context.js.map +1 -1
- package/dist/server/src/automations/engine.js +4 -1
- package/dist/server/src/automations/engine.js.map +1 -1
- package/dist/server/src/automations/triggers/index.d.ts +1 -0
- package/dist/server/src/automations/triggers/index.js +1 -0
- package/dist/server/src/automations/triggers/index.js.map +1 -1
- package/dist/server/src/automations/triggers/mqtt.d.ts +3 -0
- package/dist/server/src/automations/triggers/mqtt.js +19 -0
- package/dist/server/src/automations/triggers/mqtt.js.map +1 -0
- package/dist/server/src/camera/decoder/worker.js +10 -5
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/camera/sensors/controller.js +11 -7
- package/dist/server/src/camera/sensors/controller.js.map +1 -1
- package/dist/server/src/camera/sensors/sensor.js +1 -0
- package/dist/server/src/camera/sensors/sensor.js.map +1 -1
- package/dist/server/src/camera/sensors/stable-id.d.ts +1 -0
- package/dist/server/src/camera/sensors/stable-id.js +13 -0
- package/dist/server/src/camera/sensors/stable-id.js.map +1 -0
- package/dist/server/src/camera/sensors/types.d.ts +8 -1
- package/dist/server/src/camera/sensors/types.js +40 -1
- package/dist/server/src/camera/sensors/types.js.map +1 -1
- package/dist/server/src/camera/sensors/virtual.d.ts +19 -0
- package/dist/server/src/camera/sensors/virtual.js +155 -0
- package/dist/server/src/camera/sensors/virtual.js.map +1 -0
- package/dist/server/src/go2rtc/api/routes/discover.js +2 -1
- package/dist/server/src/go2rtc/api/routes/discover.js.map +1 -1
- package/dist/server/src/internal-bus.d.ts +10 -2
- package/dist/server/src/internal-bus.js.map +1 -1
- package/dist/server/src/main.d.ts +1 -0
- package/dist/server/src/main.js +9 -3
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/manager/discoveryManager.js +4 -4
- package/dist/server/src/manager/discoveryManager.js.map +1 -1
- package/dist/server/src/manager/notificationManager.js +13 -0
- package/dist/server/src/manager/notificationManager.js.map +1 -1
- package/dist/server/src/mqtt/bridge.d.ts +28 -0
- package/dist/server/src/mqtt/bridge.js +330 -0
- package/dist/server/src/mqtt/bridge.js.map +1 -0
- package/dist/server/src/mqtt/broker.d.ts +16 -0
- package/dist/server/src/mqtt/broker.js +93 -0
- package/dist/server/src/mqtt/broker.js.map +1 -0
- package/dist/server/src/mqtt/ha-discovery.d.ts +10 -0
- package/dist/server/src/mqtt/ha-discovery.js +265 -0
- package/dist/server/src/mqtt/ha-discovery.js.map +1 -0
- package/dist/server/src/mqtt/manager.d.ts +35 -0
- package/dist/server/src/mqtt/manager.js +256 -0
- package/dist/server/src/mqtt/manager.js.map +1 -0
- package/dist/server/src/mqtt/topics.d.ts +22 -0
- package/dist/server/src/mqtt/topics.js +90 -0
- package/dist/server/src/mqtt/topics.js.map +1 -0
- package/dist/server/src/mqtt/types.d.ts +45 -0
- package/dist/server/src/mqtt/types.js +2 -0
- package/dist/server/src/mqtt/types.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js +2 -0
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/index.js +2 -0
- package/dist/server/src/plugins/runtime/python/index.js.map +1 -1
- package/dist/server/src/remote/services/cloudflare-managed.js +2 -1
- package/dist/server/src/remote/services/cloudflare-managed.js.map +1 -1
- package/dist/server/src/remote/services/cloudflare.d.ts +0 -1
- package/dist/server/src/remote/services/cloudflare.js +3 -8
- package/dist/server/src/remote/services/cloudflare.js.map +1 -1
- package/dist/server/src/rpc/interfaces/sensor.d.ts +1 -0
- package/dist/server/src/services/config/types.d.ts +0 -15
- package/dist/server/src/workers/manager.js +2 -0
- package/dist/server/src/workers/manager.js.map +1 -1
- package/package.json +7 -5
- package/dist/interface/assets/Adminpanel-DrKaMQqd.js +0 -1
- package/dist/interface/assets/Automation-Dn1ZXmhy.js +0 -2
- package/dist/interface/assets/Camera-CVJ-46dw.js +0 -2
- package/dist/interface/assets/Cameras-DsZ7VINe.js +0 -652
- package/dist/interface/assets/Camview-Lnxd3oe8.js +0 -1
- package/dist/interface/assets/ConfigActionSensor-Cx1Q9VtS.js +0 -1
- package/dist/interface/assets/ConfigConditionSensorState-DQkz0FC6.js +0 -1
- package/dist/interface/assets/ConfigTriggerGeofence-RUlZmXAo.js +0 -1
- package/dist/interface/assets/Console-B55HKp9M.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-Da0yy5zi.js +0 -1
- package/dist/interface/assets/CuiCameraCard-Dix4Iyrv.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-ET-hbDL9.js +0 -1
- package/dist/interface/assets/CuiRecordingsGrid-FObjS4y5.js +0 -1
- package/dist/interface/assets/CuiSchema-BvjMb-mO.js +0 -1
- package/dist/interface/assets/Faces-DHk9Jq3T.js +0 -1
- package/dist/interface/assets/FirstSteps-Bb3XOidA.js +0 -1
- package/dist/interface/assets/Plugin-BF0VMRby.js +0 -1
- package/dist/interface/assets/PluginDetail-C2UBJlKS.js +0 -2
- package/dist/interface/assets/PluginDetail-L1Vtmr5x.css +0 -1
- package/dist/interface/assets/PluginSearch-CTIiYmP4.js +0 -1
- package/dist/interface/assets/PluginSearch-NnCJ7vG2.js +0 -2
- package/dist/interface/assets/Plugins-BLtk8Off.js +0 -1
- package/dist/interface/assets/Recordings-Bt_GlPOK.css +0 -1
- package/dist/interface/assets/Recordings-CMO0UwaS.js +0 -1
- package/dist/interface/assets/SettingsAccount-Iz4WalaS.js +0 -1
- package/dist/interface/assets/SettingsAppearance-Ck1O2w3P.js +0 -1
- package/dist/interface/assets/SettingsBackup-CPC0aLD3.js +0 -1
- package/dist/interface/assets/SettingsRecordings-C15sTnLd.js +0 -1
- package/dist/interface/assets/SettingsRemote-5nVdezk3.js +0 -1
- package/dist/interface/assets/SettingsRemote-KdcQyBCS.css +0 -1
- package/dist/interface/assets/SettingsSystem-FqKuLssS.js +0 -2
- package/dist/interface/assets/VariableInput-BnNttSx9.js +0 -1
- package/dist/interface/assets/VersionsHandler-jleSwMVy.js +0 -7
- package/dist/interface/assets/api-ByvWBLH3.js +0 -2
- package/dist/interface/assets/api-dcK5urq7.css +0 -2
- package/dist/interface/assets/bell-outline-CHhIZudN.js +0 -1
- package/dist/interface/assets/cameras.schema-neefhBQz.js +0 -1
- package/dist/interface/assets/cloudHandoff-CdYAKJPM.js +0 -1
- package/dist/interface/assets/main-eaoHjmUh.js +0 -3
- package/dist/interface/assets/nodeDefinitions-kqqBPelM.js +0 -1
- package/dist/interface/assets/router-jxQ55Ssp.js +0 -2
- package/dist/interface/assets/useCameraOptions-Dv3QCMBK.js +0 -1
- package/dist/interface/assets/users.schema-4d5Hcv-l.js +0 -1
- package/dist/interface/assets/view-grid-Bs5Mc3pI.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ci as e,Ni as t,o as n,rt as r,y as i}from"./vendor-cameraui-E9E7fP4y.js";import{C as a,Ct as o,E as s,Et as c,T as l,p as u,wt as d,yt as f}from"./api-ByvWBLH3.js";import{J as p,Q as m,Y as h,dn as g,mn as _,mr as v,pr as y,un as b,ur as x,xr as S,zn as C}from"./vendor-ClrOISZp.js";import{d as w,l as ee}from"./vendor-core-D2PMTaN3.js";import{t as te}from"./hasPermission-FP_aMe9r.js";import{t as T}from"./useCuiDialog-C02Or5oR.js";var E={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function D(e,t){return C(),_(`svg`,E,[...t[0]||=[g(`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 O=x({name:`bx-cctv`,render:D}),k={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function A(e,t){return C(),_(`svg`,k,[...t[0]||=[g(`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 j=x({name:`bxs-server`,render:A});async function M(e){return(await o.get(`/instances`,{signal:e})).data}async function N(e){return(await o.post(`/instances`,e)).data}async function P({id:e,data:t}){return(await o.put(`/instances/${e}`,t)).data}async function F(e){await o.delete(`/instances/${e}`)}async function I(e){return(await o.patch(`/instances/${e}/favorite`)).data}async function L(e){return(await o.post(`/instances/${e}/login`)).data}async function R(e,t){return(await o.get(`/instances/${e}/status`,{signal:t})).data}var z=class{_queryClient=m();toast=l();t=s.global.t;listQuery(){return a({queryKey:[`instances`],queryFn:({signal:e})=>M(e)})}statusQueries(e){return h({queries:b(()=>S(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>R(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return p({mutationFn:N,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return p({mutationFn:P,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return p({mutationFn:async e=>{await F(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 p({mutationFn:I,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return p({mutationFn:L,onError:()=>{}})}},B=3e4,V=5e3,H=`__home__`,U=new Set([`localhost`,`127.0.0.1`,`::1`]),W=f(`Instances`);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.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return W.debug(`[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 ne(e,t){return{_id:t?._id??``,username:t?.username??``,email:t?.email,role:t?.role??``,firstLogin:t?.firstLogin,avatar:t?.avatar,language:`auto`,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 q=w(`instances`,()=>{let a=u(),o=ee(),f=l(),p=T(),h=m(),{t:g}=s.global,_=e(`instanceTokens`,{}),x=e(`activeInstanceId`,null),S=v(!1),C=v(null),w=v(0),E=0,D=v(null),O=v([]),k=t(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),A=b(()=>x.value===null),j=b(()=>x.value===null?null:O.value.find(e=>e.id===x.value)?.url??null);async function R(){try{if(!te(void 0,`admin`))return;let e=await M();O.value=e.instances,D.value=e.homeId,W.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){W.warn(`[fetch]`,`failed`,e)}}let z=b(()=>{let e=D.value;return O.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 V(){let e=_.value[H],t=x.value===null?d().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 q=b(()=>{if(x.value!==null){let e=z.value.find(e=>e.id===x.value);if(e)return e}return V()}),J=b(()=>z.value.filter(e=>e.favorite)),Y=b(()=>J.value.length>0||x.value!==null||k.value!==null);function X(e){return O.value.find(t=>t.id===e)?.favorite??!0}async function re(e){let{favorite:t}=await I(e),n=O.value.find(t=>t.id===e);n&&(n.favorite=t)}async function ie(e){let t=await N(e);return O.value=[...O.value,t],t}async function ae(e){await F(e),O.value=O.value.filter(t=>t.id!==e),delete _.value[e]}async function oe(e,t){let n=await P({id:e,data:t}),r=O.value.findIndex(t=>t.id===e);r!==-1&&(O.value[r]=n)}async function se(e,t){let n=O.value.find(t=>t.id===e);return n?G(n.url,t):!1}function Z(){let e=d().target.value;if(!e?.tokens.access){W.debug(`[save-tokens]`,`skipped — no live access token`);return}let t=x.value??H;_.value[t]={userData:ne(e.tokens,a.user??void 0),lastConnectedAt:Date.now(),url:e.endpoint.url},W.debug(`[save-tokens]`,`slot=${t} url=${e.endpoint.url}`)}function ce(){if(x.value===null){c.value=null,W.debug(`[restore-override]`,`no active instance — home target`);return}let e=_.value[x.value],t=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;c.value=t,W.debug(`[restore-override]`,`activeId=${x.value} → ${t??`no cached url`}`)}async function Q(e){if(S.value){W.warn(`[switch]`,`ignored — another switch is already in progress`);return}let t=e===null?V():z.value.find(t=>t.id===e)??V();if(e!==null&&$(t.url)&&!await ue(t.name)){W.debug(`[switch]`,`URL handoff declined by user`);return}let s=++E;S.value=!0,C.value=t.name,W.debug(`[switch]`,`START targetId=${e??`home`} gen=${s}`),W.debug(`[switch]`,`target resolved — name="${t.name}" url=${t.url} hasCreds=${t.hasCredentials}`);try{if(e!==null){let e=await G(t.url);if(s!==E){W.debug(`[switch]`,`aborted after probe — newer gen=${E}`);return}if(!e){W.warn(`[switch]`,`target unreachable — ${t.url}`),f.add({severity:`warn`,detail:g(`instances.unreachable`,{name:t.name}),life:3e3});return}}let l=null;if(e!==null&&t.hasCredentials)try{l=await L(e),W.debug(`[switch]`,`backend relay login OK`)}catch(e){W.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(s!==E){W.debug(`[switch]`,`aborted after relay-login — newer gen=${E}`);return}Z();let u=e??H,p=l?K(l):le(u);if(W.debug(`[switch]`,`tokens source: ${l?`fresh`:p?`cached`:`none`} (slot=${u})`),e!==null&&$(t.url)){W.debug(`[switch]`,`URL handoff required — leaving SPA`),await de(t,l);return}let m=d();if(m.reset(),W.debug(`[switch]`,`kernel RESET`),r(),i(),n(),h.clear(),W.debug(`[switch]`,`vue-query cleared`),x.value=e,c.value=e===null?null:t.url,W.debug(`[switch]`,`activeId=${e} instanceOverride=${c.value??`null`}`),p&&l&&(_.value[u]={userData:l,lastConnectedAt:Date.now(),url:t.url},a.user={_id:l._id,username:l.username,role:l.role,firstLogin:l.firstLogin,avatar:l.avatar}),p){let n={url:t.url,mode:`direct-lan`,priority:0};W.debug(`[switch]`,`seedAndRetry → ${n.url}`),await Promise.race([m.seedAndRetry({endpoint:n,tokens:p},e??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),B))])}else{W.warn(`[switch]`,`no tokens — boot + route to login`),m.boot(e??`home`),a.user=null,o.push(`/`);return}if(s!==E){W.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${E}`);return}w.value++,W.debug(`[switch]`,`DONE gen=${s} → /home`),o.push(`/home`)}catch(e){(e instanceof Error?e.message:String(e))===`switch_timeout`?(W.error(`[switch]`,`TIMEOUT after ${B}ms`),f.add({severity:`error`,detail:g(`instances.switch_timeout`,{name:C.value??``}),life:3e3})):(W.error(`[switch]`,`failed`,e),f.add({severity:`error`,detail:e,life:3e3}))}finally{s===E&&(S.value=!1,C.value=null)}}function le(e){let t=_.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))};p.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}`;W.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){_.value={},x.value=null,c.value=null,k.value=null,O.value=[],D.value=null,W.debug(`[reset]`,`store cleared`)}return{instances:z,activeInstance:q,activeId:x,activeUrl:j,isHomeActive:A,isMultiInstance:Y,isSwitching:y(S),switchTargetName:y(C),switchKey:y(w),serverHomeId:D,redirectInfo:k,serverInstances:O,instanceTokens:_,favoriteInstances:J,isFavorite:X,toggleFavorite:re,fetchInstances:R,addInstance:ie,removeInstance:ae,updateInstance:oe,switchInstance:Q,probeInstance:se,reset:fe,saveCurrentTokens:Z,restoreActiveOverride:ce}});export{O as i,z as n,j as r,q as t};
|
|
1
|
+
import{Fi as e,Ti as t,o as n,rt as r,y as i}from"./vendor-cameraui-DDdtrYBn.js";import{At as a,C as o,Ct as s,Dt as c,E as l,Ot as u,T as d,p as f}from"./api-BxUTlh4_.js";import{J as p,Q as m,Y as h,dn as g,mn as _,mr as v,pr as y,un as b,ur as x,xr as S,zn as C}from"./vendor-ClrOISZp.js";import{d as w,l as ee}from"./vendor-core-CZuWsjWr.js";import{t as te}from"./hasPermission-DWgF7Hjs.js";import{t as T}from"./useCuiDialog-BrXNUR_F.js";var E={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function D(e,t){return C(),_(`svg`,E,[...t[0]||=[g(`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 O=x({name:`bx-cctv`,render:D}),k={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function A(e,t){return C(),_(`svg`,k,[...t[0]||=[g(`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 j=x({name:`bxs-server`,render:A});async function M(e){return(await c.get(`/instances`,{signal:e})).data}async function N(e){return(await c.post(`/instances`,e)).data}async function P({id:e,data:t}){return(await c.put(`/instances/${e}`,t)).data}async function F(e){await c.delete(`/instances/${e}`)}async function I(e){return(await c.patch(`/instances/${e}/favorite`)).data}async function L(e){return(await c.post(`/instances/${e}/login`)).data}async function R(e,t){return(await c.get(`/instances/${e}/status`,{signal:t})).data}var z=class{_queryClient=m();toast=d();t=l.global.t;listQuery(){return o({queryKey:[`instances`],queryFn:({signal:e})=>M(e)})}statusQueries(e){return h({queries:b(()=>S(e).map(e=>({queryKey:[`instances`,e.id,`status`],queryFn:({signal:t})=>R(e.id,t),refetchInterval:15e3,retry:!1})))})}createMutation(){return p({mutationFn:N,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.added`),life:3e3})}})}updateMutation(){return p({mutationFn:P,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]}),this.toast.add({severity:`success`,detail:this.t(`views.settings.instances.updated`),life:3e3})}})}deleteMutation(){return p({mutationFn:async e=>{await F(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 p({mutationFn:I,onSuccess:async()=>{await this._queryClient.refetchQueries({queryKey:[`instances`]})}})}loginMutation(){return p({mutationFn:L,onError:()=>{}})}},B=3e4,V=5e3,H=`__home__`,U=new Set([`localhost`,`127.0.0.1`,`::1`]),W=s(`Instances`);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.debug(`[probe]`,`${e} → ${i.ok?`OK`:`HTTP ${i.status}`}`),i.ok}catch(t){let n=t instanceof Error?t.message:String(t);return W.debug(`[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 ne(e,t){return{_id:t?._id??``,username:t?.username??``,email:t?.email,role:t?.role??``,firstLogin:t?.firstLogin,avatar:t?.avatar,language:`auto`,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 q=w(`instances`,()=>{let o=f(),s=ee(),c=d(),p=T(),h=m(),{t:g}=l.global,_=t(`instanceTokens`,{}),x=t(`activeInstanceId`,null),S=v(!1),C=v(null),w=v(0),E=0,D=v(null),O=v([]),k=e(`redirectInfo`,null,{serializer:{read:e=>e?JSON.parse(e):null,write:e=>JSON.stringify(e)}}),A=b(()=>x.value===null),j=b(()=>x.value===null?null:O.value.find(e=>e.id===x.value)?.url??null);async function R(){try{if(!te(void 0,`admin`))return;let e=await M();O.value=e.instances,D.value=e.homeId,W.debug(`[fetch]`,`loaded ${e.instances.length} instances`,{homeId:e.homeId})}catch(e){W.warn(`[fetch]`,`failed`,e)}}let z=b(()=>{let e=D.value;return O.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 V(){let e=_.value[H],t=x.value===null?u().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 q=b(()=>{if(x.value!==null){let e=z.value.find(e=>e.id===x.value);if(e)return e}return V()}),J=b(()=>z.value.filter(e=>e.favorite)),Y=b(()=>J.value.length>0||x.value!==null||k.value!==null);function X(e){return O.value.find(t=>t.id===e)?.favorite??!0}async function re(e){let{favorite:t}=await I(e),n=O.value.find(t=>t.id===e);n&&(n.favorite=t)}async function ie(e){let t=await N(e);return O.value=[...O.value,t],t}async function ae(e){await F(e),O.value=O.value.filter(t=>t.id!==e),delete _.value[e]}async function oe(e,t){let n=await P({id:e,data:t}),r=O.value.findIndex(t=>t.id===e);r!==-1&&(O.value[r]=n)}async function se(e,t){let n=O.value.find(t=>t.id===e);return n?G(n.url,t):!1}function Z(){let e=u().target.value;if(!e?.tokens.access){W.debug(`[save-tokens]`,`skipped — no live access token`);return}let t=x.value??H;_.value[t]={userData:ne(e.tokens,o.user??void 0),lastConnectedAt:Date.now(),url:e.endpoint.url},W.debug(`[save-tokens]`,`slot=${t} url=${e.endpoint.url}`)}function ce(){if(x.value===null){a.value=null,W.debug(`[restore-override]`,`no active instance — home target`);return}let e=_.value[x.value],t=e?.url??e?.userData?.internalAddresses?.[0]??e?.userData?.externalAddresses?.[0]??null;a.value=t,W.debug(`[restore-override]`,`activeId=${x.value} → ${t??`no cached url`}`)}async function Q(e){if(S.value){W.warn(`[switch]`,`ignored — another switch is already in progress`);return}let t=e===null?V():z.value.find(t=>t.id===e)??V();if(e!==null&&$(t.url)&&!await ue(t.name)){W.debug(`[switch]`,`URL handoff declined by user`);return}let l=++E;S.value=!0,C.value=t.name,W.debug(`[switch]`,`START targetId=${e??`home`} gen=${l}`),W.debug(`[switch]`,`target resolved — name="${t.name}" url=${t.url} hasCreds=${t.hasCredentials}`);try{if(e!==null){let e=await G(t.url);if(l!==E){W.debug(`[switch]`,`aborted after probe — newer gen=${E}`);return}if(!e){W.warn(`[switch]`,`target unreachable — ${t.url}`),c.add({severity:`warn`,detail:g(`instances.unreachable`,{name:t.name}),life:3e3});return}}let d=null;if(e!==null&&t.hasCredentials)try{d=await L(e),W.debug(`[switch]`,`backend relay login OK`)}catch(e){W.warn(`[switch]`,`backend relay login FAILED — will try cached tokens`,e)}if(l!==E){W.debug(`[switch]`,`aborted after relay-login — newer gen=${E}`);return}Z();let f=e??H,p=d?K(d):le(f);if(W.debug(`[switch]`,`tokens source: ${d?`fresh`:p?`cached`:`none`} (slot=${f})`),e!==null&&$(t.url)){W.debug(`[switch]`,`URL handoff required — leaving SPA`),await de(t,d);return}let m=u();if(m.reset(),W.debug(`[switch]`,`kernel RESET`),r(),i(),n(),h.clear(),W.debug(`[switch]`,`vue-query cleared`),x.value=e,a.value=e===null?null:t.url,W.debug(`[switch]`,`activeId=${e} instanceOverride=${a.value??`null`}`),p&&d&&(_.value[f]={userData:d,lastConnectedAt:Date.now(),url:t.url},o.user={_id:d._id,username:d.username,role:d.role,firstLogin:d.firstLogin,avatar:d.avatar}),p){let n={url:t.url,mode:`direct-lan`,priority:0};W.debug(`[switch]`,`seedAndRetry → ${n.url}`),await Promise.race([m.seedAndRetry({endpoint:n,tokens:p},e??`home`),new Promise((e,t)=>setTimeout(()=>t(Error(`switch_timeout`)),B))])}else{W.warn(`[switch]`,`no tokens — boot + route to login`),m.boot(e??`home`),o.user=null,s.push(`/`);return}if(l!==E){W.debug(`[switch]`,`aborted after seedAndRetry — newer gen=${E}`);return}w.value++,W.debug(`[switch]`,`DONE gen=${l} → /home`),s.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:g(`instances.switch_timeout`,{name:C.value??``}),life:3e3})):(W.error(`[switch]`,`failed`,e),c.add({severity:`error`,detail:e,life:3e3}))}finally{l===E&&(S.value=!1,C.value=null)}}function le(e){let t=_.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))};p.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}`;W.debug(`[url-handoff]`,`→ ${e.url} (with token=${t?`yes`:`no`})`),window.location.href=i}function fe(){_.value={},x.value=null,a.value=null,k.value=null,O.value=[],D.value=null,W.debug(`[reset]`,`store cleared`)}return{instances:z,activeInstance:q,activeId:x,activeUrl:j,isHomeActive:A,isMultiInstance:Y,isSwitching:y(S),switchTargetName:y(C),switchKey:y(w),serverHomeId:D,redirectInfo:k,serverInstances:O,instanceTokens:_,favoriteInstances:J,isFavorite:X,toggleFavorite:re,fetchInstances:R,addInstance:ie,removeInstance:ae,updateInstance:oe,switchInstance:Q,probeInstance:se,reset:fe,saveCurrentTokens:Z,restoreActiveOverride:ce}});export{O as i,z as n,j as r,q as t};
|