@camera.ui/server 2.0.22 → 2.0.24

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 (713) hide show
  1. package/dist/interface/assets/404-CRIhzt2J.js +1 -0
  2. package/dist/interface/assets/About-CvY4xvAU.js +1 -0
  3. package/dist/interface/assets/Adminpanel-4ilp8plp.js +1 -0
  4. package/dist/interface/assets/Automation-uaWWTeTZ.js +3 -0
  5. package/dist/interface/assets/AutomationImport-RNgRv6Uc.js +2 -0
  6. package/dist/interface/assets/AutomationStore-D8plMzVI.js +2 -0
  7. package/dist/interface/assets/AutomationStoreDetail-BO-9XCRn.js +2 -0
  8. package/dist/interface/assets/Automations-PHMVe6wG.js +2 -0
  9. package/dist/interface/assets/Camera-Akukeq4_.js +2 -0
  10. package/dist/interface/assets/CameraConsole-BnKiGukm.js +7 -0
  11. package/dist/interface/assets/Cameras-BuHNAHpD.js +652 -0
  12. package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
  13. package/dist/interface/assets/Camview-dF8o0iy2.js +1 -0
  14. package/dist/interface/assets/Config-iq-YI9Vg.js +2 -0
  15. package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-C2qva2mT.js} +1 -1
  16. package/dist/interface/assets/ConfigActionDelay-C02w0yBx.js +1 -0
  17. package/dist/interface/assets/ConfigActionHttp-DVf26mYG.js +1 -0
  18. package/dist/interface/assets/ConfigActionImageInput-BTlFV7kK.js +1 -0
  19. package/dist/interface/assets/ConfigActionMqtt-CD9RW5Lq.js +1 -0
  20. package/dist/interface/assets/ConfigActionNotification-CjbIPrEb.js +1 -0
  21. package/dist/interface/assets/ConfigActionNotificationControl-BCdKNvgC.js +1 -0
  22. package/dist/interface/assets/ConfigActionOutput-wV9RFDQO.js +1 -0
  23. package/dist/interface/assets/ConfigActionPlugin-DijuNALK.js +1 -0
  24. package/dist/interface/assets/ConfigActionSensor-C9q3sRuI.js +1 -0
  25. package/dist/interface/assets/ConfigActionSnapshot-B79IJLFV.js +1 -0
  26. package/dist/interface/assets/ConfigActionVariable-Do94c7oi.js +1 -0
  27. package/dist/interface/assets/ConfigConditionIfElse-BtbZhnCM.js +1 -0
  28. package/dist/interface/assets/ConfigConditionSensorState-D1V_FhNU.js +1 -0
  29. package/dist/interface/assets/ConfigConditionSwitch-C74dDt3R.js +1 -0
  30. package/dist/interface/assets/ConfigConditionTime-5IrJQgAV.js +1 -0
  31. package/dist/interface/assets/ConfigSensorValueInput-BcbzMf0g.js +1 -0
  32. package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-ld9Upgoc.js} +1 -1
  33. package/dist/interface/assets/ConfigTriggerGeofence-DbfBc1AM.js +1 -0
  34. package/dist/interface/assets/ConfigTriggerManual-t-J-HbqF.js +1 -0
  35. package/dist/interface/assets/ConfigTriggerMqtt-i57J8-Nq.js +1 -0
  36. package/dist/interface/assets/ConfigTriggerSchedule-Dv7wIG3G.js +1 -0
  37. package/dist/interface/assets/ConfigTriggerSensor-Ba2lCSGc.js +1 -0
  38. package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-BWs3rP_W.js} +1 -1
  39. package/dist/interface/assets/ConfigTriggerWebhook-CpQakeYG.js +1 -0
  40. package/dist/interface/assets/Console-BTb5Yc32.js +1 -0
  41. package/dist/interface/assets/CuiAutomationRunsDialog-DX0xpNxx.js +1 -0
  42. package/dist/interface/assets/CuiBottomSheet-Bu0PtwX-.js +1 -0
  43. package/dist/interface/assets/CuiBottomSheet-DIg-nl0p.js +1 -0
  44. package/dist/interface/assets/CuiCameraPipCard-q3yeptLd.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-BWN8gBl4.js +1 -0
  46. package/dist/interface/assets/CuiCameraShares-BggG5Ic_.js +1 -0
  47. package/dist/interface/assets/CuiCameraTable-BCrE4TMJ.js +2 -0
  48. package/dist/interface/assets/CuiDataTable-Dk8LJl5S.js +1 -0
  49. package/dist/interface/assets/CuiLightControl-CaIl2eCO.js +1 -0
  50. package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
  51. package/dist/interface/assets/CuiList-Cjbxtb1E.js +1 -0
  52. package/dist/interface/assets/CuiMarkdownContent-Bjs3wRnq.js +1 -0
  53. package/dist/interface/assets/CuiMarkdownContent-Do8-vIl7.js +1 -0
  54. package/dist/interface/assets/CuiPluginCard-cvZkF8Cz.js +2 -0
  55. package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-DsEuwQrw.js} +1 -1
  56. package/dist/interface/assets/CuiPluginOAuthButton-Bbwly_xJ.js +2 -0
  57. package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-BC6F9f-3.js} +1 -1
  58. package/dist/interface/assets/CuiQRCode-DKHFwuhr.js +1 -0
  59. package/dist/interface/assets/CuiRecordingsGrid-DSf7RXci.js +1 -0
  60. package/dist/interface/assets/CuiSchema-Dda4lNPz.js +1 -0
  61. package/dist/interface/assets/CuiTopNavbarItem-BZawroJz.js +1 -0
  62. package/dist/interface/assets/Faces-CvQCD53E.js +1 -0
  63. package/dist/interface/assets/FirstSteps-Dg0Bvjs2.js +1 -0
  64. package/dist/interface/assets/Instances-DisNu3zt.js +1 -0
  65. package/dist/interface/assets/Logs-DSSDjAY-.js +6 -0
  66. package/dist/interface/assets/Menu-CJ-MMxvd.js +1 -0
  67. package/dist/interface/assets/OAuthDeviceFlow-CKTokRaq.js +1 -0
  68. package/dist/interface/assets/Plugin-7daLGUVo.js +1 -0
  69. package/dist/interface/assets/PluginConsole-CcRMneFa.js +7 -0
  70. package/dist/interface/assets/PluginDetail-B1-NdurE.js +2 -0
  71. package/dist/interface/assets/PluginSchema-CP0JWUSD.js +1 -0
  72. package/dist/interface/assets/PluginSearch-BHN0J_JP.js +2 -0
  73. package/dist/interface/assets/PluginSearch-Cx_lzDqC.js +1 -0
  74. package/dist/interface/assets/Plugins-DnMPdcQF.js +1 -0
  75. package/dist/interface/assets/Recordings-Dxs3srmh.js +1 -0
  76. package/dist/interface/assets/SensorEdit-Dq2nV1Wf.js +1 -0
  77. package/dist/interface/assets/SensorHistory-BeCbNWJh.js +1 -0
  78. package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
  79. package/dist/interface/assets/Sensors-D9DLdMaD.js +2 -0
  80. package/dist/interface/assets/Settings-DCHoD7r8.js +1 -0
  81. package/dist/interface/assets/SettingsAccount-BrhnlNuF.js +1 -0
  82. package/dist/interface/assets/SettingsAccount-djLxmQ9r.js +1 -0
  83. package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
  84. package/dist/interface/assets/SettingsAppearance-Bq-xM16S.js +1 -0
  85. package/dist/interface/assets/SettingsAppearance-JKbe5xiH.js +1 -0
  86. package/dist/interface/assets/SettingsBackup-CjlVk3hF.js +1 -0
  87. package/dist/interface/assets/SettingsList-C4mMOKJh.js +1 -0
  88. package/dist/interface/assets/SettingsMqtt-DoYFVHoD.js +1 -0
  89. package/dist/interface/assets/SettingsNotifications-Cmr9Bvy0.js +2 -0
  90. package/dist/interface/assets/SettingsPermissions-D33G-1kM.js +1 -0
  91. package/dist/interface/assets/SettingsRecordings-DYiuW0rA.js +1 -0
  92. package/dist/interface/assets/SettingsRemote-CROA1Oa7.js +1 -0
  93. package/dist/interface/assets/SettingsSystem-rgucO68X.js +2 -0
  94. package/dist/interface/assets/SettingsUsers-2uMPOpyC.js +1 -0
  95. package/dist/interface/assets/Terminal-BMFWoJ_k.js +4 -0
  96. package/dist/interface/assets/VariableInput-Cx9tgiM4.js +1 -0
  97. package/dist/interface/assets/VariableSuggestions-DV_QjTtU.js +1 -0
  98. package/dist/interface/assets/VersionsHandler-v4hH23M_.js +7 -0
  99. package/dist/interface/assets/VirtualSensorCreate-DhuGE1Mf.js +1 -0
  100. package/dist/interface/assets/Workers-DyJXudfY.js +2 -0
  101. package/dist/interface/assets/{account-sFoKqEOV.js → account-C5mHt2Ep.js} +1 -1
  102. package/dist/interface/assets/ace-BqKKexH4.js +1 -0
  103. package/dist/interface/assets/{ace.config-C_wgqTLD.js → ace.config-BNjBs7Fe.js} +1 -1
  104. package/dist/interface/assets/alarm-light-outline-jCTfmz5t.js +1 -0
  105. package/dist/interface/assets/{alert-circle-BQZQ417w.js → alert-circle-Cu_kjPlA.js} +1 -1
  106. package/dist/interface/assets/alert-outline-DXHNnhoP.js +1 -0
  107. package/dist/interface/assets/api-3va2gyB0.css +2 -0
  108. package/dist/interface/assets/{api-DEaXK1Kq.js → api-BKU9IS3U.js} +1 -1
  109. package/dist/interface/assets/api-Cc-rMHwl.js +2 -0
  110. package/dist/interface/assets/arrow-left-DPtWmM6S.js +1 -0
  111. package/dist/interface/assets/arrow-right-outline-BY1ggGA1.js +1 -0
  112. package/dist/interface/assets/{auth-XA5zkqwW.js → auth-B4latCDR.js} +1 -1
  113. package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
  114. package/dist/interface/assets/automations-BFkAMu3Y.js +1 -0
  115. package/dist/interface/assets/{back-filled-BdHG6uUx.js → back-filled-r7bN5ObT.js} +1 -1
  116. package/dist/interface/assets/{bell-ring-Dua4zXf_.js → bell-ring-C470qCAb.js} +1 -1
  117. package/dist/interface/assets/{cameras.schema-1a2URPGd.js → cameras.schema-BtaT3B32.js} +1 -1
  118. package/dist/interface/assets/{cctv-DEiPL3U8.js → cctv-BKVOVZCR.js} +1 -1
  119. package/dist/interface/assets/check-circle-Ce_sbfPZ.js +1 -0
  120. package/dist/interface/assets/chevron-down-CjSTp091.js +1 -0
  121. package/dist/interface/assets/chevron-right-B4vB0gm4.js +1 -0
  122. package/dist/interface/assets/{clock-outline-C_f3Ed8x.js → clock-outline-BgcDXoyp.js} +1 -1
  123. package/dist/interface/assets/{close-DNgGJYHi.js → close-CQoGQHOF.js} +1 -1
  124. package/dist/interface/assets/{close-circle-L5juejMg.js → close-circle-DYhkXsRj.js} +1 -1
  125. package/dist/interface/assets/{cloud-check-DD7oRzmo.js → cloud-check-CVx221dJ.js} +1 -1
  126. package/dist/interface/assets/cloudHandoff-CPrXpD0L.js +1 -0
  127. package/dist/interface/assets/{config-C2hgXHyj.js → config-B_lj3Myj.js} +1 -1
  128. package/dist/interface/assets/copy-yhHCVVOa.js +1 -0
  129. package/dist/interface/assets/cube-scan-Ccxismvr.js +1 -0
  130. package/dist/interface/assets/delete-xWUQUP2x.js +1 -0
  131. package/dist/interface/assets/dist-DVb-CALh.js +1 -0
  132. package/dist/interface/assets/download-PLxvyB7s.js +1 -0
  133. package/dist/interface/assets/esm-B4MXP42m.js +1 -0
  134. package/dist/interface/assets/esm-BW9m3dy4.js +1 -0
  135. package/dist/interface/assets/esm-BZ3gh7Fj.js +1 -0
  136. package/dist/interface/assets/esm-Blvz9SsB.js +1 -0
  137. package/dist/interface/assets/esm-CJXU9jaA.js +1 -0
  138. package/dist/interface/assets/esm-Cqqu_mer.js +1 -0
  139. package/dist/interface/assets/esm-CtKbLoV_.js +1 -0
  140. package/dist/interface/assets/esm-CwzNi2iW.js +1 -0
  141. package/dist/interface/assets/esm-KnO8wJyB.js +1 -0
  142. package/dist/interface/assets/esm-Lt6R0RFn.js +1 -0
  143. package/dist/interface/assets/esm-MvRctfDP.js +1 -0
  144. package/dist/interface/assets/esm-W4LX4Rpq.js +1 -0
  145. package/dist/interface/assets/esm-l57LNUWu.js +1 -0
  146. package/dist/interface/assets/esm-xofhyA8r.js +1 -0
  147. package/dist/interface/assets/eye-off-C8kzsdYU.js +1 -0
  148. package/dist/interface/assets/flowSchema-CyZseAPD.js +1 -0
  149. package/dist/interface/assets/{history-iAZcYg3f.js → history-QBEPNc4X.js} +1 -1
  150. package/dist/interface/assets/home-af3W_y8U.js +1 -0
  151. package/dist/interface/assets/{information-outline-CVsB1bl-.js → information-outline-BPCsozSU.js} +1 -1
  152. package/dist/interface/assets/{lightbulb-outline-nNLyXAIp.js → lightbulb-outline-ccTlGyvW.js} +1 -1
  153. package/dist/interface/assets/main-C4qjk6s5.js +3 -0
  154. package/dist/interface/assets/main-aZt-Pooz.css +1 -0
  155. package/dist/interface/assets/{microphone-CU0mFDMh.js → microphone-5exHwwyq.js} +1 -1
  156. package/dist/interface/assets/mqtt-CFw_CCq8.js +1 -0
  157. package/dist/interface/assets/native-Cpj7zrLp.js +1 -0
  158. package/dist/interface/assets/native-D--k2WN1.js +1 -0
  159. package/dist/interface/assets/nodeDefinitions-CRrkU6zR.js +1 -0
  160. package/dist/interface/assets/{notifications-BHQN6WD4.js → notifications-0_glcRlR.js} +1 -1
  161. package/dist/interface/assets/{pencil-outline-BQxLTlZx.js → pencil-outline-M9I4mCJO.js} +1 -1
  162. package/dist/interface/assets/plugin-D3FpjfF8.js +1 -0
  163. package/dist/interface/assets/{plugins-C0RtyBHQ.js → plugins-ICpmsguj.js} +1 -1
  164. package/dist/interface/assets/plus-CGIx-WV8.js +1 -0
  165. package/dist/interface/assets/{plus-Ct6WQfM1.js → plus-CrfQUUEC.js} +1 -1
  166. package/dist/interface/assets/power-VnZM2-0c.js +1 -0
  167. package/dist/interface/assets/{ring-resize-CZBThoQC.js → ring-resize-CodGa6wQ.js} +1 -1
  168. package/dist/interface/assets/rolldown-runtime-C0FnF6B9.js +1 -0
  169. package/dist/interface/assets/{round-alt-arrow-left-bold-BlpNMBxm.js → round-alt-arrow-left-bold-DTrlW4yx.js} +1 -1
  170. package/dist/interface/assets/round-restart-alt-CxUkNgtt.js +1 -0
  171. package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
  172. package/dist/interface/assets/sensors-Bh5GuQ78.js +1 -0
  173. package/dist/interface/assets/{server-CVSOthzT.js → server-DbpDC3pc.js} +1 -1
  174. package/dist/interface/assets/{settings-CgToKrFd.js → settings-DY0TJSAM.js} +1 -1
  175. package/dist/interface/assets/{source-branch-CoHKTGxb.js → source-branch-nw9fwXin.js} +1 -1
  176. package/dist/interface/assets/{theme-BZi7VV10.js → theme-DlMdsvGC.js} +1 -1
  177. package/dist/interface/assets/{trash-2-BKWfq15D.js → trash-2-B-di2M48.js} +1 -1
  178. package/dist/interface/assets/trash-can-outline-BbZkHoW7.js +1 -0
  179. package/dist/interface/assets/{trash-fill-yNQsFs0Y.js → trash-fill-Bgen5QTD.js} +1 -1
  180. package/dist/interface/assets/{trash2-DjTG9rG-.js → trash2-BP__fHgN.js} +1 -1
  181. package/dist/interface/assets/types-C1VwkReu.js +1 -0
  182. package/dist/interface/assets/{types-Bw8H-UB4.js → types-CggzoTPX.js} +1 -1
  183. package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
  184. package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-CCxZnwIP.js} +1 -1
  185. package/dist/interface/assets/useBackupRestore-DQQc_D6D.js +1 -0
  186. package/dist/interface/assets/useCameraOptions-DVlhUpbE.js +1 -0
  187. package/dist/interface/assets/{useCardSelection-CgZ7QTaA.js → useCardSelection-B3B2qPHO.js} +1 -1
  188. package/dist/interface/assets/{useElectron-CgLWOhcS.js → useElectron-KnqvZz0q.js} +1 -1
  189. package/dist/interface/assets/useLogsSocket-CUQwZ6wm.js +5 -0
  190. package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-C3D3JcPH.js} +1 -1
  191. package/dist/interface/assets/useServerRestart-CqZRPCpR.js +1 -0
  192. package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-CVJFHRLZ.js} +1 -1
  193. package/dist/interface/assets/useUserOptions-drl3-JUC.js +1 -0
  194. package/dist/interface/assets/{variable-Y3IAPnsB.js → variable-CbNySf4s.js} +1 -1
  195. package/dist/interface/assets/vendor-CSg6_Jfu.js +22 -0
  196. package/dist/interface/assets/vendor-ace-DIEVbs6L.js +1085 -0
  197. package/dist/interface/assets/vendor-cameraui-Cgb5z6NJ.js +2040 -0
  198. package/dist/interface/assets/vendor-capacitor-C-8IYzpJ.js +2 -0
  199. package/dist/interface/assets/vendor-chart-CoQ9HTE3.js +3 -0
  200. package/dist/interface/assets/vendor-core-BJsSXMFQ.js +1 -0
  201. package/dist/interface/assets/{vendor-dnd-hwiZJHjo.js → vendor-dnd-DQF7Aoap.js} +2 -2
  202. package/dist/interface/assets/vendor-draggabilly-Cghb3aIb.js +1 -0
  203. package/dist/interface/assets/vendor-gridstack-qw2ro2uB.js +3 -0
  204. package/dist/interface/assets/{vendor-leaflet-BMMJO5Nd.js → vendor-leaflet-Bcgd-fkG.js} +1 -1
  205. package/dist/interface/assets/vendor-markdown-DWwrEE67.js +14 -0
  206. package/dist/interface/assets/{vendor-primevue-C6wcTjtT.js → vendor-primevue-CyD8V_Ft.js} +85 -85
  207. package/dist/interface/assets/vendor-vueflow-crUU2mAI.js +26 -0
  208. package/dist/interface/assets/vendor-xterm-BafMBqaV.js +91 -0
  209. package/dist/interface/assets/vendor-zod-Dbq0fBXY.js +127 -0
  210. package/dist/interface/assets/web-BX3axHeB.js +1 -0
  211. package/dist/interface/assets/web-BcHmbPny.js +1 -0
  212. package/dist/interface/assets/web-BjKL51lK-BQjyRtns.js +1 -0
  213. package/dist/interface/assets/web-C8w-z-xR.js +1 -0
  214. package/dist/interface/assets/web-CHdniv8I.js +1 -0
  215. package/dist/interface/assets/web-CWBhY0Av.js +1 -0
  216. package/dist/interface/assets/web-Cf1yYy4u.js +1 -0
  217. package/dist/interface/assets/web-Ct6Vkr6F.js +1 -0
  218. package/dist/interface/assets/web-DARDw7d8.js +1 -0
  219. package/dist/interface/assets/web-DKBMdBSA.js +1 -0
  220. package/dist/interface/assets/web-Ddzvp-fv.js +1 -0
  221. package/dist/interface/assets/web-Dymr_MpD.js +1 -0
  222. package/dist/interface/assets/web-XIuTPdFc.js +1 -0
  223. package/dist/interface/assets/web-lrnXIJTz.js +1 -0
  224. package/dist/interface/assets/{webhook-yCryYojY.js → webhook-B7YgiSrF.js} +1 -1
  225. package/dist/interface/assets/workbox-window.prod.es5-BkFwsIPp.js +1 -0
  226. package/dist/interface/assets/{zoom-in-Da5uRiQq.js → zoom-in-D7BJNotF.js} +1 -1
  227. package/dist/interface/index.html +44 -40
  228. package/dist/interface/sw.js +1 -1
  229. package/dist/server/package.json +11 -11
  230. package/dist/server/requirements.txt +4 -6
  231. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +3 -0
  232. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +4 -0
  233. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +9 -14
  234. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +0 -4
  235. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +5 -12
  236. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +6 -23
  237. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +60 -100
  238. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +3 -2
  239. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +2 -0
  240. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +2 -20
  241. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_config_internal.py +1 -1
  242. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_enums.py +3 -3
  243. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/event_emitter.py +13 -26
  244. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/manager_rpc.py +2 -5
  245. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +21 -6
  246. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/shared_utils.py +7 -18
  247. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +91 -29
  248. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/observable/__init__.py +145 -37
  249. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +10 -1
  250. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/api.py +21 -68
  251. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +31 -58
  252. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/helper.py +3 -12
  253. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +137 -99
  254. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +34 -52
  255. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/oauth.py +4 -4
  256. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +3 -4
  257. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/audio.py +45 -39
  258. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +329 -256
  259. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/battery.py +17 -16
  260. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +31 -27
  261. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/clip.py +14 -12
  262. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/contact.py +11 -10
  263. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +34 -22
  264. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/doorbell.py +19 -19
  265. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +34 -28
  266. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/garage.py +29 -20
  267. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/humidity.py +22 -12
  268. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/leak.py +12 -11
  269. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +35 -31
  270. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/light.py +22 -18
  271. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/lock.py +26 -19
  272. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/motion.py +28 -27
  273. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +37 -33
  274. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/occupancy.py +11 -10
  275. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +20 -24
  276. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/security_system.py +22 -22
  277. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/siren.py +17 -16
  278. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/smoke.py +11 -10
  279. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/spec.py +26 -22
  280. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/switch.py +13 -12
  281. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/temperature.py +22 -12
  282. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/storage/__init__.py +56 -38
  283. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/types.py +15 -18
  284. package/dist/server/src/api/controllers/auth.controller.js +2 -1
  285. package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
  286. package/dist/server/src/api/controllers/cameras.controller.d.ts +6 -0
  287. package/dist/server/src/api/controllers/cameras.controller.js +21 -11
  288. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  289. package/dist/server/src/api/controllers/cast.controller.d.ts +11 -0
  290. package/dist/server/src/api/controllers/cast.controller.js +29 -0
  291. package/dist/server/src/api/controllers/cast.controller.js.map +1 -0
  292. package/dist/server/src/api/controllers/notifications.controller.d.ts +12 -0
  293. package/dist/server/src/api/controllers/notifications.controller.js +41 -0
  294. package/dist/server/src/api/controllers/notifications.controller.js.map +1 -1
  295. package/dist/server/src/api/controllers/nvr.controller.d.ts +14 -0
  296. package/dist/server/src/api/controllers/nvr.controller.js +61 -0
  297. package/dist/server/src/api/controllers/nvr.controller.js.map +1 -0
  298. package/dist/server/src/api/controllers/sensors.controller.d.ts +13 -0
  299. package/dist/server/src/api/controllers/sensors.controller.js +94 -0
  300. package/dist/server/src/api/controllers/sensors.controller.js.map +1 -0
  301. package/dist/server/src/api/controllers/server.controller.d.ts +1 -0
  302. package/dist/server/src/api/controllers/server.controller.js +11 -0
  303. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  304. package/dist/server/src/api/controllers/tunnel.controller.d.ts +0 -3
  305. package/dist/server/src/api/controllers/tunnel.controller.js +1 -21
  306. package/dist/server/src/api/controllers/tunnel.controller.js.map +1 -1
  307. package/dist/server/src/api/database/constants.d.ts +2 -0
  308. package/dist/server/src/api/database/constants.js +2 -0
  309. package/dist/server/src/api/database/constants.js.map +1 -1
  310. package/dist/server/src/api/database/index.d.ts +5 -2
  311. package/dist/server/src/api/database/index.js +7 -4
  312. package/dist/server/src/api/database/index.js.map +1 -1
  313. package/dist/server/src/api/database/migrations/v2-1-0.d.ts +3 -0
  314. package/dist/server/src/api/database/migrations/v2-1-0.js +72 -0
  315. package/dist/server/src/api/database/migrations/v2-1-0.js.map +1 -0
  316. package/dist/server/src/api/database/record-schemas.d.ts +2 -3
  317. package/dist/server/src/api/database/record-schemas.js +3 -3
  318. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  319. package/dist/server/src/api/database/types.d.ts +27 -3
  320. package/dist/server/src/api/index.js +3 -0
  321. package/dist/server/src/api/index.js.map +1 -1
  322. package/dist/server/src/api/plugins/natsSubFirewall.d.ts +1 -1
  323. package/dist/server/src/api/plugins/natsSubFirewall.js +5 -2
  324. package/dist/server/src/api/plugins/natsSubFirewall.js.map +1 -1
  325. package/dist/server/src/api/plugins/proxy.plugin.js +5 -3
  326. package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -1
  327. package/dist/server/src/api/routes/cameras.routes.js +14 -7
  328. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  329. package/dist/server/src/api/routes/cast.routes.d.ts +2 -0
  330. package/dist/server/src/api/routes/cast.routes.js +29 -0
  331. package/dist/server/src/api/routes/cast.routes.js.map +1 -0
  332. package/dist/server/src/api/routes/index.js +6 -2
  333. package/dist/server/src/api/routes/index.js.map +1 -1
  334. package/dist/server/src/api/routes/notifications.routes.js +32 -0
  335. package/dist/server/src/api/routes/notifications.routes.js.map +1 -1
  336. package/dist/server/src/api/routes/nvr.routes.d.ts +2 -0
  337. package/dist/server/src/api/routes/nvr.routes.js +19 -0
  338. package/dist/server/src/api/routes/nvr.routes.js.map +1 -0
  339. package/dist/server/src/api/routes/sensors.routes.d.ts +2 -0
  340. package/dist/server/src/api/routes/sensors.routes.js +89 -0
  341. package/dist/server/src/api/routes/sensors.routes.js.map +1 -0
  342. package/dist/server/src/api/routes/server.routes.js +10 -0
  343. package/dist/server/src/api/routes/server.routes.js.map +1 -1
  344. package/dist/server/src/api/schemas/cameras.schema.d.ts +103 -45
  345. package/dist/server/src/api/schemas/cameras.schema.js +7 -10
  346. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  347. package/dist/server/src/api/schemas/cast.schema.d.ts +7 -0
  348. package/dist/server/src/api/schemas/cast.schema.js +7 -0
  349. package/dist/server/src/api/schemas/cast.schema.js.map +1 -0
  350. package/dist/server/src/api/schemas/nvr.schema.d.ts +10 -0
  351. package/dist/server/src/api/schemas/nvr.schema.js +13 -0
  352. package/dist/server/src/api/schemas/nvr.schema.js.map +1 -0
  353. package/dist/server/src/api/schemas/{virtualsensors.schema.d.ts → sensors.schema.d.ts} +15 -8
  354. package/dist/server/src/api/schemas/sensors.schema.js +25 -0
  355. package/dist/server/src/api/schemas/sensors.schema.js.map +1 -0
  356. package/dist/server/src/api/schemas/users.schema.d.ts +7 -18
  357. package/dist/server/src/api/schemas/users.schema.js +3 -7
  358. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  359. package/dist/server/src/api/services/cameras.service.js +1 -1
  360. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  361. package/dist/server/src/api/services/cast.service.d.ts +7 -0
  362. package/dist/server/src/api/services/cast.service.js +14 -0
  363. package/dist/server/src/api/services/cast.service.js.map +1 -0
  364. package/dist/server/src/api/services/instances.service.js +1 -1
  365. package/dist/server/src/api/services/notifications.service.d.ts +3 -0
  366. package/dist/server/src/api/services/notifications.service.js +9 -0
  367. package/dist/server/src/api/services/notifications.service.js.map +1 -1
  368. package/dist/server/src/api/services/plugins.service.js +18 -3
  369. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  370. package/dist/server/src/api/services/sensors.service.d.ts +41 -0
  371. package/dist/server/src/api/services/sensors.service.js +106 -0
  372. package/dist/server/src/api/services/sensors.service.js.map +1 -0
  373. package/dist/server/src/api/services/server.service.d.ts +4 -0
  374. package/dist/server/src/api/services/server.service.js +14 -0
  375. package/dist/server/src/api/services/server.service.js.map +1 -1
  376. package/dist/server/src/api/services/users.service.js +6 -9
  377. package/dist/server/src/api/services/users.service.js.map +1 -1
  378. package/dist/server/src/api/types/index.d.ts +19 -6
  379. package/dist/server/src/api/websocket/nsp/events.js +38 -15
  380. package/dist/server/src/api/websocket/nsp/events.js.map +1 -1
  381. package/dist/server/src/api.d.ts +0 -2
  382. package/dist/server/src/api.js +0 -12
  383. package/dist/server/src/api.js.map +1 -1
  384. package/dist/server/src/automations/actions/sensor.js +4 -7
  385. package/dist/server/src/automations/actions/sensor.js.map +1 -1
  386. package/dist/server/src/automations/conditions/sensorState.js +4 -4
  387. package/dist/server/src/automations/conditions/sensorState.js.map +1 -1
  388. package/dist/server/src/automations/context.d.ts +2 -1
  389. package/dist/server/src/automations/context.js +2 -1
  390. package/dist/server/src/automations/context.js.map +1 -1
  391. package/dist/server/src/automations/pluginMethodRegistry.d.ts +2 -0
  392. package/dist/server/src/automations/pluginMethodRegistry.js +14 -0
  393. package/dist/server/src/automations/pluginMethodRegistry.js.map +1 -1
  394. package/dist/server/src/automations/triggers/sensor.js +12 -23
  395. package/dist/server/src/automations/triggers/sensor.js.map +1 -1
  396. package/dist/server/src/camera/controller.d.ts +0 -1
  397. package/dist/server/src/camera/controller.js +9 -46
  398. package/dist/server/src/camera/controller.js.map +1 -1
  399. package/dist/server/src/camera/decoder/detection-coordinator.js +13 -11
  400. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  401. package/dist/server/src/camera/decoder/plugin-registry.d.ts +1 -0
  402. package/dist/server/src/camera/decoder/plugin-registry.js +13 -1
  403. package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -1
  404. package/dist/server/src/camera/decoder/ptz/autotracker.js +2 -2
  405. package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -1
  406. package/dist/server/src/camera/decoder/secondary-stage.js +6 -6
  407. package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
  408. package/dist/server/src/camera/decoder/types.d.ts +7 -1
  409. package/dist/server/src/camera/decoder/types.js +4 -0
  410. package/dist/server/src/camera/decoder/types.js.map +1 -1
  411. package/dist/server/src/camera/decoder/worker.d.ts +2 -0
  412. package/dist/server/src/camera/decoder/worker.js +14 -3
  413. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  414. package/dist/server/src/camera/index.d.ts +2 -14
  415. package/dist/server/src/camera/index.js +1 -32
  416. package/dist/server/src/camera/index.js.map +1 -1
  417. package/dist/server/src/camera/sensors/controller.d.ts +17 -77
  418. package/dist/server/src/camera/sensors/controller.js +60 -445
  419. package/dist/server/src/camera/sensors/controller.js.map +1 -1
  420. package/dist/server/src/internal-bus.d.ts +7 -13
  421. package/dist/server/src/internal-bus.js.map +1 -1
  422. package/dist/server/src/main.d.ts +1 -0
  423. package/dist/server/src/main.js +7 -0
  424. package/dist/server/src/main.js.map +1 -1
  425. package/dist/server/src/manager/castManager.d.ts +24 -0
  426. package/dist/server/src/manager/castManager.js +79 -0
  427. package/dist/server/src/manager/castManager.js.map +1 -0
  428. package/dist/server/src/manager/downloadManager.d.ts +1 -0
  429. package/dist/server/src/manager/downloadManager.js +6 -0
  430. package/dist/server/src/manager/downloadManager.js.map +1 -1
  431. package/dist/server/src/manager/notificationManager.d.ts +6 -0
  432. package/dist/server/src/manager/notificationManager.js +70 -3
  433. package/dist/server/src/manager/notificationManager.js.map +1 -1
  434. package/dist/server/src/mqtt/bridge.d.ts +7 -0
  435. package/dist/server/src/mqtt/bridge.js +92 -32
  436. package/dist/server/src/mqtt/bridge.js.map +1 -1
  437. package/dist/server/src/mqtt/ha-discovery.d.ts +1 -1
  438. package/dist/server/src/mqtt/ha-discovery.js +53 -8
  439. package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
  440. package/dist/server/src/mqtt/manager.js +1 -1
  441. package/dist/server/src/mqtt/manager.js.map +1 -1
  442. package/dist/server/src/mqtt/topics.d.ts +3 -3
  443. package/dist/server/src/mqtt/topics.js +11 -10
  444. package/dist/server/src/mqtt/topics.js.map +1 -1
  445. package/dist/server/src/plugins/config-store.js +1 -1
  446. package/dist/server/src/plugins/config-store.js.map +1 -1
  447. package/dist/server/src/plugins/runtime/base.d.ts +1 -0
  448. package/dist/server/src/plugins/runtime/base.js +29 -6
  449. package/dist/server/src/plugins/runtime/base.js.map +1 -1
  450. package/dist/server/src/plugins/runtime/node/child.js +5 -2
  451. package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
  452. package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -0
  453. package/dist/server/src/plugins/runtime/node/pluginApi.js +4 -1
  454. package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
  455. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +5 -13
  456. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +97 -179
  457. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  458. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +2 -1
  459. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +26 -7
  460. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -1
  461. package/dist/server/src/plugins/runtime/node/proxy/reconnect.d.ts +2 -0
  462. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js +27 -0
  463. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js.map +1 -0
  464. package/dist/server/src/plugins/runtime/node/proxy/sensor.d.ts +17 -3
  465. package/dist/server/src/plugins/runtime/node/proxy/sensor.js +61 -20
  466. package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
  467. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +18 -0
  468. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +269 -0
  469. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -0
  470. package/dist/server/src/plugins/runtime/node/storage.d.ts +1 -1
  471. package/dist/server/src/plugins/runtime/node/storage.js +10 -7
  472. package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
  473. package/dist/server/src/plugins/runtime/node/storageController.d.ts +5 -7
  474. package/dist/server/src/plugins/runtime/node/storageController.js +18 -43
  475. package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
  476. package/dist/server/src/plugins/runtime/python/child.py +13 -7
  477. package/dist/server/src/plugins/runtime/python/namespaces.py +13 -19
  478. package/dist/server/src/plugins/runtime/python/plugin_api.py +10 -1
  479. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +130 -280
  480. package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +26 -5
  481. package/dist/server/src/plugins/runtime/python/proxy/sensor.py +88 -21
  482. package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +386 -0
  483. package/dist/server/src/plugins/runtime/python/storage.py +12 -9
  484. package/dist/server/src/plugins/runtime/python/storage_controller.py +18 -80
  485. package/dist/server/src/plugins/runtime/python/store.py +19 -95
  486. package/dist/server/src/plugins/runtime/python/typings.py +32 -9
  487. package/dist/server/src/plugins/store/layout.d.ts +1 -2
  488. package/dist/server/src/plugins/store/layout.js +9 -56
  489. package/dist/server/src/plugins/store/layout.js.map +1 -1
  490. package/dist/server/src/plugins/store/location.d.ts +2 -3
  491. package/dist/server/src/plugins/store/location.js +5 -13
  492. package/dist/server/src/plugins/store/location.js.map +1 -1
  493. package/dist/server/src/plugins/store/pluginStoreFile.d.ts +1 -2
  494. package/dist/server/src/plugins/store/pluginStoreFile.js +8 -15
  495. package/dist/server/src/plugins/store/pluginStoreFile.js.map +1 -1
  496. package/dist/server/src/plugins/worker.d.ts +2 -0
  497. package/dist/server/src/plugins/worker.js +26 -7
  498. package/dist/server/src/plugins/worker.js.map +1 -1
  499. package/dist/server/src/rpc/index.d.ts +2 -0
  500. package/dist/server/src/rpc/index.js +5 -0
  501. package/dist/server/src/rpc/index.js.map +1 -1
  502. package/dist/server/src/rpc/interfaces/sensor.d.ts +33 -16
  503. package/dist/server/src/rpc/namespaces.d.ts +17 -8
  504. package/dist/server/src/rpc/namespaces.js +20 -12
  505. package/dist/server/src/rpc/namespaces.js.map +1 -1
  506. package/dist/server/src/rpc/server.js +1 -0
  507. package/dist/server/src/rpc/server.js.map +1 -1
  508. package/dist/server/src/sensors/registry.d.ts +96 -0
  509. package/dist/server/src/sensors/registry.js +814 -0
  510. package/dist/server/src/sensors/registry.js.map +1 -0
  511. package/dist/server/src/{camera/sensors → sensors}/semantics.d.ts +1 -1
  512. package/dist/server/src/{camera/sensors → sensors}/semantics.js +4 -1
  513. package/dist/server/src/sensors/semantics.js.map +1 -0
  514. package/dist/server/src/sensors/sensor.d.ts +58 -0
  515. package/dist/server/src/{camera/sensors → sensors}/sensor.js +43 -32
  516. package/dist/server/src/sensors/sensor.js.map +1 -0
  517. package/dist/server/src/{camera/sensors → sensors}/types.d.ts +2 -0
  518. package/dist/server/src/{camera/sensors → sensors}/types.js +9 -0
  519. package/dist/server/src/sensors/types.js.map +1 -0
  520. package/dist/server/src/{camera/sensors → sensors}/virtual.d.ts +4 -6
  521. package/dist/server/src/{camera/sensors → sensors}/virtual.js +10 -56
  522. package/dist/server/src/sensors/virtual.js.map +1 -0
  523. package/dist/server/src/services/mdns/index.js +4 -0
  524. package/dist/server/src/services/mdns/index.js.map +1 -1
  525. package/package.json +11 -11
  526. package/dist/interface/assets/404-0d936klL.js +0 -1
  527. package/dist/interface/assets/About-BMwYrGrl.js +0 -1
  528. package/dist/interface/assets/Adminpanel-DBsOmAuo.js +0 -1
  529. package/dist/interface/assets/Automation-BLndVfqR.js +0 -3
  530. package/dist/interface/assets/AutomationImport-Ba33juY0.js +0 -2
  531. package/dist/interface/assets/AutomationStore-Bjf1x7go.js +0 -2
  532. package/dist/interface/assets/AutomationStoreDetail-Ko3n3U1U.js +0 -2
  533. package/dist/interface/assets/Automations-BfC8bvkT.js +0 -2
  534. package/dist/interface/assets/Camera-BYDPeH6d.js +0 -2
  535. package/dist/interface/assets/CameraConsole-pVCj1xXI.js +0 -7
  536. package/dist/interface/assets/Cameras-DdokAe_Q.js +0 -652
  537. package/dist/interface/assets/Camview-DmuGSzal.js +0 -1
  538. package/dist/interface/assets/Config-DvVqB0_Y.js +0 -2
  539. package/dist/interface/assets/ConfigActionDelay-B1JjI6bg.js +0 -1
  540. package/dist/interface/assets/ConfigActionHttp-BzGIbeVo.js +0 -1
  541. package/dist/interface/assets/ConfigActionImageInput-C6m2-s8z.js +0 -1
  542. package/dist/interface/assets/ConfigActionMqtt-ByZNQKsg.js +0 -1
  543. package/dist/interface/assets/ConfigActionNotification-YmdMddoN.js +0 -1
  544. package/dist/interface/assets/ConfigActionNotificationControl-2hWDRBpq.js +0 -1
  545. package/dist/interface/assets/ConfigActionOutput-D9k1-jfI.js +0 -1
  546. package/dist/interface/assets/ConfigActionPlugin-DjD_94EX.js +0 -1
  547. package/dist/interface/assets/ConfigActionSensor-fak8jYSC.js +0 -1
  548. package/dist/interface/assets/ConfigActionSnapshot-mwEHXqyk.js +0 -1
  549. package/dist/interface/assets/ConfigActionVariable-kBxNfyOV.js +0 -1
  550. package/dist/interface/assets/ConfigConditionIfElse-CkjmImTD.js +0 -1
  551. package/dist/interface/assets/ConfigConditionSensorState-FE3mFjRe.js +0 -1
  552. package/dist/interface/assets/ConfigConditionSwitch-msqWizIt.js +0 -1
  553. package/dist/interface/assets/ConfigConditionTime-ifPV135b.js +0 -1
  554. package/dist/interface/assets/ConfigSensorValueInput-Bg3SEbSh.js +0 -1
  555. package/dist/interface/assets/ConfigTriggerGeofence-CemaUwl5.js +0 -1
  556. package/dist/interface/assets/ConfigTriggerManual-DWuiq7PC.js +0 -1
  557. package/dist/interface/assets/ConfigTriggerMqtt-DxAoDh2Z.js +0 -1
  558. package/dist/interface/assets/ConfigTriggerSchedule-DDqgMGvp.js +0 -1
  559. package/dist/interface/assets/ConfigTriggerSensor-M6bXqz4k.js +0 -1
  560. package/dist/interface/assets/ConfigTriggerWebhook-CxOXgcJi.js +0 -1
  561. package/dist/interface/assets/Console-CMuW2_8s.js +0 -1
  562. package/dist/interface/assets/CuiAutomationRunsDialog-yh1qHzmS.js +0 -1
  563. package/dist/interface/assets/CuiBottomSheet-BshiVWqw.js +0 -1
  564. package/dist/interface/assets/CuiBottomSheet-DSNyVg5P.js +0 -1
  565. package/dist/interface/assets/CuiCameraPipCard-Cmk0jl6M.js +0 -1
  566. package/dist/interface/assets/CuiCameraRecordings-KU1wIai4.js +0 -1
  567. package/dist/interface/assets/CuiCameraShares-BoR3YQWj.js +0 -1
  568. package/dist/interface/assets/CuiCameraTable-BRPBqU8V.js +0 -2
  569. package/dist/interface/assets/CuiDataTable-BGY4VBtv.js +0 -1
  570. package/dist/interface/assets/CuiList-BSOMR296.js +0 -1
  571. package/dist/interface/assets/CuiMarkdownContent-DEMo42iT.js +0 -1
  572. package/dist/interface/assets/CuiMarkdownContent-Xn_VHwym.js +0 -1
  573. package/dist/interface/assets/CuiPluginCard-CgJb8B1W.js +0 -2
  574. package/dist/interface/assets/CuiPluginOAuthButton-XpEyqoRm.js +0 -2
  575. package/dist/interface/assets/CuiQRCode-QBkbmvRA.js +0 -1
  576. package/dist/interface/assets/CuiRecordingsGrid-CuEl_hhu.js +0 -1
  577. package/dist/interface/assets/CuiSchema-D_cg-H5i.js +0 -1
  578. package/dist/interface/assets/CuiTopNavbarItem-CXijnkK9.js +0 -1
  579. package/dist/interface/assets/Faces-C95mlWaW.js +0 -1
  580. package/dist/interface/assets/FirstSteps-Cpbg7fng.js +0 -1
  581. package/dist/interface/assets/Instances-BgJtM1Xl.js +0 -1
  582. package/dist/interface/assets/Logs-BWXYqm5T.js +0 -6
  583. package/dist/interface/assets/Menu-BO9Zjy1w.js +0 -1
  584. package/dist/interface/assets/OAuthDeviceFlow-NnwqdmBM.js +0 -1
  585. package/dist/interface/assets/Plugin-DQq3xjhe.js +0 -1
  586. package/dist/interface/assets/PluginConsole-BTsVAsKf.js +0 -7
  587. package/dist/interface/assets/PluginDetail-CTyzzZVU.js +0 -2
  588. package/dist/interface/assets/PluginSchema-Bn3pHjQA.js +0 -1
  589. package/dist/interface/assets/PluginSearch-DbXCyUF0.js +0 -1
  590. package/dist/interface/assets/PluginSearch-z0z8Z1gP.js +0 -2
  591. package/dist/interface/assets/Plugins-Cy7e-ty2.js +0 -1
  592. package/dist/interface/assets/Recordings-CWBpGEUf.js +0 -1
  593. package/dist/interface/assets/Settings-CUIORSmm.js +0 -1
  594. package/dist/interface/assets/SettingsAccount-CeJBKpzp.js +0 -1
  595. package/dist/interface/assets/SettingsAccount-CnwVrQx1.js +0 -1
  596. package/dist/interface/assets/SettingsAppearance-BraaC0WF.js +0 -1
  597. package/dist/interface/assets/SettingsAppearance-CZrOTBki.js +0 -1
  598. package/dist/interface/assets/SettingsBackup-y9mb8XZZ.js +0 -1
  599. package/dist/interface/assets/SettingsList-DsKncveQ.js +0 -1
  600. package/dist/interface/assets/SettingsMqtt-DTyyctmQ.js +0 -1
  601. package/dist/interface/assets/SettingsNotifications-SFMt4Yuj.js +0 -2
  602. package/dist/interface/assets/SettingsPermissions-CktJaQzL.js +0 -1
  603. package/dist/interface/assets/SettingsRecordings-Bqguyt6u.js +0 -1
  604. package/dist/interface/assets/SettingsRemote-CTv7bb4g.js +0 -1
  605. package/dist/interface/assets/SettingsSystem-CkCnB34r.js +0 -2
  606. package/dist/interface/assets/SettingsUsers-D8LAGd6F.js +0 -1
  607. package/dist/interface/assets/Terminal-DaR9Ur0_.js +0 -4
  608. package/dist/interface/assets/VariableInput-D0TP_Lmo.js +0 -1
  609. package/dist/interface/assets/VariableSuggestions--vq7928F.js +0 -1
  610. package/dist/interface/assets/VersionsHandler-D9GDdcXr.js +0 -7
  611. package/dist/interface/assets/Workers-CUyRzwJG.js +0 -2
  612. package/dist/interface/assets/ace-DYqf8ZN7.js +0 -1
  613. package/dist/interface/assets/alert-outline-BUvdNY2J.js +0 -1
  614. package/dist/interface/assets/api-DxrxNyIH.js +0 -2
  615. package/dist/interface/assets/api-VZ_wVUpU.css +0 -2
  616. package/dist/interface/assets/arrow-left-LdfKbcre.js +0 -1
  617. package/dist/interface/assets/arrow-right-outline-BbTEhBJq.js +0 -1
  618. package/dist/interface/assets/automationBlueprint-DMjszOs4.js +0 -1
  619. package/dist/interface/assets/automations-51-JMUWD.js +0 -1
  620. package/dist/interface/assets/check-circle-D-utE_P9.js +0 -1
  621. package/dist/interface/assets/chevron-down-OEjMpuec.js +0 -1
  622. package/dist/interface/assets/chevron-right-B3nxd9UE.js +0 -1
  623. package/dist/interface/assets/cloudHandoff-BktPB9rt.js +0 -1
  624. package/dist/interface/assets/copy-BvSzmsFs.js +0 -1
  625. package/dist/interface/assets/delete-B9BZTgya.js +0 -1
  626. package/dist/interface/assets/dist-qdWlJrr0.js +0 -1
  627. package/dist/interface/assets/download-Dp_ssGIE.js +0 -1
  628. package/dist/interface/assets/esm-9VMgxuPI.js +0 -1
  629. package/dist/interface/assets/esm-B69zS8aI.js +0 -1
  630. package/dist/interface/assets/esm-BF94InGP.js +0 -1
  631. package/dist/interface/assets/esm-BHdK6hkk.js +0 -1
  632. package/dist/interface/assets/esm-BYm8JT8N.js +0 -1
  633. package/dist/interface/assets/esm-BwCmHX2G.js +0 -1
  634. package/dist/interface/assets/esm-CL6t-XYT.js +0 -1
  635. package/dist/interface/assets/esm-CXstRMXa.js +0 -1
  636. package/dist/interface/assets/esm-Ckb9rjlL.js +0 -1
  637. package/dist/interface/assets/esm-D4insKbc.js +0 -1
  638. package/dist/interface/assets/esm-DiReJ8YS.js +0 -1
  639. package/dist/interface/assets/esm-Dt_Neag0.js +0 -1
  640. package/dist/interface/assets/esm-GspmWlKf.js +0 -1
  641. package/dist/interface/assets/esm-eezqpB2a.js +0 -1
  642. package/dist/interface/assets/flowSchema-Ckr7CEbZ.js +0 -1
  643. package/dist/interface/assets/home-DL94781-.js +0 -1
  644. package/dist/interface/assets/main-BxM81wMi.css +0 -1
  645. package/dist/interface/assets/main-DOjghmGX.js +0 -3
  646. package/dist/interface/assets/mqtt-COazyb4A.js +0 -1
  647. package/dist/interface/assets/native-WiRjRKUS.js +0 -1
  648. package/dist/interface/assets/native-hhip9y-E.js +0 -1
  649. package/dist/interface/assets/nodeDefinitions-CPyyuw1P.js +0 -1
  650. package/dist/interface/assets/plugin-DIVM640y.js +0 -1
  651. package/dist/interface/assets/plus-CTzaBaTz.js +0 -1
  652. package/dist/interface/assets/power-CvKGepBP.js +0 -1
  653. package/dist/interface/assets/rolldown-runtime-DAXXjFlN.js +0 -1
  654. package/dist/interface/assets/round-restart-alt-D3iswthu.js +0 -1
  655. package/dist/interface/assets/trash-can-outline-HvqPHpF7.js +0 -1
  656. package/dist/interface/assets/types-CDJiWcQ7.js +0 -1
  657. package/dist/interface/assets/upload-B6yqOWqz.js +0 -1
  658. package/dist/interface/assets/useBackupRestore-QuXkc5ZG.js +0 -1
  659. package/dist/interface/assets/useCameraOptions-D5-bI-e6.js +0 -1
  660. package/dist/interface/assets/useLogsSocket-BlAo-xcw.js +0 -5
  661. package/dist/interface/assets/useServerRestart-DctcFWWh.js +0 -1
  662. package/dist/interface/assets/useUserOptions-nuBRgAEk.js +0 -1
  663. package/dist/interface/assets/vendor-ace-CrklN-bc.js +0 -1085
  664. package/dist/interface/assets/vendor-cameraui-B_OCKNGw.js +0 -2040
  665. package/dist/interface/assets/vendor-capacitor-D6T-f6Q_.js +0 -2
  666. package/dist/interface/assets/vendor-chart-DpsXMlB-.js +0 -3
  667. package/dist/interface/assets/vendor-core-zLmLhSHM.js +0 -1
  668. package/dist/interface/assets/vendor-draggabilly-OrLwQbim.js +0 -1
  669. package/dist/interface/assets/vendor-gridstack-C6VKsm_r.js +0 -3
  670. package/dist/interface/assets/vendor-markdown-_OBaDsnU.js +0 -15
  671. package/dist/interface/assets/vendor-nfBMzqgY.js +0 -22
  672. package/dist/interface/assets/vendor-vueflow-B1MUSE71.js +0 -26
  673. package/dist/interface/assets/vendor-xterm-IIYDrBG1.js +0 -142
  674. package/dist/interface/assets/vendor-zod-BaT-dXMv.js +0 -127
  675. package/dist/interface/assets/web-B-SlpbxK.js +0 -1
  676. package/dist/interface/assets/web-B6leYIzJ.js +0 -1
  677. package/dist/interface/assets/web-BLDe3Kn0.js +0 -1
  678. package/dist/interface/assets/web-BT-51W2W.js +0 -1
  679. package/dist/interface/assets/web-BjKL51lK-DHLvmMLr.js +0 -1
  680. package/dist/interface/assets/web-BpRU7MbT.js +0 -1
  681. package/dist/interface/assets/web-CiaJvmq8.js +0 -1
  682. package/dist/interface/assets/web-Cnkt61og.js +0 -1
  683. package/dist/interface/assets/web-CzhM-YH1.js +0 -1
  684. package/dist/interface/assets/web-Da5rcZ2Q.js +0 -1
  685. package/dist/interface/assets/web-DdZjFuTb.js +0 -1
  686. package/dist/interface/assets/web-DnHj9sl9.js +0 -1
  687. package/dist/interface/assets/web-E4Ew4Xhj.js +0 -1
  688. package/dist/interface/assets/web-q63OEDhG.js +0 -1
  689. package/dist/interface/assets/workbox-window.prod.es5-BMiTt6Ad.js +0 -1
  690. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_triggers.py +0 -4
  691. package/dist/server/src/api/controllers/virtualsensors.controller.d.ts +0 -11
  692. package/dist/server/src/api/controllers/virtualsensors.controller.js +0 -61
  693. package/dist/server/src/api/controllers/virtualsensors.controller.js.map +0 -1
  694. package/dist/server/src/api/routes/virtualsensors.routes.d.ts +0 -2
  695. package/dist/server/src/api/routes/virtualsensors.routes.js +0 -63
  696. package/dist/server/src/api/routes/virtualsensors.routes.js.map +0 -1
  697. package/dist/server/src/api/schemas/virtualsensors.schema.js +0 -14
  698. package/dist/server/src/api/schemas/virtualsensors.schema.js.map +0 -1
  699. package/dist/server/src/api/services/virtualsensors.service.d.ts +0 -20
  700. package/dist/server/src/api/services/virtualsensors.service.js +0 -151
  701. package/dist/server/src/api/services/virtualsensors.service.js.map +0 -1
  702. package/dist/server/src/camera/sensors/semantics.js.map +0 -1
  703. package/dist/server/src/camera/sensors/sensor.d.ts +0 -34
  704. package/dist/server/src/camera/sensors/sensor.js.map +0 -1
  705. package/dist/server/src/camera/sensors/stable-id.d.ts +0 -2
  706. package/dist/server/src/camera/sensors/stable-id.js +0 -17
  707. package/dist/server/src/camera/sensors/stable-id.js.map +0 -1
  708. package/dist/server/src/camera/sensors/types.js.map +0 -1
  709. package/dist/server/src/camera/sensors/virtual.js.map +0 -1
  710. package/dist/server/src/plugins/runtime/python/store_migrate.py +0 -59
  711. package/dist/server/src/plugins/store/migrate.d.ts +0 -1
  712. package/dist/server/src/plugins/store/migrate.js +0 -22
  713. package/dist/server/src/plugins/store/migrate.js.map +0 -1
