@camera.ui/server 0.0.50-internal.0 → 0.0.50-internal.1
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/index.html +44 -44
- package/dist/interface/js/{@primevue.OhxoO3MD.0.0.50-internal.0.js → @primevue.CiB2EGly.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{@tanstack.D1IL6eOv.0.0.50-internal.0.js → @tanstack.DxMw_rJn.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{@vee-validate.BGPyWWTh.0.0.50-internal.0.js → @vee-validate.RxZ3hn6V.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{@vueuse.BsKtqdiG.0.0.50-internal.0.js → @vueuse.C-k73ACm.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Adminpanel.D93Kvbwp.0.0.50-internal.0.js → Adminpanel.DumNu6GD.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Camera.DF2l3OMA.0.0.50-internal.0.js → Camera.BuosoqFl.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Cameras.YzvZccdv.0.0.50-internal.0.js → Cameras.A7NJflGG.0.0.50-internal.1.js} +2 -2
- package/dist/interface/js/Cammesh.Dv3C0UiR.0.0.50-internal.1.js +1 -0
- package/dist/interface/js/{Camview.CB7_HnoQ.0.0.50-internal.0.js → Camview.GgjJp7JR.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Config.BwflsWTm.0.0.50-internal.0.js → Config.BL3L-BFE.0.0.50-internal.1.js} +2 -2
- package/dist/interface/js/{Console.DZM8pN8Q.0.0.50-internal.0.js → Console.CxwRmUVF.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{CuiConsole.BXXU7Gth.0.0.50-internal.0.js → CuiConsole.D16kkT6R.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{CuiPluginCard.YFOrpbVD.0.0.50-internal.0.js → CuiPluginCard.Bkp__d8n.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{CuiTimeline.VV5KSJd5.0.0.50-internal.0.js → CuiTimeline.C9HKvo0G.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{FirstSteps.b-nvymgb.0.0.50-internal.0.js → FirstSteps.QuJjtAtF.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Plugin.BOMpVEwM.0.0.50-internal.0.js → Plugin.BLUUbEej.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{Plugins.DdPwaUDA.0.0.50-internal.0.js → Plugins.DviCIk7w.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/Recordings.Dsp07cHs.0.0.50-internal.1.js +1 -0
- package/dist/interface/js/{Settings.D24ttaPu.0.0.50-internal.0.js → Settings.Clx4y9gP.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{SettingsAccount.ms3aqz4E.0.0.50-internal.0.js → SettingsAccount.cfY4-PYd.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/SettingsAppearance.CBGZAazb.0.0.50-internal.1.js +1 -0
- package/dist/interface/js/{SettingsAppearance.vue_vue_type_script_setup_true_lang.CBQ6lL3T.0.0.50-internal.0.js → SettingsAppearance.vue_vue_type_script_setup_true_lang.kxAPXcBy.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{SettingsBackup.BPEc4Rjg.0.0.50-internal.0.js → SettingsBackup.DOaJA4pp.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/SettingsRecordings.BGcwL6tk.0.0.50-internal.1.js +1 -0
- package/dist/interface/js/{SettingsRemote.BL5nXbUT.0.0.50-internal.0.js → SettingsRemote.BVU_w1Jm.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{SettingsSystem.D7T0AIpm.0.0.50-internal.0.js → SettingsSystem.P0vy90vA.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{SettingsUsers.1u0vCOVG.0.0.50-internal.0.js → SettingsUsers.DaP5m7eo.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{VersionsHandler.vue_vue_type_script_setup_true_lang.xDishkkS.0.0.50-internal.0.js → VersionsHandler.vue_vue_type_script_setup_true_lang.MmrWYW3K.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{ace-builds.D1nmvCwb.0.0.50-internal.0.js → ace-builds.C0aqA_3x.0.0.50-internal.1.js} +2 -2
- package/dist/interface/js/{ace.config.G96T2z54.0.0.50-internal.0.js → ace.config.C9wgzklI.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{backup.B_Gzxtp_.0.0.50-internal.0.js → backup.BeH6lJ5t.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{chart.js.CP_nMnnf.0.0.50-internal.0.js → chart.js.BQHSWV_g.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{close-circle.DYLuVIOg.0.0.50-internal.0.js → close-circle.DDKMxauw.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{dnd-core.T9OeW7mu.0.0.50-internal.0.js → dnd-core.dWz9rJqH.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{draggabilly.D3zGcBb3.0.0.50-internal.0.js → draggabilly.D-iZIS1n.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{engine.io-client.kITRnq-g.0.0.50-internal.0.js → engine.io-client.BwxOddB_.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{fast-deep-equal.Bpc9mIsj.0.0.50-internal.0.js → fast-deep-equal.Dz96RC_N.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{highlight.js.BlSXU-Wb.0.0.50-internal.0.js → highlight.js.CmcM8OM6.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{linkify-it.C3N1lWsJ.0.0.50-internal.0.js → linkify-it.BgLcBzlw.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{main.D0YR3Jat.0.0.50-internal.0.js → main.6bOgRV7D.0.0.50-internal.1.js} +3 -3
- package/dist/interface/js/{markdown-it.Dj0dt5s2.0.0.50-internal.0.js → markdown-it.CTgfs-3p.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{nprogress.BwQWDcGj.0.0.50-internal.0.js → nprogress.CMhnq8jS.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{pinia.DRh7plEC.0.0.50-internal.0.js → pinia.CuC5ZfNs.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{primevue.Cl58krXf.0.0.50-internal.0.js → primevue.DmwjJ4xV.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{qrcode.C1sDj6P8.0.0.50-internal.0.js → qrcode.DGZO3j1c.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{react-dnd-touch-backend.BA4WhUJo.0.0.50-internal.0.js → react-dnd-touch-backend.CEGHlD-T.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{refresh-rounded.D_SmhhUf.0.0.50-internal.0.js → refresh-rounded.D0keXzBc.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{rxjs.C-fTBwEO.0.0.50-internal.0.js → rxjs.CiDbFOB0.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{socket.io-client.DKrRxgjP.0.0.50-internal.0.js → socket.io-client.BPcXPAHG.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{socket.io-parser.EXj3YDH2.0.0.50-internal.0.js → socket.io-parser.DSGzrW_l.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{system.CY8rGd-Q.0.0.50-internal.0.js → system.BKlEObmx.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{trash-fill.CMnCN3Oy.0.0.50-internal.0.js → trash-fill.BDFILs86.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{unidragger.D0w6Tqtt.0.0.50-internal.0.js → unidragger.DcxsxHCS.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vee-validate.BeiObIH8.0.0.50-internal.0.js → vee-validate.BGRg3oQ8.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue-chartjs.DtdZdiYw.0.0.50-internal.0.js → vue-chartjs.B9yk2de7.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue-i18n.BW2bx_6z.0.0.50-internal.0.js → vue-i18n.DXDZITpf.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js → vue-inline-svg.BDYaTfbi.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue-router.B2mOXHaC.0.0.50-internal.0.js → vue-router.CFEDA008.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue-zoomable.BKDyCJE7.0.0.50-internal.0.js → vue-zoomable.zqTafMgD.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{vue3-dnd.DRK24CBp.0.0.50-internal.0.js → vue3-dnd.BxM3dbYs.0.0.50-internal.1.js} +1 -1
- package/dist/interface/js/{zoom-out.DxvzgVEo.0.0.50-internal.0.js → zoom-out.B6SY9IIj.0.0.50-internal.1.js} +1 -1
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +1 -1
- package/package.json +1 -1
- package/.prettierignore +0 -12
- package/.prettierrc.json +0 -12
- package/artillery.yaml +0 -29
- package/bin/cameraui-server.ts +0 -11
- package/dist/interface/js/Cammesh.D-6dAROQ.0.0.50-internal.0.js +0 -1
- package/dist/interface/js/Recordings.DhxjIW7e.0.0.50-internal.0.js +0 -1
- package/dist/interface/js/SettingsAppearance.DsTjKXk1.0.0.50-internal.0.js +0 -1
- package/dist/interface/js/SettingsRecordings.DgW7M0jj.0.0.50-internal.0.js +0 -1
- package/eslint.config.js +0 -103
- package/localdeps.txt +0 -10
- package/mypy.ini +0 -30
- package/requirements.txt +0 -15
- package/ruff.toml +0 -90
- package/src/__init__.py +0 -0
- package/src/_camera_ui_tools/__init__.py +0 -0
- package/src/_camera_ui_tools/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/api/controllers/api.controller.ts +0 -19
- package/src/api/controllers/auth.controller.ts +0 -294
- package/src/api/controllers/backup.controller.ts +0 -72
- package/src/api/controllers/cameras.controller.ts +0 -1029
- package/src/api/controllers/config.controller.ts +0 -102
- package/src/api/controllers/files.controller.ts +0 -35
- package/src/api/controllers/frameWorkers.controller.ts +0 -109
- package/src/api/controllers/plugins.controller.ts +0 -1206
- package/src/api/controllers/system.controller.ts +0 -273
- package/src/api/controllers/users.controller.ts +0 -648
- package/src/api/database/checks.ts +0 -268
- package/src/api/database/constants.ts +0 -8
- package/src/api/database/index.ts +0 -262
- package/src/api/database/migration.ts +0 -62
- package/src/api/database/selfcheck.ts +0 -492
- package/src/api/database/types.ts +0 -104
- package/src/api/go2rtc/api/application.ts +0 -48
- package/src/api/go2rtc/api/config.ts +0 -61
- package/src/api/go2rtc/api/discover.ts +0 -197
- package/src/api/go2rtc/api/index.ts +0 -49
- package/src/api/go2rtc/api/snapshot.ts +0 -44
- package/src/api/go2rtc/api/streams.ts +0 -168
- package/src/api/go2rtc/index.ts +0 -43
- package/src/api/go2rtc/queue.ts +0 -50
- package/src/api/go2rtc/types.ts +0 -174
- package/src/api/index.ts +0 -286
- package/src/api/middlewares/authPermission.middleware.ts +0 -46
- package/src/api/middlewares/authValidation.middleware.ts +0 -160
- package/src/api/middlewares/pagination.middleware.ts +0 -67
- package/src/api/middlewares/socketAuth.middleware.ts +0 -136
- package/src/api/plugins/header.plugin.ts +0 -15
- package/src/api/plugins/logger.plugin.ts +0 -44
- package/src/api/plugins/proxy.plugin.ts +0 -255
- package/src/api/plugins/socket.plugin.ts +0 -28
- package/src/api/plugins/system.plugin.ts +0 -48
- package/src/api/plugins/useragent.plugin.ts +0 -19
- package/src/api/routes/api.routes.ts +0 -10
- package/src/api/routes/auth.routes.ts +0 -56
- package/src/api/routes/backup.routes.ts +0 -28
- package/src/api/routes/cameras.routes.ts +0 -281
- package/src/api/routes/config.routes.ts +0 -66
- package/src/api/routes/files.routes.ts +0 -15
- package/src/api/routes/frameWorkers.routes.ts +0 -39
- package/src/api/routes/index.ts +0 -37
- package/src/api/routes/plugins.routes.ts +0 -420
- package/src/api/routes/system.routes.ts +0 -101
- package/src/api/routes/users.routes.ts +0 -167
- package/src/api/schemas/backup.schema.ts +0 -112
- package/src/api/schemas/cameras.schema.ts +0 -479
- package/src/api/schemas/config.schema.ts +0 -38
- package/src/api/schemas/go2rtc.schema.ts +0 -189
- package/src/api/schemas/plugins.schema.ts +0 -126
- package/src/api/schemas/storage.schema.ts +0 -11
- package/src/api/schemas/system.schema.ts +0 -45
- package/src/api/schemas/users.schema.ts +0 -185
- package/src/api/services/auth.service.ts +0 -210
- package/src/api/services/backup.service.ts +0 -144
- package/src/api/services/cameras.service.ts +0 -671
- package/src/api/services/plugins.service.ts +0 -470
- package/src/api/services/system.service.ts +0 -85
- package/src/api/services/users.service.ts +0 -276
- package/src/api/types/index.ts +0 -675
- package/src/api/utils/cert.ts +0 -254
- package/src/api/utils/constants.ts +0 -17
- package/src/api/utils/fetch.ts +0 -21
- package/src/api/utils/moveFiles.ts +0 -45
- package/src/api/utils/parse.ts +0 -17
- package/src/api/websocket/index.ts +0 -110
- package/src/api/websocket/nsp/logs.ts +0 -240
- package/src/api/websocket/nsp/main.ts +0 -27
- package/src/api/websocket/nsp/metrics.ts +0 -301
- package/src/api/websocket/nsp/notifications.ts +0 -43
- package/src/api/websocket/nsp/plugins.ts +0 -37
- package/src/api/websocket/nsp/server.ts +0 -220
- package/src/api/websocket/nsp/status.ts +0 -77
- package/src/api/websocket/types.ts +0 -55
- package/src/api.ts +0 -163
- package/src/camera/classes.ts +0 -32
- package/src/camera/controller.ts +0 -579
- package/src/camera/device.ts +0 -422
- package/src/camera/frameWorker.ts +0 -403
- package/src/camera/index.ts +0 -679
- package/src/camera/interfaces.ts +0 -95
- package/src/camera/iou.ts +0 -153
- package/src/camera/polygon.ts +0 -226
- package/src/camera/python/__init__.py +0 -0
- package/src/camera/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/classes.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/delegate_controller.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/interfaces.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/iou.cpython-310.pyc +0 -0
- package/src/camera/python/__pycache__/iou.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/iou2.cpython-310.pyc +0 -0
- package/src/camera/python/__pycache__/polygon.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/video_frame.cpython-311.pyc +0 -0
- package/src/camera/python/classes.py +0 -41
- package/src/camera/python/interfaces.py +0 -130
- package/src/camera/python/iou.py +0 -158
- package/src/camera/python/polygon.py +0 -230
- package/src/camera/python/test/__pycache__/polygon.cpython-310.pyc +0 -0
- package/src/camera/python/test/iou_test.py +0 -799
- package/src/camera/python/test/polygon.py +0 -238
- package/src/camera/python/test/polygon_test.py +0 -256
- package/src/camera/python/test/polygon_test2.py +0 -484
- package/src/camera/python/typings.py +0 -50
- package/src/camera/python/video_frame.py +0 -143
- package/src/camera/session.ts +0 -192
- package/src/camera/streaming/fmp4-session.ts +0 -390
- package/src/camera/streaming/peer-connection.ts +0 -273
- package/src/camera/streaming/rtsp-session.ts +0 -331
- package/src/camera/streaming/webrtc-connection.ts +0 -260
- package/src/camera/streaming/werift-session.ts +0 -317
- package/src/camera/test/iou_test.ts +0 -761
- package/src/camera/test/polygon.test.ts +0 -611
- package/src/camera/test/polygon_test.ts +0 -210
- package/src/camera/types.ts +0 -48
- package/src/camera/utils.ts +0 -489
- package/src/camera/videoFrame.ts +0 -123
- package/src/cloud/index.ts +0 -61
- package/src/cloud/remote/cloudflare.ts +0 -18
- package/src/cloud/remote/upnp.ts +0 -18
- package/src/cloud/remote/utils.ts +0 -24
- package/src/cloud/types.ts +0 -16
- package/src/decoder/child.ts +0 -883
- package/src/decoder/imageUtils.ts +0 -275
- package/src/decoder/manager.ts +0 -251
- package/src/decoder/python/__init__.py +0 -0
- package/src/decoder/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/image_utils.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/utils.cpython-311.pyc +0 -0
- package/src/decoder/python/child.py +0 -903
- package/src/decoder/python/image_utils.py +0 -196
- package/src/decoder/python/pool.py +0 -45
- package/src/decoder/python/test/group.py +0 -62
- package/src/decoder/python/test/motion.mp4 +0 -0
- package/src/decoder/python/test/motion2.mp4 +0 -0
- package/src/decoder/python/test/opencl.cl +0 -70
- package/src/decoder/python/test/opencl2.cl +0 -130
- package/src/decoder/python/test/test.py +0 -427
- package/src/decoder/python/test/test1.jpg +0 -0
- package/src/decoder/python/test/test1_resized.jpg +0 -0
- package/src/decoder/python/test/test2.jpg +0 -0
- package/src/decoder/python/test/test2.py +0 -451
- package/src/decoder/python/test/test2_resized.jpg +0 -0
- package/src/decoder/python/test/test3.jpg +0 -0
- package/src/decoder/python/test/utils.py +0 -50
- package/src/decoder/python/typings.py +0 -57
- package/src/decoder/python/utils.py +0 -70
- package/src/decoder/test/child.ts +0 -117
- package/src/decoder/test/ffmpeg.ts +0 -371
- package/src/decoder/test/test.ts +0 -182
- package/src/decoder/types.ts +0 -27
- package/src/decoder/utils.ts +0 -64
- package/src/decoder/wasm/asconfig.json +0 -28
- package/src/decoder/wasm/assembly/console.ts +0 -1
- package/src/decoder/wasm/assembly/index.ts +0 -890
- package/src/decoder/wasm/build/decoder.d.ts +0 -43
- package/src/decoder/wasm/build/decoder.js +0 -108
- package/src/decoder/wasm/build/decoder.wasm +0 -0
- package/src/decoder/wasm/tsconfig.json +0 -5
- package/src/decoder/worker.ts +0 -113
- package/src/go2rtc/index.ts +0 -324
- package/src/go2rtc/types.ts +0 -88
- package/src/main.ts +0 -267
- package/src/manager/coreManager.ts +0 -78
- package/src/manager/deviceManager.ts +0 -132
- package/src/manager/types.ts +0 -17
- package/src/plugins/index.ts +0 -443
- package/src/plugins/plugin.ts +0 -177
- package/src/plugins/runtime/base.ts +0 -282
- package/src/plugins/runtime/index.ts +0 -15
- package/src/plugins/runtime/node/child.ts +0 -193
- package/src/plugins/runtime/node/index.ts +0 -67
- package/src/plugins/runtime/node/plugin.ts +0 -122
- package/src/plugins/runtime/node/pluginApi.ts +0 -27
- package/src/plugins/runtime/node/proxy/cameraDevice.ts +0 -299
- package/src/plugins/runtime/node/proxy/coreManager.ts +0 -128
- package/src/plugins/runtime/node/proxy/deviceManager.ts +0 -187
- package/src/plugins/runtime/node/storage.ts +0 -312
- package/src/plugins/runtime/node/storageController.ts +0 -91
- package/src/plugins/runtime/python/__init__.py +0 -0
- package/src/plugins/runtime/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/camera_storage.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/config_service.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/constants.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/ipc.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/logger.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/message_queue.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/namespaces.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin_api.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin_logger.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/proxy_utils.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/schema.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/storage.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/storage_controller.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/child.py +0 -248
- package/src/plugins/runtime/python/index.ts +0 -73
- package/src/plugins/runtime/python/namespaces.py +0 -101
- package/src/plugins/runtime/python/plugin.py +0 -155
- package/src/plugins/runtime/python/plugin_api.py +0 -29
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/core_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/camera_device.py +0 -1732
- package/src/plugins/runtime/python/proxy/core_manager.py +0 -126
- package/src/plugins/runtime/python/proxy/device_manager.py +0 -197
- package/src/plugins/runtime/python/schema.py +0 -99
- package/src/plugins/runtime/python/storage.py +0 -353
- package/src/plugins/runtime/python/storage_controller.py +0 -102
- package/src/plugins/runtime/python/typings.py +0 -195
- package/src/plugins/schema.ts +0 -472
- package/src/plugins/types.ts +0 -60
- package/src/plugins/worker.ts +0 -250
- package/src/rpc/index.ts +0 -149
- package/src/rpc/namespaces.ts +0 -79
- package/src/rpc/server.ts +0 -422
- package/src/rpc/types.ts +0 -119
- package/src/rpc/utils.ts +0 -16
- package/src/services/config/constants.ts +0 -47
- package/src/services/config/defaults.ts +0 -57
- package/src/services/config/index.ts +0 -744
- package/src/services/config/types.ts +0 -211
- package/src/services/logger/index.ts +0 -96
- package/src/types.ts +0 -47
- package/src/utils/path.ts +0 -16
- package/src/utils/pythonInstaller.ts +0 -597
- package/tsconfig.json +0 -37
- package/updates.config.js +0 -3
- /package/dist/interface/assets/{@xterm.DYP7pi_n.0.0.50-internal.0.css → @xterm.DYP7pi_n.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Adminpanel.BKek2EMH.0.0.50-internal.0.css → Adminpanel.BKek2EMH.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Cameras.BDWZJqPN.0.0.50-internal.0.css → Cameras.BDWZJqPN.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Camview.BFUFMoNX.0.0.50-internal.0.css → Camview.BFUFMoNX.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{CuiConsole.DCYyxdVg.0.0.50-internal.0.css → CuiConsole.DCYyxdVg.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{CuiPluginCard.yF8V0SZY.0.0.50-internal.0.css → CuiPluginCard.yF8V0SZY.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{CuiTimeline.BkIwlYtw.0.0.50-internal.0.css → CuiTimeline.BkIwlYtw.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Plugin.DJElsAn5.0.0.50-internal.0.css → Plugin.DJElsAn5.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Plugins.0h77qnmN.0.0.50-internal.0.css → Plugins.0h77qnmN.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{Settings.CkgfRkQr.0.0.50-internal.0.css → Settings.CkgfRkQr.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{SettingsAccount.DeFul3eQ.0.0.50-internal.0.css → SettingsAccount.DeFul3eQ.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{SettingsBackup.CX0rT0QJ.0.0.50-internal.0.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{highlight.Ch2EwETz.0.0.50-internal.0.css → highlight.Ch2EwETz.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{logo-256.BCQk9H1-.0.0.50-internal.0.png → logo-256.BCQk9H1-.0.0.50-internal.1.png} +0 -0
- /package/dist/interface/assets/{logo-512.DLKVOU2S.0.0.50-internal.0.png → logo-512.DLKVOU2S.0.0.50-internal.1.png} +0 -0
- /package/dist/interface/assets/{logo.DmEiRk0z.0.0.50-internal.0.png → logo.DmEiRk0z.0.0.50-internal.1.png} +0 -0
- /package/dist/interface/assets/{main.Cip9LkS3.0.0.50-internal.0.css → main.Cip9LkS3.0.0.50-internal.1.css} +0 -0
- /package/dist/interface/assets/{mode-json.Br7xisR1.0.0.50-internal.0.js → mode-json.Br7xisR1.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/assets/{mode-yaml.CIYL8U3d.0.0.50-internal.0.js → mode-yaml.CIYL8U3d.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/assets/{worker-base.jEXLGV2h.0.0.50-internal.0.js → worker-base.jEXLGV2h.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/assets/{worker-json.DgwNIOck.0.0.50-internal.0.js → worker-json.DgwNIOck.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/assets/{worker-yaml.B3uUYINB.0.0.50-internal.0.js → worker-yaml.B3uUYINB.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@babel.l0sNRNKZ.0.0.50-internal.0.js → @babel.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@intlify.BkGPX90O.0.0.50-internal.0.js → @intlify.BkGPX90O.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@kurkle.D8fDXNIl.0.0.50-internal.0.js → @kurkle.D8fDXNIl.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@primeuix.BFAY2Bk9.0.0.50-internal.0.js → @primeuix.BFAY2Bk9.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@react-dnd.CcwRs9xb.0.0.50-internal.0.js → @react-dnd.CcwRs9xb.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@socket.io.Dkula2eQ.0.0.50-internal.0.js → @socket.io.Dkula2eQ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@vue.B5vqhCp2.0.0.50-internal.0.js → @vue.B5vqhCp2.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{@xterm.CAa7rpjv.0.0.50-internal.0.js → @xterm.DIUBesyz.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{axios.DHr9lByg.0.0.50-internal.0.js → axios.DHr9lByg.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{birpc.l0sNRNKZ.0.0.50-internal.0.js → birpc.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{compare-versions.DqEOhma6.0.0.50-internal.0.js → compare-versions.DqEOhma6.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{dijkstrajs.C00ieaqj.0.0.50-internal.0.js → dijkstrajs.C00ieaqj.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{engine.io-parser.BiEtp6m2.0.0.50-internal.0.js → engine.io-parser.BiEtp6m2.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{entities.C20TfXL6.0.0.50-internal.0.js → entities.C20TfXL6.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{ev-emitter.X5f1qa-c.0.0.50-internal.0.js → ev-emitter.X5f1qa-c.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{get-size.D1dS-IaP.0.0.50-internal.0.js → get-size.D1dS-IaP.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{hookable.l0sNRNKZ.0.0.50-internal.0.js → hookable.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{mdurl.k9Sl0PQj.0.0.50-internal.0.js → mdurl.k9Sl0PQj.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{perfect-debounce.l0sNRNKZ.0.0.50-internal.0.js → perfect-debounce.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{primelocale.Bga3dOQu.0.0.50-internal.0.js → primelocale.Bga3dOQu.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{punycode.js.Dj65hjkv.0.0.50-internal.0.js → punycode.js.Dj65hjkv.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{redux.BFxtlG_c.0.0.50-internal.0.js → redux.BFxtlG_c.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{tslib.9k7AwCpt.0.0.50-internal.0.js → tslib.9k7AwCpt.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{uc.micro.kMc2yuuw.0.0.50-internal.0.js → uc.micro.kMc2yuuw.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{uuid.C6aID195.0.0.50-internal.0.js → uuid.C6aID195.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{vue.l0sNRNKZ.0.0.50-internal.0.js → vue.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
- /package/dist/interface/js/{zod.SKKegNRO.0.0.50-internal.0.js → zod.SKKegNRO.0.0.50-internal.1.js} +0 -0
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync, statSync } from 'node:fs';
|
|
3
|
-
import { platform } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { pythonPath, pythonPluginPath } from '../../../utils/path.js';
|
|
6
|
-
import { DEFAULT_PY_VERSION, PythonInstaller } from '../../../utils/pythonInstaller.js';
|
|
7
|
-
import { BasePluginRuntime } from '../base.js';
|
|
8
|
-
|
|
9
|
-
import type { Plugin } from '../../plugin.js';
|
|
10
|
-
|
|
11
|
-
export class PythonPluginRuntime extends BasePluginRuntime {
|
|
12
|
-
private py: PythonInstaller;
|
|
13
|
-
|
|
14
|
-
constructor(plugin: Plugin) {
|
|
15
|
-
super(plugin);
|
|
16
|
-
|
|
17
|
-
this.py = new PythonInstaller(this.configService.HOME_PATH, this.logger, this.plugin.installPath, this.plugin.contract.pythonVersion);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
public async start(): Promise<void> {
|
|
21
|
-
if (this.isRunning()) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
await this.updatePython();
|
|
26
|
-
|
|
27
|
-
return new Promise<void>((resolve, reject) => {
|
|
28
|
-
this.logger.log(`Starting plugin: ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion})...`);
|
|
29
|
-
|
|
30
|
-
const command = this.py.pluginPythonPath;
|
|
31
|
-
const processNames = [this.plugin.pluginName, this.plugin.displayName];
|
|
32
|
-
const args: string[] = ['-u', pythonPluginPath, ...processNames];
|
|
33
|
-
|
|
34
|
-
this.logger.debug(`Spawning plugin: ${this.plugin.pluginName}`);
|
|
35
|
-
|
|
36
|
-
this.worker = spawn(this.py.pluginPythonPath, args, {
|
|
37
|
-
env: {
|
|
38
|
-
PYTHONUNBUFFERED: '1',
|
|
39
|
-
PYTHONPATH: this.createPythonPath(),
|
|
40
|
-
...this.getEnv(),
|
|
41
|
-
},
|
|
42
|
-
cwd: this.plugin.mainPath,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
this.worker.on('spawn', this.onSpawn.bind(this, this.worker.pid!, command, args, processNames, resolve));
|
|
46
|
-
this.worker.on('error', this.onError.bind(this, reject));
|
|
47
|
-
this.worker.on('exit', this.onExit.bind(this));
|
|
48
|
-
|
|
49
|
-
this.worker.stdout?.on('data', this.onData.bind(this));
|
|
50
|
-
this.worker.stderr?.on('data', this.onData.bind(this));
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private async updatePython(): Promise<void> {
|
|
55
|
-
if (this.plugin.isPython) {
|
|
56
|
-
await this.py.installPluginPython();
|
|
57
|
-
|
|
58
|
-
const requirementsPath = join(this.plugin.installPath, 'requirements.txt');
|
|
59
|
-
if (existsSync(requirementsPath) && statSync(requirementsPath).size > 0) {
|
|
60
|
-
await this.py.updatePluginDependencies(requirementsPath);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (!this.pluginManager.installedPythonVersions.has(this.plugin.contract.pythonVersion ?? DEFAULT_PY_VERSION)) {
|
|
64
|
-
throw new Error(`Python version ${this.plugin.contract.pythonVersion ?? DEFAULT_PY_VERSION} is not installed! Cannot start ${this.plugin.pluginName}.`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
private createPythonPath(): string {
|
|
70
|
-
const separator = platform() === 'win32' ? ';' : ':';
|
|
71
|
-
return [this.py.serverPackagesPath, pythonPath, this.py.pluginPackagesPath, this.plugin.mainPath].join(separator);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
from typing import TypedDict
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class CoreManagerNamespaces(TypedDict):
|
|
5
|
-
coreManagerSubject: str
|
|
6
|
-
coreManagerRpc: str
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class DeviceManagerNamespaces(TypedDict):
|
|
10
|
-
deviceManagerSubject: str
|
|
11
|
-
deviceManagerRpc: str
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class FrameWorkerNamespaces(TypedDict):
|
|
15
|
-
frameWorkerChildRpc: str
|
|
16
|
-
frameWorkerChild: str
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class PluginNamespaces(TypedDict):
|
|
20
|
-
pluginDeviceManagerSubject: str
|
|
21
|
-
pluginChildRpc: str
|
|
22
|
-
pluginChild: str
|
|
23
|
-
pluginStorageRpc: str
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class CameraNamespaces(TypedDict):
|
|
27
|
-
cameraSubject: str
|
|
28
|
-
cameraControllerRpc: str
|
|
29
|
-
cameraMotionFrameSubject: str
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class PluginCameraNamespaces(TypedDict):
|
|
33
|
-
cameraInterfacesRpc: str
|
|
34
|
-
cameraStorageRpc: str
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class PluginAndPluginCameraNamespaces(PluginNamespaces, PluginCameraNamespaces):
|
|
38
|
-
pass
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class DeviceManagerPluginNamespaces(DeviceManagerNamespaces, PluginNamespaces):
|
|
42
|
-
pass
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class CoreManagerPluginNamespaces(CoreManagerNamespaces, PluginNamespaces):
|
|
46
|
-
pass
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class FrameWorkerCoreManagerNamespaces(FrameWorkerNamespaces, CoreManagerNamespaces):
|
|
50
|
-
pass
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
class CameraFrameWorkerPluginNamespaces(CameraNamespaces, FrameWorkerNamespaces, PluginCameraNamespaces):
|
|
54
|
-
pass
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class NamespaceManager:
|
|
58
|
-
@staticmethod
|
|
59
|
-
def core_manager_namespaces() -> CoreManagerNamespaces:
|
|
60
|
-
return {
|
|
61
|
-
"coreManagerSubject": "coreManager.subscriber",
|
|
62
|
-
"coreManagerRpc": "coreManager.rpc",
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@staticmethod
|
|
66
|
-
def device_manager_namespaces() -> DeviceManagerNamespaces:
|
|
67
|
-
return {
|
|
68
|
-
"deviceManagerSubject": "deviceManager.subscriber",
|
|
69
|
-
"deviceManagerRpc": "deviceManager.rpc",
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@staticmethod
|
|
73
|
-
def frame_worker_namespaces(camera_id: str) -> FrameWorkerNamespaces:
|
|
74
|
-
return {
|
|
75
|
-
"frameWorkerChildRpc": f"camera.{camera_id}.frameWorker.child.rpc",
|
|
76
|
-
"frameWorkerChild": f"camera.{camera_id}.frameWorker.child",
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
@staticmethod
|
|
80
|
-
def plugin_namespaces(plugin_id: str) -> PluginNamespaces:
|
|
81
|
-
return {
|
|
82
|
-
"pluginDeviceManagerSubject": f"plugin.{plugin_id}.deviceManager.subscriber",
|
|
83
|
-
"pluginChildRpc": f"plugin.{plugin_id}.child.rpc",
|
|
84
|
-
"pluginChild": f"plugin.{plugin_id}.child",
|
|
85
|
-
"pluginStorageRpc": f"plugin.{plugin_id}.storage.rpc",
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@staticmethod
|
|
89
|
-
def camera_namespaces(camera_id: str) -> CameraNamespaces:
|
|
90
|
-
return {
|
|
91
|
-
"cameraSubject": f"camera.{camera_id}.subscriber",
|
|
92
|
-
"cameraMotionFrameSubject": f"camera.{camera_id}.motionFrame.subscriber",
|
|
93
|
-
"cameraControllerRpc": f"camera.{camera_id}.controller.rpc",
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
@staticmethod
|
|
97
|
-
def plugin_camera_namespaces(plugin_id: str, camera_id: str) -> PluginCameraNamespaces:
|
|
98
|
-
return {
|
|
99
|
-
"cameraInterfacesRpc": f"plugin.{plugin_id}.camera.{camera_id}.cameraInterfaces.rpc",
|
|
100
|
-
"cameraStorageRpc": f"plugin.{plugin_id}.camera.{camera_id}.cameraStorage.rpc",
|
|
101
|
-
}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import importlib.util
|
|
2
|
-
import os
|
|
3
|
-
import sys
|
|
4
|
-
from types import ModuleType
|
|
5
|
-
from typing import Any, Optional, cast
|
|
6
|
-
|
|
7
|
-
from _camera_ui_tools.camera_ui_common.logger_service.logger import LoggerService
|
|
8
|
-
from _camera_ui_tools.camera_ui_rpc_client import ClientInstance
|
|
9
|
-
from _camera_ui_tools.camera_ui_rpc_client.utils.rpc import rpc
|
|
10
|
-
from _camera_ui_tools.camera_ui_types import (
|
|
11
|
-
AudioDetectionPluginResponse,
|
|
12
|
-
AudioMetadata,
|
|
13
|
-
CameraDevice,
|
|
14
|
-
CuiPlugin,
|
|
15
|
-
CuiPluginCapability,
|
|
16
|
-
ImageMetadata,
|
|
17
|
-
JsonSchema,
|
|
18
|
-
MotionDetectionPluginResponse,
|
|
19
|
-
ObjectDetectionPluginResponse,
|
|
20
|
-
)
|
|
21
|
-
from plugins.runtime.python.namespaces import NamespaceManager, PluginNamespaces
|
|
22
|
-
from plugins.runtime.python.plugin_api import PluginAPI
|
|
23
|
-
from plugins.runtime.python.storage_controller import StorageController
|
|
24
|
-
from plugins.runtime.python.typings import PluginInfo
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class Plugin(CuiPlugin):
|
|
28
|
-
def __init__(self, proxy: ClientInstance, api: PluginAPI, plugin_info: PluginInfo, logger: LoggerService):
|
|
29
|
-
self.proxy: ClientInstance = proxy
|
|
30
|
-
self.api: PluginAPI = api
|
|
31
|
-
self.plugin_info: PluginInfo = plugin_info
|
|
32
|
-
self.logger: LoggerService = logger
|
|
33
|
-
|
|
34
|
-
self.plugin: Optional[CuiPlugin] = None
|
|
35
|
-
self.namespaces: PluginNamespaces = NamespaceManager.plugin_namespaces(self.plugin_info["id"])
|
|
36
|
-
|
|
37
|
-
async def load(self) -> None:
|
|
38
|
-
plugin_constructor = self.load_plugin()
|
|
39
|
-
storage_controller = cast(StorageController, self.api.storage_controller)
|
|
40
|
-
plugin_storage = await storage_controller.create_storage("plugin")
|
|
41
|
-
self.plugin = cast(CuiPlugin, plugin_constructor(self.logger, self.api, plugin_storage))
|
|
42
|
-
await self.proxy.register_rpc_handler(self.namespaces["pluginChildRpc"], self)
|
|
43
|
-
|
|
44
|
-
@rpc(public=True)
|
|
45
|
-
async def configureCameras(self, camera_devices: list[CameraDevice]) -> None:
|
|
46
|
-
if not self.plugin:
|
|
47
|
-
raise Exception("Plugin not loaded")
|
|
48
|
-
|
|
49
|
-
await self.plugin.configureCameras(camera_devices)
|
|
50
|
-
|
|
51
|
-
@rpc(public=True)
|
|
52
|
-
async def getCapabilities(self) -> list[CuiPluginCapability]:
|
|
53
|
-
if not self.plugin:
|
|
54
|
-
raise Exception("Plugin not loaded")
|
|
55
|
-
|
|
56
|
-
return await self.plugin.getCapabilities()
|
|
57
|
-
|
|
58
|
-
@rpc(public=True)
|
|
59
|
-
async def interfaceSchema(self) -> list[JsonSchema] | None:
|
|
60
|
-
if not self.plugin:
|
|
61
|
-
raise Exception("Plugin not loaded")
|
|
62
|
-
|
|
63
|
-
return await self.plugin.interfaceSchema()
|
|
64
|
-
|
|
65
|
-
@rpc(public=True)
|
|
66
|
-
async def detectAudio(
|
|
67
|
-
self, audio_data: bytes, metadata: AudioMetadata, config: dict[str, Any]
|
|
68
|
-
) -> Optional[AudioDetectionPluginResponse]:
|
|
69
|
-
if not self.plugin:
|
|
70
|
-
raise Exception("Plugin not loaded")
|
|
71
|
-
|
|
72
|
-
return await self.plugin.detectAudio(audio_data, metadata, config)
|
|
73
|
-
|
|
74
|
-
@rpc(public=True)
|
|
75
|
-
async def detectMotion(
|
|
76
|
-
self, video_data: bytes, config: dict[str, Any]
|
|
77
|
-
) -> Optional[MotionDetectionPluginResponse]:
|
|
78
|
-
if not self.plugin:
|
|
79
|
-
raise Exception("Plugin not loaded")
|
|
80
|
-
|
|
81
|
-
return await self.plugin.detectMotion(video_data, config)
|
|
82
|
-
|
|
83
|
-
@rpc(public=True)
|
|
84
|
-
async def detectObjects(
|
|
85
|
-
self, image_data: bytes, metadata: ImageMetadata, config: dict[str, Any]
|
|
86
|
-
) -> Optional[ObjectDetectionPluginResponse]:
|
|
87
|
-
if not self.plugin:
|
|
88
|
-
raise Exception("Plugin not loaded")
|
|
89
|
-
|
|
90
|
-
return await self.plugin.detectObjects(image_data, metadata, config)
|
|
91
|
-
|
|
92
|
-
def load_plugin(self) -> Any:
|
|
93
|
-
module_path = os.environ.get("MODULE_PATH")
|
|
94
|
-
if not module_path:
|
|
95
|
-
raise Exception("MODULE_PATH environment variable not set")
|
|
96
|
-
|
|
97
|
-
if not os.path.exists(module_path):
|
|
98
|
-
raise Exception(f"Module path does not exist: {module_path}")
|
|
99
|
-
|
|
100
|
-
spec = importlib.util.spec_from_file_location("plugin_module", module_path)
|
|
101
|
-
if spec is None:
|
|
102
|
-
raise Exception(f"Could not load module from '{module_path}'.")
|
|
103
|
-
|
|
104
|
-
module = importlib.util.module_from_spec(spec)
|
|
105
|
-
sys.modules["plugin_module"] = module
|
|
106
|
-
|
|
107
|
-
if spec.loader is None:
|
|
108
|
-
raise Exception(f"Could not load module from '{module_path}'.")
|
|
109
|
-
|
|
110
|
-
spec.loader.exec_module(module)
|
|
111
|
-
plugin_constructor = self.find_plugin_constructor(module)
|
|
112
|
-
# self.check_plugin_class_methods(plugin_constructor)
|
|
113
|
-
|
|
114
|
-
return plugin_constructor
|
|
115
|
-
|
|
116
|
-
def find_plugin_constructor(self, module: ModuleType) -> Any:
|
|
117
|
-
if hasattr(module, "__main__"):
|
|
118
|
-
main_func = module.__main__
|
|
119
|
-
if callable(main_func):
|
|
120
|
-
plugin_base_class = cast(CuiPlugin, main_func())
|
|
121
|
-
if isinstance(plugin_base_class, type):
|
|
122
|
-
return plugin_base_class
|
|
123
|
-
else:
|
|
124
|
-
raise Exception("Plugin's __main__ must return a plugin constructor.")
|
|
125
|
-
else:
|
|
126
|
-
raise Exception("Plugin's __main__ is not callable.")
|
|
127
|
-
|
|
128
|
-
else:
|
|
129
|
-
raise Exception("Plugin does not have a __main__ function.")
|
|
130
|
-
|
|
131
|
-
def check_plugin_class_methods(self, cls: Any) -> None:
|
|
132
|
-
base_plugin_methods = {
|
|
133
|
-
name
|
|
134
|
-
for name in dir(CuiPlugin)
|
|
135
|
-
if callable(getattr(CuiPlugin, name)) and not name.startswith("__")
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
for method_name in base_plugin_methods:
|
|
139
|
-
if not hasattr(cls, method_name):
|
|
140
|
-
raise Exception(f"Method '{method_name}' is not implemented in plugin.")
|
|
141
|
-
|
|
142
|
-
cls_method = getattr(cls, method_name)
|
|
143
|
-
if not callable(cls_method):
|
|
144
|
-
raise Exception(f"Method '{method_name}' is not callable.")
|
|
145
|
-
|
|
146
|
-
# base_method = getattr(CuiPlugin, method_name)
|
|
147
|
-
# cls_signature = inspect.signature(cls_method)
|
|
148
|
-
# base_signature = inspect.signature(base_method)
|
|
149
|
-
|
|
150
|
-
# if cls_signature.return_annotation != base_signature.return_annotation:
|
|
151
|
-
# raise Exception(
|
|
152
|
-
# f"Method '{method_name}' has a different return type than the one in CuiPlugin. "
|
|
153
|
-
# f"Expected: {base_signature.return_annotation}, "
|
|
154
|
-
# f"Actual: {cls_signature.return_annotation}"
|
|
155
|
-
# )
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
from typing import Any, Literal
|
|
2
|
-
|
|
3
|
-
from lmdbm import Lmdb
|
|
4
|
-
from pyeecui.asyncio import AsyncIOEventEmitter
|
|
5
|
-
|
|
6
|
-
from _camera_ui_tools.camera_ui_common import LoggerService
|
|
7
|
-
from _camera_ui_tools.camera_ui_rpc_client import ClientInstance
|
|
8
|
-
from _camera_ui_tools.camera_ui_types import PluginAPI as PluginAPIInterface
|
|
9
|
-
from plugins.runtime.python.proxy.core_manager import CoreManagerProxy
|
|
10
|
-
from plugins.runtime.python.proxy.device_manager import DeviceManagerProxy
|
|
11
|
-
from plugins.runtime.python.storage_controller import StorageController
|
|
12
|
-
from plugins.runtime.python.typings import PluginInfo
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class PluginAPI(AsyncIOEventEmitter, PluginAPIInterface):
|
|
16
|
-
def __init__(
|
|
17
|
-
self,
|
|
18
|
-
proxy: ClientInstance,
|
|
19
|
-
plugin: PluginInfo,
|
|
20
|
-
storage_path: str,
|
|
21
|
-
logger: LoggerService,
|
|
22
|
-
plugin_db: Lmdb[Literal["config"], dict[str, Any]],
|
|
23
|
-
) -> None:
|
|
24
|
-
super().__init__()
|
|
25
|
-
|
|
26
|
-
self.storage_path = storage_path
|
|
27
|
-
self.storage_controller = StorageController(self, proxy, plugin, plugin_db)
|
|
28
|
-
self.core_manager = CoreManagerProxy(proxy, self, logger, plugin)
|
|
29
|
-
self.device_manager = DeviceManagerProxy(proxy, self, self.storage_controller, logger, plugin)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|