@camera.ui/server 0.0.110 → 0.0.111
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-CZDMFg2Z.js → 404-CGV2uv4y.js} +1 -1
- package/dist/interface/assets/{About-TDIJXs5o.js → About-Cc2eFlW5.js} +1 -1
- package/dist/interface/assets/{Adminpanel-Cciuxh1q.js → Adminpanel-EjUhiapF.js} +1 -1
- package/dist/interface/assets/{Automation-CMMDPrn0.js → Automation-C7HuyjXk.js} +2 -2
- package/dist/interface/assets/{Automations-by_LN5br.js → Automations-DOj8Eo03.js} +1 -1
- package/dist/interface/assets/{Camera-BlN_KppY.js → Camera-C3Il4X2T.js} +2 -2
- package/dist/interface/assets/{CameraConsole-DGbeilsL.js → CameraConsole-70m5hucZ.js} +1 -1
- package/dist/interface/assets/{Cameras-CVID1akl.js → Cameras-BJUWRm26.js} +2 -2
- package/dist/interface/assets/{Camview-B-Pqm0Fw.js → Camview-BqFeqFU1.js} +1 -1
- package/dist/interface/assets/{Config-CfunWNtM.js → Config--CF46OKO.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-BRgTU6MP.js → ConfigActionCameraControl-DBRh1R9m.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-CYz0z9Od.js → ConfigActionDelay-DOUAx4lh.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-C9nEQ-7w.js → ConfigActionHttp-BGz4r_Nr.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-D8ipnlfe.js → ConfigActionImageInput-BhO3ekJT.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-FzGgJM9i.js → ConfigActionNotification-MJAViQFR.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-BB-jkCdD.js → ConfigActionOutput-P0WY0DlF.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-C1OSUQ3_.js → ConfigActionPlugin-C2gSPDim.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-C6DOrCYd.js → ConfigActionSensor-Dv7Hgx92.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-k8RM-NMf.js → ConfigActionSnapshot-CB6IQ_jP.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-D-1zVFz-.js → ConfigActionVariable-B2BoiQPb.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-pp0wRFeJ.js → ConfigConditionIfElse-Nd0_qDVA.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-CIbkk6LA.js → ConfigConditionSensorState-CHYw1D90.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-BPdEa--b.js → ConfigConditionSwitch-DsJEOPx0.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-bHKJ8kBR.js → ConfigConditionTime-lhWiIy2x.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-BrtBsd1t.js → ConfigTriggerDetection-C-e6Z1m9.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-DCqAqAG3.js → ConfigTriggerGeofence-DGnBxTWd.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerManual-DDmBGqnC.js → ConfigTriggerManual-ChsUsNCK.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-vC9yyRct.js → ConfigTriggerSchedule-CE47WiIV.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-BbKksZMP.js → ConfigTriggerSensor-C9DsLW_Z.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-CO06Crjg.js → ConfigTriggerSystem-CdOgSvDy.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-CrtHc6Q3.js → ConfigTriggerWebhook-D3cHvW8H.js} +1 -1
- package/dist/interface/assets/{Console-B4SQZA5X.js → Console-bCie-JmB.js} +1 -1
- package/dist/interface/assets/{CuiActionButton-CNTiGrTt.js → CuiActionButton-Bl7gqhIV.js} +1 -1
- package/dist/interface/assets/{CuiAvatar-DUucUxIP.js → CuiAvatar-Bbdxpgvs.js} +1 -1
- package/dist/interface/assets/{CuiBBoxPlayground-DOcoHCTQ.js → CuiBBoxPlayground-CIU5kteO.js} +1 -1
- package/dist/interface/assets/{CuiBottomSheet-zPb4AI5w.js → CuiBottomSheet-2SNSjqOZ.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-DX9ynJj_.js +1 -0
- package/dist/interface/assets/{CuiCameraCard-kI_GNoa7.js → CuiCameraCard-CXO5aDTJ.js} +1 -1
- package/dist/interface/assets/{CuiCameraPipCard-DehPfhfs.js → CuiCameraPipCard-BMxMzolT.js} +1 -1
- package/dist/interface/assets/{CuiCameraRecordings-bqChEXwx.js → CuiCameraRecordings-DLjYt8vJ.js} +1 -1
- package/dist/interface/assets/{CuiCameraShares-BvwB4H_0.js → CuiCameraShares-CLN2wuHG.js} +1 -1
- package/dist/interface/assets/{CuiCameraSnapshot-C33nUgVt.js → CuiCameraSnapshot-C7wIpD9K.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-B5wQAGfM.js → CuiCameraTable-CCpYHBTn.js} +1 -1
- package/dist/interface/assets/{CuiDataTable-D9GqApg1.js → CuiDataTable-saRt0sBc.js} +1 -1
- package/dist/interface/assets/{CuiFloatingButton-BLCO4wJw.js → CuiFloatingButton-B5YMdr0X.js} +1 -1
- package/dist/interface/assets/{CuiImage-B3eMhhIS.js → CuiImage-CoVi1BKR.js} +1 -1
- package/dist/interface/assets/{CuiMenu-BO2e4LK5.js → CuiMenu-vSJpyg_1.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-Bu_rNdQH.js → CuiPluginCard-CwGKyEU6.js} +2 -2
- package/dist/interface/assets/{CuiPluginOAuthButton-Q2CBmZzv.js → CuiPluginOAuthButton-CxNqrBe7.js} +2 -2
- package/dist/interface/assets/{CuiQRCode-CVHjvjZP.js → CuiQRCode-CP6aDzF5.js} +1 -1
- package/dist/interface/assets/{CuiRecordingsGrid-BFHPh2dn.js → CuiRecordingsGrid-BNyITEKD.js} +1 -1
- package/dist/interface/assets/{CuiSchema-DEYDened.js → CuiSchema-Bdy2raxw.js} +1 -1
- package/dist/interface/assets/{CuiTopNavbarItem-CqM9AHmU.js → CuiTopNavbarItem-Q7M4nMw5.js} +1 -1
- package/dist/interface/assets/{CuiTopbarSlot-DbzQRnbt.js → CuiTopbarSlot-ac4GLLbf.js} +1 -1
- package/dist/interface/assets/{Faces-u9Rxm4Ti.js → Faces-DufdNYrc.js} +1 -1
- package/dist/interface/assets/{FirstSteps-YNR-3tqt.js → FirstSteps-Bpu4QLhF.js} +1 -1
- package/dist/interface/assets/{Instances-CWzMYIvB.js → Instances-CxgKUsJh.js} +1 -1
- package/dist/interface/assets/{Logs-CpAkrsEJ.js → Logs-CJcq3xd6.js} +1 -1
- package/dist/interface/assets/{Menu-uW8DUGLM.js → Menu-BlYf1LF3.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-CxJbM1jZ.js → OAuthDeviceFlow-k6_zfcw_.js} +1 -1
- package/dist/interface/assets/{Plugin-CWjFyBeK.js → Plugin-DcwR4dBy.js} +1 -1
- package/dist/interface/assets/{PluginConsole-C-ndOnmZ.js → PluginConsole-CQebF4NZ.js} +1 -1
- package/dist/interface/assets/{PluginSchema-BcLXAX-Q.js → PluginSchema-CcWTcoz_.js} +1 -1
- package/dist/interface/assets/{Plugins-B7ZOk3ld.js → Plugins-DfMxKm_j.js} +2 -2
- package/dist/interface/assets/{Recordings-Daf0TCPA.js → Recordings-BgqhrYcF.js} +1 -1
- package/dist/interface/assets/{Settings-Bz7u44Pl.js → Settings-BVa4xU_p.js} +1 -1
- package/dist/interface/assets/SettingsAccount-BcPNz9jC.js +1 -0
- package/dist/interface/assets/{SettingsAccount-C_pQPGoW.js → SettingsAccount-UKbQLW6n.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-De_E9UCe.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-CwPSvzkX.js → SettingsAppearance-e45pjRF6.js} +1 -1
- package/dist/interface/assets/{SettingsBackup-CCEtuJsQ.js → SettingsBackup-t2irnG2Z.js} +1 -1
- package/dist/interface/assets/{SettingsNotifications-OV4-nraE.js → SettingsNotifications-te4LKEdZ.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-uNRwROAh.js → SettingsRecordings-x4yRgxJm.js} +1 -1
- package/dist/interface/assets/{SettingsRemote-Dg3BfdmI.js → SettingsRemote-CBLPWHM6.js} +1 -1
- package/dist/interface/assets/{SettingsSystem-DwXSeR_Z.js → SettingsSystem-Du3S8gps.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-CimG6HaL.js → SettingsUsers-DLAYh9IA.js} +1 -1
- package/dist/interface/assets/{Terminal-h5vqtN-o.js → Terminal-BsdUon5-.js} +1 -1
- package/dist/interface/assets/{VariableInput-tPI6hxP8.js → VariableInput-CFs-kzqd.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-K3CHs8XG.js → VariableSuggestions-PEzupqiE.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-BrfHmvOf.js → VersionsHandler-DF_kclOb.js} +1 -1
- package/dist/interface/assets/{Workers-xo6c0O5M.js → Workers-CXvuE4Bn.js} +1 -1
- package/dist/interface/assets/api-BWWcvHf5.js +2 -0
- package/dist/interface/assets/{api-Cm9H8gwG.js → api-DY4FSNX7.js} +1 -1
- package/dist/interface/assets/{auth-Czmir2ST.js → auth-DJ1WgC3s.js} +1 -1
- package/dist/interface/assets/{automations-C2J4u5Uj.js → automations-C309DNNg.js} +1 -1
- package/dist/interface/assets/{automations-DVc4ovPU.js → automations-wQnuqfmi.js} +1 -1
- package/dist/interface/assets/{backup-BcXXJ1y6.js → backup-DYBEA8gj.js} +1 -1
- package/dist/interface/assets/cameras-WikE4nxe.js +1 -0
- package/dist/interface/assets/{cameras.schema-CuVLJONJ.js → cameras.schema-BULBdfmS.js} +1 -1
- package/dist/interface/assets/cloudHandoff-zXwtzo8e.js +1 -0
- package/dist/interface/assets/{deviceId-BM0pOHhg.js → deviceId-DMh1VcHg.js} +1 -1
- package/dist/interface/assets/{hasPermission-B724PtFJ.js → hasPermission-DdAdlKls.js} +1 -1
- package/dist/interface/assets/{instances-5MeVN25v.js → instances-BBnYdgRc.js} +1 -1
- package/dist/interface/assets/{locale-hdhgxXOX.js → locale-qn_8MsnX.js} +1 -1
- package/dist/interface/assets/{main-D0dJIe_X.js → main-CjUbwZ3z.js} +2 -2
- package/dist/interface/assets/{notifications-Cq1bDRQk.js → notifications-DGRbcf65.js} +1 -1
- package/dist/interface/assets/{plugins-BMys-WCs.js → plugins-tQniunmN.js} +1 -1
- package/dist/interface/assets/{round-restart-alt-bbbi50F4.js → round-restart-alt-wyrnMpa4.js} +1 -1
- package/dist/interface/assets/{router-DUCivZj8.js → router-CvWvXFyk.js} +2 -2
- package/dist/interface/assets/{routerState-ByP_jZ8E.js → routerState-dQtObsFs.js} +1 -1
- package/dist/interface/assets/{server-BW0jfXav.js → server-CmXhhpSW.js} +1 -1
- package/dist/interface/assets/{shares-D0r3nTB0.js → shares-ZKyJZapA.js} +1 -1
- package/dist/interface/assets/{theme-B2fORWV9.js → theme-DhiUIeo3.js} +1 -1
- package/dist/interface/assets/types-C9iWhZtk.js +1 -0
- package/dist/interface/assets/{ui-CnzJLu9N.js → ui-DrzKhUXW.js} +1 -1
- package/dist/interface/assets/{useBiometricCredentials-BGl37Skw.js → useBiometricCredentials-DDyhIy7O.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-D0rQaUuh.js → useCameraOptions-CoogpQnN.js} +1 -1
- package/dist/interface/assets/{useCuiCameraDrawer-2I0LB3ff.js → useCuiCameraDrawer-DnN9lwiy.js} +1 -1
- package/dist/interface/assets/{useCuiDialog-DZvxI8xi.js → useCuiDialog-C50obC48.js} +1 -1
- package/dist/interface/assets/{useFileDownload-BLbAIlSX.js → useFileDownload-CSek7CzK.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-BnU6ynWU.js → useLogsSocket-rG2BaLWl.js} +1 -1
- package/dist/interface/assets/{useSharedComposables-DjDddcdT.js → useSharedComposables-gpJ--qZh.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-Dy3K_ILd.js → useStreamStatus-BdN05nfE.js} +1 -1
- package/dist/interface/assets/users.schema-Bz59q-My.js +1 -0
- package/dist/interface/assets/{vendor-cameraui-B9wC4-mi.js → vendor-cameraui-DgSMexWY.js} +1 -1
- package/dist/interface/assets/{vendor-core-CBFMCwgj.js → vendor-core-BKHiXSX7.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-DYHQyonV.js → vendor-primevue-7iEzPOvf.js} +1 -1
- package/dist/interface/assets/{vendor-zod-V2qTUMVc.js → vendor-zod-DycFxUhi.js} +1 -1
- package/dist/interface/assets/{view-grid-D39XDBn9.js → view-grid-Cs5VWmxE.js} +1 -1
- package/dist/interface/index.html +41 -41
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +2 -2
- package/dist/server/src/api/controllers/cameras.controller.d.ts +1 -5
- package/dist/server/src/api/controllers/cameras.controller.js +0 -359
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/routes/cameras.routes.js +1 -12
- package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +0 -14
- package/dist/server/src/api/schemas/cameras.schema.js +0 -103
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.d.ts +2 -3
- package/dist/server/src/api/services/cameras.service.js +0 -67
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +1 -29
- package/dist/server/src/api/types/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/interface/assets/CuiBottomSheet-DSG6iONb.js +0 -1
- package/dist/interface/assets/SettingsAccount-BgpeeHsR.js +0 -1
- package/dist/interface/assets/SettingsAppearance-DSNXI3t4.js +0 -1
- package/dist/interface/assets/api-B8LDDNgZ.js +0 -2
- package/dist/interface/assets/cameras-BEBBV7mz.js +0 -1
- package/dist/interface/assets/cloudHandoff-Cnd7f4Es.js +0 -1
- package/dist/interface/assets/types-CztXMZ5X.js +0 -1
- package/dist/interface/assets/users.schema-2wYWhJ9W.js +0 -1
- /package/dist/interface/assets/{error-256-DLKVOU2S.png → logo-512-DLKVOU2S.png} +0 -0
package/dist/interface/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let s,e={};const l=(l,i)=>(l=new URL(l+".js",i).href,e[l]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()}).then(()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s}));self.define=(i,a)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let n={};const u=s=>l(s,r),o={module:{uri:r},exports:n,require:u};e[r]=Promise.all(i.map(s=>o[s]||u(s))).then(s=>(a(...s),n))}}define(["./workbox-5f44db27"],function(s){"use strict";s.setCacheNameDetails({prefix:"camera-ui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"robots.txt",revision:"f77c87f977e0fcce05a6df46c885a129"},{url:"og-share.png",revision:"0ca1dd15e2498de1d1423fe6134db452"},{url:"index.html",revision:"8f60a58f6acb50b54fe18bf5501ac5a1"},{url:"pwa/pwa-96x96.png",revision:"675ea863c25fa9ae31d4d76a47463c78"},{url:"pwa/pwa-88x88.png",revision:"6e8af0a85b0627a835b62067d5189cb4"},{url:"pwa/pwa-72x72.png",revision:"66698bb499639052ad337f7e9a7d7ea8"},{url:"pwa/pwa-64x64.png",revision:"f57763be3212fd4154c502d607e7ed38"},{url:"pwa/pwa-50x50.png",revision:"a20fc2e6f26aa548f9cae07911087f6c"},{url:"pwa/pwa-48x48.png",revision:"97d7369c892f1e0914c2617ff26feb3c"},{url:"pwa/pwa-36x36.png",revision:"4d08bb198d4e54e4d12a0810fc59f059"},{url:"pwa/pwa-300x300.png",revision:"7f79d74e34aedef57c98a1c9c156ba6b"},{url:"pwa/pwa-24x24.png",revision:"bdb25f68ca300283b37041e47d3e6ba8"},{url:"pwa/pwa-192x192.png",revision:"3d58c2dd940c535cc166cc8d0844429d"},{url:"pwa/pwa-180x180.png",revision:"225b42752632e2866c4f8fe4ab2f62ee"},{url:"pwa/pwa-167x167.png",revision:"de6a5ca921b45fb3bd30d27c707981c6"},{url:"pwa/pwa-152x152.png",revision:"4cf41c7b603d382e83e098affb7cb9da"},{url:"pwa/pwa-144x144.png",revision:"4fdf5c8fb085f764ed7dd5a26698bff5"},{url:"pwa/pwa-120x120.png",revision:"3f5ec31f6bd07910482227b259344110"},{url:"pwa/pwa-1024x1024.png",revision:"1ed367ae76416e79fd0bdd6ee70666bc"},{url:"pwa/maskable-icon-620x300.png",revision:"b4954ceadf0d6f2095c45f8cc8240337"},{url:"pwa/maskable-icon-512x512.png",revision:"e716feaa60f08d95d0909e1c85bf1f98"},{url:"pwa/maskable-icon-1240x600.png",revision:"f3188c7d8e5038f28068c7a3632dbe4b"},{url:"pwa/logo.svg",revision:"1aa262f4a37293a91083eea10794d2ca"},{url:"pwa/favicon-64.ico",revision:"6a697d7662ab5ee246918cdc7c412343"},{url:"pwa/favicon-48.ico",revision:"d0a27003af457cb85651c84c60c87ef0"},{url:"pwa/favicon-32.ico",revision:"6e711cbf0b53afe4a7d0057780fa42b9"},{url:"pwa/favicon-16.ico",revision:"163ae861c5ab9f68ed21324c19dfe35d"},{url:"pwa/apple-touch-icon-180x180.png",revision:"91aec7b3a553812fbd3cd72adb17fcc4"},{url:"pwa/apple-splash-portrait-light-828x1792.png",revision:"8deb1063185df6a2d3089a9fa33f6ad1"},{url:"pwa/apple-splash-portrait-light-750x1334.png",revision:"191c785b1e7b47ac1b1d6bc2a84bde85"},{url:"pwa/apple-splash-portrait-light-640x1136.png",revision:"588e312fd0851d5767972a1efc33e6a3"},{url:"pwa/apple-splash-portrait-light-2048x2732.png",revision:"cf9c75c2e56f8d3af7d914a00ce30286"},{url:"pwa/apple-splash-portrait-light-1668x2388.png",revision:"5db134deca3d2e8a1ae2d8e67c77c420"},{url:"pwa/apple-splash-portrait-light-1668x2224.png",revision:"a1b5adab2a71d0fa646e7b0e9a4fcb71"},{url:"pwa/apple-splash-portrait-light-1620x2160.png",revision:"41bdc2c492d374bf8c6b6875e2beb9f1"},{url:"pwa/apple-splash-portrait-light-1536x2048.png",revision:"42716fc23cfa58d3f154fea1875eb3f5"},{url:"pwa/apple-splash-portrait-light-1290x2796.png",revision:"d57711837cf7e3801a9e8126b1695aaa"},{url:"pwa/apple-splash-portrait-light-1284x2778.png",revision:"461b13cf0d9c293ca220700bb4148afa"},{url:"pwa/apple-splash-portrait-light-1242x2688.png",revision:"2b320f74bc7da7bf0d1be699183416c3"},{url:"pwa/apple-splash-portrait-light-1242x2208.png",revision:"8fd1367cac03e5798973cfa4e0dec5b0"},{url:"pwa/apple-splash-portrait-light-1179x2556.png",revision:"8d1fc622bdb48dda2461e4f47a49249a"},{url:"pwa/apple-splash-portrait-light-1170x2532.png",revision:"58d656b4de9b32a09fc2ea1028116dfb"},{url:"pwa/apple-splash-portrait-light-1125x2436.png",revision:"1a02e33add13bccc9f407efcfd2cf890"},{url:"pwa/apple-splash-portrait-dark-828x1792.png",revision:"543d10f74f6f098e49ba989899182dee"},{url:"pwa/apple-splash-portrait-dark-750x1334.png",revision:"54f99ba556f7cc149eb03fe6207d411d"},{url:"pwa/apple-splash-portrait-dark-640x1136.png",revision:"b901a6f04ef976aa81573ec0f3c8f32b"},{url:"pwa/apple-splash-portrait-dark-2048x2732.png",revision:"60acb5fbde5bb76a368238c5e079c717"},{url:"pwa/apple-splash-portrait-dark-1668x2388.png",revision:"fb7fb372580598abf8a1d8eb7305462a"},{url:"pwa/apple-splash-portrait-dark-1668x2224.png",revision:"1e7b39c9f5fdca7ddf23c1248f7628bf"},{url:"pwa/apple-splash-portrait-dark-1620x2160.png",revision:"1a9f84fba88d4cd5924cf5a39d541b46"},{url:"pwa/apple-splash-portrait-dark-1536x2048.png",revision:"0b26c0a578f6b13b3df06abecc81fb82"},{url:"pwa/apple-splash-portrait-dark-1290x2796.png",revision:"e7f2a468891736413b1e0622a510fd5a"},{url:"pwa/apple-splash-portrait-dark-1284x2778.png",revision:"d7230994de3c4c6016ac252431031ea7"},{url:"pwa/apple-splash-portrait-dark-1242x2688.png",revision:"c56eb0a4a8b4c7bb850cbfc35dd62bba"},{url:"pwa/apple-splash-portrait-dark-1242x2208.png",revision:"1b7f03eaab3cf8af8aa6057fd97278d8"},{url:"pwa/apple-splash-portrait-dark-1179x2556.png",revision:"8eac224083023d0d21374d9f9087bab5"},{url:"pwa/apple-splash-portrait-dark-1170x2532.png",revision:"476ac5131289040d8d88803c18dc20bb"},{url:"pwa/apple-splash-portrait-dark-1125x2436.png",revision:"53ddd8644a89bfc79c8d1bfbaa51527b"},{url:"pwa/apple-splash-landscape-light-2796x1290.png",revision:"a46e458259177e134ad383d133b29774"},{url:"pwa/apple-splash-landscape-light-2778x1284.png",revision:"95d2479cf715c2ea0104fd5f55fa62b3"},{url:"pwa/apple-splash-landscape-light-2732x2048.png",revision:"0e5ec355113efe5ce253583209a64bb8"},{url:"pwa/apple-splash-landscape-light-2688x1242.png",revision:"3757f5338eb50c9f6fb8ad0d72597465"},{url:"pwa/apple-splash-landscape-light-2556x1179.png",revision:"3f0efc9e8de850ae5d3a72a158d39055"},{url:"pwa/apple-splash-landscape-light-2532x1170.png",revision:"b9e11e5a3435cf159f240b5f6da5dc76"},{url:"pwa/apple-splash-landscape-light-2436x1125.png",revision:"459b9c158b3a52222787d00a276baa21"},{url:"pwa/apple-splash-landscape-light-2388x1668.png",revision:"3733608412963cb747e32b2790013523"},{url:"pwa/apple-splash-landscape-light-2224x1668.png",revision:"ecf0efece27d70815f7401f7f3e40a24"},{url:"pwa/apple-splash-landscape-light-2208x1242.png",revision:"653857094b0c183908571fea1aed7b2f"},{url:"pwa/apple-splash-landscape-light-2160x1620.png",revision:"31ac689a78386cf844e33f10fd5d2029"},{url:"pwa/apple-splash-landscape-light-2048x1536.png",revision:"1b27b72b070b260eceeaab092a82663d"},{url:"pwa/apple-splash-landscape-light-1792x828.png",revision:"c6e29d789061fc48eb9f3a54cb1950be"},{url:"pwa/apple-splash-landscape-light-1334x750.png",revision:"f513cdc13ffaf0c2a82bb207e2a9a397"},{url:"pwa/apple-splash-landscape-light-1136x640.png",revision:"c9b4c38f0a267051c0c83cc92c0f5767"},{url:"pwa/apple-splash-landscape-dark-2796x1290.png",revision:"22b9597a28c081730e3430e467b4e36d"},{url:"pwa/apple-splash-landscape-dark-2778x1284.png",revision:"19d1e7a02d9edd3354c61b7c54ea9c1e"},{url:"pwa/apple-splash-landscape-dark-2732x2048.png",revision:"dc9fbb966dfc3350466279749c2946d7"},{url:"pwa/apple-splash-landscape-dark-2688x1242.png",revision:"dcd13ed9567fa4d98867f5c97cc89695"},{url:"pwa/apple-splash-landscape-dark-2556x1179.png",revision:"02e2914d36b2aaf6da02799414a23738"},{url:"pwa/apple-splash-landscape-dark-2532x1170.png",revision:"b89d280148f1bcb816c6364c37daefb6"},{url:"pwa/apple-splash-landscape-dark-2436x1125.png",revision:"85613cc4f5040791ef13e4b2a1ecc840"},{url:"pwa/apple-splash-landscape-dark-2388x1668.png",revision:"e17cbe3b198574eb6fc822c17e22d935"},{url:"pwa/apple-splash-landscape-dark-2224x1668.png",revision:"1144751415d9c1f3d1bc34407b9a9539"},{url:"pwa/apple-splash-landscape-dark-2208x1242.png",revision:"2989b9f038112f8eed3694fa53b86e6a"},{url:"pwa/apple-splash-landscape-dark-2160x1620.png",revision:"ee54046f738fe4346d7febbfaa711244"},{url:"pwa/apple-splash-landscape-dark-2048x1536.png",revision:"70f0181b7e075e3b64e261c4d4e3eada"},{url:"pwa/apple-splash-landscape-dark-1792x828.png",revision:"281d292ea4448638bb250a3fca5f5f44"},{url:"pwa/apple-splash-landscape-dark-1334x750.png",revision:"d82dd37eb2bdf815c1e2ab367134cbbf"},{url:"pwa/apple-splash-landscape-dark-1136x640.png",revision:"c6b193de9bd234c81fdea1d28fe7b88c"},{url:"fonts/InterVariable.woff2",revision:"2bf3d951bf9d6109437ea0874bbf12fb"},{url:"assets/zoom-in-D2zo_jfL.js",revision:null},{url:"assets/worker-yaml-crtWQpDN.js",revision:null},{url:"assets/worker-base-ybazWkNy.js",revision:null},{url:"assets/workbox-window.prod.es5-CtK9nkTO.js",revision:null},{url:"assets/web-xDCdGu4q.js",revision:null},{url:"assets/web-iAcZCcyL.js",revision:null},{url:"assets/web-ERIfo5an.js",revision:null},{url:"assets/web-DohTQteu.js",revision:null},{url:"assets/web-Do1A1_Uv.js",revision:null},{url:"assets/web-DiteWocu.js",revision:null},{url:"assets/web-D4GUyvng.js",revision:null},{url:"assets/web-D2BwFPf_.js",revision:null},{url:"assets/web-CbVsSB6C.js",revision:null},{url:"assets/web-BpltzPRC.js",revision:null},{url:"assets/web-BjKL51lK-D9ETiyug.js",revision:null},{url:"assets/web-Bba8RmHI.js",revision:null},{url:"assets/web-B9fYUOqN.js",revision:null},{url:"assets/web-54_Wj9Me.js",revision:null},{url:"assets/view-grid-D39XDBn9.js",revision:null},{url:"assets/view-grid-D04t817d.css",revision:null},{url:"assets/vendor-zod-V2qTUMVc.js",revision:null},{url:"assets/vendor-xterm-BrP-ENHg.css",revision:null},{url:"assets/vendor-xterm-BRN-hOYD.js",revision:null},{url:"assets/vendor-vueflow-DSLHUKHF.js",revision:null},{url:"assets/vendor-primevue-DYHQyonV.js",revision:null},{url:"assets/vendor-markdown-UV_ycMZu.js",revision:null},{url:"assets/vendor-markdown-DtOhvyRx.css",revision:null},{url:"assets/vendor-leaflet-vh-t_kPv.css",revision:null},{url:"assets/vendor-leaflet-_2Z0GiOD.js",revision:null},{url:"assets/vendor-gridstack-Rg2RhwAc.css",revision:null},{url:"assets/vendor-gridstack-DD5uGA3X.js",revision:null},{url:"assets/vendor-draggabilly-Dl6FWJwx.js",revision:null},{url:"assets/vendor-dnd-_zxmhxjM.js",revision:null},{url:"assets/vendor-core-CBFMCwgj.js",revision:null},{url:"assets/vendor-chart-CBBmwsyM.js",revision:null},{url:"assets/vendor-capacitor-DgfjcZj-.js",revision:null},{url:"assets/vendor-cameraui-B9wC4-mi.js",revision:null},{url:"assets/vendor-ace-DdrK3_G3.js",revision:null},{url:"assets/vendor-DoIl6acN.js",revision:null},{url:"assets/users.schema-2wYWhJ9W.js",revision:null},{url:"assets/useStreamStatus-Dy3K_ILd.js",revision:null},{url:"assets/useSharedComposables-DjDddcdT.js",revision:null},{url:"assets/useLogsSocket-BnU6ynWU.js",revision:null},{url:"assets/useLogsSocket-4F2-d9fa.css",revision:null},{url:"assets/useFileDownload-BLbAIlSX.js",revision:null},{url:"assets/useElectron-mh8HQUAI.js",revision:null},{url:"assets/useCuiDialog-DZvxI8xi.js",revision:null},{url:"assets/useCuiCameraDrawer-2I0LB3ff.js",revision:null},{url:"assets/useCameraOptions-D0rQaUuh.js",revision:null},{url:"assets/useBiometricCredentials-BGl37Skw.js",revision:null},{url:"assets/upload-AGww_lJf.js",revision:null},{url:"assets/ui-CnzJLu9N.js",revision:null},{url:"assets/types-CztXMZ5X.js",revision:null},{url:"assets/types-ByBSoibP.js",revision:null},{url:"assets/types-BxFyoO54.js",revision:null},{url:"assets/trash2-CaXm_MmJ.js",revision:null},{url:"assets/trash-fill-Da1v18iA.js",revision:null},{url:"assets/trash-2-CkdsE6jp.js",revision:null},{url:"assets/theme-B2fORWV9.js",revision:null},{url:"assets/terminal-DbYAPed-.js",revision:null},{url:"assets/shield-check-ChlSHOnR.js",revision:null},{url:"assets/shares-D0r3nTB0.js",revision:null},{url:"assets/settings-uhDSoUhb.js",revision:null},{url:"assets/server-BW0jfXav.js",revision:null},{url:"assets/search-D-QOrChC.js",revision:null},{url:"assets/routerState-ByP_jZ8E.js",revision:null},{url:"assets/router-DUCivZj8.js",revision:null},{url:"assets/router-BUTKN1yM.css",revision:null},{url:"assets/round-restart-alt-fCNtJi_k.css",revision:null},{url:"assets/round-restart-alt-bbbi50F4.js",revision:null},{url:"assets/round-alt-arrow-left-bold-C-0SLIa9.js",revision:null},{url:"assets/rolldown-runtime-DAXXjFlN.js",revision:null},{url:"assets/ring-resize-DQajal-Z.js",revision:null},{url:"assets/power-BcSFRPtI.js",revision:null},{url:"assets/plus-Dqgz6pez.js",revision:null},{url:"assets/plus-BMt5ORD8.js",revision:null},{url:"assets/plugins-BMys-WCs.js",revision:null},{url:"assets/plugin-C1dsgk0N.js",revision:null},{url:"assets/play-solid-BOoBnMaN.js",revision:null},{url:"assets/notifications-Cq1bDRQk.js",revision:null},{url:"assets/nodeDefinitions-blmt-d7H.js",revision:null},{url:"assets/native-j1dyx58L.js",revision:null},{url:"assets/native-fQjIFjCA.js",revision:null},{url:"assets/mode-yaml-CIYL8U3d.js",revision:null},{url:"assets/microphone-CAVr4YFv.js",revision:null},{url:"assets/main-DudyqPaR.css",revision:null},{url:"assets/main-D0dJIe_X.js",revision:null},{url:"assets/logo-DmEiRk0z.png",revision:null},{url:"assets/logo-256-BCQk9H1-.png",revision:null},{url:"assets/locale-hdhgxXOX.js",revision:null},{url:"assets/lightbulb-outline-B0CFho4y.js",revision:null},{url:"assets/instances-5MeVN25v.js",revision:null},{url:"assets/information-outline-ChTb2u7w.js",revision:null},{url:"assets/home-Dey3bw1P.js",revision:null},{url:"assets/hasPermission-B724PtFJ.js",revision:null},{url:"assets/grid-fill-DBU_n60V.js",revision:null},{url:"assets/github-DNzKZdHG.js",revision:null},{url:"assets/face-recognition-D5evlO1d.js",revision:null},{url:"assets/eventIcons-CtTopM6B.js",revision:null},{url:"assets/eventIcons-2hVCNchU.css",revision:null},{url:"assets/esm-yIpeulKl.js",revision:null},{url:"assets/esm-u_3xdCfr.js",revision:null},{url:"assets/esm-edrype40.js",revision:null},{url:"assets/esm-M_oLCAXC.js",revision:null},{url:"assets/esm-Do9bGF06.js",revision:null},{url:"assets/esm-Dc3lKVtD.js",revision:null},{url:"assets/esm-CjzerNPk.js",revision:null},{url:"assets/esm-CWeEZr0g.js",revision:null},{url:"assets/esm-CIAIVgGo.js",revision:null},{url:"assets/esm-CA4iVOgN2.js",revision:null},{url:"assets/esm-C51W8e2w.js",revision:null},{url:"assets/esm-BUgHC3bC.js",revision:null},{url:"assets/esm-B2shpuvL.js",revision:null},{url:"assets/esm-B-_4iFTo.js",revision:null},{url:"assets/error-256-DLKVOU2S.png",revision:null},{url:"assets/download-CY-SlBan.js",revision:null},{url:"assets/dist-CQkfz2Dn.js",revision:null},{url:"assets/deviceId-BM0pOHhg.js",revision:null},{url:"assets/delete-5a2q7_46.js",revision:null},{url:"assets/copy-DcVDLQlM.js",revision:null},{url:"assets/copy-16-filled-CZzRMAt_.js",revision:null},{url:"assets/cog-Ce2a8uiA.js",revision:null},{url:"assets/cloudHandoff-Cnd7f4Es.js",revision:null},{url:"assets/cloud-outline-CzQmkpCY.js",revision:null},{url:"assets/cloud-outline-BPAJ6_kc.js",revision:null},{url:"assets/cloud-check-BbqgBLhK.js",revision:null},{url:"assets/close-circle-ClG7lNzZ.js",revision:null},{url:"assets/close-DuwOOM-P.js",revision:null},{url:"assets/circular-connection-BTKd-doI.js",revision:null},{url:"assets/chevron-right-CXZ4SFSg.js",revision:null},{url:"assets/chevron-down-KZwkCQ3v.js",revision:null},{url:"assets/check-BMoCATAa.js",revision:null},{url:"assets/cctv-BsGdaLfw.js",revision:null},{url:"assets/cameras.schema-CuVLJONJ.js",revision:null},{url:"assets/cameras-BEBBV7mz.js",revision:null},{url:"assets/camera-preview-C7GT5VHo.png",revision:null},{url:"assets/bell-outline-U3Gb4nI1.js",revision:null},{url:"assets/bell-ChE83DC8.js",revision:null},{url:"assets/backup-BcXXJ1y6.js",revision:null},{url:"assets/back-filled-DqCMpeEk.js",revision:null},{url:"assets/automations-DVc4ovPU.js",revision:null},{url:"assets/automations-C2J4u5Uj.js",revision:null},{url:"assets/automation-IpK710bv.js",revision:null},{url:"assets/auth-Czmir2ST.js",revision:null},{url:"assets/arrow-right-outline-CliUt84m.js",revision:null},{url:"assets/arrow-left-9W2BpRxA.js",revision:null},{url:"assets/api-Cm9H8gwG.js",revision:null},{url:"assets/api-BB9AG_h5.css",revision:null},{url:"assets/api-B8LDDNgZ.js",revision:null},{url:"assets/alert-outline-T8FhpQ9w.js",revision:null},{url:"assets/ace.config-D884GuRj.js",revision:null},{url:"assets/ace-DQ1lNH50.js",revision:null},{url:"assets/_plugin-vue_export-helper-BDNMzG2s.js",revision:null},{url:"assets/Workers-xo6c0O5M.js",revision:null},{url:"assets/VersionsHandler-BrfHmvOf.js",revision:null},{url:"assets/VariableSuggestions-K3CHs8XG.js",revision:null},{url:"assets/VariableInput-tPI6hxP8.js",revision:null},{url:"assets/Terminal-h5vqtN-o.js",revision:null},{url:"assets/Terminal-CrOfQJ-O.css",revision:null},{url:"assets/SettingsUsers-CimG6HaL.js",revision:null},{url:"assets/SettingsSystem-DwXSeR_Z.js",revision:null},{url:"assets/SettingsRemote-Dg3BfdmI.js",revision:null},{url:"assets/SettingsRemote-D9COJF4m.css",revision:null},{url:"assets/SettingsRecordings-uNRwROAh.js",revision:null},{url:"assets/SettingsNotifications-OV4-nraE.js",revision:null},{url:"assets/SettingsBackup-CX0rT0QJ.css",revision:null},{url:"assets/SettingsBackup-CCEtuJsQ.js",revision:null},{url:"assets/SettingsAppearance-DSNXI3t4.js",revision:null},{url:"assets/SettingsAppearance-CwPSvzkX.js",revision:null},{url:"assets/SettingsAccount-Y7hpH8Y3.css",revision:null},{url:"assets/SettingsAccount-C_pQPGoW.js",revision:null},{url:"assets/SettingsAccount-BgpeeHsR.js",revision:null},{url:"assets/Settings-bwLTNAxX.css",revision:null},{url:"assets/Settings-Bz7u44Pl.js",revision:null},{url:"assets/Recordings-Daf0TCPA.js",revision:null},{url:"assets/Recordings-Bt_GlPOK.css",revision:null},{url:"assets/Plugins-s1k811lf.css",revision:null},{url:"assets/Plugins-B7ZOk3ld.js",revision:null},{url:"assets/PluginSchema-BcLXAX-Q.js",revision:null},{url:"assets/PluginConsole-C-ndOnmZ.js",revision:null},{url:"assets/Plugin-CWjFyBeK.js",revision:null},{url:"assets/Plugin-CHdZvbiP.css",revision:null},{url:"assets/OAuthDeviceFlow-CxJbM1jZ.js",revision:null},{url:"assets/Menu-uW8DUGLM.js",revision:null},{url:"assets/Logs-CpAkrsEJ.js",revision:null},{url:"assets/Instances-CWzMYIvB.js",revision:null},{url:"assets/FirstSteps-YNR-3tqt.js",revision:null},{url:"assets/Faces-u9Rxm4Ti.js",revision:null},{url:"assets/CuiTopbarSlot-DbzQRnbt.js",revision:null},{url:"assets/CuiTopNavbarItem-CqM9AHmU.js",revision:null},{url:"assets/CuiTopNavbarItem-CJqOqVMt.css",revision:null},{url:"assets/CuiSchema-DEYDened.js",revision:null},{url:"assets/CuiSchema--yMBD996.css",revision:null},{url:"assets/CuiRecordingsGrid-lcLty5PV.css",revision:null},{url:"assets/CuiRecordingsGrid-BFHPh2dn.js",revision:null},{url:"assets/CuiQRCode-CVHjvjZP.js",revision:null},{url:"assets/CuiQRCode-BtErH65J.css",revision:null},{url:"assets/CuiPluginOAuthButton-Q2CBmZzv.js",revision:null},{url:"assets/CuiPluginCard-LxNHYHxa.css",revision:null},{url:"assets/CuiPluginCard-Bu_rNdQH.js",revision:null},{url:"assets/CuiMenu-BWUfWLQP.css",revision:null},{url:"assets/CuiMenu-BO2e4LK5.js",revision:null},{url:"assets/CuiMarkdownContent-YieurDkL.js",revision:null},{url:"assets/CuiImage-Bxf7z2N4.css",revision:null},{url:"assets/CuiImage-B3eMhhIS.js",revision:null},{url:"assets/CuiFloatingButton-BLCO4wJw.js",revision:null},{url:"assets/CuiDataTable-DWuXg9Zg.css",revision:null},{url:"assets/CuiDataTable-D9GqApg1.js",revision:null},{url:"assets/CuiCameraTable-B5wQAGfM.js",revision:null},{url:"assets/CuiCameraSnapshot-C33nUgVt.js",revision:null},{url:"assets/CuiCameraShares-BvwB4H_0.js",revision:null},{url:"assets/CuiCameraRecordings-bqChEXwx.js",revision:null},{url:"assets/CuiCameraRecordings-BHj7CUE7.css",revision:null},{url:"assets/CuiCameraPipCard-DehPfhfs.js",revision:null},{url:"assets/CuiCameraPipCard-D3o29_wc.css",revision:null},{url:"assets/CuiCameraCard-kI_GNoa7.js",revision:null},{url:"assets/CuiCameraCard-BxGmxXxZ.css",revision:null},{url:"assets/CuiBottomSheet-zPb4AI5w.js",revision:null},{url:"assets/CuiBottomSheet-DsjZEdig.css",revision:null},{url:"assets/CuiBottomSheet-DSG6iONb.js",revision:null},{url:"assets/CuiBBoxPlayground-EFkdOBvq.css",revision:null},{url:"assets/CuiBBoxPlayground-DOcoHCTQ.js",revision:null},{url:"assets/CuiAvatar-DUucUxIP.js",revision:null},{url:"assets/CuiAvatar-BtMXnhxd.css",revision:null},{url:"assets/CuiActionButton-CNTiGrTt.js",revision:null},{url:"assets/Console-B4SQZA5X.js",revision:null},{url:"assets/ConfigTriggerWebhook-CrtHc6Q3.js",revision:null},{url:"assets/ConfigTriggerSystem-CO06Crjg.js",revision:null},{url:"assets/ConfigTriggerSensor-BbKksZMP.js",revision:null},{url:"assets/ConfigTriggerSchedule-vC9yyRct.js",revision:null},{url:"assets/ConfigTriggerManual-DDmBGqnC.js",revision:null},{url:"assets/ConfigTriggerGeofence-DCqAqAG3.js",revision:null},{url:"assets/ConfigTriggerDetection-BrtBsd1t.js",revision:null},{url:"assets/ConfigConditionTime-bHKJ8kBR.js",revision:null},{url:"assets/ConfigConditionSwitch-BPdEa--b.js",revision:null},{url:"assets/ConfigConditionSensorState-CIbkk6LA.js",revision:null},{url:"assets/ConfigConditionIfElse-pp0wRFeJ.js",revision:null},{url:"assets/ConfigActionVariable-D-1zVFz-.js",revision:null},{url:"assets/ConfigActionSnapshot-k8RM-NMf.js",revision:null},{url:"assets/ConfigActionSensor-C6DOrCYd.js",revision:null},{url:"assets/ConfigActionPlugin-C1OSUQ3_.js",revision:null},{url:"assets/ConfigActionOutput-BB-jkCdD.js",revision:null},{url:"assets/ConfigActionNotification-FzGgJM9i.js",revision:null},{url:"assets/ConfigActionImageInput-D8ipnlfe.js",revision:null},{url:"assets/ConfigActionHttp-C9nEQ-7w.js",revision:null},{url:"assets/ConfigActionDelay-CYz0z9Od.js",revision:null},{url:"assets/ConfigActionCameraControl-BRgTU6MP.js",revision:null},{url:"assets/Config-JgftUZFe.css",revision:null},{url:"assets/Config-CfunWNtM.js",revision:null},{url:"assets/Camview-Gxca3bvT.css",revision:null},{url:"assets/Camview-B-Pqm0Fw.js",revision:null},{url:"assets/Cameras-CVID1akl.js",revision:null},{url:"assets/Cameras-54LaZPN3.css",revision:null},{url:"assets/CameraConsole-DGbeilsL.js",revision:null},{url:"assets/Camera-BlN_KppY.js",revision:null},{url:"assets/Camera-BG8K5bH_.css",revision:null},{url:"assets/Automations-by_LN5br.js",revision:null},{url:"assets/Automation-Csu8t0D7.css",revision:null},{url:"assets/Automation-CMMDPrn0.js",revision:null},{url:"assets/Adminpanel-Cciuxh1q.js",revision:null},{url:"assets/About-TDIJXs5o.js",revision:null},{url:"assets/404-CZDMFg2Z.js",revision:null},{url:"pwa/maskable-icon-1240x600.png",revision:"f3188c7d8e5038f28068c7a3632dbe4b"},{url:"pwa/maskable-icon-512x512.png",revision:"e716feaa60f08d95d0909e1c85bf1f98"},{url:"pwa/maskable-icon-620x300.png",revision:"b4954ceadf0d6f2095c45f8cc8240337"},{url:"pwa/pwa-1024x1024.png",revision:"1ed367ae76416e79fd0bdd6ee70666bc"},{url:"pwa/pwa-120x120.png",revision:"3f5ec31f6bd07910482227b259344110"},{url:"pwa/pwa-144x144.png",revision:"4fdf5c8fb085f764ed7dd5a26698bff5"},{url:"pwa/pwa-152x152.png",revision:"4cf41c7b603d382e83e098affb7cb9da"},{url:"pwa/pwa-167x167.png",revision:"de6a5ca921b45fb3bd30d27c707981c6"},{url:"pwa/pwa-180x180.png",revision:"225b42752632e2866c4f8fe4ab2f62ee"},{url:"pwa/pwa-192x192.png",revision:"3d58c2dd940c535cc166cc8d0844429d"},{url:"pwa/pwa-24x24.png",revision:"bdb25f68ca300283b37041e47d3e6ba8"},{url:"pwa/pwa-300x300.png",revision:"7f79d74e34aedef57c98a1c9c156ba6b"},{url:"pwa/pwa-36x36.png",revision:"4d08bb198d4e54e4d12a0810fc59f059"},{url:"pwa/pwa-48x48.png",revision:"97d7369c892f1e0914c2617ff26feb3c"},{url:"pwa/pwa-50x50.png",revision:"a20fc2e6f26aa548f9cae07911087f6c"},{url:"pwa/pwa-64x64.png",revision:"f57763be3212fd4154c502d607e7ed38"},{url:"pwa/pwa-72x72.png",revision:"66698bb499639052ad337f7e9a7d7ea8"},{url:"pwa/pwa-88x88.png",revision:"6e8af0a85b0627a835b62067d5189cb4"},{url:"pwa/pwa-96x96.png",revision:"675ea863c25fa9ae31d4d76a47463c78"},{url:"manifest.webmanifest",revision:"ed2b67044c80f7c0362cd73cde2f96c5"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{allowlist:[/^(?!\/api)/],denylist:[/[?&]session=/]}))});
|
|
1
|
+
if(!self.define){let s,e={};const l=(l,i)=>(l=new URL(l+".js",i).href,e[l]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()}).then(()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s}));self.define=(i,a)=>{const r=s||("document"in self?document.currentScript.src:"")||location.href;if(e[r])return;let n={};const u=s=>l(s,r),o={module:{uri:r},exports:n,require:u};e[r]=Promise.all(i.map(s=>o[s]||u(s))).then(s=>(a(...s),n))}}define(["./workbox-5f44db27"],function(s){"use strict";s.setCacheNameDetails({prefix:"camera-ui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"robots.txt",revision:"f77c87f977e0fcce05a6df46c885a129"},{url:"og-share.png",revision:"0ca1dd15e2498de1d1423fe6134db452"},{url:"index.html",revision:"09e44e533fbdeef3c8d2febc9d8ff6db"},{url:"pwa/pwa-96x96.png",revision:"675ea863c25fa9ae31d4d76a47463c78"},{url:"pwa/pwa-88x88.png",revision:"6e8af0a85b0627a835b62067d5189cb4"},{url:"pwa/pwa-72x72.png",revision:"66698bb499639052ad337f7e9a7d7ea8"},{url:"pwa/pwa-64x64.png",revision:"f57763be3212fd4154c502d607e7ed38"},{url:"pwa/pwa-50x50.png",revision:"a20fc2e6f26aa548f9cae07911087f6c"},{url:"pwa/pwa-48x48.png",revision:"97d7369c892f1e0914c2617ff26feb3c"},{url:"pwa/pwa-36x36.png",revision:"4d08bb198d4e54e4d12a0810fc59f059"},{url:"pwa/pwa-300x300.png",revision:"7f79d74e34aedef57c98a1c9c156ba6b"},{url:"pwa/pwa-24x24.png",revision:"bdb25f68ca300283b37041e47d3e6ba8"},{url:"pwa/pwa-192x192.png",revision:"3d58c2dd940c535cc166cc8d0844429d"},{url:"pwa/pwa-180x180.png",revision:"225b42752632e2866c4f8fe4ab2f62ee"},{url:"pwa/pwa-167x167.png",revision:"de6a5ca921b45fb3bd30d27c707981c6"},{url:"pwa/pwa-152x152.png",revision:"4cf41c7b603d382e83e098affb7cb9da"},{url:"pwa/pwa-144x144.png",revision:"4fdf5c8fb085f764ed7dd5a26698bff5"},{url:"pwa/pwa-120x120.png",revision:"3f5ec31f6bd07910482227b259344110"},{url:"pwa/pwa-1024x1024.png",revision:"1ed367ae76416e79fd0bdd6ee70666bc"},{url:"pwa/maskable-icon-620x300.png",revision:"b4954ceadf0d6f2095c45f8cc8240337"},{url:"pwa/maskable-icon-512x512.png",revision:"e716feaa60f08d95d0909e1c85bf1f98"},{url:"pwa/maskable-icon-1240x600.png",revision:"f3188c7d8e5038f28068c7a3632dbe4b"},{url:"pwa/logo.svg",revision:"1aa262f4a37293a91083eea10794d2ca"},{url:"pwa/favicon-64.ico",revision:"6a697d7662ab5ee246918cdc7c412343"},{url:"pwa/favicon-48.ico",revision:"d0a27003af457cb85651c84c60c87ef0"},{url:"pwa/favicon-32.ico",revision:"6e711cbf0b53afe4a7d0057780fa42b9"},{url:"pwa/favicon-16.ico",revision:"163ae861c5ab9f68ed21324c19dfe35d"},{url:"pwa/apple-touch-icon-180x180.png",revision:"91aec7b3a553812fbd3cd72adb17fcc4"},{url:"pwa/apple-splash-portrait-light-828x1792.png",revision:"8deb1063185df6a2d3089a9fa33f6ad1"},{url:"pwa/apple-splash-portrait-light-750x1334.png",revision:"191c785b1e7b47ac1b1d6bc2a84bde85"},{url:"pwa/apple-splash-portrait-light-640x1136.png",revision:"588e312fd0851d5767972a1efc33e6a3"},{url:"pwa/apple-splash-portrait-light-2048x2732.png",revision:"cf9c75c2e56f8d3af7d914a00ce30286"},{url:"pwa/apple-splash-portrait-light-1668x2388.png",revision:"5db134deca3d2e8a1ae2d8e67c77c420"},{url:"pwa/apple-splash-portrait-light-1668x2224.png",revision:"a1b5adab2a71d0fa646e7b0e9a4fcb71"},{url:"pwa/apple-splash-portrait-light-1620x2160.png",revision:"41bdc2c492d374bf8c6b6875e2beb9f1"},{url:"pwa/apple-splash-portrait-light-1536x2048.png",revision:"42716fc23cfa58d3f154fea1875eb3f5"},{url:"pwa/apple-splash-portrait-light-1290x2796.png",revision:"d57711837cf7e3801a9e8126b1695aaa"},{url:"pwa/apple-splash-portrait-light-1284x2778.png",revision:"461b13cf0d9c293ca220700bb4148afa"},{url:"pwa/apple-splash-portrait-light-1242x2688.png",revision:"2b320f74bc7da7bf0d1be699183416c3"},{url:"pwa/apple-splash-portrait-light-1242x2208.png",revision:"8fd1367cac03e5798973cfa4e0dec5b0"},{url:"pwa/apple-splash-portrait-light-1179x2556.png",revision:"8d1fc622bdb48dda2461e4f47a49249a"},{url:"pwa/apple-splash-portrait-light-1170x2532.png",revision:"58d656b4de9b32a09fc2ea1028116dfb"},{url:"pwa/apple-splash-portrait-light-1125x2436.png",revision:"1a02e33add13bccc9f407efcfd2cf890"},{url:"pwa/apple-splash-portrait-dark-828x1792.png",revision:"543d10f74f6f098e49ba989899182dee"},{url:"pwa/apple-splash-portrait-dark-750x1334.png",revision:"54f99ba556f7cc149eb03fe6207d411d"},{url:"pwa/apple-splash-portrait-dark-640x1136.png",revision:"b901a6f04ef976aa81573ec0f3c8f32b"},{url:"pwa/apple-splash-portrait-dark-2048x2732.png",revision:"60acb5fbde5bb76a368238c5e079c717"},{url:"pwa/apple-splash-portrait-dark-1668x2388.png",revision:"fb7fb372580598abf8a1d8eb7305462a"},{url:"pwa/apple-splash-portrait-dark-1668x2224.png",revision:"1e7b39c9f5fdca7ddf23c1248f7628bf"},{url:"pwa/apple-splash-portrait-dark-1620x2160.png",revision:"1a9f84fba88d4cd5924cf5a39d541b46"},{url:"pwa/apple-splash-portrait-dark-1536x2048.png",revision:"0b26c0a578f6b13b3df06abecc81fb82"},{url:"pwa/apple-splash-portrait-dark-1290x2796.png",revision:"e7f2a468891736413b1e0622a510fd5a"},{url:"pwa/apple-splash-portrait-dark-1284x2778.png",revision:"d7230994de3c4c6016ac252431031ea7"},{url:"pwa/apple-splash-portrait-dark-1242x2688.png",revision:"c56eb0a4a8b4c7bb850cbfc35dd62bba"},{url:"pwa/apple-splash-portrait-dark-1242x2208.png",revision:"1b7f03eaab3cf8af8aa6057fd97278d8"},{url:"pwa/apple-splash-portrait-dark-1179x2556.png",revision:"8eac224083023d0d21374d9f9087bab5"},{url:"pwa/apple-splash-portrait-dark-1170x2532.png",revision:"476ac5131289040d8d88803c18dc20bb"},{url:"pwa/apple-splash-portrait-dark-1125x2436.png",revision:"53ddd8644a89bfc79c8d1bfbaa51527b"},{url:"pwa/apple-splash-landscape-light-2796x1290.png",revision:"a46e458259177e134ad383d133b29774"},{url:"pwa/apple-splash-landscape-light-2778x1284.png",revision:"95d2479cf715c2ea0104fd5f55fa62b3"},{url:"pwa/apple-splash-landscape-light-2732x2048.png",revision:"0e5ec355113efe5ce253583209a64bb8"},{url:"pwa/apple-splash-landscape-light-2688x1242.png",revision:"3757f5338eb50c9f6fb8ad0d72597465"},{url:"pwa/apple-splash-landscape-light-2556x1179.png",revision:"3f0efc9e8de850ae5d3a72a158d39055"},{url:"pwa/apple-splash-landscape-light-2532x1170.png",revision:"b9e11e5a3435cf159f240b5f6da5dc76"},{url:"pwa/apple-splash-landscape-light-2436x1125.png",revision:"459b9c158b3a52222787d00a276baa21"},{url:"pwa/apple-splash-landscape-light-2388x1668.png",revision:"3733608412963cb747e32b2790013523"},{url:"pwa/apple-splash-landscape-light-2224x1668.png",revision:"ecf0efece27d70815f7401f7f3e40a24"},{url:"pwa/apple-splash-landscape-light-2208x1242.png",revision:"653857094b0c183908571fea1aed7b2f"},{url:"pwa/apple-splash-landscape-light-2160x1620.png",revision:"31ac689a78386cf844e33f10fd5d2029"},{url:"pwa/apple-splash-landscape-light-2048x1536.png",revision:"1b27b72b070b260eceeaab092a82663d"},{url:"pwa/apple-splash-landscape-light-1792x828.png",revision:"c6e29d789061fc48eb9f3a54cb1950be"},{url:"pwa/apple-splash-landscape-light-1334x750.png",revision:"f513cdc13ffaf0c2a82bb207e2a9a397"},{url:"pwa/apple-splash-landscape-light-1136x640.png",revision:"c9b4c38f0a267051c0c83cc92c0f5767"},{url:"pwa/apple-splash-landscape-dark-2796x1290.png",revision:"22b9597a28c081730e3430e467b4e36d"},{url:"pwa/apple-splash-landscape-dark-2778x1284.png",revision:"19d1e7a02d9edd3354c61b7c54ea9c1e"},{url:"pwa/apple-splash-landscape-dark-2732x2048.png",revision:"dc9fbb966dfc3350466279749c2946d7"},{url:"pwa/apple-splash-landscape-dark-2688x1242.png",revision:"dcd13ed9567fa4d98867f5c97cc89695"},{url:"pwa/apple-splash-landscape-dark-2556x1179.png",revision:"02e2914d36b2aaf6da02799414a23738"},{url:"pwa/apple-splash-landscape-dark-2532x1170.png",revision:"b89d280148f1bcb816c6364c37daefb6"},{url:"pwa/apple-splash-landscape-dark-2436x1125.png",revision:"85613cc4f5040791ef13e4b2a1ecc840"},{url:"pwa/apple-splash-landscape-dark-2388x1668.png",revision:"e17cbe3b198574eb6fc822c17e22d935"},{url:"pwa/apple-splash-landscape-dark-2224x1668.png",revision:"1144751415d9c1f3d1bc34407b9a9539"},{url:"pwa/apple-splash-landscape-dark-2208x1242.png",revision:"2989b9f038112f8eed3694fa53b86e6a"},{url:"pwa/apple-splash-landscape-dark-2160x1620.png",revision:"ee54046f738fe4346d7febbfaa711244"},{url:"pwa/apple-splash-landscape-dark-2048x1536.png",revision:"70f0181b7e075e3b64e261c4d4e3eada"},{url:"pwa/apple-splash-landscape-dark-1792x828.png",revision:"281d292ea4448638bb250a3fca5f5f44"},{url:"pwa/apple-splash-landscape-dark-1334x750.png",revision:"d82dd37eb2bdf815c1e2ab367134cbbf"},{url:"pwa/apple-splash-landscape-dark-1136x640.png",revision:"c6b193de9bd234c81fdea1d28fe7b88c"},{url:"fonts/InterVariable.woff2",revision:"2bf3d951bf9d6109437ea0874bbf12fb"},{url:"assets/zoom-in-D2zo_jfL.js",revision:null},{url:"assets/worker-yaml-crtWQpDN.js",revision:null},{url:"assets/worker-base-ybazWkNy.js",revision:null},{url:"assets/workbox-window.prod.es5-CtK9nkTO.js",revision:null},{url:"assets/web-xDCdGu4q.js",revision:null},{url:"assets/web-iAcZCcyL.js",revision:null},{url:"assets/web-ERIfo5an.js",revision:null},{url:"assets/web-DohTQteu.js",revision:null},{url:"assets/web-Do1A1_Uv.js",revision:null},{url:"assets/web-DiteWocu.js",revision:null},{url:"assets/web-D4GUyvng.js",revision:null},{url:"assets/web-D2BwFPf_.js",revision:null},{url:"assets/web-CbVsSB6C.js",revision:null},{url:"assets/web-BpltzPRC.js",revision:null},{url:"assets/web-BjKL51lK-D9ETiyug.js",revision:null},{url:"assets/web-Bba8RmHI.js",revision:null},{url:"assets/web-B9fYUOqN.js",revision:null},{url:"assets/web-54_Wj9Me.js",revision:null},{url:"assets/view-grid-D04t817d.css",revision:null},{url:"assets/view-grid-Cs5VWmxE.js",revision:null},{url:"assets/vendor-zod-DycFxUhi.js",revision:null},{url:"assets/vendor-xterm-BrP-ENHg.css",revision:null},{url:"assets/vendor-xterm-BRN-hOYD.js",revision:null},{url:"assets/vendor-vueflow-DSLHUKHF.js",revision:null},{url:"assets/vendor-primevue-7iEzPOvf.js",revision:null},{url:"assets/vendor-markdown-UV_ycMZu.js",revision:null},{url:"assets/vendor-markdown-DtOhvyRx.css",revision:null},{url:"assets/vendor-leaflet-vh-t_kPv.css",revision:null},{url:"assets/vendor-leaflet-_2Z0GiOD.js",revision:null},{url:"assets/vendor-gridstack-Rg2RhwAc.css",revision:null},{url:"assets/vendor-gridstack-DD5uGA3X.js",revision:null},{url:"assets/vendor-draggabilly-Dl6FWJwx.js",revision:null},{url:"assets/vendor-dnd-_zxmhxjM.js",revision:null},{url:"assets/vendor-core-BKHiXSX7.js",revision:null},{url:"assets/vendor-chart-CBBmwsyM.js",revision:null},{url:"assets/vendor-capacitor-DgfjcZj-.js",revision:null},{url:"assets/vendor-cameraui-DgSMexWY.js",revision:null},{url:"assets/vendor-ace-DdrK3_G3.js",revision:null},{url:"assets/vendor-DoIl6acN.js",revision:null},{url:"assets/users.schema-Bz59q-My.js",revision:null},{url:"assets/useStreamStatus-BdN05nfE.js",revision:null},{url:"assets/useSharedComposables-gpJ--qZh.js",revision:null},{url:"assets/useLogsSocket-rG2BaLWl.js",revision:null},{url:"assets/useLogsSocket-4F2-d9fa.css",revision:null},{url:"assets/useFileDownload-CSek7CzK.js",revision:null},{url:"assets/useElectron-mh8HQUAI.js",revision:null},{url:"assets/useCuiDialog-C50obC48.js",revision:null},{url:"assets/useCuiCameraDrawer-DnN9lwiy.js",revision:null},{url:"assets/useCameraOptions-CoogpQnN.js",revision:null},{url:"assets/useBiometricCredentials-DDyhIy7O.js",revision:null},{url:"assets/upload-AGww_lJf.js",revision:null},{url:"assets/ui-DrzKhUXW.js",revision:null},{url:"assets/types-C9iWhZtk.js",revision:null},{url:"assets/types-ByBSoibP.js",revision:null},{url:"assets/types-BxFyoO54.js",revision:null},{url:"assets/trash2-CaXm_MmJ.js",revision:null},{url:"assets/trash-fill-Da1v18iA.js",revision:null},{url:"assets/trash-2-CkdsE6jp.js",revision:null},{url:"assets/theme-DhiUIeo3.js",revision:null},{url:"assets/terminal-DbYAPed-.js",revision:null},{url:"assets/shield-check-ChlSHOnR.js",revision:null},{url:"assets/shares-ZKyJZapA.js",revision:null},{url:"assets/settings-uhDSoUhb.js",revision:null},{url:"assets/server-CmXhhpSW.js",revision:null},{url:"assets/search-D-QOrChC.js",revision:null},{url:"assets/routerState-dQtObsFs.js",revision:null},{url:"assets/router-CvWvXFyk.js",revision:null},{url:"assets/router-BUTKN1yM.css",revision:null},{url:"assets/round-restart-alt-wyrnMpa4.js",revision:null},{url:"assets/round-restart-alt-fCNtJi_k.css",revision:null},{url:"assets/round-alt-arrow-left-bold-C-0SLIa9.js",revision:null},{url:"assets/rolldown-runtime-DAXXjFlN.js",revision:null},{url:"assets/ring-resize-DQajal-Z.js",revision:null},{url:"assets/power-BcSFRPtI.js",revision:null},{url:"assets/plus-Dqgz6pez.js",revision:null},{url:"assets/plus-BMt5ORD8.js",revision:null},{url:"assets/plugins-tQniunmN.js",revision:null},{url:"assets/plugin-C1dsgk0N.js",revision:null},{url:"assets/play-solid-BOoBnMaN.js",revision:null},{url:"assets/notifications-DGRbcf65.js",revision:null},{url:"assets/nodeDefinitions-blmt-d7H.js",revision:null},{url:"assets/native-j1dyx58L.js",revision:null},{url:"assets/native-fQjIFjCA.js",revision:null},{url:"assets/mode-yaml-CIYL8U3d.js",revision:null},{url:"assets/microphone-CAVr4YFv.js",revision:null},{url:"assets/main-DudyqPaR.css",revision:null},{url:"assets/main-CjUbwZ3z.js",revision:null},{url:"assets/logo-DmEiRk0z.png",revision:null},{url:"assets/logo-512-DLKVOU2S.png",revision:null},{url:"assets/logo-256-BCQk9H1-.png",revision:null},{url:"assets/locale-qn_8MsnX.js",revision:null},{url:"assets/lightbulb-outline-B0CFho4y.js",revision:null},{url:"assets/instances-BBnYdgRc.js",revision:null},{url:"assets/information-outline-ChTb2u7w.js",revision:null},{url:"assets/home-Dey3bw1P.js",revision:null},{url:"assets/hasPermission-DdAdlKls.js",revision:null},{url:"assets/grid-fill-DBU_n60V.js",revision:null},{url:"assets/github-DNzKZdHG.js",revision:null},{url:"assets/face-recognition-D5evlO1d.js",revision:null},{url:"assets/eventIcons-CtTopM6B.js",revision:null},{url:"assets/eventIcons-2hVCNchU.css",revision:null},{url:"assets/esm-yIpeulKl.js",revision:null},{url:"assets/esm-u_3xdCfr.js",revision:null},{url:"assets/esm-edrype40.js",revision:null},{url:"assets/esm-M_oLCAXC.js",revision:null},{url:"assets/esm-Do9bGF06.js",revision:null},{url:"assets/esm-Dc3lKVtD.js",revision:null},{url:"assets/esm-CjzerNPk.js",revision:null},{url:"assets/esm-CWeEZr0g.js",revision:null},{url:"assets/esm-CIAIVgGo.js",revision:null},{url:"assets/esm-CA4iVOgN2.js",revision:null},{url:"assets/esm-C51W8e2w.js",revision:null},{url:"assets/esm-BUgHC3bC.js",revision:null},{url:"assets/esm-B2shpuvL.js",revision:null},{url:"assets/esm-B-_4iFTo.js",revision:null},{url:"assets/download-CY-SlBan.js",revision:null},{url:"assets/dist-CQkfz2Dn.js",revision:null},{url:"assets/deviceId-DMh1VcHg.js",revision:null},{url:"assets/delete-5a2q7_46.js",revision:null},{url:"assets/copy-DcVDLQlM.js",revision:null},{url:"assets/copy-16-filled-CZzRMAt_.js",revision:null},{url:"assets/cog-Ce2a8uiA.js",revision:null},{url:"assets/cloudHandoff-zXwtzo8e.js",revision:null},{url:"assets/cloud-outline-CzQmkpCY.js",revision:null},{url:"assets/cloud-outline-BPAJ6_kc.js",revision:null},{url:"assets/cloud-check-BbqgBLhK.js",revision:null},{url:"assets/close-circle-ClG7lNzZ.js",revision:null},{url:"assets/close-DuwOOM-P.js",revision:null},{url:"assets/circular-connection-BTKd-doI.js",revision:null},{url:"assets/chevron-right-CXZ4SFSg.js",revision:null},{url:"assets/chevron-down-KZwkCQ3v.js",revision:null},{url:"assets/check-BMoCATAa.js",revision:null},{url:"assets/cctv-BsGdaLfw.js",revision:null},{url:"assets/cameras.schema-BULBdfmS.js",revision:null},{url:"assets/cameras-WikE4nxe.js",revision:null},{url:"assets/camera-preview-C7GT5VHo.png",revision:null},{url:"assets/bell-outline-U3Gb4nI1.js",revision:null},{url:"assets/bell-ChE83DC8.js",revision:null},{url:"assets/backup-DYBEA8gj.js",revision:null},{url:"assets/back-filled-DqCMpeEk.js",revision:null},{url:"assets/automations-wQnuqfmi.js",revision:null},{url:"assets/automations-C309DNNg.js",revision:null},{url:"assets/automation-IpK710bv.js",revision:null},{url:"assets/auth-DJ1WgC3s.js",revision:null},{url:"assets/arrow-right-outline-CliUt84m.js",revision:null},{url:"assets/arrow-left-9W2BpRxA.js",revision:null},{url:"assets/api-DY4FSNX7.js",revision:null},{url:"assets/api-BWWcvHf5.js",revision:null},{url:"assets/api-BB9AG_h5.css",revision:null},{url:"assets/alert-outline-T8FhpQ9w.js",revision:null},{url:"assets/ace.config-D884GuRj.js",revision:null},{url:"assets/ace-DQ1lNH50.js",revision:null},{url:"assets/_plugin-vue_export-helper-BDNMzG2s.js",revision:null},{url:"assets/Workers-CXvuE4Bn.js",revision:null},{url:"assets/VersionsHandler-DF_kclOb.js",revision:null},{url:"assets/VariableSuggestions-PEzupqiE.js",revision:null},{url:"assets/VariableInput-CFs-kzqd.js",revision:null},{url:"assets/Terminal-CrOfQJ-O.css",revision:null},{url:"assets/Terminal-BsdUon5-.js",revision:null},{url:"assets/SettingsUsers-DLAYh9IA.js",revision:null},{url:"assets/SettingsSystem-Du3S8gps.js",revision:null},{url:"assets/SettingsRemote-D9COJF4m.css",revision:null},{url:"assets/SettingsRemote-CBLPWHM6.js",revision:null},{url:"assets/SettingsRecordings-x4yRgxJm.js",revision:null},{url:"assets/SettingsNotifications-te4LKEdZ.js",revision:null},{url:"assets/SettingsBackup-t2irnG2Z.js",revision:null},{url:"assets/SettingsBackup-CX0rT0QJ.css",revision:null},{url:"assets/SettingsAppearance-e45pjRF6.js",revision:null},{url:"assets/SettingsAppearance-De_E9UCe.js",revision:null},{url:"assets/SettingsAccount-Y7hpH8Y3.css",revision:null},{url:"assets/SettingsAccount-UKbQLW6n.js",revision:null},{url:"assets/SettingsAccount-BcPNz9jC.js",revision:null},{url:"assets/Settings-bwLTNAxX.css",revision:null},{url:"assets/Settings-BVa4xU_p.js",revision:null},{url:"assets/Recordings-Bt_GlPOK.css",revision:null},{url:"assets/Recordings-BgqhrYcF.js",revision:null},{url:"assets/Plugins-s1k811lf.css",revision:null},{url:"assets/Plugins-DfMxKm_j.js",revision:null},{url:"assets/PluginSchema-CcWTcoz_.js",revision:null},{url:"assets/PluginConsole-CQebF4NZ.js",revision:null},{url:"assets/Plugin-DcwR4dBy.js",revision:null},{url:"assets/Plugin-CHdZvbiP.css",revision:null},{url:"assets/OAuthDeviceFlow-k6_zfcw_.js",revision:null},{url:"assets/Menu-BlYf1LF3.js",revision:null},{url:"assets/Logs-CJcq3xd6.js",revision:null},{url:"assets/Instances-CxgKUsJh.js",revision:null},{url:"assets/FirstSteps-Bpu4QLhF.js",revision:null},{url:"assets/Faces-DufdNYrc.js",revision:null},{url:"assets/CuiTopbarSlot-ac4GLLbf.js",revision:null},{url:"assets/CuiTopNavbarItem-Q7M4nMw5.js",revision:null},{url:"assets/CuiTopNavbarItem-CJqOqVMt.css",revision:null},{url:"assets/CuiSchema-Bdy2raxw.js",revision:null},{url:"assets/CuiSchema--yMBD996.css",revision:null},{url:"assets/CuiRecordingsGrid-lcLty5PV.css",revision:null},{url:"assets/CuiRecordingsGrid-BNyITEKD.js",revision:null},{url:"assets/CuiQRCode-CP6aDzF5.js",revision:null},{url:"assets/CuiQRCode-BtErH65J.css",revision:null},{url:"assets/CuiPluginOAuthButton-CxNqrBe7.js",revision:null},{url:"assets/CuiPluginCard-LxNHYHxa.css",revision:null},{url:"assets/CuiPluginCard-CwGKyEU6.js",revision:null},{url:"assets/CuiMenu-vSJpyg_1.js",revision:null},{url:"assets/CuiMenu-BWUfWLQP.css",revision:null},{url:"assets/CuiMarkdownContent-YieurDkL.js",revision:null},{url:"assets/CuiImage-CoVi1BKR.js",revision:null},{url:"assets/CuiImage-Bxf7z2N4.css",revision:null},{url:"assets/CuiFloatingButton-B5YMdr0X.js",revision:null},{url:"assets/CuiDataTable-saRt0sBc.js",revision:null},{url:"assets/CuiDataTable-DWuXg9Zg.css",revision:null},{url:"assets/CuiCameraTable-CCpYHBTn.js",revision:null},{url:"assets/CuiCameraSnapshot-C7wIpD9K.js",revision:null},{url:"assets/CuiCameraShares-CLN2wuHG.js",revision:null},{url:"assets/CuiCameraRecordings-DLjYt8vJ.js",revision:null},{url:"assets/CuiCameraRecordings-BHj7CUE7.css",revision:null},{url:"assets/CuiCameraPipCard-D3o29_wc.css",revision:null},{url:"assets/CuiCameraPipCard-BMxMzolT.js",revision:null},{url:"assets/CuiCameraCard-CXO5aDTJ.js",revision:null},{url:"assets/CuiCameraCard-BxGmxXxZ.css",revision:null},{url:"assets/CuiBottomSheet-DsjZEdig.css",revision:null},{url:"assets/CuiBottomSheet-DX9ynJj_.js",revision:null},{url:"assets/CuiBottomSheet-2SNSjqOZ.js",revision:null},{url:"assets/CuiBBoxPlayground-EFkdOBvq.css",revision:null},{url:"assets/CuiBBoxPlayground-CIU5kteO.js",revision:null},{url:"assets/CuiAvatar-BtMXnhxd.css",revision:null},{url:"assets/CuiAvatar-Bbdxpgvs.js",revision:null},{url:"assets/CuiActionButton-Bl7gqhIV.js",revision:null},{url:"assets/Console-bCie-JmB.js",revision:null},{url:"assets/ConfigTriggerWebhook-D3cHvW8H.js",revision:null},{url:"assets/ConfigTriggerSystem-CdOgSvDy.js",revision:null},{url:"assets/ConfigTriggerSensor-C9DsLW_Z.js",revision:null},{url:"assets/ConfigTriggerSchedule-CE47WiIV.js",revision:null},{url:"assets/ConfigTriggerManual-ChsUsNCK.js",revision:null},{url:"assets/ConfigTriggerGeofence-DGnBxTWd.js",revision:null},{url:"assets/ConfigTriggerDetection-C-e6Z1m9.js",revision:null},{url:"assets/ConfigConditionTime-lhWiIy2x.js",revision:null},{url:"assets/ConfigConditionSwitch-DsJEOPx0.js",revision:null},{url:"assets/ConfigConditionSensorState-CHYw1D90.js",revision:null},{url:"assets/ConfigConditionIfElse-Nd0_qDVA.js",revision:null},{url:"assets/ConfigActionVariable-B2BoiQPb.js",revision:null},{url:"assets/ConfigActionSnapshot-CB6IQ_jP.js",revision:null},{url:"assets/ConfigActionSensor-Dv7Hgx92.js",revision:null},{url:"assets/ConfigActionPlugin-C2gSPDim.js",revision:null},{url:"assets/ConfigActionOutput-P0WY0DlF.js",revision:null},{url:"assets/ConfigActionNotification-MJAViQFR.js",revision:null},{url:"assets/ConfigActionImageInput-BhO3ekJT.js",revision:null},{url:"assets/ConfigActionHttp-BGz4r_Nr.js",revision:null},{url:"assets/ConfigActionDelay-DOUAx4lh.js",revision:null},{url:"assets/ConfigActionCameraControl-DBRh1R9m.js",revision:null},{url:"assets/Config-JgftUZFe.css",revision:null},{url:"assets/Config--CF46OKO.js",revision:null},{url:"assets/Camview-Gxca3bvT.css",revision:null},{url:"assets/Camview-BqFeqFU1.js",revision:null},{url:"assets/Cameras-BJUWRm26.js",revision:null},{url:"assets/Cameras-54LaZPN3.css",revision:null},{url:"assets/CameraConsole-70m5hucZ.js",revision:null},{url:"assets/Camera-C3Il4X2T.js",revision:null},{url:"assets/Camera-BG8K5bH_.css",revision:null},{url:"assets/Automations-DOj8Eo03.js",revision:null},{url:"assets/Automation-Csu8t0D7.css",revision:null},{url:"assets/Automation-C7HuyjXk.js",revision:null},{url:"assets/Adminpanel-EjUhiapF.js",revision:null},{url:"assets/About-Cc2eFlW5.js",revision:null},{url:"assets/404-CGV2uv4y.js",revision:null},{url:"pwa/maskable-icon-1240x600.png",revision:"f3188c7d8e5038f28068c7a3632dbe4b"},{url:"pwa/maskable-icon-512x512.png",revision:"e716feaa60f08d95d0909e1c85bf1f98"},{url:"pwa/maskable-icon-620x300.png",revision:"b4954ceadf0d6f2095c45f8cc8240337"},{url:"pwa/pwa-1024x1024.png",revision:"1ed367ae76416e79fd0bdd6ee70666bc"},{url:"pwa/pwa-120x120.png",revision:"3f5ec31f6bd07910482227b259344110"},{url:"pwa/pwa-144x144.png",revision:"4fdf5c8fb085f764ed7dd5a26698bff5"},{url:"pwa/pwa-152x152.png",revision:"4cf41c7b603d382e83e098affb7cb9da"},{url:"pwa/pwa-167x167.png",revision:"de6a5ca921b45fb3bd30d27c707981c6"},{url:"pwa/pwa-180x180.png",revision:"225b42752632e2866c4f8fe4ab2f62ee"},{url:"pwa/pwa-192x192.png",revision:"3d58c2dd940c535cc166cc8d0844429d"},{url:"pwa/pwa-24x24.png",revision:"bdb25f68ca300283b37041e47d3e6ba8"},{url:"pwa/pwa-300x300.png",revision:"7f79d74e34aedef57c98a1c9c156ba6b"},{url:"pwa/pwa-36x36.png",revision:"4d08bb198d4e54e4d12a0810fc59f059"},{url:"pwa/pwa-48x48.png",revision:"97d7369c892f1e0914c2617ff26feb3c"},{url:"pwa/pwa-50x50.png",revision:"a20fc2e6f26aa548f9cae07911087f6c"},{url:"pwa/pwa-64x64.png",revision:"f57763be3212fd4154c502d607e7ed38"},{url:"pwa/pwa-72x72.png",revision:"66698bb499639052ad337f7e9a7d7ea8"},{url:"pwa/pwa-88x88.png",revision:"6e8af0a85b0627a835b62067d5189cb4"},{url:"pwa/pwa-96x96.png",revision:"675ea863c25fa9ae31d4d76a47463c78"},{url:"manifest.webmanifest",revision:"ed2b67044c80f7c0362cd73cde2f96c5"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html"),{allowlist:[/^(?!\/api)/],denylist:[/[?&]session=/]}))});
|
package/dist/server/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camera.ui/server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.111",
|
|
4
4
|
"description": "camera.ui server",
|
|
5
5
|
"author": "seydx (https://github.com/cameraui/camera.ui)",
|
|
6
6
|
"type": "module",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"semver": "^7.8.5",
|
|
71
71
|
"sharp": "^0.35.3",
|
|
72
72
|
"socket.io": "^4.8.3",
|
|
73
|
-
"systeminformation": "^5.31.
|
|
73
|
+
"systeminformation": "^5.31.12",
|
|
74
74
|
"tail": "^2.2.6",
|
|
75
75
|
"tar": "^7.5.19",
|
|
76
76
|
"tsyringe": "^4.10.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
|
|
2
2
|
import type { DBCamera } from '../database/types.js';
|
|
3
|
-
import type { AuthLoginRequest, CameraLineInsertPatchRequest,
|
|
3
|
+
import type { AuthLoginRequest, CameraLineInsertPatchRequest, CameraProbeSourceQueryRequest, CameraSnapshotQueryRequest, CameraSourceParamsRequest, CameraZoneInsertPatchRequest, CamerasExtensionsParamsRequest, CamerasExtensionsRequest, CamerasInsertRequest, CamerasParamsIdRequest, CamerasParamsRequest, CamerasPatchRequest, CamerasPreviewRequest, CamerasSensorStorageParamsRequest, CamerasStreamRequest, PaginationRequest, StoragePatchRequest, StorageSetRequest, StorageSubmitRequest } from '../types/index.js';
|
|
4
4
|
export declare class CamerasController {
|
|
5
5
|
private app;
|
|
6
6
|
private api;
|
|
@@ -8,7 +8,6 @@ export declare class CamerasController {
|
|
|
8
8
|
private configService;
|
|
9
9
|
private service;
|
|
10
10
|
private pluginsService;
|
|
11
|
-
private proxyServer;
|
|
12
11
|
constructor(app: FastifyInstance);
|
|
13
12
|
listRooms(_req: FastifyRequest, reply: FastifyReply): FastifyReply;
|
|
14
13
|
getByName(req: FastifyRequest<AuthLoginRequest & CamerasParamsRequest>, reply: FastifyReply): FastifyReply;
|
|
@@ -26,12 +25,9 @@ export declare class CamerasController {
|
|
|
26
25
|
getSnapshotByName(req: FastifyRequest<AuthLoginRequest & CamerasParamsRequest & CameraSnapshotQueryRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
27
26
|
getSnapshotById(req: FastifyRequest<AuthLoginRequest & CamerasParamsIdRequest & CameraSnapshotQueryRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
28
27
|
insert(req: FastifyRequest<AuthLoginRequest & CamerasInsertRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
29
|
-
pairCamera(req: FastifyRequest<AuthLoginRequest & CameraPairRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
30
28
|
preview(req: FastifyRequest<AuthLoginRequest & CamerasPreviewRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
31
29
|
list(_req: FastifyRequest<AuthLoginRequest & PaginationRequest>, reply: FastifyReply): FastifyReply | DBCamera[];
|
|
32
30
|
getStreamUrl(req: FastifyRequest<CamerasStreamRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
33
|
-
getDiscoverSchema(req: FastifyRequest<AuthLoginRequest & Go2rtcDiscoverSchemaQueryRequest>, reply: FastifyReply): FastifyReply;
|
|
34
|
-
connectDiscoveredCamera(req: FastifyRequest<AuthLoginRequest & Go2rtcDiscoverConnectRequest>, reply: FastifyReply): Promise<FastifyReply>;
|
|
35
31
|
patchByName(req: FastifyRequest<AuthLoginRequest & CamerasParamsRequest & CamerasPatchRequest>, reply: FastifyReply): Promise<FastifyReply | void>;
|
|
36
32
|
clearLog(req: FastifyRequest<AuthLoginRequest & CamerasParamsRequest>, reply: FastifyReply): FastifyReply | void;
|
|
37
33
|
downloadLog(req: FastifyRequest<AuthLoginRequest & CamerasParamsRequest>, reply: FastifyReply): FastifyReply | void;
|
|
@@ -3,7 +3,6 @@ import { createReadStream, truncate } from 'node:fs';
|
|
|
3
3
|
import { Readable } from 'node:stream';
|
|
4
4
|
import { container } from 'tsyringe';
|
|
5
5
|
import { createSourceName } from '../../utils/camera.js';
|
|
6
|
-
import { createCameraSchema } from '../schemas/cameras.schema.js';
|
|
7
6
|
import { CamerasService } from '../services/cameras.service.js';
|
|
8
7
|
import { PluginsService } from '../services/plugins.service.js';
|
|
9
8
|
import { resolvePluginName } from '../utils/plugin.js';
|
|
@@ -14,14 +13,12 @@ export class CamerasController {
|
|
|
14
13
|
configService;
|
|
15
14
|
service;
|
|
16
15
|
pluginsService;
|
|
17
|
-
proxyServer;
|
|
18
16
|
constructor(app) {
|
|
19
17
|
this.app = app;
|
|
20
18
|
this.service = new CamerasService();
|
|
21
19
|
this.pluginsService = new PluginsService();
|
|
22
20
|
this.api = container.resolve('api');
|
|
23
21
|
this.configService = container.resolve('configService');
|
|
24
|
-
this.proxyServer = container.resolve('proxy');
|
|
25
22
|
this.go2rtcApi = container.resolve('go2rtcApi');
|
|
26
23
|
}
|
|
27
24
|
listRooms(_req, reply) {
|
|
@@ -429,184 +426,6 @@ export class CamerasController {
|
|
|
429
426
|
});
|
|
430
427
|
}
|
|
431
428
|
}
|
|
432
|
-
async pairCamera(req, reply) {
|
|
433
|
-
try {
|
|
434
|
-
const camera = this.service.findByName(req.body.name) ?? this.service.findById(req.body.name);
|
|
435
|
-
if (camera) {
|
|
436
|
-
return reply.code(409).send({
|
|
437
|
-
statusCode: 409,
|
|
438
|
-
message: 'Camera already exists',
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
const cameraSources = [];
|
|
442
|
-
const existingGo2RtcSources = Object.keys(this.configService.go2rtcConfig.streams ?? {});
|
|
443
|
-
const checkSourceExists = (sourceName) => {
|
|
444
|
-
if (existingGo2RtcSources.includes(sourceName)) {
|
|
445
|
-
return reply.code(409).send({
|
|
446
|
-
statusCode: 409,
|
|
447
|
-
message: 'Go2Rtc Source already exist',
|
|
448
|
-
});
|
|
449
|
-
}
|
|
450
|
-
return undefined;
|
|
451
|
-
};
|
|
452
|
-
if (req.body.type === 'HomeKit') {
|
|
453
|
-
const sourceName = createSourceName(req.body.name, 'main');
|
|
454
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
455
|
-
if (sourceExistsError) {
|
|
456
|
-
return sourceExistsError;
|
|
457
|
-
}
|
|
458
|
-
if (!req.body.pin) {
|
|
459
|
-
return reply.code(400).send({
|
|
460
|
-
statusCode: 400,
|
|
461
|
-
message: 'PIN is required for HomeKit',
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
const { source } = await this.go2rtcApi.streamsRoute.pairHomekit({
|
|
465
|
-
id: sourceName,
|
|
466
|
-
url: req.body.url,
|
|
467
|
-
pin: req.body.pin,
|
|
468
|
-
});
|
|
469
|
-
cameraSources.push({
|
|
470
|
-
name: 'main',
|
|
471
|
-
role: 'high-resolution',
|
|
472
|
-
urls: [source.url],
|
|
473
|
-
useForSnapshot: true,
|
|
474
|
-
hotMode: false,
|
|
475
|
-
preload: false,
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
else if (req.body.type === 'Onvif') {
|
|
479
|
-
const url = new URL(req.body.url);
|
|
480
|
-
url.username = req.body.username ?? '';
|
|
481
|
-
url.password = req.body.password ?? '';
|
|
482
|
-
const { sources } = await this.go2rtcApi.discoverRoute.discoverOnvif({ src: url.toString() });
|
|
483
|
-
if (!sources.length) {
|
|
484
|
-
throw new Error('No sources found');
|
|
485
|
-
}
|
|
486
|
-
const streamSources = sources.filter((source) => source.id !== 'snapshot');
|
|
487
|
-
const snapshotSource = sources.find((source) => source.id === 'snapshot');
|
|
488
|
-
const hasMultipleStreams = streamSources.length > 2;
|
|
489
|
-
const sourceAssignments = [];
|
|
490
|
-
if (streamSources[0]) {
|
|
491
|
-
sourceAssignments.push({
|
|
492
|
-
source: streamSources[0],
|
|
493
|
-
role: 'high-resolution',
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
if (streamSources[1]) {
|
|
497
|
-
sourceAssignments.push({
|
|
498
|
-
source: streamSources[1],
|
|
499
|
-
role: hasMultipleStreams ? 'mid-resolution' : 'low-resolution',
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
if (streamSources[2]) {
|
|
503
|
-
sourceAssignments.push({
|
|
504
|
-
source: streamSources[2],
|
|
505
|
-
role: 'low-resolution',
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
if (snapshotSource) {
|
|
509
|
-
sourceAssignments.push({
|
|
510
|
-
source: snapshotSource,
|
|
511
|
-
role: 'snapshot',
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
for (const { source, role } of sourceAssignments) {
|
|
515
|
-
const sourceName = createSourceName(req.body.name, source.id ?? role);
|
|
516
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
517
|
-
if (sourceExistsError) {
|
|
518
|
-
return sourceExistsError;
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
const determineSnapshotSource = () => {
|
|
522
|
-
if (snapshotSource)
|
|
523
|
-
return false;
|
|
524
|
-
if (streamSources[2])
|
|
525
|
-
return 'low-resolution';
|
|
526
|
-
if (streamSources[1])
|
|
527
|
-
return hasMultipleStreams ? 'mid-resolution' : 'low-resolution';
|
|
528
|
-
return 'high-resolution';
|
|
529
|
-
};
|
|
530
|
-
const snapshotRole = determineSnapshotSource();
|
|
531
|
-
for (const { source, role } of sourceAssignments) {
|
|
532
|
-
cameraSources.push({
|
|
533
|
-
name: source.id ?? role,
|
|
534
|
-
role: role,
|
|
535
|
-
urls: [source.url],
|
|
536
|
-
useForSnapshot: role === 'snapshot' ? false : snapshotRole === role,
|
|
537
|
-
hotMode: false,
|
|
538
|
-
preload: false,
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
else if (req.body.type === 'Google') {
|
|
543
|
-
const sourceName = createSourceName(req.body.name, 'main');
|
|
544
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
545
|
-
if (sourceExistsError) {
|
|
546
|
-
return sourceExistsError;
|
|
547
|
-
}
|
|
548
|
-
if (!req.body.clientId || !req.body.clientSecret || !req.body.refreshToken || !req.body.projectId) {
|
|
549
|
-
return reply.code(400).send({
|
|
550
|
-
statusCode: 400,
|
|
551
|
-
message: 'Google credentials are required',
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
// Todo
|
|
555
|
-
}
|
|
556
|
-
else if (req.body.type === 'Ring') {
|
|
557
|
-
const sourceName = createSourceName(req.body.name, 'main');
|
|
558
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
559
|
-
if (sourceExistsError) {
|
|
560
|
-
return sourceExistsError;
|
|
561
|
-
}
|
|
562
|
-
if (!req.body.email || !req.body.password) {
|
|
563
|
-
return reply.code(400).send({
|
|
564
|
-
statusCode: 400,
|
|
565
|
-
message: 'Ring credentials are required',
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
// Todo
|
|
569
|
-
}
|
|
570
|
-
else if (req.body.type === 'Roborock') {
|
|
571
|
-
const sourceName = createSourceName(req.body.name, 'main');
|
|
572
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
573
|
-
if (sourceExistsError) {
|
|
574
|
-
return sourceExistsError;
|
|
575
|
-
}
|
|
576
|
-
if (!req.body.username || !req.body.password) {
|
|
577
|
-
return reply.code(400).send({
|
|
578
|
-
statusCode: 400,
|
|
579
|
-
message: 'Roborock credentials are required',
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
// Todo
|
|
583
|
-
}
|
|
584
|
-
else {
|
|
585
|
-
return reply.code(400).send({
|
|
586
|
-
statusCode: 400,
|
|
587
|
-
message: 'Invalid camera type',
|
|
588
|
-
});
|
|
589
|
-
}
|
|
590
|
-
if (!cameraSources.length) {
|
|
591
|
-
return reply.code(500).send({
|
|
592
|
-
statusCode: 500,
|
|
593
|
-
message: 'No sources found',
|
|
594
|
-
});
|
|
595
|
-
}
|
|
596
|
-
const parsedCamera = createCameraSchema.parse({
|
|
597
|
-
name: req.body.name,
|
|
598
|
-
sources: cameraSources,
|
|
599
|
-
});
|
|
600
|
-
const newCamera = await this.service.createCamera(parsedCamera);
|
|
601
|
-
return reply.code(201).send(newCamera);
|
|
602
|
-
}
|
|
603
|
-
catch (error) {
|
|
604
|
-
return reply.code(500).send({
|
|
605
|
-
statusCode: 500,
|
|
606
|
-
message: error.message,
|
|
607
|
-
});
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
429
|
async preview(req, reply) {
|
|
611
430
|
const sourceName = Math.random().toString(36).substring(7);
|
|
612
431
|
const streamSource = req.body.url;
|
|
@@ -689,184 +508,6 @@ export class CamerasController {
|
|
|
689
508
|
});
|
|
690
509
|
}
|
|
691
510
|
}
|
|
692
|
-
getDiscoverSchema(req, reply) {
|
|
693
|
-
try {
|
|
694
|
-
const type = req.query.type;
|
|
695
|
-
if (!type) {
|
|
696
|
-
return reply.code(400).send({
|
|
697
|
-
statusCode: 400,
|
|
698
|
-
message: 'Device type is required',
|
|
699
|
-
});
|
|
700
|
-
}
|
|
701
|
-
const schema = this.service.getGo2rtcConnectionSchema(type);
|
|
702
|
-
return reply.code(200).send({ schema });
|
|
703
|
-
}
|
|
704
|
-
catch (error) {
|
|
705
|
-
return reply.code(500).send({
|
|
706
|
-
statusCode: 500,
|
|
707
|
-
message: error.message,
|
|
708
|
-
});
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
async connectDiscoveredCamera(req, reply) {
|
|
712
|
-
try {
|
|
713
|
-
const { name, url, type, username, password, pin } = req.body;
|
|
714
|
-
const existingCamera = this.service.findByName(name);
|
|
715
|
-
if (existingCamera) {
|
|
716
|
-
return reply.code(409).send({
|
|
717
|
-
statusCode: 409,
|
|
718
|
-
message: 'Camera already exists',
|
|
719
|
-
});
|
|
720
|
-
}
|
|
721
|
-
const cameraSources = [];
|
|
722
|
-
const existingGo2RtcSources = Object.keys(this.configService.go2rtcConfig.streams ?? {});
|
|
723
|
-
const checkSourceExists = (sourceName) => {
|
|
724
|
-
if (existingGo2RtcSources.includes(sourceName)) {
|
|
725
|
-
return reply.code(409).send({
|
|
726
|
-
statusCode: 409,
|
|
727
|
-
message: 'Go2Rtc Source already exist',
|
|
728
|
-
});
|
|
729
|
-
}
|
|
730
|
-
return undefined;
|
|
731
|
-
};
|
|
732
|
-
if (type === 'HomeKit') {
|
|
733
|
-
const sourceName = createSourceName(name, 'main');
|
|
734
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
735
|
-
if (sourceExistsError) {
|
|
736
|
-
return sourceExistsError;
|
|
737
|
-
}
|
|
738
|
-
if (!pin) {
|
|
739
|
-
return reply.code(400).send({
|
|
740
|
-
statusCode: 400,
|
|
741
|
-
message: 'PIN is required for HomeKit',
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
const { source } = await this.go2rtcApi.streamsRoute.pairHomekit({
|
|
745
|
-
id: sourceName,
|
|
746
|
-
url: url,
|
|
747
|
-
pin: pin,
|
|
748
|
-
});
|
|
749
|
-
cameraSources.push({
|
|
750
|
-
name: 'main',
|
|
751
|
-
role: 'high-resolution',
|
|
752
|
-
urls: [source.url],
|
|
753
|
-
useForSnapshot: true,
|
|
754
|
-
hotMode: false,
|
|
755
|
-
preload: false,
|
|
756
|
-
});
|
|
757
|
-
}
|
|
758
|
-
else if (type === 'Onvif') {
|
|
759
|
-
const deviceUrl = new URL(url);
|
|
760
|
-
deviceUrl.username = username ?? '';
|
|
761
|
-
deviceUrl.password = password ?? '';
|
|
762
|
-
const { sources } = await this.go2rtcApi.discoverRoute.discoverOnvif({ src: deviceUrl.toString() });
|
|
763
|
-
if (!sources.length) {
|
|
764
|
-
throw new Error('No sources found');
|
|
765
|
-
}
|
|
766
|
-
const streamSources = sources.filter((source) => source.id !== 'snapshot');
|
|
767
|
-
const snapshotSource = sources.find((source) => source.id === 'snapshot');
|
|
768
|
-
const hasMultipleStreams = streamSources.length > 2;
|
|
769
|
-
const sourceAssignments = [];
|
|
770
|
-
if (streamSources[0]) {
|
|
771
|
-
sourceAssignments.push({
|
|
772
|
-
source: streamSources[0],
|
|
773
|
-
role: 'high-resolution',
|
|
774
|
-
});
|
|
775
|
-
}
|
|
776
|
-
if (streamSources[1]) {
|
|
777
|
-
sourceAssignments.push({
|
|
778
|
-
source: streamSources[1],
|
|
779
|
-
role: hasMultipleStreams ? 'mid-resolution' : 'low-resolution',
|
|
780
|
-
});
|
|
781
|
-
}
|
|
782
|
-
if (streamSources[2]) {
|
|
783
|
-
sourceAssignments.push({
|
|
784
|
-
source: streamSources[2],
|
|
785
|
-
role: 'low-resolution',
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
if (snapshotSource) {
|
|
789
|
-
sourceAssignments.push({
|
|
790
|
-
source: snapshotSource,
|
|
791
|
-
role: 'snapshot',
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
for (const { source, role } of sourceAssignments) {
|
|
795
|
-
const sourceName = createSourceName(name, source.id ?? role);
|
|
796
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
797
|
-
if (sourceExistsError) {
|
|
798
|
-
return sourceExistsError;
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
const determineSnapshotSource = () => {
|
|
802
|
-
if (snapshotSource)
|
|
803
|
-
return false;
|
|
804
|
-
if (streamSources[2])
|
|
805
|
-
return 'low-resolution';
|
|
806
|
-
if (streamSources[1])
|
|
807
|
-
return hasMultipleStreams ? 'mid-resolution' : 'low-resolution';
|
|
808
|
-
return 'high-resolution';
|
|
809
|
-
};
|
|
810
|
-
const snapshotRole = determineSnapshotSource();
|
|
811
|
-
for (const { source, role } of sourceAssignments) {
|
|
812
|
-
cameraSources.push({
|
|
813
|
-
name: source.id ?? role,
|
|
814
|
-
role: role,
|
|
815
|
-
urls: [source.url],
|
|
816
|
-
useForSnapshot: role === 'snapshot' ? false : snapshotRole === role,
|
|
817
|
-
hotMode: false,
|
|
818
|
-
preload: false,
|
|
819
|
-
});
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
else if (type === 'Hass' || type === 'FFmpeg' || type === 'GoPro' || type === 'DVRip' || type === 'Webtorrent') {
|
|
823
|
-
const sourceName = createSourceName(name, 'main');
|
|
824
|
-
const sourceExistsError = checkSourceExists(sourceName);
|
|
825
|
-
if (sourceExistsError) {
|
|
826
|
-
return sourceExistsError;
|
|
827
|
-
}
|
|
828
|
-
let sourceUrl = url;
|
|
829
|
-
if (type === 'DVRip' && (username || password)) {
|
|
830
|
-
const deviceUrl = new URL(url);
|
|
831
|
-
deviceUrl.username = username ?? '';
|
|
832
|
-
deviceUrl.password = password ?? '';
|
|
833
|
-
sourceUrl = deviceUrl.toString();
|
|
834
|
-
}
|
|
835
|
-
cameraSources.push({
|
|
836
|
-
name: 'main',
|
|
837
|
-
role: 'high-resolution',
|
|
838
|
-
urls: [sourceUrl],
|
|
839
|
-
useForSnapshot: true,
|
|
840
|
-
hotMode: false,
|
|
841
|
-
preload: false,
|
|
842
|
-
});
|
|
843
|
-
}
|
|
844
|
-
else {
|
|
845
|
-
return reply.code(400).send({
|
|
846
|
-
statusCode: 400,
|
|
847
|
-
message: 'Unsupported device type',
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
|
-
if (!cameraSources.length) {
|
|
851
|
-
return reply.code(500).send({
|
|
852
|
-
statusCode: 500,
|
|
853
|
-
message: 'No sources found',
|
|
854
|
-
});
|
|
855
|
-
}
|
|
856
|
-
const parsedCamera = createCameraSchema.parse({
|
|
857
|
-
name: name,
|
|
858
|
-
sources: cameraSources,
|
|
859
|
-
});
|
|
860
|
-
const newCamera = await this.service.createCamera(parsedCamera);
|
|
861
|
-
return reply.code(201).send(newCamera);
|
|
862
|
-
}
|
|
863
|
-
catch (error) {
|
|
864
|
-
return reply.code(500).send({
|
|
865
|
-
statusCode: 500,
|
|
866
|
-
message: error.message,
|
|
867
|
-
});
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
511
|
async patchByName(req, reply) {
|
|
871
512
|
try {
|
|
872
513
|
const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
|