@camera.ui/server 0.0.111 → 0.0.113

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 (341) hide show
  1. package/dist/interface/assets/{404-CGV2uv4y.js → 404-CZtDF9in.js} +1 -1
  2. package/dist/interface/assets/{About-Cc2eFlW5.js → About-BzuuHdW1.js} +1 -1
  3. package/dist/interface/assets/{Adminpanel-EjUhiapF.js → Adminpanel-uj7eTmlN.js} +1 -1
  4. package/dist/interface/assets/Automation-D0ps_z9e.js +2 -0
  5. package/dist/interface/assets/AutomationImport-CR4Vsxkb.js +2 -0
  6. package/dist/interface/assets/AutomationStore-BcMX7WbG.js +2 -0
  7. package/dist/interface/assets/AutomationStore-Q25Okhz8.css +1 -0
  8. package/dist/interface/assets/AutomationStoreDetail--egqUOqn.css +1 -0
  9. package/dist/interface/assets/AutomationStoreDetail-D6Ugj8ba.js +2 -0
  10. package/dist/interface/assets/Automations-DBACrYHy.js +2 -0
  11. package/dist/interface/assets/{Camera-C3Il4X2T.js → Camera-Cf4QZbsx.js} +2 -2
  12. package/dist/interface/assets/{CameraConsole-70m5hucZ.js → CameraConsole-uD4aWou8.js} +1 -1
  13. package/dist/interface/assets/{Cameras-BJUWRm26.js → Cameras-DbBU5mou.js} +2 -2
  14. package/dist/interface/assets/{Camview-Gxca3bvT.css → Camview-CDM4Q_tc.css} +1 -1
  15. package/dist/interface/assets/Camview-DD9jLT7-.js +1 -0
  16. package/dist/interface/assets/Config-B9jI0lTQ.js +2 -0
  17. package/dist/interface/assets/{ConfigActionCameraControl-DBRh1R9m.js → ConfigActionCameraControl-D4hJLWmj.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionNotification-MJAViQFR.js → ConfigActionNotification-B5cCmBXr.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionPlugin-C2gSPDim.js → ConfigActionPlugin-B7YAbFlf.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionSensor-Dv7Hgx92.js → ConfigActionSensor-D_Dt1qtt.js} +1 -1
  21. package/dist/interface/assets/{ConfigActionSnapshot-CB6IQ_jP.js → ConfigActionSnapshot-ClyCQuB3.js} +1 -1
  22. package/dist/interface/assets/{ConfigConditionIfElse-Nd0_qDVA.js → ConfigConditionIfElse-Bhd2FYyz.js} +1 -1
  23. package/dist/interface/assets/{ConfigConditionSensorState-CHYw1D90.js → ConfigConditionSensorState-x0M0kHwL.js} +1 -1
  24. package/dist/interface/assets/{ConfigConditionSwitch-DsJEOPx0.js → ConfigConditionSwitch-CC0w-Hvy.js} +1 -1
  25. package/dist/interface/assets/{ConfigTriggerDetection-C-e6Z1m9.js → ConfigTriggerDetection-DWjlecON.js} +1 -1
  26. package/dist/interface/assets/ConfigTriggerGeofence-CTqptMUN.js +1 -0
  27. package/dist/interface/assets/{ConfigTriggerSensor-C9DsLW_Z.js → ConfigTriggerSensor-DuCtavZo.js} +1 -1
  28. package/dist/interface/assets/{ConfigTriggerSystem-CdOgSvDy.js → ConfigTriggerSystem-D1oGAhLn.js} +1 -1
  29. package/dist/interface/assets/{Console-bCie-JmB.js → Console-DrDqDUtO.js} +1 -1
  30. package/dist/interface/assets/{CuiAvatar-Bbdxpgvs.js → CuiAvatar-of_eVQsv.js} +1 -1
  31. package/dist/interface/assets/{CuiBottomSheet-2SNSjqOZ.js → CuiBottomSheet-B7aQ7GCw.js} +1 -1
  32. package/dist/interface/assets/CuiBottomSheet-DKUg_g5x.js +1 -0
  33. package/dist/interface/assets/CuiCameraCard-IyJNZMGs.js +1 -0
  34. package/dist/interface/assets/{CuiCameraPipCard-BMxMzolT.js → CuiCameraPipCard-KUBxGPoU.js} +1 -1
  35. package/dist/interface/assets/{CuiCameraRecordings-DLjYt8vJ.js → CuiCameraRecordings-iWAFGo8e.js} +1 -1
  36. package/dist/interface/assets/{CuiCameraShares-CLN2wuHG.js → CuiCameraShares-BCMYN11A.js} +1 -1
  37. package/dist/interface/assets/{CuiCameraSnapshot-C7wIpD9K.js → CuiCameraSnapshot-DTtvEMy1.js} +1 -1
  38. package/dist/interface/assets/{CuiCameraTable-CCpYHBTn.js → CuiCameraTable-B7g53tPM.js} +1 -1
  39. package/dist/interface/assets/{CuiImage-CoVi1BKR.js → CuiImage-B97QDAl7.js} +1 -1
  40. package/dist/interface/assets/{CuiMarkdownContent-YieurDkL.js → CuiMarkdownContent-DaJ8HzaP.js} +1 -1
  41. package/dist/interface/assets/CuiMarkdownContent-qIS8eQHX.js +1 -0
  42. package/dist/interface/assets/{CuiMenu-vSJpyg_1.js → CuiMenu-Ds6GufVn.js} +1 -1
  43. package/dist/interface/assets/{CuiPluginCard-CwGKyEU6.js → CuiPluginCard-D1SylQbM.js} +2 -2
  44. package/dist/interface/assets/CuiPluginCategoryChip-CdGrTCxH.css +1 -0
  45. package/dist/interface/assets/CuiPluginCategoryChip-rfdhCEi-.js +1 -0
  46. package/dist/interface/assets/{CuiPluginOAuthButton-CxNqrBe7.js → CuiPluginOAuthButton-X8ZGFPwW.js} +2 -2
  47. package/dist/interface/assets/CuiPluginTrustBadge-QHTLaN1n.css +1 -0
  48. package/dist/interface/assets/CuiPluginTrustBadge-YhfqGTyR.js +1 -0
  49. package/dist/interface/assets/{CuiQRCode-CP6aDzF5.js → CuiQRCode-D_31ri5b.js} +1 -1
  50. package/dist/interface/assets/{CuiRecordingsGrid-BNyITEKD.js → CuiRecordingsGrid-CzMzhUXb.js} +1 -1
  51. package/dist/interface/assets/{CuiSchema-Bdy2raxw.js → CuiSchema-CfqOJmDH.js} +1 -1
  52. package/dist/interface/assets/{Faces-DufdNYrc.js → Faces-IVmqcGuF.js} +1 -1
  53. package/dist/interface/assets/FirstSteps-Boec1bzd.js +1 -0
  54. package/dist/interface/assets/{Instances-CxgKUsJh.js → Instances-kmkRiBrV.js} +1 -1
  55. package/dist/interface/assets/{Logs-CJcq3xd6.js → Logs-DzR8mmLu.js} +2 -2
  56. package/dist/interface/assets/{Menu-BlYf1LF3.js → Menu-Cl-biyd7.js} +1 -1
  57. package/dist/interface/assets/{OAuthDeviceFlow-k6_zfcw_.js → OAuthDeviceFlow-Cp9uZWm1.js} +1 -1
  58. package/dist/interface/assets/Plugin-CeLrucXT.js +1 -0
  59. package/dist/interface/assets/Plugin-Yv0ZmTNZ.css +1 -0
  60. package/dist/interface/assets/{PluginConsole-CQebF4NZ.js → PluginConsole-BdbmROpF.js} +1 -1
  61. package/dist/interface/assets/PluginDetail-DKywYzmS.js +2 -0
  62. package/dist/interface/assets/PluginDetail-DbYxVe3g.css +1 -0
  63. package/dist/interface/assets/{PluginSchema-CcWTcoz_.js → PluginSchema-CWcq67pj.js} +1 -1
  64. package/dist/interface/assets/PluginSearch-BC1L0-VN.js +1 -0
  65. package/dist/interface/assets/PluginSearch-DCuLwE3v.js +2 -0
  66. package/dist/interface/assets/PluginSearch-XjGr5qdW.css +1 -0
  67. package/dist/interface/assets/Plugins-DMLQY_6J.js +1 -0
  68. package/dist/interface/assets/{Recordings-BgqhrYcF.js → Recordings--XaVJZJi.js} +1 -1
  69. package/dist/interface/assets/{Settings-BVa4xU_p.js → Settings-BljKDhYY.js} +1 -1
  70. package/dist/interface/assets/SettingsAccount-DFMOh1ci.js +1 -0
  71. package/dist/interface/assets/{SettingsAccount-UKbQLW6n.js → SettingsAccount-DKHO4mDj.js} +1 -1
  72. package/dist/interface/assets/SettingsAppearance-DzG2tlwK.js +1 -0
  73. package/dist/interface/assets/{SettingsAppearance-e45pjRF6.js → SettingsAppearance-V5aeQ9c8.js} +1 -1
  74. package/dist/interface/assets/{SettingsBackup-t2irnG2Z.js → SettingsBackup-CfOHDar8.js} +1 -1
  75. package/dist/interface/assets/{SettingsNotifications-te4LKEdZ.js → SettingsNotifications-BZ1IXj0a.js} +1 -1
  76. package/dist/interface/assets/{SettingsRecordings-x4yRgxJm.js → SettingsRecordings-BsJ9z-RE.js} +1 -1
  77. package/dist/interface/assets/SettingsRemote-Bf8bqXYs.js +1 -0
  78. package/dist/interface/assets/SettingsSystem-obAYrm8J.js +2 -0
  79. package/dist/interface/assets/{SettingsUsers-DLAYh9IA.js → SettingsUsers-Ciu1ry18.js} +1 -1
  80. package/dist/interface/assets/{Terminal-BsdUon5-.js → Terminal-CD9he5xW.js} +1 -1
  81. package/dist/interface/assets/VersionsHandler-Dpo-L314.js +7 -0
  82. package/dist/interface/assets/Workers-DCx1wSq5.css +1 -0
  83. package/dist/interface/assets/Workers-DiIBLgfr.js +2 -0
  84. package/dist/interface/assets/account-DqOHQKv8.js +1 -0
  85. package/dist/interface/assets/alert-circle-azHizGIK.js +1 -0
  86. package/dist/interface/assets/api-CbBOEbKQ.js +1 -0
  87. package/dist/interface/assets/api-aSYFKxo6.js +2 -0
  88. package/dist/interface/assets/api-vCJ1T8Ow.css +2 -0
  89. package/dist/interface/assets/{auth-DJ1WgC3s.js → auth-cdPNNpNC.js} +1 -1
  90. package/dist/interface/assets/automationBlueprint-DMjszOs4.js +1 -0
  91. package/dist/interface/assets/automations-E7vwN3kw.js +1 -0
  92. package/dist/interface/assets/{backup-DYBEA8gj.js → backup-Co1bwdSv.js} +1 -1
  93. package/dist/interface/assets/bell-ring-CenQn4Yt.js +1 -0
  94. package/dist/interface/assets/bug-DPw8k4Lk.js +1 -0
  95. package/dist/interface/assets/{cameras-WikE4nxe.js → cameras-CvJDLEZ3.js} +1 -1
  96. package/dist/interface/assets/{cameras.schema-BULBdfmS.js → cameras.schema-Clwro_L9.js} +1 -1
  97. package/dist/interface/assets/cctv-CBtg_v6o.js +1 -0
  98. package/dist/interface/assets/check-circle-BauXcL6H.js +1 -0
  99. package/dist/interface/assets/clock-outline-MhJC2-0d.js +1 -0
  100. package/dist/interface/assets/cloudHandoff-Bym-XqR1.js +1 -0
  101. package/dist/interface/assets/{deviceId-DMh1VcHg.js → deviceId-OXLTtG-_.js} +1 -1
  102. package/dist/interface/assets/github-DLhaVazy.js +1 -0
  103. package/dist/interface/assets/{hasPermission-DdAdlKls.js → hasPermission-P1TgpAur.js} +1 -1
  104. package/dist/interface/assets/{instances-BBnYdgRc.js → instances-DwnEOXk1.js} +1 -1
  105. package/dist/interface/assets/{locale-qn_8MsnX.js → locale-BWvy9Nlz.js} +1 -1
  106. package/dist/interface/assets/main-CIorSaV7.js +3 -0
  107. package/dist/interface/assets/motion-sensor-DD8SfD-m.js +1 -0
  108. package/dist/interface/assets/nodeDefinitions-Dvawtk76.js +1 -0
  109. package/dist/interface/assets/{notifications-DGRbcf65.js → notifications-DHmx6O_s.js} +1 -1
  110. package/dist/interface/assets/platformLabels-D-cF6OTP.js +1 -0
  111. package/dist/interface/assets/plugins-NVAodP6s.js +1 -0
  112. package/dist/interface/assets/puzzle-filled-C1z2qa5-.js +1 -0
  113. package/dist/interface/assets/refresh-rounded-Bqiw9DUu.js +1 -0
  114. package/dist/interface/assets/{round-restart-alt-wyrnMpa4.js → round-restart-alt-c8MQjhLh.js} +1 -1
  115. package/dist/interface/assets/router-i0r3QZvk.js +2 -0
  116. package/dist/interface/assets/server-CRxodRik.js +1 -0
  117. package/dist/interface/assets/shares-4w6GDwjp.js +1 -0
  118. package/dist/interface/assets/source-branch-Cd8fHY0E.js +1 -0
  119. package/dist/interface/assets/{theme-DhiUIeo3.js → theme-DhaXe7yA.js} +1 -1
  120. package/dist/interface/assets/types-6RvFwckU.js +1 -0
  121. package/dist/interface/assets/types-BXo-JDGR.js +1 -0
  122. package/dist/interface/assets/types-v-mK9gdq.css +1 -0
  123. package/dist/interface/assets/{useBiometricCredentials-DDyhIy7O.js → useBiometricCredentials-BGRyKe48.js} +1 -1
  124. package/dist/interface/assets/{useCameraOptions-CoogpQnN.js → useCameraOptions-CO1HD_gL.js} +1 -1
  125. package/dist/interface/assets/useCuiDialog-DHktK-mZ.js +2 -0
  126. package/dist/interface/assets/{useFileDownload-CSek7CzK.js → useFileDownload-Cp1oH80I.js} +1 -1
  127. package/dist/interface/assets/{useLogsSocket-rG2BaLWl.js → useLogsSocket-OnTDnkPr.js} +1 -1
  128. package/dist/interface/assets/{useStreamStatus-BdN05nfE.js → useStreamStatus-N--czepD.js} +1 -1
  129. package/dist/interface/assets/useUserOptions-CPkl1O0A.js +1 -0
  130. package/dist/interface/assets/{users.schema-Bz59q-My.js → users.schema-BIL9DqRo.js} +1 -1
  131. package/dist/interface/assets/{view-grid-Cs5VWmxE.js → view-grid-B0KB2pRf.js} +1 -1
  132. package/dist/interface/assets/webhook-Dgi5u5S_.js +1 -0
  133. package/dist/interface/index.html +36 -30
  134. package/dist/interface/sw.js +1 -1
  135. package/dist/interface/{workbox-5f44db27.js → workbox-778a14ff.js} +1 -1
  136. package/dist/server/package.json +1 -1
  137. package/dist/server/src/api/controllers/automations.controller.d.ts +3 -1
  138. package/dist/server/src/api/controllers/automations.controller.js +26 -1
  139. package/dist/server/src/api/controllers/automations.controller.js.map +1 -1
  140. package/dist/server/src/api/controllers/plugins.controller.d.ts +4 -0
  141. package/dist/server/src/api/controllers/plugins.controller.js +181 -56
  142. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  143. package/dist/server/src/api/controllers/server.controller.js +3 -2
  144. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  145. package/dist/server/src/api/controllers/workers.controller.d.ts +9 -4
  146. package/dist/server/src/api/controllers/workers.controller.js +132 -9
  147. package/dist/server/src/api/controllers/workers.controller.js.map +1 -1
  148. package/dist/server/src/api/database/index.d.ts +0 -1
  149. package/dist/server/src/api/database/index.js +0 -14
  150. package/dist/server/src/api/database/index.js.map +1 -1
  151. package/dist/server/src/api/database/types.d.ts +29 -1
  152. package/dist/server/src/api/routes/automations.routes.js +23 -1
  153. package/dist/server/src/api/routes/automations.routes.js.map +1 -1
  154. package/dist/server/src/api/routes/workers.routes.js +61 -7
  155. package/dist/server/src/api/routes/workers.routes.js.map +1 -1
  156. package/dist/server/src/api/schemas/automations.schema.d.ts +8 -0
  157. package/dist/server/src/api/schemas/automations.schema.js +6 -0
  158. package/dist/server/src/api/schemas/automations.schema.js.map +1 -1
  159. package/dist/server/src/api/schemas/config.schema.d.ts +8 -2
  160. package/dist/server/src/api/schemas/config.schema.js +8 -1
  161. package/dist/server/src/api/schemas/config.schema.js.map +1 -1
  162. package/dist/server/src/api/schemas/plugins.schema.d.ts +1 -0
  163. package/dist/server/src/api/schemas/plugins.schema.js +1 -0
  164. package/dist/server/src/api/schemas/plugins.schema.js.map +1 -1
  165. package/dist/server/src/api/schemas/remote.schema.d.ts +1 -1
  166. package/dist/server/src/api/schemas/workers.schema.d.ts +19 -0
  167. package/dist/server/src/api/schemas/workers.schema.js +19 -0
  168. package/dist/server/src/api/schemas/workers.schema.js.map +1 -1
  169. package/dist/server/src/api/services/backup.service.js +7 -1
  170. package/dist/server/src/api/services/backup.service.js.map +1 -1
  171. package/dist/server/src/api/services/plugins.service.d.ts +2 -0
  172. package/dist/server/src/api/services/plugins.service.js +25 -3
  173. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  174. package/dist/server/src/api/services/server.service.d.ts +0 -2
  175. package/dist/server/src/api/services/server.service.js +0 -12
  176. package/dist/server/src/api/services/server.service.js.map +1 -1
  177. package/dist/server/src/api/services/workers.service.d.ts +15 -0
  178. package/dist/server/src/api/services/workers.service.js +95 -2
  179. package/dist/server/src/api/services/workers.service.js.map +1 -1
  180. package/dist/server/src/api/types/index.d.ts +64 -0
  181. package/dist/server/src/api/utils/cert.js +43 -9
  182. package/dist/server/src/api/utils/cert.js.map +1 -1
  183. package/dist/server/src/api/websocket/nsp/server.d.ts +0 -2
  184. package/dist/server/src/api/websocket/nsp/server.js +1 -8
  185. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  186. package/dist/server/src/api/websocket/nsp/workers.d.ts +0 -3
  187. package/dist/server/src/api/websocket/nsp/workers.js +4 -17
  188. package/dist/server/src/api/websocket/nsp/workers.js.map +1 -1
  189. package/dist/server/src/camera/decoder/worker.d.ts +3 -0
  190. package/dist/server/src/camera/decoder/worker.js +55 -34
  191. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  192. package/dist/server/src/main.js +5 -3
  193. package/dist/server/src/main.js.map +1 -1
  194. package/dist/server/src/manager/downloadManager.d.ts +6 -0
  195. package/dist/server/src/manager/downloadManager.js +162 -3
  196. package/dist/server/src/manager/downloadManager.js.map +1 -1
  197. package/dist/server/src/plugins/bundle.d.ts +2 -0
  198. package/dist/server/src/plugins/bundle.js +24 -0
  199. package/dist/server/src/plugins/bundle.js.map +1 -0
  200. package/dist/server/src/plugins/config-store.d.ts +16 -0
  201. package/dist/server/src/plugins/config-store.js +33 -0
  202. package/dist/server/src/plugins/config-store.js.map +1 -0
  203. package/dist/server/src/plugins/index.d.ts +1 -1
  204. package/dist/server/src/plugins/index.js +3 -17
  205. package/dist/server/src/plugins/index.js.map +1 -1
  206. package/dist/server/src/plugins/main-file.d.ts +2 -0
  207. package/dist/server/src/plugins/main-file.js +24 -0
  208. package/dist/server/src/plugins/main-file.js.map +1 -0
  209. package/dist/server/src/plugins/plugin.d.ts +0 -1
  210. package/dist/server/src/plugins/plugin.js +7 -25
  211. package/dist/server/src/plugins/plugin.js.map +1 -1
  212. package/dist/server/src/plugins/runtime/base.d.ts +23 -7
  213. package/dist/server/src/plugins/runtime/base.js +32 -29
  214. package/dist/server/src/plugins/runtime/base.js.map +1 -1
  215. package/dist/server/src/plugins/runtime/index.d.ts +2 -3
  216. package/dist/server/src/plugins/runtime/index.js.map +1 -1
  217. package/dist/server/src/plugins/runtime/node/child.d.ts +1 -0
  218. package/dist/server/src/plugins/runtime/node/child.js +24 -4
  219. package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
  220. package/dist/server/src/plugins/runtime/node/configDb.d.ts +15 -0
  221. package/dist/server/src/plugins/runtime/node/configDb.js +18 -0
  222. package/dist/server/src/plugins/runtime/node/configDb.js.map +1 -0
  223. package/dist/server/src/plugins/runtime/node/index.d.ts +2 -2
  224. package/dist/server/src/plugins/runtime/node/index.js.map +1 -1
  225. package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -2
  226. package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
  227. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +2 -0
  228. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  229. package/dist/server/src/plugins/runtime/node/proxy/coreManager.js +5 -0
  230. package/dist/server/src/plugins/runtime/node/proxy/coreManager.js.map +1 -1
  231. package/dist/server/src/plugins/runtime/node/proxy/downloadManager.js +6 -2
  232. package/dist/server/src/plugins/runtime/node/proxy/downloadManager.js.map +1 -1
  233. package/dist/server/src/plugins/runtime/node/proxy/fileServe.d.ts +13 -0
  234. package/dist/server/src/plugins/runtime/node/proxy/fileServe.js +82 -0
  235. package/dist/server/src/plugins/runtime/node/proxy/fileServe.js.map +1 -0
  236. package/dist/server/src/plugins/runtime/node/remoteUrls.d.ts +1 -0
  237. package/dist/server/src/plugins/runtime/node/remoteUrls.js +32 -0
  238. package/dist/server/src/plugins/runtime/node/remoteUrls.js.map +1 -0
  239. package/dist/server/src/plugins/runtime/node/storage.d.ts +2 -2
  240. package/dist/server/src/plugins/runtime/node/storage.js +1 -1
  241. package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
  242. package/dist/server/src/plugins/runtime/node/storageController.d.ts +2 -2
  243. package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
  244. package/dist/server/src/plugins/runtime/python/child.py +16 -4
  245. package/dist/server/src/plugins/runtime/python/config_db.py +42 -0
  246. package/dist/server/src/plugins/runtime/python/index.d.ts +2 -2
  247. package/dist/server/src/plugins/runtime/python/index.js +3 -1
  248. package/dist/server/src/plugins/runtime/python/index.js.map +1 -1
  249. package/dist/server/src/plugins/runtime/python/namespaces.py +2 -0
  250. package/dist/server/src/plugins/runtime/python/plugin_api.py +2 -2
  251. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +5 -0
  252. package/dist/server/src/plugins/runtime/python/proxy/core_manager.py +6 -0
  253. package/dist/server/src/plugins/runtime/python/remote_urls.py +42 -0
  254. package/dist/server/src/plugins/runtime/python/storage.py +2 -2
  255. package/dist/server/src/plugins/runtime/python/storage_controller.py +2 -2
  256. package/dist/server/src/plugins/types.d.ts +2 -1
  257. package/dist/server/src/plugins/types.js +1 -0
  258. package/dist/server/src/plugins/types.js.map +1 -1
  259. package/dist/server/src/plugins/worker.d.ts +8 -0
  260. package/dist/server/src/plugins/worker.js +104 -2
  261. package/dist/server/src/plugins/worker.js.map +1 -1
  262. package/dist/server/src/rpc/index.d.ts +2 -1
  263. package/dist/server/src/rpc/index.js +43 -23
  264. package/dist/server/src/rpc/index.js.map +1 -1
  265. package/dist/server/src/rpc/interfaces/download.d.ts +10 -0
  266. package/dist/server/src/rpc/namespaces.d.ts +5 -1
  267. package/dist/server/src/rpc/namespaces.js +12 -2
  268. package/dist/server/src/rpc/namespaces.js.map +1 -1
  269. package/dist/server/src/rpc/server.d.ts +16 -2
  270. package/dist/server/src/rpc/server.js +146 -17
  271. package/dist/server/src/rpc/server.js.map +1 -1
  272. package/dist/server/src/rpc/utils.d.ts +1 -1
  273. package/dist/server/src/rpc/utils.js +2 -0
  274. package/dist/server/src/rpc/utils.js.map +1 -1
  275. package/dist/server/src/services/config/constants.js +4 -1
  276. package/dist/server/src/services/config/constants.js.map +1 -1
  277. package/dist/server/src/services/config/index.d.ts +1 -0
  278. package/dist/server/src/services/config/index.js +16 -10
  279. package/dist/server/src/services/config/index.js.map +1 -1
  280. package/dist/server/src/services/config/types.d.ts +5 -1
  281. package/dist/server/src/utils/automation-registry/index.d.ts +17 -0
  282. package/dist/server/src/utils/automation-registry/index.js +58 -0
  283. package/dist/server/src/utils/automation-registry/index.js.map +1 -0
  284. package/dist/server/src/utils/platform.d.ts +2 -0
  285. package/dist/server/src/utils/platform.js +26 -0
  286. package/dist/server/src/utils/platform.js.map +1 -0
  287. package/dist/server/src/utils/plugin-registry/index.d.ts +27 -0
  288. package/dist/server/src/utils/plugin-registry/index.js +127 -0
  289. package/dist/server/src/utils/plugin-registry/index.js.map +1 -0
  290. package/dist/server/src/workers/agent.d.ts +15 -9
  291. package/dist/server/src/workers/agent.js +157 -64
  292. package/dist/server/src/workers/agent.js.map +1 -1
  293. package/dist/server/src/workers/capabilities/frame-decoding.d.ts +7 -3
  294. package/dist/server/src/workers/capabilities/frame-decoding.js +44 -10
  295. package/dist/server/src/workers/capabilities/frame-decoding.js.map +1 -1
  296. package/dist/server/src/workers/capabilities/handler.d.ts +1 -0
  297. package/dist/server/src/workers/capabilities/plugin-host.d.ts +23 -0
  298. package/dist/server/src/workers/capabilities/plugin-host.js +160 -0
  299. package/dist/server/src/workers/capabilities/plugin-host.js.map +1 -0
  300. package/dist/server/src/workers/manager.d.ts +28 -3
  301. package/dist/server/src/workers/manager.js +316 -92
  302. package/dist/server/src/workers/manager.js.map +1 -1
  303. package/dist/server/src/workers/pairing.d.ts +3 -0
  304. package/dist/server/src/workers/pairing.js +80 -0
  305. package/dist/server/src/workers/pairing.js.map +1 -0
  306. package/dist/server/src/workers/types.d.ts +42 -17
  307. package/dist/server/src/workers/types.js +4 -0
  308. package/dist/server/src/workers/types.js.map +1 -1
  309. package/package.json +1 -1
  310. package/dist/interface/assets/Automation-C7HuyjXk.js +0 -2
  311. package/dist/interface/assets/Automations-DOj8Eo03.js +0 -1
  312. package/dist/interface/assets/Camview-BqFeqFU1.js +0 -1
  313. package/dist/interface/assets/Config--CF46OKO.js +0 -2
  314. package/dist/interface/assets/ConfigTriggerGeofence-DGnBxTWd.js +0 -1
  315. package/dist/interface/assets/CuiBottomSheet-DX9ynJj_.js +0 -1
  316. package/dist/interface/assets/CuiCameraCard-CXO5aDTJ.js +0 -1
  317. package/dist/interface/assets/FirstSteps-Bpu4QLhF.js +0 -1
  318. package/dist/interface/assets/Plugin-CHdZvbiP.css +0 -1
  319. package/dist/interface/assets/Plugin-DcwR4dBy.js +0 -1
  320. package/dist/interface/assets/Plugins-DfMxKm_j.js +0 -2
  321. package/dist/interface/assets/Plugins-s1k811lf.css +0 -1
  322. package/dist/interface/assets/SettingsAccount-BcPNz9jC.js +0 -1
  323. package/dist/interface/assets/SettingsAppearance-De_E9UCe.js +0 -1
  324. package/dist/interface/assets/SettingsRemote-CBLPWHM6.js +0 -1
  325. package/dist/interface/assets/SettingsSystem-Du3S8gps.js +0 -2
  326. package/dist/interface/assets/VersionsHandler-DF_kclOb.js +0 -7
  327. package/dist/interface/assets/Workers-CXvuE4Bn.js +0 -1
  328. package/dist/interface/assets/api-BB9AG_h5.css +0 -2
  329. package/dist/interface/assets/api-BWWcvHf5.js +0 -2
  330. package/dist/interface/assets/api-DY4FSNX7.js +0 -1
  331. package/dist/interface/assets/automations-wQnuqfmi.js +0 -1
  332. package/dist/interface/assets/cloudHandoff-zXwtzo8e.js +0 -1
  333. package/dist/interface/assets/github-DNzKZdHG.js +0 -1
  334. package/dist/interface/assets/main-CjUbwZ3z.js +0 -3
  335. package/dist/interface/assets/nodeDefinitions-blmt-d7H.js +0 -1
  336. package/dist/interface/assets/plugins-tQniunmN.js +0 -1
  337. package/dist/interface/assets/router-CvWvXFyk.js +0 -2
  338. package/dist/interface/assets/server-CmXhhpSW.js +0 -1
  339. package/dist/interface/assets/shares-ZKyJZapA.js +0 -1
  340. package/dist/interface/assets/types-C9iWhZtk.js +0 -1
  341. package/dist/interface/assets/useCuiDialog-C50obC48.js +0 -2