@@ -16,6 +16,7 @@ from typing import (
16
16
  from typing_extensions import TypeVar as ExtTypeVar
17
17
 
18
18
  from ..sensor import ClassifierDetection, Detection, FaceDetection, LicensePlateDetection
19
+ from ..sensor.audio import AudioFrameData
19
20
  from ..sensor.clip import ClipEmbedding
20
21
  from ..sensor.motion import VideoFrameData
21
22
  from .api import PluginAPI
@@ -23,89 +24,121 @@ from .api import PluginAPI
23
24
  if TYPE_CHECKING:
24
25
  from ..camera import CameraConfig, CameraDevice
25
26
  from ..manager import DiscoveredCamera
27
+ from ..sensor.base import SensorLike
26
28
  from ..storage import DeviceStorage, JsonSchemaWithoutCallbacks
27
29
  from ..types import LoggerService
28
30
 
29
31
  from ..storage import JsonSchema
30
32
 
31
- # TypeVar for generic storage typing in BasePlugin
32
- # Using Mapping as bound since TypedDict is compatible with Mapping but not dict
33
+ # bound is Mapping, not dict: TypedDict is compatible with Mapping only
33
34
  StorageT = ExtTypeVar("StorageT", bound=Mapping[str, Any], default=dict[str, Any])
34
- """TypeVar for plugin storage values type. Defaults to dict[str, Any]."""
35
+ """Type of the plugin's storage values. Defaults to dict[str, Any]."""
35
36
 
36
37
 
37
38
  class ImageMetadata(TypedDict):
38
- """Image metadata for detection test requests."""
39
+ """Image metadata passed to detector test methods."""
39
40
 
40
41
  width: int
42
+ """Image width in pixels."""
43
+
41
44
  height: int
45
+ """Image height in pixels."""
42
46
 
43
47
 
44
48
  class AudioMetadata(TypedDict):
45
- """Audio metadata for detection test requests."""
49
+ """Audio metadata passed to audio detector test methods."""
46
50
 
47
51
  mimeType: Literal["audio/mpeg", "audio/wav", "audio/ogg"]
52
+ """Container format of the audio buffer."""
48
53
 
49
54
 
50
55
  class MotionDetectionPluginResponse(TypedDict):
51
- """Response from a motion detection test."""
56
+ """Result of a motion detection run."""
52
57
 
53
58
  detected: bool
59
+ """True when the run produced at least one detection."""
60
+
54
61
  detections: list[Detection]
62
+ """Motion regions found in the input."""
63
+
55
64
  videoData: NotRequired[bytes]
65
+ """Annotated re-encoded clip for the UI test panel, when the plugin renders one."""
56
66
 
57
67
 
58
68
  class ObjectDetectionPluginResponse(TypedDict):
59
- """Response from an object detection test."""
69
+ """Result of an object detection run."""
60
70
 
61
71
  detected: bool
72
+ """True when the run produced at least one detection."""
73
+
62
74
  detections: list[Detection]
75
+ """Detected objects with label, score and bounding box."""
63
76
 
64
77
 
65
78
  class AudioDetectionPluginResponse(TypedDict):
66
- """Response from an audio detection test."""
79
+ """Result of an audio detection run."""
67
80
 
68
81
  detected: bool
82
+ """True when the run produced at least one detection."""
83
+
69
84
  detections: list[Detection]
85
+ """Detected audio events."""
86
+
70
87
  decibels: NotRequired[float]
88
+ """Loudness of the analysed buffer in dBFS."""
71
89
 
72
90
 
73
91
  class FaceDetectionPluginResponse(TypedDict):
74
- """Response from a face detection test."""
92
+ """Result of a face detection run."""
75
93
 
76
94
  detected: bool
95
+ """True when the run produced at least one detection."""
96
+
77
97
  detections: list[FaceDetection]
98
+ """Detected faces, each with its embedding."""
99
+
78
100
  embeddingModel: NotRequired[str]
101
+ """Model that produced the embeddings; consumers must not mix models."""
79
102
 
80
103
 
81
104
  class LicensePlateDetectionPluginResponse(TypedDict):
82
- """Response from a license plate detection test."""
105
+ """Result of a license plate detection run."""
83
106
 
84
107
  detected: bool
108
+ """True when the run produced at least one detection."""
109
+
85
110
  detections: list[LicensePlateDetection]
111
+ """Detected plates with their OCR text."""
86
112
 
87
113
 
88
114
  class ClassifierDetectionPluginResponse(TypedDict):
89
- """Response from a classifier detection test."""
115
+ """Result of a classifier detection run."""
90
116
 
91
117
  detected: bool
118
+ """True when the run produced at least one classification."""
119
+
92
120
  detections: list[ClassifierDetection]
121
+ """Attribute/label pairs the classifier emitted."""
93
122
 
94
123
 
95
124
  class ClipDetectionPluginResponse(TypedDict):
96
- """Response from a CLIP embedding test."""
125
+ """Result of a CLIP image embedding run."""
97
126
 
98
127
  embeddings: list[ClipEmbedding]
128
+ """Embedding vectors generated for the input."""
129
+
99
130
  embeddingModel: str
131
+ """Model that produced the embeddings; consumers must not mix models."""
100
132
 
101
133
 
102
134
  class ClipTextEmbeddingResult(TypedDict):
103
- """Result of text-to-embedding conversion a single embedding vector
104
- plus the model name used to produce it, so downstream code can refuse to
105
- mix embeddings from different models."""
135
+ """Result of a CLIP text embedding request."""
106
136
 
107
137
  embedding: list[float]
138
+ """Embedding vector for the query text."""
139
+
108
140
  embeddingModel: str
141
+ """Model that produced the embedding; consumers must not mix models."""
109
142
 
110
143
 
111
144
  class BasePlugin(ABC, Generic[StorageT]):
@@ -115,35 +148,25 @@ class BasePlugin(ABC, Generic[StorageT]):
115
148
  DeviceStorage) and declares the lifecycle methods the host calls on the
