@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
@@ -1,12 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Any, Literal, NotRequired, Protocol, TypedDict, runtime_checkable
3
+ from typing import (
4
+ TYPE_CHECKING,
5
+ Any,
6
+ Literal,
7
+ NotRequired,
8
+ Protocol,
9
+ TypedDict,
10
+ runtime_checkable,
11
+ )
4
12
 
5
13
  if TYPE_CHECKING:
6
14
  from ..camera import CameraDevice
7
15
  from ..observable import Observable
8
16
  from ..plugin import BasePlugin, PluginInfo, PluginInterface
9
17
  from ..plugin.notifier import Notification
18
+ from ..sensor.base import Sensor
10
19
 
11
20
 
12
21
  class CoreManagerEvent(TypedDict):
@@ -50,6 +59,18 @@ class CoreManager(Protocol):
50
59
  ```
51
60
  """
52
61
 
62
+ @property
63
+ def onEvent(self) -> Observable[CoreManagerEvent]:
64
+ """
65
+ Observable for core manager events (e.g. cloud account changes).
66
+
67
+ Example:
68
+ ```python
69
+ api.coreManager.onEvent.subscribe(lambda e: print(e["type"], e["data"]))
70
+ ```
71
+ """
72
+ ...
73
+
53
74
  async def connectToPlugin(self, pluginName: str) -> BasePlugin | None:
54
75
  """
55
76
  Connect to another plugin by name.
@@ -107,15 +128,57 @@ class CoreManager(Protocol):
107
128
  """
108
129
  ...
109
130
 
110
- @property
111
- def onEvent(self) -> Observable[CoreManagerEvent]:
131
+
132
+ @runtime_checkable
133
+ class SensorManager(Protocol):
134
+ """
135
+ Sensor manager for standalone sensors: devices that are not part of a
136
+ camera's hardware (smart plugs, imported smart-home devices, hubs).
137
+
138
+ The host persists each sensor as its own entity: the user assigns it to
139
+ cameras, renames it and decides whether it is exported or not.
140
+ Sensors that belong to a camera's hardware are registered via
141
+ ``camera.addSensor()`` instead.
142
+
143
+ Accessed via `api.sensorManager` in plugins.
144
+
145
+ Example:
146
+ ```python
147
+ lock = LockControl("Front Door", native_id="lock.front_door")
148
+ await api.sensorManager.addSensor(lock)
149
+ ```
150
+ """
151
+
152
+ async def addSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
112
153
  """
113
- Observable for core manager events (e.g. cloud account changes).
154
+ Register a standalone sensor with the host.
114
155
 
115
- Example:
116
- ```python
117
- api.coreManager.onEvent.subscribe(lambda e: print(e["type"], e["data"]))
118
- ```
156
+ The host reconciles it against the persisted entity by
157
+ ``(pluginId, nativeId)``, or by ``(type, name)`` when no native_id is
158
+ set, and replaces the sensor's provisional ``id`` with the persistent
159
+ entity id. Camera assignment is the user's decision and happens in the UI.
160
+
161
+ Args:
162
+ sensor: Sensor instance to register
163
+ """
164
+ ...
165
+
166
+ async def removeSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
167
+ """
168
+ Unregister a sensor. The persisted entity stays (shows disconnected)
169
+ unless the user deletes it in the UI.
170
+
171
+ Args:
172
+ sensor: Sensor instance to unregister
173
+ """
174
+ ...
175
+
176
+ def getSensors(self) -> list[Sensor[Any, Any, Any]]:
177
+ """
178
+ Get all sensors this plugin has registered in this session.
179
+
180
+ Returns:
181
+ Sensor instances owned by this plugin
119
182
  """
120
183
  ...
121
184
 
@@ -124,7 +187,7 @@ class CoreManager(Protocol):
124
187
  class DeviceManager(Protocol):
125
188
  """
126
189
  Device manager interface for camera operations.
127
- Provides methods to get cameras and push discovered cameras.
190
+ Provides methods to push discovered cameras and get camera devices.
128
191
 
129
192
  Accessed via `api.deviceManager` in plugins.
130
193
 
@@ -143,7 +206,8 @@ class DeviceManager(Protocol):
143
206
  """
144
207
  Push discovered cameras to the backend.
145
208
  Use this when cameras are discovered asynchronously (e.g., after cloud login).
146
- Cameras will be immediately visible in the UI for adoption.
209
+ Cameras become visible in the UI without waiting for the next poll.
210
+ Only available for CameraController and CameraAndSensorProvider plugins.
147
211
 
148
212
  Args:
149
213
  cameras: List of discovered cameras to push
@@ -196,21 +260,21 @@ class CreateDownloadOptions(TypedDict):
196
260
  """Absolute path to the file on disk."""
197
261
 
198
262
  filename: NotRequired[str]
199
- """Filename for Content-Disposition header."""
263
+ """Filename for Content-Disposition header (defaults to basename of filePath)."""
200
264
 
201
265
  mimeType: NotRequired[str]
202
- """MIME type for Content-Type header."""
266
+ """MIME type for Content-Type header (defaults to application/octet-stream)."""
203
267
 
204
268
  ttlMs: NotRequired[int]
205
- """Time-to-live in milliseconds."""
269
+ """Time-to-live in milliseconds (defaults to 10 minutes)."""
206
270
 
207
271
  cleanup: NotRequired[Literal["never", "on-expiry", "on-download"]]
208
272
  """When the file on disk is deleted (registry always expires at TTL).
209
273
 
210
274
  - ``never`` (default): file persists; caller manages it.
211
275
  - ``on-expiry``: deleted at TTL. Can be fetched N times during the
212
- window correct mode for notification images that fan out to
213
- multiple devices/recipients.
276
+ window, the right mode for notification images that fan out to
277
+ multiple devices or recipients.
214
278
  - ``on-download``: deleted after first successful download OR on TTL,
215
279
  whichever first. One-shot mode for things like backup exports."""
216
280
 
@@ -235,10 +299,10 @@ class DownloadToken(TypedDict):
235
299
  publicUrl: str
236
300
  """Externally-reachable, session-less URL the server publishes for
237
301
  out-of-band fetchers (push-notification image attachments, FCM / APNs
238
- payloads, share recipients). Shape: ``<externalUrl>/api/download/<token>``
239
- the token in the URL is the auth. Empty string when the server has
240
- no external URL configured (LAN-only deployments); fall back to
241
- ``url`` for in-app callers."""
302
+ payloads, share recipients). Shape: ``<externalUrl>/api/download/<token>``,
303
+ where the token is the auth. Empty string when the server has no external
304
+ URL configured (LAN-only deployments); fall back to ``url`` for in-app
305
+ callers."""
242
306
 
243
307
  expiresAt: int
244
308
  """Unix timestamp (ms) when the token expires."""
@@ -249,8 +313,8 @@ class DownloadManager(Protocol):
249
313
  """
250
314
  Download manager interface for token-based file downloads.
251
315
 
252
- Allows plugins to register files for HTTP download via a token URL.
253
- No JWT authentication is needed — the token itself is the auth.
316
+ Plugins register a file and get back a token URL. No JWT is involved, the
317
+ token itself is the auth.
254
318
 
255
319
  Accessed via ``api.downloadManager`` in plugins.
256
320
 
@@ -310,11 +374,10 @@ class NotificationManager(Protocol):
310
374
  """
311
375
  Notification manager interface for publishing notifications into the host.
312
376
 
313
- Plugins call ``publish`` to ask the host to fan a Notification out to
314
- every installed Notifier-plugin and the
315
- in-app UI. The host applies user settings (master toggle, per-source
316
- toggle, quiet hours) and the publishing plugin's declared capabilities;
317
- calls from plugins without
377
+ Plugins call ``publish`` to ask the host to fan a Notification out to every
378
+ installed Notifier-plugin and the in-app UI. The host applies user settings
379
+ (master toggle, per-source toggle, quiet hours) and the publishing plugin's
380
+ declared capabilities; calls from plugins without
318
381
  :attr:`PluginCapability.PublishNotifications` are silently dropped.
319
382
 
320
383
  Accessed via ``api.notificationManager`` in plugins.
@@ -339,8 +402,7 @@ class NotificationManager(Protocol):
339
402
  Notifier-plugin and the in-app UI.
340
403
 
341
404
  Resolves once the publish was handed to the transport. Downstream
342
- delivery is async and failures there never
343
- propagate back here.
405
+ delivery is async and failures there never propagate back here.
344
406
 
345
407
  Args:
346
408
  notification: Notification payload to publish.
@@ -355,7 +417,7 @@ __all__ = [
355
417
  "DeviceManager",
356
418
  "DownloadManager",
357
419
  "NotificationManager",
358
- # Signed request
420
+ "SensorManager",
359
421
  # Download types
360
422
  "CreateDownloadOptions",
361
423
  "CreateStreamDownloadOptions",
@@ -1,10 +1,3 @@
1
- """Lightweight reactive primitives for camera.ui.
2
-
3
- Provides cold Observables, multicast Subjects (Subject, BehaviorSubject,
4
- ReplaySubject) and a small set of composable operators for building
5
- property-change notifications and event streams throughout the SDK.
6
- """
7
-
8
1
  from __future__ import annotations
9
2
 
10
3
  import asyncio
@@ -36,15 +29,25 @@ class Disposable:
36
29
 
37
30
  @property
38
31
  def closed(self) -> bool:
32
+ """Whether the subscription has already been disposed."""
39
33
  return self._closed
40
34
 
41
35
  def dispose(self) -> None:
36
+ """Detach the listener and run the producer teardown. Disposing twice is a no-op.
37
+
38
+ Example:
39
+ ```python
40
+ sub = sensor.onPropertyChanged.subscribe(handle)
41
+ sub.dispose()
42
+ ```
43
+ """
42
44
  if self._closed:
43
45
  return
44
46
  self._closed = True
45
47
  self._teardown()
46
48
 
47
49
  def unsubscribe(self) -> None:
50
+ """Alias for :meth:`dispose`, for rxjs-shaped call sites."""
48
51
  self.dispose()
49
52
 
50
53
 
@@ -61,10 +64,38 @@ class Observable(Generic[T]):
61
64
  self._subscribe_fn = subscribe_fn
62
65
 
63
66
  def subscribe(self, callback: Callable[[T], None]) -> Disposable:
64
- """Start the producer for this subscriber and route emitted values to ``callback``. Returns a :class:`Disposable` for stopping the stream."""
67
+ """Start the producer for this subscriber and route emitted values to ``callback``.
68
+
69
+ Args:
70
+ callback: Receiver invoked once per emitted value.
71
+
72
+ Returns:
73
+ Disposable that stops the stream and runs the producer teardown.
74
+
75
+ Example:
76
+ ```python
77
+ sub = sensor.onPropertyChanged.subscribe(handle)
78
+ ```
79
+ """
65
80
  return self._subscribe_fn(callback)
66
81
 
67
82
  def pipe(self, *operators: OperatorFn) -> Observable[Any]:
83
+ """Chain operators into a new Observable, each one fed by the previous.
84
+
85
+ Args:
86
+ operators: Operators applied left to right.
87
+
88
+ Returns:
89
+ Observable emitting the transformed values.
90
+
91
+ Example:
92
+ ```python
93
+ sensor.onPropertyChanged.pipe(
94
+ filter_op(lambda e: e["property"] == "detected"),
95
+ map_op(lambda e: e["value"]),
96
+ ).subscribe(handle)
97
+ ```
98
+ """
68
99
  result: Observable[Any] = self
69
100
  for op in operators:
70
101
  result = op(result)
@@ -75,7 +106,23 @@ class Observable(Generic[T]):
75
106
  on_next: Callable[[T], Awaitable[Any]] | None = None,
76
107
  on_error: Callable[[Exception], Awaitable[Any]] | None = None,
77
108
  ) -> Disposable:
78
- """Subscribe asynchronously to the observable sequence."""
109
+ """Subscribe with coroutine handlers. Each value spawns a task running ``on_next``.
110
+
111
+ A failing ``on_next`` disposes the subscription and hands the exception to
112
+ ``on_error``.
113
+
114
+ Args:
115
+ on_next: Coroutine invoked per emitted value.
116
+ on_error: Coroutine invoked once with the first exception raised.
117
+
118
+ Returns:
119
+ Disposable that cancels the pending tasks and the subscription.
120
+
121
+ Example:
122
+ ```python
123
+ sub = camera.onDetection.asubscribe(handle_detection)
124
+ ```
125
+ """
79
126
  error_future: asyncio.Future[Exception] = asyncio.Future()
80
127
  next_task: asyncio.Task[Any] | None = None
81
128
  error_task: asyncio.Task[Any] | None = None
@@ -113,7 +160,7 @@ class Observable(Generic[T]):
113
160
  return Disposable(cancel_subscription)
114
161
 
115
162
  async def __aiter__(self) -> AsyncIterator[T]:
116
- """Async iterator implementation."""
163
+ """Iterate emitted values. Values are buffered in a queue of 100; overflow is dropped."""
117
164
  queue: asyncio.Queue[T | None] = asyncio.Queue(maxsize=100)
118
165
  done = False
119
166
 
@@ -152,15 +199,27 @@ class Subject(Generic[T]):
152
199
 
153
200
  @property
154
201
  def closed(self) -> bool:
202
+ """Whether :meth:`complete` has already run."""
155
203
  return self._completed
156
204
 
157
205
  def next(self, value: T) -> None:
206
+ """Dispatch a value to every current subscriber, synchronously. No-op once completed.
207
+
208
+ Args:
209
+ value: Value to multicast.
210
+
211
+ Example:
212
+ ```python
213
+ subject.next("armed")
214
+ ```
215
+ """
158
216
  if self._completed:
159
217
  return
160
218
  for cb in list(self._subscribers):
161
219
  cb(value)
162
220
 
163
221
  def complete(self) -> None:
222
+ """Release every subscriber and lock the Subject. Later :meth:`next` calls are ignored."""
164
223
  if self._completed:
165
224
  return
166
225
  self._completed = True
@@ -170,29 +229,53 @@ class Subject(Generic[T]):
170
229
  for handler in handlers:
171
230
  handler()
172
231
 
173
- def _on_complete(self, handler: Callable[[], None]) -> Disposable:
174
- """Register a handler invoked once when this Subject completes. Runs
175
- immediately if already completed. Used by :func:`first_value_from`.
176
- """
177
- if self._completed:
178
- handler()
179
- return Disposable(lambda: None)
180
- self._complete_handlers.add(handler)
181
- return Disposable(lambda: self._complete_handlers.discard(handler))
182
-
183
232
  def subscribe(self, callback: Callable[[T], None]) -> Disposable:
233
+ """Register ``callback`` for every following value.
234
+
235
+ Args:
236
+ callback: Receiver invoked once per emitted value.
237
+
238
+ Returns:
239
+ Disposable that unregisters the callback.
240
+ """
184
241
  if self._completed:
185
242
  return Disposable(lambda: None)
186
243
  self._subscribers.add(callback)
187
244
  return Disposable(lambda: self._subscribers.discard(callback))
188
245
 
189
246
  def pipe(self, *operators: OperatorFn) -> Observable[Any]:
247
+ """Chain operators onto this Subject's read-only view.
248
+
249
+ Args:
250
+ operators: Operators applied left to right.
251
+
252
+ Returns:
253
+ Observable emitting the transformed values.
254
+ """
190
255
  return self.as_observable().pipe(*operators)
191
256
 
192
257
  def as_observable(self) -> Observable[T]:
193
- """Return a read-only :class:`Observable` that mirrors this Subject without exposing :meth:`next` or :meth:`complete`."""
258
+ """Return a read-only :class:`Observable` that mirrors this Subject without exposing :meth:`next` or :meth:`complete`.
259
+
260
+ Returns:
261
+ Read-only view of this Subject.
262
+
263
+ Example:
264
+ ```python
265
+ def on_event(self) -> Observable[Event]:
266
+ return self._events.as_observable()
267
+ ```
268
+ """
194
269
  return Observable(lambda cb: self.subscribe(cb))
195
270
 
271
+ def _on_complete(self, handler: Callable[[], None]) -> Disposable:
272
+ """Register a handler run once on completion, immediately if already completed."""
273
+ if self._completed:
274
+ handler()
275
+ return Disposable(lambda: None)
276
+ self._complete_handlers.add(handler)
277
+ return Disposable(lambda: self._complete_handlers.discard(handler))
278
+
196
279
 
197
280
  class BehaviorSubject(Subject[T]):
198
281
  """Subject seeded with an initial value that always remembers the latest emission.
@@ -207,18 +290,37 @@ class BehaviorSubject(Subject[T]):
207
290
  super().__init__()
208
291
  self._value = initial_value
209
292
 
293
+ @property
294
+ def value(self) -> T:
295
+ """The most recently emitted value."""
296
+ return self._value
297
+
210
298
  def next(self, value: T) -> None:
299
+ """Store ``value`` as the current one and dispatch it to every subscriber.
300
+
301
+ Args:
302
+ value: New current value.
303
+ """
211
304
  self._value = value
212
305
  super().next(value)
213
306
 
214
307
  def get_value(self) -> T:
215
- return self._value
308
+ """Read the current value without subscribing.
216
309
 
217
- @property
218
- def value(self) -> T:
310
+ Returns:
311
+ The most recently emitted value.
312
+ """
219
313
  return self._value
220
314
 
221
315
  def subscribe(self, callback: Callable[[T], None]) -> Disposable:
316
+ """Register ``callback`` and invoke it immediately with the current value.
317
+
318
+ Args:
319
+ callback: Receiver invoked once per emitted value.
320
+
321
+ Returns:
322
+ Disposable that unregisters the callback.
323
+ """
222
324
  disposable = super().subscribe(callback)
223
325
  if not self.closed:
224
326
  callback(self._value)
@@ -226,11 +328,10 @@ class BehaviorSubject(Subject[T]):
226
328
 
227
329
 
228
330
  class ReplaySubject(Subject[T]):
229
- """Subject that buffers up to the last ``buffer_size`` values
230
- (configurable, defaults to ``1``).
331
+ """Subject that buffers the last ``buffer_size`` values, 1 by default.
231
332
 
232
- New subscribers immediately receive every buffered value in order
233
- before continuing with live emissions.
333
+ New subscribers immediately receive every buffered value in order before
334
+ continuing with live emissions.
234
335
  """
235
336
 
236
337
  def __init__(self, buffer_size: int = 1) -> None:
@@ -239,6 +340,11 @@ class ReplaySubject(Subject[T]):
239
340
  self._buffer_size = buffer_size
240
341
 
241
342
  def next(self, value: T) -> None:
343
+ """Append ``value`` to the buffer, dropping the oldest entry past ``buffer_size``, then dispatch it.
344
+
345
+ Args:
346
+ value: Value to buffer and multicast.
347
+ """
242
348
  if self.closed:
243
349
  return
244
350
  self._buffer.append(value)
@@ -247,14 +353,19 @@ class ReplaySubject(Subject[T]):
247
353
  super().next(value)
248
354
 
249
355
  def subscribe(self, callback: Callable[[T], None]) -> Disposable:
356
+ """Replay the buffered values in order, then register ``callback`` for live emissions.
357
+
358
+ Args:
359
+ callback: Receiver invoked once per emitted value.
360
+
361
+ Returns:
362
+ Disposable that unregisters the callback.
363
+ """
250
364
  for value in self._buffer:
251
365
  callback(value)
252
366
  return super().subscribe(callback)
253
367
 
254
368
 
255
- # ── Operators ──────────────────────────────────────────────────────
256
-
257
-
258
369
  def _default_comparator(a: Any, b: Any) -> bool:
259
370
  return cast(bool, a == b)
260
371
 
@@ -479,17 +590,14 @@ def merge_map(project: Callable[[Any, int], list[Any]]) -> OperatorFn:
479
590
  return operator
480
591
 
481
592
 
482
- # ── Utilities ──────────────────────────────────────────────────────
483
-
484
-
485
593
  async def first_value_from(observable: Observable[T] | Subject[T]) -> T:
486
594
  """Subscribe to the source and return its first emitted value as a
487
595
  coroutine, then dispose the subscription.
488
596
 
489
597
  Raises ``RuntimeError`` if the source completes before emitting (Subject,
490
598
  BehaviorSubject, ReplaySubject). A bare :class:`Observable` has no
491
- completion signal, so the coroutine stays pending until it emits guard
492
- such calls with :func:`asyncio.wait_for` (or a timeout).
599
+ completion signal, so the coroutine stays pending until it emits; guard
600
+ such calls with :func:`asyncio.wait_for` or another timeout.
493
601
 
494
602
  Args:
495
603
  observable: Source observable or subject to read once.
@@ -530,7 +638,7 @@ async def first_value_from(observable: Observable[T] | Subject[T]) -> T:
530
638
 
531
639
  sub = observable.subscribe(on_next)
532
640
 
533
- # Already resolved synchronously (BehaviorSubject / ReplaySubject)
641
+ # already resolved synchronously (BehaviorSubject / ReplaySubject)
534
642
  if future.done():
535
643
  cleanup()
536
644
  return await future
@@ -1,7 +1,15 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from .api import API_EVENT, APIListener, PluginAPI
4
- from .contract import PluginCapability, PluginContract, PluginInfo, PluginInterface, PluginRole, PythonVersion
4
+ from .contract import (
5
+ PROTOCOL_LEVEL,
6
+ PluginCapability,
7
+ PluginContract,
8
+ PluginInfo,
9
+ PluginInterface,
10
+ PluginRole,
11
+ PythonVersion,
12
+ )
5
13
  from .helper import (
6
14
  can_create_cameras,
7
15
  can_provide_sensors_to_any_cameras,
@@ -52,6 +60,7 @@ from .oauth import (
52
60
  )
53
61
 
54
62
  __all__ = [
63
+ "PROTOCOL_LEVEL",
55
64
  "PythonVersion",
56
65
  "PluginInfo",
57
66
  "APIListener",