@camera.ui/server 2.0.22 → 2.0.23

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-junY0N5P.js +1 -0
  2. package/dist/interface/assets/About-Dwc0TTLa.js +1 -0
  3. package/dist/interface/assets/Adminpanel-wZGtsPD-.js +1 -0
  4. package/dist/interface/assets/Automation-Dj6xmGae.js +3 -0
  5. package/dist/interface/assets/AutomationImport-Ccnxyslc.js +2 -0
  6. package/dist/interface/assets/AutomationStore-DmbxA0ml.js +2 -0
  7. package/dist/interface/assets/AutomationStoreDetail-DcbvD8g5.js +2 -0
  8. package/dist/interface/assets/Automations-C9JJO6dy.js +2 -0
  9. package/dist/interface/assets/Camera-D_j0J3kB.js +2 -0
  10. package/dist/interface/assets/CameraConsole--hGg9Ye6.js +7 -0
  11. package/dist/interface/assets/Cameras-B2Tizr4Q.js +652 -0
  12. package/dist/interface/assets/Camview-Bh2UCnGC.js +1 -0
  13. package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
  14. package/dist/interface/assets/Config-Dn_s2M7r.js +2 -0
  15. package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-DQEYHVN5.js} +1 -1
  16. package/dist/interface/assets/ConfigActionDelay-C0mbjCCj.js +1 -0
  17. package/dist/interface/assets/ConfigActionHttp-Bf58WHcw.js +1 -0
  18. package/dist/interface/assets/ConfigActionImageInput-CDXVFrOz.js +1 -0
  19. package/dist/interface/assets/ConfigActionMqtt-lH7MQqWr.js +1 -0
  20. package/dist/interface/assets/ConfigActionNotification-CAkr6NJX.js +1 -0
  21. package/dist/interface/assets/ConfigActionNotificationControl-CiL-4Ytw.js +1 -0
  22. package/dist/interface/assets/ConfigActionOutput-ILAxBT-r.js +1 -0
  23. package/dist/interface/assets/ConfigActionPlugin-B2d4mZiK.js +1 -0
  24. package/dist/interface/assets/ConfigActionSensor-BxMdsmRa.js +1 -0
  25. package/dist/interface/assets/ConfigActionSnapshot-CXVQBSzv.js +1 -0
  26. package/dist/interface/assets/ConfigActionVariable-CABnlnMv.js +1 -0
  27. package/dist/interface/assets/ConfigConditionIfElse-Cxu7TSdJ.js +1 -0
  28. package/dist/interface/assets/ConfigConditionSensorState-rB7I04Gb.js +1 -0
  29. package/dist/interface/assets/ConfigConditionSwitch-CU0hLo1h.js +1 -0
  30. package/dist/interface/assets/ConfigConditionTime-DfeEvxIU.js +1 -0
  31. package/dist/interface/assets/ConfigSensorValueInput-wXiyU3Sc.js +1 -0
  32. package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-DFJpuWrs.js} +1 -1
  33. package/dist/interface/assets/ConfigTriggerGeofence-CZwesOD8.js +1 -0
  34. package/dist/interface/assets/ConfigTriggerManual-aibwYUtf.js +1 -0
  35. package/dist/interface/assets/ConfigTriggerMqtt-CUNgifGb.js +1 -0
  36. package/dist/interface/assets/ConfigTriggerSchedule-8Y_OBcB1.js +1 -0
  37. package/dist/interface/assets/ConfigTriggerSensor-Bu-YtGnX.js +1 -0
  38. package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-CXNvmC4S.js} +1 -1
  39. package/dist/interface/assets/ConfigTriggerWebhook-CkZ-_ABi.js +1 -0
  40. package/dist/interface/assets/Console-CG8eRDA4.js +1 -0
  41. package/dist/interface/assets/CuiAutomationRunsDialog-Ux0g-E3w.js +1 -0
  42. package/dist/interface/assets/CuiBottomSheet-C-ZN_uXE.js +1 -0
  43. package/dist/interface/assets/CuiBottomSheet-RUyuBxJZ.js +1 -0
  44. package/dist/interface/assets/CuiCameraPipCard-B-B6Ppsd.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-DqVdR9uS.js +1 -0
  46. package/dist/interface/assets/CuiCameraShares-DstoVjf9.js +1 -0
  47. package/dist/interface/assets/CuiCameraTable-BHaCRB65.js +2 -0
  48. package/dist/interface/assets/CuiDataTable-CTT9IFeR.js +1 -0
  49. package/dist/interface/assets/CuiLightControl-B_JIzm9t.js +1 -0
  50. package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
  51. package/dist/interface/assets/CuiList-CDed3qXV.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-7aXQznrX.js +2 -0
  55. package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-C2Y8x73q.js} +1 -1
  56. package/dist/interface/assets/CuiPluginOAuthButton-CCzRlZP6.js +2 -0
  57. package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-C8qBdLCg.js} +1 -1
  58. package/dist/interface/assets/CuiQRCode-D52Fcu61.js +1 -0
  59. package/dist/interface/assets/CuiRecordingsGrid-CfuihmlY.js +1 -0
  60. package/dist/interface/assets/CuiSchema-DTIuxROi.js +1 -0
  61. package/dist/interface/assets/CuiTopNavbarItem-CoTQmfY7.js +1 -0
  62. package/dist/interface/assets/Faces-EtBPS1Ve.js +1 -0
  63. package/dist/interface/assets/FirstSteps-CC0BPH40.js +1 -0
  64. package/dist/interface/assets/Instances-dSYERqIc.js +1 -0
  65. package/dist/interface/assets/Logs-B8d6dEt7.js +6 -0
  66. package/dist/interface/assets/Menu-CejIVz_7.js +1 -0
  67. package/dist/interface/assets/OAuthDeviceFlow-YhwV_FSL.js +1 -0
  68. package/dist/interface/assets/Plugin-Brb6wfq-.js +1 -0
  69. package/dist/interface/assets/PluginConsole-CfyZQVq5.js +7 -0
  70. package/dist/interface/assets/PluginDetail-DVRnnauk.js +2 -0
  71. package/dist/interface/assets/PluginSchema-i6UJfMnh.js +1 -0
  72. package/dist/interface/assets/PluginSearch-C1YL9q00.js +1 -0
  73. package/dist/interface/assets/PluginSearch-PDx47aUx.js +2 -0
  74. package/dist/interface/assets/Plugins-CukJohcb.js +1 -0
  75. package/dist/interface/assets/Recordings-m6jxYvRI.js +1 -0
  76. package/dist/interface/assets/SensorEdit-BJAijbmc.js +1 -0
  77. package/dist/interface/assets/SensorHistory-DW00ZuHR.js +1 -0
  78. package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
  79. package/dist/interface/assets/Sensors-Lfafn19i.js +2 -0
  80. package/dist/interface/assets/Settings-DHT8KXi2.js +1 -0
  81. package/dist/interface/assets/SettingsAccount-DOd4JeGd.js +1 -0
  82. package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
  83. package/dist/interface/assets/SettingsAccount-vrwV9rtP.js +1 -0
  84. package/dist/interface/assets/SettingsAppearance-11UFhRDY.js +1 -0
  85. package/dist/interface/assets/SettingsAppearance-BaDwC_h_.js +1 -0
  86. package/dist/interface/assets/SettingsBackup-CBBZV_nU.js +1 -0
  87. package/dist/interface/assets/SettingsList-Dx9DHGq9.js +1 -0
  88. package/dist/interface/assets/SettingsMqtt-BglQ_GeN.js +1 -0
  89. package/dist/interface/assets/SettingsNotifications-96czeGDD.js +2 -0
  90. package/dist/interface/assets/SettingsPermissions-CU4OVllA.js +1 -0
  91. package/dist/interface/assets/SettingsRecordings-BrnU9hrb.js +1 -0
  92. package/dist/interface/assets/SettingsRemote-CwJw_9HX.js +1 -0
  93. package/dist/interface/assets/SettingsSystem-B3nne5fS.js +2 -0
  94. package/dist/interface/assets/SettingsUsers-CoYyAxxn.js +1 -0
  95. package/dist/interface/assets/Terminal-DMAHgufw.js +4 -0
  96. package/dist/interface/assets/VariableInput-BzWLKBgd.js +1 -0
  97. package/dist/interface/assets/VariableSuggestions-BdxcP_dn.js +1 -0
  98. package/dist/interface/assets/VersionsHandler-Dvy5Lv-E.js +7 -0
  99. package/dist/interface/assets/VirtualSensorCreate-BXz0lWNm.js +1 -0
  100. package/dist/interface/assets/Workers-DqeKkdpa.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-DmxTF6VE.js} +1 -1
  109. package/dist/interface/assets/api-milc5VEE.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-DwSrX8QL.js} +1 -1
  113. package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
  114. package/dist/interface/assets/automations-yVPQAmFo.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-JAiaenSf.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-QtPEpiS4.js +1 -0
  127. package/dist/interface/assets/{config-C2hgXHyj.js → config-BE0DnCXx.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-BQp77LdP.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-CqhwDjRG.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-D_shY0Ks.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-BuSNpaOJ.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-7pWXkYgo.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-DKWwojYm.js +1 -0
  171. package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
  172. package/dist/interface/assets/sensors-CLQG1mQt.js +1 -0
  173. package/dist/interface/assets/{server-CVSOthzT.js → server-Bv5NVJ0G.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-DsxRUmCC.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-Bw8H-UB4.js → types-BazOcNe_.js} +1 -1
  182. package/dist/interface/assets/types-CoXm85So.js +1 -0
  183. package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
  184. package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-oPpW7jcN.js} +1 -1
  185. package/dist/interface/assets/useBackupRestore-b0Niqql7.js +1 -0
  186. package/dist/interface/assets/useCameraOptions-uf9Kog6z.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-Dg8tFzam.js} +1 -1
  189. package/dist/interface/assets/useLogsSocket-9jJ-oJIm.js +5 -0
  190. package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-xL0VlbyD.js} +1 -1
  191. package/dist/interface/assets/useServerRestart-3AZOTz7i.js +1 -0
  192. package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-Dg-Djura.js} +1 -1
  193. package/dist/interface/assets/useUserOptions-BQnM3gdi.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-BqkrW4Bb.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-BQegq2Q6.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-DYzLjOFZ.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 +19 -2
  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 +2 -2
  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 -5
  474. package/dist/server/src/plugins/runtime/node/storageController.js +20 -28
  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 +18 -0
  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 +1 -3
  484. package/dist/server/src/plugins/runtime/python/storage_controller.py +19 -50
  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 +808 -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