116
149
  plugin.
117
150
 
118
- Lifecycle order: the host calls :meth:`configureCameras` once at startup
119
- with every camera already assigned to this plugin, then calls
120
- :meth:`onCameraAdded` / :meth:`onCameraReleased` as the user adds or
121
- removes cameras at runtime.
122
-
123
- The generic type parameter ``StorageT`` types ``storage.values`` so plugin
124
- code gets autocompletion for its own settings shape.
151
+ The host calls :meth:`configureCameras` once at startup with every camera
152
+ already assigned to this plugin, then :meth:`onCameraAdded` /
153
+ :meth:`onCameraReleased` as the user adds or removes cameras at runtime.
154
+ ``StorageT`` types ``storage.values`` so plugin code gets autocompletion
155
+ for its own settings shape.
125
156
 
126
157
  Example:
127
158
  ```python
128
- class MyStorageValues(TypedDict):
129
- model_path: str
130
- threshold: float
131
-
132
-
133
159
  class MyPlugin(BasePlugin[MyStorageValues]):
134
160
  async def configureCameras(self, cameras: list[CameraDevice]) -> None:
135
- # storage.values is typed as MyStorageValues
136
- model_path = self.storage.values.get("model_path") # str
161
+ self.model_path = self.storage.values.get("model_path")
137
162
  for camera in cameras:
138
163
  await self.onCameraAdded(camera)
139
164
 
140
165
  async def onCameraAdded(self, camera: CameraDevice) -> None:
141
- # Initialize camera controller
142
- pass
166
+ self.state[camera.id] = await self.attach(camera)
143
167
 
144
168
  async def onCameraReleased(self, camera_id: str) -> None:
145
- # Cleanup camera controller
146
- pass
169
+ self.state.pop(camera_id, None)
147
170
  ```
