@camera.ui/server 2.1.8 → 2.1.10

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 (480) hide show
  1. package/dist/interface/assets/{404-vRjJVgl4.js → 404-BLNSh-sA.js} +1 -1
  2. package/dist/interface/assets/{About-CO9cx5Gp.js → About-ZakRzon7.js} +1 -1
  3. package/dist/interface/assets/Automation-DoVhkuVY.js +3 -0
  4. package/dist/interface/assets/AutomationImport-DVxK1R1y.js +2 -0
  5. package/dist/interface/assets/{AutomationStore-NyXuw3tI.js → AutomationStore-DaNO9_9S.js} +2 -2
  6. package/dist/interface/assets/{AutomationStoreDetail-Dz9Y8j8g.js → AutomationStoreDetail-CTDCEaIz.js} +2 -2
  7. package/dist/interface/assets/Automations-mdnUitWx.js +2 -0
  8. package/dist/interface/assets/Camera-B3cv5IVC.js +2 -0
  9. package/dist/interface/assets/Camera-LSq1bWmA.css +1 -0
  10. package/dist/interface/assets/{CameraConsole-S9Il0g0K.js → CameraConsole-C32X5I91.js} +2 -2
  11. package/dist/interface/assets/{Cameras-lDMBkoUW.js → Cameras-Drv48-Eb.js} +23 -23
  12. package/dist/interface/assets/Camview-Bvy39jSt.js +1 -0
  13. package/dist/interface/assets/{Camview-CS7PIBMz.css → Camview-Lp3QU0de.css} +1 -1
  14. package/dist/interface/assets/{Config-B0cy1RIU.js → Config-B-LDdaS6.js} +1 -1
  15. package/dist/interface/assets/ConfigActionCameraControl-As2qXvnd.js +1 -0
  16. package/dist/interface/assets/{ConfigActionDelay-DrzMP_7q.js → ConfigActionDelay-Cj3yWfEV.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionHttp-BUANm5zh.js → ConfigActionHttp-PlS5vI0v.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionImageInput-CKvnzs_4.js → ConfigActionImageInput-BHflOA-T.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionMqtt-Cz-fMzXH.js → ConfigActionMqtt-DByOwVPe.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionNotification-exxG4m-k.js → ConfigActionNotification-D_8_lp96.js} +1 -1
  21. package/dist/interface/assets/{ConfigActionNotificationControl-BMFbm9lJ.js → ConfigActionNotificationControl-ClFMom6m.js} +1 -1
  22. package/dist/interface/assets/{ConfigActionOutput-js-UUBci.js → ConfigActionOutput-YTAw-Are.js} +1 -1
  23. package/dist/interface/assets/{ConfigActionPlugin-B5hrC_B6.js → ConfigActionPlugin-lF2IH2Bo.js} +1 -1
  24. package/dist/interface/assets/{ConfigActionSensor-BESCtedA.js → ConfigActionSensor-DQZW_Jxr.js} +1 -1
  25. package/dist/interface/assets/{ConfigActionSnapshot-Uxz9dCqh.js → ConfigActionSnapshot-CHxIQ5J0.js} +1 -1
  26. package/dist/interface/assets/{ConfigActionVariable-CsiC6bgF.js → ConfigActionVariable-0VLGuhwP.js} +1 -1
  27. package/dist/interface/assets/{ConfigConditionIfElse-CiScJB42.js → ConfigConditionIfElse-D-Ibn8QL.js} +1 -1
  28. package/dist/interface/assets/{ConfigConditionSensorState-CbDfsuOl.js → ConfigConditionSensorState-BKSGYRdv.js} +1 -1
  29. package/dist/interface/assets/{ConfigConditionSwitch-B7E5DAoC.js → ConfigConditionSwitch-CzkEyWb1.js} +1 -1
  30. package/dist/interface/assets/{ConfigConditionTime-BmeGYmwH.js → ConfigConditionTime-BFKsDI_t.js} +1 -1
  31. package/dist/interface/assets/{ConfigSensorValueInput-CNTToTaw.js → ConfigSensorValueInput-yTiHhlXG.js} +1 -1
  32. package/dist/interface/assets/ConfigTriggerDetection-DFTgRaE0.js +1 -0
  33. package/dist/interface/assets/ConfigTriggerGeofence-B2Cqi5Id.js +1 -0
  34. package/dist/interface/assets/{ConfigTriggerManual-Z1_1wUUM.js → ConfigTriggerManual-BDK6OYxg.js} +1 -1
  35. package/dist/interface/assets/{ConfigTriggerMqtt-BBvD0ow9.js → ConfigTriggerMqtt-BZO14RrW.js} +1 -1
  36. package/dist/interface/assets/{ConfigTriggerSchedule-B0rMjsZL.js → ConfigTriggerSchedule-sMkzMLgn.js} +1 -1
  37. package/dist/interface/assets/{ConfigTriggerSensor-B1p15KGD.js → ConfigTriggerSensor-D6W_exDW.js} +1 -1
  38. package/dist/interface/assets/{ConfigTriggerSystem-Du-AkCKy.js → ConfigTriggerSystem-D4cx1GqI.js} +1 -1
  39. package/dist/interface/assets/{ConfigTriggerWebhook-Debqt-nw.js → ConfigTriggerWebhook-DxZziGkL.js} +1 -1
  40. package/dist/interface/assets/Console-DjA3ZPU_.js +1 -0
  41. package/dist/interface/assets/CuiAutomationRunsDialog-B4ABK72A.js +1 -0
  42. package/dist/interface/assets/CuiBottomSheet-D1zDWsoK.js +1 -0
  43. package/dist/interface/assets/{CuiBottomSheet-DECWGdrp.js → CuiBottomSheet-N9MHq4yZ.js} +1 -1
  44. package/dist/interface/assets/CuiCameraPipCard-CnWs2fAC.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-CahW-f8_.js +1 -0
  46. package/dist/interface/assets/{CuiCameraShares-D32cM63m.js → CuiCameraShares-B2RdPWWh.js} +1 -1
  47. package/dist/interface/assets/CuiCameraTable-4ikGv8QA.js +1 -0
  48. package/dist/interface/assets/{CuiCameraTable-Bk9N-Oc6.js → CuiCameraTable-BKBvhRDc.js} +2 -2
  49. package/dist/interface/assets/CuiChartTable-CqKo74Tf.css +1 -0
  50. package/dist/interface/assets/CuiChartTable-Lvz9Zq0k.js +1 -0
  51. package/dist/interface/assets/CuiConsole-DUswVhFC.js +5 -0
  52. package/dist/interface/assets/CuiDataTable-CIP95jVF.js +1 -0
  53. package/dist/interface/assets/CuiLightControl-CvfWo8mY.js +1 -0
  54. package/dist/interface/assets/{CuiList-w69dERIq.js → CuiList-CajC6jpE.js} +1 -1
  55. package/dist/interface/assets/CuiPluginCard-CQS8C87-.js +2 -0
  56. package/dist/interface/assets/CuiPluginCategoryChip-DCNG8zl1.js +1 -0
  57. package/dist/interface/assets/{CuiPluginOAuthButton-CNxj7cuf.js → CuiPluginOAuthButton-CvZrOWr8.js} +2 -2
  58. package/dist/interface/assets/{CuiPluginTrustBadge-DYsEz6WI.js → CuiPluginTrustBadge-Bc1dQgX8.js} +1 -1
  59. package/dist/interface/assets/CuiQRCode-CjLcB644.js +1 -0
  60. package/dist/interface/assets/CuiRecordingsGrid-DrpErbux.js +1 -0
  61. package/dist/interface/assets/{CuiRecordingsGrid-Q4C3aeLo.css → CuiRecordingsGrid-EAumRo5E.css} +1 -1
  62. package/dist/interface/assets/CuiSchema-BYYeh269.css +1 -0
  63. package/dist/interface/assets/CuiSchema-DG8peseE.js +1 -0
  64. package/dist/interface/assets/{CuiTopNavbarItem-7yu9c68R.js → CuiTopNavbarItem-Dq3Esl1S.js} +1 -1
  65. package/dist/interface/assets/Faces-D0yRgOMj.js +1 -0
  66. package/dist/interface/assets/FirstSteps-BW8AVmd4.js +1 -0
  67. package/dist/interface/assets/{Instances-Bmb-yWM-.js → Instances-BgXJvs0_.js} +1 -1
  68. package/dist/interface/assets/{Logs-DxHqkMpx.js → Logs-DH3rWnlV.js} +2 -2
  69. package/dist/interface/assets/Menu-D9FVgjwT.js +1 -0
  70. package/dist/interface/assets/Metrics-7bYWyGWU.js +9 -0
  71. package/dist/interface/assets/Metrics-DX59XXDc.css +1 -0
  72. package/dist/interface/assets/{OAuthDeviceFlow-CLi6l8jS.js → OAuthDeviceFlow-BS0FQbZh.js} +1 -1
  73. package/dist/interface/assets/Plugin-ZwkTp6C4.js +1 -0
  74. package/dist/interface/assets/{PluginConsole-xOY_kwz_.js → PluginConsole-Dt39TWaO.js} +2 -2
  75. package/dist/interface/assets/PluginDetail-D7ZtOG9Y.js +2 -0
  76. package/dist/interface/assets/{PluginSchema-DG3ou73v.js → PluginSchema-8T7EBq-Z.js} +1 -1
  77. package/dist/interface/assets/PluginSearch-DN3o0wfs.js +1 -0
  78. package/dist/interface/assets/PluginSearch-eRDCvu_8.js +2 -0
  79. package/dist/interface/assets/{PluginUpdateProgress-Bx0MXwAk.js → PluginUpdateProgress-CxjpzkGa.js} +1 -1
  80. package/dist/interface/assets/Plugins-DVsMpyvr.js +1 -0
  81. package/dist/interface/assets/Recordings-BKxSEiQo.js +1 -0
  82. package/dist/interface/assets/Recordings-cR4_6aGN.css +1 -0
  83. package/dist/interface/assets/SensorEdit-BmaMQKEa.js +1 -0
  84. package/dist/interface/assets/{SensorHistory-CTIUwIWN.js → SensorHistory-CmOAk-tD.js} +1 -1
  85. package/dist/interface/assets/Sensors-x08al7Je.js +2 -0
  86. package/dist/interface/assets/Settings-Cp1lzG1i.js +1 -0
  87. package/dist/interface/assets/SettingsAccount-BwCNddkW.js +1 -0
  88. package/dist/interface/assets/SettingsAccount-DC9AxqHe.js +1 -0
  89. package/dist/interface/assets/SettingsAppearance-CMzzDZCX.js +1 -0
  90. package/dist/interface/assets/{SettingsAppearance-CoTdsIwM.js → SettingsAppearance-Dr8hJloI.js} +1 -1
  91. package/dist/interface/assets/SettingsBackup-Dc8pDM3Y.js +1 -0
  92. package/dist/interface/assets/{SettingsList-W5FvbkXm.js → SettingsList-3peF3gFZ.js} +1 -1
  93. package/dist/interface/assets/SettingsMqtt-k-cHaOoA.js +1 -0
  94. package/dist/interface/assets/SettingsNotifications-BJHYlSKX.js +1 -0
  95. package/dist/interface/assets/SettingsPermissions-CymqvfR9.js +1 -0
  96. package/dist/interface/assets/{SettingsRecordings-COUi9BQg.js → SettingsRecordings-gWTD_djR.js} +1 -1
  97. package/dist/interface/assets/SettingsRemote-BWAhI1Gw.js +2 -0
  98. package/dist/interface/assets/SettingsRemote-CtP6Gz9C.css +1 -0
  99. package/dist/interface/assets/SettingsSystem-BGBUQvjg.js +2 -0
  100. package/dist/interface/assets/SettingsUsers-B_Ri5OrM.js +1 -0
  101. package/dist/interface/assets/Terminal-eYxvgFHE.js +4 -0
  102. package/dist/interface/assets/Updates-CweZekTf.js +2 -0
  103. package/dist/interface/assets/{VariableInput-DhAhhfsm.js → VariableInput-CM6T3pUW.js} +1 -1
  104. package/dist/interface/assets/{VariableSuggestions-q0Jd1DVI.js → VariableSuggestions-BGxZxS6U.js} +1 -1
  105. package/dist/interface/assets/{VersionsHandler-XEn3uFy7.js → VersionsHandler-BWIiBPPa.js} +2 -2
  106. package/dist/interface/assets/{VirtualSensorCreate-_E5E0U7E.js → VirtualSensorCreate-CFQC2-9D.js} +1 -1
  107. package/dist/interface/assets/Workers-B-sp43t3.js +2 -0
  108. package/dist/interface/assets/{Workers-7hKMBU4w.css → Workers-DH59zE1C.css} +1 -1
  109. package/dist/interface/assets/{api-C7Yv5Scr.js → api-CG0j1twy.js} +1 -1
  110. package/dist/interface/assets/api-CVOj5SYs.css +2 -0
  111. package/dist/interface/assets/api-C_bOaXk2.js +2 -0
  112. package/dist/interface/assets/{auth-BixzEnBM.js → auth-BPSOBTDX.js} +1 -1
  113. package/dist/interface/assets/{automations-K8XPcP3U.js → automations-BrtwUIUz.js} +1 -1
  114. package/dist/interface/assets/brain-7IVdhMyV.js +1 -0
  115. package/dist/interface/assets/cameras.schema-CoIOnGzE.js +1 -0
  116. package/dist/interface/assets/cloudHandoff-BiFzJEYx.js +1 -0
  117. package/dist/interface/assets/{config-CURuT8_k.js → config-BjldP5A6.js} +1 -1
  118. package/dist/interface/assets/content-copy-CLkJTA4w.js +1 -0
  119. package/dist/interface/assets/eventLabels-BsPoPWS9.js +1 -0
  120. package/dist/interface/assets/{flowSchema-szT9B0sA.js → flowSchema-B_Otn6RU.js} +1 -1
  121. package/dist/interface/assets/{intercomService-BjB4QQiX.js → intercomService-BpTOoSQi.js} +1 -1
  122. package/dist/interface/assets/lan-BP0NuDr7.js +1 -0
  123. package/dist/interface/assets/main-BG-VCb--.js +3 -0
  124. package/dist/interface/assets/main-CFQGq2Yn.css +1 -0
  125. package/dist/interface/assets/{mqtt-uItF3Vd7.js → mqtt-DSPPQwxJ.js} +1 -1
  126. package/dist/interface/assets/{notifications-CuZPzI4-.js → notifications-DEEM2oP2.js} +1 -1
  127. package/dist/interface/assets/{plugins-QEqfAk0G.js → plugins-DBBFdZKH.js} +1 -1
  128. package/dist/interface/assets/refresh-Ds2EayhZ.js +1 -0
  129. package/dist/interface/assets/sensorIcons-CP5EQZ60.js +1 -0
  130. package/dist/interface/assets/{sensors-BxvL01cB.js → sensors-CKTPsYYH.js} +1 -1
  131. package/dist/interface/assets/{server-CDm6FwHH.js → server-B_MuqJ5z.js} +1 -1
  132. package/dist/interface/assets/{theme-CRw47tnu.js → theme-FztlStyg.js} +1 -1
  133. package/dist/interface/assets/types-BHAzjgi3.js +1 -0
  134. package/dist/interface/assets/types-G1_espGV.js +1 -0
  135. package/dist/interface/assets/{types-DtdpTPfZ.js → types-bCt9IrFD.js} +1 -1
  136. package/dist/interface/assets/updates-CVapvGAI.js +1 -0
  137. package/dist/interface/assets/{useAppVersion-BxTTVLKg.js → useAppVersion-SrF7tGCe.js} +1 -1
  138. package/dist/interface/assets/useBackupRestore-Tc23Huvm.js +1 -0
  139. package/dist/interface/assets/{useCameraOptions-DMC2KjMS.js → useCameraOptions-zsIqf0i9.js} +1 -1
  140. package/dist/interface/assets/{useLogsSocket-CmyalQi8.js → useLogsSocket-DSltWBh4.js} +1 -1
  141. package/dist/interface/assets/{useNavLayout-BacPxpZv.js → useNavLayout-BhlxDHV7.js} +1 -1
  142. package/dist/interface/assets/{usePermissions-C2wQBWmH.js → usePermissions-4HqGU99G.js} +1 -1
  143. package/dist/interface/assets/{usePluginUpdates-CyjxFTTi.js → usePluginUpdates-CKH0Hb87.js} +1 -1
  144. package/dist/interface/assets/{usePushRegistration-BPSfvI_w.js → usePushRegistration-DAE3goyn.js} +1 -1
  145. package/dist/interface/assets/{useServerRestart-x8p2rFqn.js → useServerRestart-DoLrF47t.js} +1 -1
  146. package/dist/interface/assets/{useStreamStatus-PMpl519O.js → useStreamStatus-B3QIWjDE.js} +1 -1
  147. package/dist/interface/assets/useTabSwipe-BYFLQ9EY.js +1 -0
  148. package/dist/interface/assets/{useUpdateChannel-ChscS5KW.js → useUpdateChannel-DWEw-ZyB.js} +1 -1
  149. package/dist/interface/assets/useUpdatesSocket-CoxkS7Hr.js +1 -0
  150. package/dist/interface/assets/{useUserOptions-YiEj2ox6.js → useUserOptions-DCDeuz2p.js} +1 -1
  151. package/dist/interface/assets/vendor-cameraui-4iwjOYwz.js +2326 -0
  152. package/dist/interface/assets/vendor-core-gJradu21.js +1 -0
  153. package/dist/interface/assets/{vendor-primevue-BDu2BpXv.js → vendor-primevue-DMAuiM9b.js} +72 -72
  154. package/dist/interface/index.html +32 -27
  155. package/dist/interface/sw.js +1 -1
  156. package/dist/server/package.json +13 -12
  157. package/dist/server/requirements.txt +2 -2
  158. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +8 -0
  159. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +20 -0
  160. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +8 -2
  161. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +10 -2
  162. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +9 -0
  163. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +24 -10
  164. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/enums.py +6 -7
  165. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/notification.py +28 -0
  166. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +24 -0
  167. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +4 -0
  168. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +18 -0
  169. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +3 -3
  170. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +6 -1
  171. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/spec.py +27 -3
  172. package/dist/server/src/api/controllers/auth.controller.js +5 -0
  173. package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
  174. package/dist/server/src/api/controllers/frameWorkers.controller.d.ts +14 -0
  175. package/dist/server/src/api/controllers/frameWorkers.controller.js +96 -0
  176. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
  177. package/dist/server/src/api/controllers/remote.controller.d.ts +1 -0
  178. package/dist/server/src/api/controllers/remote.controller.js +16 -12
  179. package/dist/server/src/api/controllers/remote.controller.js.map +1 -1
  180. package/dist/server/src/api/controllers/server.controller.js +6 -2
  181. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  182. package/dist/server/src/api/controllers/updates.controller.d.ts +8 -0
  183. package/dist/server/src/api/controllers/updates.controller.js +40 -0
  184. package/dist/server/src/api/controllers/updates.controller.js.map +1 -0
  185. package/dist/server/src/api/controllers/workers.controller.js +8 -2
  186. package/dist/server/src/api/controllers/workers.controller.js.map +1 -1
  187. package/dist/server/src/api/database/constants.d.ts +0 -1
  188. package/dist/server/src/api/database/constants.js +0 -1
  189. package/dist/server/src/api/database/constants.js.map +1 -1
  190. package/dist/server/src/api/database/index.d.ts +2 -3
  191. package/dist/server/src/api/database/index.js +3 -6
  192. package/dist/server/src/api/database/index.js.map +1 -1
  193. package/dist/server/src/api/database/migrations/v2-1-10.js +33 -0
  194. package/dist/server/src/api/database/migrations/v2-1-10.js.map +1 -0
  195. package/dist/server/src/api/database/migrations/v2-1-11.js +31 -0
  196. package/dist/server/src/api/database/migrations/v2-1-11.js.map +1 -0
  197. package/dist/server/src/api/database/migrations/v2-1-12.js +25 -0
  198. package/dist/server/src/api/database/migrations/v2-1-12.js.map +1 -0
  199. package/dist/server/src/api/database/migrations/v2-1-13.d.ts +3 -0
  200. package/dist/server/src/api/database/migrations/v2-1-13.js +51 -0
  201. package/dist/server/src/api/database/migrations/v2-1-13.js.map +1 -0
  202. package/dist/server/src/api/database/migrations/v2-1-14.d.ts +3 -0
  203. package/dist/server/src/api/database/migrations/v2-1-14.js +87 -0
  204. package/dist/server/src/api/database/migrations/v2-1-14.js.map +1 -0
  205. package/dist/server/src/api/database/migrations/v2-1-6.js.map +1 -1
  206. package/dist/server/src/api/database/migrations/v2-1-9.d.ts +3 -0
  207. package/dist/server/src/api/database/migrations/v2-1-9.js +38 -0
  208. package/dist/server/src/api/database/migrations/v2-1-9.js.map +1 -0
  209. package/dist/server/src/api/database/record-schemas.d.ts +18 -13
  210. package/dist/server/src/api/database/record-schemas.js +3 -3
  211. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  212. package/dist/server/src/api/database/types.d.ts +3 -11
  213. package/dist/server/src/api/routes/frameWorkers.routes.js +22 -1
  214. package/dist/server/src/api/routes/frameWorkers.routes.js.map +1 -1
  215. package/dist/server/src/api/routes/index.js +3 -1
  216. package/dist/server/src/api/routes/index.js.map +1 -1
  217. package/dist/server/src/api/routes/updates.routes.d.ts +2 -0
  218. package/dist/server/src/api/routes/updates.routes.js +47 -0
  219. package/dist/server/src/api/routes/updates.routes.js.map +1 -0
  220. package/dist/server/src/api/routes/workers.routes.js +3 -2
  221. package/dist/server/src/api/routes/workers.routes.js.map +1 -1
  222. package/dist/server/src/api/schemas/cameras.schema.d.ts +228 -79
  223. package/dist/server/src/api/schemas/cameras.schema.js +58 -9
  224. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  225. package/dist/server/src/api/schemas/frameWorkers.schema.d.ts +6 -0
  226. package/dist/server/src/api/schemas/frameWorkers.schema.js +7 -0
  227. package/dist/server/src/api/schemas/frameWorkers.schema.js.map +1 -1
  228. package/dist/server/src/api/schemas/server.schema.d.ts +1 -0
  229. package/dist/server/src/api/schemas/server.schema.js +4 -0
  230. package/dist/server/src/api/schemas/server.schema.js.map +1 -1
  231. package/dist/server/src/api/schemas/users.schema.d.ts +119 -84
  232. package/dist/server/src/api/schemas/users.schema.js +3 -0
  233. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  234. package/dist/server/src/api/schemas/workers.schema.d.ts +3 -0
  235. package/dist/server/src/api/schemas/workers.schema.js +5 -0
  236. package/dist/server/src/api/schemas/workers.schema.js.map +1 -1
  237. package/dist/server/src/api/services/plugins.service.d.ts +4 -1
  238. package/dist/server/src/api/services/plugins.service.js +23 -4
  239. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  240. package/dist/server/src/api/services/server.service.d.ts +3 -1
  241. package/dist/server/src/api/services/server.service.js +6 -1
  242. package/dist/server/src/api/services/server.service.js.map +1 -1
  243. package/dist/server/src/api/services/updates.service.d.ts +108 -0
  244. package/dist/server/src/api/services/updates.service.js +476 -0
  245. package/dist/server/src/api/services/updates.service.js.map +1 -0
  246. package/dist/server/src/api/types/index.d.ts +6 -0
  247. package/dist/server/src/api/types/index.js.map +1 -1
  248. package/dist/server/src/api/websocket/index.js +2 -0
  249. package/dist/server/src/api/websocket/index.js.map +1 -1
  250. package/dist/server/src/api/websocket/nsp/metrics.d.ts +3 -1
  251. package/dist/server/src/api/websocket/nsp/metrics.js +90 -37
  252. package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
  253. package/dist/server/src/api/websocket/nsp/server.js +45 -9
  254. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  255. package/dist/server/src/api/websocket/types.d.ts +23 -17
  256. package/dist/server/src/camera/controller.js +1 -0
  257. package/dist/server/src/camera/controller.js.map +1 -1
  258. package/dist/server/src/camera/decoder/audio-loop.d.ts +0 -1
  259. package/dist/server/src/camera/decoder/audio-loop.js +38 -68
  260. package/dist/server/src/camera/decoder/audio-loop.js.map +1 -1
  261. package/dist/server/src/camera/decoder/child.d.ts +4 -1
  262. package/dist/server/src/camera/decoder/child.js +27 -0
  263. package/dist/server/src/camera/decoder/child.js.map +1 -1
  264. package/dist/server/src/camera/decoder/debug/detection-record.d.ts +6 -0
  265. package/dist/server/src/camera/decoder/debug/detection-record.js +21 -0
  266. package/dist/server/src/camera/decoder/debug/detection-record.js.map +1 -1
  267. package/dist/server/src/camera/decoder/detection-coordinator.d.ts +26 -3
  268. package/dist/server/src/camera/decoder/detection-coordinator.js +525 -207
  269. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  270. package/dist/server/src/camera/decoder/detection-pipeline.d.ts +4 -2
  271. package/dist/server/src/camera/decoder/detection-pipeline.js +17 -10
  272. package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
  273. package/dist/server/src/camera/decoder/detection-window.d.ts +17 -0
  274. package/dist/server/src/camera/decoder/detection-window.js +188 -0
  275. package/dist/server/src/camera/decoder/detection-window.js.map +1 -0
  276. package/dist/server/src/camera/decoder/event-manager.d.ts +1 -0
  277. package/dist/server/src/camera/decoder/event-manager.js +12 -0
  278. package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
  279. package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +3 -3
  280. package/dist/server/src/camera/decoder/event-thumbnailer.js +2 -2
  281. package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
  282. package/dist/server/src/camera/decoder/frame-scaler.d.ts +14 -1
  283. package/dist/server/src/camera/decoder/frame-scaler.js +63 -20
  284. package/dist/server/src/camera/decoder/frame-scaler.js.map +1 -1
  285. package/dist/server/src/camera/decoder/motion-localizer.d.ts +16 -0
  286. package/dist/server/src/camera/decoder/motion-localizer.js +49 -0
  287. package/dist/server/src/camera/decoder/motion-localizer.js.map +1 -0
  288. package/dist/server/src/camera/decoder/perf-tracker.d.ts +29 -8
  289. package/dist/server/src/camera/decoder/perf-tracker.js +76 -50
  290. package/dist/server/src/camera/decoder/perf-tracker.js.map +1 -1
  291. package/dist/server/src/camera/decoder/plugin-registry.d.ts +1 -0
  292. package/dist/server/src/camera/decoder/plugin-registry.js +8 -6
  293. package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -1
  294. package/dist/server/src/camera/decoder/secondary-stage.d.ts +4 -1
  295. package/dist/server/src/camera/decoder/secondary-stage.js +26 -3
  296. package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
  297. package/dist/server/src/camera/decoder/sources/analysis-source.d.ts +15 -1
  298. package/dist/server/src/camera/decoder/sources/audio-source.d.ts +7 -3
  299. package/dist/server/src/camera/decoder/sources/audio-source.js +89 -78
  300. package/dist/server/src/camera/decoder/sources/audio-source.js.map +1 -1
  301. package/dist/server/src/camera/decoder/sources/buffered-source.d.ts +27 -9
  302. package/dist/server/src/camera/decoder/sources/buffered-source.js +151 -65
  303. package/dist/server/src/camera/decoder/sources/buffered-source.js.map +1 -1
  304. package/dist/server/src/camera/decoder/sources/frame-handle.d.ts +13 -0
  305. package/dist/server/src/camera/decoder/sources/frame-handle.js +106 -0
  306. package/dist/server/src/camera/decoder/sources/frame-handle.js.map +1 -0
  307. package/dist/server/src/camera/decoder/sources/frame-source.d.ts +25 -26
  308. package/dist/server/src/camera/decoder/sources/frame-source.js +213 -268
  309. package/dist/server/src/camera/decoder/sources/frame-source.js.map +1 -1
  310. package/dist/server/src/camera/decoder/sources/reconnect-loop.d.ts +17 -0
  311. package/dist/server/src/camera/decoder/sources/reconnect-loop.js +59 -0
  312. package/dist/server/src/camera/decoder/sources/reconnect-loop.js.map +1 -0
  313. package/dist/server/src/camera/decoder/sources/snapshot-fetcher.d.ts +15 -0
  314. package/dist/server/src/camera/decoder/sources/snapshot-fetcher.js +58 -0
  315. package/dist/server/src/camera/decoder/sources/snapshot-fetcher.js.map +1 -0
  316. package/dist/server/src/camera/decoder/sources/video-input.d.ts +18 -0
  317. package/dist/server/src/camera/decoder/sources/video-input.js +55 -0
  318. package/dist/server/src/camera/decoder/sources/video-input.js.map +1 -0
  319. package/dist/server/src/camera/decoder/types.d.ts +74 -18
  320. package/dist/server/src/camera/decoder/types.js +2 -0
  321. package/dist/server/src/camera/decoder/types.js.map +1 -1
  322. package/dist/server/src/camera/decoder/worker.d.ts +5 -1
  323. package/dist/server/src/camera/decoder/worker.js +35 -5
  324. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  325. package/dist/server/src/camera/index.d.ts +2 -1
  326. package/dist/server/src/camera/index.js +3 -0
  327. package/dist/server/src/camera/index.js.map +1 -1
  328. package/dist/server/src/camera/streaming/fmp4-session.js +1 -1
  329. package/dist/server/src/camera/streaming/fmp4-session.js.map +1 -1
  330. package/dist/server/src/camera/streaming/rtp-session.js +1 -1
  331. package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
  332. package/dist/server/src/main.js +22 -2
  333. package/dist/server/src/main.js.map +1 -1
  334. package/dist/server/src/manager/types.d.ts +1 -0
  335. package/dist/server/src/manager/types.js +2 -0
  336. package/dist/server/src/manager/types.js.map +1 -1
  337. package/dist/server/src/mqtt/bridge.d.ts +0 -1
  338. package/dist/server/src/mqtt/bridge.js +0 -33
  339. package/dist/server/src/mqtt/bridge.js.map +1 -1
  340. package/dist/server/src/mqtt/ha-discovery.js +0 -1
  341. package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
  342. package/dist/server/src/plugins/index.js +0 -2
  343. package/dist/server/src/plugins/index.js.map +1 -1
  344. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +9 -0
  345. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  346. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +8 -0
  347. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -1
  348. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +14 -0
  349. package/dist/server/src/plugins/runtime/python/proxy/sensor.py +1 -0
  350. package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +13 -0
  351. package/dist/server/src/remote/services/cloudflare-managed.d.ts +2 -0
  352. package/dist/server/src/remote/services/cloudflare-managed.js +9 -2
  353. package/dist/server/src/remote/services/cloudflare-managed.js.map +1 -1
  354. package/dist/server/src/remote/services/cloudflare.d.ts +3 -0
  355. package/dist/server/src/remote/services/cloudflare.js +11 -0
  356. package/dist/server/src/remote/services/cloudflare.js.map +1 -1
  357. package/dist/server/src/remote/services/index.d.ts +2 -0
  358. package/dist/server/src/remote/services/index.js +60 -8
  359. package/dist/server/src/remote/services/index.js.map +1 -1
  360. package/dist/server/src/remote/services/tunnelConnections.d.ts +9 -0
  361. package/dist/server/src/remote/services/tunnelConnections.js +45 -0
  362. package/dist/server/src/remote/services/tunnelConnections.js.map +1 -0
  363. package/dist/server/src/remote/services/urlReadiness.d.ts +2 -0
  364. package/dist/server/src/remote/services/urlReadiness.js +7 -4
  365. package/dist/server/src/remote/services/urlReadiness.js.map +1 -1
  366. package/dist/server/src/remote/types.d.ts +1 -2
  367. package/dist/server/src/rpc/interfaces/frameworker.d.ts +4 -1
  368. package/dist/server/src/rpc/interfaces/sensor.d.ts +1 -0
  369. package/dist/server/src/rpc/leafConnection.d.ts +12 -0
  370. package/dist/server/src/rpc/leafConnection.js +60 -0
  371. package/dist/server/src/rpc/leafConnection.js.map +1 -0
  372. package/dist/server/src/rpc/server.d.ts +2 -0
  373. package/dist/server/src/rpc/server.js +7 -1
  374. package/dist/server/src/rpc/server.js.map +1 -1
  375. package/dist/server/src/sensors/registry.d.ts +2 -0
  376. package/dist/server/src/sensors/registry.js +16 -0
  377. package/dist/server/src/sensors/registry.js.map +1 -1
  378. package/dist/server/src/services/config/index.js +2 -0
  379. package/dist/server/src/services/config/index.js.map +1 -1
  380. package/dist/server/src/types.d.ts +10 -1
  381. package/dist/server/src/utils/ipc.d.ts +9 -0
  382. package/dist/server/src/utils/ipc.js +31 -5
  383. package/dist/server/src/utils/ipc.js.map +1 -1
  384. package/dist/server/src/utils/plugin-registry/index.js +1 -1
  385. package/dist/server/src/utils/plugin-registry/index.js.map +1 -1
  386. package/dist/server/src/utils/system-info.d.ts +9 -0
  387. package/dist/server/src/utils/system-info.js +48 -0
  388. package/dist/server/src/utils/system-info.js.map +1 -0
  389. package/dist/server/src/workers/agent.d.ts +3 -0
  390. package/dist/server/src/workers/agent.js +36 -8
  391. package/dist/server/src/workers/agent.js.map +1 -1
  392. package/dist/server/src/workers/capabilities/frame-decoding.d.ts +2 -2
  393. package/dist/server/src/workers/capabilities/frame-decoding.js +5 -5
  394. package/dist/server/src/workers/capabilities/frame-decoding.js.map +1 -1
  395. package/dist/server/src/workers/capabilities/handler.d.ts +2 -2
  396. package/dist/server/src/workers/capabilities/plugin-host.d.ts +2 -2
  397. package/dist/server/src/workers/capabilities/plugin-host.js +6 -6
  398. package/dist/server/src/workers/capabilities/plugin-host.js.map +1 -1
  399. package/dist/server/src/workers/manager.d.ts +9 -1
  400. package/dist/server/src/workers/manager.js +24 -0
  401. package/dist/server/src/workers/manager.js.map +1 -1
  402. package/dist/server/src/workers/types.d.ts +14 -0
  403. package/dist/server/src/workers/types.js.map +1 -1
  404. package/package.json +13 -12
  405. package/dist/interface/assets/Automation-DDNhcjDg.js +0 -3
  406. package/dist/interface/assets/AutomationImport-DAeFd-SZ.js +0 -2
  407. package/dist/interface/assets/Automations-BeGe7iQE.js +0 -2
  408. package/dist/interface/assets/Camera-C0sNg85L.js +0 -2
  409. package/dist/interface/assets/Camera-C5gF7yVN.css +0 -1
  410. package/dist/interface/assets/Camview-DzMmXQvW.js +0 -1
  411. package/dist/interface/assets/ConfigActionCameraControl-BMlRbdRM.js +0 -1
  412. package/dist/interface/assets/ConfigTriggerDetection-ijTkd_SS.js +0 -1
  413. package/dist/interface/assets/ConfigTriggerGeofence-Q7LQpVoM.js +0 -1
  414. package/dist/interface/assets/Console-Gu1eu82G.js +0 -1
  415. package/dist/interface/assets/CuiAutomationRunsDialog-CxcWpqrI.js +0 -1
  416. package/dist/interface/assets/CuiBottomSheet-BkmkKf1u.js +0 -1
  417. package/dist/interface/assets/CuiCameraPipCard-CuZZZ7Cv.js +0 -1
  418. package/dist/interface/assets/CuiCameraRecordings-BxEA_Vhd.js +0 -1
  419. package/dist/interface/assets/CuiCameraTable-67Itb7my.js +0 -1
  420. package/dist/interface/assets/CuiConsole-De9JpSLz.js +0 -5
  421. package/dist/interface/assets/CuiDataTable-P8bWN0ZK.js +0 -1
  422. package/dist/interface/assets/CuiLightControl-D5Z1AqWH.js +0 -1
  423. package/dist/interface/assets/CuiPluginCard-D3x9FPb6.js +0 -2
  424. package/dist/interface/assets/CuiPluginCategoryChip-CQ2FJafE.js +0 -1
  425. package/dist/interface/assets/CuiQRCode-CZnspFFw.js +0 -1
  426. package/dist/interface/assets/CuiRecordingsGrid-wEaU6-3c.js +0 -1
  427. package/dist/interface/assets/CuiSchema--yMBD996.css +0 -1
  428. package/dist/interface/assets/CuiSchema-DLV1lIiB.js +0 -1
  429. package/dist/interface/assets/Faces-BlPQek1-.js +0 -1
  430. package/dist/interface/assets/FirstSteps-C-DKv_P2.js +0 -1
  431. package/dist/interface/assets/Menu-DceReBlq.js +0 -1
  432. package/dist/interface/assets/Metrics-BstlZavQ.css +0 -1
  433. package/dist/interface/assets/Metrics-Cw_Z_e0C.js +0 -1
  434. package/dist/interface/assets/Plugin-BBVxbQeT.js +0 -1
  435. package/dist/interface/assets/PluginDetail-D2RncxpL.js +0 -2
  436. package/dist/interface/assets/PluginSearch-CBhloRm6.js +0 -1
  437. package/dist/interface/assets/PluginSearch-RGhSeM1T.js +0 -2
  438. package/dist/interface/assets/Plugins-COHwVV0A.js +0 -1
  439. package/dist/interface/assets/Recordings-H5qOm_rD.js +0 -1
  440. package/dist/interface/assets/Recordings-zdTzwv7C.css +0 -1
  441. package/dist/interface/assets/SensorEdit-C-H_3ap8.js +0 -1
  442. package/dist/interface/assets/Sensors-lPcOdHJN.js +0 -2
  443. package/dist/interface/assets/Settings-BUoXoFiH.js +0 -1
  444. package/dist/interface/assets/SettingsAccount-CudWgknL.js +0 -1
  445. package/dist/interface/assets/SettingsAccount-DUy_W02_.js +0 -1
  446. package/dist/interface/assets/SettingsAppearance-eZsdWWp3.js +0 -1
  447. package/dist/interface/assets/SettingsBackup-ibb5I5Jv.js +0 -1
  448. package/dist/interface/assets/SettingsMqtt-Ct42icAW.js +0 -1
  449. package/dist/interface/assets/SettingsNotifications-B4lyMlLR.js +0 -1
  450. package/dist/interface/assets/SettingsPermissions-Bsv293ri.js +0 -1
  451. package/dist/interface/assets/SettingsRemote-DYld6-1F.css +0 -1
  452. package/dist/interface/assets/SettingsRemote-Dq_BD0fk.js +0 -1
  453. package/dist/interface/assets/SettingsSystem-C5xROdA0.js +0 -2
  454. package/dist/interface/assets/SettingsUsers-Cjk6mevW.js +0 -1
  455. package/dist/interface/assets/Terminal-BIdBrL4g.js +0 -4
  456. package/dist/interface/assets/Workers-DVABUc39.js +0 -2
  457. package/dist/interface/assets/api-AVHJeggR.css +0 -2
  458. package/dist/interface/assets/api-CmdQlVDD.js +0 -2
  459. package/dist/interface/assets/cameras.schema-A_6JklLs.js +0 -1
  460. package/dist/interface/assets/cloudHandoff-D0ytFfHK.js +0 -1
  461. package/dist/interface/assets/deployed-code-update-xHE-blDN.js +0 -1
  462. package/dist/interface/assets/main-B1ryIyTr.css +0 -1
  463. package/dist/interface/assets/main-BdIdmDhs.js +0 -3
  464. package/dist/interface/assets/round-restart-alt-B_7HR24a.js +0 -1
  465. package/dist/interface/assets/round-restart-alt-CmrjVFat.css +0 -1
  466. package/dist/interface/assets/sensorIcons-BujySw0j.js +0 -1
  467. package/dist/interface/assets/types-R10eIequ.js +0 -1
  468. package/dist/interface/assets/types-p_uC0rfp.js +0 -1
  469. package/dist/interface/assets/useBackupRestore-DLieDBFC.js +0 -1
  470. package/dist/interface/assets/vendor-cameraui-Cf0XVNQ7.js +0 -2326
  471. package/dist/interface/assets/vendor-core-u4xNQ-aF.js +0 -1
  472. package/dist/server/src/api/database/migrations/v2-0-50.js +0 -45
  473. package/dist/server/src/api/database/migrations/v2-0-50.js.map +0 -1
  474. package/dist/server/src/api/database/migrations/v2-0-51.js +0 -43
  475. package/dist/server/src/api/database/migrations/v2-0-51.js.map +0 -1
  476. package/dist/server/src/api/database/migrations/v2-1-0.js +0 -72
  477. package/dist/server/src/api/database/migrations/v2-1-0.js.map +0 -1
  478. /package/dist/server/src/api/database/migrations/{v2-0-50.d.ts → v2-1-10.d.ts} +0 -0
  479. /package/dist/server/src/api/database/migrations/{v2-0-51.d.ts → v2-1-11.d.ts} +0 -0
  480. /package/dist/server/src/api/database/migrations/{v2-1-0.d.ts → v2-1-12.d.ts} +0 -0
