@camera.ui/server 2.1.11 → 2.1.13

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 (644) hide show
  1. package/dist/interface/assets/{404-B4_ZWIGx.js → 404-CVkDpT0X.js} +1 -1
  2. package/dist/interface/assets/{About-Cd8Ipr7a.js → About-CUgIR2xi.js} +1 -1
  3. package/dist/interface/assets/Automation-BYRKp0AC.js +3 -0
  4. package/dist/interface/assets/{AutomationImport-BTkkRikE.js → AutomationImport-L_OzZZgi.js} +2 -2
  5. package/dist/interface/assets/{AutomationStore-VdGEOwci.js → AutomationStore-DaNQqJoT.js} +2 -2
  6. package/dist/interface/assets/AutomationStoreDetail-Seor4Ohh.js +2 -0
  7. package/dist/interface/assets/Automations-BMQIkpUa.js +2 -0
  8. package/dist/interface/assets/Camera-3umh2Xjc.js +2 -0
  9. package/dist/interface/assets/{CameraConsole-KqRFGZzT.js → CameraConsole-BLlgkKDp.js} +2 -2
  10. package/dist/interface/assets/Cameras-DvK8E1Vk.js +651 -0
  11. package/dist/interface/assets/{Camview-Lp3QU0de.css → Camview-DIEa8IRE.css} +1 -1
  12. package/dist/interface/assets/Camview-DSO2lWxT.js +1 -0
  13. package/dist/interface/assets/{CertificateUpload-Dd4Ec7bt.js → CertificateUpload-BsnlaxRS.js} +1 -1
  14. package/dist/interface/assets/{Config-Db-Eh4Lf.js → Config-BXj83-No.js} +1 -1
  15. package/dist/interface/assets/{ConfigActionCameraControl-CbG-HEuU.js → ConfigActionCameraControl-BGfvT6ME.js} +1 -1
  16. package/dist/interface/assets/{ConfigActionDelay-BoGIhNHr.js → ConfigActionDelay-D10_C6yo.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionHttp-DyPo2XvQ.js → ConfigActionHttp-DL4jh9Wz.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionImageInput-C9aYztb6.js → ConfigActionImageInput-DVvMUzrT.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionMqtt-kQz9Y9OZ.js → ConfigActionMqtt-BqK3q4cC.js} +1 -1
  20. package/dist/interface/assets/ConfigActionNotification-D_H5Q68D.js +1 -0
  21. package/dist/interface/assets/{ConfigActionNotificationControl-DEOv_FGO.js → ConfigActionNotificationControl-BnTJl4dr.js} +1 -1
  22. package/dist/interface/assets/{ConfigActionOutput-CGtG-8PF.js → ConfigActionOutput-udY95_rH.js} +1 -1
  23. package/dist/interface/assets/{ConfigActionPlugin-C8v0CWrz.js → ConfigActionPlugin-C51LrkZb.js} +1 -1
  24. package/dist/interface/assets/{ConfigActionSensor-CESXnRuQ.js → ConfigActionSensor-B2tFf8x6.js} +1 -1
  25. package/dist/interface/assets/{ConfigActionSnapshot-TVhjeFKP.js → ConfigActionSnapshot-BzmeByH3.js} +1 -1
  26. package/dist/interface/assets/{ConfigActionVariable-DwRFwopb.js → ConfigActionVariable-BagC3lj5.js} +1 -1
  27. package/dist/interface/assets/{ConfigConditionIfElse-CmtoYTUU.js → ConfigConditionIfElse-CQOZJ19Y.js} +1 -1
  28. package/dist/interface/assets/{ConfigConditionSensorState-3B9Sjxdb.js → ConfigConditionSensorState-SGYpkNP5.js} +1 -1
  29. package/dist/interface/assets/ConfigConditionSwitch-BXR6xUN8.js +1 -0
  30. package/dist/interface/assets/{ConfigConditionTime-Djq2yOCr.js → ConfigConditionTime-BrEhw1R9.js} +1 -1
  31. package/dist/interface/assets/{ConfigSensorValueInput-DZ7r71aU.js → ConfigSensorValueInput-DezTWtbA.js} +1 -1
  32. package/dist/interface/assets/{ConfigTriggerDetection-B62txb4H.js → ConfigTriggerDetection-xo0imE_3.js} +1 -1
  33. package/dist/interface/assets/ConfigTriggerGeofence-BmJpP4Ew.js +1 -0
  34. package/dist/interface/assets/{ConfigTriggerManual-nrYy4xBP.js → ConfigTriggerManual-CmAdnZQK.js} +1 -1
  35. package/dist/interface/assets/{ConfigTriggerMqtt-CK8FEVxs.js → ConfigTriggerMqtt-F19dhVm1.js} +1 -1
  36. package/dist/interface/assets/{ConfigTriggerSchedule-DN3Tl7f4.js → ConfigTriggerSchedule-BGci3Aed.js} +1 -1
  37. package/dist/interface/assets/{ConfigTriggerSensor-DBXrlYyS.js → ConfigTriggerSensor-DSEDGB2X.js} +1 -1
  38. package/dist/interface/assets/{ConfigTriggerSystem-QFLNb9GC.js → ConfigTriggerSystem-DPy8Zir4.js} +1 -1
  39. package/dist/interface/assets/{ConfigTriggerWebhook-46mdJk6X.js → ConfigTriggerWebhook-Dv0Kmwg8.js} +1 -1
  40. package/dist/interface/assets/Console-Cuh-Vc4u.js +1 -0
  41. package/dist/interface/assets/{CuiAutomationRunsDialog-BvtQfpTx.js → CuiAutomationRunsDialog-B1UeVC6Q.js} +1 -1
  42. package/dist/interface/assets/{CuiBottomSheet-UiJcO4M3.js → CuiBottomSheet-BjkDE7_9.js} +1 -1
  43. package/dist/interface/assets/CuiBottomSheet-C9G-NoMU.js +1 -0
  44. package/dist/interface/assets/CuiCameraPipCard-nrln9zp-.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-B7BhgPpP.css +1 -0
  46. package/dist/interface/assets/CuiCameraRecordings-HKwhFpea.js +1 -0
  47. package/dist/interface/assets/{CuiCameraShares-46_p-wPD.js → CuiCameraShares-D-fhJCro.js} +1 -1
  48. package/dist/interface/assets/{CuiCameraTable-BXm5THd1.js → CuiCameraTable-BTVfK-HY.js} +2 -2
  49. package/dist/interface/assets/CuiCameraTable-DGg4_c_u.js +1 -0
  50. package/dist/interface/assets/{CuiChartTable-ByHWgFTc.js → CuiChartTable-DAUYP-EW.js} +1 -1
  51. package/dist/interface/assets/{CuiConsole-BOyrbC0a.js → CuiConsole-C7aZj4wK.js} +2 -2
  52. package/dist/interface/assets/{CuiDataTable-BDyku8Vr.js → CuiDataTable-1B8aaZQO.js} +1 -1
  53. package/dist/interface/assets/CuiLightControl-CSA1PYc8.js +1 -0
  54. package/dist/interface/assets/{CuiList-D1d-S_-K.js → CuiList-D-hOSNou.js} +1 -1
  55. package/dist/interface/assets/CuiMarkdownContent-D2bWw1GN.js +1 -0
  56. package/dist/interface/assets/{CuiMarkdownContent-bAQw35id.js → CuiMarkdownContent-gJ8gvmYA.js} +1 -1
  57. package/dist/interface/assets/CuiPluginCard-D1Hkyiy4.js +2 -0
  58. package/dist/interface/assets/{CuiPluginCategoryChip-CCnZkkL5.js → CuiPluginCategoryChip-qnn-HD6g.js} +1 -1
  59. package/dist/interface/assets/{CuiPluginOAuthButton-CTKbdFZJ.js → CuiPluginOAuthButton-CXextmBv.js} +2 -2
  60. package/dist/interface/assets/{CuiPluginTrustBadge-B_1b1iYf.js → CuiPluginTrustBadge-C-8MN2Qc.js} +1 -1
  61. package/dist/interface/assets/{CuiQRCode-B0CF6e-5.js → CuiQRCode-D1qmU4qU.js} +1 -1
  62. package/dist/interface/assets/CuiSchema-DnHOpBg4.js +1 -0
  63. package/dist/interface/assets/{CuiTopNavbarItem-Bs4iRb31.js → CuiTopNavbarItem-Csb3O1-n.js} +1 -1
  64. package/dist/interface/assets/Faces-C0QpQxuF.js +1 -0
  65. package/dist/interface/assets/FirstSteps-BqZQovY7.js +1 -0
  66. package/dist/interface/assets/{Floorplan-Da5gt435.css → Floorplan-Bxhdg4C2.css} +1 -1
  67. package/dist/interface/assets/Floorplan-CW-W5ZkV.js +1 -0
  68. package/dist/interface/assets/Instances-VSkiqKKf.js +1 -0
  69. package/dist/interface/assets/{Logs-Bnq3wEXS.js → Logs-DQFS2AUi.js} +2 -2
  70. package/dist/interface/assets/{Menu-M1PaPt5e.js → Menu-COvvZ_vz.js} +1 -1
  71. package/dist/interface/assets/Metrics-cvbQzChA.js +9 -0
  72. package/dist/interface/assets/OAuthDeviceFlow-3ZC2QCAs.js +1 -0
  73. package/dist/interface/assets/Plugin-DjQd3Y9J.js +1 -0
  74. package/dist/interface/assets/{PluginConsole-f5xf7P3Y.js → PluginConsole-BaUkghQD.js} +2 -2
  75. package/dist/interface/assets/PluginDetail-Ofj1hk2q.js +2 -0
  76. package/dist/interface/assets/{PluginSchema-DMjDPtOB.js → PluginSchema-f-ER7hlx.js} +1 -1
  77. package/dist/interface/assets/PluginSearch-Ce3S1HDv.js +1 -0
  78. package/dist/interface/assets/PluginSearch-D5eQsj5p.js +2 -0
  79. package/dist/interface/assets/{PluginUpdateProgress-FVY9RtmB.js → PluginUpdateProgress-BfYNLvVX.js} +1 -1
  80. package/dist/interface/assets/Plugins-DtDN9z0k.js +1 -0
  81. package/dist/interface/assets/Recordings-CQGnTZFt.js +1 -0
  82. package/dist/interface/assets/SensorEdit-BZtiJyoI.js +1 -0
  83. package/dist/interface/assets/{SensorHistory-5nCWisih.js → SensorHistory-BFkT3teu.js} +1 -1
  84. package/dist/interface/assets/{Sensors-BsLHVGqk.css → Sensors-CaKl4PQY.css} +1 -1
  85. package/dist/interface/assets/Sensors-DSR-AUqb.js +2 -0
  86. package/dist/interface/assets/{Settings-DsxjHlTb.js → Settings-DV3JZFjc.js} +1 -1
  87. package/dist/interface/assets/SettingsAccount-Cd5JPsv2.js +1 -0
  88. package/dist/interface/assets/SettingsAccount-D4ib7Asi.js +1 -0
  89. package/dist/interface/assets/SettingsAppearance-BYsQmdyo.js +1 -0
  90. package/dist/interface/assets/{SettingsAppearance-Dc5qomCw.js → SettingsAppearance-CC6StMAi.js} +1 -1
  91. package/dist/interface/assets/{SettingsBackup-xZ6fRlMp.js → SettingsBackup-BcVFCbhB.js} +1 -1
  92. package/dist/interface/assets/{SettingsList-M3eOiLIi.js → SettingsList-04HiM3OT.js} +1 -1
  93. package/dist/interface/assets/SettingsMqtt-XaJdsYPn.js +1 -0
  94. package/dist/interface/assets/SettingsNotifications-CUoYMHwr.js +1 -0
  95. package/dist/interface/assets/{SettingsPermissions-g6ppqzcI.js → SettingsPermissions-gFDNSlTh.js} +1 -1
  96. package/dist/interface/assets/SettingsRecordings-Bw64UZWe.js +1 -0
  97. package/dist/interface/assets/SettingsRemote-BnFW-uT-.js +2 -0
  98. package/dist/interface/assets/{SettingsSystem-EaqPKfS_.js → SettingsSystem-Cdjg5GNY.js} +2 -2
  99. package/dist/interface/assets/{SettingsUsers-B3m7YHzN.js → SettingsUsers-DphPL78H.js} +1 -1
  100. package/dist/interface/assets/{Terminal-BXQKgvte.js → Terminal-CrNjqzTs.js} +2 -2
  101. package/dist/interface/assets/{Updates-Difs3xzH.js → Updates-V5B9LSD-.js} +2 -2
  102. package/dist/interface/assets/{VariableInput-DNlqv5NS.js → VariableInput-n0TxKRqq.js} +1 -1
  103. package/dist/interface/assets/{VariableSuggestions-cR1Q4nfD.js → VariableSuggestions-C4LmaCAo.js} +1 -1
  104. package/dist/interface/assets/{VersionsHandler-BHyZgGCP.js → VersionsHandler-BPocJcb0.js} +2 -2
  105. package/dist/interface/assets/{VirtualSensorCreate-CSzlXcHk.js → VirtualSensorCreate-BPvbrzGS.js} +1 -1
  106. package/dist/interface/assets/Workers-DEvQNzUi.js +2 -0
  107. package/dist/interface/assets/{lightbulb-outline-BtraGBwO.js → alert-outline-DtiCgufF.js} +1 -1
  108. package/dist/interface/assets/{api-Bpl4Sd0_.js → api-BXmkXIE8.js} +1 -1
  109. package/dist/interface/assets/api-DO5wBndX.css +2 -0
  110. package/dist/interface/assets/api-x8zXlvtm.js +4 -0
  111. package/dist/interface/assets/{auth-O2tHbgZf.js → auth-BKJnreuu.js} +1 -1
  112. package/dist/interface/assets/{automations-C3f5HUy2.js → automations-CVuIXlAQ.js} +1 -1
  113. package/dist/interface/assets/cameraSources-C3cl6FVD.js +1 -0
  114. package/dist/interface/assets/cloudHandoff-BZvvihwX.js +1 -0
  115. package/dist/interface/assets/{config-BIxANITl.js → config-Sw94rZxF.js} +1 -1
  116. package/dist/interface/assets/{flowSchema-Cu_f8mZr.js → flowSchema-BOrDqdeG.js} +1 -1
  117. package/dist/interface/assets/{intercomService-JoKcW49f.js → intercomService-CfCIMUlA.js} +1 -1
  118. package/dist/interface/assets/main-Jl93jEZK.js +3 -0
  119. package/dist/interface/assets/{main-BF8Mg561.css → main-Qqk3RyYP.css} +1 -1
  120. package/dist/interface/assets/{mqtt-D_ToI2JF.js → mqtt-BaCMJJk_.js} +1 -1
  121. package/dist/interface/assets/nodeDefinitions-a8iyp3yk.js +1 -0
  122. package/dist/interface/assets/{notifications-BZCPhbuG.js → notifications-l-x8vA4D.js} +1 -1
  123. package/dist/interface/assets/{plugins-DXYT--j6.js → plugins-GA9v-eQx.js} +1 -1
  124. package/dist/interface/assets/{rooms-BXXhWbYq.js → rooms-DX7PBdpP.js} +1 -1
  125. package/dist/interface/assets/sensorIcons-BTgouEmX.js +1 -0
  126. package/dist/interface/assets/{sensors-ud0INKWh.js → sensors-LJkBCaMk.js} +1 -1
  127. package/dist/interface/assets/{server-_f9tZajz.js → server-dOx3q8o1.js} +1 -1
  128. package/dist/interface/assets/theme-DgrclY58.js +1 -0
  129. package/dist/interface/assets/types-CSWXRySW.js +1 -0
  130. package/dist/interface/assets/{types-CCCcoJBr.js → types-D19FOdYo.js} +1 -1
  131. package/dist/interface/assets/types-Yq0FH8fa.js +1 -0
  132. package/dist/interface/assets/ungrouped-B_u9a5wm.js +1 -0
  133. package/dist/interface/assets/{ungrouped-uv64nr5n.css → ungrouped-DTYy_Pud.css} +1 -1
  134. package/dist/interface/assets/{updates-i-Ukebxe.js → updates-BVN6uGXy.js} +1 -1
  135. package/dist/interface/assets/{useAppVersion-DY0h_lct.js → useAppVersion-BUDIkitU.js} +1 -1
  136. package/dist/interface/assets/useBackupRestore-CnSZNCC8.js +1 -0
  137. package/dist/interface/assets/{useCameraOptions-C-rXBi8d.js → useCameraOptions-Cgb4eV2d.js} +1 -1
  138. package/dist/interface/assets/{useLogsSocket-Bigb4u3j.js → useLogsSocket-CGKtL049.js} +1 -1
  139. package/dist/interface/assets/{useNavLayout-C9FWniNC.js → useNavLayout-Dcngcb73.js} +1 -1
  140. package/dist/interface/assets/{usePermissions-C_4RPiE4.js → usePermissions-zJF4LCPm.js} +1 -1
  141. package/dist/interface/assets/{usePluginUpdates-CQwLK3om.js → usePluginUpdates-DP--lRxm.js} +1 -1
  142. package/dist/interface/assets/{usePushRegistration-sYPibp5s.js → usePushRegistration-BhPBp28J.js} +1 -1
  143. package/dist/interface/assets/{useServerRestart-B0Cfu10q.js → useServerRestart-BpCDYbPH.js} +1 -1
  144. package/dist/interface/assets/{useStreamStatus-BLXdLAvK.js → useStreamStatus-BoVMk6KT.js} +1 -1
  145. package/dist/interface/assets/{useTabSwipe-C3qfclkm.js → useTabSwipe--t-Qqa31.js} +1 -1
  146. package/dist/interface/assets/{useUpdateChannel-DvO5NQPE.js → useUpdateChannel-DAuhU-__.js} +1 -1
  147. package/dist/interface/assets/{useUpdatesSocket-C6wTDGIg.js → useUpdatesSocket-C-j3b3tU.js} +1 -1
  148. package/dist/interface/assets/{useUserOptions-B9T46skV.js → useUserOptions-CcLVC73O.js} +1 -1
  149. package/dist/interface/assets/vendor-cameraui-phsC2Mmi.js +2326 -0
  150. package/dist/interface/assets/vendor-core-C0ZWoGJD.js +1 -0
  151. package/dist/interface/assets/{vendor-markdown-pUmink8s.js → vendor-markdown-aj6qAoLx.js} +3 -3
  152. package/dist/interface/assets/{vendor-primevue-CvHDsVi_.js → vendor-primevue-nPess0JU.js} +76 -76
  153. package/dist/interface/assets/vendor-zod-CJ7LAMqQ.js +99 -0
  154. package/dist/interface/ha/404-PedrGUiq.js +60 -0
  155. package/dist/interface/ha/About-l5fkBqG7.js +55 -0
  156. package/dist/interface/ha/Automation-CaSlGjT4.js +2015 -0
  157. package/dist/interface/ha/AutomationImport-BNavtjDq.js +206 -0
  158. package/dist/interface/ha/AutomationStore-BVSW8TVt.js +335 -0
  159. package/dist/interface/ha/AutomationStoreDetail-DHZwlpz0.js +122 -0
  160. package/dist/interface/ha/Automations-CZ2jvH6d.js +437 -0
  161. package/dist/interface/ha/Camera-CggUrrPm.js +625 -0
  162. package/dist/interface/ha/CameraConsole-DpzF48TF.js +52 -0
  163. package/dist/interface/ha/Cameras-K-kQF5tG.js +1970 -0
  164. package/dist/interface/ha/Camview-zJVP7JwZ.js +1337 -0
  165. package/dist/interface/ha/CertificateUpload-DbBQ87OT.js +117 -0
  166. package/dist/interface/ha/Config-Bsud2DYI.js +356 -0
  167. package/dist/interface/ha/ConfigActionCameraControl-Czkfw_NO.js +152 -0
  168. package/dist/interface/ha/ConfigActionDelay-BHug57u7.js +61 -0
  169. package/dist/interface/ha/ConfigActionHttp-LfbxbfgG.js +134 -0
  170. package/dist/interface/ha/ConfigActionImageInput-Ce2GJzCm.js +171 -0
  171. package/dist/interface/ha/ConfigActionMqtt-KmCGcNZb.js +81 -0
  172. package/dist/interface/ha/ConfigActionNotification-DUMY_3IT.js +199 -0
  173. package/dist/interface/ha/ConfigActionNotificationControl-B9Z2i5WR.js +111 -0
  174. package/dist/interface/ha/ConfigActionOutput-CX-ZQjcs.js +98 -0
  175. package/dist/interface/ha/ConfigActionPlugin-y5PuPwdk.js +172 -0
  176. package/dist/interface/ha/ConfigActionSensor-CC39Rpxi.js +139 -0
  177. package/dist/interface/ha/ConfigActionSnapshot-CWyhx6rk.js +48 -0
  178. package/dist/interface/ha/ConfigActionVariable-BNRLCthd.js +88 -0
  179. package/dist/interface/ha/ConfigConditionIfElse-BayS5_Dr.js +124 -0
  180. package/dist/interface/ha/ConfigConditionSensorState-DLXNqL-R.js +192 -0
  181. package/dist/interface/ha/ConfigConditionSwitch-BBesQgWi.js +128 -0
  182. package/dist/interface/ha/ConfigConditionTime-aD8mk2aa.js +95 -0
  183. package/dist/interface/ha/ConfigSensorValueInput-5JzesEuD.js +169 -0
  184. package/dist/interface/ha/ConfigTriggerDetection--BcjPuyh.js +241 -0
  185. package/dist/interface/ha/ConfigTriggerGeofence-BZi5a2Yv.js +4896 -0
  186. package/dist/interface/ha/ConfigTriggerManual-ConxhgNx.js +14 -0
  187. package/dist/interface/ha/ConfigTriggerMqtt-B6C9injX.js +134 -0
  188. package/dist/interface/ha/ConfigTriggerSchedule-Vv5iNKL3.js +72 -0
  189. package/dist/interface/ha/ConfigTriggerSensor-beixHfSD.js +73 -0
  190. package/dist/interface/ha/ConfigTriggerSystem-BHDpn485.js +188 -0
  191. package/dist/interface/ha/ConfigTriggerWebhook-D9cuCU_p.js +94 -0
  192. package/dist/interface/ha/Console-CbQnrt6X.js +348 -0
  193. package/dist/interface/ha/CuiAutomationRunsDialog-CckgCRNS.js +130 -0
  194. package/dist/interface/ha/CuiBottomSheet-juhGdTsO.js +270 -0
  195. package/dist/interface/ha/CuiCameraRecordings-CLzZiXhk.js +552 -0
  196. package/dist/interface/ha/CuiCameraShares-Dzx1jZGE.js +121 -0
  197. package/dist/interface/ha/CuiCameraTable-ug0ik9N-.js +153 -0
  198. package/dist/interface/ha/CuiChartTable-7EnAA-WG.js +6784 -0
  199. package/dist/interface/ha/CuiConsole-DOnyBSL7.js +244 -0
  200. package/dist/interface/ha/CuiDataTable-Cx9GBqsV.js +8725 -0
  201. package/dist/interface/ha/CuiList-C45psxFZ.js +57 -0
  202. package/dist/interface/ha/CuiMarkdownContent-D7sCtnNQ.js +4716 -0
  203. package/dist/interface/ha/CuiPluginCard-ChLIfOms.js +769 -0
  204. package/dist/interface/ha/CuiPluginOAuthButton-B6vPOEx2.js +105 -0
  205. package/dist/interface/ha/CuiPluginTrustBadge-BvPV93D0.js +123 -0
  206. package/dist/interface/ha/CuiQRCode-Djr3z54t.js +86 -0
  207. package/dist/interface/ha/CuiSchema-dl7TXv-k.js +963 -0
  208. package/dist/interface/ha/CuiTopNavbarItem-BXoda5eM.js +141 -0
  209. package/dist/interface/ha/Faces-DnqWMGWW.js +1281 -0
  210. package/dist/interface/ha/FirstSteps-CFawb017.js +251 -0
  211. package/dist/interface/ha/Floorplan-Mv-Ootly.js +3677 -0
  212. package/dist/interface/ha/Instances-DJjZ3btI.js +680 -0
  213. package/dist/interface/ha/Logs-CLFhW1xq.js +418 -0
  214. package/dist/interface/ha/Menu-D7QTRqMJ.js +161 -0
  215. package/dist/interface/ha/Metrics-CCvFtezL.js +1330 -0
  216. package/dist/interface/ha/OAuthDeviceFlow-4YupTNsK.js +112 -0
  217. package/dist/interface/ha/Plugin-BHU0yhBa.js +1404 -0
  218. package/dist/interface/ha/PluginConsole-CNrLuFQM.js +56 -0
  219. package/dist/interface/ha/PluginDetail-Bm3X-xN4.js +230 -0
  220. package/dist/interface/ha/PluginSearch-C0be8cYD.js +475 -0
  221. package/dist/interface/ha/PluginUpdateProgress-DVvgYMLG.js +34 -0
  222. package/dist/interface/ha/Plugins-R-uz0Se-.js +705 -0
  223. package/dist/interface/ha/Recordings-DAwbihs8.js +1463 -0
  224. package/dist/interface/ha/SensorEdit-BxE1cRLR.js +1460 -0
  225. package/dist/interface/ha/SensorHistory-DUGlH2pU.js +54 -0
  226. package/dist/interface/ha/Sensors-Cax5RlPH.js +1358 -0
  227. package/dist/interface/ha/Settings-DKtlCoyz.js +218 -0
  228. package/dist/interface/ha/SettingsAccount-2e_Vjpev.js +970 -0
  229. package/dist/interface/ha/SettingsAppearance-DCm60FhX.js +220 -0
  230. package/dist/interface/ha/SettingsBackup-CiM_nNWt.js +556 -0
  231. package/dist/interface/ha/SettingsList-D4D3cmLo.js +40 -0
  232. package/dist/interface/ha/SettingsMqtt-CID4L0PD.js +526 -0
  233. package/dist/interface/ha/SettingsNotifications-DGJkhm8T.js +529 -0
  234. package/dist/interface/ha/SettingsPermissions-Cd0rtgli.js +84 -0
  235. package/dist/interface/ha/SettingsRecordings-pR4L0wgy.js +151 -0
  236. package/dist/interface/ha/SettingsRemote-CYg-LSQK.js +1810 -0
  237. package/dist/interface/ha/SettingsSystem-BeYJN1Ut.js +376 -0
  238. package/dist/interface/ha/SettingsUsers-F4CZggSR.js +379 -0
  239. package/dist/interface/ha/Terminal-iQahUx9P.js +631 -0
  240. package/dist/interface/ha/Updates-ClQ77p-o.js +356 -0
  241. package/dist/interface/ha/VariableInput-BOHBmNff.js +52 -0
  242. package/dist/interface/ha/VariableSuggestions-BE06z6SW.js +201 -0
  243. package/dist/interface/ha/VersionsHandler-Cx9u0oj8.js +211 -0
  244. package/dist/interface/ha/VirtualSensorCreate-CvSzLo4N.js +101 -0
  245. package/dist/interface/ha/Workers-CEJtdSu-.js +765 -0
  246. package/dist/interface/ha/accordion-BT2wHwK8.js +577 -0
  247. package/dist/interface/ha/account-B1xL2wxD.js +19 -0
  248. package/dist/interface/ha/ace-Dh61T4RV.js +13238 -0
  249. package/dist/interface/ha/ace.config-HyzcNHkM.js +1429 -0
  250. package/dist/interface/ha/alert-circle-CLRn5GAd.js +19 -0
  251. package/dist/interface/ha/alert-outline-CGTMAqXf.js +75 -0
  252. package/dist/interface/ha/api-BmNBy1ay.js +29 -0
  253. package/dist/interface/ha/api-CWJkvtnM.js +60866 -0
  254. package/dist/interface/ha/arrow-left-DkvcResi.js +19 -0
  255. package/dist/interface/ha/auth-X6tkVYJs.js +271 -0
  256. package/dist/interface/ha/autocomplete-L_jK3s3m.js +1373 -0
  257. package/dist/interface/ha/automationBlueprint-D1TiCF7R.js +249 -0
  258. package/dist/interface/ha/back-filled-Cxzg5vQg.js +20 -0
  259. package/dist/interface/ha/base-D_LAf3cS.js +26 -0
  260. package/dist/interface/ha/base-c1lsE5TW.js +125 -0
  261. package/dist/interface/ha/bell-ring-xrXdzNHW.js +19 -0
  262. package/dist/interface/ha/brain-DyOOk3m3.js +19 -0
  263. package/dist/interface/ha/browser-Bxx7joo_.js +1227 -0
  264. package/dist/interface/ha/browserconfig.xml +11 -0
  265. package/dist/interface/ha/button-BlYuI0Q7.js +406 -0
  266. package/dist/interface/ha/cameraui-cards.js +190 -0
  267. package/dist/interface/ha/cards-CNOyNWMA.js +13316 -0
  268. package/dist/interface/ha/cctv-Bz6BH0ns.js +19 -0
  269. package/dist/interface/ha/check-circle-D_wDxrLs.js +19 -0
  270. package/dist/interface/ha/chevron-down-P5MtUhJO.js +19 -0
  271. package/dist/interface/ha/chip-DxGABeun.js +149 -0
  272. package/dist/interface/ha/clock-outline-JxApewmA.js +19 -0
  273. package/dist/interface/ha/close-Eq3txTBS.js +19 -0
  274. package/dist/interface/ha/close-circle-C2nTtN_-.js +19 -0
  275. package/dist/interface/ha/config-E4Jkelkr.js +116 -0
  276. package/dist/interface/ha/content-copy-DpPXKtKE.js +19 -0
  277. package/dist/interface/ha/copy-C48Ur26H.js +22 -0
  278. package/dist/interface/ha/datepicker-BuvKhBWJ.js +3236 -0
  279. package/dist/interface/ha/definitions-E-sY7Cxg.js +23 -0
  280. package/dist/interface/ha/delete-D-m8mqly.js +19 -0
  281. package/dist/interface/ha/dist-B7lgvbyI.js +279 -0
  282. package/dist/interface/ha/dist-Ca9_5rzq.js +3457 -0
  283. package/dist/interface/ha/divider-jkWvVbPJ.js +110 -0
  284. package/dist/interface/ha/download-Cnr7IQKX.js +19 -0
  285. package/dist/interface/ha/esm-1sIZN4t7.js +6 -0
  286. package/dist/interface/ha/esm-6hnPZcZr.js +15 -0
  287. package/dist/interface/ha/esm-B72ViJ7F.js +5 -0
  288. package/dist/interface/ha/esm-BGlkcEes.js +156 -0
  289. package/dist/interface/ha/esm-BKPZuThK.js +5 -0
  290. package/dist/interface/ha/esm-BMx7MsZ_.js +15 -0
  291. package/dist/interface/ha/esm-CChFtwcx.js +21 -0
  292. package/dist/interface/ha/esm-CMTmAdHP.js +5 -0
  293. package/dist/interface/ha/esm-CkoEL9YX.js +7 -0
  294. package/dist/interface/ha/esm-CvxDASXR.js +23 -0
  295. package/dist/interface/ha/esm-Demxl4zQ.js +5 -0
  296. package/dist/interface/ha/esm-DiBhi9zp.js +5 -0
  297. package/dist/interface/ha/esm-XFPB9fYb.js +15 -0
  298. package/dist/interface/ha/eventLabels-B4C1_4vT.js +42 -0
  299. package/dist/interface/ha/eye-off-AdumIw0H.js +33 -0
  300. package/dist/interface/ha/eye-off-outline-DO3xfiua.js +19 -0
  301. package/dist/interface/ha/fonts/InterVariable.woff2 +0 -0
  302. package/dist/interface/ha/history-BoZc8mgf.js +19 -0
  303. package/dist/interface/ha/home-am0tRTsk.js +19 -0
  304. package/dist/interface/ha/information-outline-DIdNxPCN.js +19 -0
  305. package/dist/interface/ha/inputicon-6-vaPLbw.js +324 -0
  306. package/dist/interface/ha/inputnumber-B1Buq8Nc.js +1033 -0
  307. package/dist/interface/ha/inputtext-DGIESrd0.js +257 -0
  308. package/dist/interface/ha/intercomService-jB2mTgsn.js +1406 -0
  309. package/dist/interface/ha/message-C8U_kMBA.js +244 -0
  310. package/dist/interface/ha/minus-DKa9TXat.js +19 -0
  311. package/dist/interface/ha/minus-QyTgaT70.js +46 -0
  312. package/dist/interface/ha/mqtt-BmDCmG9h.js +56 -0
  313. package/dist/interface/ha/multiselect-BbgV_fPx.js +1492 -0
  314. package/dist/interface/ha/native-BaNeloQn.js +35 -0
  315. package/dist/interface/ha/native-C8PbNqsJ.js +29 -0
  316. package/dist/interface/ha/notifications-B51yvrGL.js +159 -0
  317. package/dist/interface/ha/og-share.png +0 -0
  318. package/dist/interface/ha/pencil-outline-BqfTDXIh.js +19 -0
  319. package/dist/interface/ha/pinia-3D39Do4a.js +6934 -0
  320. package/dist/interface/ha/platformLabels-C3d1PLg-.js +27 -0
  321. package/dist/interface/ha/plugin-DAGqBiG_.js +38 -0
  322. package/dist/interface/ha/plugins-dkWbXWVM.js +592 -0
  323. package/dist/interface/ha/plus-CNdrByQb.js +46 -0
  324. package/dist/interface/ha/plus-d_caPq5l.js +19 -0
  325. package/dist/interface/ha/progressbar-CIoPoMSe.js +95 -0
  326. package/dist/interface/ha/protocol-BB4jdtUC-K1r3LFCq.js +706 -0
  327. package/dist/interface/ha/pwa/apple-splash-landscape-dark-1136x640.png +0 -0
  328. package/dist/interface/ha/pwa/apple-splash-landscape-dark-1334x750.png +0 -0
  329. package/dist/interface/ha/pwa/apple-splash-landscape-dark-1792x828.png +0 -0
  330. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2048x1536.png +0 -0
  331. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2160x1620.png +0 -0
  332. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2208x1242.png +0 -0
  333. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2224x1668.png +0 -0
  334. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2388x1668.png +0 -0
  335. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2436x1125.png +0 -0
  336. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2532x1170.png +0 -0
  337. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2556x1179.png +0 -0
  338. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2688x1242.png +0 -0
  339. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2732x2048.png +0 -0
  340. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2778x1284.png +0 -0
  341. package/dist/interface/ha/pwa/apple-splash-landscape-dark-2796x1290.png +0 -0
  342. package/dist/interface/ha/pwa/apple-splash-landscape-light-1136x640.png +0 -0
  343. package/dist/interface/ha/pwa/apple-splash-landscape-light-1334x750.png +0 -0
  344. package/dist/interface/ha/pwa/apple-splash-landscape-light-1792x828.png +0 -0
  345. package/dist/interface/ha/pwa/apple-splash-landscape-light-2048x1536.png +0 -0
  346. package/dist/interface/ha/pwa/apple-splash-landscape-light-2160x1620.png +0 -0
  347. package/dist/interface/ha/pwa/apple-splash-landscape-light-2208x1242.png +0 -0
  348. package/dist/interface/ha/pwa/apple-splash-landscape-light-2224x1668.png +0 -0
  349. package/dist/interface/ha/pwa/apple-splash-landscape-light-2388x1668.png +0 -0
  350. package/dist/interface/ha/pwa/apple-splash-landscape-light-2436x1125.png +0 -0
  351. package/dist/interface/ha/pwa/apple-splash-landscape-light-2532x1170.png +0 -0
  352. package/dist/interface/ha/pwa/apple-splash-landscape-light-2556x1179.png +0 -0
  353. package/dist/interface/ha/pwa/apple-splash-landscape-light-2688x1242.png +0 -0
  354. package/dist/interface/ha/pwa/apple-splash-landscape-light-2732x2048.png +0 -0
  355. package/dist/interface/ha/pwa/apple-splash-landscape-light-2778x1284.png +0 -0
  356. package/dist/interface/ha/pwa/apple-splash-landscape-light-2796x1290.png +0 -0
  357. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1125x2436.png +0 -0
  358. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1170x2532.png +0 -0
  359. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1179x2556.png +0 -0
  360. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1242x2208.png +0 -0
  361. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1242x2688.png +0 -0
  362. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1284x2778.png +0 -0
  363. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1290x2796.png +0 -0
  364. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1536x2048.png +0 -0
  365. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1620x2160.png +0 -0
  366. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1668x2224.png +0 -0
  367. package/dist/interface/ha/pwa/apple-splash-portrait-dark-1668x2388.png +0 -0
  368. package/dist/interface/ha/pwa/apple-splash-portrait-dark-2048x2732.png +0 -0
  369. package/dist/interface/ha/pwa/apple-splash-portrait-dark-640x1136.png +0 -0
  370. package/dist/interface/ha/pwa/apple-splash-portrait-dark-750x1334.png +0 -0
  371. package/dist/interface/ha/pwa/apple-splash-portrait-dark-828x1792.png +0 -0
  372. package/dist/interface/ha/pwa/apple-splash-portrait-light-1125x2436.png +0 -0
  373. package/dist/interface/ha/pwa/apple-splash-portrait-light-1170x2532.png +0 -0
  374. package/dist/interface/ha/pwa/apple-splash-portrait-light-1179x2556.png +0 -0
  375. package/dist/interface/ha/pwa/apple-splash-portrait-light-1242x2208.png +0 -0
  376. package/dist/interface/ha/pwa/apple-splash-portrait-light-1242x2688.png +0 -0
  377. package/dist/interface/ha/pwa/apple-splash-portrait-light-1284x2778.png +0 -0
  378. package/dist/interface/ha/pwa/apple-splash-portrait-light-1290x2796.png +0 -0
  379. package/dist/interface/ha/pwa/apple-splash-portrait-light-1536x2048.png +0 -0
  380. package/dist/interface/ha/pwa/apple-splash-portrait-light-1620x2160.png +0 -0
  381. package/dist/interface/ha/pwa/apple-splash-portrait-light-1668x2224.png +0 -0
  382. package/dist/interface/ha/pwa/apple-splash-portrait-light-1668x2388.png +0 -0
  383. package/dist/interface/ha/pwa/apple-splash-portrait-light-2048x2732.png +0 -0
  384. package/dist/interface/ha/pwa/apple-splash-portrait-light-640x1136.png +0 -0
  385. package/dist/interface/ha/pwa/apple-splash-portrait-light-750x1334.png +0 -0
  386. package/dist/interface/ha/pwa/apple-splash-portrait-light-828x1792.png +0 -0
  387. package/dist/interface/ha/pwa/apple-touch-icon-180x180.png +0 -0
  388. package/dist/interface/ha/pwa/favicon-16.ico +0 -0
  389. package/dist/interface/ha/pwa/favicon-32.ico +0 -0
  390. package/dist/interface/ha/pwa/favicon-48.ico +0 -0
  391. package/dist/interface/ha/pwa/favicon-64.ico +0 -0
  392. package/dist/interface/ha/pwa/logo.svg +1 -0
  393. package/dist/interface/ha/pwa/maskable-icon-1240x600.png +0 -0
  394. package/dist/interface/ha/pwa/maskable-icon-512x512.png +0 -0
  395. package/dist/interface/ha/pwa/maskable-icon-620x300.png +0 -0
  396. package/dist/interface/ha/pwa/pwa-1024x1024.png +0 -0
  397. package/dist/interface/ha/pwa/pwa-120x120.png +0 -0
  398. package/dist/interface/ha/pwa/pwa-144x144.png +0 -0
  399. package/dist/interface/ha/pwa/pwa-152x152.png +0 -0
  400. package/dist/interface/ha/pwa/pwa-167x167.png +0 -0
  401. package/dist/interface/ha/pwa/pwa-180x180.png +0 -0
  402. package/dist/interface/ha/pwa/pwa-192x192.png +0 -0
  403. package/dist/interface/ha/pwa/pwa-24x24.png +0 -0
  404. package/dist/interface/ha/pwa/pwa-300x300.png +0 -0
  405. package/dist/interface/ha/pwa/pwa-36x36.png +0 -0
  406. package/dist/interface/ha/pwa/pwa-48x48.png +0 -0
  407. package/dist/interface/ha/pwa/pwa-50x50.png +0 -0
  408. package/dist/interface/ha/pwa/pwa-64x64.png +0 -0
  409. package/dist/interface/ha/pwa/pwa-72x72.png +0 -0
  410. package/dist/interface/ha/pwa/pwa-88x88.png +0 -0
  411. package/dist/interface/ha/pwa/pwa-96x96.png +0 -0
  412. package/dist/interface/ha/radar-C7lI26j4.js +19 -0
  413. package/dist/interface/ha/refresh-BIhepekY.js +19 -0
  414. package/dist/interface/ha/ring-resize-VS4MSeBv.js +16 -0
  415. package/dist/interface/ha/ripple-BilzxWfY.js +2928 -0
  416. package/dist/interface/ha/robots.txt +2 -0
  417. package/dist/interface/ha/rolldown-runtime-CEFd7nDs.js +30 -0
  418. package/dist/interface/ha/rooms-B-FUXQ1p.js +45 -0
  419. package/dist/interface/ha/round-alt-arrow-left-bold-CWEg-ZLF.js +37 -0
  420. package/dist/interface/ha/runtime-core.esm-bundler-D8slQ3BU.js +3295 -0
  421. package/dist/interface/ha/search-CoOsbgeb.js +19 -0
  422. package/dist/interface/ha/select-DjWkRqsI.js +1382 -0
  423. package/dist/interface/ha/server-CKJKoFfg.js +239 -0
  424. package/dist/interface/ha/settings-EKkSQLzv.js +22 -0
  425. package/dist/interface/ha/source-branch-CZwSOrQA.js +19 -0
  426. package/dist/interface/ha/speeddial-Dv9txWte.js +682 -0
  427. package/dist/interface/ha/spinner-D6iUldg9.js +46 -0
  428. package/dist/interface/ha/synapse-CGrlyQDE.js +35 -0
  429. package/dist/interface/ha/tag-CXgC9OZ6.js +95 -0
  430. package/dist/interface/ha/textarea-DvLkfUX7.js +130 -0
  431. package/dist/interface/ha/tooltip-BIrD_hC8.js +277 -0
  432. package/dist/interface/ha/trash-2-C4zSCZfs.js +23 -0
  433. package/dist/interface/ha/trash-can-outline-DCqsCOd2.js +19 -0
  434. package/dist/interface/ha/trash-fill-BPsrwR8X.js +21 -0
  435. package/dist/interface/ha/types-C7MzwoQR.js +28 -0
  436. package/dist/interface/ha/types-J_J0HKlK.js +1032 -0
  437. package/dist/interface/ha/ungrouped-BpaM88Y-.js +1116 -0
  438. package/dist/interface/ha/updates-BdVmkKAa.js +341 -0
  439. package/dist/interface/ha/upload-2xJkVPZE.js +19 -0
  440. package/dist/interface/ha/upload-wQHBRZX_.js +23 -0
  441. package/dist/interface/ha/useAppVersion-DzDaOsKc.js +22 -0
  442. package/dist/interface/ha/useLogsSocket-CWUE-KXV.js +59 -0
  443. package/dist/interface/ha/useNavLayout-BqpyvD2F.js +125 -0
  444. package/dist/interface/ha/usePermissions-BIUeW4ef.js +72 -0
  445. package/dist/interface/ha/useServerRestart-0c4gA1fG.js +23 -0
  446. package/dist/interface/ha/useTabSwipe-C8LdKw23.js +45 -0
  447. package/dist/interface/ha/useUpdateChannel-CHVLthZB.js +22 -0
  448. package/dist/interface/ha/useUpdatesSocket-CaxEs511.js +34 -0
  449. package/dist/interface/ha/useUserOptions-Rk_71WAK.js +15 -0
  450. package/dist/interface/ha/utils-DYtBrGDz.js +7 -0
  451. package/dist/interface/ha/virtualscroller-s_gNqN5p.js +996 -0
  452. package/dist/interface/ha/vue-flow-background-B0Vu4-8M.js +6840 -0
  453. package/dist/interface/ha/vue-i18n-Dcb07o5U.js +2409 -0
  454. package/dist/interface/ha/web-0Kyq65na.js +78 -0
  455. package/dist/interface/ha/web-B7Dt2zZN.js +340 -0
  456. package/dist/interface/ha/web-BNdrPSpb.js +102 -0
  457. package/dist/interface/ha/web-BPBZBCtX.js +8 -0
  458. package/dist/interface/ha/web-BjKL51lK-qwJdIpM1.js +221 -0
  459. package/dist/interface/ha/web-C01i9qI1.js +57 -0
  460. package/dist/interface/ha/web-CH3JeXWa.js +211 -0
  461. package/dist/interface/ha/web-Cpm1-DVe.js +33 -0
  462. package/dist/interface/ha/web-DqRMXrnx.js +31 -0
  463. package/dist/interface/ha/web-DtVT7WYt.js +17 -0
  464. package/dist/interface/ha/web-DxJQZCiR.js +59 -0
  465. package/dist/interface/ha/web-I7Urp4AE.js +46 -0
  466. package/dist/interface/ha/web-aSaPk7kr.js +57 -0
  467. package/dist/interface/ha/web-pMey9p3Y.js +79 -0
  468. package/dist/interface/ha/xterm-B6xA6E5i.js +14833 -0
  469. package/dist/interface/ha/zoom-in-CNVB9H3D.js +41 -0
  470. package/dist/interface/index.html +29 -29
  471. package/dist/interface/sw.js +1 -1
  472. package/dist/server/package.json +10 -10
  473. package/dist/server/requirements.txt +3 -3
  474. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +9 -6
  475. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +2 -2
  476. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +4 -2
  477. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +8 -0
  478. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +4 -3
  479. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +6 -0
  480. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +17 -6
  481. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +24 -70
  482. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +46 -19
  483. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +2 -0
  484. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +65 -8
  485. package/dist/server/src/api/database/index.d.ts +1 -1
  486. package/dist/server/src/api/database/index.js +4 -32
  487. package/dist/server/src/api/database/index.js.map +1 -1
  488. package/dist/server/src/api/database/migrations/v2-1-17.d.ts +3 -0
  489. package/dist/server/src/api/database/migrations/v2-1-17.js +14 -0
  490. package/dist/server/src/api/database/migrations/v2-1-17.js.map +1 -0
  491. package/dist/server/src/api/database/migrations/v2-1-18.d.ts +3 -0
  492. package/dist/server/src/api/database/migrations/v2-1-18.js +24 -0
  493. package/dist/server/src/api/database/migrations/v2-1-18.js.map +1 -0
  494. package/dist/server/src/api/database/record-schemas.d.ts +1 -0
  495. package/dist/server/src/api/database/types.d.ts +4 -3
  496. package/dist/server/src/api/schemas/cameras.schema.d.ts +53 -15
  497. package/dist/server/src/api/schemas/cameras.schema.js +5 -1
  498. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  499. package/dist/server/src/api/schemas/users.schema.d.ts +7 -0
  500. package/dist/server/src/api/schemas/users.schema.js +1 -1
  501. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  502. package/dist/server/src/api/services/cameras.service.js +14 -21
  503. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  504. package/dist/server/src/api/services/sensors.service.d.ts +3 -3
  505. package/dist/server/src/api/services/sensors.service.js +3 -24
  506. package/dist/server/src/api/services/sensors.service.js.map +1 -1
  507. package/dist/server/src/api/services/server.service.js +1 -1
  508. package/dist/server/src/api/services/server.service.js.map +1 -1
  509. package/dist/server/src/api/utils/cert.js +18 -8
  510. package/dist/server/src/api/utils/cert.js.map +1 -1
  511. package/dist/server/src/api/utils/regex.d.ts +2 -0
  512. package/dist/server/src/api/utils/regex.js +2 -0
  513. package/dist/server/src/api/utils/regex.js.map +1 -1
  514. package/dist/server/src/api/websocket/nsp/sensors.d.ts +3 -1
  515. package/dist/server/src/api/websocket/nsp/sensors.js +13 -3
  516. package/dist/server/src/api/websocket/nsp/sensors.js.map +1 -1
  517. package/dist/server/src/camera/decoder/debug/detection-record.d.ts +3 -1
  518. package/dist/server/src/camera/decoder/debug/detection-record.js +6 -2
  519. package/dist/server/src/camera/decoder/debug/detection-record.js.map +1 -1
  520. package/dist/server/src/camera/decoder/detection-coordinator.d.ts +2 -0
  521. package/dist/server/src/camera/decoder/detection-coordinator.js +44 -25
  522. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  523. package/dist/server/src/camera/decoder/detection-pipeline.d.ts +3 -1
  524. package/dist/server/src/camera/decoder/detection-pipeline.js +3 -22
  525. package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
  526. package/dist/server/src/camera/decoder/event-manager.d.ts +4 -3
  527. package/dist/server/src/camera/decoder/event-manager.js +17 -5
  528. package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
  529. package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +3 -0
  530. package/dist/server/src/camera/decoder/event-thumbnailer.js +13 -8
  531. package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
  532. package/dist/server/src/camera/decoder/event-trace.d.ts +58 -0
  533. package/dist/server/src/camera/decoder/event-trace.js +118 -0
  534. package/dist/server/src/camera/decoder/event-trace.js.map +1 -0
  535. package/dist/server/src/camera/decoder/nvr-sink.d.ts +2 -0
  536. package/dist/server/src/camera/decoder/nvr-sink.js.map +1 -1
  537. package/dist/server/src/camera/decoder/reconnect-backoff.js +1 -1
  538. package/dist/server/src/camera/decoder/reconnect-backoff.js.map +1 -1
  539. package/dist/server/src/camera/decoder/sources/analysis-source.d.ts +1 -0
  540. package/dist/server/src/camera/decoder/sources/buffered-source.d.ts +7 -1
  541. package/dist/server/src/camera/decoder/sources/buffered-source.js +27 -15
  542. package/dist/server/src/camera/decoder/sources/buffered-source.js.map +1 -1
  543. package/dist/server/src/camera/decoder/sources/frame-handle.d.ts +2 -1
  544. package/dist/server/src/camera/decoder/sources/frame-handle.js +5 -3
  545. package/dist/server/src/camera/decoder/sources/frame-handle.js.map +1 -1
  546. package/dist/server/src/camera/decoder/sources/frame-source.d.ts +1 -0
  547. package/dist/server/src/camera/decoder/sources/frame-source.js +7 -2
  548. package/dist/server/src/camera/decoder/sources/frame-source.js.map +1 -1
  549. package/dist/server/src/camera/decoder/sources/rtp-index.d.ts +9 -0
  550. package/dist/server/src/camera/decoder/sources/rtp-index.js +24 -0
  551. package/dist/server/src/camera/decoder/sources/rtp-index.js.map +1 -0
  552. package/dist/server/src/camera/decoder/worker.js +1 -0
  553. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  554. package/dist/server/src/camera/streaming/rtp-session.js +12 -9
  555. package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
  556. package/dist/server/src/go2rtc/types.d.ts +1 -1
  557. package/dist/server/src/go2rtc/types.js +1 -1
  558. package/dist/server/src/go2rtc/types.js.map +1 -1
  559. package/dist/server/src/plugins/runtime/node/child.js +1 -0
  560. package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
  561. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +3 -0
  562. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  563. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +2 -5
  564. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +95 -24
  565. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -1
  566. package/dist/server/src/plugins/runtime/python/child.py +1 -0
  567. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +9 -0
  568. package/dist/server/src/plugins/runtime/python/proxy/sensor.py +2 -1
  569. package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +185 -88
  570. package/dist/server/src/plugins/runtime/python/typings.py +18 -0
  571. package/dist/server/src/rpc/interfaces/sensor.d.ts +19 -4
  572. package/dist/server/src/sensors/discovery.d.ts +1 -1
  573. package/dist/server/src/sensors/discovery.js +12 -21
  574. package/dist/server/src/sensors/discovery.js.map +1 -1
  575. package/dist/server/src/sensors/registry.d.ts +6 -2
  576. package/dist/server/src/sensors/registry.js +75 -6
  577. package/dist/server/src/sensors/registry.js.map +1 -1
  578. package/dist/server/src/services/config/defaults.js +1 -1
  579. package/dist/server/src/services/config/defaults.js.map +1 -1
  580. package/dist/server/src/services/config/index.js +4 -6
  581. package/dist/server/src/services/config/index.js.map +1 -1
  582. package/dist/server/src/utils/camera.d.ts +12 -2
  583. package/dist/server/src/utils/camera.js +27 -1
  584. package/dist/server/src/utils/camera.js.map +1 -1
  585. package/dist/server/src/workers/pairing.js +17 -8
  586. package/dist/server/src/workers/pairing.js.map +1 -1
  587. package/package.json +10 -10
  588. package/dist/interface/assets/Automation-COZFDnKK.js +0 -3
  589. package/dist/interface/assets/AutomationStoreDetail-BQ2fER7x.js +0 -2
  590. package/dist/interface/assets/Automations-QmfGIQXO.js +0 -2
  591. package/dist/interface/assets/Camera-g95slrO0.js +0 -2
  592. package/dist/interface/assets/Cameras-BO4SDgY0.js +0 -652
  593. package/dist/interface/assets/Camview-yzOY3cnD.js +0 -1
  594. package/dist/interface/assets/ConfigActionNotification-CbhQpAqn.js +0 -1
  595. package/dist/interface/assets/ConfigConditionSwitch-CA-tuT-G.js +0 -1
  596. package/dist/interface/assets/ConfigTriggerGeofence-sbEglk8c.js +0 -1
  597. package/dist/interface/assets/Console-B78qXoaH.js +0 -1
  598. package/dist/interface/assets/CuiBottomSheet-BjkvcU8T.js +0 -1
  599. package/dist/interface/assets/CuiCameraPipCard-BOky075i.js +0 -1
  600. package/dist/interface/assets/CuiCameraRecordings-BzbwSK8-.css +0 -1
  601. package/dist/interface/assets/CuiCameraRecordings-DIBgpGaS.js +0 -1
  602. package/dist/interface/assets/CuiCameraTable-DwRywA0z.js +0 -1
  603. package/dist/interface/assets/CuiLightControl-CsK2cn7L.js +0 -1
  604. package/dist/interface/assets/CuiMarkdownContent-CckAX6Ci.js +0 -1
  605. package/dist/interface/assets/CuiPluginCard-C-1ZhHi8.js +0 -2
  606. package/dist/interface/assets/CuiSchema-CxRd72K7.js +0 -1
  607. package/dist/interface/assets/Faces-kl1hwT5M.js +0 -1
  608. package/dist/interface/assets/FirstSteps-BYGvfH-S.js +0 -1
  609. package/dist/interface/assets/Floorplan-DNd9aQv3.js +0 -1
  610. package/dist/interface/assets/Instances-aZApGeHu.js +0 -1
  611. package/dist/interface/assets/Metrics-D5UHs6wj.js +0 -9
  612. package/dist/interface/assets/OAuthDeviceFlow-o2Irbs3_.js +0 -1
  613. package/dist/interface/assets/Plugin-CEpSsNQA.js +0 -1
  614. package/dist/interface/assets/PluginDetail-Ca-NJcL1.js +0 -2
  615. package/dist/interface/assets/PluginSearch-DurGrb4n.js +0 -1
  616. package/dist/interface/assets/PluginSearch-Tmg5vCQF.js +0 -2
  617. package/dist/interface/assets/Plugins-ocuSdXhB.js +0 -1
  618. package/dist/interface/assets/Recordings-CtSj2RuO.js +0 -1
  619. package/dist/interface/assets/SensorEdit-CcD4LvZr.js +0 -1
  620. package/dist/interface/assets/Sensors-CWjmo27p.js +0 -2
  621. package/dist/interface/assets/SettingsAccount-DQm9vFIT.js +0 -1
  622. package/dist/interface/assets/SettingsAccount-DekJwq5r.js +0 -1
  623. package/dist/interface/assets/SettingsAppearance-B7mm_vGf.js +0 -1
  624. package/dist/interface/assets/SettingsMqtt-D8grttey.js +0 -1
  625. package/dist/interface/assets/SettingsNotifications-BtFyN8J3.js +0 -1
  626. package/dist/interface/assets/SettingsRecordings-DVEsPab-.js +0 -1
  627. package/dist/interface/assets/SettingsRemote-Dqs-d-Xk.js +0 -2
  628. package/dist/interface/assets/Workers-L7PPidAd.js +0 -2
  629. package/dist/interface/assets/alert-outline-KxFvd3i6.js +0 -1
  630. package/dist/interface/assets/api-CEbDxsSY.css +0 -2
  631. package/dist/interface/assets/api-ou2-S3Z9.js +0 -2
  632. package/dist/interface/assets/cameras.schema-BzSBpeUl.js +0 -1
  633. package/dist/interface/assets/cloudHandoff-ChRx5fsr.js +0 -1
  634. package/dist/interface/assets/main-CT2dZ3bR.js +0 -3
  635. package/dist/interface/assets/nodeDefinitions-D6zhuw60.js +0 -1
  636. package/dist/interface/assets/sensorIcons-tORVN7ay.js +0 -1
  637. package/dist/interface/assets/theme-t4dIArYy.js +0 -1
  638. package/dist/interface/assets/types-D889aM6c.js +0 -1
  639. package/dist/interface/assets/types-Dg1X10xd.js +0 -1
  640. package/dist/interface/assets/ungrouped-Pn6rAXZt.js +0 -1
  641. package/dist/interface/assets/useBackupRestore-BcAR3KYA.js +0 -1
  642. package/dist/interface/assets/vendor-cameraui-OySaGjmo.js +0 -2326
  643. package/dist/interface/assets/vendor-core-BZ52eUwC.js +0 -1
  644. package/dist/interface/assets/vendor-zod-B0ZFM2Pr.js +0 -127