148
171
  """
149
172
 
@@ -154,15 +177,14 @@ class BasePlugin(ABC, Generic[StorageT]):
154
177
 
155
178
  @property
156
179
  def storage_schema(self) -> list[JsonSchema]:
157
- """Override to register a JSON schema for the plugin-level settings
158
- form rendered in the UI. Default: no schema."""
180
+ """Override to register a JSON schema for the plugin-level settings form rendered in the UI. Default: no schema."""
159
181
  return []
160
182
 
161
183
  @abstractmethod
162
184
  async def configureCameras(self, cameras: list[CameraDevice]) -> None:
163
185
  """Called once on startup with every camera already assigned to this
164
- plugin. The plugin should attach handlers, open vendor sessions, and
165
- warm up models. Raising aborts plugin startup.
186
+ plugin. Attach handlers, open vendor sessions, warm up models here.
187
+ Raising aborts plugin startup.
166
188
 
167
189
  Args:
168
190
  cameras: Cameras already assigned to this plugin.
@@ -171,11 +193,10 @@ class BasePlugin(ABC, Generic[StorageT]):
171
193
 
172
194
  @abstractmethod
173
195
  async def onCameraAdded(self, camera: CameraDevice) -> None:
174
- """Called whenever a camera is assigned to this plugin at runtime
196
+ """Called whenever a camera is assigned to this plugin at runtime,
175
197
  after a discovery adoption (:meth:`DiscoveryProvider.onAdoptCamera`)
