@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.
Files changed (145) hide show
  1. package/dist/interface/assets/{404-CZDMFg2Z.js → 404-CGV2uv4y.js} +1 -1
  2. package/dist/interface/assets/{About-TDIJXs5o.js → About-Cc2eFlW5.js} +1 -1
  3. package/dist/interface/assets/{Adminpanel-Cciuxh1q.js → Adminpanel-EjUhiapF.js} +1 -1
  4. package/dist/interface/assets/{Automation-CMMDPrn0.js → Automation-C7HuyjXk.js} +2 -2
  5. package/dist/interface/assets/{Automations-by_LN5br.js → Automations-DOj8Eo03.js} +1 -1
  6. package/dist/interface/assets/{Camera-BlN_KppY.js → Camera-C3Il4X2T.js} +2 -2
  7. package/dist/interface/assets/{CameraConsole-DGbeilsL.js → CameraConsole-70m5hucZ.js} +1 -1
  8. package/dist/interface/assets/{Cameras-CVID1akl.js → Cameras-BJUWRm26.js} +2 -2
  9. package/dist/interface/assets/{Camview-B-Pqm0Fw.js → Camview-BqFeqFU1.js} +1 -1
  10. package/dist/interface/assets/{Config-CfunWNtM.js → Config--CF46OKO.js} +1 -1
  11. package/dist/interface/assets/{ConfigActionCameraControl-BRgTU6MP.js → ConfigActionCameraControl-DBRh1R9m.js} +1 -1
  12. package/dist/interface/assets/{ConfigActionDelay-CYz0z9Od.js → ConfigActionDelay-DOUAx4lh.js} +1 -1
  13. package/dist/interface/assets/{ConfigActionHttp-C9nEQ-7w.js → ConfigActionHttp-BGz4r_Nr.js} +1 -1
  14. package/dist/interface/assets/{ConfigActionImageInput-D8ipnlfe.js → ConfigActionImageInput-BhO3ekJT.js} +1 -1
  15. package/dist/interface/assets/{ConfigActionNotification-FzGgJM9i.js → ConfigActionNotification-MJAViQFR.js} +1 -1
  16. package/dist/interface/assets/{ConfigActionOutput-BB-jkCdD.js → ConfigActionOutput-P0WY0DlF.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionPlugin-C1OSUQ3_.js → ConfigActionPlugin-C2gSPDim.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionSensor-C6DOrCYd.js → ConfigActionSensor-Dv7Hgx92.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionSnapshot-k8RM-NMf.js → ConfigActionSnapshot-CB6IQ_jP.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionVariable-D-1zVFz-.js → ConfigActionVariable-B2BoiQPb.js} +1 -1
  21. package/dist/interface/assets/{ConfigConditionIfElse-pp0wRFeJ.js → ConfigConditionIfElse-Nd0_qDVA.js} +1 -1
  22. package/dist/interface/assets/{ConfigConditionSensorState-CIbkk6LA.js → ConfigConditionSensorState-CHYw1D90.js} +1 -1
  23. package/dist/interface/assets/{ConfigConditionSwitch-BPdEa--b.js → ConfigConditionSwitch-DsJEOPx0.js} +1 -1
  24. package/dist/interface/assets/{ConfigConditionTime-bHKJ8kBR.js → ConfigConditionTime-lhWiIy2x.js} +1 -1
  25. package/dist/interface/assets/{ConfigTriggerDetection-BrtBsd1t.js → ConfigTriggerDetection-C-e6Z1m9.js} +1 -1
  26. package/dist/interface/assets/{ConfigTriggerGeofence-DCqAqAG3.js → ConfigTriggerGeofence-DGnBxTWd.js} +1 -1
  27. package/dist/interface/assets/{ConfigTriggerManual-DDmBGqnC.js → ConfigTriggerManual-ChsUsNCK.js} +1 -1
  28. package/dist/interface/assets/{ConfigTriggerSchedule-vC9yyRct.js → ConfigTriggerSchedule-CE47WiIV.js} +1 -1
  29. package/dist/interface/assets/{ConfigTriggerSensor-BbKksZMP.js → ConfigTriggerSensor-C9DsLW_Z.js} +1 -1
  30. package/dist/interface/assets/{ConfigTriggerSystem-CO06Crjg.js → ConfigTriggerSystem-CdOgSvDy.js} +1 -1
  31. package/dist/interface/assets/{ConfigTriggerWebhook-CrtHc6Q3.js → ConfigTriggerWebhook-D3cHvW8H.js} +1 -1
  32. package/dist/interface/assets/{Console-B4SQZA5X.js → Console-bCie-JmB.js} +1 -1
  33. package/dist/interface/assets/{CuiActionButton-CNTiGrTt.js → CuiActionButton-Bl7gqhIV.js} +1 -1
  34. package/dist/interface/assets/{CuiAvatar-DUucUxIP.js → CuiAvatar-Bbdxpgvs.js} +1 -1
  35. package/dist/interface/assets/{CuiBBoxPlayground-DOcoHCTQ.js → CuiBBoxPlayground-CIU5kteO.js} +1 -1
  36. package/dist/interface/assets/{CuiBottomSheet-zPb4AI5w.js → CuiBottomSheet-2SNSjqOZ.js} +1 -1
  37. package/dist/interface/assets/CuiBottomSheet-DX9ynJj_.js +1 -0
  38. package/dist/interface/assets/{CuiCameraCard-kI_GNoa7.js → CuiCameraCard-CXO5aDTJ.js} +1 -1
  39. package/dist/interface/assets/{CuiCameraPipCard-DehPfhfs.js → CuiCameraPipCard-BMxMzolT.js} +1 -1
  40. package/dist/interface/assets/{CuiCameraRecordings-bqChEXwx.js → CuiCameraRecordings-DLjYt8vJ.js} +1 -1
  41. package/dist/interface/assets/{CuiCameraShares-BvwB4H_0.js → CuiCameraShares-CLN2wuHG.js} +1 -1
  42. package/dist/interface/assets/{CuiCameraSnapshot-C33nUgVt.js → CuiCameraSnapshot-C7wIpD9K.js} +1 -1
  43. package/dist/interface/assets/{CuiCameraTable-B5wQAGfM.js → CuiCameraTable-CCpYHBTn.js} +1 -1
  44. package/dist/interface/assets/{CuiDataTable-D9GqApg1.js → CuiDataTable-saRt0sBc.js} +1 -1
  45. package/dist/interface/assets/{CuiFloatingButton-BLCO4wJw.js → CuiFloatingButton-B5YMdr0X.js} +1 -1
  46. package/dist/interface/assets/{CuiImage-B3eMhhIS.js → CuiImage-CoVi1BKR.js} +1 -1
  47. package/dist/interface/assets/{CuiMenu-BO2e4LK5.js → CuiMenu-vSJpyg_1.js} +1 -1
  48. package/dist/interface/assets/{CuiPluginCard-Bu_rNdQH.js → CuiPluginCard-CwGKyEU6.js} +2 -2
  49. package/dist/interface/assets/{CuiPluginOAuthButton-Q2CBmZzv.js → CuiPluginOAuthButton-CxNqrBe7.js} +2 -2
  50. package/dist/interface/assets/{CuiQRCode-CVHjvjZP.js → CuiQRCode-CP6aDzF5.js} +1 -1
  51. package/dist/interface/assets/{CuiRecordingsGrid-BFHPh2dn.js → CuiRecordingsGrid-BNyITEKD.js} +1 -1
  52. package/dist/interface/assets/{CuiSchema-DEYDened.js → CuiSchema-Bdy2raxw.js} +1 -1
  53. package/dist/interface/assets/{CuiTopNavbarItem-CqM9AHmU.js → CuiTopNavbarItem-Q7M4nMw5.js} +1 -1
  54. package/dist/interface/assets/{CuiTopbarSlot-DbzQRnbt.js → CuiTopbarSlot-ac4GLLbf.js} +1 -1
  55. package/dist/interface/assets/{Faces-u9Rxm4Ti.js → Faces-DufdNYrc.js} +1 -1
  56. package/dist/interface/assets/{FirstSteps-YNR-3tqt.js → FirstSteps-Bpu4QLhF.js} +1 -1
  57. package/dist/interface/assets/{Instances-CWzMYIvB.js → Instances-CxgKUsJh.js} +1 -1
  58. package/dist/interface/assets/{Logs-CpAkrsEJ.js → Logs-CJcq3xd6.js} +1 -1
  59. package/dist/interface/assets/{Menu-uW8DUGLM.js → Menu-BlYf1LF3.js} +1 -1
  60. package/dist/interface/assets/{OAuthDeviceFlow-CxJbM1jZ.js → OAuthDeviceFlow-k6_zfcw_.js} +1 -1
  61. package/dist/interface/assets/{Plugin-CWjFyBeK.js → Plugin-DcwR4dBy.js} +1 -1
  62. package/dist/interface/assets/{PluginConsole-C-ndOnmZ.js → PluginConsole-CQebF4NZ.js} +1 -1
  63. package/dist/interface/assets/{PluginSchema-BcLXAX-Q.js → PluginSchema-CcWTcoz_.js} +1 -1
  64. package/dist/interface/assets/{Plugins-B7ZOk3ld.js → Plugins-DfMxKm_j.js} +2 -2
  65. package/dist/interface/assets/{Recordings-Daf0TCPA.js → Recordings-BgqhrYcF.js} +1 -1
  66. package/dist/interface/assets/{Settings-Bz7u44Pl.js → Settings-BVa4xU_p.js} +1 -1
  67. package/dist/interface/assets/SettingsAccount-BcPNz9jC.js +1 -0
  68. package/dist/interface/assets/{SettingsAccount-C_pQPGoW.js → SettingsAccount-UKbQLW6n.js} +1 -1
  69. package/dist/interface/assets/SettingsAppearance-De_E9UCe.js +1 -0
  70. package/dist/interface/assets/{SettingsAppearance-CwPSvzkX.js → SettingsAppearance-e45pjRF6.js} +1 -1
  71. package/dist/interface/assets/{SettingsBackup-CCEtuJsQ.js → SettingsBackup-t2irnG2Z.js} +1 -1
  72. package/dist/interface/assets/{SettingsNotifications-OV4-nraE.js → SettingsNotifications-te4LKEdZ.js} +1 -1
  73. package/dist/interface/assets/{SettingsRecordings-uNRwROAh.js → SettingsRecordings-x4yRgxJm.js} +1 -1
  74. package/dist/interface/assets/{SettingsRemote-Dg3BfdmI.js → SettingsRemote-CBLPWHM6.js} +1 -1
  75. package/dist/interface/assets/{SettingsSystem-DwXSeR_Z.js → SettingsSystem-Du3S8gps.js} +2 -2
  76. package/dist/interface/assets/{SettingsUsers-CimG6HaL.js → SettingsUsers-DLAYh9IA.js} +1 -1
  77. package/dist/interface/assets/{Terminal-h5vqtN-o.js → Terminal-BsdUon5-.js} +1 -1
  78. package/dist/interface/assets/{VariableInput-tPI6hxP8.js → VariableInput-CFs-kzqd.js} +1 -1
  79. package/dist/interface/assets/{VariableSuggestions-K3CHs8XG.js → VariableSuggestions-PEzupqiE.js} +1 -1
  80. package/dist/interface/assets/{VersionsHandler-BrfHmvOf.js → VersionsHandler-DF_kclOb.js} +1 -1
  81. package/dist/interface/assets/{Workers-xo6c0O5M.js → Workers-CXvuE4Bn.js} +1 -1
  82. package/dist/interface/assets/api-BWWcvHf5.js +2 -0
  83. package/dist/interface/assets/{api-Cm9H8gwG.js → api-DY4FSNX7.js} +1 -1
  84. package/dist/interface/assets/{auth-Czmir2ST.js → auth-DJ1WgC3s.js} +1 -1
  85. package/dist/interface/assets/{automations-C2J4u5Uj.js → automations-C309DNNg.js} +1 -1
  86. package/dist/interface/assets/{automations-DVc4ovPU.js → automations-wQnuqfmi.js} +1 -1
  87. package/dist/interface/assets/{backup-BcXXJ1y6.js → backup-DYBEA8gj.js} +1 -1
  88. package/dist/interface/assets/cameras-WikE4nxe.js +1 -0
  89. package/dist/interface/assets/{cameras.schema-CuVLJONJ.js → cameras.schema-BULBdfmS.js} +1 -1
  90. package/dist/interface/assets/cloudHandoff-zXwtzo8e.js +1 -0
  91. package/dist/interface/assets/{deviceId-BM0pOHhg.js → deviceId-DMh1VcHg.js} +1 -1
  92. package/dist/interface/assets/{hasPermission-B724PtFJ.js → hasPermission-DdAdlKls.js} +1 -1
  93. package/dist/interface/assets/{instances-5MeVN25v.js → instances-BBnYdgRc.js} +1 -1
  94. package/dist/interface/assets/{locale-hdhgxXOX.js → locale-qn_8MsnX.js} +1 -1
  95. package/dist/interface/assets/{main-D0dJIe_X.js → main-CjUbwZ3z.js} +2 -2
  96. package/dist/interface/assets/{notifications-Cq1bDRQk.js → notifications-DGRbcf65.js} +1 -1
  97. package/dist/interface/assets/{plugins-BMys-WCs.js → plugins-tQniunmN.js} +1 -1
  98. package/dist/interface/assets/{round-restart-alt-bbbi50F4.js → round-restart-alt-wyrnMpa4.js} +1 -1
  99. package/dist/interface/assets/{router-DUCivZj8.js → router-CvWvXFyk.js} +2 -2
  100. package/dist/interface/assets/{routerState-ByP_jZ8E.js → routerState-dQtObsFs.js} +1 -1
  101. package/dist/interface/assets/{server-BW0jfXav.js → server-CmXhhpSW.js} +1 -1
  102. package/dist/interface/assets/{shares-D0r3nTB0.js → shares-ZKyJZapA.js} +1 -1
  103. package/dist/interface/assets/{theme-B2fORWV9.js → theme-DhiUIeo3.js} +1 -1
  104. package/dist/interface/assets/types-C9iWhZtk.js +1 -0
  105. package/dist/interface/assets/{ui-CnzJLu9N.js → ui-DrzKhUXW.js} +1 -1
  106. package/dist/interface/assets/{useBiometricCredentials-BGl37Skw.js → useBiometricCredentials-DDyhIy7O.js} +1 -1
  107. package/dist/interface/assets/{useCameraOptions-D0rQaUuh.js → useCameraOptions-CoogpQnN.js} +1 -1
  108. package/dist/interface/assets/{useCuiCameraDrawer-2I0LB3ff.js → useCuiCameraDrawer-DnN9lwiy.js} +1 -1
  109. package/dist/interface/assets/{useCuiDialog-DZvxI8xi.js → useCuiDialog-C50obC48.js} +1 -1
  110. package/dist/interface/assets/{useFileDownload-BLbAIlSX.js → useFileDownload-CSek7CzK.js} +1 -1
  111. package/dist/interface/assets/{useLogsSocket-BnU6ynWU.js → useLogsSocket-rG2BaLWl.js} +1 -1
  112. package/dist/interface/assets/{useSharedComposables-DjDddcdT.js → useSharedComposables-gpJ--qZh.js} +1 -1
  113. package/dist/interface/assets/{useStreamStatus-Dy3K_ILd.js → useStreamStatus-BdN05nfE.js} +1 -1
  114. package/dist/interface/assets/users.schema-Bz59q-My.js +1 -0
  115. package/dist/interface/assets/{vendor-cameraui-B9wC4-mi.js → vendor-cameraui-DgSMexWY.js} +1 -1
  116. package/dist/interface/assets/{vendor-core-CBFMCwgj.js → vendor-core-BKHiXSX7.js} +1 -1
  117. package/dist/interface/assets/{vendor-primevue-DYHQyonV.js → vendor-primevue-7iEzPOvf.js} +1 -1
  118. package/dist/interface/assets/{vendor-zod-V2qTUMVc.js → vendor-zod-DycFxUhi.js} +1 -1
  119. package/dist/interface/assets/{view-grid-D39XDBn9.js → view-grid-Cs5VWmxE.js} +1 -1
  120. package/dist/interface/index.html +41 -41
  121. package/dist/interface/sw.js +1 -1
  122. package/dist/server/package.json +2 -2
  123. package/dist/server/src/api/controllers/cameras.controller.d.ts +1 -5
  124. package/dist/server/src/api/controllers/cameras.controller.js +0 -359
  125. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  126. package/dist/server/src/api/routes/cameras.routes.js +1 -12
  127. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  128. package/dist/server/src/api/schemas/cameras.schema.d.ts +0 -14
  129. package/dist/server/src/api/schemas/cameras.schema.js +0 -103
  130. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  131. package/dist/server/src/api/services/cameras.service.d.ts +2 -3
  132. package/dist/server/src/api/services/cameras.service.js +0 -67
  133. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  134. package/dist/server/src/api/types/index.d.ts +1 -29
  135. package/dist/server/src/api/types/index.js.map +1 -1
  136. package/package.json +2 -2
  137. package/dist/interface/assets/CuiBottomSheet-DSG6iONb.js +0 -1
  138. package/dist/interface/assets/SettingsAccount-BgpeeHsR.js +0 -1
  139. package/dist/interface/assets/SettingsAppearance-DSNXI3t4.js +0 -1
  140. package/dist/interface/assets/api-B8LDDNgZ.js +0 -2
  141. package/dist/interface/assets/cameras-BEBBV7mz.js +0 -1
  142. package/dist/interface/assets/cloudHandoff-Cnd7f4Es.js +0 -1
  143. package/dist/interface/assets/types-CztXMZ5X.js +0 -1
  144. package/dist/interface/assets/users.schema-2wYWhJ9W.js +0 -1
  145. /package/dist/interface/assets/{error-256-DLKVOU2S.png → logo-512-DLKVOU2S.png} +0 -0
@@ -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=/]}))});
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camera.ui/server",
3
- "version": "0.0.110",
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.11",
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, CameraPairRequest, CameraProbeSourceQueryRequest, CameraSnapshotQueryRequest, CameraSourceParamsRequest, CameraZoneInsertPatchRequest, CamerasExtensionsParamsRequest, CamerasExtensionsRequest, CamerasInsertRequest, CamerasParamsIdRequest, CamerasParamsRequest, CamerasPatchRequest, CamerasPreviewRequest, CamerasSensorStorageParamsRequest, CamerasStreamRequest, Go2rtcDiscoverConnectRequest, Go2rtcDiscoverSchemaQueryRequest, PaginationRequest, StoragePatchRequest, StorageSetRequest, StorageSubmitRequest } from '../types/index.js';
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);