@camera.ui/server 2.0.15 → 2.0.17
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-BWRNG7e3.js +1 -0
- package/dist/interface/assets/About-CWvfgUA-.js +1 -0
- package/dist/interface/assets/Adminpanel-Cat_euTC.js +1 -0
- package/dist/interface/assets/{Automation-Cm62xfWQ.css → Automation-BSicfOGF.css} +1 -1
- package/dist/interface/assets/Automation-cp0lTCAv.js +3 -0
- package/dist/interface/assets/AutomationImport-mCGSgys2.js +2 -0
- package/dist/interface/assets/AutomationStore-udNOn3FR.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-CcVksadt.js +2 -0
- package/dist/interface/assets/Automations-CcQLbmoN.js +2 -0
- package/dist/interface/assets/Camera-Cq466-gT.js +2 -0
- package/dist/interface/assets/CameraConsole-A414-zXW.js +7 -0
- package/dist/interface/assets/Cameras-CW5XnJ1g.js +652 -0
- package/dist/interface/assets/Cameras-DIY20Wlh.css +1 -0
- package/dist/interface/assets/{Camview-CS2a2okQ.css → Camview-CaEbdeQZ.css} +1 -1
- package/dist/interface/assets/Camview-zK6fnWI0.js +1 -0
- package/dist/interface/assets/Config-R2N_QUER.js +2 -0
- package/dist/interface/assets/ConfigActionCameraControl-DdW92QxO.js +1 -0
- package/dist/interface/assets/{ConfigActionDelay-Bb2XWLM-.js → ConfigActionDelay-BiCLaHDd.js} +1 -1
- package/dist/interface/assets/ConfigActionHttp-BvM-8hTt.js +1 -0
- package/dist/interface/assets/ConfigActionImageInput-CoyrNloo.js +1 -0
- package/dist/interface/assets/ConfigActionMqtt-CY8HOoug.js +1 -0
- package/dist/interface/assets/ConfigActionNotification-DP3dTyFB.js +1 -0
- package/dist/interface/assets/ConfigActionOutput-BwYwuQ1w.js +1 -0
- package/dist/interface/assets/ConfigActionPlugin-DbhT4kyF.js +1 -0
- package/dist/interface/assets/ConfigActionSensor-_zmPKdhz.js +1 -0
- package/dist/interface/assets/ConfigActionSnapshot-Bc3eukMk.js +1 -0
- package/dist/interface/assets/ConfigActionVariable-BeQy6W8G.js +1 -0
- package/dist/interface/assets/ConfigConditionIfElse-CiFC5fLv.js +1 -0
- package/dist/interface/assets/ConfigConditionSensorState-CGeGdh0d.js +1 -0
- package/dist/interface/assets/ConfigConditionSwitch-BjR776j5.js +1 -0
- package/dist/interface/assets/{ConfigConditionTime-DoUDxRHq.js → ConfigConditionTime-BAypML9_.js} +1 -1
- package/dist/interface/assets/ConfigSensorValueInput-Dis2Kr1r.js +1 -0
- package/dist/interface/assets/ConfigTriggerDetection-CqS3IAqj.js +1 -0
- package/dist/interface/assets/ConfigTriggerGeofence-BbNpW2l0.js +1 -0
- package/dist/interface/assets/{ConfigTriggerManual-BV099ihK.js → ConfigTriggerManual-DiyFl_g-.js} +1 -1
- package/dist/interface/assets/ConfigTriggerMqtt-ZXEft2Hi.js +1 -0
- package/dist/interface/assets/ConfigTriggerSchedule-Dy3NCMvo.js +1 -0
- package/dist/interface/assets/ConfigTriggerSensor-CnSSEh4s.js +1 -0
- package/dist/interface/assets/{ConfigTriggerSystem-C2E5WMPm.js → ConfigTriggerSystem-CuKwsM8D.js} +1 -1
- package/dist/interface/assets/ConfigTriggerWebhook-DJPepSlC.js +1 -0
- package/dist/interface/assets/Console-tfkkZnFl.js +1 -0
- package/dist/interface/assets/CuiAutomationRunsDialog-o2aLvK5K.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-m_HX6x4G.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-v2xnKGrr.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-CId6q8WW.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-C_1UfpAJ.js +1 -0
- package/dist/interface/assets/CuiCameraShares-DW_hDX2f.js +1 -0
- package/dist/interface/assets/CuiCameraTable-BXzZ-gIg.js +2 -0
- package/dist/interface/assets/CuiDataTable-CrL6zx3I.js +1 -0
- package/dist/interface/assets/{CuiMarkdownContent-DQPIfY1K.js → CuiMarkdownContent-BwMdbyad.js} +1 -1
- package/dist/interface/assets/CuiMarkdownContent-G916_kVN.js +1 -0
- package/dist/interface/assets/CuiPluginCard-C38Fk0bQ.js +2 -0
- package/dist/interface/assets/CuiPluginCategoryChip-B3XVum_D.js +1 -0
- package/dist/interface/assets/CuiPluginOAuthButton-DRJnVV4F.js +2 -0
- package/dist/interface/assets/CuiPluginTrustBadge-4xCyAUBM.js +1 -0
- package/dist/interface/assets/CuiQRCode-DmsP4eAY.js +1 -0
- package/dist/interface/assets/CuiRecordingsGrid-BnL8kQ29.js +1 -0
- package/dist/interface/assets/CuiSchema-D2yLW853.js +1 -0
- package/dist/interface/assets/CuiTopNavbarItem-_7UaVuQT.js +1 -0
- package/dist/interface/assets/Faces-BPgUsyT0.js +1 -0
- package/dist/interface/assets/FirstSteps-CKXlbFN-.js +1 -0
- package/dist/interface/assets/Instances-BS4UPlay.js +1 -0
- package/dist/interface/assets/Logs-UPgu6TsC.js +6 -0
- package/dist/interface/assets/Menu-CdewzDV4.js +1 -0
- package/dist/interface/assets/OAuthDeviceFlow-SGgJTWAU.js +1 -0
- package/dist/interface/assets/Plugin-BSSYZcyQ.js +1 -0
- package/dist/interface/assets/PluginConsole-Bm0ify7V.js +7 -0
- package/dist/interface/assets/PluginDetail-DY6Uvu3V.js +2 -0
- package/dist/interface/assets/PluginSchema-BkM5iKma.js +1 -0
- package/dist/interface/assets/PluginSearch-4q_vZHJc.js +2 -0
- package/dist/interface/assets/PluginSearch-BvhNP9WQ.js +1 -0
- package/dist/interface/assets/Plugins-B1tZxl7k.js +1 -0
- package/dist/interface/assets/Recordings-XY32_Jjt.js +1 -0
- package/dist/interface/assets/Settings-CXWxt73x.js +1 -0
- package/dist/interface/assets/SettingsAccount-MLkJU79V.js +1 -0
- package/dist/interface/assets/SettingsAccount-RGvmNkwD.js +1 -0
- package/dist/interface/assets/SettingsAppearance-CHRnfQ4O.js +1 -0
- package/dist/interface/assets/SettingsAppearance-CyaOt4lL.js +1 -0
- package/dist/interface/assets/SettingsBackup-Xjb4i_YZ.js +1 -0
- package/dist/interface/assets/SettingsMqtt-CW0uvXrU.js +1 -0
- package/dist/interface/assets/SettingsNotifications-BbyXpyHK.js +2 -0
- package/dist/interface/assets/SettingsRecordings-DVZPpunU.js +1 -0
- package/dist/interface/assets/SettingsRemote-BnFHx9_s.js +1 -0
- package/dist/interface/assets/SettingsSystem-C1ne-w59.js +2 -0
- package/dist/interface/assets/SettingsUsers-91m0163s.js +1 -0
- package/dist/interface/assets/Terminal-D_E-kRbN.js +4 -0
- package/dist/interface/assets/VariableInput-BHvGHE7o.js +1 -0
- package/dist/interface/assets/{VariableSuggestions-Jya3l4gC.js → VariableSuggestions-uJAwwX7y.js} +1 -1
- package/dist/interface/assets/VersionsHandler-DJ00TTHi.js +7 -0
- package/dist/interface/assets/Workers-BCBrqShK.js +2 -0
- package/dist/interface/assets/{account-Bj9K0GxP.js → account-jONrhXkE.js} +1 -1
- package/dist/interface/assets/ace-DYqf8ZN7.js +1 -0
- package/dist/interface/assets/{ace.config-BnKJ0Xjj.js → ace.config-C_wgqTLD.js} +1 -1
- package/dist/interface/assets/{alert-circle-CIUWSUwz.js → alert-circle-CqEfEWD8.js} +1 -1
- package/dist/interface/assets/{alert-outline-Drr1xRLR.js → alert-outline-DcXO2ICo.js} +1 -1
- package/dist/interface/assets/api-ByMXkaIi.js +1 -0
- package/dist/interface/assets/api-ChlkJnEG.js +2 -0
- package/dist/interface/assets/api-Ct6LuJao.css +2 -0
- package/dist/interface/assets/{arrow-left-D2D7yHHS.js → arrow-left-DGioEwqJ.js} +1 -1
- package/dist/interface/assets/{arrow-right-outline-Dr-uFrTL.js → arrow-right-outline-BrpH6MGt.js} +1 -1
- package/dist/interface/assets/auth-B-MND66x.js +1 -0
- package/dist/interface/assets/automations-DvpxT4Pa.js +1 -0
- package/dist/interface/assets/{back-filled-BKNm4yL0.js → back-filled-DZmo9cAg.js} +1 -1
- package/dist/interface/assets/{bell-ring-AbG0SUiu.js → bell-ring-D0h1GDrU.js} +1 -1
- package/dist/interface/assets/cameras.schema-2VoKYyFS.js +1 -0
- package/dist/interface/assets/{cctv-Dsa9GjK0.js → cctv-CdDfBHME.js} +1 -1
- package/dist/interface/assets/{check-circle-M9jSNRsu.js → check-circle-CVNa_reg.js} +1 -1
- package/dist/interface/assets/{chevron-down-DHv255ZG.js → chevron-down-BiRUJ9SO.js} +1 -1
- package/dist/interface/assets/{chevron-right-25txPYbE.js → chevron-right-Crha-j7O.js} +1 -1
- package/dist/interface/assets/{clock-outline-BJld7K8T.js → clock-outline-dv-kmi60.js} +1 -1
- package/dist/interface/assets/{close-CmLBRV0p.js → close-BCRtoBTk.js} +1 -1
- package/dist/interface/assets/{close-circle-BHvnizih.js → close-circle-raXx3m4Q.js} +1 -1
- package/dist/interface/assets/{cloud-check-BugyVe-9.js → cloud-check-CST59Xl_.js} +1 -1
- package/dist/interface/assets/cloudHandoff-o_0n9cgb.js +1 -0
- package/dist/interface/assets/config-UED3wn2k.js +1 -0
- package/dist/interface/assets/{copy-DDVxvyoc.js → copy-C53ZJyaU.js} +1 -1
- package/dist/interface/assets/{delete-CtYWBBjD.js → delete-Dvdp44LT.js} +1 -1
- package/dist/interface/assets/{dist-DTS9WzwS.js → dist-DZi5AgJB.js} +1 -1
- package/dist/interface/assets/{download-DI4SAe-9.js → download-Dq82fWLS.js} +1 -1
- package/dist/interface/assets/esm-5O0fbEL-.js +1 -0
- package/dist/interface/assets/esm-8JcCIx6p.js +1 -0
- package/dist/interface/assets/esm-BIwkRkap.js +1 -0
- package/dist/interface/assets/esm-Ba1kg7sT.js +1 -0
- package/dist/interface/assets/esm-CI9fumfA.js +1 -0
- package/dist/interface/assets/esm-CfqCZ8Ic.js +1 -0
- package/dist/interface/assets/esm-Cle2K7IB.js +1 -0
- package/dist/interface/assets/esm-DGhY5suq.js +1 -0
- package/dist/interface/assets/esm-D_SYso1m.js +1 -0
- package/dist/interface/assets/esm-Dg-c_Ys9.js +1 -0
- package/dist/interface/assets/esm-IjMpYY_D.js +1 -0
- package/dist/interface/assets/esm-JkR46BGF.js +1 -0
- package/dist/interface/assets/esm-KCb4USia.js +1 -0
- package/dist/interface/assets/esm-fiu1-7Vf.js +1 -0
- package/dist/interface/assets/flowSchema-DyobL8Pg.js +1 -0
- package/dist/interface/assets/history--LGIMjNU.js +1 -0
- package/dist/interface/assets/{home-BJNZT_YD.js → home-C5hRJg9h.js} +1 -1
- package/dist/interface/assets/{information-outline-CHe_6DI5.js → information-outline-CjhiKBjG.js} +1 -1
- package/dist/interface/assets/lightbulb-outline-BGFG7wv-.js +1 -0
- package/dist/interface/assets/main-Cd1DVdC9.js +3 -0
- package/dist/interface/assets/{main-xpYSWHxw.css → main-DbPnvfcp.css} +1 -1
- package/dist/interface/assets/{microphone-BOOe4oV_.js → microphone-Dp5Yhz6Z.js} +1 -1
- package/dist/interface/assets/mqtt-BltdxiuG.js +1 -0
- package/dist/interface/assets/native-CNOra93F.js +1 -0
- package/dist/interface/assets/native-DAl9Pmov.js +1 -0
- package/dist/interface/assets/nodeDefinitions-DkMCR_zX.js +1 -0
- package/dist/interface/assets/notifications-D4Mi4q8n.js +1 -0
- package/dist/interface/assets/plugin-HHKHhKIh.js +1 -0
- package/dist/interface/assets/plugins-DmgMSZSt.js +1 -0
- package/dist/interface/assets/{plus-7Bv7p-4I.js → plus-C6l_Q-mY.js} +1 -1
- package/dist/interface/assets/{plus-BCms6Xgy.js → plus-DhRnJIfm.js} +1 -1
- package/dist/interface/assets/{power-U-0IYm8S.js → power-BfcMaKbx.js} +1 -1
- package/dist/interface/assets/{ring-resize-D94sHXpl.js → ring-resize-peEJMXPl.js} +1 -1
- package/dist/interface/assets/{round-alt-arrow-left-bold-D32PAlNy.js → round-alt-arrow-left-bold-BcL7KVCG.js} +1 -1
- package/dist/interface/assets/round-restart-alt-D1SwcyIw.js +1 -0
- package/dist/interface/assets/{search-Bl-cpkGE.js → search-BTu5ntI6.js} +1 -1
- package/dist/interface/assets/server-BBvLLocT.js +1 -0
- package/dist/interface/assets/{settings-U-eM-yb0.js → settings-wRDwvjf-.js} +1 -1
- package/dist/interface/assets/{source-branch-BUtkgBs9.js → source-branch-DejOTyZv.js} +1 -1
- package/dist/interface/assets/theme-CHyA8uCs.js +1 -0
- package/dist/interface/assets/{trash-2-BC03Elz-.js → trash-2-upauF9j0.js} +1 -1
- package/dist/interface/assets/{trash-can-outline-B2dODnEo.js → trash-can-outline-PQys0L3O.js} +1 -1
- package/dist/interface/assets/{trash-fill-DP6UF4-i.js → trash-fill-DDHuYpvM.js} +1 -1
- package/dist/interface/assets/{trash2-D2pzjkdI.js → trash2-M6P7YvkH.js} +1 -1
- package/dist/interface/assets/types-ByD7R6WC.js +1 -0
- package/dist/interface/assets/types-DRsoZjsP.js +1 -0
- package/dist/interface/assets/types-f9LWayxM.js +1 -0
- package/dist/interface/assets/{upload-BohhBI5n.js → upload-DwNCSVAl.js} +1 -1
- package/dist/interface/assets/{useAppVersion-IC8NIRbM.js → useAppVersion-dQkatyRF.js} +1 -1
- package/dist/interface/assets/useBackupRestore-D6Vxck9i.js +1 -0
- package/dist/interface/assets/useCameraOptions-zPRiut_S.js +1 -0
- package/dist/interface/assets/useCardSelection-BdYBm23a.js +1 -0
- package/dist/interface/assets/useLogsSocket-DzKSWAVf.js +5 -0
- package/dist/interface/assets/{useServerRestart-CWWCuwJk.js → useServerRestart-DjaOOudi.js} +1 -1
- package/dist/interface/assets/useStreamStatus-DpXFSeOf.js +1 -0
- package/dist/interface/assets/useUserOptions-B8T0ROJS.js +1 -0
- package/dist/interface/assets/{variable-DRbxOwmi.js → variable-K7DoQHpX.js} +1 -1
- package/dist/interface/assets/{vendor-BLNgd-x3.js → vendor-CdGy-Xet.js} +3 -3
- package/dist/interface/assets/{vendor-ace-BlP3GAWI.js → vendor-ace-CrklN-bc.js} +1 -1
- package/dist/interface/assets/vendor-cameraui-D7o3alq7.js +2039 -0
- package/dist/interface/assets/vendor-capacitor-BmJAC1FL.js +2 -0
- package/dist/interface/assets/{vendor-chart-Dvv3fqtl.js → vendor-chart-BDu4sN9x.js} +1 -1
- package/dist/interface/assets/vendor-core-M6N9PctY.js +1 -0
- package/dist/interface/assets/{vendor-dnd-DRBhj_4o.js → vendor-dnd-BN6m9rq8.js} +2 -2
- package/dist/interface/assets/{vendor-draggabilly-1XTUOfXs.js → vendor-draggabilly-BLoTmI_a.js} +1 -1
- package/dist/interface/assets/vendor-gridstack-DHPnER0W.js +3 -0
- package/dist/interface/assets/vendor-gridstack-Dxwp3vpP.css +1 -0
- package/dist/interface/assets/{vendor-markdown-CCHIN82I.js → vendor-markdown-D_3Of-Gz.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-CpvvTA4S.js → vendor-primevue-BynQnxoR.js} +204 -204
- package/dist/interface/assets/{vendor-vueflow-ta6qJibr.js → vendor-vueflow-D7rAeKHv.js} +1 -1
- package/dist/interface/assets/vendor-zod-BaT-dXMv.js +127 -0
- package/dist/interface/assets/web-B2hT39CL.js +1 -0
- package/dist/interface/assets/web-BKoMlshd.js +1 -0
- package/dist/interface/assets/web-BjKL51lK-Ut62Hifg.js +1 -0
- package/dist/interface/assets/web-C0ZNZcUJ.js +1 -0
- package/dist/interface/assets/web-CvKW_k8u.js +1 -0
- package/dist/interface/assets/web-CxfYyhSm.js +1 -0
- package/dist/interface/assets/web-CzA5zxEf.js +1 -0
- package/dist/interface/assets/web-D7XF0rfU.js +1 -0
- package/dist/interface/assets/web-DgSunHN1.js +1 -0
- package/dist/interface/assets/web-DpgTK9mR.js +1 -0
- package/dist/interface/assets/web-Hi4guSgN.js +1 -0
- package/dist/interface/assets/web-QaIP1Mop.js +1 -0
- package/dist/interface/assets/web-VGpOPxhq.js +1 -0
- package/dist/interface/assets/web-g-y7DVV1.js +1 -0
- package/dist/interface/assets/{webhook-CdlhvGGB.js → webhook-CQl989bo.js} +1 -1
- package/dist/interface/assets/workbox-window.prod.es5-YHyKoEMU.js +1 -0
- package/dist/interface/assets/{zoom-in-COcGqk1M.js → zoom-in-2i20zd_d.js} +1 -1
- package/dist/interface/index.html +213 -173
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +13 -11
- package/dist/server/requirements.txt +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +14 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +12 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +26 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +20 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +6 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/recording.py +27 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +4 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +4 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/audio.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +3 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/battery.py +8 -5
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/contact.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +7 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/doorbell.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/garage.py +5 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/humidity.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/leak.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +6 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/light.py +7 -5
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/lock.py +4 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/motion.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/occupancy.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +24 -5
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/security_system.py +4 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/siren.py +7 -5
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/smoke.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/switch.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/temperature.py +3 -2
- package/dist/server/src/api/controllers/auth.controller.d.ts +1 -0
- package/dist/server/src/api/controllers/auth.controller.js +19 -0
- package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
- package/dist/server/src/api/controllers/automations.controller.d.ts +1 -0
- package/dist/server/src/api/controllers/automations.controller.js +12 -0
- package/dist/server/src/api/controllers/automations.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cameras.controller.d.ts +4 -1
- package/dist/server/src/api/controllers/cameras.controller.js +95 -1
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/controllers/mqtt.controller.d.ts +1 -0
- package/dist/server/src/api/controllers/mqtt.controller.js +8 -0
- package/dist/server/src/api/controllers/mqtt.controller.js.map +1 -1
- package/dist/server/src/api/database/constants.d.ts +1 -0
- package/dist/server/src/api/database/constants.js +1 -0
- package/dist/server/src/api/database/constants.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +4 -1
- package/dist/server/src/api/database/index.js +37 -3
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migrations/v2-0-51.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-0-51.js +43 -0
- package/dist/server/src/api/database/migrations/v2-0-51.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +3 -3
- package/dist/server/src/api/database/types.d.ts +4 -2
- package/dist/server/src/api/index.d.ts +2 -0
- package/dist/server/src/api/index.js +92 -6
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/ingress.d.ts +10 -0
- package/dist/server/src/api/ingress.js +54 -0
- package/dist/server/src/api/ingress.js.map +1 -0
- package/dist/server/src/api/middlewares/socketAuth.middleware.js +5 -1
- package/dist/server/src/api/middlewares/socketAuth.middleware.js.map +1 -1
- package/dist/server/src/api/render-index.d.ts +3 -0
- package/dist/server/src/api/render-index.js +39 -0
- package/dist/server/src/api/render-index.js.map +1 -0
- package/dist/server/src/api/routes/auth.routes.js +10 -0
- package/dist/server/src/api/routes/auth.routes.js.map +1 -1
- package/dist/server/src/api/routes/automations.routes.js +11 -0
- package/dist/server/src/api/routes/automations.routes.js.map +1 -1
- package/dist/server/src/api/routes/backup.routes.js +4 -0
- package/dist/server/src/api/routes/backup.routes.js.map +1 -1
- package/dist/server/src/api/routes/cameras.routes.js +35 -1
- package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
- package/dist/server/src/api/routes/index.js +14 -1
- package/dist/server/src/api/routes/index.js.map +1 -1
- package/dist/server/src/api/routes/mqtt.routes.js +10 -0
- package/dist/server/src/api/routes/mqtt.routes.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +163 -21
- package/dist/server/src/api/schemas/cameras.schema.js +39 -3
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/config.schema.d.ts +1 -0
- package/dist/server/src/api/schemas/config.schema.js +1 -0
- package/dist/server/src/api/schemas/config.schema.js.map +1 -1
- package/dist/server/src/api/schemas/users.schema.d.ts +21 -21
- package/dist/server/src/api/schemas/users.schema.js +3 -16
- package/dist/server/src/api/schemas/users.schema.js.map +1 -1
- package/dist/server/src/api/schemas/virtualsensors.schema.js.map +1 -1
- package/dist/server/src/api/services/automations.service.d.ts +6 -0
- package/dist/server/src/api/services/automations.service.js +28 -3
- package/dist/server/src/api/services/automations.service.js.map +1 -1
- package/dist/server/src/api/services/backup.service.d.ts +6 -1
- package/dist/server/src/api/services/backup.service.js +28 -5
- package/dist/server/src/api/services/backup.service.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.d.ts +2 -0
- package/dist/server/src/api/services/cameras.service.js +28 -4
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/mqtt.service.d.ts +1 -0
- package/dist/server/src/api/services/mqtt.service.js +3 -0
- package/dist/server/src/api/services/mqtt.service.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.js +1 -5
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +12 -0
- package/dist/server/src/api/websocket/nsp/events.d.ts +12 -0
- package/dist/server/src/api/websocket/nsp/events.js +76 -1
- package/dist/server/src/api/websocket/nsp/events.js.map +1 -1
- package/dist/server/src/automations/actions/cameraControl.js +4 -3
- package/dist/server/src/automations/actions/cameraControl.js.map +1 -1
- package/dist/server/src/automations/actions/http.js +1 -1
- package/dist/server/src/automations/actions/http.js.map +1 -1
- package/dist/server/src/automations/actions/plugin.js +4 -1
- package/dist/server/src/automations/actions/plugin.js.map +1 -1
- package/dist/server/src/automations/conditions/ifelse.js +7 -6
- package/dist/server/src/automations/conditions/ifelse.js.map +1 -1
- package/dist/server/src/automations/conditions/switch.js +6 -2
- package/dist/server/src/automations/conditions/switch.js.map +1 -1
- package/dist/server/src/automations/context.d.ts +2 -1
- package/dist/server/src/automations/context.js +47 -25
- package/dist/server/src/automations/context.js.map +1 -1
- package/dist/server/src/automations/engine.d.ts +3 -0
- package/dist/server/src/automations/engine.js +66 -9
- package/dist/server/src/automations/engine.js.map +1 -1
- package/dist/server/src/automations/parseValue.d.ts +2 -0
- package/dist/server/src/automations/parseValue.js +8 -0
- package/dist/server/src/automations/parseValue.js.map +1 -1
- package/dist/server/src/automations/runner.d.ts +6 -2
- package/dist/server/src/automations/runner.js +103 -43
- package/dist/server/src/automations/runner.js.map +1 -1
- package/dist/server/src/automations/trace.d.ts +25 -0
- package/dist/server/src/automations/trace.js +17 -0
- package/dist/server/src/automations/trace.js.map +1 -0
- package/dist/server/src/automations/triggers/detection.js +2 -1
- package/dist/server/src/automations/triggers/detection.js.map +1 -1
- package/dist/server/src/automations/triggers/schedule.js +10 -44
- package/dist/server/src/automations/triggers/schedule.js.map +1 -1
- package/dist/server/src/automations/triggers/sensor.js +9 -2
- package/dist/server/src/automations/triggers/sensor.js.map +1 -1
- package/dist/server/src/camera/controller.js +6 -1
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +2 -0
- package/dist/server/src/camera/decoder/detection-coordinator.js +11 -1
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +12 -1
- package/dist/server/src/camera/decoder/event-manager.js +95 -15
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/plate-vote.d.ts +20 -0
- package/dist/server/src/camera/decoder/plate-vote.js +63 -0
- package/dist/server/src/camera/decoder/plate-vote.js.map +1 -0
- package/dist/server/src/camera/decoder/secondary-stage.d.ts +3 -2
- package/dist/server/src/camera/decoder/secondary-stage.js +26 -13
- package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
- package/dist/server/src/camera/decoder/stationary-suppressor.d.ts +6 -0
- package/dist/server/src/camera/decoder/stationary-suppressor.js +59 -17
- package/dist/server/src/camera/decoder/stationary-suppressor.js.map +1 -1
- package/dist/server/src/camera/decoder/worker.d.ts +0 -1
- package/dist/server/src/camera/decoder/worker.js +0 -3
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/camera/index.d.ts +2 -1
- package/dist/server/src/camera/index.js +3 -0
- package/dist/server/src/camera/index.js.map +1 -1
- package/dist/server/src/camera/sensors/controller.js +6 -4
- package/dist/server/src/camera/sensors/controller.js.map +1 -1
- package/dist/server/src/camera/sensors/semantics.d.ts +3 -0
- package/dist/server/src/camera/sensors/semantics.js +12 -0
- package/dist/server/src/camera/sensors/semantics.js.map +1 -0
- package/dist/server/src/camera/sensors/sensor.js +17 -11
- package/dist/server/src/camera/sensors/sensor.js.map +1 -1
- package/dist/server/src/camera/sensors/stable-id.d.ts +1 -0
- package/dist/server/src/camera/sensors/stable-id.js +5 -1
- package/dist/server/src/camera/sensors/stable-id.js.map +1 -1
- package/dist/server/src/camera/sensors/types.d.ts +12 -3
- package/dist/server/src/camera/sensors/types.js +48 -216
- package/dist/server/src/camera/sensors/types.js.map +1 -1
- package/dist/server/src/camera/streaming/fmp4-session.js +49 -26
- package/dist/server/src/camera/streaming/fmp4-session.js.map +1 -1
- package/dist/server/src/camera/streaming/rtp-session.js +53 -19
- package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
- package/dist/server/src/internal-bus.d.ts +20 -2
- package/dist/server/src/internal-bus.js.map +1 -1
- package/dist/server/src/manager/discoveryManager.d.ts +2 -0
- package/dist/server/src/manager/discoveryManager.js +11 -7
- package/dist/server/src/manager/discoveryManager.js.map +1 -1
- package/dist/server/src/mqtt/bridge.d.ts +1 -0
- package/dist/server/src/mqtt/bridge.js +11 -7
- package/dist/server/src/mqtt/bridge.js.map +1 -1
- package/dist/server/src/mqtt/ha-discovery.d.ts +0 -1
- package/dist/server/src/mqtt/ha-discovery.js +96 -179
- package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
- package/dist/server/src/mqtt/manager.d.ts +3 -0
- package/dist/server/src/mqtt/manager.js +15 -0
- package/dist/server/src/mqtt/manager.js.map +1 -1
- package/dist/server/src/plugins/index.js +4 -7
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/go/index.d.ts +0 -1
- package/dist/server/src/plugins/runtime/go/index.js +25 -32
- package/dist/server/src/plugins/runtime/go/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/index.js +3 -2
- package/dist/server/src/plugins/runtime/node/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/sensor.d.ts +0 -1
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js +4 -4
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/index.js +17 -1
- package/dist/server/src/plugins/runtime/python/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +5 -0
- package/dist/server/src/plugins/worker.js +10 -2
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/remote/services/cloudflare-managed.d.ts +1 -0
- package/dist/server/src/remote/services/cloudflare-managed.js +7 -1
- package/dist/server/src/remote/services/cloudflare-managed.js.map +1 -1
- package/dist/server/src/remote/services/cloudflare.js +6 -3
- package/dist/server/src/remote/services/cloudflare.js.map +1 -1
- package/dist/server/src/remote/services/index.js +3 -0
- package/dist/server/src/remote/services/index.js.map +1 -1
- package/dist/server/src/rpc/interfaces/sensor.d.ts +1 -0
- package/dist/server/src/services/config/index.d.ts +1 -0
- package/dist/server/src/services/config/index.js +11 -6
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/services/config/types.d.ts +1 -1
- package/dist/server/src/services/mdns/index.js +3 -0
- package/dist/server/src/services/mdns/index.js.map +1 -1
- package/dist/server/src/utils/camera.d.ts +1 -0
- package/dist/server/src/utils/camera.js +4 -1
- package/dist/server/src/utils/camera.js.map +1 -1
- package/dist/server/src/utils/path.d.ts +1 -1
- package/dist/server/src/utils/path.js +1 -1
- package/dist/server/src/utils/path.js.map +1 -1
- package/dist/server/src/utils/pythonInstaller.d.ts +1 -0
- package/dist/server/src/utils/pythonInstaller.js +18 -6
- package/dist/server/src/utils/pythonInstaller.js.map +1 -1
- package/dist/server/src/workers/agent.d.ts +1 -0
- package/dist/server/src/workers/agent.js +4 -1
- package/dist/server/src/workers/agent.js.map +1 -1
- package/dist/server/src/workers/capabilities/plugin-host.d.ts +2 -1
- package/dist/server/src/workers/capabilities/plugin-host.js +8 -1
- package/dist/server/src/workers/capabilities/plugin-host.js.map +1 -1
- package/dist/server/src/workers/manager.d.ts +2 -1
- package/dist/server/src/workers/manager.js +12 -0
- package/dist/server/src/workers/manager.js.map +1 -1
- package/dist/server/src/workers/types.d.ts +7 -0
- package/package.json +13 -11
- package/dist/interface/assets/404-CHNnQ07B.js +0 -1
- package/dist/interface/assets/About-BsaU74tJ.js +0 -1
- package/dist/interface/assets/Adminpanel-DtAn7w3q.js +0 -1
- package/dist/interface/assets/Automation-B6dndnPV.js +0 -2
- package/dist/interface/assets/AutomationImport-DuUOIIyR.js +0 -2
- package/dist/interface/assets/AutomationStore-Xah6Ds5s.js +0 -2
- package/dist/interface/assets/AutomationStoreDetail-DjgQq4MK.js +0 -2
- package/dist/interface/assets/Automations-Z2Esd61q.js +0 -2
- package/dist/interface/assets/Camera-D59ItpvH.js +0 -2
- package/dist/interface/assets/CameraConsole-H8Dw-cqw.js +0 -7
- package/dist/interface/assets/Cameras-2kM76WUB.css +0 -1
- package/dist/interface/assets/Cameras-Jowje8rS.js +0 -652
- package/dist/interface/assets/Camview-BUf_kn9a.js +0 -1
- package/dist/interface/assets/Config-BRr7oxiv.js +0 -2
- package/dist/interface/assets/ConfigActionCameraControl-k8QcbpFi.js +0 -1
- package/dist/interface/assets/ConfigActionHttp-DghgMG8I.js +0 -1
- package/dist/interface/assets/ConfigActionImageInput-DdJ9WVUi.js +0 -1
- package/dist/interface/assets/ConfigActionMqtt-CwIl_CUG.js +0 -1
- package/dist/interface/assets/ConfigActionNotification-BKumqxEl.js +0 -1
- package/dist/interface/assets/ConfigActionOutput-Dtkhn36z.js +0 -1
- package/dist/interface/assets/ConfigActionPlugin-eYhvQu7v.js +0 -1
- package/dist/interface/assets/ConfigActionSensor-CBGTysP5.js +0 -1
- package/dist/interface/assets/ConfigActionSnapshot-DeEZpkGU.js +0 -1
- package/dist/interface/assets/ConfigActionVariable-B-OJvgFr.js +0 -1
- package/dist/interface/assets/ConfigConditionIfElse-C-GRpawm.js +0 -1
- package/dist/interface/assets/ConfigConditionSensorState-BcT1OdkE.js +0 -1
- package/dist/interface/assets/ConfigConditionSwitch-DCtfW4os.js +0 -1
- package/dist/interface/assets/ConfigSensorValueInput-33yyWBvv.js +0 -1
- package/dist/interface/assets/ConfigTriggerDetection-DKXtEYs5.js +0 -1
- package/dist/interface/assets/ConfigTriggerGeofence-BDbH0yi3.js +0 -1
- package/dist/interface/assets/ConfigTriggerMqtt-3JYUp5bN.js +0 -1
- package/dist/interface/assets/ConfigTriggerSchedule-BzMQhwFK.js +0 -1
- package/dist/interface/assets/ConfigTriggerSensor-CW4m1Kih.js +0 -1
- package/dist/interface/assets/ConfigTriggerWebhook-D1ZxjnBH.js +0 -1
- package/dist/interface/assets/Console-BfDxTA0z.js +0 -1
- package/dist/interface/assets/CuiActionButton-3g3d4Hty.js +0 -1
- package/dist/interface/assets/CuiAvatar-BtMXnhxd.css +0 -1
- package/dist/interface/assets/CuiAvatar-DC5kBssG.js +0 -1
- package/dist/interface/assets/CuiBBoxPlayground-C-ROFu1J.js +0 -1
- package/dist/interface/assets/CuiBBoxPlayground-EFkdOBvq.css +0 -1
- package/dist/interface/assets/CuiBottomSheet-DewYUtvd.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DhJ7mPOY.js +0 -1
- package/dist/interface/assets/CuiCameraCard-BxGmxXxZ.css +0 -1
- package/dist/interface/assets/CuiCameraCard-DW0FQ7bq.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-CvSggtUF.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-rzFWZQ5x.js +0 -1
- package/dist/interface/assets/CuiCameraShares-jhAbADz_.js +0 -1
- package/dist/interface/assets/CuiCameraSnapshot-B4j7AOCs.js +0 -1
- package/dist/interface/assets/CuiCameraTable-CTvIHn1t.js +0 -2
- package/dist/interface/assets/CuiDataTable-BCji83l4.js +0 -1
- package/dist/interface/assets/CuiFloatingButton-BCfFilF6.js +0 -1
- package/dist/interface/assets/CuiImage-BM4g6edi.css +0 -1
- package/dist/interface/assets/CuiImage-OMB9QmYG.js +0 -1
- package/dist/interface/assets/CuiMarkdownContent-H33iUdE5.js +0 -1
- package/dist/interface/assets/CuiMenu-BWUfWLQP.css +0 -1
- package/dist/interface/assets/CuiMenu-Cu1XcfTo.js +0 -1
- package/dist/interface/assets/CuiPluginCard-BpRfC_LZ.js +0 -2
- package/dist/interface/assets/CuiPluginCategoryChip-BQyTd-CO.js +0 -1
- package/dist/interface/assets/CuiPluginOAuthButton-DJE7icya.js +0 -2
- package/dist/interface/assets/CuiPluginTrustBadge-RbS7zcMn.js +0 -1
- package/dist/interface/assets/CuiQRCode-DCu3UUaE.js +0 -1
- package/dist/interface/assets/CuiRecordingsGrid-Gd_UBE9S.js +0 -1
- package/dist/interface/assets/CuiSchema-CdXvzvH_.js +0 -1
- package/dist/interface/assets/CuiTopNavbarItem-CTOystLC.js +0 -1
- package/dist/interface/assets/CuiTopbarSlot-BkbPbFkm.js +0 -1
- package/dist/interface/assets/Faces-B07vg9aT.js +0 -1
- package/dist/interface/assets/FirstSteps-CAm3e-Ps.js +0 -1
- package/dist/interface/assets/Instances-5F02xSdP.js +0 -1
- package/dist/interface/assets/Logs-aditW96b.js +0 -6
- package/dist/interface/assets/Menu-B5bs9Nk6.js +0 -1
- package/dist/interface/assets/OAuthDeviceFlow-jvatqxEp.js +0 -1
- package/dist/interface/assets/Plugin-Cvf6z--K.js +0 -1
- package/dist/interface/assets/PluginConsole-IwnVx03U.js +0 -7
- package/dist/interface/assets/PluginDetail-DQkDmMhZ.js +0 -2
- package/dist/interface/assets/PluginSchema-BejWv56L.js +0 -1
- package/dist/interface/assets/PluginSearch-CbV58if7.js +0 -1
- package/dist/interface/assets/PluginSearch-DXVd0zKo.js +0 -2
- package/dist/interface/assets/Plugins-BipCK9K1.js +0 -1
- package/dist/interface/assets/Recordings-DopujSNl.js +0 -1
- package/dist/interface/assets/Settings-C_fZEMd6.js +0 -1
- package/dist/interface/assets/SettingsAccount-EIs17fXL.js +0 -1
- package/dist/interface/assets/SettingsAccount-fXsR0E9w.js +0 -1
- package/dist/interface/assets/SettingsAppearance-1E4ZVOvU.js +0 -1
- package/dist/interface/assets/SettingsAppearance-D4AcjKmd.js +0 -1
- package/dist/interface/assets/SettingsBackup-CqqJcj9V.js +0 -1
- package/dist/interface/assets/SettingsMqtt-Bwsgv7hZ.js +0 -1
- package/dist/interface/assets/SettingsNotifications-DVMmqDIN.js +0 -2
- package/dist/interface/assets/SettingsRecordings-DkhYVwS5.js +0 -1
- package/dist/interface/assets/SettingsRemote-D8Gwkj-H.js +0 -1
- package/dist/interface/assets/SettingsSystem-C29jOMdZ.js +0 -2
- package/dist/interface/assets/SettingsUsers-DPyFPqNb.js +0 -1
- package/dist/interface/assets/Terminal-CkpBS5Dg.js +0 -4
- package/dist/interface/assets/VariableInput-DMER1zSR.js +0 -1
- package/dist/interface/assets/VersionsHandler-D3-3JG-p.js +0 -7
- package/dist/interface/assets/Workers-JrLx-VXf.js +0 -2
- package/dist/interface/assets/_plugin-vue_export-helper-BDNMzG2s.js +0 -1
- package/dist/interface/assets/ace-6JpPWRIj.js +0 -1
- package/dist/interface/assets/api-C-AZSdHz.css +0 -2
- package/dist/interface/assets/api-Ci2OPZLb.js +0 -2
- package/dist/interface/assets/api-Q22IOG4a.js +0 -1
- package/dist/interface/assets/auth-BqaGki6j.js +0 -1
- package/dist/interface/assets/automation-5ksuCa47.js +0 -1
- package/dist/interface/assets/automations-DhR5Sia9.js +0 -1
- package/dist/interface/assets/automations-jd-HryjO.js +0 -1
- package/dist/interface/assets/availableVariables-D9VhvJZ1.js +0 -1
- package/dist/interface/assets/bell-C9mIWMWk.js +0 -1
- package/dist/interface/assets/bell-outline-Dc2jlnIq.js +0 -1
- package/dist/interface/assets/bug-zzM1padE.js +0 -1
- package/dist/interface/assets/cameras-DveQuCR0.js +0 -1
- package/dist/interface/assets/cameras.schema-DBLOCGJX.js +0 -1
- package/dist/interface/assets/cctv-tzdxhH3J.js +0 -1
- package/dist/interface/assets/check-bBrmKigT.js +0 -1
- package/dist/interface/assets/circular-connection-CU7MCuUc.js +0 -1
- package/dist/interface/assets/cloud-outline-Buxz0EJ2.js +0 -1
- package/dist/interface/assets/cloud-outline-CcWcrU1H.js +0 -1
- package/dist/interface/assets/cloudHandoff-9tPkt-ON.js +0 -1
- package/dist/interface/assets/cog-Btmv5cTa.js +0 -1
- package/dist/interface/assets/cog-outline-COxCsaa7.js +0 -1
- package/dist/interface/assets/config-9s9zQBx8.js +0 -1
- package/dist/interface/assets/copy-16-filled-DO8QJ5jY.js +0 -1
- package/dist/interface/assets/delete-outline-PeGi5HED.js +0 -1
- package/dist/interface/assets/download-wKmzxMGG.js +0 -1
- package/dist/interface/assets/esm-BbNiWnlM.js +0 -1
- package/dist/interface/assets/esm-BdHNBTAD.js +0 -1
- package/dist/interface/assets/esm-CA5vOO11.js +0 -1
- package/dist/interface/assets/esm-CAWRiYdq.js +0 -1
- package/dist/interface/assets/esm-CnaltMuw.js +0 -1
- package/dist/interface/assets/esm-Cz7O6U8f2.js +0 -1
- package/dist/interface/assets/esm-DF-tHra0.js +0 -1
- package/dist/interface/assets/esm-DFbRgfmR.js +0 -1
- package/dist/interface/assets/esm-DMPT4YUA.js +0 -1
- package/dist/interface/assets/esm-D_25JquT.js +0 -1
- package/dist/interface/assets/esm-DaPjB4YE.js +0 -1
- package/dist/interface/assets/esm-DvYGT_BI.js +0 -1
- package/dist/interface/assets/esm-rmWYkszg.js +0 -1
- package/dist/interface/assets/esm-yAVwCMtx.js +0 -1
- package/dist/interface/assets/eventIcons-2hVCNchU.css +0 -1
- package/dist/interface/assets/eventIcons-uRPqE83F.js +0 -1
- package/dist/interface/assets/face-recognition-eRy5sHNg.js +0 -1
- package/dist/interface/assets/github-DMYx-QRV.js +0 -1
- package/dist/interface/assets/grid-fill-C4zzGgeI.js +0 -1
- package/dist/interface/assets/hasPermission-U8rWYs3e.js +0 -1
- package/dist/interface/assets/instances-D6pOZ9S2.js +0 -1
- package/dist/interface/assets/lightbulb-outline-DvCSmwHW.js +0 -1
- package/dist/interface/assets/main-DXE4zBZz.js +0 -3
- package/dist/interface/assets/motion-sensor-pRMd7Avm.js +0 -1
- package/dist/interface/assets/native-BCmNybfv.js +0 -1
- package/dist/interface/assets/native-GPGSceJj.js +0 -1
- package/dist/interface/assets/nodeDefinitions-C2RwmaJh.js +0 -1
- package/dist/interface/assets/notifications-Dfc5JraF.js +0 -1
- package/dist/interface/assets/play-solid-B6TQ0J8_.js +0 -1
- package/dist/interface/assets/plugin-DD3mGhTv.js +0 -1
- package/dist/interface/assets/plugins-F8HC_aub.js +0 -1
- package/dist/interface/assets/puzzle-filled-D4sL3q0q.js +0 -1
- package/dist/interface/assets/refresh-rounded-B00F7iZg.js +0 -1
- package/dist/interface/assets/round-restart-alt-Dvdf0cs5.js +0 -1
- package/dist/interface/assets/router-DZjA6qEF.css +0 -1
- package/dist/interface/assets/router-F1vxbpmr.js +0 -2
- package/dist/interface/assets/routerState-jp8ZOkH0.js +0 -1
- package/dist/interface/assets/server-CVqV-aK8.js +0 -1
- package/dist/interface/assets/shares-CgYXFl_V.js +0 -1
- package/dist/interface/assets/shield-check-BwIO9FNq.js +0 -1
- package/dist/interface/assets/terminal-BASwIORZ.js +0 -1
- package/dist/interface/assets/theme-CeTMD7iy.js +0 -1
- package/dist/interface/assets/transit-connection-variant-BbMJgsqX.js +0 -1
- package/dist/interface/assets/types-BSNzLwmC.js +0 -1
- package/dist/interface/assets/types-BxFyoO54.js +0 -1
- package/dist/interface/assets/types-C72GH31_.js +0 -1
- package/dist/interface/assets/ui-Buqvvz5_.js +0 -1
- package/dist/interface/assets/useBackupRestore-B_L5eacS.js +0 -1
- package/dist/interface/assets/useBiometricCredentials-XSBauCAw.js +0 -1
- package/dist/interface/assets/useCameraOptions-Csn90EfC.js +0 -1
- package/dist/interface/assets/useCuiCameraDrawer-CmKK-nWj.js +0 -1
- package/dist/interface/assets/useCuiDialog-CsfQVxs9.js +0 -2
- package/dist/interface/assets/useFileDownload-Cgl2TsAx.js +0 -1
- package/dist/interface/assets/useLogsSocket-DROirzwW.js +0 -5
- package/dist/interface/assets/useSharedComposables-Dt2kEWWK.js +0 -1
- package/dist/interface/assets/useStreamStatus-GuRUKQIO.js +0 -1
- package/dist/interface/assets/useUpdateChannel-C_QBlWej.js +0 -1
- package/dist/interface/assets/useUserOptions-CEgftL3b.js +0 -1
- package/dist/interface/assets/users.schema-CfQ1Ms-E.js +0 -1
- package/dist/interface/assets/vendor-cameraui-C1IKkRDu.js +0 -2039
- package/dist/interface/assets/vendor-capacitor-CgsKMKU7.js +0 -2
- package/dist/interface/assets/vendor-core-D8HwO28D.js +0 -1
- package/dist/interface/assets/vendor-gridstack-DD5uGA3X.js +0 -3
- package/dist/interface/assets/vendor-gridstack-Rg2RhwAc.css +0 -1
- package/dist/interface/assets/vendor-zod-XsuaxHRY.js +0 -127
- package/dist/interface/assets/view-grid-CFIWphbe.js +0 -1
- package/dist/interface/assets/view-grid-CWZLWCco.css +0 -1
- package/dist/interface/assets/web-B8HJA2eH.js +0 -1
- package/dist/interface/assets/web-BGITTsNt.js +0 -1
- package/dist/interface/assets/web-BQB4qOgy.js +0 -1
- package/dist/interface/assets/web-BSXReJ_Z.js +0 -1
- package/dist/interface/assets/web-BhWC15qT.js +0 -1
- package/dist/interface/assets/web-BjKL51lK-DdfGLx29.js +0 -1
- package/dist/interface/assets/web-C8JXaRi_.js +0 -1
- package/dist/interface/assets/web-CoDDbrp3.js +0 -1
- package/dist/interface/assets/web-D3SmeLx8.js +0 -1
- package/dist/interface/assets/web-DAvyrq3Y.js +0 -1
- package/dist/interface/assets/web-GLZJCv4W.js +0 -1
- package/dist/interface/assets/web-VstUBouH.js +0 -1
- package/dist/interface/assets/web-Yn_laCd7.js +0 -1
- package/dist/interface/assets/web-kTiET-EO.js +0 -1
- package/dist/interface/assets/workbox-window.prod.es5-CN8kDpb8.js +0 -1
|
@@ -1,166 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
assignmentKey: 'audio',
|
|
18
|
-
multiProvider: false,
|
|
19
|
-
isDetectionType: true,
|
|
20
|
-
},
|
|
21
|
-
[SensorType.Face]: {
|
|
22
|
-
category: SensorCategory.Sensor,
|
|
23
|
-
assignmentKey: 'face',
|
|
24
|
-
multiProvider: false,
|
|
25
|
-
isDetectionType: true,
|
|
26
|
-
},
|
|
27
|
-
[SensorType.LicensePlate]: {
|
|
28
|
-
category: SensorCategory.Sensor,
|
|
29
|
-
assignmentKey: 'licensePlate',
|
|
30
|
-
multiProvider: false,
|
|
31
|
-
isDetectionType: true,
|
|
32
|
-
},
|
|
33
|
-
[SensorType.Classifier]: {
|
|
34
|
-
category: SensorCategory.Sensor,
|
|
35
|
-
assignmentKey: 'classifier',
|
|
36
|
-
multiProvider: true,
|
|
37
|
-
isDetectionType: true,
|
|
38
|
-
},
|
|
39
|
-
[SensorType.Clip]: {
|
|
40
|
-
category: SensorCategory.Sensor,
|
|
41
|
-
assignmentKey: 'clip',
|
|
42
|
-
multiProvider: false,
|
|
43
|
-
isDetectionType: true,
|
|
44
|
-
},
|
|
45
|
-
[SensorType.Contact]: {
|
|
46
|
-
category: SensorCategory.Sensor,
|
|
47
|
-
assignmentKey: 'contact',
|
|
48
|
-
multiProvider: true,
|
|
49
|
-
isDetectionType: false,
|
|
50
|
-
cascadeTrigger: { property: 'detected', value: true, sustained: true },
|
|
51
|
-
},
|
|
52
|
-
[SensorType.Light]: {
|
|
53
|
-
category: SensorCategory.Control,
|
|
54
|
-
assignmentKey: 'light',
|
|
55
|
-
multiProvider: true,
|
|
56
|
-
isDetectionType: false,
|
|
57
|
-
cascadeTrigger: { property: 'on', value: true, sustained: true },
|
|
58
|
-
},
|
|
59
|
-
[SensorType.Siren]: {
|
|
60
|
-
category: SensorCategory.Control,
|
|
61
|
-
assignmentKey: 'siren',
|
|
62
|
-
multiProvider: true,
|
|
63
|
-
isDetectionType: false,
|
|
64
|
-
cascadeTrigger: { property: 'active', value: true, sustained: true },
|
|
65
|
-
},
|
|
66
|
-
[SensorType.Switch]: {
|
|
67
|
-
category: SensorCategory.Control,
|
|
68
|
-
assignmentKey: 'switch',
|
|
69
|
-
multiProvider: true,
|
|
70
|
-
isDetectionType: false,
|
|
71
|
-
cascadeTrigger: { property: 'on', value: true, sustained: true },
|
|
72
|
-
},
|
|
73
|
-
[SensorType.PTZ]: {
|
|
74
|
-
category: SensorCategory.Control,
|
|
75
|
-
assignmentKey: 'ptz',
|
|
76
|
-
multiProvider: false,
|
|
77
|
-
isDetectionType: false,
|
|
78
|
-
},
|
|
79
|
-
[SensorType.Lock]: {
|
|
80
|
-
category: SensorCategory.Control,
|
|
81
|
-
assignmentKey: 'lock',
|
|
82
|
-
multiProvider: true,
|
|
83
|
-
isDetectionType: false,
|
|
84
|
-
cascadeTrigger: { property: 'currentState', value: 1, sustained: true },
|
|
85
|
-
},
|
|
86
|
-
[SensorType.SecuritySystem]: {
|
|
87
|
-
category: SensorCategory.Control,
|
|
88
|
-
assignmentKey: 'securitySystem',
|
|
89
|
-
multiProvider: true,
|
|
90
|
-
isDetectionType: false,
|
|
91
|
-
cascadeTrigger: { property: 'currentState', value: 4, sustained: true },
|
|
92
|
-
},
|
|
93
|
-
[SensorType.Doorbell]: {
|
|
94
|
-
category: SensorCategory.Trigger,
|
|
95
|
-
assignmentKey: 'doorbell',
|
|
96
|
-
multiProvider: true,
|
|
97
|
-
isDetectionType: false,
|
|
98
|
-
cascadeTrigger: { property: 'ring', value: true, sustained: false },
|
|
99
|
-
},
|
|
100
|
-
[SensorType.Temperature]: {
|
|
101
|
-
category: SensorCategory.Info,
|
|
102
|
-
assignmentKey: 'temperature',
|
|
103
|
-
multiProvider: true,
|
|
104
|
-
isDetectionType: false,
|
|
105
|
-
},
|
|
106
|
-
[SensorType.Humidity]: {
|
|
107
|
-
category: SensorCategory.Info,
|
|
108
|
-
assignmentKey: 'humidity',
|
|
109
|
-
multiProvider: true,
|
|
110
|
-
isDetectionType: false,
|
|
111
|
-
},
|
|
112
|
-
[SensorType.Occupancy]: {
|
|
113
|
-
category: SensorCategory.Sensor,
|
|
114
|
-
assignmentKey: 'occupancy',
|
|
115
|
-
multiProvider: true,
|
|
116
|
-
isDetectionType: false,
|
|
117
|
-
cascadeTrigger: { property: 'detected', value: true, sustained: true },
|
|
118
|
-
},
|
|
119
|
-
[SensorType.Smoke]: {
|
|
120
|
-
category: SensorCategory.Sensor,
|
|
121
|
-
assignmentKey: 'smoke',
|
|
122
|
-
multiProvider: true,
|
|
123
|
-
isDetectionType: false,
|
|
124
|
-
cascadeTrigger: { property: 'detected', value: true, sustained: true },
|
|
125
|
-
},
|
|
126
|
-
[SensorType.Leak]: {
|
|
127
|
-
category: SensorCategory.Sensor,
|
|
128
|
-
assignmentKey: 'leak',
|
|
129
|
-
multiProvider: true,
|
|
130
|
-
isDetectionType: false,
|
|
131
|
-
cascadeTrigger: { property: 'detected', value: true, sustained: true },
|
|
132
|
-
},
|
|
133
|
-
[SensorType.Garage]: {
|
|
134
|
-
category: SensorCategory.Control,
|
|
135
|
-
assignmentKey: 'garage',
|
|
136
|
-
multiProvider: true,
|
|
137
|
-
isDetectionType: false,
|
|
138
|
-
cascadeTrigger: { property: 'currentState', value: 0, sustained: true },
|
|
139
|
-
},
|
|
140
|
-
[SensorType.Battery]: {
|
|
141
|
-
category: SensorCategory.Info,
|
|
142
|
-
assignmentKey: 'battery',
|
|
143
|
-
multiProvider: false,
|
|
144
|
-
isDetectionType: false,
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
export const PROPERTY_CAPABILITY_MAP = {
|
|
148
|
-
[SensorType.Battery]: {
|
|
149
|
-
[BatteryProperty.Charging]: BatteryCapability.Charging,
|
|
150
|
-
[BatteryProperty.Low]: BatteryCapability.LowBattery,
|
|
151
|
-
},
|
|
152
|
-
[SensorType.Light]: {
|
|
153
|
-
[LightProperty.Brightness]: LightCapability.Brightness,
|
|
154
|
-
},
|
|
155
|
-
[SensorType.Siren]: {
|
|
156
|
-
[SirenProperty.Volume]: SirenCapability.Volume,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
1
|
+
import { SENSOR_META, SensorCategory } from '@camera.ui/sdk';
|
|
2
|
+
function buildSensorTypeConfig() {
|
|
3
|
+
const config = {};
|
|
4
|
+
for (const meta of SENSOR_META) {
|
|
5
|
+
config[meta.type] = {
|
|
6
|
+
category: meta.category,
|
|
7
|
+
assignmentKey: meta.assignmentKey,
|
|
8
|
+
multiProvider: meta.multiProvider,
|
|
9
|
+
isDetectionType: meta.isDetectionType,
|
|
10
|
+
...(meta.cascadeTrigger ? { cascadeTrigger: meta.cascadeTrigger } : {}),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return config;
|
|
14
|
+
}
|
|
15
|
+
export const SENSOR_TYPE_CONFIG = buildSensorTypeConfig();
|
|
16
|
+
export const PROPERTY_CAPABILITY_MAP = Object.fromEntries(SENSOR_META.filter((meta) => meta.propertyCapabilities).map((meta) => [meta.type, meta.propertyCapabilities]));
|
|
159
17
|
export function getMultiProviderTypes() {
|
|
160
18
|
return Object.entries(SENSOR_TYPE_CONFIG)
|
|
161
19
|
.filter(([, meta]) => meta.multiProvider)
|
|
162
20
|
.map(([type]) => type);
|
|
163
21
|
}
|
|
22
|
+
export function getShortcutableTypes() {
|
|
23
|
+
return SENSOR_META.filter((meta) => meta.shortcutable).map((meta) => meta.type);
|
|
24
|
+
}
|
|
25
|
+
export function getSingleProviderTypes() {
|
|
26
|
+
return Object.entries(SENSOR_TYPE_CONFIG)
|
|
27
|
+
.filter(([, meta]) => !meta.multiProvider)
|
|
28
|
+
.map(([type]) => type);
|
|
29
|
+
}
|
|
164
30
|
export function getDetectionTypes() {
|
|
165
31
|
return Object.entries(SENSOR_TYPE_CONFIG)
|
|
166
32
|
.filter(([, meta]) => meta.isDetectionType)
|
|
@@ -193,71 +59,37 @@ export function getAccessorySensorTypes() {
|
|
|
193
59
|
export function isSingleProviderType(type) {
|
|
194
60
|
return !SENSOR_TYPE_CONFIG[type].multiProvider;
|
|
195
61
|
}
|
|
196
|
-
export const SENSOR_PROPERTY_MAP =
|
|
197
|
-
|
|
198
|
-
[SensorType.Object]: Object.values(ObjectProperty),
|
|
199
|
-
[SensorType.Audio]: Object.values(AudioProperty),
|
|
200
|
-
[SensorType.Face]: Object.values(FaceProperty),
|
|
201
|
-
[SensorType.LicensePlate]: Object.values(LicensePlateProperty),
|
|
202
|
-
[SensorType.Classifier]: Object.values(ClassifierProperty),
|
|
203
|
-
[SensorType.Clip]: [],
|
|
204
|
-
[SensorType.Contact]: Object.values(ContactProperty),
|
|
205
|
-
[SensorType.Temperature]: Object.values(TemperatureProperty),
|
|
206
|
-
[SensorType.Humidity]: Object.values(HumidityProperty),
|
|
207
|
-
[SensorType.Occupancy]: Object.values(OccupancyProperty),
|
|
208
|
-
[SensorType.Smoke]: Object.values(SmokeProperty),
|
|
209
|
-
[SensorType.Leak]: Object.values(LeakProperty),
|
|
210
|
-
[SensorType.Light]: Object.values(LightProperty),
|
|
211
|
-
[SensorType.Siren]: Object.values(SirenProperty),
|
|
212
|
-
[SensorType.Switch]: Object.values(SwitchProperty),
|
|
213
|
-
[SensorType.Lock]: Object.values(LockProperty),
|
|
214
|
-
[SensorType.Garage]: Object.values(GarageProperty),
|
|
215
|
-
[SensorType.PTZ]: Object.values(PTZProperty),
|
|
216
|
-
[SensorType.SecuritySystem]: Object.values(SecuritySystemProperty),
|
|
217
|
-
[SensorType.Doorbell]: Object.values(DoorbellProperty),
|
|
218
|
-
[SensorType.Battery]: Object.values(BatteryProperty),
|
|
219
|
-
};
|
|
62
|
+
export const SENSOR_PROPERTY_MAP = Object.fromEntries(SENSOR_META.map((meta) => [meta.type, Object.keys(meta.properties)]));
|
|
63
|
+
export const SENSOR_PROPERTY_SPECS = Object.fromEntries(SENSOR_META.map((meta) => [meta.type, meta.properties]));
|
|
220
64
|
export function getSensorProperties(type) {
|
|
221
65
|
return SENSOR_PROPERTY_MAP[type] ?? [];
|
|
222
66
|
}
|
|
67
|
+
export function getSensorPropertySpec(type, property) {
|
|
68
|
+
return SENSOR_PROPERTY_SPECS[type]?.[property];
|
|
69
|
+
}
|
|
70
|
+
export function getObservableSensorProperties(type) {
|
|
71
|
+
const specs = SENSOR_PROPERTY_SPECS[type];
|
|
72
|
+
if (!specs)
|
|
73
|
+
return [];
|
|
74
|
+
return Object.entries(specs)
|
|
75
|
+
.filter(([, spec]) => !spec.internal)
|
|
76
|
+
.map(([name]) => name);
|
|
77
|
+
}
|
|
78
|
+
export function getWritableSensorProperties(type) {
|
|
79
|
+
const specs = SENSOR_PROPERTY_SPECS[type];
|
|
80
|
+
if (!specs)
|
|
81
|
+
return [];
|
|
82
|
+
return Object.entries(specs)
|
|
83
|
+
.filter(([, spec]) => spec.writable)
|
|
84
|
+
.map(([name]) => name);
|
|
85
|
+
}
|
|
223
86
|
export const MULTI_PROVIDER_TYPES = new Set(getMultiProviderTypes());
|
|
224
87
|
export const DETECTION_SENSOR_TYPES = new Set(getDetectionTypes());
|
|
225
88
|
export const VIRTUAL_SENSOR_OWNER_ID = 'cameraui.virtual';
|
|
226
89
|
export const VIRTUAL_SENSOR_OWNER_NAME = 'Virtual';
|
|
227
|
-
export const VIRTUAL_SENSOR_TYPES =
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
SensorType.Contact,
|
|
231
|
-
SensorType.Occupancy,
|
|
232
|
-
SensorType.Smoke,
|
|
233
|
-
SensorType.Leak,
|
|
234
|
-
SensorType.Light,
|
|
235
|
-
SensorType.Siren,
|
|
236
|
-
SensorType.Lock,
|
|
237
|
-
SensorType.Garage,
|
|
238
|
-
SensorType.SecuritySystem,
|
|
239
|
-
SensorType.Temperature,
|
|
240
|
-
SensorType.Humidity,
|
|
241
|
-
];
|
|
242
|
-
export const VIRTUAL_SENSOR_DEFAULT_PROPERTIES = {
|
|
243
|
-
[SensorType.Doorbell]: { [DoorbellProperty.Ring]: false },
|
|
244
|
-
[SensorType.Switch]: { [SwitchProperty.On]: false },
|
|
245
|
-
[SensorType.Contact]: { [ContactProperty.Detected]: false },
|
|
246
|
-
[SensorType.Occupancy]: { [OccupancyProperty.Detected]: false },
|
|
247
|
-
[SensorType.Smoke]: { [SmokeProperty.Detected]: false },
|
|
248
|
-
[SensorType.Leak]: { [LeakProperty.Detected]: false },
|
|
249
|
-
[SensorType.Light]: { [LightProperty.On]: false, [LightProperty.Brightness]: 100 },
|
|
250
|
-
[SensorType.Siren]: { [SirenProperty.Active]: false, [SirenProperty.Volume]: 100 },
|
|
251
|
-
[SensorType.Lock]: { [LockProperty.CurrentState]: 0, [LockProperty.TargetState]: 0 },
|
|
252
|
-
[SensorType.Garage]: { [GarageProperty.CurrentState]: 1, [GarageProperty.TargetState]: 1 },
|
|
253
|
-
[SensorType.SecuritySystem]: { [SecuritySystemProperty.CurrentState]: 3, [SecuritySystemProperty.TargetState]: 3 },
|
|
254
|
-
[SensorType.Temperature]: { [TemperatureProperty.Current]: 20 },
|
|
255
|
-
[SensorType.Humidity]: { [HumidityProperty.Current]: 50 },
|
|
256
|
-
};
|
|
257
|
-
export const VIRTUAL_SENSOR_DEFAULT_CAPABILITIES = {
|
|
258
|
-
[SensorType.Light]: [LightCapability.Brightness],
|
|
259
|
-
[SensorType.Siren]: [SirenCapability.Volume],
|
|
260
|
-
};
|
|
90
|
+
export const VIRTUAL_SENSOR_TYPES = SENSOR_META.filter((meta) => meta.virtual).map((meta) => meta.type);
|
|
91
|
+
export const VIRTUAL_SENSOR_DEFAULT_PROPERTIES = Object.fromEntries(SENSOR_META.filter((meta) => meta.virtual).map((meta) => [meta.type, meta.virtual?.properties ?? {}]));
|
|
92
|
+
export const VIRTUAL_SENSOR_DEFAULT_CAPABILITIES = Object.fromEntries(SENSOR_META.filter((meta) => meta.virtual?.capabilities).map((meta) => [meta.type, meta.virtual?.capabilities]));
|
|
261
93
|
export function isVirtualSensorType(type) {
|
|
262
94
|
return VIRTUAL_SENSOR_TYPES.includes(type);
|
|
263
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/camera/sensors/types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/camera/sensors/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
8
8
|
onError = new Subject();
|
|
9
9
|
onEnded = new ReplaySubject(1);
|
|
10
10
|
#hasEnded = false;
|
|
11
|
+
#abort = new AbortController();
|
|
12
|
+
#shutdownPromise;
|
|
11
13
|
#cameraDevice;
|
|
12
14
|
#logger;
|
|
13
15
|
#source;
|
|
@@ -28,6 +30,12 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
28
30
|
return firstValueFrom(this.#initSegmentSubject);
|
|
29
31
|
}
|
|
30
32
|
async startStream(config) {
|
|
33
|
+
if (this.#hasEnded || this.#shutdownPromise) {
|
|
34
|
+
throw new Error('FMP4 session has ended and cannot be restarted.');
|
|
35
|
+
}
|
|
36
|
+
if (this.#fmp4Stream) {
|
|
37
|
+
throw new Error('FMP4 session already started.');
|
|
38
|
+
}
|
|
31
39
|
this.#options = {
|
|
32
40
|
...config,
|
|
33
41
|
input: {
|
|
@@ -38,12 +46,6 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
38
46
|
},
|
|
39
47
|
};
|
|
40
48
|
this.#logger.debug('Starting FMP4 session with options:', this.#options);
|
|
41
|
-
if (this.#boxDataSubject.closed) {
|
|
42
|
-
this.#boxDataSubject = new ReplaySubject(1);
|
|
43
|
-
}
|
|
44
|
-
if (this.#initSegmentSubject.closed) {
|
|
45
|
-
this.#initSegmentSubject = new ReplaySubject(1);
|
|
46
|
-
}
|
|
47
49
|
const supportedVideoCodec = new Set();
|
|
48
50
|
for (const videoCodec of this.#options.supportedVideoCodecs ?? []) {
|
|
49
51
|
switch (videoCodec) {
|
|
@@ -76,7 +78,8 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
76
78
|
let moovData;
|
|
77
79
|
let initSegment;
|
|
78
80
|
let initSegmentSent = false;
|
|
79
|
-
|
|
81
|
+
const fmp4Stream = FMP4Stream.create(this.#url, {
|
|
82
|
+
signal: this.#abort.signal,
|
|
80
83
|
onData: (data, info) => {
|
|
81
84
|
for (const box of info.boxes) {
|
|
82
85
|
if (box.type === 'ftyp') {
|
|
@@ -100,13 +103,11 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
100
103
|
this.#boxDataSubject.next(data);
|
|
101
104
|
}
|
|
102
105
|
},
|
|
103
|
-
onClose:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
await this.#onEnded();
|
|
109
|
-
}
|
|
106
|
+
onClose: (err) => {
|
|
107
|
+
const shutdown = err ? this.#onError(err) : this.#onEnded();
|
|
108
|
+
shutdown.catch((error) => {
|
|
109
|
+
this.#logger.error('Failed to shut down FMP4 session:', error);
|
|
110
|
+
});
|
|
110
111
|
},
|
|
111
112
|
boxMode: this.#options.boxMode,
|
|
112
113
|
fragDuration: this.#options.fragDuration,
|
|
@@ -124,7 +125,19 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
124
125
|
encoderOptions: this.#options.audio?.encoderOptions,
|
|
125
126
|
},
|
|
126
127
|
});
|
|
127
|
-
|
|
128
|
+
this.#fmp4Stream = fmp4Stream;
|
|
129
|
+
try {
|
|
130
|
+
await fmp4Stream.start();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
try {
|
|
134
|
+
await this.#onEnded();
|
|
135
|
+
}
|
|
136
|
+
catch (stopError) {
|
|
137
|
+
this.#logger.error('Failed to clean up FMP4 session after start error:', stopError);
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
128
141
|
}
|
|
129
142
|
async *streamBoxes(signal) {
|
|
130
143
|
if (!this.#fmp4Stream) {
|
|
@@ -183,27 +196,37 @@ export class Fmp4Session extends SubscribedPublic {
|
|
|
183
196
|
finally {
|
|
184
197
|
cleanup();
|
|
185
198
|
endSub.unsubscribe();
|
|
199
|
+
signal?.removeEventListener('abort', cleanup);
|
|
186
200
|
}
|
|
187
201
|
}
|
|
188
202
|
async stop() {
|
|
189
|
-
this.#onEnded();
|
|
203
|
+
await this.#onEnded();
|
|
190
204
|
}
|
|
191
205
|
async #onError(error) {
|
|
192
206
|
this.onError.next(error);
|
|
193
207
|
await this.#onEnded();
|
|
194
208
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
209
|
+
#onEnded() {
|
|
210
|
+
this.#shutdownPromise ??= Promise.resolve().then(() => this.#shutdown());
|
|
211
|
+
return this.#shutdownPromise;
|
|
212
|
+
}
|
|
213
|
+
async #shutdown() {
|
|
199
214
|
this.#hasEnded = true;
|
|
200
|
-
|
|
215
|
+
this.#abort.abort();
|
|
216
|
+
const fmp4Stream = this.#fmp4Stream;
|
|
201
217
|
this.#fmp4Stream = undefined;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
218
|
+
try {
|
|
219
|
+
await fmp4Stream?.stop();
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
this.#boxDataSubject.complete();
|
|
223
|
+
this.#initSegmentSubject.complete();
|
|
224
|
+
this.onStarted.complete();
|
|
225
|
+
this.onError.complete();
|
|
226
|
+
this.unsubscribe();
|
|
227
|
+
this.onEnded.next();
|
|
228
|
+
this.onEnded.complete();
|
|
229
|
+
}
|
|
207
230
|
}
|
|
208
231
|
}
|
|
209
232
|
//# sourceMappingURL=fmp4-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fmp4-session.js","sourceRoot":"","sources":["../../../../../src/camera/streaming/fmp4-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAC/C,MAAM,CAAU,iBAAiB,GAAG,EAAE,CAAC;IAE9B,SAAS,GAAG,IAAI,aAAa,CAAO,CAAC,CAAC,CAAC;IACvC,OAAO,GAAG,IAAI,OAAO,EAAS,CAAC;IAC/B,OAAO,GAAG,IAAI,aAAa,CAAO,CAAC,CAAC,CAAC;IAE9C,SAAS,GAAG,KAAK,CAAC;IAClB,aAAa,CAAe;IAC5B,OAAO,CAAgB;IACvB,OAAO,CAAqB;IAC5B,IAAI,CAAS;IACb,QAAQ,GAAuB,EAAE,CAAC;IAElC,WAAW,CAAc;IACzB,mBAAmB,GAAG,IAAI,aAAa,CAAS,CAAC,CAAC,CAAC;IACnD,eAAe,GAAG,IAAI,OAAO,EAAU,CAAC;IAExC,YAAY,YAA0B,EAAE,MAAmB,EAAE,YAAsC;QACjG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAE,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,MAA2B;QAClD,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"fmp4-session.js","sourceRoot":"","sources":["../../../../../src/camera/streaming/fmp4-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,8 @@ export class RtpSession extends SubscribedPublic {
|
|
|
65
65
|
onVideoRtp = new Subject();
|
|
66
66
|
onAudioRtp = new Subject();
|
|
67
67
|
#hasEnded = false;
|
|
68
|
+
#abort = new AbortController();
|
|
69
|
+
#shutdownPromise;
|
|
68
70
|
#cameraDevice;
|
|
69
71
|
#logger;
|
|
70
72
|
#source;
|
|
@@ -92,6 +94,12 @@ export class RtpSession extends SubscribedPublic {
|
|
|
92
94
|
return this.#backchannelTrackIndex !== undefined;
|
|
93
95
|
}
|
|
94
96
|
async startStream(config) {
|
|
97
|
+
if (this.#hasEnded || this.#shutdownPromise) {
|
|
98
|
+
throw new Error('RTP session has ended and cannot be restarted.');
|
|
99
|
+
}
|
|
100
|
+
if (this.#rtpStream) {
|
|
101
|
+
throw new Error('RTP session already started.');
|
|
102
|
+
}
|
|
95
103
|
this.#options = {
|
|
96
104
|
...config,
|
|
97
105
|
input: {
|
|
@@ -126,20 +134,19 @@ export class RtpSession extends SubscribedPublic {
|
|
|
126
134
|
supportedAudioCodec = [AV_CODEC_ID_PCM_MULAW];
|
|
127
135
|
break;
|
|
128
136
|
}
|
|
129
|
-
|
|
137
|
+
const rtpStream = RTPStream.create(this.#url, {
|
|
138
|
+
signal: this.#abort.signal,
|
|
130
139
|
onAudioPacket: (packet) => {
|
|
131
140
|
this.onAudioRtp.next(packet);
|
|
132
141
|
},
|
|
133
142
|
onVideoPacket: (packet) => {
|
|
134
143
|
this.onVideoRtp.next(packet);
|
|
135
144
|
},
|
|
136
|
-
onClose:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
await this.#onEnded();
|
|
142
|
-
}
|
|
145
|
+
onClose: (err) => {
|
|
146
|
+
const shutdown = err ? this.#onError(err) : this.#onEnded();
|
|
147
|
+
shutdown.catch((error) => {
|
|
148
|
+
this.#logger.error('Failed to shut down RTP session:', error);
|
|
149
|
+
});
|
|
143
150
|
},
|
|
144
151
|
supportedVideoCodecs: supportedVideoCodec,
|
|
145
152
|
supportedAudioCodecs: supportedAudioCodec,
|
|
@@ -151,6 +158,7 @@ export class RtpSession extends SubscribedPublic {
|
|
|
151
158
|
fps: this.#options.video?.fps,
|
|
152
159
|
width: this.#options.video?.width,
|
|
153
160
|
height: this.#options.video?.height,
|
|
161
|
+
bitrate: this.#options.video?.bitrate,
|
|
154
162
|
encoderOptions: this.#options.video?.encoderOptions,
|
|
155
163
|
},
|
|
156
164
|
audio: {
|
|
@@ -170,7 +178,19 @@ export class RtpSession extends SubscribedPublic {
|
|
|
170
178
|
options: this.#options.input?.options,
|
|
171
179
|
},
|
|
172
180
|
});
|
|
173
|
-
|
|
181
|
+
this.#rtpStream = rtpStream;
|
|
182
|
+
try {
|
|
183
|
+
await rtpStream.start();
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
try {
|
|
187
|
+
await this.#onEnded();
|
|
188
|
+
}
|
|
189
|
+
catch (stopError) {
|
|
190
|
+
this.#logger.error('Failed to clean up RTP session after start error:', stopError);
|
|
191
|
+
}
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
174
194
|
}
|
|
175
195
|
async startBackchannel(config) {
|
|
176
196
|
const input = this.#rtpStream?.getInput();
|
|
@@ -211,12 +231,13 @@ export class RtpSession extends SubscribedPublic {
|
|
|
211
231
|
}
|
|
212
232
|
this.#backchannelDecoder = await Decoder.create(audioStream, {
|
|
213
233
|
exitOnError: false,
|
|
234
|
+
signal: this.#abort.signal,
|
|
214
235
|
});
|
|
215
236
|
const filterChain = FilterPreset.chain();
|
|
216
237
|
const sampleFormatName = config.sampleFormat ? avGetSampleFmtFromName(config.sampleFormat) : AV_SAMPLE_FMT_S16;
|
|
217
238
|
filterChain.aformat(sampleFormatName, cameraSampleRate, cameraChannels === 1 ? 'mono' : 'stereo');
|
|
218
239
|
const filterString = filterChain.build();
|
|
219
|
-
this.#backchannelFilter = FilterAPI.create(filterString);
|
|
240
|
+
this.#backchannelFilter = FilterAPI.create(filterString, { signal: this.#abort.signal });
|
|
220
241
|
const cameraCodec = Codec.findEncoder(cameraCodecId);
|
|
221
242
|
if (!cameraCodec) {
|
|
222
243
|
throw new Error(`Camera codec not found: ${cameraCodecId}`);
|
|
@@ -224,6 +245,7 @@ export class RtpSession extends SubscribedPublic {
|
|
|
224
245
|
this.#backchannelEncoder = await Encoder.create(cameraCodec, {
|
|
225
246
|
decoder: this.#backchannelDecoder,
|
|
226
247
|
filter: this.#backchannelFilter,
|
|
248
|
+
signal: this.#abort.signal,
|
|
227
249
|
options: {
|
|
228
250
|
sample_rate: cameraSampleRate,
|
|
229
251
|
channels: cameraChannels,
|
|
@@ -253,6 +275,7 @@ export class RtpSession extends SubscribedPublic {
|
|
|
253
275
|
useSyncQueue: false,
|
|
254
276
|
useAsyncWrite: false,
|
|
255
277
|
maxPacketSize: 1200,
|
|
278
|
+
signal: this.#abort.signal,
|
|
256
279
|
});
|
|
257
280
|
this.#backchannelStreamIndex = this.#backchannelOutput.addStream(this.#backchannelEncoder);
|
|
258
281
|
this.#backchannelActive = true;
|
|
@@ -313,7 +336,7 @@ export class RtpSession extends SubscribedPublic {
|
|
|
313
336
|
}
|
|
314
337
|
}
|
|
315
338
|
catch (error) {
|
|
316
|
-
if (!this.#backchannelActive) {
|
|
339
|
+
if (!this.#backchannelActive || this.#abort.signal.aborted) {
|
|
317
340
|
return;
|
|
318
341
|
}
|
|
319
342
|
throw error;
|
|
@@ -381,15 +404,26 @@ export class RtpSession extends SubscribedPublic {
|
|
|
381
404
|
this.onError.next(error);
|
|
382
405
|
await this.#onEnded();
|
|
383
406
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
407
|
+
#onEnded() {
|
|
408
|
+
this.#shutdownPromise ??= Promise.resolve().then(() => this.#shutdown());
|
|
409
|
+
return this.#shutdownPromise;
|
|
410
|
+
}
|
|
411
|
+
async #shutdown() {
|
|
388
412
|
this.#hasEnded = true;
|
|
389
|
-
this.
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
413
|
+
this.#abort.abort();
|
|
414
|
+
try {
|
|
415
|
+
await this.#cleanupBackchannel();
|
|
416
|
+
await this.#cleanupStream();
|
|
417
|
+
}
|
|
418
|
+
finally {
|
|
419
|
+
this.onStarted.complete();
|
|
420
|
+
this.onError.complete();
|
|
421
|
+
this.onVideoRtp.complete();
|
|
422
|
+
this.onAudioRtp.complete();
|
|
423
|
+
this.unsubscribe();
|
|
424
|
+
this.onEnded.next();
|
|
425
|
+
this.onEnded.complete();
|
|
426
|
+
}
|
|
393
427
|
}
|
|
394
428
|
}
|
|
395
429
|
//# sourceMappingURL=rtp-session.js.map
|