176
- or after the user re-assigns an existing camera in the UI. The
177
- plugin should set up the same per-camera state as in
178
- :meth:`configureCameras`.
198
+ or after the user re-assigns an existing camera. Set up the same
199
+ per-camera state as in :meth:`configureCameras`.
179
200
 
180
201
  Args:
181
202
  camera: The camera device that was added.
@@ -185,14 +206,46 @@ class BasePlugin(ABC, Generic[StorageT]):
185
206
  @abstractmethod
186
207
  async def onCameraReleased(self, cameraId: str) -> None:
187
208
  """Called when a camera is unassigned from this plugin or deleted
188
- from the system. The plugin must release per-camera resources
189
- (sessions, timers, decoders) before returning.
209
+ from the system. Release per-camera resources (sessions, timers,
210
+ decoders) before returning.
190
211
 
191
212
  Args:
192
213
  cameraId: ID of the camera that was released.
193
214
  """
194
215
  ...
195
216
 
217
+ async def configureSensors(self, sensors: list[SensorLike]) -> None:
218
+ """Called once on startup with every sensor this plugin may consume:
219
+ sensors whose type is listed in ``contract.consumes`` and that are
220
+ exposed. Each sensor carries ``type``, ``assignedCameraIds`` and
221
+ ``connected``, so consumers decide rendering purely from that data.
222
+ Optional, only bridge plugins override it.
223
+
224
+ Args:
225
+ sensors: Consumable sensors known at startup.
226
+ """
227
+ return None
228
+
229
+ async def onSensorAdded(self, sensor: SensorLike) -> None:
230
+ """Called when a sensor enters this plugin's consumable view at
231
+ runtime: it was created, became exposed, or its type became
232
+ consumable.
233
+
234
+ Args:
235
+ sensor: The sensor that appeared.
236
+ """
237
+ return None
238
+
239
+ async def onSensorReleased(self, sensorId: str) -> None:
240
+ """Called when a sensor permanently leaves the consumable view: it
241
+ was deleted or unexposed. Plugin connectivity does NOT fire this,
242
+ watch ``sensor.onConnectedChanged`` for that.
243
+
244
+ Args:
245
+ sensorId: Persistent id of the sensor that left.
246
+ """
247
+ return None
248
+
196
249
 