@@ -6,6 +6,7 @@ import { satisfies } from 'semver';
6
6
  import { container } from 'tsyringe';
7
7
  import { ConfigService } from '../../services/config/index.js';
8
8
  import { getTerminalCols, InstallLogger } from '../utils/install-logger.js';
9
+ import { updatesService } from './updates.service.js';
9
10
  export class ServerService {
10
11
  dbs;
11
12
  io;
@@ -60,7 +61,7 @@ export class ServerService {
60
61
  });
61
62
  return info ?? this.info();
62
63
  }
63
- async install(version = 'latest') {
64
+ async install(version = 'latest', opts = {}) {
64
65
  const log = new InstallLogger((message) => this.io.of('/logs').emit('stdout/server', message), () => getTerminalCols('server'));
65
66
  log.header(`Update · ${APP_SERVER_NAME}@${version}`, { user: userInfo().username });
66
67
  if (this.installInProgress) {
@@ -73,6 +74,8 @@ export class ServerService {
73
74
  log.warn(`You may experience issues while running on Node.js ${process.version}.`);
74
75
  log.blank();
75
76
  }
77
+ const source = opts.internal ? 'run' : 'manual';
78
+ updatesService().notifyServerInstall('start', { version, source });
76
79
  try {
77
80
  log.block('Updating server');
78
81
  const updateStream = await this.cameraui.requestUpdate(version);
@@ -81,9 +84,11 @@ export class ServerService {
81
84
  }
82
85
  log.flush();
83
86
  log.success(`${APP_SERVER_NAME}@${version} updated — restart to apply`);
87
+ updatesService().notifyServerInstall('success', { version, source });
84
88
  }
85
89
  catch (error) {
86
90
  log.error(`Update of ${APP_SERVER_NAME}@${version} failed: ${error.message}`);
91
+ updatesService().notifyServerInstall('error', { version, error: error.message, source });
87
92
  throw error;
88
93
  }
89
94
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"server.service.js","sourceRoot":"","sources":["../../../../../src/api/services/server.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.service.js","sourceRoot":"","sources":["../../../../../src/api/services/server.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ export type UpdatesItemKind = 'server' | 'plugin' | 'worker';
2
+ export type UpdatesItemStatus = 'pending' | 'updating' | 'restarting' | 'success' | 'error';
3
+ export type UpdatesBlockedReason = 'desktop' | 'legacy';
4
+ export interface UpdatesActivityItem {
5
+ id: string;
6
+ kind: UpdatesItemKind;
7
+ name: string;
8
+ status: UpdatesItemStatus;
9
+ source: 'run' | 'manual';
10
+ installedVersion?: string;
11
+ targetVersion?: string;
12
+ error?: string;
13
+ }
14
+ export interface UpdatesRunState {
15
+ id: string;
16
+ active: boolean;
17
+ cancelRequested: boolean;
18
+ startedAt: number;
19
+ finishedAt?: number;
20
+ items: UpdatesActivityItem[];
21
+ }
22
+ export interface UpdatesPendingWorker {
23
+ agentId: string;
24
+ name: string;
25
+ installedVersion?: string;
26
+ updateAvailable: boolean;
27
+ updatable: boolean;
28
+ blockedReason?: UpdatesBlockedReason;
29
+ }
30
+ export interface UpdatesPendingPlugin {
31
+ pluginName: string;
32
+ displayName: string;
33
+ installedVersion?: string;
34
+ latestVersion?: string;
35
+ updateAvailable: boolean;
36
+ }
37
+ export interface UpdatesPending {
38
+ server: {
39
+ installedVersion: string;
40
+ latestVersion?: string;
41
+ updateAvailable: boolean;
42
+ blockedReason?: UpdatesBlockedReason;
43
+ };
44
+ plugins: UpdatesPendingPlugin[];
45
+ workers: UpdatesPendingWorker[];
46
+ targetServerVersion: string;
47
+ }
48
+ export interface UpdatesStatus {
49
+ run: UpdatesRunState | null;
50
+ lastRun: UpdatesRunState | null;
51
+ manual: UpdatesActivityItem[];
52
+ pending: UpdatesPending;
53
+ }
54
+ export declare class UpdatesLockedError extends Error {
55
+ readonly statusCode = 409;
56
+ }
57
+ export declare function updatesService(): UpdatesService;
58
+ export declare class UpdatesService {
59
+ private logger;
60
+ private configService;
61
+ private run;
62
+ private lastRun;
63
+ private manual;
64
+ private manualCleanupTimers;
65
+ private serverInstallActive;
66
+ private workerPollTimer;
67
+ private lastCheckAt;
68
+ constructor();
69
+ init(): Promise<void>;
70
+ isRunActive(): boolean;
71
+ assertManualAllowed(kind: UpdatesItemKind): void;
72
+ notifyPluginManage(pluginName: string, phase: 'start' | 'success' | 'error', detail?: {
73
+ version?: string;
74
+ error?: string;
75
+ source?: 'run' | 'manual';
76
+ }): void;
77
+ notifyServerInstall(phase: 'start' | 'success' | 'error', detail?: {
78
+ version?: string;
79
+ error?: string;
80
+ source?: 'run' | 'manual';
81
+ }): void;
82
+ notifyWorkerUpdate(agentId: string, name: string, targetVersion?: string): void;
83
+ status(): UpdatesStatus;
84
+ checkNow(): Promise<void>;
85
+ pending(): UpdatesPending;
86
+ runAll(): Promise<UpdatesRunState>;
87
+ cancelRun(): void;
88
+ private executeRun;
89
+ private runWorkerItem;
90
+ private runPluginItem;
91
+ private runServerItem;
92
+ private finishRun;
93
+ private notifyActivity;
94
+ private runItem;
95
+ private anyManualActive;
96
+ private anyWorkerUpdating;
97
+ private ensureWorkerPoll;
98
+ private emitStatus;
99
+ private refreshUpdateStates;
100
+ private stampPath;
101
+ private writeStamp;
102
+ private clearStamp;
103
+ private resolveStamp;
104
+ private socketService;
105
+ private serverNamespace;
106
+ private workerManager;
107
+ private workerBehindTarget;
108
+ }
@@ -0,0 +1,476 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { join } from 'node:path';
3
+ import { APP_SERVER_NAME, IS_ELECTRON, sleep } from '@camera.ui/common/utils';
4
+ import { pathExists, readJson, remove, writeJson } from 'fs-extra/esm';
5
+ import { lt, valid } from 'semver';
6
+ import { container } from 'tsyringe';
7
+ import { ConfigService } from '../../services/config/index.js';
8
+ import { appUpdateState, requestAppUpdateCheck } from '../../utils/ipc.js';
9
+ import { PluginsService } from './plugins.service.js';
10
+ import { ServerService } from './server.service.js';
11
+ export class UpdatesLockedError extends Error {
12
+ statusCode = 409;
13
+ }
14
+ const WORKER_UPDATE_TIMEOUT_MS = 10 * 60 * 1000;
15
+ const WORKER_POLL_MS = 2_000;
16
+ const CHECK_TTL_MS = 60_000;
17
+ const MANUAL_ITEM_LINGER_MS = 60_000;
18
+ const STAMP_FILE = 'updates-run.json';
19
+ let instance = null;
20
+ export function updatesService() {
21
+ instance ??= new UpdatesService();
22
+ return instance;
23
+ }
24
+ export class UpdatesService {
25
+ logger;
26
+ configService;
27
+ run = null;
28
+ lastRun = null;
29
+ manual = new Map();
30
+ manualCleanupTimers = new Map();
31
+ serverInstallActive = false;
32
+ workerPollTimer;
33
+ lastCheckAt = 0;
34
+ constructor() {
35
+ this.logger = container.resolve('logger');
36
+ this.configService = container.resolve('configService');
37
+ }
38
+ async init() {
39
+ await this.resolveStamp();
40
+ this.emitStatus();
41
+ }
42
+ isRunActive() {
43
+ return this.run?.active === true;
44
+ }
45
+ assertManualAllowed(kind) {
46
+ if (this.isRunActive()) {
47
+ throw new UpdatesLockedError('An update run is in progress. Wait for it to finish.');
48
+ }
49
+ if (kind === 'server') {
50
+ const activity = [...this.manual.values()].some((item) => item.status === 'updating' || item.status === 'restarting');
51
+ if (activity || this.anyWorkerUpdating()) {
52
+ throw new UpdatesLockedError('The server can only update while no other update is running.');
53
+ }
54
+ return;
55
+ }
56
+ if (this.serverInstallActive) {
57
+ throw new UpdatesLockedError('A server update is in progress. Wait for it to finish.');
58
+ }
59
+ }
60
+ notifyPluginManage(pluginName, phase, detail) {
61
+ this.notifyActivity('plugin', `plugin:${pluginName}`, pluginName, phase, detail);
62
+ }
63
+ notifyServerInstall(phase, detail) {
64
+ this.serverInstallActive = phase === 'start';
65
+ this.notifyActivity('server', 'server', APP_SERVER_NAME, phase === 'success' ? 'restarting' : phase, detail);
66
+ if (phase === 'success' && detail?.source !== 'run' && !this.runItem('server')) {
67
+ const item = this.manual.get('server');
68
+ this.writeStamp({
69
+ previousVersion: ConfigService.VERSION,
70
+ expectedVersion: detail?.version,
71
+ items: item ? [item] : [],
72
+ startedAt: Date.now(),
73
+ });
74
+ }
75
+ }
76
+ notifyWorkerUpdate(agentId, name, targetVersion) {
77
+ this.notifyActivity('worker', `worker:${agentId}`, name, 'start', { version: targetVersion });
78
+ this.ensureWorkerPoll();
79
+ }
80
+ status() {
81
+ return {
82
+ run: this.run,
83
+ lastRun: this.lastRun,
84
+ manual: [...this.manual.values()],
85
+ pending: this.pending(),
86
+ };
87
+ }
88
+ async checkNow() {
89
+ if (Date.now() - this.lastCheckAt < CHECK_TTL_MS)
90
+ return;
91
+ this.lastCheckAt = Date.now();
92
+ const nsp = this.serverNamespace();
93
+ if (IS_ELECTRON) {
94
+ requestAppUpdateCheck();
95
+ await nsp?.checkPlugins();
96
+ await sleep(1500);
97
+ }
98
+ else {
99
+ await Promise.all([nsp?.checkServer(), nsp?.checkPlugins()]);
100
+ }
101
+ nsp?.refreshWorkerUpdateAvailable();
102
+ }
103
+ pending() {
104
+ const pending = {
105
+ server: { installedVersion: ConfigService.VERSION, updateAvailable: false },
106
+ plugins: [],
107
+ workers: [],
108
+ targetServerVersion: ConfigService.RUNNING_VERSION,
109
+ };
110
+ const serverNsp = this.serverNamespace();
111
+ const updates = serverNsp?.getUpdates();
112
+ if (IS_ELECTRON) {
113
+ const app = appUpdateState();
114
+ pending.server = {
115
+ installedVersion: app?.appVersion ?? ConfigService.VERSION,
116
+ latestVersion: app?.version,
117
+ updateAvailable: Boolean(app),
118
+ blockedReason: app && !app.remoteInstall ? 'desktop' : undefined,
119
+ };
120
+ }
121
+ else if (updates?.server && (updates.server.updateAvailable || updates.server.betaUpdateAvailable)) {
122
+ pending.server = { installedVersion: ConfigService.VERSION, latestVersion: updates.server.latestVersion, updateAvailable: true };
123
+ if (updates.server.latestVersion) {
124
+ pending.targetServerVersion = updates.server.latestVersion;
125
+ }
126
+ }
127
+ const pluginUpdates = new Map((updates?.plugins ?? []).filter((entry) => entry.pluginName).map((entry) => [entry.pluginName, entry]));
128
+ for (const plugin of new PluginsService().listPlugins()) {
129
+ const update = pluginUpdates.get(plugin.info.pluginName);
130
+ pending.plugins.push({
131
+ pluginName: plugin.info.pluginName,
132
+ displayName: plugin.info.displayName,
133
+ installedVersion: plugin.info.installedVersion,
134
+ latestVersion: update?.latestVersion ?? plugin.info.installedVersion,
135
+ updateAvailable: update !== undefined,
136
+ });
137
+ }
138
+ for (const worker of this.workerManager()?.getWorkers() ?? []) {
139
+ if (!worker.online)
140
+ continue;
141
+ if (!this.workerBehindTarget(worker.version, pending.targetServerVersion, worker.versionMismatch === true)) {
142
+ pending.workers.push({ agentId: worker.agentId, name: worker.name, installedVersion: worker.version, updateAvailable: false, updatable: true });
143
+ }
144
+ else if (worker.update?.updatable) {
145
+ pending.workers.push({ agentId: worker.agentId, name: worker.name, installedVersion: worker.version, updateAvailable: true, updatable: true });
146
+ }
147
+ else {
148
+ pending.workers.push({
149
+ agentId: worker.agentId,
150
+ name: worker.name,
151
+ installedVersion: worker.version,
152
+ updateAvailable: true,
153
+ updatable: false,
154
+ blockedReason: worker.update ? 'desktop' : 'legacy',
155
+ });
156
+ }
157
+ }
158
+ return pending;
159
+ }
160
+ async runAll() {
161
+ if (this.isRunActive()) {
162
+ throw new UpdatesLockedError('An update run is already in progress.');
163
+ }
164
+ if (this.serverInstallActive || this.anyManualActive() || this.anyWorkerUpdating()) {
165
+ throw new UpdatesLockedError('Manual updates are running. Wait for them to finish.');
166
+ }
167
+ const pending = this.pending();
168
+ const serverPending = pending.server.updateAvailable && !pending.server.blockedReason;
169
+ const items = [
170
+ ...pending.workers
171
+ .filter((worker) => worker.updateAvailable && worker.updatable)
172
+ .map((worker) => ({
173
+ id: `worker:${worker.agentId}`,
174
+ kind: 'worker',
175
+ name: worker.name,
176
+ status: 'pending',
177
+ source: 'run',
178
+ installedVersion: worker.installedVersion,
179
+ targetVersion: pending.targetServerVersion,
180
+ })),
181
+ ...pending.plugins
182
+ .filter((plugin) => plugin.updateAvailable)
183
+ .map((plugin) => ({
184
+ id: `plugin:${plugin.pluginName}`,
185
+ kind: 'plugin',
186
+ name: plugin.pluginName,
187
+ status: 'pending',
188
+ source: 'run',
189
+ installedVersion: plugin.installedVersion,
190
+ targetVersion: plugin.latestVersion,
191
+ })),
192
+ ...(serverPending
193
+ ? [
194
+ {
195
+ id: 'server',
196
+ kind: 'server',
197
+ name: APP_SERVER_NAME,
198
+ status: 'pending',
199
+ source: 'run',
200
+ installedVersion: pending.server.installedVersion,
201
+ targetVersion: pending.server.latestVersion,
202
+ },
203
+ ]
204
+ : []),
205
+ ];
206
+ if (items.length === 0) {
207
+ throw new Error('Nothing to update.');
208
+ }
209
+ this.run = {
210
+ id: randomUUID(),
211
+ active: true,
212
+ cancelRequested: false,
213
+ startedAt: Date.now(),
214
+ items,
215
+ };
216
+ this.logger.log(`Update run started: ${items.length} target(s)${serverPending ? ', server last' : ''}`);
217
+ this.emitStatus();
218
+ this.executeRun(serverPending, pending.targetServerVersion);
219
+ return this.run;
220
+ }
221
+ cancelRun() {
222
+ if (!this.isRunActive() || !this.run)
223
+ return;
224
+ this.run.cancelRequested = true;
225
+ this.emitStatus();
226
+ }
227
+ async executeRun(serverPending, targetServerVersion) {
228
+ const run = this.run;
229
+ for (const item of run.items) {
230
+ if (run.cancelRequested)
231
+ break;
232
+ try {
233
+ if (item.kind === 'worker') {
234
+ await this.runWorkerItem(item, targetServerVersion);
235
+ }
236
+ else if (item.kind === 'plugin') {
237
+ await this.runPluginItem(item, serverPending);
238
+ }
239
+ else {
240
+ await this.runServerItem(item, run);
241
+ return;
242
+ }
243
+ }
244
+ catch (error) {
245
+ item.status = 'error';
246
+ item.error = error?.message ?? String(error);
247
+ this.logger.warn(`Update run: ${item.name} failed — ${item.error}`);
248
+ }
249
+ this.emitStatus();
250
+ }
251
+ this.finishRun();
252
+ await this.refreshUpdateStates();
253
+ }
254
+ async runWorkerItem(item, targetVersion) {
255
+ const manager = this.workerManager();
256
+ if (!manager)
257
+ throw new Error('Worker manager not available');
258
+ const agentId = item.id.slice('worker:'.length);
259
+ item.status = 'updating';
260
+ this.emitStatus();
261
+ await manager.updateWorker(agentId, targetVersion);
262
+ const deadline = Date.now() + WORKER_UPDATE_TIMEOUT_MS;
263
+ for (;;) {
264
+ await sleep(WORKER_POLL_MS);
265
+ const worker = manager.getWorkers().find((entry) => entry.agentId === agentId);
266
+ if (worker?.update && !worker.update.updating) {
267
+ if (worker.update.error)
268
+ throw new Error(worker.update.error);
269
+ item.status = 'success';
270
+ item.installedVersion = worker.version;
271
+ return;
272
+ }
273
+ if (Date.now() > deadline) {
274
+ throw new Error('Timed out waiting for the worker to finish updating');
275
+ }
276
+ }
277
+ }
278
+ async runPluginItem(item, serverPending) {
279
+ item.status = 'updating';
280
+ this.emitStatus();
281
+ // with a server update ahead the restart brings the plugins up anyway
282
+ await new PluginsService().manage(item.name, 'update', item.targetVersion, undefined, { internal: true, restart: !serverPending });
283
+ item.status = 'success';
284
+ item.installedVersion = item.targetVersion;
285
+ }
286
+ async runServerItem(item, run) {
287
+ item.status = 'updating';
288
+ this.emitStatus();
289
+ await this.writeStamp({
290
+ runId: run.id,
291
+ previousVersion: ConfigService.VERSION,
292
+ expectedVersion: item.targetVersion,
293
+ items: run.items,
294
+ startedAt: run.startedAt,
295
+ });
296
+ try {
297
+ await new ServerService().install(item.targetVersion ?? 'latest', { internal: true });
298
+ }
299
+ catch (error) {
300
+ await this.clearStamp();
301
+ item.status = 'error';
302
+ item.error = error?.message ?? String(error);
303
+ this.finishRun();
304
+ await this.refreshUpdateStates();
305
+ return;
306
+ }
307
+ item.status = 'restarting';
308
+ this.finishRun();
309
+ this.logger.log('Update run: server updated, restarting to apply');
310
+ setTimeout(() => process.kill(process.pid, 'SIGTERM'), 1_000);
311
+ }
312
+ finishRun() {
313
+ if (!this.run)
314
+ return;
315
+ this.run.active = false;
316
+ this.run.finishedAt = Date.now();
317
+ this.lastRun = this.run;
318
+ this.emitStatus();
319
+ }
320
+ notifyActivity(kind, id, name, phase, detail) {
321
+ // run items are driven by the orchestrator itself
322
+ if (detail?.source === 'run' || this.runItem(id)) {
323
+ return;
324
+ }
325
+ const timer = this.manualCleanupTimers.get(id);
326
+ if (timer) {
327
+ clearTimeout(timer);
328
+ this.manualCleanupTimers.delete(id);
329
+ }
330
+ if (phase === 'start') {
331
+ this.manual.set(id, { id, kind, name, status: 'updating', source: 'manual', targetVersion: detail?.version });
332
+ }
333
+ else {
334
+ const item = this.manual.get(id) ?? { id, kind, name, status: 'updating', source: 'manual' };
335
+ item.status = phase === 'restarting' ? 'restarting' : phase;
336
+ item.error = detail?.error;
337
+ this.manual.set(id, item);
338
+ this.manualCleanupTimers.set(id, setTimeout(() => {
339
+ this.manual.delete(id);
340
+ this.manualCleanupTimers.delete(id);
341
+ this.emitStatus();
342
+ }, MANUAL_ITEM_LINGER_MS));
343
+ }
344
+ this.emitStatus();
345
+ }
346
+ runItem(id) {
347
+ if (!this.run?.active)
348
+ return undefined;
349
+ return this.run.items.find((item) => item.id === id);
350
+ }
351
+ anyManualActive() {
352
+ return [...this.manual.values()].some((item) => item.status === 'updating' || item.status === 'restarting');
353
+ }
354
+ anyWorkerUpdating() {
355
+ return (this.workerManager()?.getWorkers() ?? []).some((worker) => worker.update?.updating === true);
356
+ }
357
+ ensureWorkerPoll() {
358
+ if (this.workerPollTimer)
359
+ return;
360
+ this.workerPollTimer = setInterval(() => {
361
+ const manager = this.workerManager();
362
+ const workers = manager?.getWorkers() ?? [];
363
+ let anyUpdating = false;
364
+ for (const [id, item] of this.manual) {
365
+ if (item.kind !== 'worker' || item.status !== 'updating')
366
+ continue;
367
+ const agentId = id.slice('worker:'.length);
368
+ const worker = workers.find((entry) => entry.agentId === agentId);
369
+ if (worker?.update?.updating) {
370
+ anyUpdating = true;
371
+ continue;
372
+ }
373
+ this.notifyActivity('worker', id, item.name, worker?.update?.error ? 'error' : 'success', { error: worker?.update?.error });
374
+ }
375
+ if (!anyUpdating) {
376
+ clearInterval(this.workerPollTimer);
377
+ this.workerPollTimer = undefined;
378
+ this.refreshUpdateStates();
379
+ }
380
+ }, WORKER_POLL_MS);
381
+ }
382
+ emitStatus() {
383
+ const socketService = this.socketService();
384
+ if (!socketService)
385
+ return;
386
+ const items = [
387
+ ...(this.run?.active ? this.run.items : (this.lastRun?.items ?? [])).map((item) => ({ kind: item.kind, name: item.name, status: item.status })),
388
+ ...[...this.manual.values()].map((item) => ({ kind: item.kind, name: item.name, status: item.status })),
389
+ ];
390
+ const updating = items.some((item) => item.status === 'updating' || item.status === 'restarting');
391
+ socketService.io.of('/camera.ui').emit('updates-status', {
392
+ updating,
393
+ runActive: this.run?.active === true,
394
+ items,
395
+ });
396
+ }
397
+ async refreshUpdateStates() {
398
+ const serverNsp = this.serverNamespace();
399
+ if (!serverNsp)
400
+ return;
401
+ try {
402
+ await serverNsp.checkPlugins();
403
+ await serverNsp.checkServer();
404
+ serverNsp.refreshWorkerUpdateAvailable();
405
+ }
406
+ catch {
407
+ // best-effort
408
+ }
409
+ }
410
+ stampPath() {
411
+ return join(this.configService.STORAGE_PATH, STAMP_FILE);
412
+ }
413
+ async writeStamp(stamp) {
414
+ await writeJson(this.stampPath(), stamp);
415
+ }
416
+ async clearStamp() {
417
+ await remove(this.stampPath()).catch(() => { });
418
+ }
419
+ async resolveStamp() {
420
+ try {
421
+ if (!(await pathExists(this.stampPath())))
422
+ return;
423
+ const stamp = (await readJson(this.stampPath()));
424
+ await this.clearStamp();
425
+ const updated = ConfigService.VERSION !== stamp.previousVersion;
426
+ const serverItem = stamp.items.find((item) => item.kind === 'server');
427
+ if (serverItem) {
428
+ serverItem.status = updated ? 'success' : 'error';
429
+ serverItem.error = updated ? undefined : 'The server restarted without the update applied';
430
+ serverItem.installedVersion = ConfigService.VERSION;
431
+ }
432
+ this.lastRun = {
433
+ id: stamp.runId ?? randomUUID(),
434
+ active: false,
435
+ cancelRequested: false,
436
+ startedAt: stamp.startedAt,
437
+ finishedAt: Date.now(),
438
+ items: stamp.items,
439
+ };
440
+ if (updated) {
441
+ this.logger.log(`Update run finished: server now on ${ConfigService.VERSION}`);
442
+ }
443
+ else {
444
+ this.logger.warn(`Update run: server still on ${ConfigService.VERSION} after the restart`);
445
+ }
446
+ }
447
+ catch {
448
+ // a corrupt stamp only loses the report
449
+ }
450
+ }
451
+ socketService() {
452
+ try {
453
+ return container.resolve('socketService');
454
+ }
455
+ catch {
456
+ return undefined;
457
+ }
458
+ }
459
+ serverNamespace() {
460
+ return this.socketService()?.namespaces.get('/server');
461
+ }
462
+ workerManager() {
463
+ try {
464
+ return container.resolve('workerManager');
465
+ }
466
+ catch {
467
+ return undefined;
468
+ }
469
+ }
470
+ workerBehindTarget(workerVersion, targetVersion, versionMismatch) {
471
+ if (!workerVersion || !valid(workerVersion) || !valid(targetVersion))
472
+ return versionMismatch;
473
+ return lt(workerVersion, targetVersion);
474
+ }
475
+ }
476
+ //# sourceMappingURL=updates.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updates.service.js","sourceRoot":"","sources":["../../../../../src/api/services/updates.service.ts"],"names":[],"mappings":"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"}