@camera.ui/server 2.0.22 → 2.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/dist/interface/assets/404-junY0N5P.js +1 -0
  2. package/dist/interface/assets/About-Dwc0TTLa.js +1 -0
  3. package/dist/interface/assets/Adminpanel-wZGtsPD-.js +1 -0
  4. package/dist/interface/assets/Automation-Dj6xmGae.js +3 -0
  5. package/dist/interface/assets/AutomationImport-Ccnxyslc.js +2 -0
  6. package/dist/interface/assets/AutomationStore-DmbxA0ml.js +2 -0
  7. package/dist/interface/assets/AutomationStoreDetail-DcbvD8g5.js +2 -0
  8. package/dist/interface/assets/Automations-C9JJO6dy.js +2 -0
  9. package/dist/interface/assets/Camera-D_j0J3kB.js +2 -0
  10. package/dist/interface/assets/CameraConsole--hGg9Ye6.js +7 -0
  11. package/dist/interface/assets/Cameras-B2Tizr4Q.js +652 -0
  12. package/dist/interface/assets/Camview-Bh2UCnGC.js +1 -0
  13. package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
  14. package/dist/interface/assets/Config-Dn_s2M7r.js +2 -0
  15. package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-DQEYHVN5.js} +1 -1
  16. package/dist/interface/assets/ConfigActionDelay-C0mbjCCj.js +1 -0
  17. package/dist/interface/assets/ConfigActionHttp-Bf58WHcw.js +1 -0
  18. package/dist/interface/assets/ConfigActionImageInput-CDXVFrOz.js +1 -0
  19. package/dist/interface/assets/ConfigActionMqtt-lH7MQqWr.js +1 -0
  20. package/dist/interface/assets/ConfigActionNotification-CAkr6NJX.js +1 -0
  21. package/dist/interface/assets/ConfigActionNotificationControl-CiL-4Ytw.js +1 -0
  22. package/dist/interface/assets/ConfigActionOutput-ILAxBT-r.js +1 -0
  23. package/dist/interface/assets/ConfigActionPlugin-B2d4mZiK.js +1 -0
  24. package/dist/interface/assets/ConfigActionSensor-BxMdsmRa.js +1 -0
  25. package/dist/interface/assets/ConfigActionSnapshot-CXVQBSzv.js +1 -0
  26. package/dist/interface/assets/ConfigActionVariable-CABnlnMv.js +1 -0
  27. package/dist/interface/assets/ConfigConditionIfElse-Cxu7TSdJ.js +1 -0
  28. package/dist/interface/assets/ConfigConditionSensorState-rB7I04Gb.js +1 -0
  29. package/dist/interface/assets/ConfigConditionSwitch-CU0hLo1h.js +1 -0
  30. package/dist/interface/assets/ConfigConditionTime-DfeEvxIU.js +1 -0
  31. package/dist/interface/assets/ConfigSensorValueInput-wXiyU3Sc.js +1 -0
  32. package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-DFJpuWrs.js} +1 -1
  33. package/dist/interface/assets/ConfigTriggerGeofence-CZwesOD8.js +1 -0
  34. package/dist/interface/assets/ConfigTriggerManual-aibwYUtf.js +1 -0
  35. package/dist/interface/assets/ConfigTriggerMqtt-CUNgifGb.js +1 -0
  36. package/dist/interface/assets/ConfigTriggerSchedule-8Y_OBcB1.js +1 -0
  37. package/dist/interface/assets/ConfigTriggerSensor-Bu-YtGnX.js +1 -0
  38. package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-CXNvmC4S.js} +1 -1
  39. package/dist/interface/assets/ConfigTriggerWebhook-CkZ-_ABi.js +1 -0
  40. package/dist/interface/assets/Console-CG8eRDA4.js +1 -0
  41. package/dist/interface/assets/CuiAutomationRunsDialog-Ux0g-E3w.js +1 -0
  42. package/dist/interface/assets/CuiBottomSheet-C-ZN_uXE.js +1 -0
  43. package/dist/interface/assets/CuiBottomSheet-RUyuBxJZ.js +1 -0
  44. package/dist/interface/assets/CuiCameraPipCard-B-B6Ppsd.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-DqVdR9uS.js +1 -0
  46. package/dist/interface/assets/CuiCameraShares-DstoVjf9.js +1 -0
  47. package/dist/interface/assets/CuiCameraTable-BHaCRB65.js +2 -0
  48. package/dist/interface/assets/CuiDataTable-CTT9IFeR.js +1 -0
  49. package/dist/interface/assets/CuiLightControl-B_JIzm9t.js +1 -0
  50. package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
  51. package/dist/interface/assets/CuiList-CDed3qXV.js +1 -0
  52. package/dist/interface/assets/CuiMarkdownContent-Bjs3wRnq.js +1 -0
  53. package/dist/interface/assets/CuiMarkdownContent-Do8-vIl7.js +1 -0
  54. package/dist/interface/assets/CuiPluginCard-7aXQznrX.js +2 -0
  55. package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-C2Y8x73q.js} +1 -1
  56. package/dist/interface/assets/CuiPluginOAuthButton-CCzRlZP6.js +2 -0
  57. package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-C8qBdLCg.js} +1 -1
  58. package/dist/interface/assets/CuiQRCode-D52Fcu61.js +1 -0
  59. package/dist/interface/assets/CuiRecordingsGrid-CfuihmlY.js +1 -0
  60. package/dist/interface/assets/CuiSchema-DTIuxROi.js +1 -0
  61. package/dist/interface/assets/CuiTopNavbarItem-CoTQmfY7.js +1 -0
  62. package/dist/interface/assets/Faces-EtBPS1Ve.js +1 -0
  63. package/dist/interface/assets/FirstSteps-CC0BPH40.js +1 -0
  64. package/dist/interface/assets/Instances-dSYERqIc.js +1 -0
  65. package/dist/interface/assets/Logs-B8d6dEt7.js +6 -0
  66. package/dist/interface/assets/Menu-CejIVz_7.js +1 -0
  67. package/dist/interface/assets/OAuthDeviceFlow-YhwV_FSL.js +1 -0
  68. package/dist/interface/assets/Plugin-Brb6wfq-.js +1 -0
  69. package/dist/interface/assets/PluginConsole-CfyZQVq5.js +7 -0
  70. package/dist/interface/assets/PluginDetail-DVRnnauk.js +2 -0
  71. package/dist/interface/assets/PluginSchema-i6UJfMnh.js +1 -0
  72. package/dist/interface/assets/PluginSearch-C1YL9q00.js +1 -0
  73. package/dist/interface/assets/PluginSearch-PDx47aUx.js +2 -0
  74. package/dist/interface/assets/Plugins-CukJohcb.js +1 -0
  75. package/dist/interface/assets/Recordings-m6jxYvRI.js +1 -0
  76. package/dist/interface/assets/SensorEdit-BJAijbmc.js +1 -0
  77. package/dist/interface/assets/SensorHistory-DW00ZuHR.js +1 -0
  78. package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
  79. package/dist/interface/assets/Sensors-Lfafn19i.js +2 -0
  80. package/dist/interface/assets/Settings-DHT8KXi2.js +1 -0
  81. package/dist/interface/assets/SettingsAccount-DOd4JeGd.js +1 -0
  82. package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
  83. package/dist/interface/assets/SettingsAccount-vrwV9rtP.js +1 -0
  84. package/dist/interface/assets/SettingsAppearance-11UFhRDY.js +1 -0
  85. package/dist/interface/assets/SettingsAppearance-BaDwC_h_.js +1 -0
  86. package/dist/interface/assets/SettingsBackup-CBBZV_nU.js +1 -0
  87. package/dist/interface/assets/SettingsList-Dx9DHGq9.js +1 -0
  88. package/dist/interface/assets/SettingsMqtt-BglQ_GeN.js +1 -0
  89. package/dist/interface/assets/SettingsNotifications-96czeGDD.js +2 -0
  90. package/dist/interface/assets/SettingsPermissions-CU4OVllA.js +1 -0
  91. package/dist/interface/assets/SettingsRecordings-BrnU9hrb.js +1 -0
  92. package/dist/interface/assets/SettingsRemote-CwJw_9HX.js +1 -0
  93. package/dist/interface/assets/SettingsSystem-B3nne5fS.js +2 -0
  94. package/dist/interface/assets/SettingsUsers-CoYyAxxn.js +1 -0
  95. package/dist/interface/assets/Terminal-DMAHgufw.js +4 -0
  96. package/dist/interface/assets/VariableInput-BzWLKBgd.js +1 -0
  97. package/dist/interface/assets/VariableSuggestions-BdxcP_dn.js +1 -0
  98. package/dist/interface/assets/VersionsHandler-Dvy5Lv-E.js +7 -0
  99. package/dist/interface/assets/VirtualSensorCreate-BXz0lWNm.js +1 -0
  100. package/dist/interface/assets/Workers-DqeKkdpa.js +2 -0
  101. package/dist/interface/assets/{account-sFoKqEOV.js → account-C5mHt2Ep.js} +1 -1
  102. package/dist/interface/assets/ace-BqKKexH4.js +1 -0
  103. package/dist/interface/assets/{ace.config-C_wgqTLD.js → ace.config-BNjBs7Fe.js} +1 -1
  104. package/dist/interface/assets/alarm-light-outline-jCTfmz5t.js +1 -0
  105. package/dist/interface/assets/{alert-circle-BQZQ417w.js → alert-circle-Cu_kjPlA.js} +1 -1
  106. package/dist/interface/assets/alert-outline-DXHNnhoP.js +1 -0
  107. package/dist/interface/assets/api-3va2gyB0.css +2 -0
  108. package/dist/interface/assets/{api-DEaXK1Kq.js → api-DmxTF6VE.js} +1 -1
  109. package/dist/interface/assets/api-milc5VEE.js +2 -0
  110. package/dist/interface/assets/arrow-left-DPtWmM6S.js +1 -0
  111. package/dist/interface/assets/arrow-right-outline-BY1ggGA1.js +1 -0
  112. package/dist/interface/assets/{auth-XA5zkqwW.js → auth-DwSrX8QL.js} +1 -1
  113. package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
  114. package/dist/interface/assets/automations-yVPQAmFo.js +1 -0
  115. package/dist/interface/assets/{back-filled-BdHG6uUx.js → back-filled-r7bN5ObT.js} +1 -1
  116. package/dist/interface/assets/{bell-ring-Dua4zXf_.js → bell-ring-C470qCAb.js} +1 -1
  117. package/dist/interface/assets/{cameras.schema-1a2URPGd.js → cameras.schema-JAiaenSf.js} +1 -1
  118. package/dist/interface/assets/{cctv-DEiPL3U8.js → cctv-BKVOVZCR.js} +1 -1
  119. package/dist/interface/assets/check-circle-Ce_sbfPZ.js +1 -0
  120. package/dist/interface/assets/chevron-down-CjSTp091.js +1 -0
  121. package/dist/interface/assets/chevron-right-B4vB0gm4.js +1 -0
  122. package/dist/interface/assets/{clock-outline-C_f3Ed8x.js → clock-outline-BgcDXoyp.js} +1 -1
  123. package/dist/interface/assets/{close-DNgGJYHi.js → close-CQoGQHOF.js} +1 -1
  124. package/dist/interface/assets/{close-circle-L5juejMg.js → close-circle-DYhkXsRj.js} +1 -1
  125. package/dist/interface/assets/{cloud-check-DD7oRzmo.js → cloud-check-CVx221dJ.js} +1 -1
  126. package/dist/interface/assets/cloudHandoff-QtPEpiS4.js +1 -0
  127. package/dist/interface/assets/{config-C2hgXHyj.js → config-BE0DnCXx.js} +1 -1
  128. package/dist/interface/assets/copy-yhHCVVOa.js +1 -0
  129. package/dist/interface/assets/cube-scan-Ccxismvr.js +1 -0
  130. package/dist/interface/assets/delete-xWUQUP2x.js +1 -0
  131. package/dist/interface/assets/dist-DVb-CALh.js +1 -0
  132. package/dist/interface/assets/download-PLxvyB7s.js +1 -0
  133. package/dist/interface/assets/esm-B4MXP42m.js +1 -0
  134. package/dist/interface/assets/esm-BW9m3dy4.js +1 -0
  135. package/dist/interface/assets/esm-BZ3gh7Fj.js +1 -0
  136. package/dist/interface/assets/esm-Blvz9SsB.js +1 -0
  137. package/dist/interface/assets/esm-CJXU9jaA.js +1 -0
  138. package/dist/interface/assets/esm-Cqqu_mer.js +1 -0
  139. package/dist/interface/assets/esm-CtKbLoV_.js +1 -0
  140. package/dist/interface/assets/esm-CwzNi2iW.js +1 -0
  141. package/dist/interface/assets/esm-KnO8wJyB.js +1 -0
  142. package/dist/interface/assets/esm-Lt6R0RFn.js +1 -0
  143. package/dist/interface/assets/esm-MvRctfDP.js +1 -0
  144. package/dist/interface/assets/esm-W4LX4Rpq.js +1 -0
  145. package/dist/interface/assets/esm-l57LNUWu.js +1 -0
  146. package/dist/interface/assets/esm-xofhyA8r.js +1 -0
  147. package/dist/interface/assets/eye-off-C8kzsdYU.js +1 -0
  148. package/dist/interface/assets/flowSchema-BQp77LdP.js +1 -0
  149. package/dist/interface/assets/{history-iAZcYg3f.js → history-QBEPNc4X.js} +1 -1
  150. package/dist/interface/assets/home-af3W_y8U.js +1 -0
  151. package/dist/interface/assets/{information-outline-CVsB1bl-.js → information-outline-BPCsozSU.js} +1 -1
  152. package/dist/interface/assets/{lightbulb-outline-nNLyXAIp.js → lightbulb-outline-ccTlGyvW.js} +1 -1
  153. package/dist/interface/assets/main-CqhwDjRG.js +3 -0
  154. package/dist/interface/assets/main-aZt-Pooz.css +1 -0
  155. package/dist/interface/assets/{microphone-CU0mFDMh.js → microphone-5exHwwyq.js} +1 -1
  156. package/dist/interface/assets/mqtt-D_shY0Ks.js +1 -0
  157. package/dist/interface/assets/native-Cpj7zrLp.js +1 -0
  158. package/dist/interface/assets/native-D--k2WN1.js +1 -0
  159. package/dist/interface/assets/nodeDefinitions-CRrkU6zR.js +1 -0
  160. package/dist/interface/assets/{notifications-BHQN6WD4.js → notifications-BuSNpaOJ.js} +1 -1
  161. package/dist/interface/assets/{pencil-outline-BQxLTlZx.js → pencil-outline-M9I4mCJO.js} +1 -1
  162. package/dist/interface/assets/plugin-D3FpjfF8.js +1 -0
  163. package/dist/interface/assets/{plugins-C0RtyBHQ.js → plugins-7pWXkYgo.js} +1 -1
  164. package/dist/interface/assets/plus-CGIx-WV8.js +1 -0
  165. package/dist/interface/assets/{plus-Ct6WQfM1.js → plus-CrfQUUEC.js} +1 -1
  166. package/dist/interface/assets/power-VnZM2-0c.js +1 -0
  167. package/dist/interface/assets/{ring-resize-CZBThoQC.js → ring-resize-CodGa6wQ.js} +1 -1
  168. package/dist/interface/assets/rolldown-runtime-C0FnF6B9.js +1 -0
  169. package/dist/interface/assets/{round-alt-arrow-left-bold-BlpNMBxm.js → round-alt-arrow-left-bold-DTrlW4yx.js} +1 -1
  170. package/dist/interface/assets/round-restart-alt-DKWwojYm.js +1 -0
  171. package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
  172. package/dist/interface/assets/sensors-CLQG1mQt.js +1 -0
  173. package/dist/interface/assets/{server-CVSOthzT.js → server-Bv5NVJ0G.js} +1 -1
  174. package/dist/interface/assets/{settings-CgToKrFd.js → settings-DY0TJSAM.js} +1 -1
  175. package/dist/interface/assets/{source-branch-CoHKTGxb.js → source-branch-nw9fwXin.js} +1 -1
  176. package/dist/interface/assets/{theme-BZi7VV10.js → theme-DsxRUmCC.js} +1 -1
  177. package/dist/interface/assets/{trash-2-BKWfq15D.js → trash-2-B-di2M48.js} +1 -1
  178. package/dist/interface/assets/trash-can-outline-BbZkHoW7.js +1 -0
  179. package/dist/interface/assets/{trash-fill-yNQsFs0Y.js → trash-fill-Bgen5QTD.js} +1 -1
  180. package/dist/interface/assets/{trash2-DjTG9rG-.js → trash2-BP__fHgN.js} +1 -1
  181. package/dist/interface/assets/{types-Bw8H-UB4.js → types-BazOcNe_.js} +1 -1
  182. package/dist/interface/assets/types-CoXm85So.js +1 -0
  183. package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
  184. package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-oPpW7jcN.js} +1 -1
  185. package/dist/interface/assets/useBackupRestore-b0Niqql7.js +1 -0
  186. package/dist/interface/assets/useCameraOptions-uf9Kog6z.js +1 -0
  187. package/dist/interface/assets/{useCardSelection-CgZ7QTaA.js → useCardSelection-B3B2qPHO.js} +1 -1
  188. package/dist/interface/assets/{useElectron-CgLWOhcS.js → useElectron-Dg8tFzam.js} +1 -1
  189. package/dist/interface/assets/useLogsSocket-9jJ-oJIm.js +5 -0
  190. package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-xL0VlbyD.js} +1 -1
  191. package/dist/interface/assets/useServerRestart-3AZOTz7i.js +1 -0
  192. package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-Dg-Djura.js} +1 -1
  193. package/dist/interface/assets/useUserOptions-BQnM3gdi.js +1 -0
  194. package/dist/interface/assets/{variable-Y3IAPnsB.js → variable-CbNySf4s.js} +1 -1
  195. package/dist/interface/assets/vendor-CSg6_Jfu.js +22 -0
  196. package/dist/interface/assets/vendor-ace-DIEVbs6L.js +1085 -0
  197. package/dist/interface/assets/vendor-cameraui-BqkrW4Bb.js +2040 -0
  198. package/dist/interface/assets/vendor-capacitor-C-8IYzpJ.js +2 -0
  199. package/dist/interface/assets/vendor-chart-CoQ9HTE3.js +3 -0
  200. package/dist/interface/assets/vendor-core-BQegq2Q6.js +1 -0
  201. package/dist/interface/assets/{vendor-dnd-hwiZJHjo.js → vendor-dnd-DQF7Aoap.js} +2 -2
  202. package/dist/interface/assets/vendor-draggabilly-Cghb3aIb.js +1 -0
  203. package/dist/interface/assets/vendor-gridstack-qw2ro2uB.js +3 -0
  204. package/dist/interface/assets/{vendor-leaflet-BMMJO5Nd.js → vendor-leaflet-Bcgd-fkG.js} +1 -1
  205. package/dist/interface/assets/vendor-markdown-DWwrEE67.js +14 -0
  206. package/dist/interface/assets/{vendor-primevue-C6wcTjtT.js → vendor-primevue-DYzLjOFZ.js} +85 -85
  207. package/dist/interface/assets/vendor-vueflow-crUU2mAI.js +26 -0
  208. package/dist/interface/assets/vendor-xterm-BafMBqaV.js +91 -0
  209. package/dist/interface/assets/vendor-zod-Dbq0fBXY.js +127 -0
  210. package/dist/interface/assets/web-BX3axHeB.js +1 -0
  211. package/dist/interface/assets/web-BcHmbPny.js +1 -0
  212. package/dist/interface/assets/web-BjKL51lK-BQjyRtns.js +1 -0
  213. package/dist/interface/assets/web-C8w-z-xR.js +1 -0
  214. package/dist/interface/assets/web-CHdniv8I.js +1 -0
  215. package/dist/interface/assets/web-CWBhY0Av.js +1 -0
  216. package/dist/interface/assets/web-Cf1yYy4u.js +1 -0
  217. package/dist/interface/assets/web-Ct6Vkr6F.js +1 -0
  218. package/dist/interface/assets/web-DARDw7d8.js +1 -0
  219. package/dist/interface/assets/web-DKBMdBSA.js +1 -0
  220. package/dist/interface/assets/web-Ddzvp-fv.js +1 -0
  221. package/dist/interface/assets/web-Dymr_MpD.js +1 -0
  222. package/dist/interface/assets/web-XIuTPdFc.js +1 -0
  223. package/dist/interface/assets/web-lrnXIJTz.js +1 -0
  224. package/dist/interface/assets/{webhook-yCryYojY.js → webhook-B7YgiSrF.js} +1 -1
  225. package/dist/interface/assets/workbox-window.prod.es5-BkFwsIPp.js +1 -0
  226. package/dist/interface/assets/{zoom-in-Da5uRiQq.js → zoom-in-D7BJNotF.js} +1 -1
  227. package/dist/interface/index.html +44 -40
  228. package/dist/interface/sw.js +1 -1
  229. package/dist/server/package.json +11 -11
  230. package/dist/server/requirements.txt +4 -6
  231. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +3 -0
  232. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +4 -0
  233. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +9 -14
  234. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +0 -4
  235. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +5 -12
  236. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +6 -23
  237. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +60 -100
  238. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +3 -2
  239. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +2 -0
  240. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +2 -20
  241. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_config_internal.py +1 -1
  242. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_enums.py +3 -3
  243. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/event_emitter.py +13 -26
  244. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/manager_rpc.py +2 -5
  245. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +21 -6
  246. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/shared_utils.py +7 -18
  247. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +91 -29
  248. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/observable/__init__.py +145 -37
  249. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +10 -1
  250. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/api.py +21 -68
  251. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +31 -58
  252. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/helper.py +3 -12
  253. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +137 -99
  254. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +34 -52
  255. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/oauth.py +4 -4
  256. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +3 -4
  257. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/audio.py +45 -39
  258. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +329 -256
  259. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/battery.py +17 -16
  260. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +31 -27
  261. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/clip.py +14 -12
  262. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/contact.py +11 -10
  263. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +34 -22
  264. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/doorbell.py +19 -19
  265. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +34 -28
  266. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/garage.py +29 -20
  267. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/humidity.py +22 -12
  268. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/leak.py +12 -11
  269. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +35 -31
  270. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/light.py +22 -18
  271. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/lock.py +26 -19
  272. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/motion.py +28 -27
  273. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +37 -33
  274. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/occupancy.py +11 -10
  275. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +20 -24
  276. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/security_system.py +22 -22
  277. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/siren.py +17 -16
  278. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/smoke.py +11 -10
  279. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/spec.py +26 -22
  280. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/switch.py +13 -12
  281. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/temperature.py +22 -12
  282. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/storage/__init__.py +56 -38
  283. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/types.py +15 -18
  284. package/dist/server/src/api/controllers/auth.controller.js +2 -1
  285. package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
  286. package/dist/server/src/api/controllers/cameras.controller.d.ts +6 -0
  287. package/dist/server/src/api/controllers/cameras.controller.js +21 -11
  288. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  289. package/dist/server/src/api/controllers/cast.controller.d.ts +11 -0
  290. package/dist/server/src/api/controllers/cast.controller.js +29 -0
  291. package/dist/server/src/api/controllers/cast.controller.js.map +1 -0
  292. package/dist/server/src/api/controllers/notifications.controller.d.ts +12 -0
  293. package/dist/server/src/api/controllers/notifications.controller.js +41 -0
  294. package/dist/server/src/api/controllers/notifications.controller.js.map +1 -1
  295. package/dist/server/src/api/controllers/nvr.controller.d.ts +14 -0
  296. package/dist/server/src/api/controllers/nvr.controller.js +61 -0
  297. package/dist/server/src/api/controllers/nvr.controller.js.map +1 -0
  298. package/dist/server/src/api/controllers/sensors.controller.d.ts +13 -0
  299. package/dist/server/src/api/controllers/sensors.controller.js +94 -0
  300. package/dist/server/src/api/controllers/sensors.controller.js.map +1 -0
  301. package/dist/server/src/api/controllers/server.controller.d.ts +1 -0
  302. package/dist/server/src/api/controllers/server.controller.js +11 -0
  303. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  304. package/dist/server/src/api/controllers/tunnel.controller.d.ts +0 -3
  305. package/dist/server/src/api/controllers/tunnel.controller.js +1 -21
  306. package/dist/server/src/api/controllers/tunnel.controller.js.map +1 -1
  307. package/dist/server/src/api/database/constants.d.ts +2 -0
  308. package/dist/server/src/api/database/constants.js +2 -0
  309. package/dist/server/src/api/database/constants.js.map +1 -1
  310. package/dist/server/src/api/database/index.d.ts +5 -2
  311. package/dist/server/src/api/database/index.js +7 -4
  312. package/dist/server/src/api/database/index.js.map +1 -1
  313. package/dist/server/src/api/database/migrations/v2-1-0.d.ts +3 -0
  314. package/dist/server/src/api/database/migrations/v2-1-0.js +72 -0
  315. package/dist/server/src/api/database/migrations/v2-1-0.js.map +1 -0
  316. package/dist/server/src/api/database/record-schemas.d.ts +2 -3
  317. package/dist/server/src/api/database/record-schemas.js +3 -3
  318. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  319. package/dist/server/src/api/database/types.d.ts +27 -3
  320. package/dist/server/src/api/index.js +3 -0
  321. package/dist/server/src/api/index.js.map +1 -1
  322. package/dist/server/src/api/plugins/natsSubFirewall.d.ts +1 -1
  323. package/dist/server/src/api/plugins/natsSubFirewall.js +5 -2
  324. package/dist/server/src/api/plugins/natsSubFirewall.js.map +1 -1
  325. package/dist/server/src/api/plugins/proxy.plugin.js +5 -3
  326. package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -1
  327. package/dist/server/src/api/routes/cameras.routes.js +14 -7
  328. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  329. package/dist/server/src/api/routes/cast.routes.d.ts +2 -0
  330. package/dist/server/src/api/routes/cast.routes.js +29 -0
  331. package/dist/server/src/api/routes/cast.routes.js.map +1 -0
  332. package/dist/server/src/api/routes/index.js +6 -2
  333. package/dist/server/src/api/routes/index.js.map +1 -1
  334. package/dist/server/src/api/routes/notifications.routes.js +32 -0
  335. package/dist/server/src/api/routes/notifications.routes.js.map +1 -1
  336. package/dist/server/src/api/routes/nvr.routes.d.ts +2 -0
  337. package/dist/server/src/api/routes/nvr.routes.js +19 -0
  338. package/dist/server/src/api/routes/nvr.routes.js.map +1 -0
  339. package/dist/server/src/api/routes/sensors.routes.d.ts +2 -0
  340. package/dist/server/src/api/routes/sensors.routes.js +89 -0
  341. package/dist/server/src/api/routes/sensors.routes.js.map +1 -0
  342. package/dist/server/src/api/routes/server.routes.js +10 -0
  343. package/dist/server/src/api/routes/server.routes.js.map +1 -1
  344. package/dist/server/src/api/schemas/cameras.schema.d.ts +103 -45
  345. package/dist/server/src/api/schemas/cameras.schema.js +7 -10
  346. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  347. package/dist/server/src/api/schemas/cast.schema.d.ts +7 -0
  348. package/dist/server/src/api/schemas/cast.schema.js +7 -0
  349. package/dist/server/src/api/schemas/cast.schema.js.map +1 -0
  350. package/dist/server/src/api/schemas/nvr.schema.d.ts +10 -0
  351. package/dist/server/src/api/schemas/nvr.schema.js +13 -0
  352. package/dist/server/src/api/schemas/nvr.schema.js.map +1 -0
  353. package/dist/server/src/api/schemas/{virtualsensors.schema.d.ts → sensors.schema.d.ts} +15 -8
  354. package/dist/server/src/api/schemas/sensors.schema.js +25 -0
  355. package/dist/server/src/api/schemas/sensors.schema.js.map +1 -0
  356. package/dist/server/src/api/schemas/users.schema.d.ts +7 -18
  357. package/dist/server/src/api/schemas/users.schema.js +3 -7
  358. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  359. package/dist/server/src/api/services/cameras.service.js +1 -1
  360. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  361. package/dist/server/src/api/services/cast.service.d.ts +7 -0
  362. package/dist/server/src/api/services/cast.service.js +14 -0
  363. package/dist/server/src/api/services/cast.service.js.map +1 -0
  364. package/dist/server/src/api/services/instances.service.js +1 -1
  365. package/dist/server/src/api/services/notifications.service.d.ts +3 -0
  366. package/dist/server/src/api/services/notifications.service.js +9 -0
  367. package/dist/server/src/api/services/notifications.service.js.map +1 -1
  368. package/dist/server/src/api/services/plugins.service.js +18 -3
  369. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  370. package/dist/server/src/api/services/sensors.service.d.ts +41 -0
  371. package/dist/server/src/api/services/sensors.service.js +106 -0
  372. package/dist/server/src/api/services/sensors.service.js.map +1 -0
  373. package/dist/server/src/api/services/server.service.d.ts +4 -0
  374. package/dist/server/src/api/services/server.service.js +14 -0
  375. package/dist/server/src/api/services/server.service.js.map +1 -1
  376. package/dist/server/src/api/services/users.service.js +6 -9
  377. package/dist/server/src/api/services/users.service.js.map +1 -1
  378. package/dist/server/src/api/types/index.d.ts +19 -6
  379. package/dist/server/src/api/websocket/nsp/events.js +38 -15
  380. package/dist/server/src/api/websocket/nsp/events.js.map +1 -1
  381. package/dist/server/src/api.d.ts +0 -2
  382. package/dist/server/src/api.js +0 -12
  383. package/dist/server/src/api.js.map +1 -1
  384. package/dist/server/src/automations/actions/sensor.js +4 -7
  385. package/dist/server/src/automations/actions/sensor.js.map +1 -1
  386. package/dist/server/src/automations/conditions/sensorState.js +4 -4
  387. package/dist/server/src/automations/conditions/sensorState.js.map +1 -1
  388. package/dist/server/src/automations/context.d.ts +2 -1
  389. package/dist/server/src/automations/context.js +2 -1
  390. package/dist/server/src/automations/context.js.map +1 -1
  391. package/dist/server/src/automations/pluginMethodRegistry.d.ts +2 -0
  392. package/dist/server/src/automations/pluginMethodRegistry.js +14 -0
  393. package/dist/server/src/automations/pluginMethodRegistry.js.map +1 -1
  394. package/dist/server/src/automations/triggers/sensor.js +12 -23
  395. package/dist/server/src/automations/triggers/sensor.js.map +1 -1
  396. package/dist/server/src/camera/controller.d.ts +0 -1
  397. package/dist/server/src/camera/controller.js +9 -46
  398. package/dist/server/src/camera/controller.js.map +1 -1
  399. package/dist/server/src/camera/decoder/detection-coordinator.js +13 -11
  400. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  401. package/dist/server/src/camera/decoder/plugin-registry.d.ts +1 -0
  402. package/dist/server/src/camera/decoder/plugin-registry.js +13 -1
  403. package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -1
  404. package/dist/server/src/camera/decoder/ptz/autotracker.js +2 -2
  405. package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -1
  406. package/dist/server/src/camera/decoder/secondary-stage.js +6 -6
  407. package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
  408. package/dist/server/src/camera/decoder/types.d.ts +7 -1
  409. package/dist/server/src/camera/decoder/types.js +4 -0
  410. package/dist/server/src/camera/decoder/types.js.map +1 -1
  411. package/dist/server/src/camera/decoder/worker.d.ts +2 -0
  412. package/dist/server/src/camera/decoder/worker.js +14 -3
  413. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  414. package/dist/server/src/camera/index.d.ts +2 -14
  415. package/dist/server/src/camera/index.js +1 -32
  416. package/dist/server/src/camera/index.js.map +1 -1
  417. package/dist/server/src/camera/sensors/controller.d.ts +17 -77
  418. package/dist/server/src/camera/sensors/controller.js +60 -445
  419. package/dist/server/src/camera/sensors/controller.js.map +1 -1
  420. package/dist/server/src/internal-bus.d.ts +7 -13
  421. package/dist/server/src/internal-bus.js.map +1 -1
  422. package/dist/server/src/main.d.ts +1 -0
  423. package/dist/server/src/main.js +7 -0
  424. package/dist/server/src/main.js.map +1 -1
  425. package/dist/server/src/manager/castManager.d.ts +24 -0
  426. package/dist/server/src/manager/castManager.js +79 -0
  427. package/dist/server/src/manager/castManager.js.map +1 -0
  428. package/dist/server/src/manager/downloadManager.d.ts +1 -0
  429. package/dist/server/src/manager/downloadManager.js +6 -0
  430. package/dist/server/src/manager/downloadManager.js.map +1 -1
  431. package/dist/server/src/manager/notificationManager.d.ts +6 -0
  432. package/dist/server/src/manager/notificationManager.js +70 -3
  433. package/dist/server/src/manager/notificationManager.js.map +1 -1
  434. package/dist/server/src/mqtt/bridge.d.ts +7 -0
  435. package/dist/server/src/mqtt/bridge.js +92 -32
  436. package/dist/server/src/mqtt/bridge.js.map +1 -1
  437. package/dist/server/src/mqtt/ha-discovery.d.ts +1 -1
  438. package/dist/server/src/mqtt/ha-discovery.js +53 -8
  439. package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
  440. package/dist/server/src/mqtt/manager.js +1 -1
  441. package/dist/server/src/mqtt/manager.js.map +1 -1
  442. package/dist/server/src/mqtt/topics.d.ts +3 -3
  443. package/dist/server/src/mqtt/topics.js +11 -10
  444. package/dist/server/src/mqtt/topics.js.map +1 -1
  445. package/dist/server/src/plugins/config-store.js +1 -1
  446. package/dist/server/src/plugins/config-store.js.map +1 -1
  447. package/dist/server/src/plugins/runtime/base.d.ts +1 -0
  448. package/dist/server/src/plugins/runtime/base.js +29 -6
  449. package/dist/server/src/plugins/runtime/base.js.map +1 -1
  450. package/dist/server/src/plugins/runtime/node/child.js +5 -2
  451. package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
  452. package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -0
  453. package/dist/server/src/plugins/runtime/node/pluginApi.js +4 -1
  454. package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
  455. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +5 -13
  456. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +97 -179
  457. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  458. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +2 -1
  459. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +19 -2
  460. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -1
  461. package/dist/server/src/plugins/runtime/node/proxy/reconnect.d.ts +2 -0
  462. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js +27 -0
  463. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js.map +1 -0
  464. package/dist/server/src/plugins/runtime/node/proxy/sensor.d.ts +17 -3
  465. package/dist/server/src/plugins/runtime/node/proxy/sensor.js +61 -20
  466. package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
  467. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +18 -0
  468. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +269 -0
  469. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -0
  470. package/dist/server/src/plugins/runtime/node/storage.d.ts +1 -1
  471. package/dist/server/src/plugins/runtime/node/storage.js +2 -2
  472. package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
  473. package/dist/server/src/plugins/runtime/node/storageController.d.ts +5 -5
  474. package/dist/server/src/plugins/runtime/node/storageController.js +20 -28
  475. package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
  476. package/dist/server/src/plugins/runtime/python/child.py +13 -7
  477. package/dist/server/src/plugins/runtime/python/namespaces.py +13 -19
  478. package/dist/server/src/plugins/runtime/python/plugin_api.py +10 -1
  479. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +130 -280
  480. package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +18 -0
  481. package/dist/server/src/plugins/runtime/python/proxy/sensor.py +88 -21
  482. package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +386 -0
  483. package/dist/server/src/plugins/runtime/python/storage.py +1 -3
  484. package/dist/server/src/plugins/runtime/python/storage_controller.py +19 -50
  485. package/dist/server/src/plugins/runtime/python/store.py +19 -95
  486. package/dist/server/src/plugins/runtime/python/typings.py +32 -9
  487. package/dist/server/src/plugins/store/layout.d.ts +1 -2
  488. package/dist/server/src/plugins/store/layout.js +9 -56
  489. package/dist/server/src/plugins/store/layout.js.map +1 -1
  490. package/dist/server/src/plugins/store/location.d.ts +2 -3
  491. package/dist/server/src/plugins/store/location.js +5 -13
  492. package/dist/server/src/plugins/store/location.js.map +1 -1
  493. package/dist/server/src/plugins/store/pluginStoreFile.d.ts +1 -2
  494. package/dist/server/src/plugins/store/pluginStoreFile.js +8 -15
  495. package/dist/server/src/plugins/store/pluginStoreFile.js.map +1 -1
  496. package/dist/server/src/plugins/worker.d.ts +2 -0
  497. package/dist/server/src/plugins/worker.js +26 -7
  498. package/dist/server/src/plugins/worker.js.map +1 -1
  499. package/dist/server/src/rpc/index.d.ts +2 -0
  500. package/dist/server/src/rpc/index.js +5 -0
  501. package/dist/server/src/rpc/index.js.map +1 -1
  502. package/dist/server/src/rpc/interfaces/sensor.d.ts +33 -16
  503. package/dist/server/src/rpc/namespaces.d.ts +17 -8
  504. package/dist/server/src/rpc/namespaces.js +20 -12
  505. package/dist/server/src/rpc/namespaces.js.map +1 -1
  506. package/dist/server/src/rpc/server.js +1 -0
  507. package/dist/server/src/rpc/server.js.map +1 -1
  508. package/dist/server/src/sensors/registry.d.ts +96 -0
  509. package/dist/server/src/sensors/registry.js +808 -0
  510. package/dist/server/src/sensors/registry.js.map +1 -0
  511. package/dist/server/src/{camera/sensors → sensors}/semantics.d.ts +1 -1
  512. package/dist/server/src/{camera/sensors → sensors}/semantics.js +4 -1
  513. package/dist/server/src/sensors/semantics.js.map +1 -0
  514. package/dist/server/src/sensors/sensor.d.ts +58 -0
  515. package/dist/server/src/{camera/sensors → sensors}/sensor.js +43 -32
  516. package/dist/server/src/sensors/sensor.js.map +1 -0
  517. package/dist/server/src/{camera/sensors → sensors}/types.d.ts +2 -0
  518. package/dist/server/src/{camera/sensors → sensors}/types.js +9 -0
  519. package/dist/server/src/sensors/types.js.map +1 -0
  520. package/dist/server/src/{camera/sensors → sensors}/virtual.d.ts +4 -6
  521. package/dist/server/src/{camera/sensors → sensors}/virtual.js +10 -56
  522. package/dist/server/src/sensors/virtual.js.map +1 -0
  523. package/dist/server/src/services/mdns/index.js +4 -0
  524. package/dist/server/src/services/mdns/index.js.map +1 -1
  525. package/package.json +11 -11
  526. package/dist/interface/assets/404-0d936klL.js +0 -1
  527. package/dist/interface/assets/About-BMwYrGrl.js +0 -1
  528. package/dist/interface/assets/Adminpanel-DBsOmAuo.js +0 -1
  529. package/dist/interface/assets/Automation-BLndVfqR.js +0 -3
  530. package/dist/interface/assets/AutomationImport-Ba33juY0.js +0 -2
  531. package/dist/interface/assets/AutomationStore-Bjf1x7go.js +0 -2
  532. package/dist/interface/assets/AutomationStoreDetail-Ko3n3U1U.js +0 -2
  533. package/dist/interface/assets/Automations-BfC8bvkT.js +0 -2
  534. package/dist/interface/assets/Camera-BYDPeH6d.js +0 -2
  535. package/dist/interface/assets/CameraConsole-pVCj1xXI.js +0 -7
  536. package/dist/interface/assets/Cameras-DdokAe_Q.js +0 -652
  537. package/dist/interface/assets/Camview-DmuGSzal.js +0 -1
  538. package/dist/interface/assets/Config-DvVqB0_Y.js +0 -2
  539. package/dist/interface/assets/ConfigActionDelay-B1JjI6bg.js +0 -1
  540. package/dist/interface/assets/ConfigActionHttp-BzGIbeVo.js +0 -1
  541. package/dist/interface/assets/ConfigActionImageInput-C6m2-s8z.js +0 -1
  542. package/dist/interface/assets/ConfigActionMqtt-ByZNQKsg.js +0 -1
  543. package/dist/interface/assets/ConfigActionNotification-YmdMddoN.js +0 -1
  544. package/dist/interface/assets/ConfigActionNotificationControl-2hWDRBpq.js +0 -1
  545. package/dist/interface/assets/ConfigActionOutput-D9k1-jfI.js +0 -1
  546. package/dist/interface/assets/ConfigActionPlugin-DjD_94EX.js +0 -1
  547. package/dist/interface/assets/ConfigActionSensor-fak8jYSC.js +0 -1
  548. package/dist/interface/assets/ConfigActionSnapshot-mwEHXqyk.js +0 -1
  549. package/dist/interface/assets/ConfigActionVariable-kBxNfyOV.js +0 -1
  550. package/dist/interface/assets/ConfigConditionIfElse-CkjmImTD.js +0 -1
  551. package/dist/interface/assets/ConfigConditionSensorState-FE3mFjRe.js +0 -1
  552. package/dist/interface/assets/ConfigConditionSwitch-msqWizIt.js +0 -1
  553. package/dist/interface/assets/ConfigConditionTime-ifPV135b.js +0 -1
  554. package/dist/interface/assets/ConfigSensorValueInput-Bg3SEbSh.js +0 -1
  555. package/dist/interface/assets/ConfigTriggerGeofence-CemaUwl5.js +0 -1
  556. package/dist/interface/assets/ConfigTriggerManual-DWuiq7PC.js +0 -1
  557. package/dist/interface/assets/ConfigTriggerMqtt-DxAoDh2Z.js +0 -1
  558. package/dist/interface/assets/ConfigTriggerSchedule-DDqgMGvp.js +0 -1
  559. package/dist/interface/assets/ConfigTriggerSensor-M6bXqz4k.js +0 -1
  560. package/dist/interface/assets/ConfigTriggerWebhook-CxOXgcJi.js +0 -1
  561. package/dist/interface/assets/Console-CMuW2_8s.js +0 -1
  562. package/dist/interface/assets/CuiAutomationRunsDialog-yh1qHzmS.js +0 -1
  563. package/dist/interface/assets/CuiBottomSheet-BshiVWqw.js +0 -1
  564. package/dist/interface/assets/CuiBottomSheet-DSNyVg5P.js +0 -1
  565. package/dist/interface/assets/CuiCameraPipCard-Cmk0jl6M.js +0 -1
  566. package/dist/interface/assets/CuiCameraRecordings-KU1wIai4.js +0 -1
  567. package/dist/interface/assets/CuiCameraShares-BoR3YQWj.js +0 -1
  568. package/dist/interface/assets/CuiCameraTable-BRPBqU8V.js +0 -2
  569. package/dist/interface/assets/CuiDataTable-BGY4VBtv.js +0 -1
  570. package/dist/interface/assets/CuiList-BSOMR296.js +0 -1
  571. package/dist/interface/assets/CuiMarkdownContent-DEMo42iT.js +0 -1
  572. package/dist/interface/assets/CuiMarkdownContent-Xn_VHwym.js +0 -1
  573. package/dist/interface/assets/CuiPluginCard-CgJb8B1W.js +0 -2
  574. package/dist/interface/assets/CuiPluginOAuthButton-XpEyqoRm.js +0 -2
  575. package/dist/interface/assets/CuiQRCode-QBkbmvRA.js +0 -1
  576. package/dist/interface/assets/CuiRecordingsGrid-CuEl_hhu.js +0 -1
  577. package/dist/interface/assets/CuiSchema-D_cg-H5i.js +0 -1
  578. package/dist/interface/assets/CuiTopNavbarItem-CXijnkK9.js +0 -1
  579. package/dist/interface/assets/Faces-C95mlWaW.js +0 -1
  580. package/dist/interface/assets/FirstSteps-Cpbg7fng.js +0 -1
  581. package/dist/interface/assets/Instances-BgJtM1Xl.js +0 -1
  582. package/dist/interface/assets/Logs-BWXYqm5T.js +0 -6
  583. package/dist/interface/assets/Menu-BO9Zjy1w.js +0 -1
  584. package/dist/interface/assets/OAuthDeviceFlow-NnwqdmBM.js +0 -1
  585. package/dist/interface/assets/Plugin-DQq3xjhe.js +0 -1
  586. package/dist/interface/assets/PluginConsole-BTsVAsKf.js +0 -7
  587. package/dist/interface/assets/PluginDetail-CTyzzZVU.js +0 -2
  588. package/dist/interface/assets/PluginSchema-Bn3pHjQA.js +0 -1
  589. package/dist/interface/assets/PluginSearch-DbXCyUF0.js +0 -1
  590. package/dist/interface/assets/PluginSearch-z0z8Z1gP.js +0 -2
  591. package/dist/interface/assets/Plugins-Cy7e-ty2.js +0 -1
  592. package/dist/interface/assets/Recordings-CWBpGEUf.js +0 -1
  593. package/dist/interface/assets/Settings-CUIORSmm.js +0 -1
  594. package/dist/interface/assets/SettingsAccount-CeJBKpzp.js +0 -1
  595. package/dist/interface/assets/SettingsAccount-CnwVrQx1.js +0 -1
  596. package/dist/interface/assets/SettingsAppearance-BraaC0WF.js +0 -1
  597. package/dist/interface/assets/SettingsAppearance-CZrOTBki.js +0 -1
  598. package/dist/interface/assets/SettingsBackup-y9mb8XZZ.js +0 -1
  599. package/dist/interface/assets/SettingsList-DsKncveQ.js +0 -1
  600. package/dist/interface/assets/SettingsMqtt-DTyyctmQ.js +0 -1
  601. package/dist/interface/assets/SettingsNotifications-SFMt4Yuj.js +0 -2
  602. package/dist/interface/assets/SettingsPermissions-CktJaQzL.js +0 -1
  603. package/dist/interface/assets/SettingsRecordings-Bqguyt6u.js +0 -1
  604. package/dist/interface/assets/SettingsRemote-CTv7bb4g.js +0 -1
  605. package/dist/interface/assets/SettingsSystem-CkCnB34r.js +0 -2
  606. package/dist/interface/assets/SettingsUsers-D8LAGd6F.js +0 -1
  607. package/dist/interface/assets/Terminal-DaR9Ur0_.js +0 -4
  608. package/dist/interface/assets/VariableInput-D0TP_Lmo.js +0 -1
  609. package/dist/interface/assets/VariableSuggestions--vq7928F.js +0 -1
  610. package/dist/interface/assets/VersionsHandler-D9GDdcXr.js +0 -7
  611. package/dist/interface/assets/Workers-CUyRzwJG.js +0 -2
  612. package/dist/interface/assets/ace-DYqf8ZN7.js +0 -1
  613. package/dist/interface/assets/alert-outline-BUvdNY2J.js +0 -1
  614. package/dist/interface/assets/api-DxrxNyIH.js +0 -2
  615. package/dist/interface/assets/api-VZ_wVUpU.css +0 -2
  616. package/dist/interface/assets/arrow-left-LdfKbcre.js +0 -1
  617. package/dist/interface/assets/arrow-right-outline-BbTEhBJq.js +0 -1
  618. package/dist/interface/assets/automationBlueprint-DMjszOs4.js +0 -1
  619. package/dist/interface/assets/automations-51-JMUWD.js +0 -1
  620. package/dist/interface/assets/check-circle-D-utE_P9.js +0 -1
  621. package/dist/interface/assets/chevron-down-OEjMpuec.js +0 -1
  622. package/dist/interface/assets/chevron-right-B3nxd9UE.js +0 -1
  623. package/dist/interface/assets/cloudHandoff-BktPB9rt.js +0 -1
  624. package/dist/interface/assets/copy-BvSzmsFs.js +0 -1
  625. package/dist/interface/assets/delete-B9BZTgya.js +0 -1
  626. package/dist/interface/assets/dist-qdWlJrr0.js +0 -1
  627. package/dist/interface/assets/download-Dp_ssGIE.js +0 -1
  628. package/dist/interface/assets/esm-9VMgxuPI.js +0 -1
  629. package/dist/interface/assets/esm-B69zS8aI.js +0 -1
  630. package/dist/interface/assets/esm-BF94InGP.js +0 -1
  631. package/dist/interface/assets/esm-BHdK6hkk.js +0 -1
  632. package/dist/interface/assets/esm-BYm8JT8N.js +0 -1
  633. package/dist/interface/assets/esm-BwCmHX2G.js +0 -1
  634. package/dist/interface/assets/esm-CL6t-XYT.js +0 -1
  635. package/dist/interface/assets/esm-CXstRMXa.js +0 -1
  636. package/dist/interface/assets/esm-Ckb9rjlL.js +0 -1
  637. package/dist/interface/assets/esm-D4insKbc.js +0 -1
  638. package/dist/interface/assets/esm-DiReJ8YS.js +0 -1
  639. package/dist/interface/assets/esm-Dt_Neag0.js +0 -1
  640. package/dist/interface/assets/esm-GspmWlKf.js +0 -1
  641. package/dist/interface/assets/esm-eezqpB2a.js +0 -1
  642. package/dist/interface/assets/flowSchema-Ckr7CEbZ.js +0 -1
  643. package/dist/interface/assets/home-DL94781-.js +0 -1
  644. package/dist/interface/assets/main-BxM81wMi.css +0 -1
  645. package/dist/interface/assets/main-DOjghmGX.js +0 -3
  646. package/dist/interface/assets/mqtt-COazyb4A.js +0 -1
  647. package/dist/interface/assets/native-WiRjRKUS.js +0 -1
  648. package/dist/interface/assets/native-hhip9y-E.js +0 -1
  649. package/dist/interface/assets/nodeDefinitions-CPyyuw1P.js +0 -1
  650. package/dist/interface/assets/plugin-DIVM640y.js +0 -1
  651. package/dist/interface/assets/plus-CTzaBaTz.js +0 -1
  652. package/dist/interface/assets/power-CvKGepBP.js +0 -1
  653. package/dist/interface/assets/rolldown-runtime-DAXXjFlN.js +0 -1
  654. package/dist/interface/assets/round-restart-alt-D3iswthu.js +0 -1
  655. package/dist/interface/assets/trash-can-outline-HvqPHpF7.js +0 -1
  656. package/dist/interface/assets/types-CDJiWcQ7.js +0 -1
  657. package/dist/interface/assets/upload-B6yqOWqz.js +0 -1
  658. package/dist/interface/assets/useBackupRestore-QuXkc5ZG.js +0 -1
  659. package/dist/interface/assets/useCameraOptions-D5-bI-e6.js +0 -1
  660. package/dist/interface/assets/useLogsSocket-BlAo-xcw.js +0 -5
  661. package/dist/interface/assets/useServerRestart-DctcFWWh.js +0 -1
  662. package/dist/interface/assets/useUserOptions-nuBRgAEk.js +0 -1
  663. package/dist/interface/assets/vendor-ace-CrklN-bc.js +0 -1085
  664. package/dist/interface/assets/vendor-cameraui-B_OCKNGw.js +0 -2040
  665. package/dist/interface/assets/vendor-capacitor-D6T-f6Q_.js +0 -2
  666. package/dist/interface/assets/vendor-chart-DpsXMlB-.js +0 -3
  667. package/dist/interface/assets/vendor-core-zLmLhSHM.js +0 -1
  668. package/dist/interface/assets/vendor-draggabilly-OrLwQbim.js +0 -1
  669. package/dist/interface/assets/vendor-gridstack-C6VKsm_r.js +0 -3
  670. package/dist/interface/assets/vendor-markdown-_OBaDsnU.js +0 -15
  671. package/dist/interface/assets/vendor-nfBMzqgY.js +0 -22
  672. package/dist/interface/assets/vendor-vueflow-B1MUSE71.js +0 -26
  673. package/dist/interface/assets/vendor-xterm-IIYDrBG1.js +0 -142
  674. package/dist/interface/assets/vendor-zod-BaT-dXMv.js +0 -127
  675. package/dist/interface/assets/web-B-SlpbxK.js +0 -1
  676. package/dist/interface/assets/web-B6leYIzJ.js +0 -1
  677. package/dist/interface/assets/web-BLDe3Kn0.js +0 -1
  678. package/dist/interface/assets/web-BT-51W2W.js +0 -1
  679. package/dist/interface/assets/web-BjKL51lK-DHLvmMLr.js +0 -1
  680. package/dist/interface/assets/web-BpRU7MbT.js +0 -1
  681. package/dist/interface/assets/web-CiaJvmq8.js +0 -1
  682. package/dist/interface/assets/web-Cnkt61og.js +0 -1
  683. package/dist/interface/assets/web-CzhM-YH1.js +0 -1
  684. package/dist/interface/assets/web-Da5rcZ2Q.js +0 -1
  685. package/dist/interface/assets/web-DdZjFuTb.js +0 -1
  686. package/dist/interface/assets/web-DnHj9sl9.js +0 -1
  687. package/dist/interface/assets/web-E4Ew4Xhj.js +0 -1
  688. package/dist/interface/assets/web-q63OEDhG.js +0 -1
  689. package/dist/interface/assets/workbox-window.prod.es5-BMiTt6Ad.js +0 -1
  690. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_triggers.py +0 -4
  691. package/dist/server/src/api/controllers/virtualsensors.controller.d.ts +0 -11
  692. package/dist/server/src/api/controllers/virtualsensors.controller.js +0 -61
  693. package/dist/server/src/api/controllers/virtualsensors.controller.js.map +0 -1
  694. package/dist/server/src/api/routes/virtualsensors.routes.d.ts +0 -2
  695. package/dist/server/src/api/routes/virtualsensors.routes.js +0 -63
  696. package/dist/server/src/api/routes/virtualsensors.routes.js.map +0 -1
  697. package/dist/server/src/api/schemas/virtualsensors.schema.js +0 -14
  698. package/dist/server/src/api/schemas/virtualsensors.schema.js.map +0 -1
  699. package/dist/server/src/api/services/virtualsensors.service.d.ts +0 -20
  700. package/dist/server/src/api/services/virtualsensors.service.js +0 -151
  701. package/dist/server/src/api/services/virtualsensors.service.js.map +0 -1
  702. package/dist/server/src/camera/sensors/semantics.js.map +0 -1
  703. package/dist/server/src/camera/sensors/sensor.d.ts +0 -34
  704. package/dist/server/src/camera/sensors/sensor.js.map +0 -1
  705. package/dist/server/src/camera/sensors/stable-id.d.ts +0 -2
  706. package/dist/server/src/camera/sensors/stable-id.js +0 -17
  707. package/dist/server/src/camera/sensors/stable-id.js.map +0 -1
  708. package/dist/server/src/camera/sensors/types.js.map +0 -1
  709. package/dist/server/src/camera/sensors/virtual.js.map +0 -1
  710. package/dist/server/src/plugins/runtime/python/store_migrate.py +0 -59
  711. package/dist/server/src/plugins/store/migrate.d.ts +0 -1
  712. package/dist/server/src/plugins/store/migrate.js +0 -22
  713. package/dist/server/src/plugins/store/migrate.js.map +0 -1