197
250
  @runtime_checkable
198
251
  class DiscoveryProvider(Protocol):
@@ -212,7 +265,7 @@ class DiscoveryProvider(Protocol):
212
265
 
213
266
  async def onGetCameraSettings(self, camera: DiscoveredCamera) -> list[JsonSchemaWithoutCallbacks]:
214
267
  """Return a JSON schema describing the form fields (credentials,
215
- transport options, ...) the user must fill in to adopt this specific
268
+ transport options, ...) the user must fill in to adopt this
216
269
  discovered camera.
217
270
 
218
271
  Args:
@@ -228,8 +281,7 @@ class DiscoveryProvider(Protocol):
228
281
  ) -> CameraConfig:
229
282
  """Probe the device with the user-provided settings and return the
230
283
  camera configuration the host should persist. The host then creates
231
- the camera and invokes :meth:`BasePlugin.onCameraAdded` on the
232
- plugin.
284
+ the camera and invokes :meth:`BasePlugin.onCameraAdded` on the plugin.
233
285
 
234
286
  Args:
235
287
  camera: The discovered camera being adopted.
@@ -243,85 +295,80 @@ class DiscoveryProvider(Protocol):
243
295
 
244
296
  @runtime_checkable
245
297
  class MotionDetectionInterface(Protocol):