@@ -1,11 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Callable
4
3
  from typing import TYPE_CHECKING, Any, Protocol, TypeAlias, runtime_checkable
5
4
 
6
5
  if TYPE_CHECKING:
7
- from ..observable import Disposable, Observable
8
- from ..sensor.base import Sensor, SensorLike, SensorType
6
+ from ..observable import Observable
7
+ from ..sensor.base import Sensor
9
8
  from ..storage import DeviceStorage, JsonSchema
10
9
  from ..types import LoggerService
11
10
 
@@ -15,7 +14,6 @@ from .config import (
15
14
  CameraPropertyObservableObject,
16
15
  CameraPublicProperties,
17
16
  CameraUiSettings,
18
- SensorEventData,
19
17
  )
20
18
  from .detection import CameraDetectionSettings, DetectionLine, DetectionZone, PtzAutotrackSettings
21
19
  from .enums import CameraRole, CameraType
@@ -247,18 +245,6 @@ class CameraDevice(Protocol):
247
245
  """Snapshot source (if available)."""
248
246
  ...
249
247
 
250
- def getSourceById(self, id: str) -> CameraDeviceSource | None:
251
- """
252
- Get a source by its ID.
253
-
254
- Args:
255
- id: The source ID.
256
-
257
- Returns:
258
- The matching source, or None if not found.
259
- """
260
- ...
261
-
262
248
  @property