@@ -1,17 +1,28 @@
1
1
  import { Logger } from '@camera.ui/common/logger';
2
2
  import { container } from 'tsyringe';
3
3
  import { CamerasService } from '../api/services/cameras.service.js';
4
+ import { PluginsService } from '../api/services/plugins.service.js';
5
+ import { WorkersService } from '../api/services/workers.service.js';
4
6
  import { NamespaceManager } from '../rpc/namespaces.js';
7
+ import { ConfigService } from '../services/config/index.js';
8
+ import { describePlatformRequirement, isPlatformCompatible } from '../utils/platform.js';
9
+ import { WorkerCapability, workloadKey } from './types.js';
5
10
  const WORKER_TIMEOUT_MS = 15_000;
6
11
  export class WorkerManager {
7
12
  logger;
8
13
  configService;
9
14
  camerasService;
15
+ workersService;
10
16
  proxyServer;
11
17
  workers = new Map();
12
- unsubscribeHeartbeat;
18
+ desired = new Map();
19
+ closeHeartbeatHandler;
13
20
  unsubscribeDisconnect;
21
+ unsubscribeLogs;
14
22
  timeoutCheckInterval;
23
+ addressWarned = false;
24
+ workloadRevision = 0;
25
+ active = false;
15
26
  constructor() {
16
27
  container.registerInstance('workerManager', this);
17
28
  this.configService = container.resolve('configService');
@@ -23,35 +34,84 @@ export class WorkerManager {
23
34
  };
24
35
  this.logger = new Logger(loggerOptions);
25
36
  this.camerasService = new CamerasService();
37
+ this.workersService = new WorkersService();
38
+ }
39
+ isEnabled() {
40
+ return this.active;
26
41
  }
27
42
  async start() {
28
- if (!this.configService.config.workers?.enabled) {
43
+ if (this.configService.config.workers?.enabled) {
44
+ await this.enable(false);
45
+ }
46
+ }
47
+ async enable(reconcileAcceptor = true) {
48
+ if (this.active) {
29
49
  return;
30
50
  }
31
- this.logger.log('Starting WorkerManager');
32
- const unsubPromise = this.proxyServer.proxy.subscribe(NamespaceManager.workerHeartbeat(), (heartbeat) => {
33
- this.handleHeartbeat(heartbeat);
34
- });
35
- unsubPromise.then((unsub) => {
36
- this.unsubscribeHeartbeat = unsub;
37
- });
38
- const unsubDisconnectPromise = this.proxyServer.proxy.subscribe(NamespaceManager.workerDisconnect(), (data) => {
51
+ this.logger.log('Enabling WorkerManager');
52
+ this.active = true;
53
+ this.seedKnownWorkers();
54
+ const proxy = this.proxyServer.proxy;
55
+ if (!proxy) {
56
+ throw new Error('WorkerManager enabled before the proxy was initialized');
57
+ }
58
+ this.closeHeartbeatHandler = await proxy.registerHandler(NamespaceManager.workerManagerRpc(), { heartbeat: (heartbeat) => this.handleHeartbeat(heartbeat) }, { withoutDecorators: true });
59
+ const unsubDisconnectPromise = proxy.subscribe(NamespaceManager.workerDisconnect(), (data) => {
39
60
  this.handleGracefulDisconnect(data.agentId);
40
61
  });
41
62
  unsubDisconnectPromise.then((unsub) => {
42
63
  this.unsubscribeDisconnect = unsub;
43
64
  });
65
+ const unsubLogsPromise = proxy.subscribe(NamespaceManager.workerLogs(), (entry) => {
66
+ this.handleForwardedLog(entry);
67
+ });
68
+ unsubLogsPromise.then((unsub) => {
69
+ this.unsubscribeLogs = unsub;
70
+ });
44
71
  this.timeoutCheckInterval = setInterval(() => this.checkTimeouts(), 5_000);
45
- this.logger.log('WorkerManager started');
72
+ if (reconcileAcceptor) {
73
+ // Bring up the leaf-acceptor if workers are already paired.
74
+ await this.proxyServer.applyLeafNodeAuth();
75
+ }
76
+ this.logger.log('WorkerManager enabled');
77
+ }
78
+ async disable() {
79
+ if (!this.active) {
80
+ return;
81
+ }
82
+ this.logger.log('Disabling WorkerManager');
83
+ const agentIds = Array.from(this.workers.keys());
84
+ await this.teardown();
85
+ this.active = false;
86
+ const pluginsService = new PluginsService();
87
+ for (const agentId of agentIds) {
88
+ for (const camera of this.camerasService.listByAgentId(agentId)) {
89
+ this.restartFrameWorker(camera._id);
90
+ }
91
+ for (const plugin of pluginsService.listByAgentId(agentId)) {
92
+ this.restartPluginWorker(plugin.pluginName);
93
+ }
94
+ }
95
+ await this.proxyServer.applyLeafNodeAuth();
96
+ this.logger.log('WorkerManager disabled');
46
97
  }
47
98
  async stop() {
99
+ await this.teardown();
100
+ this.active = false;
101
+ }
102
+ async teardown() {
48
103
  if (this.timeoutCheckInterval) {
49
104
  clearInterval(this.timeoutCheckInterval);
50
105
  this.timeoutCheckInterval = undefined;
51
106
  }
52
- this.unsubscribeHeartbeat?.();
107
+ await this.closeHeartbeatHandler?.();
108
+ this.closeHeartbeatHandler = undefined;
53
109
  this.unsubscribeDisconnect?.();
110
+ this.unsubscribeDisconnect = undefined;
111
+ this.unsubscribeLogs?.();
112
+ this.unsubscribeLogs = undefined;
54
113
  this.workers.clear();
114
+ this.desired.clear();
55
115
  }
56
116
  getWorkers() {
57
117
  return Array.from(this.workers.values());
@@ -60,6 +120,9 @@ export class WorkerManager {
60
120
  const worker = this.workers.get(agentId);
61
121
  return worker?.online === true;
62
122
  }
123
+ isWorkerKnown(agentId) {
124
+ return this.workers.has(agentId);
125
+ }
63
126
  getAssignment(cameraId) {
64
127
  return this.camerasService.findById(cameraId)?.workerAgentId;
65
128
  }
@@ -79,22 +142,8 @@ export class WorkerManager {
79
142
  if (!camera) {
80
143
  throw new Error(`Camera ${cameraId} not found`);
81
144
  }
82
- // Stop on the previously-pinned worker first, so the single-owner invariant
83
- // holds — two workers must never run the same camera.
84
- const oldAgentId = camera.workerAgentId;
85
- if (oldAgentId && oldAgentId !== agentId && this.isWorkerOnline(oldAgentId)) {
86
- try {
87
- await this.createWorkerProxy(oldAgentId).stopCamera(cameraId);
88
- }
89
- catch (error) {
90
- this.logger.warn(`Failed to stop camera on previous worker ${oldAgentId}:`, error.message);
91
- }
92
- }
93
145
  await this.camerasService.setWorkerAgentId(cameraId, agentId);
94
- // Restart re-runs placement: delegate to the now-assigned worker (or local
95
- // fork if it is offline).
96
- const api = container.resolve('api');
97
- await api.cameraControllers.get(cameraId)?.frameWorker.restart();
146
+ this.restartFrameWorker(cameraId);
98
147
  }
99
148
  async unassignCamera(cameraId) {
100
149
  this.logger.log(`Unassigning camera ${cameraId}`);
@@ -102,49 +151,185 @@ export class WorkerManager {
102
151
  if (!camera) {
103
152
  throw new Error(`Camera ${cameraId} not found`);
104
153
  }
105
- const oldAgentId = camera.workerAgentId;
106
- if (oldAgentId && this.isWorkerOnline(oldAgentId)) {
107
- try {
108
- await this.createWorkerProxy(oldAgentId).stopCamera(cameraId);
109
- }
110
- catch (error) {
111
- this.logger.warn(`Failed to stop camera on worker ${oldAgentId}:`, error.message);
112
- }
113
- }
114
154
  await this.camerasService.setWorkerAgentId(cameraId, undefined);
115
- const api = container.resolve('api');
116
- await api.cameraControllers.get(cameraId)?.frameWorker.restart();
155
+ this.restartFrameWorker(cameraId);
117
156
  }
118
- async startRemoteCamera(cameraId) {
119
- const agentId = this.getAssignment(cameraId);
120
- if (!agentId) {
121
- throw new Error(`Camera ${cameraId} is not assigned to a worker`);
157
+ async noteWorkerPaired(agentId, name) {
158
+ await this.workersService.rememberWorker(agentId, name);
159
+ if (!this.workers.has(agentId)) {
160
+ const workerInfo = {
161
+ agentId,
162
+ name,
163
+ online: false,
164
+ lastHeartbeat: Date.now(),
165
+ cameras: [],
166
+ capabilities: [],
167
+ };
168
+ this.workers.set(agentId, workerInfo);
169
+ this.emitWorkerUpdate(workerInfo);
122
170
  }
123
- if (!this.isWorkerOnline(agentId)) {
124
- throw new Error(`Worker ${agentId} for camera ${cameraId} is offline`);
171
+ }
172
+ async assignPlugin(pluginName, agentId) {
173
+ this.logger.log(`Assigning plugin ${pluginName} to worker ${agentId}`);
174
+ const pluginsService = new PluginsService();
175
+ const plugin = pluginsService.getPluginByName(pluginName);
176
+ if (!plugin) {
177
+ throw new Error(`Plugin ${pluginName} not found`);
178
+ }
179
+ const worker = this.workers.get(agentId);
180
+ if (!worker) {
181
+ throw new Error(`Worker ${agentId} is unknown`);
125
182
  }
126
- const config = this.buildRemoteCameraConfig(cameraId);
127
- if (!config) {
128
- throw new Error(`Failed to build remote config for camera ${cameraId}`);
183
+ // Reject obviously wrong placements early; if the worker's platform is
184
+ // still unknown (never heartbeated) the agent double-checks on its side.
185
+ if (worker.platform && !isPlatformCompatible(plugin.info.os, plugin.info.cpu, worker.platform.os, worker.platform.arch)) {
186
+ const requirement = describePlatformRequirement(plugin.info.os, plugin.info.cpu);
187
+ throw new Error(`Plugin ${pluginName} requires ${requirement} — worker ${worker.name} is ${worker.platform.os}/${worker.platform.arch}`);
129
188
  }
130
- this.logger.log(`Starting camera ${config.cameraName} on worker ${agentId}`);
131
- await this.createWorkerProxy(agentId).startCamera(config);
189
+ await pluginsService.setWorkerAgentId(pluginName, agentId);
190
+ this.restartPluginWorker(pluginName);
132
191
  }
133
- async stopRemoteCamera(cameraId) {
192
+ async unassignPlugin(pluginName) {
193
+ this.logger.log(`Unassigning plugin ${pluginName}`);
194
+ const pluginsService = new PluginsService();
195
+ await pluginsService.setWorkerAgentId(pluginName, undefined);
196
+ this.restartPluginWorker(pluginName);
197
+ }
198
+ getPluginAssignment(pluginName) {
199
+ return new PluginsService().getPluginDbByName(pluginName)?.workerAgentId;
200
+ }
201
+ async removeWorker(agentId) {
202
+ this.logger.log(`Removing worker ${agentId}`);
203
+ for (const camera of this.camerasService.listByAgentId(agentId)) {
204
+ await this.camerasService.setWorkerAgentId(camera._id, undefined);
205
+ this.restartFrameWorker(camera._id);
206
+ }
207
+ const pluginsService = new PluginsService();
208
+ for (const plugin of pluginsService.listByAgentId(agentId)) {
209
+ await pluginsService.setWorkerAgentId(plugin.pluginName, undefined);
210
+ this.restartPluginWorker(plugin.pluginName);
211
+ }
212
+ const hadCredentials = await this.workersService.revokeCredentials(agentId);
213
+ await this.workersService.forgetWorker(agentId);
214
+ this.workers.delete(agentId);
215
+ try {
216
+ const socketService = container.resolve('socketService');
217
+ socketService.io.of('/workers').emit('worker-removed', { agentId });
218
+ }
219
+ catch {
220
+ // SocketService may not be available yet during startup
221
+ }
222
+ if (hadCredentials) {
223
+ await this.proxyServer.applyLeafNodeAuth();
224
+ }
225
+ }
226
+ desireFrameDecoding(cameraId) {
227
+ if (!this.active) {
228
+ return undefined;
229
+ }
134
230
  const agentId = this.getAssignment(cameraId);
135
231
  if (!agentId || !this.isWorkerOnline(agentId)) {
136
- return;
232
+ return undefined;
137
233
  }
138
- try {
139
- await this.createWorkerProxy(agentId).stopCamera(cameraId);
234
+ if (!this.configService.config.workers?.address) {
235
+ if (!this.addressWarned) {
236
+ this.addressWarned = true;
237
+ this.logger.warn("workers.address is not configured — remote workers cannot reach this master's streams, running cameras locally");
238
+ }
239
+ return undefined;
140
240
  }
141
- catch (error) {
142
- this.logger.warn(`Failed to stop camera ${cameraId} on worker ${agentId}:`, error.message);
241
+ const spec = this.buildRemoteCameraConfig(cameraId);
242
+ if (!spec) {
243
+ return undefined;
143
244
  }
245
+ this.desired.set(workloadKey(WorkerCapability.FrameDecoding, cameraId), {
246
+ agentId,
247
+ workload: { id: cameraId, capability: WorkerCapability.FrameDecoding, spec, revision: ++this.workloadRevision },
248
+ });
249
+ this.nudge(agentId);
250
+ return agentId;
251
+ }
252
+ clearFrameDecoding(cameraId) {
253
+ this.clearWorkload(WorkerCapability.FrameDecoding, cameraId);
254
+ }
255
+ desirePluginHost(pluginName) {
256
+ if (!this.active) {
257
+ return undefined;
258
+ }
259
+ const agentId = this.getPluginAssignment(pluginName);
260
+ if (!agentId || !this.isWorkerOnline(agentId)) {
261
+ return undefined;
262
+ }
263
+ const plugin = new PluginsService().getPluginByName(pluginName);
264
+ if (!plugin) {
265
+ return undefined;
266
+ }
267
+ const worker = this.workers.get(agentId);
268
+ if (worker?.platform && !isPlatformCompatible(plugin.info.os, plugin.info.cpu, worker.platform.os, worker.platform.arch)) {
269
+ this.logger.warn(`Plugin ${pluginName} is assigned to worker ${worker.name} but incompatible with its platform — not delegating`);
270
+ return undefined;
271
+ }
272
+ const rtsp = this.configService.go2rtcConfig.rtsp;
273
+ const spec = {
274
+ pluginId: plugin.id,
275
+ pluginName,
276
+ version: plugin.info.installedVersion ?? 'latest',
277
+ displayName: plugin.displayName,
278
+ loggerLevel: this.configService.config.logger.level,
279
+ rtspUsername: rtsp.username,
280
+ rtspPassword: rtsp.password,
281
+ };
282
+ this.desired.set(workloadKey(WorkerCapability.PluginHost, pluginName), {
283
+ agentId,
284
+ workload: { id: pluginName, capability: WorkerCapability.PluginHost, spec, revision: ++this.workloadRevision },
285
+ });
286
+ this.nudge(agentId);
287
+ return agentId;
288
+ }
289
+ clearPluginHost(pluginName) {
290
+ this.clearWorkload(WorkerCapability.PluginHost, pluginName);
291
+ }
292
+ clearWorkload(capability, id) {
293
+ const key = workloadKey(capability, id);
294
+ const entry = this.desired.get(key);
295
+ if (!entry) {
296
+ return;
297
+ }
298
+ this.desired.delete(key);
299
+ this.nudge(entry.agentId);
144
300
  }
145
301
  createWorkerProxy(agentId) {
302
+ const proxy = this.proxyServer.proxy;
303
+ if (!proxy) {
304
+ throw new Error('Proxy is not initialized');
305
+ }
146
306
  const rpcSubject = NamespaceManager.workerAgentRpc(agentId);
147
- return this.proxyServer.proxy.createProxy(rpcSubject);
307
+ return proxy.createProxy(rpcSubject);
308
+ }
309
+ nudge(agentId) {
310
+ try {
311
+ this.proxyServer.proxy?.publish(NamespaceManager.workerSync(agentId), {});
312
+ }
313
+ catch {
314
+ // agent will converge on its next heartbeat anyway
315
+ }
316
+ }
317
+ restartFrameWorker(cameraId) {
318
+ const api = container.resolve('api');
319
+ api.cameraControllers
320
+ .get(cameraId)
321
+ ?.frameWorker.restart()
322
+ .catch((error) => {
323
+ this.logger.error(`Failed to restart FrameWorker for camera ${cameraId}:`, error);
324
+ });
325
+ }
326
+ restartPluginWorker(pluginName) {
327
+ new PluginsService()
328
+ .getPluginProcessByName(pluginName)
329
+ ?.restart()
330
+ .catch((error) => {
331
+ this.logger.error(`Failed to restart plugin ${pluginName}:`, error);
332
+ });
148
333
  }
149
334
  buildRemoteCameraConfig(cameraId) {
150
335
  const api = container.resolve('api');
@@ -160,40 +345,57 @@ export class WorkerManager {
160
345
  }
161
346
  handleHeartbeat(heartbeat) {
162
347
  const existing = this.workers.get(heartbeat.agentId);
163
- if (!existing) {
164
- this.logger.log(`Worker connected: ${heartbeat.name} (${heartbeat.agentId})`);
165
- const workerInfo = {
166
- agentId: heartbeat.agentId,
167
- name: heartbeat.name,
168
- online: true,
169
- lastHeartbeat: Date.now(),
170
- cameras: heartbeat.cameras,
171
- capabilities: heartbeat.capabilities ?? [],
172
- pid: heartbeat.pid,
173
- cpuLoad: heartbeat.cpuLoad,
174
- memLoad: heartbeat.memLoad,
175
- };
176
- this.workers.set(heartbeat.agentId, workerInfo);
177
- this.emitWorkerUpdate(workerInfo);
348
+ const versionMismatch = heartbeat.version !== ConfigService.RUNNING_VERSION;
349
+ if (!existing?.online) {
350
+ this.logger.log(`Worker ${existing ? 'reconnected' : 'connected'}: ${heartbeat.name} (${heartbeat.agentId})`);
351
+ }
352
+ if (versionMismatch && !existing?.versionMismatch) {
353
+ const workerVersion = heartbeat.version || 'unknown';
354
+ this.logger.warn(`Worker ${heartbeat.name} (${heartbeat.agentId}) runs version ${workerVersion}, master runs ${ConfigService.RUNNING_VERSION} — update the worker`);
355
+ }
356
+ const wasOffline = !existing?.online;
357
+ const workerInfo = {
358
+ agentId: heartbeat.agentId,
359
+ name: heartbeat.name,
360
+ online: true,
361
+ lastHeartbeat: Date.now(),
362
+ cameras: heartbeat.cameras,
363
+ capabilities: heartbeat.capabilities ?? [],
364
+ version: heartbeat.version,
365
+ versionMismatch,
366
+ platform: heartbeat.platform,
367
+ pid: heartbeat.pid,
368
+ cpuLoad: heartbeat.cpuLoad,
369
+ memLoad: heartbeat.memLoad,
370
+ };
371
+ this.workers.set(heartbeat.agentId, workerInfo);
372
+ this.emitWorkerUpdate(workerInfo);
373
+ this.workersService.rememberWorker(heartbeat.agentId, heartbeat.name).catch(() => { });
374
+ if (wasOffline) {
178
375
  this.onWorkerOnline(heartbeat.agentId);
179
376
  }
180
- else {
181
- const wasOffline = !existing.online;
182
- existing.online = true;
183
- existing.lastHeartbeat = Date.now();
184
- existing.cameras = heartbeat.cameras;
185
- existing.name = heartbeat.name;
186
- existing.capabilities = heartbeat.capabilities ?? [];
187
- existing.pid = heartbeat.pid;
188
- existing.cpuLoad = heartbeat.cpuLoad;
189
- existing.memLoad = heartbeat.memLoad;
190
- this.emitWorkerUpdate(existing);
191
- // Re-assign cameras (register queue handlers) on reconnect
192
- if (wasOffline) {
193
- this.logger.log(`Worker reconnected: ${heartbeat.name} (${heartbeat.agentId})`);
194
- this.onWorkerOnline(heartbeat.agentId);
377
+ return { workloads: this.desiredFor(heartbeat.agentId) };
378
+ }
379
+ desiredFor(agentId) {
380
+ const workloads = [];
381
+ for (const entry of this.desired.values()) {
382
+ if (entry.agentId === agentId) {
383
+ workloads.push(entry.workload);
195
384
  }
196
385
  }
386
+ return workloads;
387
+ }
388
+ seedKnownWorkers() {
389
+ for (const known of this.workersService.listKnownWorkers()) {
390
+ this.workers.set(known.agentId, {
391
+ agentId: known.agentId,
392
+ name: known.name,
393
+ online: false,
394
+ lastHeartbeat: known.lastSeen,
395
+ cameras: [],
396
+ capabilities: [],
397
+ });
398
+ }
197
399
  }
198
400
  handleGracefulDisconnect(agentId) {
199
401
  const worker = this.workers.get(agentId);
@@ -215,6 +417,15 @@ export class WorkerManager {
215
417
  }
216
418
  }
217
419
  }
420
+ handleForwardedLog(entry) {
421
+ try {
422
+ const logManager = container.resolve('logManager');
423
+ logManager.handleChildLog(entry);
424
+ }
425
+ catch {
426
+ // LogManager may not be available yet during startup
427
+ }
428
+ }
218
429
  emitWorkerUpdate(worker) {
219
430
  try {
220
431
  const socketService = container.resolve('socketService');
@@ -237,11 +448,17 @@ export class WorkerManager {
237
448
  // that just came (back) online.
238
449
  if (!controller.frameWorker.isRemoteWorker) {
239
450
  this.logger.log(`Worker ${agentId} online — re-homing FrameWorker for ${camera.name}`);
240
- controller.frameWorker.restart().catch((error) => {
241
- this.logger.error(`Failed to restart FrameWorker for ${camera.name}:`, error);
242
- });
451
+ this.restartFrameWorker(camera._id);
243
452
  }
244
453
  }
454
+ const pluginsService = new PluginsService();
455
+ for (const plugin of pluginsService.listByAgentId(agentId)) {
456
+ const process = pluginsService.getPluginProcessByName(plugin.pluginName);
457
+ if (!process || process.isRemoteWorker)
458
+ continue;
459
+ this.logger.log(`Worker ${agentId} online — re-homing plugin ${plugin.pluginName}`);
460
+ this.restartPluginWorker(plugin.pluginName);
461
+ }
245
462
  }
246
463
  onWorkerOffline(agentId) {
247
464
  const api = container.resolve('api');
@@ -251,9 +468,16 @@ export class WorkerManager {
251
468
  continue;
252
469
  // Worker gone — restart re-runs placement and falls back to a local fork.
253
470
  this.logger.log(`Worker ${agentId} offline — falling back to local FrameWorker for ${camera.name}`);
254
- controller.frameWorker.restart().catch((error) => {
255
- this.logger.error(`Failed to restart FrameWorker for ${camera.name}:`, error);
256
- });
471
+ this.restartFrameWorker(camera._id);
472
+ }
473
+ const pluginsService = new PluginsService();
474
+ for (const plugin of pluginsService.listByAgentId(agentId)) {
475
+ const process = pluginsService.getPluginProcessByName(plugin.pluginName);
476
+ if (!process?.isRemoteWorker)
477
+ continue;
478
+ // Restart re-runs placement — falls back to local only if compatible.
479
+ this.logger.log(`Worker ${agentId} offline — re-placing plugin ${plugin.pluginName}`);
480
+ this.restartPluginWorker(plugin.pluginName);
257
481
  }
258
482
  }
259
483
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/workers/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAWxD,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,OAAO,aAAa;IACP,MAAM,CAAS;IACf,aAAa,CAAgB;IAC7B,cAAc,CAAiB;IAC/B,WAAW,CAAc;IAElC,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,oBAAoB,CAAc;IAClC,qBAAqB,CAAc;IACnC,oBAAoB,CAAkB;IAE9C;QACE,SAAS,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAgB,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAc,OAAO,CAAC,CAAC;QAE3D,MAAM,aAAa,GAAkB;YACnC,MAAM,EAAE,eAAe;YACvB,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO;YACxH,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO;SAClE,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAE,CAAC,SAA0B,EAAE,EAAE;YACvH,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAyB,EAAE,EAAE;YACjI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACzC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEM,UAAU;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,OAAe;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,CAAC;IAEM,aAAa,CAAC,QAAgB;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAC/D,CAAC;IAEM,kBAAkB,CAAC,QAAgB;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAe;QACxC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,OAAe;QACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,QAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,4EAA4E;QAC5E,sDAAsD;QACtD,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;QACxC,IAAI,UAAU,IAAI,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,UAAU,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE9D,2EAA2E;QAC3E,0BAA0B;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,QAAgB;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;QACxC,IAAI,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,UAAU,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,QAAgB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,8BAA8B,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,eAAe,QAAQ,aAAa,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,cAAc,OAAO,EAAE,CAAC,CAAC;QAC7E,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,cAAc,OAAO,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,OAAe;QACvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAiB,UAAU,CAAC,CAAC;IACxE,CAAC;IAEO,uBAAuB,CAAC,QAAgB;QAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,UAAU,CAAC,IAAI;YAC3B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;SACpD,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,SAA0B;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;YAE9E,MAAM,UAAU,GAAe;gBAC7B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;gBACzB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,EAAE;gBAC1C,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;aAC3B,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAElC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEpC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YACrC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC/B,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC;YACrD,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;YAC7B,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YACrC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAErC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEhC,2DAA2D;YAC3D,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;gBAChF,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,OAAe;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO;QAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,KAAK,OAAO,2BAA2B,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,aAAa;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,iBAAiB,EAAE,CAAC;gBACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,KAAK,OAAO,iCAAiC,CAAC,CAAC;gBACrF,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,MAAkB;QACzC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAgB,eAAe,CAAC,CAAC;YACxE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAE9D,oDAAoD;YACpD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAiC,CAAC;YAC5F,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,wEAAwE;YACxE,gCAAgC;YAChC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,OAAO,uCAAuC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvF,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;oBACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;gBAChF,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,0EAA0E;YAC1E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,OAAO,oDAAoD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;gBACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/workers/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from '@camera.ui/common/logger';
2
+ import type { ConfigService } from '../services/config/index.js';
3
+ export declare function ensureWorkerPaired(configService: ConfigService, logger: Logger): Promise<void>;
@@ -0,0 +1,80 @@
1
+ import { request } from 'node:https';
2
+ import { WorkersService } from '../api/services/workers.service.js';
3
+ export async function ensureWorkerPaired(configService, logger) {
4
+ const workerConfig = configService.config.worker;
5
+ const master = workerConfig?.master;
6
+ if (!master) {
7
+ throw new Error('worker.master is not configured');
8
+ }
9
+ const workersService = new WorkersService();
10
+ const connection = workersService.getWorkerConnection();
11
+ const pairingCode = workerConfig?.pairingCode;
12
+ if (connection?.master === master && (!pairingCode || pairingCode === connection.pairingCode)) {
13
+ return;
14
+ }
15
+ if (!pairingCode) {
16
+ throw new Error(`Worker is not paired with ${master} — generate a pairing code on the master (Workers view) and set worker.pairingCode`);
17
+ }
18
+ const workerName = workerConfig?.name ?? 'worker';
19
+ const agentId = workersService.getOrCreateAgentId(workerName);
20
+ const apiPort = workerConfig?.apiPort ?? configService.config.port;
21
+ logger.log(`Pairing with master ${master}:${apiPort}...`);
22
+ const response = await pairRequest(master, apiPort, {
23
+ code: pairingCode,
24
+ agentId,
25
+ name: workerName,
26
+ });
27
+ workersService.saveWorkerConnection({
28
+ master,
29
+ leafPort: response.leafPort,
30
+ user: response.user,
31
+ secret: response.secret,
32
+ ca: response.ca,
33
+ pairingCode,
34
+ });
35
+ logger.log(`Paired with master ${master} as ${response.user}`);
36
+ }
37
+ function pairRequest(host, port, body) {
38
+ return new Promise((resolve, reject) => {
39
+ const payload = JSON.stringify(body);
40
+ const req = request({
41
+ host,
42
+ port,
43
+ path: '/api/workers/pair',
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ 'Content-Length': Buffer.byteLength(payload),
48
+ },
49
+ // Self-signed master cert
50
+ rejectUnauthorized: false,
51
+ timeout: 15_000,
52
+ }, (res) => {
53
+ let data = '';
54
+ res.on('data', (chunk) => (data += chunk));
55
+ res.on('end', () => {
56
+ if (res.statusCode !== 200) {
57
+ let message = `pairing failed with status ${res.statusCode}`;
58
+ try {
59
+ message = JSON.parse(data).message ?? message;
60
+ }
61
+ catch {
62
+ // keep status message
63
+ }
64
+ reject(new Error(message));
65
+ return;
66
+ }
67
+ try {
68
+ resolve(JSON.parse(data));
69
+ }
70
+ catch {
71
+ reject(new Error('pairing failed: invalid response from master'));
72
+ }
73
+ });
74
+ });
75
+ req.on('timeout', () => req.destroy(new Error(`pairing failed: master ${host}:${port} did not respond`)));
76
+ req.on('error', (error) => reject(new Error(`pairing failed: ${error.message}`)));
77
+ req.end(payload);
78
+ });
79
+ }
80
+ //# sourceMappingURL=pairing.js.map