246
- """Interface implemented by plugins that perform video-based motion
247
- detection. The host invokes :meth:`testMotionDetection` from the UI test
248
- panel and :meth:`detectMotion` from automation / benchmark pipelines."""
298
+ """Implemented by plugins that perform video-based motion detection. The
299
+ host invokes :meth:`testMotionDetection` from the UI test panel and
300
+ :meth:`detectMotion` from automation / benchmark pipelines."""
249
301
 
250
302
  async def testMotionDetection(
251
303
  self, video_data: bytes, config: dict[str, Any]
252
304
  ) -> MotionDetectionPluginResponse | None:
253
- """Run detection on a raw video buffer captured by the UI test panel
254
- and return the result for preview rendering."""
305
+ """Run detection on a raw video buffer captured by the UI test panel and return the result for preview rendering."""
255
306
  ...
256
307
 
257
308
  async def detectMotion(
258
309
  self, frames: list[VideoFrameData], config: dict[str, Any] | None = None
259
310
  ) -> MotionDetectionPluginResponse | None:
260
- """Run detection on already-decoded :class:`VideoFrameData`. Called
261
- from automation / benchmark pipelines that supply pre-decoded frames
262
- directly to avoid re-encoding."""
311
+ """Run detection on already-decoded frames, supplied by automation / benchmark pipelines to avoid re-encoding."""
263
312
  ...