@@ -7,15 +7,14 @@ from plugins.runtime.python.store import CameraLocation, PluginLocation, SensorL
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from _camera_ui_tools.camera_ui_rpc import RPCClient
10
- from _camera_ui_tools.camera_ui_sdk import JsonSchema, SensorType
10
+ from _camera_ui_tools.camera_ui_sdk import JsonSchema
11
11
  from plugins.runtime.python.config_db import PluginConfigDb
12
12
  from plugins.runtime.python.plugin_api import PluginAPI
13
13
  from plugins.runtime.python.typings import PluginInfo
14
14
 
15
15
 
16
- # Stable storage key for sensor instance storage.
17
- def sensor_storage_key(camera_id: str, sensor_type: str, plugin_id: str, sensor_name: str) -> str:
18
- return f"{camera_id}:sensor:{sensor_type}:{plugin_id}:{sensor_name}"
16
+ def sensor_storage_key(sensor_id: str) -> str:
17
+ return f"sensor:{sensor_id}"
19
18
 
20
19
 
21
20
  class StorageController:
@@ -82,45 +81,31 @@ class StorageController:
82
81
 
83
82
  def createSensorStorage(
84
83
  self,
85
- camera_id: str,
86
- sensor_type: SensorType,
87
84
  plugin_id: str,
88
- sensor_name: str,
89
85
  sensor_id: str,
90
86
  schemas: list[JsonSchema] = [],
91
87
  ) -> DeviceStorage:
92
- storage_key = sensor_storage_key(camera_id, sensor_type.value, plugin_id, sensor_name)
88
+ storage_key = sensor_storage_key(sensor_id)
93
89
  storage = self.__storages.get(storage_key)
94
90
 
95
91
  if not storage:
96
- # storage_key is only the in-memory registry key; persistence addresses
97
- # the canonical sensors.<camId>.<type>.<name> path. sensor_id is the
98
- # runtime UUID for the RPC namespace.
99
92
  storage = DeviceStorage(
100
93
  self.__api,
101
94
  self.__proxy,
102
95
  self.__plugin,
103
96
  self.__plugin_db,
104
- SensorLocation(
105
- camera_id=camera_id,
106
- sensor_type=sensor_type.value,
107
- sensor_name=sensor_name,
108
- ),
97
+ SensorLocation(sensor_id=sensor_id),
109
98
  schemas,
110
99
  sensor_id,
111
100
  )
112
101
  self.__storages[storage_key] = storage
113
- storage.update_schema(schemas)
114
- else:
115
- storage.update_schema(schemas)
102
+
103
+ storage.update_schema(schemas)
116
104
 
117
105
  return storage
118
106
 
119
- def getSensorStorage(
120
- self, camera_id: str, sensor_type: SensorType, plugin_id: str, sensor_name: str
121
- ) -> DeviceStorage | None:
122
- storage_key = sensor_storage_key(camera_id, sensor_type.value, plugin_id, sensor_name)
123
- return self.__storages.get(storage_key)
107
+ def getSensorStorage(self, sensor_id: str) -> DeviceStorage | None:
108
+ return self.__storages.get(sensor_storage_key(sensor_id))
124
109
 