263
249
  def connected(self) -> bool:
264
250
  """Whether camera is connected."""
@@ -280,117 +266,98 @@ class CameraDevice(Protocol):
280
266
  ...
281
267
 
282
268
  @property
283
- def logger(self) -> LoggerService:
284
- """Logger service for this camera."""
285
- ...
286
-
287
- async def connect(self) -> None:
269
+ def onDetectionEvent(self) -> Observable[DetectionEventPayload]:
288
270
  """
289
- Tell the server this camera is online.
271
+ Observable for detection events.
290
272
 
291
- Only the plugin that owns this camera (via pluginInfo) may connect it.
273
+ Emits 'start', 'update', 'end', 'segment-start', 'segment-update' and 'segment-end'.
274
+ Segments ride on the segment-* messages only, thumbnails on 'segment-start'
275
+ and 'segment-end'.
292
276
  """
293
277
  ...
294
278
 
295
- async def disconnect(self) -> None:
296
- """
297
- Tell the server this camera is offline.
298
-
299
- Only the plugin that owns this camera (via pluginInfo) may disconnect it.
300
- """
279
+ @property
280
+ def logger(self) -> LoggerService:
281
+ """Logger service for this camera."""
301
282
  ...
302
283
 
303
- def onPropertyChange(
304
- self, property: CameraPublicProperties | list[CameraPublicProperties]
305
- ) -> Observable[CameraPropertyObservableObject]:
284
+ def getSourceById(self, id: str) -> CameraDeviceSource | None:
306
285
  """
307
- Observe camera property changes.
286
+ Get a source by its ID.
308
287
 
309
288
  Args:
310
- property: Property name(s) to observe.
289
+ id: The source ID.
311
290
 
312
291
  Returns:
313
- Observable emitting old and new values.
292
+ The matching source, or None if not found.
314
293
  """