@@ -1,13 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import asyncio
3
4
  import contextlib
4
5
  from typing import TYPE_CHECKING, Any, cast
5
6
 
6
7
  from _camera_ui_tools.camera_ui_common import TaskSet
7
8
  from _camera_ui_tools.camera_ui_sdk import (
9
+ AdoptedSensor,
8
10
  BasePlugin,
9
- RegisteredSensorInfo,
11
+ PluginInterface,
10
12
  Sensor,
13
+ SensorDiscoveryProvider,
11
14
  SensorHistoryEntry,
12
15
  SensorLike,
13
16
  SensorType,
@@ -23,10 +26,12 @@ from plugins.runtime.python.proxy.sensor import (
23
26
  if TYPE_CHECKING:
24
27
  from _camera_ui_tools.camera_ui_common import LoggerService
25
28
  from _camera_ui_tools.camera_ui_rpc import CloseHandler, RPCClient
29
+ from _camera_ui_tools.camera_ui_sdk.internal import SensorSourcePatch
26
30
  from plugins.runtime.python.storage_controller import StorageController
27
31
  from plugins.runtime.python.typings import (
28
32
  PluginInfo,
29
33
  SensorAddedEvent,
34
+ SensorAdoptedEvent,
30
35
  SensorAssignmentChangedEvent,
31
36
  SensorConnectedChangedEvent,
32
37
  SensorDeletedEvent,
@@ -49,6 +54,19 @@ DETECTION_SENSOR_TYPES: frozenset[SensorType] = frozenset(
49
54
  )
50
55
 
51
56
 
57
+ def to_adopted(data: StoredSensorData) -> AdoptedSensor:
58
+ record: AdoptedSensor = {
59
+ "id": data["id"],
60
+ "nativeId": data["nativeId"],
61
+ "name": data["name"],
62
+ "type": data["type"],
63
+ }
64
+ address = data.get("address")
65
+ if address is not None:
66
+ record["address"] = address
67
+ return record
68
+
69
+
52
70
  class SensorManagerProxy:
53
71
  def __init__(
54
72
  self,
@@ -84,11 +102,25 @@ class SensorManagerProxy:
84
102
  def _consumes_something(self) -> bool:
85
103
  return len(self._plugin["contract"].get("consumes", [])) > 0
86
104
 
105
+ @property
106
+ def _provides_adopted(self) -> bool:
107
+ return PluginInterface.SensorDiscovery in self._plugin["contract"].get("interfaces", [])
108
+
109
+ @property
110
+ def _discovery_plugin(self) -> SensorDiscoveryProvider | None:
111
+ # typed as object: mypy cannot intersect BasePlugin with a Protocol
112
+ plugin: object = self._plugin_instance
113
+ if not self._provides_adopted or not isinstance(plugin, SensorDiscoveryProvider):
114
+ return None
115
+ return plugin
116
+
87
117
  async def init(self) -> None:
88
- if not self._consumes_something:
118
+ if not self._consumes_something and not self._provides_adopted:
89
119
  return
90
120
 
91
121
  await self._ensure_global_subscription()
122
+ if not self._consumes_something:
123
+ return
92
124
 
93
125
  try:
94
126
  sensors = await self._registry_proxy.getSensors(self._plugin["id"])
@@ -108,27 +140,123 @@ class SensorManagerProxy:
108
140
  cast("list[SensorLike]", list(self._consumed.values()))
109
141
  )
110
142
 
111
- async def addSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
112
- async with registration_slot():
113
- await self._addSensorInner(sensor)
143
+ async def configure_adopted_sensors(self) -> None:
144
+ plugin = self._discovery_plugin
145
+ if plugin is None:
146
+ return
147
+
148
+ try:
149
+ stored = await self._registry_proxy.getSensors(self._plugin["id"])
150
+ records = [to_adopted(data) for data in stored if self._is_own_adopted(data)]
151
+ except Exception as e:
152
+ self._logger.warn(f"Could not load the adopted sensors: {e}")
153
+ return
154
+
155
+ try:
156
+ sensors = await plugin.configureAdoptedSensors(records)
157
+ except Exception as e:
158
+ self._logger.warn(f"configureAdoptedSensors failed: {e}")
159
+ return
160
+
161
+ by_native_id = {record["nativeId"]: record for record in records}
162
+ bound: set[str] = set()
163
+
164
+ async def bind(sensor: Sensor[Any, Any, Any]) -> None:
165
+ record = by_native_id.get(sensor.nativeId) if sensor.nativeId else None
166
+ if record is None:
167
+ self._logger.warn(
168
+ f'Sensor "{sensor.name}" returned by configureAdoptedSensors has no adopted record '
169
+ f"(nativeId {sensor.nativeId or 'missing'}), ignored"
170
+ )
171
+ return
172
+ if record["nativeId"] in bound or record["id"] in self._owned:
173
+ return
174
+ bound.add(record["nativeId"])
175
+ await self._bind_adopted(sensor, record)
176
+
177
+ await asyncio.gather(*(bind(sensor) for sensor in sensors))
178
+
179
+ missing = len(records) - len(bound)
180
+ if missing > 0:
181
+ self._logger.warn(
182
+ f"{missing} adopted sensor(s) got no runtime sensor from the plugin, they stay disconnected"
183
+ )
184
+
185
+ async def getSensorHistory(self, sensorIds: list[str], start: int, end: int) -> list[SensorHistoryEntry]:
186
+ return await self._registry_proxy.getSensorHistory(sensorIds, start, end)
114
187
 
115
- async def _addSensorInner(self, sensor: Sensor[Any, Any, Any]) -> None:
188
+ # keeps a camera-registered sensor's assignedCameraIds in sync with the global stream
189
+ async def track_camera_sensor(self, sensor: Sensor[Any, Any, Any]) -> None:
190
+ await self._ensure_global_subscription()
191
+ self._external[sensor.id] = sensor
192
+
193
+ def untrack_camera_sensor(self, sensor_id: str) -> None:
194
+ self._external.pop(sensor_id, None)
195
+
196
+ def on_rpc_reconnected(self) -> None:
197
+ if self._closed:
198
+ return
199
+ self._tasks.add(self._resync_all_consumed())
200
+
201
+ async def close(self) -> None:
202
+ self._closed = True
203
+
204
+ if self._global_unsubscribe:
205
+ with contextlib.suppress(Exception):
206
+ await self._global_unsubscribe()
207
+ self._global_unsubscribe = None
208
+
209
+ for sensor_proxy in self._consumed.values():
210
+ with contextlib.suppress(Exception):
211
+ await sensor_proxy._unsubscribe_from_events() # pyright: ignore[reportPrivateUsage]
212
+ self._consumed.clear()
213
+ self._external.clear()
214
+
215
+ for cleanup in list(self._cleanups.values()):
216
+ with contextlib.suppress(Exception):
217
+ await cleanup()
218
+ self._cleanups.clear()
219
+
220
+ for sensor in self._owned.values():
221
+ sensor._cleanup() # pyright: ignore[reportPrivateUsage]
222
+ self._owned.clear()
223
+
224
+ self._tasks.remove_all()
225
+
226
+ async def _bind_adopted(self, sensor: Sensor[Any, Any, Any], record: AdoptedSensor) -> None:
227
+ try:
228
+ async with registration_slot():
229
+ await self._bind(sensor, record["id"])
230
+ except Exception as e:
231
+ self._logger.warn(f'Binding adopted sensor "{record["name"]}" failed: {e}')
232
+
233
+ def _unbind(self, sensor_id: str) -> Sensor[Any, Any, Any] | None:
234
+ sensor = self._owned.pop(sensor_id, None)
235
+ if sensor is None:
236
+ return None
237
+ cleanup = self._cleanups.pop(sensor_id, None)
238
+ if cleanup:
239
+
240
+ async def run_cleanup() -> None:
241
+ with contextlib.suppress(Exception):
242
+ await cleanup()
243
+
244
+ self._tasks.add(run_cleanup())
245
+ sensor._cleanup() # pyright: ignore[reportPrivateUsage]
246
+ return sensor
247
+
248
+ async def _bind(self, sensor: Sensor[Any, Any, Any], record_id: str) -> None:
116
249
  # producers need the global stream too: assignment changes must reach
117
250
  # owned sensors, their detection fan-out reads assignedCameraIds
118
251
  await self._ensure_global_subscription()
119
252
 
120
253
  plugin_id = self._plugin["id"]
121
254
  sensor._setPluginId(plugin_id) # pyright: ignore[reportPrivateUsage]
255
+ sensor._setId(record_id) # pyright: ignore[reportPrivateUsage]
122
256
 
123
257
  sensor_json = sensor.toJSON()
124
258
  sensor_json["requiresFrames"] = getattr(sensor, "_requires_frames", False) is True
125
259
 
126
- # resolve the durable id first and wire storage with it, so registration
127
- # data (modelSpec) can read sensor storage
128
- sensor_id = await self._registry_proxy.resolveSensor(sensor_json, plugin_id)
129
- sensor._setId(sensor_id) # pyright: ignore[reportPrivateUsage]
130
- sensor_json["id"] = sensor_id
131
-
132
260
  storage = self._storage_controller.createSensorStorage(plugin_id, sensor.id, sensor.storage_schema)
133
261
  await storage.register_storage()
134
262
  sensor._setStorage(storage) # pyright: ignore[reportPrivateUsage]
@@ -147,6 +275,7 @@ class SensorManagerProxy:
147
275
  lambda properties: self._on_sensor_state_write(sensor, sensor_type, properties)
148
276
  )
149
277
  sensor._initCapabilities(lambda caps: self._on_sensor_capabilities_changed(sensor.id, caps)) # pyright: ignore[reportPrivateUsage]
278
+ sensor._initSource(lambda patch: self._on_sensor_source_changed(sensor.id, patch)) # pyright: ignore[reportPrivateUsage]
150
279
 
151
280
  rpc_cleanup = await self._proxy.register_handler(sensor_namespace, sensor, without_decorators=True)
152
281
 
@@ -172,82 +301,6 @@ class SensorManagerProxy:
172
301
 
173
302
  sensor._setActive(True) # pyright: ignore[reportPrivateUsage]
174
303
 
175
- async def removeSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
176
- try:
177
- await self._registry_proxy.unregisterSensor(sensor.id)
178
- except Exception as e:
179
- self._logger.warn(f"Failed to unregister sensor {sensor.id}: {e}")
180
-
181
- cleanup = self._cleanups.pop(sensor.id, None)
182
- if cleanup:
183
- await cleanup()
184
-
185
- self._owned.pop(sensor.id, None)
186
- sensor._cleanup() # pyright: ignore[reportPrivateUsage]
187
-
188
- def getSensors(self) -> list[Sensor[Any, Any, Any]]:
189
- return list(self._owned.values())
190
-
191
- async def getRegisteredSensors(self) -> list[RegisteredSensorInfo]:
192
- plugin_id = self._plugin["id"]
193
- stored = await self._registry_proxy.getSensors(plugin_id)
194
- result: list[RegisteredSensorInfo] = []
195
- for data in stored:
196
- if data.get("pluginId") != plugin_id:
197
- continue
198
- info: RegisteredSensorInfo = {
199
- "id": data["id"],
200
- "type": data["type"],
201
- "name": data["name"],
202
- "connected": data["connected"],
203
- }
204
- native_id = data.get("nativeId")
205
- if native_id is not None:
206
- info["nativeId"] = native_id
207
- result.append(info)
208
- return result
209
-
210
- async def getSensorHistory(self, sensorIds: list[str], start: int, end: int) -> list[SensorHistoryEntry]:
211
- return await self._registry_proxy.getSensorHistory(sensorIds, start, end)
212
-
213
- # keeps a camera-registered sensor's assignedCameraIds in sync with the global stream
214
- async def track_camera_sensor(self, sensor: Sensor[Any, Any, Any]) -> None:
215
- await self._ensure_global_subscription()
216
- self._external[sensor.id] = sensor
217
-
218
- def untrack_camera_sensor(self, sensor_id: str) -> None:
219
- self._external.pop(sensor_id, None)
220
-
221
- def on_rpc_reconnected(self) -> None:
222
- if self._closed:
223
- return
224
- self._tasks.add(self._resync_all_consumed())
225
-
226
- async def close(self) -> None:
227
- self._closed = True
228
-
229
- if self._global_unsubscribe:
230
- with contextlib.suppress(Exception):
231
- await self._global_unsubscribe()
232
- self._global_unsubscribe = None
233
-
234
- for sensor_proxy in self._consumed.values():
235
- with contextlib.suppress(Exception):
236
- await sensor_proxy._unsubscribe_from_events() # pyright: ignore[reportPrivateUsage]
237
- self._consumed.clear()
238
- self._external.clear()
239
-
240
- for cleanup in list(self._cleanups.values()):
241
- with contextlib.suppress(Exception):
242
- await cleanup()
243
- self._cleanups.clear()
244
-
245
- for sensor in self._owned.values():
246
- sensor._cleanup() # pyright: ignore[reportPrivateUsage]
247
- self._owned.clear()
248
-
249
- self._tasks.remove_all()
250
-
251
304
  async def _ensure_global_subscription(self) -> None:
252
305
  if self._global_unsubscribe is not None:
253
306
  return
@@ -275,6 +328,13 @@ class SensorManagerProxy:
275
328
  if state:
276
329
  sensor_proxy._apply_refreshed_state(state) # pyright: ignore[reportPrivateUsage]
277
330
 
331
+ def _is_own_adopted(self, data: StoredSensorData) -> bool:
332
+ return (
333
+ data["pluginId"] == self._plugin["id"]
334
+ and not data.get("boundCameraId")
335
+ and bool(data.get("nativeId"))
336
+ )
337
+
278
338
  def _is_consumable(self, data: StoredSensorData) -> bool:
279
339
  if data["id"] in self._owned or data["pluginId"] == self._plugin["id"]:
280
340
  return False
@@ -330,8 +390,38 @@ class SensorManagerProxy:
330
390
  if self._plugin_instance:
331
391
  await self._plugin_instance.onSensorAdded(sensor_proxy)
332
392
 
393
+ elif event_type == "sensor:adopted":
394
+ adopted = cast("SensorAdoptedEvent", message.get("data"))
395
+ plugin = self._discovery_plugin
396
+ if (
397
+ plugin is None
398
+ or not self._is_own_adopted(adopted["sensor"])
399
+ or adopted["sensor"]["id"] in self._owned
400
+ ):
401
+ return
402
+ record = to_adopted(adopted["sensor"])
403
+ try:
404
+ sensor = await plugin.onSensorAdopted(record)
405
+ except Exception as e:
406
+ self._logger.warn(f'onSensorAdopted failed for "{record["name"]}": {e}')
407
+ return
408
+ if sensor.nativeId != record["nativeId"]:
409
+ self._logger.warn(
410
+ f'Sensor "{sensor.name}" returned by onSensorAdopted carries nativeId '
411
+ f"{sensor.nativeId or 'missing'}, expected {record['nativeId']}, ignored"
412
+ )
413
+ return
414
+ await self._bind_adopted(sensor, record)
415
+
333
416
  elif event_type == "sensor:deleted":
334
417
  deleted = cast("SensorDeletedEvent", message.get("data"))
418
+ unbound = self._unbind(deleted["sensorId"])
419
+ plugin = self._discovery_plugin
420
+ if unbound is not None and unbound.nativeId and plugin is not None:
421
+ try:
422
+ await plugin.onSensorUnadopted(unbound.nativeId)
423
+ except Exception as e:
424
+ self._logger.warn(f"onSensorUnadopted failed for {unbound.nativeId}: {e}")
335
425
  await self._release_consumed(deleted["sensorId"])
336
426
 
337
427
  elif event_type == "sensor:connected:changed":
@@ -424,3 +514,10 @@ class SensorManagerProxy:
424
514
  await self._registry_proxy.updateCapabilities(sensor_id, capabilities)
425
515
 
426
516
  self._tasks.add(notify())
517
+
518
+ def _on_sensor_source_changed(self, sensor_id: str, patch: SensorSourcePatch) -> None:
519
+ async def notify() -> None:
520
+ with contextlib.suppress(Exception):
521
+ await self._registry_proxy.updateSource(sensor_id, patch)
522
+
523
+ self._tasks.add(notify())
@@ -5,6 +5,7 @@ from _camera_ui_tools.camera_ui_sdk import (
5
5
  Camera,
6
6
  ModelSpec,
7
7
  PluginInfo,
8
+ SensorSourceState,
8
9
  SensorType,
9
10
  )
10
11
  from _camera_ui_tools.camera_ui_sdk.internal import PropertyChangedEvent
@@ -57,6 +58,9 @@ class StoredSensorData(TypedDict):
57
58
  assignedCameraIds: list[str]
58
59
  boundCameraId: NotRequired[str]
59
60
  exposed: bool
61
+ origin: NotRequired[str]
62
+ address: NotRequired[str]
63
+ sourceState: NotRequired[SensorSourceState]
60
64
  connected: bool
61
65
  properties: dict[str, Any]
62
66
  capabilities: NotRequired[list[str]]
@@ -82,6 +86,16 @@ class SensorAddedEvent(TypedDict):
82
86
  state: SensorRefreshedState
83
87
 
84
88
 
89
+ class SensorAdoptedEvent(TypedDict):
90
+ sensor: StoredSensorData
91
+
92
+
93
+ class SensorSourceChangedEvent(TypedDict):
94
+ sensorId: str
95
+ sourceState: NotRequired[SensorSourceState]
96
+ address: NotRequired[str]
97
+
98
+
85
99
  class SensorDeletedEvent(TypedDict):
86
100
  sensorId: str
87
101
  sensorType: SensorType
@@ -120,6 +134,8 @@ class SensorEventMessage(TypedDict):
120
134
  type: Literal[
121
135
  "property:changed",
122
136
  "sensor:added",
137
+ "sensor:adopted",
138
+ "sensor:source:changed",
123
139
  "sensor:deleted",
124
140
  "sensor:connected:changed",
125
141
  "sensor:displayName:changed",
@@ -130,6 +146,8 @@ class SensorEventMessage(TypedDict):
130
146
  data: (
131
147
  PropertyChangedEvent
132
148
  | SensorAddedEvent
149
+ | SensorAdoptedEvent
150
+ | SensorSourceChangedEvent
133
151
  | SensorDeletedEvent
134
152
  | SensorConnectedChangedEvent
135
153
  | SensorDisplayNameChangedEvent
@@ -1,5 +1,5 @@
1
- import type { Camera, DiscoveredSensor, ModelSpec, SensorType } from '@camera.ui/sdk';
2
- import type { PropertyChangedEvent, SensorJSON } from '@camera.ui/sdk/internal';
1
+ import type { Camera, DiscoveredSensor, ModelSpec, SensorSourceState, SensorType } from '@camera.ui/sdk';
2
+ import type { PropertyChangedEvent, SensorJSON, SensorSourcePatch } from '@camera.ui/sdk/internal';
3
3
  export interface DiscoveredSensorListItem extends DiscoveredSensor {
4
4
  pluginId: string;
5
5
  pluginName: string;
@@ -21,6 +21,9 @@ export interface SensorDiscoveryGenericEvent<K extends keyof SensorDiscoveryEven
21
21
  type: K;
22
22
  data: SensorDiscoveryEvents[K];
23
23
  }
24
+ export interface SensorsNamespaceEvents extends SensorDiscoveryEvents {
25
+ 'sensor:source:changed': SensorSourceChangedEvent;
26
+ }
24
27
  export interface StoredSensorData {
25
28
  id: string;
26
29
  type: SensorType;
@@ -32,6 +35,8 @@ export interface StoredSensorData {
32
35
  boundCameraId?: string;
33
36
  exposed: boolean;
34
37
  origin?: string;
38
+ address?: string;
39
+ sourceState?: SensorSourceState;
35
40
  connected: boolean;
36
41
  properties: Record<string, unknown>;
37
42
  capabilities: string[];
@@ -65,6 +70,7 @@ export interface SensorRegistryInterface {
65
70
  updatePropertyValues(sensorId: string, properties: Record<string, unknown>): void;
66
71
  updateCapabilities(sensorId: string, capabilities: string[]): void;
67
72
  updateModelSpec(sensorId: string, modelSpec: ModelSpec): void;
73
+ updateSource(sensorId: string, patch: SensorSourcePatch): void;
68
74
  getPropertyValue(sensorId: string, property: string): unknown;
69
75
  getAllPropertyValues(sensorId: string): Record<string, unknown>;
70
76
  getSensorState(sensorId: string): SensorRefreshedState | undefined;
@@ -86,6 +92,15 @@ export interface SensorAddedEvent {
86
92
  sensor: StoredSensorData;
87
93
  state: SensorRefreshedState;
88
94
  }
95
+ export interface SensorAdoptedEvent {
96
+ sensor: StoredSensorData;
97
+ }
98
+ export interface SensorSourceChangedEvent {
99
+ sensorId: string;
100
+ sensorType: SensorType;
101
+ sourceState?: SensorSourceState;
102
+ address?: string;
103
+ }
89
104
  export interface SensorDeletedEvent {
90
105
  sensorId: string;
91
106
  sensorType: SensorType;
@@ -116,8 +131,8 @@ export interface SensorAssignmentChangedEvent {
116
131
  assigned: boolean;
117
132
  }
118
133
  export interface SensorEventMessage {
119
- type: 'property:changed' | 'sensor:added' | 'sensor:deleted' | 'sensor:connected:changed' | 'sensor:displayName:changed' | 'sensor:capabilities:changed' | 'sensor:assignment:changed' | 'sensor:exposed:changed';
120
- data: PropertyChangedEvent | SensorAddedEvent | SensorDeletedEvent | SensorConnectedChangedEvent | SensorDisplayNameChangedEvent | SensorCapabilitiesChangedEvent | SensorAssignmentChangedEvent | SensorExposedChangedEvent;
134
+ type: 'property:changed' | 'sensor:added' | 'sensor:adopted' | 'sensor:source:changed' | 'sensor:deleted' | 'sensor:connected:changed' | 'sensor:displayName:changed' | 'sensor:capabilities:changed' | 'sensor:assignment:changed' | 'sensor:exposed:changed';
135
+ data: PropertyChangedEvent | SensorAddedEvent | SensorAdoptedEvent | SensorSourceChangedEvent | SensorDeletedEvent | SensorConnectedChangedEvent | SensorDisplayNameChangedEvent | SensorCapabilitiesChangedEvent | SensorAssignmentChangedEvent | SensorExposedChangedEvent;
121
136
  }
122
137
  export interface CameraEventMessage {
123
138
  type: 'removed' | 'updated' | 'cameraState' | 'frameWorkerState';
@@ -21,7 +21,7 @@ export declare class SensorDiscoveryManager {
21
21
  destroy(): void;
22
22
  private list;
23
23
  private isSensorDiscoveryPlugin;
24
- private dropStaleRecords;
24
+ private adoptedNativeIds;
25
25
  private publish;
26
26
  private startAutoRescanTimer;
27
27
  private stopAutoRescanTimer;
@@ -28,7 +28,7 @@ export class SensorDiscoveryManager {
28
28
  }
29
29
  const cacheIsFresh = this.lastScanCompletedAt > 0 && Date.now() - this.lastScanCompletedAt < MIN_SCAN_INTERVAL_MS;
30
30
  if (!this.isScanning && !cacheIsFresh) {
31
- void this.scan();
31
+ this.scan();
32
32
  }
33
33
  return this.list();
34
34
  }
@@ -51,7 +51,7 @@ export class SensorDiscoveryManager {
51
51
  if (!plugin || !this.isSensorDiscoveryPlugin(plugin) || !plugin.worker?.isRunning()) {
52
52
  throw new Error('Plugin not found or not running');
53
53
  }
54
- await plugin.worker.pluginProxy.onAdoptSensor?.(sensor);
54
+ this.registry.createAdoptedSensor(pluginId, sensor);
55
55
  const items = this.cache.get(pluginId);
56
56
  if (items) {
57
57
  this.cache.set(pluginId, items.filter((item) => item.id !== sensor.id));
@@ -68,8 +68,10 @@ export class SensorDiscoveryManager {
68
68
  await Promise.all(providers.map(async (plugin) => {
69
69
  try {
70
70
  const sensors = (await plugin.worker.pluginProxy.onDiscoverSensors?.()) ?? [];
71
- await this.dropStaleRecords(plugin.id, sensors);
72
- const items = sensors.map((sensor) => ({ ...sensor, pluginId: plugin.id, pluginName: plugin.contract.name }));
71
+ const adopted = this.adoptedNativeIds(plugin.id);
72
+ const items = sensors
73
+ .filter((sensor) => !adopted.has(sensor.id))
74
+ .map((sensor) => ({ ...sensor, pluginId: plugin.id, pluginName: plugin.contract.name }));
73
75
  this.cache.set(plugin.id, items);
74
76
  // per plugin as each answers, an empty list clears its entries
75
77
  this.publish('sensors:discovered', { sensors: items, source: plugin.id });
@@ -103,24 +105,13 @@ export class SensorDiscoveryManager {
103
105
  isSensorDiscoveryPlugin(plugin) {
104
106
  return plugin.contract.interfaces.includes(PluginInterface.SensorDiscovery);
105
107
  }
106
- async dropStaleRecords(pluginId, sensors) {
107
- if (sensors.length === 0)
108
- return;
109
- const offered = new Set(sensors.map((sensor) => sensor.id));
108
+ adoptedNativeIds(pluginId) {
109
+ const ids = new Set();
110
110
  for (const record of this.registry.getRecords()) {
111
- if (record.pluginInfo.id !== pluginId)
112
- continue;
113
- if (!record.nativeId || !offered.has(record.nativeId))
114
- continue;
115
- if (this.registry.isConnected(record._id))
116
- continue;
117
- try {
118
- await this.registry.deleteSensor(record._id);
119
- }
120
- catch {
121
- // raced a re-registration, the record is live again and stays
122
- }
111
+ if (record.pluginInfo.id === pluginId && record.nativeId)
112
+ ids.add(record.nativeId);
123
113
  }
114
+ return ids;
124
115
  }
125
116
  publish(type, data) {
126
117
  const event = { type, data };
@@ -130,7 +121,7 @@ export class SensorDiscoveryManager {
130
121
  this.stopAutoRescanTimer();
131
122
  this.autoRescanTimer = setInterval(() => {
132
123
  if (!this.isScanning) {
133
- void this.scan();
124
+ this.scan();
134
125
  }
135
126
  }, AUTO_RESCAN_INTERVAL_MS);
136
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/sensors/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/sensors/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,MAAM,OAAO,sBAAsB;IACzB,QAAQ,CAAiB;IACzB,WAAW,CAAc;IACzB,MAAM,CAAgB;IACtB,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAEtC,KAAK,GAAG,IAAI,GAAG,EAAsC,CAAC;IACtD,UAAU,GAAG,KAAK,CAAC;IACnB,eAAe,GAAG,CAAC,CAAC;IACpB,mBAAmB,GAAG,CAAC,CAAC;IACxB,eAAe,CAAkB;IAEjC,UAAU,GAAG,gBAAgB,CAAC,yBAAyB,EAAE,CAAC;IAElE;QACE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAiB,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAc,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAgB,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEM,SAAS;QACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;QAClH,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,MAAwB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAC9C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAE5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAE3I,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;oBAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACjD,MAAM,KAAK,GAAG,OAAO;yBAClB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;yBAC3C,GAAG,CAAC,CAAC,MAAM,EAA4B,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACrH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACjC,+DAA+D;oBAC/D,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,4DAA4D;oBAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,IAAI;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAEO,uBAAuB,CAAC,MAAc;QAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,OAAO,CAAwC,IAAO,EAAE,IAA8B;QAC5F,MAAM,KAAK,GAAmC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAC9B,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAED,IAAI,QAA4C,CAAC;AAEjD,MAAM,UAAU,kBAAkB;IAChC,QAAQ,KAAK,IAAI,sBAAsB,EAAE,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -2,8 +2,8 @@ import { SensorType } from '@camera.ui/sdk';
2
2
  import { ServerSensor } from '../sensors/sensor.js';
3
3
  import type { Logger } from '@camera.ui/common/logger';
4
4
  import type { Promisify, RPCClient } from '@camera.ui/rpc';
5
- import type { ModelSpec } from '@camera.ui/sdk';
6
- import type { SensorJSON } from '@camera.ui/sdk/internal';
5
+ import type { DiscoveredSensor, ModelSpec } from '@camera.ui/sdk';
6
+ import type { SensorJSON, SensorSourcePatch } from '@camera.ui/sdk/internal';
7
7
  import type { DBSensor, DBSensorHistoryEntry } from '../api/database/types.js';
8
8
  import type { DetectionCoordinatorInterface } from '../rpc/interfaces/detection.js';
9
9
  import type { RegisterSensorOptions, SensorRefreshedState, SensorRegistration, StoredSensorData } from '../rpc/interfaces/sensor.js';
@@ -33,6 +33,8 @@ export declare class SensorRegistry {
33
33
  resolveSensor(sensor: SensorJSON, pluginId: string, options?: RegisterSensorOptions): string;
34
34
  unregisterSensor(sensorId: string): void;
35
35
  removePluginSensors(pluginId: string): void;
36
+ createAdoptedSensor(pluginId: string, sensor: DiscoveredSensor): DBSensor;
37
+ updateSource(sensorId: string, patch: SensorSourcePatch): void;
36
38
  deleteSensor(sensorId: string): Promise<void>;
37
39
  createVirtualSensor(input: {
38
40
  type: SensorType;
@@ -67,6 +69,8 @@ export declare class SensorRegistry {
67
69
  toStoredData(record: DBSensor): StoredSensorData;
68
70
  coordinatorFor(cameraId: string): Promisify<DetectionCoordinatorInterface>;
69
71
  private validateContract;
72
+ private findByNativeId;
73
+ private assertMayCreate;
70
74
  private reconcile;
71
75
  private disconnectSensor;
72
76
  syncCameraProviders(cameraId: string): Promise<void>;