125
110
  @overload
126
111
  async def createStorage(self, type_: Literal["camera"], device_id: str) -> DeviceStorage: ...
@@ -130,19 +115,13 @@ class StorageController:
130
115
  async def createStorage(
131
116
  self,
132
117
  type_: Literal["sensor"],
133
- device_id: str,
134
- sensor_type: SensorType,
135
- plugin_id: str,
136
- sensor_name: str,
137
- sensor_id: str,
118
+ device_id: str, # plugin_id
119
+ sensor_id: str = ...,
138
120
  ) -> DeviceStorage: ...
139
121
  async def createStorage(
140
122
  self,
141
123
  type_: Literal["camera", "plugin", "sensor"],
142
- device_id: str | None = None, # camera_id
143
- sensor_type: SensorType | None = None,
144
- plugin_id: str | None = None,
145
- sensor_name: str | None = None,
124
+ device_id: str | None = None, # camera_id or plugin_id
146
125
  sensor_id: str | None = None,
147
126
  ) -> DeviceStorage:
148
127
  storage: DeviceStorage | None = None
@@ -153,12 +132,10 @@ class StorageController:
153
132
 
154
133
  storage = self.createCameraStorage(device_id)
155
134
  elif type_ == "sensor":
156
- if not device_id or not sensor_type or not plugin_id or not sensor_name or not sensor_id:
157
- raise ValueError(
158
- "cameraId, sensorType, pluginId, sensorName and sensorId are required for sensor storage creation"
159
- )
135
+ if not device_id or not sensor_id:
136
+ raise ValueError("pluginId and sensorId are required for sensor storage creation")
160
137
 