315
294
  ...
316
295
 
317
- def getSensors(self) -> list[SensorLike]:
318
- """Get all sensors attached to this camera (owned + foreign)."""
319
- ...
320
-
321
- def getSensor(self, sensorId: str) -> SensorLike | None:
322
- """Get sensor by ID (checks owned and foreign sensors)."""
323
- ...
324
-
325
- def getSensorsByType(self, sensorType: SensorType) -> list[SensorLike]:
326
- """Get all sensors of a specific type (owned + foreign)."""
327
- ...
328
-
329
- def onSensorProperty(
330
- self,
331
- sensor_type: SensorType,
332
- property: str,
333
- callback: Callable[[Any, int, SensorLike], None],
334
- ) -> Disposable:
296
+ def createStorage(self, schemas: list[JsonSchema]) -> DeviceStorage:
335
297
  """
336
- Subscribe to a specific property on a sensor type with full lifecycle management.
337
- Automatically subscribes/unsubscribes when sensors of the given type are added/removed.
298
+ Create storage for plugin-specific camera configuration.
338
299
 
339
300
  Args:
340
- sensor_type: The sensor type to watch.
341
- property: The property name to observe.
342
- callback: Called with (value, timestamp_ms, sensor) when the property changes.
301
+ schemas: Schema definitions for the storage.
343
302
 
344
303
  Returns:
345
- Disposable to stop all subscriptions.
304
+ Typed device storage instance.
346
305
  """
347
306
  ...
348
307
 
349
- async def addSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
308
+ async def connect(self) -> None:
350
309
  """
351
- Add a sensor to this camera.
310
+ Tell the server this camera is online.
352
311
 
353
- Args:
354
- sensor: Sensor instance to add.
312
+ Only the plugin that owns this camera (via pluginInfo) may connect it.
355
313
  """
356
314
  ...
357
315
 
358
- async def removeSensor(self, sensorId: str) -> None:
316
+ async def disconnect(self) -> None:
359
317
  """
360
- Remove a sensor from this camera.
318
+ Tell the server this camera is offline.
361
319
 
362
- Args:
363
- sensorId: ID of sensor to remove.
320
+ Only the plugin that owns this camera (via pluginInfo) may disconnect it.
364
321
  """
365
322
  ...
366
323
 
367
- @property
368
- def onSensorAdded(self) -> Observable[SensorEventData]:
324
+ def onPropertyChange(
325
+ self, property: CameraPublicProperties | list[CameraPublicProperties]
326
+ ) -> Observable[CameraPropertyObservableObject]:
369
327
  """
370
- Observable for sensor additions.
328
+ Observe camera property changes.
371
329
 
372
- Emits for this plugin's own sensors and for other plugins' sensors whose type is
373
- listed in contract.consumes. Also emits when such a sensor is activated for this camera.
330
+ Args:
331
+ property: Property name(s) to observe.
332
+
333
+ Returns:
334
+ Observable emitting old and new values.
374
335
  """
375
336
  ...
376
337
 
377
- @property
378
- def onSensorRemoved(self) -> Observable[SensorEventData]:
338
+ async def addSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
379
339
  """
380
- Observable for sensor removals.
340
+ Register a sensor that belongs to this camera's hardware (spotlight,
341
+ siren, PTZ, battery, ...). The host assigns it to this camera and
342
+ reconciles it across restarts like a standalone sensor.
343
+
344
+ Registering here declares "this sensor belongs to this camera and no
345
+ other": the assignment is locked, users cannot re-assign it. For
346
+ sensors the user should assign freely, register via
347
+ ``sensorManager.addSensor()`` instead.
381
348
 
382
- Emits for this plugin's own sensors and for other plugins' sensors on this camera.
383
- Also emits when a sensor is deactivated for this camera.
349
+ Args:
350
+ sensor: Sensor instance to register.
384
351
  """
385
352
  ...
386
353
 