264
313
 
265
314
  async def motionDetectionSettings(self) -> list[JsonSchema] | None:
266
- """Return the JSON schema used to render the motion-detection
267
- settings form in the UI. Return None for no schema."""
315
+ """Return the JSON schema used to render the motion-detection settings form in the UI, or None for no schema."""
268
316
  ...
269
317
 
270
318
 
271
319
  @runtime_checkable
272
320
  class ObjectDetectionInterface(Protocol):
273
- """Interface implemented by plugins that perform object detection
274
- (person, vehicle, animal, ...)."""
321
+ """Implemented by plugins that perform object detection (person, vehicle,
322
+ animal, ...)."""
275
323
 
276
324
  async def testObjectDetection(
277
325
  self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
278
326
  ) -> ObjectDetectionPluginResponse | None:
279
- """Run detection on a single image captured by the UI test panel;
280
- ``metadata`` carries the image dimensions."""
327
+ """Run detection on a single image captured by the UI test panel; ``metadata`` carries the image dimensions."""
281
328
  ...
282
329
 
283
330
  async def detectObjects(
284
331
  self, frame: VideoFrameData, config: dict[str, Any] | None = None
285
332
  ) -> ObjectDetectionPluginResponse | None:
286
- """Run detection on a pre-decoded video frame. Called from
287
- automation / benchmark pipelines."""
333
+ """Run detection on a pre-decoded video frame. Called from automation / benchmark pipelines."""
288
334
  ...
289
335
 
290
336
  async def objectDetectionSettings(self) -> list[JsonSchema] | None:
291
- """Return the JSON schema used to render the object-detection
292
- settings form in the UI. Return None for no schema."""
337
+ """Return the JSON schema used to render the object-detection settings form in the UI, or None for no schema."""
293
338
  ...
294
339
 
295
340
 
296
341
  @runtime_checkable
297
342
  class AudioDetectionInterface(Protocol):
298
- """Interface implemented by plugins that perform audio event or keyword
299
- detection."""
343
+ """Implemented by plugins that perform audio event or keyword detection."""
300
344
 
301
345
  async def testAudioDetection(
302
346
  self, audio_data: bytes, metadata: AudioMetadata, config: dict[str, Any]
303
347
  ) -> AudioDetectionPluginResponse | None:
304
- """Run detection on an audio buffer captured by the UI test panel;
305
- ``metadata`` carries the input MIME type (mpeg/wav/ogg)."""
348
+ """Run detection on an audio buffer captured by the UI test panel; ``metadata`` carries the input MIME type."""
349
+ ...
350
+
351
+ async def detectAudio(
352
+ self, audio: AudioFrameData, config: dict[str, Any] | None = None
353
+ ) -> AudioDetectionPluginResponse | None:
354
+ """Run detection on a pre-decoded audio frame. Called from automation / benchmark pipelines."""
306
355
  ...
307
356
 
308
357
  async def audioDetectionSettings(self) -> list[JsonSchema] | None:
309
- """Return the JSON schema used to render the audio-detection
310
- settings form in the UI. Return None for no schema."""
358
+ """Return the JSON schema used to render the audio-detection settings form in the UI, or None for no schema."""
311
359
  ...
312
360
 
313
361
 
314
362
  @runtime_checkable
315
363
  class FaceDetectionInterface(Protocol):
316
- """Interface implemented by plugins that locate faces and emit per-face
317
- embeddings. The NVR owns matching against enrolled faces; the plugin
318
- only emits raw detections + embeddings."""
364
+ """Implemented by plugins that locate faces and emit per-face embeddings.
365
+ The NVR owns matching against enrolled faces, the plugin only emits raw
366
+ detections and embeddings."""
319
367
 
320
368
  async def testFaceDetection(
321
369
  self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
322
370
  ) -> FaceDetectionPluginResponse | None:
323
- """Run face detection on a single image captured by the UI test
324
- panel and return the result for preview rendering."""
371
+ """Run face detection on a single image captured by the UI test panel and return the result for preview rendering."""
325
372
  ...
326
373
 
327
374
  async def detectFaces(
@@ -331,21 +378,19 @@ class FaceDetectionInterface(Protocol):
331
378
  ...
332
379
 
333
380
  async def faceDetectionSettings(self) -> list[JsonSchema] | None:
334
- """Return the JSON schema for the face-detection settings form in
335
- the UI. Return None for no schema."""
381
+ """Return the JSON schema for the face-detection settings form in the UI, or None for no schema."""
336
382
  ...
337
383
 
338
384
 
339
385
  @runtime_checkable
340
386
  class LicensePlateDetectionInterface(Protocol):
341
- """Interface implemented by plugins that locate license plates and run
342
- OCR on them."""
387
+ """Implemented by plugins that locate license plates and run OCR on
388
+ them."""
343
389
 
344
390
  async def testLicensePlateDetection(
345
391
  self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
346
392
  ) -> LicensePlateDetectionPluginResponse | None:
347
- """Run detection on a single image captured by the UI test panel and
348
- return the result for preview rendering."""
393
+ """Run detection on a single image captured by the UI test panel and return the result for preview rendering."""
349
394
  ...
350
395
 
351
396
  async def detectLicensePlates(
@@ -355,21 +400,19 @@ class LicensePlateDetectionInterface(Protocol):
355
400
  ...
356
401
 
357
402
  async def licensePlateDetectionSettings(self) -> list[JsonSchema] | None:
358
- """Return the JSON schema for the license-plate-detection settings
359
- form in the UI. Return None for no schema."""
403
+ """Return the JSON schema for the license-plate-detection settings form in the UI, or None for no schema."""
360
404
  ...
361
405
 
362
406
 
363
407
  @runtime_checkable
364
408
  class ClassifierDetectionInterface(Protocol):
365
- """Interface implemented by plugins that run a generic image classifier
366
- and emit attribute/label pairs (e.g. weather, scene, activity)."""
409
+ """Implemented by plugins that run a generic image classifier and emit
410
+ attribute/label pairs (e.g. weather, scene, activity)."""
367
411
 
368
412
  async def testClassifierDetection(
369
413
  self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
370
414
  ) -> ClassifierDetectionPluginResponse | None:
371
- """Run classification on a single image captured by the UI test
372
- panel and return the result for preview rendering."""
415
+ """Run classification on a single image captured by the UI test panel and return the result for preview rendering."""
373
416
  ...
374
417
 
375
418
  async def detectClassifications(
@@ -379,21 +422,19 @@ class ClassifierDetectionInterface(Protocol):
379
422
  ...
380
423
 
381
424
  async def classifierDetectionSettings(self) -> list[JsonSchema] | None:
382
- """Return the JSON schema for the classifier-detection settings
383
- form in the UI. Return None for no schema."""
425
+ """Return the JSON schema for the classifier-detection settings form in the UI, or None for no schema."""
384
426
  ...
385
427
 
386
428
 
387
429
  @runtime_checkable
388
430
  class ClipDetectionInterface(Protocol):
389
- """Interface implemented by plugins that generate CLIP image and text
390
- embeddings used for semantic search over recorded events."""
431
+ """Implemented by plugins that generate CLIP image and text embeddings
432
+ used for semantic search over recorded events."""
391
433
 
392
434
  async def testClipEmbedding(
393
435
  self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
394
436
  ) -> ClipDetectionPluginResponse | None:
395
- """Run the CLIP image branch on a single image captured by the UI
396
- test panel."""
437
+ """Run the CLIP image branch on a single image captured by the UI test panel."""
397
438
  ...
398
439
 
399
440
  async def detectClipEmbedding(
@@ -403,18 +444,14 @@ class ClipDetectionInterface(Protocol):
403
444
  ...
404
445
 
405
446
  async def getTextEmbedding(self, text: str) -> ClipTextEmbeddingResult:
406
- """Run the CLIP text branch and return a single embedding vector
407
- usable for semantic-search queries against previously stored image
408
- embeddings."""
447
+ """Run the CLIP text branch and return a vector usable for semantic-search queries against stored image embeddings."""
409
448
  ...
410
449
 
411
450
  async def clipSettings(self) -> list[JsonSchema] | None:
412
- """Return the JSON schema for the CLIP settings form in the UI.
413
- Return None for no schema."""
451
+ """Return the JSON schema for the CLIP settings form in the UI, or None for no schema."""
414
452
  ...
415
453
 
416
454
 
417
- # Union of all optional plugin interfaces.
418
455
  PluginInterfaces = (
419
456
  MotionDetectionInterface
420
457
  | ObjectDetectionInterface
@@ -425,3 +462,4 @@ PluginInterfaces = (
425
462
  | ClipDetectionInterface
426
463
  | DiscoveryProvider
427
464
  )
465
+ """Union of all optional plugin interfaces."""