161
- storage = self.createSensorStorage(device_id, sensor_type, plugin_id, sensor_name, sensor_id)
138
+ storage = self.createSensorStorage(device_id, sensor_id)
162
139
  else:
163
140
  storage = self.createPluginStorage()
164
141
 
@@ -173,28 +150,20 @@ class StorageController:
173
150
  async def removeStorage(
174
151
  self,
175
152
  type_: Literal["sensor"],
176
- device_id: str | None = None,
177
- sensor_type: SensorType | None = None,
178
- plugin_id: str | None = None,
179
- sensor_name: str | None = None,
153
+ device_id: str, # sensor_id
180
154
  ) -> None: ...
181
155
  async def removeStorage(
182
156
  self,
183
157
  type_: Literal["camera", "plugin", "sensor"],
184
158
  device_id: str | None = None,
185
- sensor_type: SensorType | None = None,
186
- plugin_id: str | None = None,
187
- sensor_name: str | None = None,
188
159
  ) -> None:
189
160
  storage_key: str
190
161
 
191
162
  if type_ == "sensor":
192
- if not device_id or not sensor_type or not plugin_id or not sensor_name:
193
- raise ValueError(
194
- "cameraId, sensorType, pluginId and sensorName are required for sensor storage removal"
195
- )
163
+ if not device_id:
164
+ raise ValueError("sensorId is required for sensor storage removal")
196
165
 