387
- @property
388
- def onDetectionEvent(self) -> Observable[DetectionEventPayload]:
354
+ async def removeSensor(self, sensorId: str) -> None:
389
355
  """
390
- Observable for detection events.
356
+ Unregister a sensor this plugin registered on this camera. The
357
+ persisted entity stays (shows disconnected) unless the user deletes it.
391
358
 
392
- Emits 'start', 'update', 'end', 'segment-start', 'segment-update' and 'segment-end'.
393
- Segments only ride on the segment-* events, start/update/end carry an empty segment list.
359
+ Args:
360
+ sensorId: ID of sensor to unregister.
394
361
  """
395
362
  ...
396
363
 
@@ -402,52 +369,45 @@ class CameraDevice(Protocol):
402
369
  or both.
403
370
 
404
371
  Args:
405
- impl: Object or class implementing camera interfaces
406
- """
407
- ...
408
-
409
- def createStorage(self, schemas: list[JsonSchema]) -> DeviceStorage:
410
- """
411
- Create storage for plugin-specific camera configuration.
412
-
413
- Args:
414
- schemas: Schema definitions for the storage
415
-
416
- Returns:
417
- Typed device storage instance
372
+ impl: Object or class implementing camera interfaces.
418
373
  """
419
374
  ...
420
375
 
421
376
 
422
377
  @runtime_checkable
423
378
  class StreamingInterface(Protocol):
379
+ """Optional implementation that provides stream URLs."""
380
+
424
381
  async def streamUrl(self, source_id: str) -> str:
425
382
  """
426
383
  Get the streaming URL for a source.
427
384
 
428
385
  Args:
429
- source_id: The ID of the source
386
+ source_id: The ID of the source.
430
387
 
431
388
  Returns:
432
- The streaming URL (e.g., rtsp://, rtmp://, or custom protocol)
389
+ The streaming URL (e.g. rtsp://, rtmp://, or custom protocol).
433
390
  """
434
391
  ...
435
392
 
436
393
 
437
394
  @runtime_checkable
438
395
  class SnapshotInterface(Protocol):
396
+ """Optional implementation that provides snapshots."""
397
+
439
398
  async def snapshot(self, source_id: str, force_new: bool = False) -> bytes | None:
440
399
  """
441
400
  Get a snapshot image from the camera.
442
401
 
443
402
  Args:
444
- source_id: The source ID to get the snapshot from
445
- force_new: If True, bypass cache and get a fresh snapshot
403
+ source_id: The source ID to get the snapshot from.
404
+ force_new: If True, bypass cache and get a fresh snapshot.
446
405
 
447
406
  Returns:
448
- Image data as bytes, or None if unavailable
407
+ Image data as bytes, or None if unavailable.
449
408
  """
450
409
  ...
451
410
 
452
411
 
453
412
  CameraImplementation: TypeAlias = StreamingInterface | SnapshotInterface
413
+ """Value accepted by CameraDevice.implement: streaming, snapshot, or both."""
@@ -92,7 +92,8 @@ class EventSegment(TypedDict):
92
92
  lastSeen: int
93
93
  """Segment end time (Unix ms)."""
94
94
  thumbnail: NotRequired[bytes]
95
- """Best-selected JPEG scene thumbnail for this segment. Only present on 'segment-*' messages."""
95
+ """Best-selected JPEG scene thumbnail for this segment. Present on 'segment-start' and
96
+ 'segment-end', plus once on a 'segment-update' if the start message had none."""
96
97
  detections: list[EventDetection]
97
98
  """Object detections in this segment."""
98
99
  attributes: list[EventAttribute]
@@ -130,7 +131,7 @@ class DetectionEvent(TypedDict):
130
131
  segmentIndex: NotRequired[int]
131
132
  """Index of the segment in segments[0] for segment-* messages."""
132
133
  expectedEndTime: NotRequired[int]
133
- """Expected event end time (Unix ms) the latest dwell expiry across all
134
+ """Expected event end time (Unix ms): the latest dwell expiry across all
134
135
  currently-active triggers. Monotonically non-decreasing during the event
135
136
  lifetime. Updated on each `update` / `segment-*` message."""
136
137
  thumbnail: NotRequired[bytes]
@@ -38,6 +38,8 @@ class CameraFrameWorkerSettings(TypedDict):
38
38
  """Capture event thumbnails from the highest-resolution source."""
39
39
  decoder: NotRequired[FrameWorkerDecoderSettings]
40
40
  """Decoder hardware selection. Applies on the machine that decodes this camera (master or assigned worker); an unusable selection falls back to auto."""
41
+ workerDecoder: NotRequired[FrameWorkerDecoderSettings]
42
+ """Decoder hardware selection used instead of `decoder` while this camera decodes on its assigned worker. Falls back to `decoder` when omitted."""
41
43
 
42
44
 
43
45
  class SnapshotSettings(TypedDict):
@@ -1,14 +1,3 @@
1
- """Internal SDK symbols.
2
-
3
- This subpackage exposes symbols used by the camera.ui server runtime and
4
- SDK internals but NOT part of the public plugin API. Plugin authors should
5
- not import from ``camera_ui_sdk.internal``; the contents may change without
6
- deprecation.
7
-
8
- Symbols are re-exported lazily via ``__getattr__`` to avoid circular imports
9
- during SDK bootstrap. Consumers can still ``from camera_ui_sdk.internal import X``.
10
- """
11
-
12
1
  from __future__ import annotations
13
2
 
14
3
  from typing import TYPE_CHECKING, Any
@@ -22,16 +11,14 @@ if TYPE_CHECKING:
22
11
  from .sensor_rpc import (
23
12
  CapabilityUpdateFn,
24
13
  PropertyChangedEvent,
25
- PropertyChangeListener,
26
14
  PropertyUpdateFn,
27
15
  SensorJSON,
28
16
  )
29
- from .sensor_triggers import SENSOR_TRIGGER_TYPES
30
17
  from .shared_utils import is_equal
31
18
  from .streaming_internal import IceServer
32
19
 
33
20
  __all__ = [
34
- # AsyncEventEmitter
21
+ # Events
35
22
  "AsyncEventEmitter",
36
23
  # Manager
37
24
  "ConnectionStatus",
@@ -39,13 +26,10 @@ __all__ = [
39
26
  # Sensor wire-format / RPC
40
27
  "SensorJSON",
41
28
  "PropertyChangedEvent",
42
- "PropertyChangeListener",
43
29
  "PropertyUpdateFn",
44
30
  "CapabilityUpdateFn",
45
31
  # Camera wire-format
46
32
  "DetectionEventMessage",
47
- # Sensor triggers
48
- "SENSOR_TRIGGER_TYPES",
49
33
  # Streaming
50
34
  "IceServer",
51
35
  # Camera enums
@@ -58,18 +42,16 @@ __all__ = [
58
42
  "is_equal",
59
43
  ]
60
44
 
61
- # Map of public name -> (submodule, attribute_name) for lazy loading.
45
+ # public name (submodule, attribute), resolved lazily to avoid circular imports during SDK bootstrap
62
46
  _LAZY: dict[str, tuple[str, str]] = {
63
47
  "AsyncEventEmitter": (".event_emitter", "AsyncEventEmitter"),
64
48
  "ConnectionStatus": (".manager_rpc", "ConnectionStatus"),
65
49
  "DiscoveredCameraWithState": (".manager_rpc", "DiscoveredCameraWithState"),
66
50
  "SensorJSON": (".sensor_rpc", "SensorJSON"),
67
51
  "PropertyChangedEvent": (".sensor_rpc", "PropertyChangedEvent"),
68
- "PropertyChangeListener": (".sensor_rpc", "PropertyChangeListener"),
69
52
  "PropertyUpdateFn": (".sensor_rpc", "PropertyUpdateFn"),
70
53
  "CapabilityUpdateFn": (".sensor_rpc", "CapabilityUpdateFn"),
71
54
  "DetectionEventMessage": (".camera_wire", "DetectionEventMessage"),
72
- "SENSOR_TRIGGER_TYPES": (".sensor_triggers", "SENSOR_TRIGGER_TYPES"),
73
55
  "IceServer": (".streaming_internal", "IceServer"),
74
56
  "FrameType": (".camera_enums", "FrameType"),
75
57
  "CameraFrameWorkerDecoder": (".camera_enums", "CameraFrameWorkerDecoder"),
@@ -20,7 +20,7 @@ class CameraInputSettings(TypedDict):
20
20
  hotMode: bool
21
21
  """Keep connection always active."""
22
22
  preload: bool
23
- """Buffer the last keyframe group so new viewers get a picture faster."""
23
+ """Keep a keyframe cache for this source, so the view opens faster. Use ``hotMode`` to keep the stream connected."""
24
24
  muted: NotRequired[bool]
25
25
  """Strip the audio track from this source (defaults to False)."""
26
26
  urls: list[str]
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Literal
4
4
 
5
- CameraFrameWorkerDecoder = Literal["wasm", "rust"]
6
- """Frame worker decoder implementation."""
7
-
8
5
  FrameType = Literal["stream", "motion"]
9
6
  """Frame type identifier for frame workers."""
7
+
8
+ CameraFrameWorkerDecoder = Literal["wasm", "rust"]
9
+ """Frame worker decoder implementation."""
@@ -1,14 +1,3 @@
1
- """Generic event-listener registry for camera.ui.
2
-
3
- Provides :class:`AsyncEventEmitter`, an event-name keyed listener
4
- registry that supports both sync and async handlers. Handlers are
5
- registered via :meth:`AsyncEventEmitter.on` /
6
- :meth:`AsyncEventEmitter.once`, removed via
7
- :meth:`AsyncEventEmitter.remove_listener` /
8
- :meth:`AsyncEventEmitter.remove_all_listeners`, and invoked through
9
- :meth:`AsyncEventEmitter.emit`.
10
- """
11
-
12
1
  from __future__ import annotations
13
2
 
14
3
  import asyncio
@@ -18,18 +7,12 @@ from typing import Any
18
7
 
19
8
 
20
9
  class AsyncEventEmitter:
21
- """Generic event-listener registry that accepts sync and async handlers.
10
+ """Event-listener registry that accepts sync and async handlers.
22
11
 
23
- Listeners are keyed by event name and invoked in registration order
24
- by :meth:`emit`. Async handlers are scheduled via ``ensure_future``
25
- (fire-and-forget) and tracked so they can be cancelled with
26
- :meth:`cancel`.
12
+ Listeners are keyed by event name and invoked in registration order. Async
13
+ handlers are scheduled fire-and-forget and tracked so :meth:`cancel` can stop them.
27
14
  """
28
15
 
29
- @staticmethod
30
- def _normalize_event(event: Any) -> str:
31
- return event.value if hasattr(event, "value") else str(event)
32
-
33
16
  def __init__(self) -> None:
34
17
  self._events: dict[str, OrderedDict[Callable[..., Any], Callable[..., Any]]] = {}
35
18
  self._waiting: set[asyncio.Future[Any]] = set()
@@ -45,7 +28,7 @@ class AsyncEventEmitter:
45
28
  return f
46
29
 
47
30
  def once(self, event: str, f: Callable[..., Any]) -> Callable[..., Any]:
48
- """Register a one-shot listener that is invoked the next time *event* is emitted and then removed automatically."""
31
+ """Register a one-shot listener that runs on the next emission of *event*, then removes itself."""
49
32
  event = self._normalize_event(event)
50
33
 
51
34
  def wrapper(*args: Any, **kwargs: Any) -> Any:
@@ -89,11 +72,10 @@ class AsyncEventEmitter:
89
72
  ) -> bool:
90
73
  """Invoke every listener registered for *event* and wait for async handlers to settle.
91
74
 
92
- Handler exceptions are passed to *on_error* instead of propagating,
93
- so one failing listener never blocks the others. Returns ``True``
94
- when every handler settled within *timeout* seconds, ``False`` if
95
- some were still pending when the timeout elapsed (they keep running
96
- and remain cancellable via :meth:`cancel`).
75
+ Handler exceptions go to *on_error* instead of propagating, so one failing
76
+ listener never blocks the others. Returns ``False`` if handlers were still
77
+ pending after *timeout* seconds, they keep running and stay cancellable
78
+ via :meth:`cancel`.
97
79
  """
98
80
  event = self._normalize_event(event)
99
81
  listeners = self._events.get(event)
@@ -145,3 +127,8 @@ class AsyncEventEmitter:
145
127
  for future in self._waiting:
146
128
  future.cancel()
147
129
  self._waiting.clear()
130
+
131
+ @staticmethod
132
+ def _normalize_event(event: Any) -> str:
133
+ """Accept both plain event names and enum members."""
134
+ return event.value if hasattr(event, "value") else str(event)
@@ -9,12 +9,9 @@ ConnectionStatus = Literal["idle", "connecting", "connected", "error"]
9
9
 
10
10
 
11
11
  class DiscoveredCameraWithState(DiscoveredCamera):
12
- """
13
- Discovered camera with provider and connection state.
12
+ """Discovered camera plus the provider that found it and its live connection state.
14
13
 
15
- Extended version of ``DiscoveredCamera`` used by the UI to render the
16
- adoption list — adds the provider plugin name and a live connection
17
- status so users see whether the camera is currently reachable.
14
+ Used by the UI to render the adoption list.
18
15
  """
19
16
 
20
17
  provider: str
@@ -56,34 +56,49 @@ if TYPE_CHECKING:
56
56
  class PropertyChangedEvent(TypedDict):
57
57
  """Emitted when a sensor property value changes."""
58
58
 
59
- cameraId: str
60
59
  sensorId: str
60
+ """Sensor that changed."""
61
61
  sensorType: SensorType
62
+ """Type of the sensor that changed."""
62
63
  property: str
64
+ """Property key that changed."""
63
65
  value: object
66
+ """New value."""
64
67
  previousValue: NotRequired[object]
68
+ """Value before the change, absent on the first write."""
65
69
  timestamp: int
70
+ """Change time in epoch milliseconds."""
66
71
 
67
72
 
68
- # @internal Callback used to propagate property updates to the backend via RPC.
69
- # Receives a partial-state delta (only properties that actually changed). One callback
70
- # invocation per `_writeState` call — atomic from the receiver's perspective.
71
73
  PropertyUpdateFn = Callable[[dict[str, Any]], None]
72
- PropertyChangeListener = Callable[[PropertyChangedEvent], None]
74
+ """Receives a partial-state delta, one call per ``_write_state``."""
75
+
73
76
  CapabilityUpdateFn = Callable[[list[str]], None]
77
+ """Receives the full capability list whenever it changes."""
74
78
 
75
79
 
76
80
  class SensorJSON(TypedDict):
77
81
  """JSON-serializable representation of a sensor for RPC transport."""
78
82
 
79
83
  id: str
84
+ """Sensor ID."""
80
85
  type: SensorType
86
+ """Sensor type."""
81
87
  name: str
88
+ """Internal name."""
82
89
  displayName: str
90
+ """Name shown in the UI."""
83
91
  category: SensorCategory
84
- cameraId: str
92
+ """Category the sensor belongs to."""
93
+ nativeId: NotRequired[str]
94
+ """Device ID assigned by the plugin."""
85
95
  pluginId: NotRequired[str]
96
+ """Plugin that owns the sensor."""
86
97
  properties: dict[str, Any]
98
+ """Current property values."""
87
99
  capabilities: NotRequired[list[str]]
100
+ """Capability keys the sensor reports."""
88
101
  requiresFrames: NotRequired[bool]
102
+ """Sensor needs a frame feed to work."""
89
103
  modelSpec: NotRequired[ModelSpec]
104
+ """Model the sensor runs, for ML-backed sensors."""
@@ -4,39 +4,30 @@ from typing import Any
4
4
 
5
5
 
6
6
  def is_equal(first: Any, second: Any, ignore_order: bool = False) -> bool:
7
- """
8
- Deep equality check for arbitrary values.
9
-
10
- Recursively compares primitives, lists, and dicts. Dict comparison
11
- ignores key declaration order (only key/value pairs matter). Set
12
- ``ignore_order`` to ``True`` to compare lists as multisets, i.e.
13
- ignoring element order.
14
-
15
- Typically used for property-change detection on sensors: a property
16
- update is only emitted when the new value is not deeply equal to the
17
- previous value, which avoids redundant events for unchanged data.
7
+ """Deep equality for primitives, lists, and dicts. Dict key order never matters.
18
8
 
19
9
  Args:
20
10
  first: First value to compare.
21
11
  second: Second value to compare.
22
- ignore_order: If ``True``, lists are compared ignoring element order.
12
+ ignore_order: Compare lists as multisets instead of position by position.
23
13
 
24
14
  Returns:
25
15
  ``True`` if the values are deeply equal.
16
+
17
+ Example:
18
+ ```python
19
+ is_equal({"a": 1, "b": 2}, {"b": 2, "a": 1}) # True
20
+ ```
26
21
  """
27
- # Same reference or both primitive and equal
28
22
  if first is second:
29
23
  return True
30
24
 
31
- # Handle None
32
25
  if first is None or second is None:
33
26
  return first is second
34
27
 
35
- # Different types
36
28
  if type(first) is not type(second):
37
29
  return False
38
30
 
39
- # List comparison
40
31
  if isinstance(first, list):
41
32
  if len(first) != len(second): # pyright: ignore[reportUnknownArgumentType]
42
33
  return False
@@ -58,7 +49,6 @@ def is_equal(first: Any, second: Any, ignore_order: bool = False) -> bool:
58
49
  for i, item in enumerate(first) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
59
50
  )
60
51
 
61
- # Dict comparison
62
52
  if isinstance(first, dict):
63
53
  if len(first) != len(second): # pyright: ignore[reportUnknownArgumentType]
64
54
  return False
@@ -69,5 +59,4 @@ def is_equal(first: Any, second: Any, ignore_order: bool = False) -> bool:
69
59
  return False
70
60
  return True
71
61
 
72
- # Primitive comparison (fallback)
73
62
  return bool(first == second)