@camera.ui/server 0.0.112 → 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.
- package/dist/interface/assets/{404-Dd3AyWdE.js → 404-CZtDF9in.js} +1 -1
- package/dist/interface/assets/{About-DAV31RZ5.js → About-BzuuHdW1.js} +1 -1
- package/dist/interface/assets/{Adminpanel-zLLSmbSt.js → Adminpanel-uj7eTmlN.js} +1 -1
- package/dist/interface/assets/{Automation-Dx--ghuY.js → Automation-D0ps_z9e.js} +2 -2
- package/dist/interface/assets/{AutomationImport-chsxrEfX.js → AutomationImport-CR4Vsxkb.js} +2 -2
- package/dist/interface/assets/AutomationStore-BcMX7WbG.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-D6Ugj8ba.js +2 -0
- package/dist/interface/assets/Automations-DBACrYHy.js +2 -0
- package/dist/interface/assets/{Camera-DVJbyl93.js → Camera-Cf4QZbsx.js} +2 -2
- package/dist/interface/assets/{CameraConsole-DOiCJAQS.js → CameraConsole-uD4aWou8.js} +1 -1
- package/dist/interface/assets/{Cameras-Dz7bZyRE.js → Cameras-DbBU5mou.js} +1 -1
- package/dist/interface/assets/{Camview-CBywGGI8.js → Camview-DD9jLT7-.js} +1 -1
- package/dist/interface/assets/{Config-BfijMggp.js → Config-B9jI0lTQ.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-B2xFxVNO.js → ConfigActionCameraControl-D4hJLWmj.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-hmTEfMw3.js → ConfigActionNotification-B5cCmBXr.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-BgKKvqAy.js → ConfigActionPlugin-B7YAbFlf.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-Du072tTI.js → ConfigActionSensor-D_Dt1qtt.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-9aGopbuJ.js → ConfigActionSnapshot-ClyCQuB3.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-D2IIsthA.js → ConfigConditionSensorState-x0M0kHwL.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-CYJOEkHi.js → ConfigTriggerDetection-DWjlecON.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-4t1aW1Iw.js → ConfigTriggerGeofence-CTqptMUN.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-CVzeR8ac.js → ConfigTriggerSensor-DuCtavZo.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-5TI9H8mj.js → ConfigTriggerSystem-D1oGAhLn.js} +1 -1
- package/dist/interface/assets/{Console-COaJF4Fu.js → Console-DrDqDUtO.js} +1 -1
- package/dist/interface/assets/{CuiAvatar-Drdaxxcm.js → CuiAvatar-of_eVQsv.js} +1 -1
- package/dist/interface/assets/{CuiBottomSheet-ljGYA9W5.js → CuiBottomSheet-B7aQ7GCw.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-DKUg_g5x.js +1 -0
- package/dist/interface/assets/{CuiCameraCard-O22PEfyi.js → CuiCameraCard-IyJNZMGs.js} +1 -1
- package/dist/interface/assets/{CuiCameraPipCard-BDZ3W5sh.js → CuiCameraPipCard-KUBxGPoU.js} +1 -1
- package/dist/interface/assets/{CuiCameraRecordings-BWlxU4qP.js → CuiCameraRecordings-iWAFGo8e.js} +1 -1
- package/dist/interface/assets/{CuiCameraShares-BIXFV72I.js → CuiCameraShares-BCMYN11A.js} +1 -1
- package/dist/interface/assets/{CuiCameraSnapshot-BAwo37N7.js → CuiCameraSnapshot-DTtvEMy1.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-6tWx74Nl.js → CuiCameraTable-B7g53tPM.js} +1 -1
- package/dist/interface/assets/{CuiImage-KyBpvv-t.js → CuiImage-B97QDAl7.js} +1 -1
- package/dist/interface/assets/{CuiMenu-BBequFn_.js → CuiMenu-Ds6GufVn.js} +1 -1
- package/dist/interface/assets/{CuiPluginCard-Bnb0YKK1.js → CuiPluginCard-D1SylQbM.js} +2 -2
- package/dist/interface/assets/{CuiPluginOAuthButton-CvVnSP0h.js → CuiPluginOAuthButton-X8ZGFPwW.js} +2 -2
- package/dist/interface/assets/{CuiQRCode-Di0RLqfL.js → CuiQRCode-D_31ri5b.js} +1 -1
- package/dist/interface/assets/{CuiRecordingsGrid-DNw21B-r.js → CuiRecordingsGrid-CzMzhUXb.js} +1 -1
- package/dist/interface/assets/{CuiSchema-Cr90oo-T.js → CuiSchema-CfqOJmDH.js} +1 -1
- package/dist/interface/assets/{Faces-CFN1J-o4.js → Faces-IVmqcGuF.js} +1 -1
- package/dist/interface/assets/{FirstSteps-uzffNroi.js → FirstSteps-Boec1bzd.js} +1 -1
- package/dist/interface/assets/{Instances-CsAKq-HH.js → Instances-kmkRiBrV.js} +1 -1
- package/dist/interface/assets/{Logs-DKwNBSz9.js → Logs-DzR8mmLu.js} +1 -1
- package/dist/interface/assets/{Menu-Db1mi08W.js → Menu-Cl-biyd7.js} +1 -1
- package/dist/interface/assets/{OAuthDeviceFlow-B4cT3UTT.js → OAuthDeviceFlow-Cp9uZWm1.js} +1 -1
- package/dist/interface/assets/Plugin-CeLrucXT.js +1 -0
- package/dist/interface/assets/Plugin-Yv0ZmTNZ.css +1 -0
- package/dist/interface/assets/{PluginConsole-Bs9HqX_F.js → PluginConsole-BdbmROpF.js} +1 -1
- package/dist/interface/assets/PluginDetail-DKywYzmS.js +2 -0
- package/dist/interface/assets/PluginDetail-DbYxVe3g.css +1 -0
- package/dist/interface/assets/{PluginSchema-D3BCVJNa.js → PluginSchema-CWcq67pj.js} +1 -1
- package/dist/interface/assets/PluginSearch-BC1L0-VN.js +1 -0
- package/dist/interface/assets/PluginSearch-DCuLwE3v.js +2 -0
- package/dist/interface/assets/{PluginSearch-BOWQC1zl.css → PluginSearch-XjGr5qdW.css} +1 -1
- package/dist/interface/assets/{Plugins-DD8FPbtv.js → Plugins-DMLQY_6J.js} +1 -1
- package/dist/interface/assets/{Recordings-Bt8clj2R.js → Recordings--XaVJZJi.js} +1 -1
- package/dist/interface/assets/{Settings-Bj_41fdw.js → Settings-BljKDhYY.js} +1 -1
- package/dist/interface/assets/SettingsAccount-DFMOh1ci.js +1 -0
- package/dist/interface/assets/{SettingsAccount-CWVj8S8j.js → SettingsAccount-DKHO4mDj.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-DzG2tlwK.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-DNaNlO1q.js → SettingsAppearance-V5aeQ9c8.js} +1 -1
- package/dist/interface/assets/{SettingsBackup-stUbnWJf.js → SettingsBackup-CfOHDar8.js} +1 -1
- package/dist/interface/assets/{SettingsNotifications-Do2Cy2yf.js → SettingsNotifications-BZ1IXj0a.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-DWX69m9b.js → SettingsRecordings-BsJ9z-RE.js} +1 -1
- package/dist/interface/assets/{SettingsRemote-RqXtq3dF.js → SettingsRemote-Bf8bqXYs.js} +1 -1
- package/dist/interface/assets/SettingsSystem-obAYrm8J.js +2 -0
- package/dist/interface/assets/{SettingsUsers-Cb6zolu8.js → SettingsUsers-Ciu1ry18.js} +1 -1
- package/dist/interface/assets/{Terminal-D2zkV1fJ.js → Terminal-CD9he5xW.js} +1 -1
- package/dist/interface/assets/VersionsHandler-Dpo-L314.js +7 -0
- package/dist/interface/assets/Workers-DCx1wSq5.css +1 -0
- package/dist/interface/assets/Workers-DiIBLgfr.js +2 -0
- package/dist/interface/assets/alert-circle-azHizGIK.js +1 -0
- package/dist/interface/assets/{api-CvihG9kg.js → api-CbBOEbKQ.js} +1 -1
- package/dist/interface/assets/api-aSYFKxo6.js +2 -0
- package/dist/interface/assets/api-vCJ1T8Ow.css +2 -0
- package/dist/interface/assets/{auth-BeYrbk7B.js → auth-cdPNNpNC.js} +1 -1
- package/dist/interface/assets/{automations-egbiXwMx.js → automations-E7vwN3kw.js} +1 -1
- package/dist/interface/assets/{backup-82y2bZBX.js → backup-Co1bwdSv.js} +1 -1
- package/dist/interface/assets/{cameras-DRRy289F.js → cameras-CvJDLEZ3.js} +1 -1
- package/dist/interface/assets/{cameras.schema-qOAUe-E9.js → cameras.schema-Clwro_L9.js} +1 -1
- package/dist/interface/assets/check-circle-BauXcL6H.js +1 -0
- package/dist/interface/assets/cloudHandoff-Bym-XqR1.js +1 -0
- package/dist/interface/assets/{deviceId-DXf6AlPA.js → deviceId-OXLTtG-_.js} +1 -1
- package/dist/interface/assets/{hasPermission-CPgoH1JH.js → hasPermission-P1TgpAur.js} +1 -1
- package/dist/interface/assets/{instances-Crs3gwnp.js → instances-DwnEOXk1.js} +1 -1
- package/dist/interface/assets/{locale-BCQeXbI8.js → locale-BWvy9Nlz.js} +1 -1
- package/dist/interface/assets/{main-D0vO1lt0.js → main-CIorSaV7.js} +2 -2
- package/dist/interface/assets/{notifications-AiaxATml.js → notifications-DHmx6O_s.js} +1 -1
- package/dist/interface/assets/platformLabels-D-cF6OTP.js +1 -0
- package/dist/interface/assets/{plugins-C_Mh_UEw.js → plugins-NVAodP6s.js} +1 -1
- package/dist/interface/assets/{round-restart-alt-BJAngKc7.js → round-restart-alt-c8MQjhLh.js} +1 -1
- package/dist/interface/assets/{router-C2x34pNg.js → router-i0r3QZvk.js} +2 -2
- package/dist/interface/assets/{server-GaO6jF81.js → server-CRxodRik.js} +1 -1
- package/dist/interface/assets/{shares-Cw2NYamp.js → shares-4w6GDwjp.js} +1 -1
- package/dist/interface/assets/{theme-cGiCxaXN.js → theme-DhaXe7yA.js} +1 -1
- package/dist/interface/assets/types-BXo-JDGR.js +1 -0
- package/dist/interface/assets/{useBiometricCredentials-CEmbsdFy.js → useBiometricCredentials-BGRyKe48.js} +1 -1
- package/dist/interface/assets/{useCameraOptions-quplvW_7.js → useCameraOptions-CO1HD_gL.js} +1 -1
- package/dist/interface/assets/{useCuiDialog-j9ybKsCK.js → useCuiDialog-DHktK-mZ.js} +1 -1
- package/dist/interface/assets/{useFileDownload-BcOErnCc.js → useFileDownload-Cp1oH80I.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-gXiAENMr.js → useLogsSocket-OnTDnkPr.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-bjptbs6u.js → useStreamStatus-N--czepD.js} +1 -1
- package/dist/interface/assets/{useUserOptions-CA-AJeEh.js → useUserOptions-CPkl1O0A.js} +1 -1
- package/dist/interface/assets/{users.schema-DaXV2Jq7.js → users.schema-BIL9DqRo.js} +1 -1
- package/dist/interface/assets/{view-grid-Coh7iX5e.js → view-grid-B0KB2pRf.js} +1 -1
- package/dist/interface/index.html +29 -29
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +1 -1
- package/dist/server/src/api/controllers/plugins.controller.js +16 -3
- package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
- package/dist/server/src/api/controllers/server.controller.js +3 -2
- package/dist/server/src/api/controllers/server.controller.js.map +1 -1
- package/dist/server/src/api/controllers/workers.controller.d.ts +9 -4
- package/dist/server/src/api/controllers/workers.controller.js +132 -9
- package/dist/server/src/api/controllers/workers.controller.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +0 -1
- package/dist/server/src/api/database/index.js +0 -14
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +29 -1
- package/dist/server/src/api/routes/workers.routes.js +61 -7
- package/dist/server/src/api/routes/workers.routes.js.map +1 -1
- package/dist/server/src/api/schemas/config.schema.d.ts +8 -2
- package/dist/server/src/api/schemas/config.schema.js +8 -1
- package/dist/server/src/api/schemas/config.schema.js.map +1 -1
- package/dist/server/src/api/schemas/remote.schema.d.ts +1 -1
- package/dist/server/src/api/schemas/workers.schema.d.ts +19 -0
- package/dist/server/src/api/schemas/workers.schema.js +19 -0
- package/dist/server/src/api/schemas/workers.schema.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.d.ts +2 -0
- package/dist/server/src/api/services/plugins.service.js +25 -3
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/services/server.service.d.ts +0 -2
- package/dist/server/src/api/services/server.service.js +0 -12
- package/dist/server/src/api/services/server.service.js.map +1 -1
- package/dist/server/src/api/services/workers.service.d.ts +15 -0
- package/dist/server/src/api/services/workers.service.js +95 -2
- package/dist/server/src/api/services/workers.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +37 -0
- package/dist/server/src/api/utils/cert.js +43 -9
- package/dist/server/src/api/utils/cert.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.d.ts +0 -2
- package/dist/server/src/api/websocket/nsp/server.js +1 -8
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/workers.d.ts +0 -3
- package/dist/server/src/api/websocket/nsp/workers.js +4 -17
- package/dist/server/src/api/websocket/nsp/workers.js.map +1 -1
- package/dist/server/src/camera/decoder/worker.d.ts +3 -0
- package/dist/server/src/camera/decoder/worker.js +55 -34
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/main.js +5 -3
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/manager/downloadManager.d.ts +6 -0
- package/dist/server/src/manager/downloadManager.js +162 -3
- package/dist/server/src/manager/downloadManager.js.map +1 -1
- package/dist/server/src/plugins/bundle.d.ts +2 -0
- package/dist/server/src/plugins/bundle.js +24 -0
- package/dist/server/src/plugins/bundle.js.map +1 -0
- package/dist/server/src/plugins/config-store.d.ts +16 -0
- package/dist/server/src/plugins/config-store.js +33 -0
- package/dist/server/src/plugins/config-store.js.map +1 -0
- package/dist/server/src/plugins/index.d.ts +1 -1
- package/dist/server/src/plugins/index.js +3 -17
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/main-file.d.ts +2 -0
- package/dist/server/src/plugins/main-file.js +24 -0
- package/dist/server/src/plugins/main-file.js.map +1 -0
- package/dist/server/src/plugins/plugin.d.ts +0 -1
- package/dist/server/src/plugins/plugin.js +7 -25
- package/dist/server/src/plugins/plugin.js.map +1 -1
- package/dist/server/src/plugins/runtime/base.d.ts +23 -7
- package/dist/server/src/plugins/runtime/base.js +32 -29
- package/dist/server/src/plugins/runtime/base.js.map +1 -1
- package/dist/server/src/plugins/runtime/index.d.ts +2 -3
- package/dist/server/src/plugins/runtime/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/child.d.ts +1 -0
- package/dist/server/src/plugins/runtime/node/child.js +24 -4
- package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/configDb.d.ts +15 -0
- package/dist/server/src/plugins/runtime/node/configDb.js +18 -0
- package/dist/server/src/plugins/runtime/node/configDb.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/index.d.ts +2 -2
- package/dist/server/src/plugins/runtime/node/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -2
- package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +2 -0
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/coreManager.js +5 -0
- package/dist/server/src/plugins/runtime/node/proxy/coreManager.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/downloadManager.js +6 -2
- package/dist/server/src/plugins/runtime/node/proxy/downloadManager.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/fileServe.d.ts +13 -0
- package/dist/server/src/plugins/runtime/node/proxy/fileServe.js +82 -0
- package/dist/server/src/plugins/runtime/node/proxy/fileServe.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/remoteUrls.d.ts +1 -0
- package/dist/server/src/plugins/runtime/node/remoteUrls.js +32 -0
- package/dist/server/src/plugins/runtime/node/remoteUrls.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/storage.d.ts +2 -2
- package/dist/server/src/plugins/runtime/node/storage.js +1 -1
- package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/storageController.d.ts +2 -2
- package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/child.py +16 -4
- package/dist/server/src/plugins/runtime/python/config_db.py +42 -0
- package/dist/server/src/plugins/runtime/python/index.d.ts +2 -2
- package/dist/server/src/plugins/runtime/python/index.js +3 -1
- package/dist/server/src/plugins/runtime/python/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/namespaces.py +2 -0
- package/dist/server/src/plugins/runtime/python/plugin_api.py +2 -2
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +5 -0
- package/dist/server/src/plugins/runtime/python/proxy/core_manager.py +6 -0
- package/dist/server/src/plugins/runtime/python/remote_urls.py +42 -0
- package/dist/server/src/plugins/runtime/python/storage.py +2 -2
- package/dist/server/src/plugins/runtime/python/storage_controller.py +2 -2
- package/dist/server/src/plugins/types.d.ts +2 -1
- package/dist/server/src/plugins/types.js +1 -0
- package/dist/server/src/plugins/types.js.map +1 -1
- package/dist/server/src/plugins/worker.d.ts +8 -0
- package/dist/server/src/plugins/worker.js +104 -2
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/rpc/index.d.ts +2 -1
- package/dist/server/src/rpc/index.js +43 -23
- package/dist/server/src/rpc/index.js.map +1 -1
- package/dist/server/src/rpc/interfaces/download.d.ts +10 -0
- package/dist/server/src/rpc/namespaces.d.ts +5 -1
- package/dist/server/src/rpc/namespaces.js +12 -2
- package/dist/server/src/rpc/namespaces.js.map +1 -1
- package/dist/server/src/rpc/server.d.ts +16 -2
- package/dist/server/src/rpc/server.js +146 -17
- package/dist/server/src/rpc/server.js.map +1 -1
- package/dist/server/src/rpc/utils.d.ts +1 -1
- package/dist/server/src/rpc/utils.js +2 -0
- package/dist/server/src/rpc/utils.js.map +1 -1
- package/dist/server/src/services/config/constants.js +4 -1
- package/dist/server/src/services/config/constants.js.map +1 -1
- package/dist/server/src/services/config/index.d.ts +1 -0
- package/dist/server/src/services/config/index.js +16 -10
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/services/config/types.d.ts +5 -1
- package/dist/server/src/utils/platform.d.ts +2 -0
- package/dist/server/src/utils/platform.js +26 -0
- package/dist/server/src/utils/platform.js.map +1 -0
- package/dist/server/src/workers/agent.d.ts +15 -9
- package/dist/server/src/workers/agent.js +157 -64
- package/dist/server/src/workers/agent.js.map +1 -1
- package/dist/server/src/workers/capabilities/frame-decoding.d.ts +7 -3
- package/dist/server/src/workers/capabilities/frame-decoding.js +44 -10
- package/dist/server/src/workers/capabilities/frame-decoding.js.map +1 -1
- package/dist/server/src/workers/capabilities/handler.d.ts +1 -0
- package/dist/server/src/workers/capabilities/plugin-host.d.ts +23 -0
- package/dist/server/src/workers/capabilities/plugin-host.js +160 -0
- package/dist/server/src/workers/capabilities/plugin-host.js.map +1 -0
- package/dist/server/src/workers/manager.d.ts +28 -3
- package/dist/server/src/workers/manager.js +316 -92
- package/dist/server/src/workers/manager.js.map +1 -1
- package/dist/server/src/workers/pairing.d.ts +3 -0
- package/dist/server/src/workers/pairing.js +80 -0
- package/dist/server/src/workers/pairing.js.map +1 -0
- package/dist/server/src/workers/types.d.ts +42 -17
- package/dist/server/src/workers/types.js +4 -0
- package/dist/server/src/workers/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/interface/assets/AutomationStore-BhL1O1qq.js +0 -2
- package/dist/interface/assets/AutomationStoreDetail-pW5g8G4I.js +0 -2
- package/dist/interface/assets/Automations-CQioiNmw.js +0 -2
- package/dist/interface/assets/CuiBottomSheet-CrsJjITg.js +0 -1
- package/dist/interface/assets/Plugin-BDwSHzi9.js +0 -1
- package/dist/interface/assets/Plugin-CHdZvbiP.css +0 -1
- package/dist/interface/assets/PluginDetail-B2odw9DA.css +0 -1
- package/dist/interface/assets/PluginDetail-C3j4zIxC.js +0 -2
- package/dist/interface/assets/PluginSearch-BLWXmn9w.js +0 -2
- package/dist/interface/assets/PluginSearch-BwG61G-G.js +0 -1
- package/dist/interface/assets/SettingsAccount-DnZKU_tM.js +0 -1
- package/dist/interface/assets/SettingsAppearance-k5WMN34x.js +0 -1
- package/dist/interface/assets/SettingsSystem-BZ14jaFr.js +0 -2
- package/dist/interface/assets/VersionsHandler-nZK8BEJK.js +0 -7
- package/dist/interface/assets/Workers-CKR9yslJ.js +0 -1
- package/dist/interface/assets/api-Cntxdwiu.js +0 -2
- package/dist/interface/assets/api-CrAOxyt8.css +0 -2
- package/dist/interface/assets/cloudHandoff-CiV159TL.js +0 -1
- package/dist/interface/assets/types-aZM1hCux.js +0 -1
- /package/dist/interface/assets/{error-256-DLKVOU2S.png → logo-512-DLKVOU2S.png} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WorkerCapability } from './types.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { WorkerAgentRPC, WorkerHealthInfo } from './types.js';
|
|
3
3
|
export declare class WorkerAgent implements WorkerAgentRPC {
|
|
4
4
|
readonly agentId: string;
|
|
5
5
|
readonly capabilities: WorkerCapability[];
|
|
@@ -8,20 +8,26 @@ export declare class WorkerAgent implements WorkerAgentRPC {
|
|
|
8
8
|
private readonly natsServer;
|
|
9
9
|
private readonly startTime;
|
|
10
10
|
private proxy;
|
|
11
|
+
private managerProxy;
|
|
11
12
|
private handlers;
|
|
12
|
-
private
|
|
13
|
+
private applied;
|
|
14
|
+
private syncInterval?;
|
|
15
|
+
private syncInFlight;
|
|
16
|
+
private syncQueued;
|
|
17
|
+
private isClosed;
|
|
13
18
|
private closeHandler?;
|
|
19
|
+
private unsubscribeSync?;
|
|
14
20
|
private signalHandler;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
21
|
+
private cpuLoad;
|
|
22
|
+
private memLoad;
|
|
17
23
|
constructor();
|
|
18
24
|
start(): Promise<void>;
|
|
19
25
|
close(): Promise<void>;
|
|
20
|
-
startCamera(config: RemoteCameraConfig): Promise<void>;
|
|
21
|
-
stopCamera(cameraId: string): Promise<void>;
|
|
22
26
|
ping(): Promise<WorkerHealthInfo>;
|
|
23
27
|
restart(): Promise<void>;
|
|
24
|
-
private
|
|
25
|
-
private
|
|
26
|
-
private
|
|
28
|
+
private syncCycle;
|
|
29
|
+
private reconcile;
|
|
30
|
+
private buildHeartbeat;
|
|
31
|
+
private sampleMetrics;
|
|
32
|
+
private forwardLog;
|
|
27
33
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Logger } from '@camera.ui/common/logger';
|
|
2
|
-
import { SignalHandler } from '@camera.ui/common/utils';
|
|
2
|
+
import { isEqual, SignalHandler } from '@camera.ui/common/utils';
|
|
3
3
|
import { createRPCClient } from '@camera.ui/rpc';
|
|
4
|
-
import {
|
|
4
|
+
import { processes } from 'systeminformation';
|
|
5
5
|
import { container } from 'tsyringe';
|
|
6
6
|
import { WorkersService } from '../api/services/workers.service.js';
|
|
7
7
|
import { NamespaceManager } from '../rpc/namespaces.js';
|
|
8
|
+
import { ConfigService } from '../services/config/index.js';
|
|
8
9
|
import { FrameDecodingHandler } from './capabilities/frame-decoding.js';
|
|
9
|
-
import {
|
|
10
|
+
import { PluginHostHandler } from './capabilities/plugin-host.js';
|
|
11
|
+
import { WorkerCapability, workloadKey } from './types.js';
|
|
12
|
+
const SYNC_INTERVAL_MS = 5_000;
|
|
10
13
|
export class WorkerAgent {
|
|
11
14
|
agentId;
|
|
12
15
|
capabilities;
|
|
@@ -15,23 +18,29 @@ export class WorkerAgent {
|
|
|
15
18
|
natsServer;
|
|
16
19
|
startTime = Date.now();
|
|
17
20
|
proxy;
|
|
21
|
+
managerProxy;
|
|
18
22
|
handlers = new Map();
|
|
19
|
-
|
|
23
|
+
applied = new Map();
|
|
24
|
+
syncInterval;
|
|
25
|
+
syncInFlight = false;
|
|
26
|
+
syncQueued = false;
|
|
27
|
+
isClosed = false;
|
|
20
28
|
closeHandler;
|
|
29
|
+
unsubscribeSync;
|
|
21
30
|
signalHandler;
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
cpuLoad = '0.00';
|
|
32
|
+
memLoad = '0.00';
|
|
24
33
|
constructor() {
|
|
25
34
|
this.configService = container.resolve('configService');
|
|
26
35
|
this.natsServer = container.resolve('natsServer');
|
|
27
|
-
const workerName = this.configService.config.
|
|
36
|
+
const workerName = this.configService.config.worker?.name ?? 'worker';
|
|
28
37
|
this.agentId = new WorkersService().getOrCreateAgentId(workerName);
|
|
29
38
|
const validCapabilities = new Set(Object.values(WorkerCapability));
|
|
30
|
-
const configuredCapabilities = this.configService.config.
|
|
39
|
+
const configuredCapabilities = this.configService.config.worker?.capabilities ?? [];
|
|
31
40
|
this.capabilities = configuredCapabilities.filter((cap) => validCapabilities.has(cap));
|
|
32
41
|
const loggerOptions = {
|
|
33
42
|
prefix: 'WorkerAgent',
|
|
34
|
-
suffix: this.configService.config.
|
|
43
|
+
suffix: this.configService.config.worker?.name ?? 'worker',
|
|
35
44
|
debugEnabled: this.configService.config.logger?.level === 'debug' || this.configService.config.logger?.level === 'trace',
|
|
36
45
|
traceEnabled: this.configService.config.logger?.level === 'trace',
|
|
37
46
|
};
|
|
@@ -47,50 +56,61 @@ export class WorkerAgent {
|
|
|
47
56
|
this.logger.log(`Starting WorkerAgent (id: ${this.agentId})`);
|
|
48
57
|
if (this.capabilities.length === 0) {
|
|
49
58
|
const available = Object.values(WorkerCapability).join(', ');
|
|
50
|
-
throw new Error(`Worker has no valid capabilities configured. Configure "
|
|
59
|
+
throw new Error(`Worker has no valid capabilities configured. Configure "worker.capabilities" in config (available: ${available})`);
|
|
51
60
|
}
|
|
52
|
-
const configuredCapabilities = this.configService.config.
|
|
61
|
+
const configuredCapabilities = this.configService.config.worker?.capabilities ?? [];
|
|
53
62
|
const invalidCapabilities = configuredCapabilities.filter((cap) => !this.capabilities.includes(cap));
|
|
54
63
|
if (invalidCapabilities.length > 0) {
|
|
55
64
|
this.logger.warn(`Ignoring unknown capabilities: [${invalidCapabilities.join(', ')}]`);
|
|
56
65
|
}
|
|
57
66
|
this.logger.log(`Capabilities: [${this.capabilities.join(', ')}]`);
|
|
58
|
-
for (const cap of this.capabilities) {
|
|
59
|
-
switch (cap) {
|
|
60
|
-
case WorkerCapability.FrameDecoding:
|
|
61
|
-
this.handlers.set(cap, new FrameDecodingHandler(this.natsServer, this.configService, this.logger));
|
|
62
|
-
break;
|
|
63
|
-
default:
|
|
64
|
-
this.logger.warn(`No handler for capability: ${cap}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
67
|
// Local NATS (leaf node)
|
|
68
68
|
this.proxy = createRPCClient({
|
|
69
69
|
name: `worker-agent-${this.agentId}`,
|
|
70
70
|
servers: this.natsServer.endpoints.filter((ep) => ep.startsWith('nats://')),
|
|
71
|
+
timeout: 10_000,
|
|
71
72
|
auth: {
|
|
72
73
|
user: this.natsServer.localAuth.user,
|
|
73
74
|
password: this.natsServer.localAuth.password,
|
|
74
75
|
},
|
|
75
76
|
});
|
|
76
77
|
await this.proxy.connect();
|
|
78
|
+
for (const cap of this.capabilities) {
|
|
79
|
+
switch (cap) {
|
|
80
|
+
case WorkerCapability.FrameDecoding:
|
|
81
|
+
this.handlers.set(cap, new FrameDecodingHandler(this.natsServer, this.configService, this.logger, (entry) => this.forwardLog(entry)));
|
|
82
|
+
break;
|
|
83
|
+
case WorkerCapability.PluginHost:
|
|
84
|
+
this.handlers.set(cap, new PluginHostHandler(this.configService, this.logger, (entry) => this.forwardLog(entry)));
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
this.logger.warn(`No handler for capability: ${cap}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
this.managerProxy = this.proxy.createProxy(NamespaceManager.workerManagerRpc());
|
|
77
91
|
const rpcSubject = NamespaceManager.workerAgentRpc(this.agentId);
|
|
78
|
-
this.closeHandler = await this.proxy.registerHandler(rpcSubject, this, { isolatedConnection: true, withoutDecorators: true });
|
|
79
|
-
this.
|
|
92
|
+
this.closeHandler = await this.proxy.registerHandler(rpcSubject, { ping: () => this.ping(), restart: () => this.restart() }, { isolatedConnection: true, withoutDecorators: true });
|
|
93
|
+
this.unsubscribeSync = await this.proxy.subscribe(NamespaceManager.workerSync(this.agentId), () => {
|
|
94
|
+
void this.syncCycle();
|
|
95
|
+
});
|
|
96
|
+
void this.syncCycle();
|
|
97
|
+
this.syncInterval = setInterval(() => void this.syncCycle(), SYNC_INTERVAL_MS);
|
|
80
98
|
this.logger.log('WorkerAgent started and ready for commands');
|
|
81
99
|
}
|
|
82
100
|
async close() {
|
|
83
101
|
this.logger.log('Shutting down WorkerAgent...');
|
|
102
|
+
this.isClosed = true;
|
|
84
103
|
try {
|
|
85
104
|
this.proxy.publish(NamespaceManager.workerDisconnect(), { agentId: this.agentId });
|
|
86
105
|
}
|
|
87
106
|
catch {
|
|
88
107
|
// best-effort — proxy might already be disconnected
|
|
89
108
|
}
|
|
90
|
-
if (this.
|
|
91
|
-
clearInterval(this.
|
|
92
|
-
this.
|
|
109
|
+
if (this.syncInterval) {
|
|
110
|
+
clearInterval(this.syncInterval);
|
|
111
|
+
this.syncInterval = undefined;
|
|
93
112
|
}
|
|
113
|
+
this.unsubscribeSync?.();
|
|
94
114
|
for (const handler of this.handlers.values()) {
|
|
95
115
|
await handler.stopAll();
|
|
96
116
|
}
|
|
@@ -98,22 +118,10 @@ export class WorkerAgent {
|
|
|
98
118
|
await this.proxy?.disconnect();
|
|
99
119
|
this.logger.log('WorkerAgent shut down');
|
|
100
120
|
}
|
|
101
|
-
async startCamera(config) {
|
|
102
|
-
this.logger.log(`Starting camera: ${config.cameraName} (${config.cameraId})`);
|
|
103
|
-
for (const handler of this.handlers.values()) {
|
|
104
|
-
await handler.start(config.cameraId, config);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
async stopCamera(cameraId) {
|
|
108
|
-
this.logger.log(`Stopping camera: ${cameraId}`);
|
|
109
|
-
for (const handler of this.handlers.values()) {
|
|
110
|
-
await handler.stop(cameraId);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
121
|
async ping() {
|
|
114
122
|
return {
|
|
115
123
|
agentId: this.agentId,
|
|
116
|
-
name: this.configService.config.
|
|
124
|
+
name: this.configService.config.worker?.name ?? 'worker',
|
|
117
125
|
uptime: Date.now() - this.startTime,
|
|
118
126
|
cameras: Array.from(this.handlers.values()).flatMap((h) => h.getActiveWorkIds()),
|
|
119
127
|
capabilities: this.capabilities,
|
|
@@ -127,35 +135,120 @@ export class WorkerAgent {
|
|
|
127
135
|
process.exit(0);
|
|
128
136
|
}, 100);
|
|
129
137
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
138
|
+
async syncCycle() {
|
|
139
|
+
if (this.isClosed) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (this.syncInFlight) {
|
|
143
|
+
this.syncQueued = true;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this.syncInFlight = true;
|
|
147
|
+
try {
|
|
148
|
+
await this.sampleMetrics();
|
|
149
|
+
let response;
|
|
150
|
+
try {
|
|
151
|
+
response = await this.managerProxy.heartbeat(this.buildHeartbeat());
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Master unreachable — keep running the current workloads and try
|
|
155
|
+
// again on the next cycle. Convergence resumes when it is back.
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
await this.reconcile(response?.workloads ?? []);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
this.syncInFlight = false;
|
|
162
|
+
if (this.syncQueued) {
|
|
163
|
+
this.syncQueued = false;
|
|
164
|
+
void this.syncCycle();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async reconcile(desired) {
|
|
169
|
+
if (this.isClosed) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const desiredByKey = new Map();
|
|
173
|
+
for (const workload of desired) {
|
|
174
|
+
if (!this.handlers.has(workload.capability)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
desiredByKey.set(workloadKey(workload.capability, workload.id), workload);
|
|
178
|
+
}
|
|
179
|
+
// Stop strays first — the single-owner invariant matters more than a gap.
|
|
180
|
+
for (const [key, applied] of this.applied) {
|
|
181
|
+
if (desiredByKey.has(key)) {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
await this.handlers.get(applied.capability)?.stop(applied.id);
|
|
186
|
+
this.applied.delete(key);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
this.logger.error(`Failed to stop workload ${key}:`, error.message);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
for (const [key, workload] of desiredByKey) {
|
|
193
|
+
const current = this.applied.get(key);
|
|
194
|
+
if (current?.revision === workload.revision && isEqual(current?.spec, workload.spec)) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
await this.handlers.get(workload.capability)?.start(workload.id, workload.spec);
|
|
199
|
+
this.applied.set(key, workload);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
// Not recorded as applied — retried on the next cycle.
|
|
203
|
+
this.logger.error(`Failed to start workload ${key}:`, error.message);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
buildHeartbeat() {
|
|
208
|
+
return {
|
|
209
|
+
agentId: this.agentId,
|
|
210
|
+
name: this.configService.config.worker?.name ?? 'worker',
|
|
211
|
+
cameras: Array.from(this.handlers.values()).flatMap((h) => h.getActiveWorkIds()),
|
|
212
|
+
uptime: Date.now() - this.startTime,
|
|
213
|
+
capabilities: this.capabilities,
|
|
214
|
+
version: ConfigService.RUNNING_VERSION,
|
|
215
|
+
platform: { os: process.platform, arch: process.arch },
|
|
216
|
+
pid: process.pid,
|
|
217
|
+
cpuLoad: this.cpuLoad,
|
|
218
|
+
memLoad: this.memLoad,
|
|
143
219
|
};
|
|
144
|
-
sendHeartbeat();
|
|
145
|
-
this.heartbeatInterval = setInterval(sendHeartbeat, 5_000);
|
|
146
220
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
221
|
+
async sampleMetrics() {
|
|
222
|
+
try {
|
|
223
|
+
const pids = new Set([process.pid]);
|
|
224
|
+
for (const handler of this.handlers.values()) {
|
|
225
|
+
for (const pid of handler.getActiveProcessIds()) {
|
|
226
|
+
pids.add(pid);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const all = await processes();
|
|
230
|
+
let cpu = 0;
|
|
231
|
+
let mem = 0;
|
|
232
|
+
for (const proc of all.list) {
|
|
233
|
+
if (pids.has(proc.pid)) {
|
|
234
|
+
cpu += proc.cpu || 0;
|
|
235
|
+
mem += proc.mem || 0;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
this.cpuLoad = Math.min(cpu, 100).toFixed(2);
|
|
239
|
+
this.memLoad = Math.min(mem, 100).toFixed(2);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// keep last sample
|
|
243
|
+
}
|
|
154
244
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
245
|
+
forwardLog(entry) {
|
|
246
|
+
try {
|
|
247
|
+
this.proxy.publish(NamespaceManager.workerLogs(), entry);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// master will miss this line — local trace still has it
|
|
251
|
+
}
|
|
159
252
|
}
|
|
160
253
|
}
|
|
161
254
|
//# sourceMappingURL=agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/workers/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/workers/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Logger } from '@camera.ui/common/logger';
|
|
1
2
|
import { WorkerCapability } from '../types.js';
|
|
2
|
-
import type {
|
|
3
|
+
import type { LogEntry } from '@camera.ui/common/logger';
|
|
3
4
|
import type { NATS } from '../../rpc/server.js';
|
|
4
5
|
import type { ConfigService } from '../../services/config/index.js';
|
|
5
6
|
import type { RemoteCameraConfig } from '../types.js';
|
|
@@ -8,17 +9,20 @@ export declare class FrameDecodingHandler implements CapabilityHandler<WorkerCap
|
|
|
8
9
|
private readonly natsServer;
|
|
9
10
|
private readonly configService;
|
|
10
11
|
private readonly logger;
|
|
12
|
+
private readonly forwardLog?;
|
|
11
13
|
readonly capability = WorkerCapability.FrameDecoding;
|
|
12
14
|
private cameras;
|
|
13
15
|
private restartTimers;
|
|
14
16
|
private isClosed;
|
|
15
|
-
constructor(natsServer: NATS, configService: ConfigService, logger: Logger);
|
|
17
|
+
constructor(natsServer: NATS, configService: ConfigService, logger: Logger, forwardLog?: ((entry: LogEntry) => void) | undefined);
|
|
16
18
|
start(id: string, spec: RemoteCameraConfig): Promise<void>;
|
|
17
19
|
stop(id: string): Promise<void>;
|
|
18
20
|
stopAll(): Promise<void>;
|
|
19
21
|
getActiveWorkIds(): string[];
|
|
22
|
+
getActiveProcessIds(): number[];
|
|
20
23
|
private forkFrameWorker;
|
|
21
24
|
private killProcess;
|
|
22
25
|
private attemptRestart;
|
|
23
|
-
private
|
|
26
|
+
private handleChildOutput;
|
|
27
|
+
private processLogLine;
|
|
24
28
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Logger } from '@camera.ui/common/logger';
|
|
1
2
|
import { sleep } from '@camera.ui/common/utils';
|
|
2
3
|
import { fork } from 'node:child_process';
|
|
3
4
|
import { nodeDecoderPath } from '../../utils/path.js';
|
|
@@ -6,14 +7,16 @@ export class FrameDecodingHandler {
|
|
|
6
7
|
natsServer;
|
|
7
8
|
configService;
|
|
8
9
|
logger;
|
|
10
|
+
forwardLog;
|
|
9
11
|
capability = WorkerCapability.FrameDecoding;
|
|
10
12
|
cameras = new Map();
|
|
11
13
|
restartTimers = new Map();
|
|
12
14
|
isClosed = false;
|
|
13
|
-
constructor(natsServer, configService, logger) {
|
|
15
|
+
constructor(natsServer, configService, logger, forwardLog) {
|
|
14
16
|
this.natsServer = natsServer;
|
|
15
17
|
this.configService = configService;
|
|
16
18
|
this.logger = logger;
|
|
19
|
+
this.forwardLog = forwardLog;
|
|
17
20
|
}
|
|
18
21
|
async start(id, spec) {
|
|
19
22
|
this.logger.log(`Starting camera: ${spec.cameraName} (${id})`);
|
|
@@ -24,6 +27,7 @@ export class FrameDecodingHandler {
|
|
|
24
27
|
const managed = {
|
|
25
28
|
cameraId: id,
|
|
26
29
|
config: spec,
|
|
30
|
+
logBuffer: '',
|
|
27
31
|
};
|
|
28
32
|
this.cameras.set(id, managed);
|
|
29
33
|
try {
|
|
@@ -64,6 +68,16 @@ export class FrameDecodingHandler {
|
|
|
64
68
|
getActiveWorkIds() {
|
|
65
69
|
return Array.from(this.cameras.keys());
|
|
66
70
|
}
|
|
71
|
+
getActiveProcessIds() {
|
|
72
|
+
const pids = [];
|
|
73
|
+
for (const managed of this.cameras.values()) {
|
|
74
|
+
const pid = managed.frameWorkerProcess?.pid;
|
|
75
|
+
if (pid) {
|
|
76
|
+
pids.push(pid);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return pids;
|
|
80
|
+
}
|
|
67
81
|
forkFrameWorker(config) {
|
|
68
82
|
const proxyAuth = this.natsServer.localAuth;
|
|
69
83
|
const processName = 'camera.ui - Frame Worker (remote)';
|
|
@@ -105,10 +119,10 @@ export class FrameDecodingHandler {
|
|
|
105
119
|
this.attemptRestart(config);
|
|
106
120
|
});
|
|
107
121
|
child.stdout?.on('data', (data) => {
|
|
108
|
-
this.
|
|
122
|
+
this.handleChildOutput(data, config, child.pid);
|
|
109
123
|
});
|
|
110
124
|
child.stderr?.on('data', (data) => {
|
|
111
|
-
this.
|
|
125
|
+
this.handleChildOutput(data, config, child.pid);
|
|
112
126
|
});
|
|
113
127
|
return child;
|
|
114
128
|
}
|
|
@@ -151,7 +165,6 @@ export class FrameDecodingHandler {
|
|
|
151
165
|
if (!current) {
|
|
152
166
|
return;
|
|
153
167
|
}
|
|
154
|
-
// Already running (restarted by master via RPC)
|
|
155
168
|
if (current.frameWorkerProcess) {
|
|
156
169
|
return;
|
|
157
170
|
}
|
|
@@ -167,14 +180,35 @@ export class FrameDecodingHandler {
|
|
|
167
180
|
}, 5000);
|
|
168
181
|
this.restartTimers.set(config.cameraId, timer);
|
|
169
182
|
}
|
|
170
|
-
|
|
171
|
-
const
|
|
183
|
+
handleChildOutput(data, config, pid) {
|
|
184
|
+
const managed = this.cameras.get(config.cameraId);
|
|
185
|
+
if (!managed) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
managed.logBuffer += data.toString();
|
|
189
|
+
const lines = managed.logBuffer.split('\n');
|
|
190
|
+
managed.logBuffer = lines.pop() ?? '';
|
|
172
191
|
for (const line of lines) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
192
|
+
this.processLogLine(line, config, pid);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
processLogLine(line, config, pid) {
|
|
196
|
+
const trimmed = line.trim();
|
|
197
|
+
if (!trimmed || trimmed.includes('returning true from eof_received')) {
|
|
198
|
+
return;
|
|
177
199
|
}
|
|
200
|
+
this.logger.trace(`[${config.cameraName}] ${trimmed}`);
|
|
201
|
+
const entry = Logger.parseChildLog(trimmed) ?? {
|
|
202
|
+
timestamp: Date.now(),
|
|
203
|
+
level: 'raw',
|
|
204
|
+
prefix: '',
|
|
205
|
+
message: trimmed,
|
|
206
|
+
targetId: config.cameraId,
|
|
207
|
+
targetType: 'camera',
|
|
208
|
+
source: 'child',
|
|
209
|
+
processId: pid,
|
|
210
|
+
};
|
|
211
|
+
this.forwardLog?.(entry);
|
|
178
212
|
}
|
|
179
213
|
}
|
|
180
214
|
//# sourceMappingURL=frame-decoding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-decoding.js","sourceRoot":"","sources":["../../../../../src/workers/capabilities/frame-decoding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"frame-decoding.js","sourceRoot":"","sources":["../../../../../src/workers/capabilities/frame-decoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { WorkerCapability } from '../types.js';
|
|
2
|
+
import type { LogEntry, Logger } from '@camera.ui/common/logger';
|
|
3
|
+
import type { ConfigService } from '../../services/config/index.js';
|
|
4
|
+
import type { RemotePluginConfig } from '../types.js';
|
|
5
|
+
import type { CapabilityHandler } from './handler.js';
|
|
6
|
+
export declare class PluginHostHandler implements CapabilityHandler<WorkerCapability.PluginHost> {
|
|
7
|
+
private readonly configService;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly forwardLog;
|
|
10
|
+
readonly capability = WorkerCapability.PluginHost;
|
|
11
|
+
private plugins;
|
|
12
|
+
private isClosed;
|
|
13
|
+
constructor(configService: ConfigService, logger: Logger, forwardLog: (entry: LogEntry) => void);
|
|
14
|
+
start(id: string, spec: RemotePluginConfig): Promise<void>;
|
|
15
|
+
stop(id: string): Promise<void>;
|
|
16
|
+
stopAll(): Promise<void>;
|
|
17
|
+
getActiveWorkIds(): string[];
|
|
18
|
+
getActiveProcessIds(): number[];
|
|
19
|
+
private provisionAndStart;
|
|
20
|
+
private scheduleRetry;
|
|
21
|
+
private ensureInstalled;
|
|
22
|
+
private buildRuntimePlugin;
|
|
23
|
+
}
|