197
- storage_key = sensor_storage_key(device_id, sensor_type.value, plugin_id, sensor_name)
166
+ storage_key = sensor_storage_key(device_id)
198
167
  elif type_ == "camera":
199
168
  if not device_id:
200
169
  raise ValueError("ID is required for storage removal")
@@ -263,9 +263,7 @@ class CameraLocation:
263
263
 
264
264
  @dataclass(frozen=True)
265
265
  class SensorLocation:
266
- camera_id: str
267
- sensor_type: str
268
- sensor_name: str
266
+ sensor_id: str
269
267
 
270
268
 
271
269
  StoreLocation = PluginLocation | CameraLocation | SensorLocation
@@ -276,8 +274,7 @@ def read_location(config: dict[str, Any], location: StoreLocation) -> dict[str,
276
274
  return config.get("plugin")
277
275
  if isinstance(location, CameraLocation):
278
276
  return (config.get("cameras") or {}).get(location.camera_id)
279
- by_camera = (config.get("sensors") or {}).get(location.camera_id) or {}
280
- return (by_camera.get(location.sensor_type) or {}).get(location.sensor_name)
277
+ return (config.get("sensors") or {}).get(location.sensor_id)
281
278
 
282
279
 
283
280
  def write_location(config: dict[str, Any], location: StoreLocation, values: dict[str, Any]) -> None:
@@ -287,8 +284,7 @@ def write_location(config: dict[str, Any], location: StoreLocation, values: dict
287
284
  if isinstance(location, CameraLocation):
288
285
  config.setdefault("cameras", {})[location.camera_id] = values
289
286
  return
290
- by_camera = config.setdefault("sensors", {}).setdefault(location.camera_id, {})
291
- by_camera.setdefault(location.sensor_type, {})[location.sensor_name] = values
287
+ config.setdefault("sensors", {})[location.sensor_id] = values
292
288
 
293
289
 
294
290
  def delete_location(config: dict[str, Any], location: StoreLocation) -> None:
@@ -304,18 +300,8 @@ def delete_location(config: dict[str, Any], location: StoreLocation) -> None:
304
300
  return
305
301
 
306
302
  sensors = config.get("sensors")
307
- if not isinstance(sensors, dict):
308
- return
309
- by_camera = sensors.get(location.camera_id)
310
- if not isinstance(by_camera, dict):
311
- return
312
- by_type = by_camera.get(location.sensor_type)
313
- if not isinstance(by_type, dict):
314
- return
315
-
316
- by_type.pop(location.sensor_name, None)
317
- _prune_if_empty(by_camera, location.sensor_type)
318
- _prune_if_empty(sensors, location.camera_id)
303
+ if isinstance(sensors, dict):
304
+ sensors.pop(location.sensor_id, None)
319
305
  _prune_if_empty(config, "sensors")
320
306
 
321
307
 
@@ -325,79 +311,19 @@ def _prune_if_empty(parent: dict[str, Any], key: str) -> None:
325
311
  del parent[key]
326
312
 
327
313
 
328
- _CANONICAL_SECTIONS = ("plugin", "cameras", "sensors")
329
- _LEGACY_SENSOR_MARKER = ":sensor:"
330
-
331
-
332
- def is_canonical_layout(payload: dict[str, Any]) -> bool:
333
- return all(key in _CANONICAL_SECTIONS for key in payload)
314
+ _LAYOUT_VERSION_KEY = "__v"
315
+ # v2: sensors keyed by persistent sensor id, pre-entity camera-keyed trees are unmappable
316
+ _LAYOUT_VERSION = 2
334
317
 
335
318
 
336
- # Go-SDK legacy blobs ('<pluginId>.plugin', ...) are remapped by the Go SDK
337
- # itself, not here: server and plugin update independently, and a plugin on
338
- # an old SDK must keep finding its keys untouched.
339
- def _is_go_legacy_layout(payload: dict[str, Any], plugin_id: str) -> bool:
340
- return len(payload) > 0 and all(key.startswith(f"{plugin_id}.") for key in payload)
341
-
342
-
343
- def remap_legacy_layout(
344
- payload: dict[str, Any], plugin_id: str, log: StoreLogger | None = None
345
- ) -> dict[str, Any]:
346
- if is_canonical_layout(payload) or _is_go_legacy_layout(payload, plugin_id):
319
+ def upgrade_layout(payload: dict[str, Any]) -> dict[str, Any]:
320
+ if payload.get(_LAYOUT_VERSION_KEY) == _LAYOUT_VERSION:
347
321
  return payload
348
322
 
349
- canonical: dict[str, Any] = {
350
- section: payload[section] for section in _CANONICAL_SECTIONS if section in payload
351
- }
352
-
353
- for key, values in payload.items():
354
- if key in _CANONICAL_SECTIONS:
355
- continue
356
-
357
- if key == "storage":
358
- # In a mixed legacy+canonical document the canonical section is the
359
- # newer write - the legacy duplicate is stale and must never win.
360
- if "plugin" in canonical:
361
- if log:
362
- log.warn(
363
- f"store: legacy key 'storage' dropped — canonical 'plugin' already present ({plugin_id})"
364
- )
365
- continue
366
- canonical["plugin"] = values
367
- continue
368
-
369
- sensor_idx = key.find(_LEGACY_SENSOR_MARKER)
370
- if sensor_idx != -1:
371
- # <camId>:sensor:<type>:<pluginId>:<name> - type and pluginId contain
372
- # no colons; the name keeps everything after them verbatim.
373
- camera_id = key[:sensor_idx]
374
- rest = key[sensor_idx + len(_LEGACY_SENSOR_MARKER) :]
375
- type_end = rest.find(":")
376
- plugin_end = rest.find(":", type_end + 1)
377
- if type_end != -1 and plugin_end != -1:
378
- sensor_type = rest[:type_end]
379
- sensor_name = rest[plugin_end + 1 :]
380
- by_camera = canonical.setdefault("sensors", {}).setdefault(camera_id, {})
381
- if sensor_name in by_camera.get(sensor_type, {}):
382
- if log:
383
- log.warn(
384
- f"store: legacy sensor key '{key}' dropped — canonical target already present ({plugin_id})"
385
- )
386
- continue
387
- by_camera.setdefault(sensor_type, {})[sensor_name] = values
388
- continue
389
- if log:
390
- log.warn(f"store: unparsable legacy sensor key '{key}' kept under cameras ({plugin_id})")
391
-
392
- if key in (canonical.get("cameras") or {}):
393
- if log:
394
- log.warn(
395
- f"store: legacy key '{key}' dropped — canonical 'cameras.{key}' already present ({plugin_id})"
396
- )
397
- continue
398
- canonical.setdefault("cameras", {})[key] = values
399
-
400
- return canonical
323
+ upgraded = dict(payload)
324
+ upgraded.pop("sensors", None)
325
+ upgraded[_LAYOUT_VERSION_KEY] = _LAYOUT_VERSION
326
+ return upgraded
401
327
 
402
328
 
403
329
  # Values must round-trip identically through all three runtimes' msgpack
@@ -453,9 +379,8 @@ def _walk_value(value: Any, path: str, depth: int) -> None:
453
379
 
454
380
 
455
381
  class PluginStoreFile:
456
- def __init__(self, volume_dir: str, plugin_id: str, log: StoreLogger | None = None) -> None:
382
+ def __init__(self, volume_dir: str, log: StoreLogger | None = None) -> None:
457
383
  self._volume_dir = volume_dir
458
- self._plugin_id = plugin_id
459
384
  self._log = log
460
385
  self._path = str(Path(volume_dir) / STORE_FILE_NAME)
461
386
  self._writer = CoalescingWriter(self._write_snapshot, log)
@@ -472,15 +397,14 @@ class PluginStoreFile:
472
397
 
473
398
  payload = await read_store_file(self._path, self._log)
474
399
  if payload is None:
475
- # Persist the initial envelope so later opens skip the legacy probe.
476
400
  payload = {}
477
401
  await write_store_file(self._path, payload, self._log)
478
402
 
479
- remapped = remap_legacy_layout(payload, self._plugin_id, self._log)
480
- if remapped is not payload:
481
- await write_store_file(self._path, remapped, self._log)
403
+ upgraded = upgrade_layout(payload)
404
+ if upgraded is not payload:
405
+ await write_store_file(self._path, upgraded, self._log)
482
406
 
483
- self._payload = remapped
407
+ self._payload = upgraded
484
408
  await backup_store_file(self._path, self._log)
485
409
  self._closed = False
486
410
 
@@ -52,13 +52,24 @@ class StoredSensorData(TypedDict):
52
52
  type: SensorType
53
53
  name: str
54
54
  displayName: str
55
+ nativeId: NotRequired[str]
55
56
  pluginId: str
57
+ assignedCameraIds: list[str]
58
+ boundCameraId: NotRequired[str]
59
+ exposed: bool
60
+ connected: bool
56
61
  properties: dict[str, Any]
57
62
  capabilities: NotRequired[list[str]]
58
63
  requiresFrames: NotRequired[bool]
59
64
  modelSpec: NotRequired[ModelSpec]
60
65
 
61
66
 
67
+ class SensorRegistration(TypedDict):
68
+ id: str
69
+ assignedCameraIds: list[str]
70
+ active: bool
71
+
72
+
62
73
  class SensorRefreshedState(TypedDict):
63
74
  type: SensorType
64
75
  properties: dict[str, Any]
@@ -67,33 +78,41 @@ class SensorRefreshedState(TypedDict):
67
78
 
68
79
 
69
80
  class SensorAddedEvent(TypedDict):
70
- cameraId: str
71
81
  sensor: StoredSensorData
72
82
  state: SensorRefreshedState
73
83
 
74
84
 
75
- class SensorRemovedEvent(TypedDict):
76
- cameraId: str
85
+ class SensorDeletedEvent(TypedDict):
77
86
  sensorId: str
78
87
  sensorType: SensorType
79
88
 
80
89
 
90
+ class SensorConnectedChangedEvent(TypedDict):
91
+ sensorId: str
92
+ sensorType: SensorType
93
+ connected: bool
94
+
95
+
81
96
  class SensorCapabilitiesChangedEvent(TypedDict):
82
- cameraId: str
83
97
  sensorId: str
84
98
  capabilities: list[str]
85
99
 
86
100
 
87
101
  class SensorDisplayNameChangedEvent(TypedDict):
88
- cameraId: str
89
102
  sensorId: str
90
103
  displayName: str
91
104
 
92
105
 
106
+ class SensorExposedChangedEvent(TypedDict):
107
+ sensorId: str
108
+ sensorType: SensorType
109
+ exposed: bool
110
+
111
+
93
112
  class SensorAssignmentChangedEvent(TypedDict):
94
- cameraId: str
95
- pluginId: str
113
+ sensorId: str
96
114
  sensorType: SensorType
115
+ cameraId: str
97
116
  assigned: bool
98
117
 
99
118
 
@@ -101,18 +120,22 @@ class SensorEventMessage(TypedDict):
101
120
  type: Literal[
102
121
  "property:changed",
103
122
  "sensor:added",
104
- "sensor:removed",
123
+ "sensor:deleted",
124
+ "sensor:connected:changed",
105
125
  "sensor:displayName:changed",
106
126
  "sensor:capabilities:changed",
107
127
  "sensor:assignment:changed",
128
+ "sensor:exposed:changed",
108
129
  ]
109
130
  data: (
110
131
  PropertyChangedEvent
111
132
  | SensorAddedEvent
112
- | SensorRemovedEvent
133
+ | SensorDeletedEvent
134
+ | SensorConnectedChangedEvent
113
135
  | SensorDisplayNameChangedEvent
114
136
  | SensorCapabilitiesChangedEvent
115
137
  | SensorAssignmentChangedEvent
138
+ | SensorExposedChangedEvent
116
139
  )
117
140
 
118
141
 
@@ -1,2 +1 @@
1
- export declare function isCanonicalLayout(payload: Record<string, any>): boolean;
2
- export declare function remapLegacyLayout(payload: Record<string, any>, pluginId: string): Record<string, any>;
1
+ export declare function upgradeStoreLayout(payload: Record<string, any>): Record<string, any>;
@@ -1,60 +1,13 @@
1
- const CANONICAL_SECTIONS = new Set(['plugin', 'cameras', 'sensors']);
2
- const LEGACY_SENSOR_MARKER = ':sensor:';
3
- export function isCanonicalLayout(payload) {
4
- return Object.keys(payload).every((key) => CANONICAL_SECTIONS.has(key));
5
- }
6
- function isGoLegacyLayout(payload, pluginId) {
7
- const keys = Object.keys(payload);
8
- return keys.length > 0 && keys.every((key) => key.startsWith(`${pluginId}.`));
9
- }
10
- export function remapLegacyLayout(payload, pluginId) {
11
- if (isCanonicalLayout(payload) || isGoLegacyLayout(payload, pluginId)) {
1
+ const LAYOUT_VERSION_KEY = '__v';
2
+ // v2: sensors keyed by persistent sensor id, pre-entity camera-keyed trees are unmappable
3
+ const LAYOUT_VERSION = 2;
4
+ export function upgradeStoreLayout(payload) {
5
+ if (payload[LAYOUT_VERSION_KEY] === LAYOUT_VERSION) {
12
6
  return payload;
13
7
  }
14
- const canonical = {};
15
- for (const section of CANONICAL_SECTIONS) {
16
- if (payload[section] !== undefined) {
17
- canonical[section] = payload[section];
18
- }
19
- }
20
- for (const [key, values] of Object.entries(payload)) {
21
- if (CANONICAL_SECTIONS.has(key)) {
22
- continue;
23
- }
24
- if (key === 'storage') {
25
- if (canonical.plugin !== undefined) {
26
- continue;
27
- }
28
- canonical.plugin = values;
29
- continue;
30
- }
31
- const sensorIdx = key.indexOf(LEGACY_SENSOR_MARKER);
32
- if (sensorIdx !== -1) {
33
- // <camId>:sensor:<type>:<pluginId>:<name> — type and pluginId contain no
34
- // colons; the name keeps everything after them verbatim.
35
- const cameraId = key.slice(0, sensorIdx);
36
- const rest = key.slice(sensorIdx + LEGACY_SENSOR_MARKER.length);
37
- const typeEnd = rest.indexOf(':');
38
- const pluginEnd = rest.indexOf(':', typeEnd + 1);
39
- if (typeEnd !== -1 && pluginEnd !== -1) {
40
- const sensorType = rest.slice(0, typeEnd);
41
- const sensorName = rest.slice(pluginEnd + 1);
42
- if (canonical.sensors?.[cameraId]?.[sensorType]?.[sensorName] !== undefined) {
43
- continue;
44
- }
45
- canonical.sensors ??= {};
46
- canonical.sensors[cameraId] ??= {};
47
- canonical.sensors[cameraId][sensorType] ??= {};
48
- canonical.sensors[cameraId][sensorType][sensorName] = values;
49
- continue;
50
- }
51
- }
52
- if (canonical.cameras?.[key] !== undefined) {
53
- continue;
54
- }
55
- canonical.cameras ??= {};
56
- canonical.cameras[key] = values;
57
- }
58
- return canonical;
8
+ const upgraded = { ...payload };
9
+ delete upgraded.sensors;
10
+ upgraded[LAYOUT_VERSION_KEY] = LAYOUT_VERSION;
11
+ return upgraded;
59
12
  }
60
13
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../src/plugins/store/layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../src/plugins/store/layout.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,0FAA0F;AAC1F,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,IAAI,OAAO,CAAC,kBAAkB,CAAC,KAAK,cAAc,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAChC,OAAO,QAAQ,CAAC,OAAO,CAAC;IACxB,QAAQ,CAAC,kBAAkB,CAAC,GAAG,cAAc,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -5,9 +5,8 @@ export type StoreLocation = {
5
5
  cameraId: string;
6
6
  } | {
7
7
  kind: 'sensor';
8
- cameraId: string;
9
- sensorType: string;
10
- sensorName: string;
8
+ pluginId: string;
9
+ sensorId: string;
11
10
  };
12
11
  export declare function readLocation(config: Record<string, any>, location: StoreLocation): Record<string, any> | undefined;
13
12
  export declare function writeLocation(config: Record<string, any>, location: StoreLocation, values: Record<string, any>): void;
@@ -5,7 +5,7 @@ export function readLocation(config, location) {
5
5
  case 'camera':
6
6
  return config.cameras?.[location.cameraId];
7
7
  case 'sensor':
8
- return config.sensors?.[location.cameraId]?.[location.sensorType]?.[location.sensorName];
8
+ return config.sensors?.[location.sensorId];
9
9
  }
10
10
  }
11
11
  export function writeLocation(config, location, values) {
@@ -19,9 +19,7 @@ export function writeLocation(config, location, values) {
19
19
  return;
20
20
  case 'sensor':
21
21
  config.sensors ??= {};
22
- config.sensors[location.cameraId] ??= {};
23
- config.sensors[location.cameraId][location.sensorType] ??= {};
24
- config.sensors[location.cameraId][location.sensorType][location.sensorName] = values;
22
+ config.sensors[location.sensorId] = values;
25
23
  return;
26
24
  }
27
25
  }
@@ -34,16 +32,10 @@ export function deleteLocation(config, location) {
34
32
  delete config.cameras?.[location.cameraId];
35
33
  pruneIfEmpty(config, 'cameras');
36
34
  return;
37
- case 'sensor': {
38
- const byType = config.sensors?.[location.cameraId]?.[location.sensorType];
39
- if (byType) {
40
- delete byType[location.sensorName];
41
- pruneIfEmpty(config.sensors[location.cameraId], location.sensorType);
42
- pruneIfEmpty(config.sensors, location.cameraId);
43
- pruneIfEmpty(config, 'sensors');
44
- }
35
+ case 'sensor':
36
+ delete config.sensors?.[location.sensorId];
37
+ pruneIfEmpty(config, 'sensors');
45
38
  return;
46
- }
47
39
  }
48
40
  }
49
41
  function pruneIfEmpty(parent, key) {
@@ -1 +1 @@
1
- {"version":3,"file":"location.js","sourceRoot":"","sources":["../../../../../src/plugins/store/location.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAA2B,EAAE,QAAuB;IAC/E,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA2B,EAAE,QAAuB,EAAE,MAA2B;IAC7G,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC3C,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;YACrF,OAAO;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA2B,EAAE,QAAuB;IACjF,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;YACrB,OAAO;QACT,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACnC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrE,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAChD,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClC,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAA2B,EAAE,GAAW;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../../../../../src/plugins/store/location.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAA2B,EAAE,QAAuB;IAC/E,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA2B,EAAE,QAAuB,EAAE,MAA2B;IAC7G,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC3C,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC3C,OAAO;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA2B,EAAE,QAAuB;IACjF,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;YACrB,OAAO;QACT,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChC,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAA2B,EAAE,GAAW;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1,12 +1,11 @@
1
1
  export declare const STORE_FILE_NAME = "store.cui";
2
2
  export declare class PluginStoreFile {
3
3
  private readonly volumeDir;
4
- private readonly pluginId;
5
4
  private readonly path;
6
5
  private readonly writer;
7
6
  private payload;
8
7
  private closed;
9
- constructor(volumeDir: string, pluginId: string);
8
+ constructor(volumeDir: string);
10
9
  open(): Promise<void>;
11
10
  get(): Record<string, any>;
12
11
  put(payload: Record<string, any>): Promise<void>;
@@ -1,20 +1,17 @@
1
1
  import { mkdir } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { CoalescingWriter } from './coalescingWriter.js';
4
- import { remapLegacyLayout } from './layout.js';
5
- import { migrateLmdbToStoreFile } from './migrate.js';
4
+ import { upgradeStoreLayout } from './layout.js';
6
5
  import { backupStoreFile, readStoreFile, removeOrphanedTmpFiles, writeStoreFile } from './storeFile.js';
7
6
  export const STORE_FILE_NAME = 'store.cui';
8
7
  export class PluginStoreFile {
9
8
  volumeDir;
10
- pluginId;
11
9
  path;
12
10
  writer;
13
11
  payload = {};
14
12
  closed = true;
15
- constructor(volumeDir, pluginId) {
13
+ constructor(volumeDir) {
16
14
  this.volumeDir = volumeDir;
17
- this.pluginId = pluginId;
18
15
  this.path = join(volumeDir, STORE_FILE_NAME);
19
16
  this.writer = new CoalescingWriter((snapshot) => writeStoreFile(this.path, snapshot));
20
17
  }
@@ -23,18 +20,14 @@ export class PluginStoreFile {
23
20
  await removeOrphanedTmpFiles(this.path);
24
21
  let payload = await readStoreFile(this.path);
25
22
  if (payload === undefined) {
26
- const migrated = await migrateLmdbToStoreFile(this.volumeDir, this.path);
27
- payload = migrated ? await readStoreFile(this.path) : undefined;
28
- if (payload === undefined) {
29
- payload = {};
30
- await writeStoreFile(this.path, payload);
31
- }
23
+ payload = {};
24
+ await writeStoreFile(this.path, payload);
32
25
  }
33
- const remapped = remapLegacyLayout(payload, this.pluginId);
34
- if (remapped !== payload) {
35
- await writeStoreFile(this.path, remapped);
26
+ const upgraded = upgradeStoreLayout(payload);
27
+ if (upgraded !== payload) {
28
+ await writeStoreFile(this.path, upgraded);
36
29
  }
37
- this.payload = remapped;
30
+ this.payload = upgraded;
38
31
  await backupStoreFile(this.path);
39
32
  this.closed = false;
40
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pluginStoreFile.js","sourceRoot":"","sources":["../../../../../src/plugins/store/pluginStoreFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pluginStoreFile.js","sourceRoot":"","sources":["../../../../../src/plugins/store/pluginStoreFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExG,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C,MAAM,OAAO,eAAe;IAMG;IALZ,IAAI,CAAS;IACb,MAAM,CAAmB;IAClC,OAAO,GAAwB,EAAE,CAAC;IAClC,MAAM,GAAG,IAAI,CAAC;IAEtB,YAA6B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxF,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,GAAG;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,OAA4B;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,iEAAiE;YACjE,yCAAyC;YACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -13,6 +13,7 @@ export declare class PluginWorker {
13
13
  private shuttingDown;
14
14
  private isRemote;
15
15
  private remoteStartTimeout?;
16
+ private localReadyTimeout?;
16
17
  private configStore?;
17
18
  private opChain;
18
19
  private channel?;
@@ -33,6 +34,7 @@ export declare class PluginWorker {
33
34
  cleanup(): Promise<void>;
34
35
  private runExclusive;
35
36
  private doStart;
37
+ private armLocalReadyTimeout;
36
38
  private openChannel;
37
39
  private ensureConfigStore;
38
40
  private workerManagerRef;