camera.ui3 0.0.30-alpha.0 → 0.0.30-alpha.3
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/@camera.ui.DuwfK59t.0.0.30-alpha.3.js +3 -0
- package/dist/interface/@tanstack.DBBaUHTS.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{@vee-validate.0Cv0x9aN.0.0.30-alpha.0.js → @vee-validate.BRR3_tWq.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/@vue.BeJw0wEm.0.0.30-alpha.3.js +17 -0
- package/dist/interface/{@vueform.Du_niMHk.0.0.30-alpha.0.js → @vueform.Dcx-RQUw.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{@vueuse.Dv9U068T.0.0.30-alpha.0.js → @vueuse.Sz46sDez.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/Account.hmetZWTc.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Adminpanel.DxC80W0K.0.0.30-alpha.3.js +2 -0
- package/dist/interface/Appearance.BHZdWQlZ.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Backup.petPSq60.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Camera.DS7gbgwV.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Cameras.eqceAkdR.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Camview.DumV6nmv.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Config.DQ5vyHcx.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Console.CWp-LL5w.0.0.30-alpha.3.js +4 -0
- package/dist/interface/FirstSteps.DR2B1Gmx.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{NewCamera.Kn9biZIb.0.0.30-alpha.0.js → NewCamera.CpENkWIP.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/Plugin.KK2gWYUL.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Plugins.Dy1rL-Pc.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Recordings.Bny11D38.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Recordings.IdGxswmI.0.0.30-alpha.3.js +1 -0
- package/dist/interface/Settings.D6l7BlOF.0.0.30-alpha.3.js +1 -0
- package/dist/interface/System.FIkCpF0A.0.0.30-alpha.3.js +4 -0
- package/dist/interface/User.By9sAd8k.0.0.30-alpha.3.js +1 -0
- package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.C7ZcC7dX.0.0.30-alpha.3.js +2 -0
- package/dist/interface/{VConsole.BT0UxZb1.0.0.30-alpha.0.js → VConsole.BG4nEIk8.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/VPlayer.CZqXCM-i.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{VPluginCard.Bz3GmzAE.0.0.30-alpha.0.js → VPluginCard.B_M3puzM.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{ace-builds.SRW0xGs1.0.0.30-alpha.0.js → ace-builds.D4S-MJ6b.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{apexcharts.BV8prH5x.0.0.30-alpha.0.js → apexcharts.u0duws01.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{dnd-core.BdsXoke-.0.0.30-alpha.0.js → dnd-core.C4232Xyz.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{draggabilly.D9j4BYFu.0.0.30-alpha.0.js → draggabilly.Xgwn1bT3.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{engine.io-client.di4Pt8W8.0.0.30-alpha.0.js → engine.io-client.CUastNh3.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{ev-emitter.Dxl4QoSg.0.0.30-alpha.0.js → ev-emitter.BYRnnQXb.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{fast-deep-equal.BUna8KlC.0.0.30-alpha.0.js → fast-deep-equal.CqwdqDxW.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{highlight.js.CMosnU3p.0.0.30-alpha.0.js → highlight.js.sNLmnsuC.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/index.html +34 -33
- package/dist/interface/{linkify-it.B9RFwlcp.0.0.30-alpha.0.js → linkify-it.8PrPWg7W.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/main.gxLiydtV.0.0.30-alpha.3.js +2 -0
- package/dist/interface/{markdown-it.DAiultxC.0.0.30-alpha.0.js → markdown-it.Q4_2MGLy.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{nprogress.C2KbBHcZ.0.0.30-alpha.0.js → nprogress.DQYtKLt9.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{pinia.DRjp4GU7.0.0.30-alpha.0.js → pinia.DcgsdRJU.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{plugins.Ur_7V4x8.0.0.30-alpha.0.js → plugins.DZjXmoDp.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{qrcode.DrYVb5am.0.0.30-alpha.0.js → qrcode.XqSuoGPb.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{react-dnd-touch-backend.ByHGbrKq.0.0.30-alpha.0.js → react-dnd-touch-backend.VzlzWkdX.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{rxjs.Dl5P76vZ.0.0.30-alpha.0.js → rxjs.CXnJywSk.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{socket.io-client.Cf7ABgrO.0.0.30-alpha.0.js → socket.io-client.DiiooL5k.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{socket.io-parser.DHnwqfTj.0.0.30-alpha.0.js → socket.io-parser.Dsh2ZviN.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/sw.js +1 -1
- package/dist/interface/{system.CRn9Cy3C.0.0.30-alpha.0.js → system.Bh4wNIkr.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{ui.C-XbEPHk.0.0.30-alpha.0.js → ui.B0YwbqBU.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{unidragger.zHlf1Df_.0.0.30-alpha.0.js → unidragger.DDL70rPA.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/utils.mAKpSMLY.0.0.30-alpha.3.js +1 -0
- package/dist/interface/{v-calendar.CapJoEkJ.0.0.30-alpha.0.js → v-calendar.C8Yj7x1Q.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vee-validate.DcgOEpak.0.0.30-alpha.0.js → vee-validate.BbcoErf-.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue-i18n.D2pqkMP3.0.0.30-alpha.0.js → vue-i18n.B7m8y9GA.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue-inline-svg.DorOTPIf.0.0.30-alpha.0.js → vue-inline-svg.DC2U7Qim.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue-router.BVs4qaVs.0.0.30-alpha.0.js → vue-router.B3QeItm5.0.0.30-alpha.3.js} +2 -2
- package/dist/interface/{vue3-apexcharts.CBV9x5vk.0.0.30-alpha.0.js → vue3-apexcharts.DVzl7xGy.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue3-dnd.CXMddGIZ.0.0.30-alpha.0.js → vue3-dnd.76cFMD9V.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vue3-toastify.DE7YmDSX.0.0.30-alpha.0.js → vue3-toastify.B-AJ7WuP.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/{vuetify.CYxxHEVN.0.0.30-alpha.0.js → vuetify.CYln2r6g.0.0.30-alpha.3.js} +1 -1
- package/dist/interface/zod.DnW1_kUe.0.0.30-alpha.3.js +1 -0
- package/dist/server/bin/cameraui.js +10 -7
- package/dist/server/bin/cameraui.js.map +1 -1
- package/dist/server/bin/fork.js +2 -2
- package/dist/server/bin/fork.js.map +1 -1
- package/dist/server/bin/installer/darwin.js +1 -1
- package/dist/server/bin/installer/darwin.js.map +1 -1
- package/dist/server/bin/installer/linux.js +1 -1
- package/dist/server/bin/installer/linux.js.map +1 -1
- package/dist/server/package.json +11 -15
- package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cameras.controller.js +1 -1
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/controllers/frameWorkers.controller.js +1 -1
- package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
- package/dist/server/src/api/controllers/plugins.controller.js +1 -2
- package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
- package/dist/server/src/api/controllers/system.controller.js +1 -3
- package/dist/server/src/api/controllers/system.controller.js.map +1 -1
- package/dist/server/src/api/controllers/users.controller.js +2 -2
- package/dist/server/src/api/controllers/users.controller.js.map +1 -1
- package/dist/server/src/api/database/constants.d.ts +8 -0
- package/dist/server/src/api/database/constants.js +9 -0
- package/dist/server/src/api/database/constants.js.map +1 -0
- package/dist/server/src/api/database/index.d.ts +0 -8
- package/dist/server/src/api/database/index.js +14 -21
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migration.js +5 -4
- package/dist/server/src/api/database/migration.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +6 -6
- package/dist/server/src/api/go2rtc/api/application.js +1 -1
- package/dist/server/src/api/go2rtc/api/application.js.map +1 -1
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/plugins/logger.plugin.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +71 -71
- package/dist/server/src/api/schemas/config.schema.d.ts +6 -6
- package/dist/server/src/api/schemas/go2rtc.schema.d.ts +98 -98
- package/dist/server/src/api/schemas/users.schema.d.ts +116 -116
- package/dist/server/src/api/services/auth.service.js +1 -1
- package/dist/server/src/api/services/auth.service.js.map +1 -1
- package/dist/server/src/api/services/backup.service.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.js +1 -1
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/system.service.js +1 -1
- package/dist/server/src/api/services/system.service.js.map +1 -1
- package/dist/server/src/api/services/users.service.js +1 -1
- package/dist/server/src/api/services/users.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +2 -2
- package/dist/server/src/api/types/index.js.map +1 -1
- package/dist/server/src/api/utils/cert.js.map +1 -1
- package/dist/server/src/api/websocket/index.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.js +1 -1
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/api.d.ts +1 -7
- package/dist/server/src/api.js.map +1 -1
- package/dist/server/src/camera/controller.d.ts +4 -6
- package/dist/server/src/camera/controller.js +5 -8
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/types.d.ts +140 -13
- package/dist/server/src/camera/types.js.map +1 -1
- package/dist/server/src/decoder/index.js.map +1 -1
- package/dist/server/src/decoder/types.d.ts +1 -18
- package/dist/server/src/decoder/worker.d.ts +3 -2
- package/dist/server/src/decoder/worker.js +10 -22
- package/dist/server/src/decoder/worker.js.map +1 -1
- package/dist/server/src/go2rtc/index.js +2 -3
- package/dist/server/src/go2rtc/index.js.map +1 -1
- package/dist/server/src/main.js +3 -3
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/nats/index.d.ts +3 -4
- package/dist/server/src/nats/index.js +1 -3
- package/dist/server/src/nats/index.js.map +1 -1
- package/dist/server/src/nats/proxy/cameraDevice.d.ts +2 -2
- package/dist/server/src/nats/proxy/coreManager.d.ts +4 -2
- package/dist/server/src/nats/proxy/coreManager.js +7 -0
- package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
- package/dist/server/src/nats/proxy/deviceManager.d.ts +5 -5
- package/dist/server/src/nats/proxy/deviceManager.js +4 -2
- package/dist/server/src/nats/proxy/deviceManager.js.map +1 -1
- package/dist/server/src/nats/server.js +2 -3
- package/dist/server/src/nats/server.js.map +1 -1
- package/dist/server/src/nats/types.d.ts +19 -32
- package/dist/server/src/nats/utils.d.ts +1 -1
- package/dist/server/src/nats/websocket.js.map +1 -1
- package/dist/server/src/plugins/index.js +11 -9
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/interfaces/base.d.ts +1 -1
- package/dist/server/src/plugins/plugin.d.ts +1 -1
- package/dist/server/src/plugins/plugin.js +4 -4
- package/dist/server/src/plugins/plugin.js.map +1 -1
- package/dist/server/src/plugins/types.d.ts +36 -3
- package/dist/server/src/plugins/types.js.map +1 -1
- package/dist/server/src/plugins/worker.js +7 -16
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/services/config/constants.js +2 -2
- package/dist/server/src/services/config/constants.js.map +1 -1
- package/dist/server/src/services/config/index.d.ts +2 -0
- package/dist/server/src/services/config/index.js +10 -2
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/services/logger/index.d.ts +4 -16
- package/dist/server/src/services/logger/index.js +4 -83
- package/dist/server/src/services/logger/index.js.map +1 -1
- package/dist/server/src/services/logger/types.d.ts +8 -0
- package/dist/server/src/services/logger/types.js +2 -0
- package/dist/server/src/services/logger/types.js.map +1 -0
- package/localdeps.txt +4 -0
- package/package.json +11 -15
- package/dist/interface/@tanstack.DYQ7Jj8U.0.0.30-alpha.0.js +0 -1
- package/dist/interface/@vue.CvjRlaU6.0.0.30-alpha.0.js +0 -17
- package/dist/interface/Account.Dm2FouAU.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Adminpanel.B2Aiobnt.0.0.30-alpha.0.js +0 -2
- package/dist/interface/Appearance.EfH0tMdM.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Backup.D8SRclhB.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Camera.D-cOf4sS.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Cameras.oolxbmXU.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Camview.BHw8Pe3v.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Config.DmPTI5iz.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Console.Dq4khHFF.0.0.30-alpha.0.js +0 -4
- package/dist/interface/FirstSteps.Bo467abx.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Plugin.BLTVcTt1.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Plugins.Cp8mK__o.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Recordings.B_JIFk_G.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Recordings.gMbvwmk_.0.0.30-alpha.0.js +0 -1
- package/dist/interface/Settings.EhHJjGrl.0.0.30-alpha.0.js +0 -1
- package/dist/interface/System.VodoK0U6.0.0.30-alpha.0.js +0 -4
- package/dist/interface/User.DpcN7DEC.0.0.30-alpha.0.js +0 -1
- package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.Br68bfQJ.0.0.30-alpha.0.js +0 -2
- package/dist/interface/VPlayer.DYua3Eh_.0.0.30-alpha.0.js +0 -1
- package/dist/interface/main.19pRAqPU.0.0.30-alpha.0.js +0 -4
- package/dist/interface/utils.BvINh1mj.0.0.30-alpha.0.js +0 -1
- package/dist/interface/zod.BaF2dDCd.0.0.30-alpha.0.js +0 -1
- package/dist/server/src/camera/device.d.ts +0 -29
- package/dist/server/src/camera/device.js +0 -20
- package/dist/server/src/camera/device.js.map +0 -1
- package/dist/server/src/camera/index.d.ts +0 -90
- package/dist/server/src/camera/index.js +0 -581
- package/dist/server/src/camera/index.js.map +0 -1
- package/dist/server/src/camera/interfaces/camera.d.ts +0 -10
- package/dist/server/src/camera/interfaces/camera.js +0 -23
- package/dist/server/src/camera/interfaces/camera.js.map +0 -1
- package/dist/server/src/camera/interfaces/prebuffer.d.ts +0 -11
- package/dist/server/src/camera/interfaces/prebuffer.js +0 -31
- package/dist/server/src/camera/interfaces/prebuffer.js.map +0 -1
- package/dist/server/src/camera/interfaces/ptz.d.ts +0 -13
- package/dist/server/src/camera/interfaces/ptz.js +0 -47
- package/dist/server/src/camera/interfaces/ptz.js.map +0 -1
- package/dist/server/src/camera/iou.d.ts +0 -2
- package/dist/server/src/camera/iou.js +0 -53
- package/dist/server/src/camera/iou.js.map +0 -1
- package/dist/server/src/camera/polygon.d.ts +0 -6
- package/dist/server/src/camera/polygon.js +0 -151
- package/dist/server/src/camera/polygon.js.map +0 -1
- package/dist/server/src/camera/streaming/peer-connection.d.ts +0 -55
- package/dist/server/src/camera/streaming/peer-connection.js +0 -203
- package/dist/server/src/camera/streaming/peer-connection.js.map +0 -1
- package/dist/server/src/camera/streaming/webrtc-connection.d.ts +0 -35
- package/dist/server/src/camera/streaming/webrtc-connection.js +0 -170
- package/dist/server/src/camera/streaming/webrtc-connection.js.map +0 -1
- package/dist/server/src/camera/streaming/werift-session.d.ts +0 -41
- package/dist/server/src/camera/streaming/werift-session.js +0 -179
- package/dist/server/src/camera/streaming/werift-session.js.map +0 -1
- package/dist/server/src/camera/videoFrame.d.ts +0 -24
- package/dist/server/src/camera/videoFrame.js +0 -104
- package/dist/server/src/camera/videoFrame.js.map +0 -1
- package/dist/server/src/index.d.ts +0 -18
- package/dist/server/src/index.js +0 -5
- package/dist/server/src/index.js.map +0 -1
- package/dist/server/src/nats/connection.d.ts +0 -17
- package/dist/server/src/nats/connection.js +0 -66
- package/dist/server/src/nats/connection.js.map +0 -1
- package/dist/server/src/nats/constants.d.ts +0 -1
- package/dist/server/src/nats/constants.js +0 -2
- package/dist/server/src/nats/constants.js.map +0 -1
- package/dist/server/src/nats/error.d.ts +0 -9
- package/dist/server/src/nats/error.js +0 -11
- package/dist/server/src/nats/error.js.map +0 -1
- package/dist/server/src/nats/messageQueue.d.ts +0 -20
- package/dist/server/src/nats/messageQueue.js +0 -132
- package/dist/server/src/nats/messageQueue.js.map +0 -1
- package/dist/server/src/nats/subscription.d.ts +0 -12
- package/dist/server/src/nats/subscription.js +0 -21
- package/dist/server/src/nats/subscription.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/child.d.ts +0 -1
- package/dist/server/src/polyglot/node/decoder/child.js +0 -644
- package/dist/server/src/polyglot/node/decoder/child.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +0 -24
- package/dist/server/src/polyglot/node/decoder/imageUtils.js +0 -205
- package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +0 -1
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +0 -144
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +0 -65
- package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
- package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +0 -106
- package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +0 -107
- package/dist/server/src/polyglot/node/plugins/cameraStorage.js +0 -292
- package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/child.d.ts +0 -28
- package/dist/server/src/polyglot/node/plugins/child.js +0 -222
- package/dist/server/src/polyglot/node/plugins/child.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/configService.d.ts +0 -104
- package/dist/server/src/polyglot/node/plugins/configService.js +0 -213
- package/dist/server/src/polyglot/node/plugins/configService.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/pluginApi.d.ts +0 -35
- package/dist/server/src/polyglot/node/plugins/pluginApi.js +0 -23
- package/dist/server/src/polyglot/node/plugins/pluginApi.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/pluginLogger.d.ts +0 -18
- package/dist/server/src/polyglot/node/plugins/pluginLogger.js +0 -89
- package/dist/server/src/polyglot/node/plugins/pluginLogger.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +0 -69
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +0 -423
- package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.d.ts +0 -40
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js +0 -105
- package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +0 -47
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +0 -164
- package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/schema.d.ts +0 -293
- package/dist/server/src/polyglot/node/plugins/schema.js +0 -740
- package/dist/server/src/polyglot/node/plugins/schema.js.map +0 -1
- package/dist/server/src/polyglot/node/plugins/storageController.d.ts +0 -30
- package/dist/server/src/polyglot/node/plugins/storageController.js +0 -40
- package/dist/server/src/polyglot/node/plugins/storageController.js.map +0 -1
- package/dist/server/src/polyglot/python/camera/interfaces/camera.py +0 -20
- package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +0 -28
- package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +0 -38
- package/dist/server/src/polyglot/python/camera/iou.py +0 -80
- package/dist/server/src/polyglot/python/camera/polygon.py +0 -173
- package/dist/server/src/polyglot/python/camera/video_frame.py +0 -188
- package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +0 -1200
- package/dist/server/src/polyglot/python/decoder/child.py +0 -882
- package/dist/server/src/polyglot/python/decoder/image_utils.py +0 -149
- package/dist/server/src/polyglot/python/decoder/typings.py +0 -99
- package/dist/server/src/polyglot/python/plugins/camera_storage.py +0 -391
- package/dist/server/src/polyglot/python/plugins/child.py +0 -394
- package/dist/server/src/polyglot/python/plugins/config_service.py +0 -187
- package/dist/server/src/polyglot/python/plugins/constants.py +0 -1
- package/dist/server/src/polyglot/python/plugins/message_queue.py +0 -182
- package/dist/server/src/polyglot/python/plugins/plugin_api.py +0 -34
- package/dist/server/src/polyglot/python/plugins/plugin_logger.py +0 -111
- package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +0 -1599
- package/dist/server/src/polyglot/python/plugins/proxy/core_manager.py +0 -145
- package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +0 -226
- package/dist/server/src/polyglot/python/plugins/schema.py +0 -181
- package/dist/server/src/polyglot/python/plugins/storage_controller.py +0 -58
- package/dist/server/src/polyglot/python/plugins/typings.py +0 -253
- package/dist/server/src/polyglot/python/utilities/connection.py +0 -86
- package/dist/server/src/polyglot/python/utilities/json_lmdb.py +0 -19
- package/dist/server/src/polyglot/python/utilities/object_path.py +0 -195
- package/dist/server/src/polyglot/python/utilities/packer.py +0 -11
- package/dist/server/src/polyglot/python/utilities/subscriptions.py +0 -22
- package/dist/server/src/polyglot/python/utilities/task.py +0 -35
- package/dist/server/src/polyglot/python/utilities/thread.py +0 -10
- package/dist/server/src/polyglot/python/utilities/utils.py +0 -73
- package/dist/server/src/utils/ffmpeg.d.ts +0 -2
- package/dist/server/src/utils/ffmpeg.js +0 -61
- package/dist/server/src/utils/ffmpeg.js.map +0 -1
- package/dist/server/src/utils/network.d.ts +0 -12
- package/dist/server/src/utils/network.js +0 -92
- package/dist/server/src/utils/network.js.map +0 -1
- package/dist/server/src/utils/npm.d.ts +0 -4
- package/dist/server/src/utils/npm.js +0 -128
- package/dist/server/src/utils/npm.js.map +0 -1
- package/dist/server/src/utils/packer.d.ts +0 -2
- package/dist/server/src/utils/packer.js +0 -17
- package/dist/server/src/utils/packer.js.map +0 -1
- package/dist/server/src/utils/pythonInstaller.d.ts +0 -48
- package/dist/server/src/utils/pythonInstaller.js +0 -494
- package/dist/server/src/utils/pythonInstaller.js.map +0 -1
- package/dist/server/src/utils/reader.d.ts +0 -5
- package/dist/server/src/utils/reader.js +0 -41
- package/dist/server/src/utils/reader.js.map +0 -1
- package/dist/server/src/utils/subscribed.d.ts +0 -9
- package/dist/server/src/utils/subscribed.js +0 -17
- package/dist/server/src/utils/subscribed.js.map +0 -1
- package/dist/server/src/utils/utils.d.ts +0 -10
- package/dist/server/src/utils/utils.js +0 -165
- package/dist/server/src/utils/utils.js.map +0 -1
- /package/dist/interface/{@babel.l0sNRNKZ.0.0.30-alpha.0.js → @babel.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@intlify.YW_pt133.0.0.30-alpha.0.js → @intlify.YW_pt133.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@mdi.DnMbZhUH.0.0.30-alpha.0.js → @mdi.DnMbZhUH.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@popperjs.BQBsAJpH.0.0.30-alpha.0.js → @popperjs.BQBsAJpH.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.30-alpha.0.js → @react-dnd.CcwRs9xb.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@socket.io.Dkula2eQ.0.0.30-alpha.0.js → @socket.io.Dkula2eQ.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{@xterm.CnserxUX.0.0.30-alpha.0.js → @xterm.-WsTvn6n.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/assets/{@vueform.0.0.30-alpha.0.h7tNX9p6.css → @vueform.0.0.30-alpha.3.h7tNX9p6.css} +0 -0
- /package/dist/interface/assets/{@xterm.0.0.30-alpha.0.CGrrDQr5.css → @xterm.0.0.30-alpha.3.CGrrDQr5.css} +0 -0
- /package/dist/interface/assets/{Account.0.0.30-alpha.0.Ce3OmKrC.css → Account.0.0.30-alpha.3.Ce3OmKrC.css} +0 -0
- /package/dist/interface/assets/{Adminpanel.0.0.30-alpha.0.CXsTAXPL.css → Adminpanel.0.0.30-alpha.3.CXsTAXPL.css} +0 -0
- /package/dist/interface/assets/{Backup.0.0.30-alpha.0.BIwaSlv3.css → Backup.0.0.30-alpha.3.BIwaSlv3.css} +0 -0
- /package/dist/interface/assets/{Camera.0.0.30-alpha.0.BDtUJ-lA.css → Camera.0.0.30-alpha.3.BDtUJ-lA.css} +0 -0
- /package/dist/interface/assets/{Cameras.0.0.30-alpha.0.Djx0F2MM.css → Cameras.0.0.30-alpha.3.Djx0F2MM.css} +0 -0
- /package/dist/interface/assets/{Camview.0.0.30-alpha.0.Ce_V-Nxj.css → Camview.0.0.30-alpha.3.Ce_V-Nxj.css} +0 -0
- /package/dist/interface/assets/{Config.0.0.30-alpha.0.k4QpWumg.css → Config.0.0.30-alpha.3.k4QpWumg.css} +0 -0
- /package/dist/interface/assets/{Console.0.0.30-alpha.0.DWrfRWs9.css → Console.0.0.30-alpha.3.DWrfRWs9.css} +0 -0
- /package/dist/interface/assets/{FirstSteps.0.0.30-alpha.0.B3-pv8-a.css → FirstSteps.0.0.30-alpha.3.B3-pv8-a.css} +0 -0
- /package/dist/interface/assets/{NewCamera.0.0.30-alpha.0.DJ3tUBT_.css → NewCamera.0.0.30-alpha.3.DJ3tUBT_.css} +0 -0
- /package/dist/interface/assets/{Plugin.0.0.30-alpha.0.BtRA6zDt.css → Plugin.0.0.30-alpha.3.BtRA6zDt.css} +0 -0
- /package/dist/interface/assets/{Plugins.0.0.30-alpha.0.Cwu0aGUO.css → Plugins.0.0.30-alpha.3.Cwu0aGUO.css} +0 -0
- /package/dist/interface/assets/{Settings.0.0.30-alpha.0.DC_-E3CR.css → Settings.0.0.30-alpha.3.DC_-E3CR.css} +0 -0
- /package/dist/interface/assets/{User.0.0.30-alpha.0.DPDcJbx8.css → User.0.0.30-alpha.3.DPDcJbx8.css} +0 -0
- /package/dist/interface/assets/{VConsole.0.0.30-alpha.0.BZT1WyS-.css → VConsole.0.0.30-alpha.3.BZT1WyS-.css} +0 -0
- /package/dist/interface/assets/{VPlayer.0.0.30-alpha.0.CZXlTn4I.css → VPlayer.0.0.30-alpha.3.CZXlTn4I.css} +0 -0
- /package/dist/interface/assets/{VPluginCard.0.0.30-alpha.0.CIL48ca_.css → VPluginCard.0.0.30-alpha.3.CIL48ca_.css} +0 -0
- /package/dist/interface/assets/{highlight.0.0.30-alpha.0.DgoK_Xib.css → highlight.0.0.30-alpha.3.DgoK_Xib.css} +0 -0
- /package/dist/interface/assets/{logo-256.0.0.30-alpha.0.BCQk9H1-.png → logo-256.0.0.30-alpha.3.BCQk9H1-.png} +0 -0
- /package/dist/interface/assets/{logo-512.0.0.30-alpha.0.DLKVOU2S.png → logo-512.0.0.30-alpha.3.DLKVOU2S.png} +0 -0
- /package/dist/interface/assets/{logo.0.0.30-alpha.0.DmEiRk0z.png → logo.0.0.30-alpha.3.DmEiRk0z.png} +0 -0
- /package/dist/interface/assets/{main.0.0.30-alpha.0.BOf8IWhK.css → main.0.0.30-alpha.3.BOf8IWhK.css} +0 -0
- /package/dist/interface/assets/{mode-json.0.0.30-alpha.0.Br7xisR1.js → mode-json.0.0.30-alpha.3.Br7xisR1.js} +0 -0
- /package/dist/interface/assets/{mode-yaml.0.0.30-alpha.0.CIYL8U3d.js → mode-yaml.0.0.30-alpha.3.CIYL8U3d.js} +0 -0
- /package/dist/interface/assets/{v-calendar.0.0.30-alpha.0.CtSuDYZU.css → v-calendar.0.0.30-alpha.3.CtSuDYZU.css} +0 -0
- /package/dist/interface/assets/{vue3-toastify.0.0.30-alpha.0.DTY1DMRs.css → vue3-toastify.0.0.30-alpha.3.DTY1DMRs.css} +0 -0
- /package/dist/interface/assets/{vuetify.0.0.30-alpha.0.Cd1awv3t.css → vuetify.0.0.30-alpha.3.Cd1awv3t.css} +0 -0
- /package/dist/interface/{axios.C-n2IhIP.0.0.30-alpha.0.js → axios.C-n2IhIP.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{compare-versions.DqEOhma6.0.0.30-alpha.0.js → compare-versions.DqEOhma6.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{dijkstrajs.D_NXgYpA.0.0.30-alpha.0.js → dijkstrajs.D_NXgYpA.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.30-alpha.0.js → engine.io-parser.BiEtp6m2.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{entities.C20TfXL6.0.0.30-alpha.0.js → entities.C20TfXL6.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{get-size.D1dS-IaP.0.0.30-alpha.0.js → get-size.D1dS-IaP.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{mdurl.k9Sl0PQj.0.0.30-alpha.0.js → mdurl.k9Sl0PQj.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{punycode.js.Dj65hjkv.0.0.30-alpha.0.js → punycode.js.Dj65hjkv.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{redux.CuxFRhX_.0.0.30-alpha.0.js → redux.CuxFRhX_.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{tslib.9k7AwCpt.0.0.30-alpha.0.js → tslib.9k7AwCpt.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{uc.micro.kMc2yuuw.0.0.30-alpha.0.js → uc.micro.kMc2yuuw.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{uuid.DvF23Exx.0.0.30-alpha.0.js → uuid.DvF23Exx.0.0.30-alpha.3.js} +0 -0
- /package/dist/interface/{vue.l0sNRNKZ.0.0.30-alpha.0.js → vue.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
import importlib.util
|
|
3
|
-
import inspect
|
|
4
|
-
import os
|
|
5
|
-
import signal
|
|
6
|
-
import sys
|
|
7
|
-
import traceback
|
|
8
|
-
from asyncio import AbstractEventLoop
|
|
9
|
-
from contextlib import suppress
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
from types import ModuleType
|
|
12
|
-
from typing import Any, Literal, Optional, cast
|
|
13
|
-
|
|
14
|
-
from camera_ui_types import BasePlugin, CameraDevice
|
|
15
|
-
from decoder.typings import AuthConfig
|
|
16
|
-
from lmdbm import Lmdb
|
|
17
|
-
from message_queue import MessageQueue
|
|
18
|
-
from nats.aio.msg import Msg
|
|
19
|
-
from plugin_api import PluginAPI
|
|
20
|
-
from plugin_logger import PluginLogger
|
|
21
|
-
from proxy.camera_device import CameraDeviceProxy
|
|
22
|
-
from typings import (
|
|
23
|
-
PLUGIN_COMMAND,
|
|
24
|
-
PLUGIN_STATUS,
|
|
25
|
-
DeserializedError,
|
|
26
|
-
ProcessLoadMessage,
|
|
27
|
-
ProcessMessage,
|
|
28
|
-
ProcessResponse,
|
|
29
|
-
ProxyMessageStructure,
|
|
30
|
-
)
|
|
31
|
-
from utilities.connection import ProxyConnection
|
|
32
|
-
from utilities.json_lmdb import JsonLmdb
|
|
33
|
-
from utilities.packer import unpack
|
|
34
|
-
from utilities.subscriptions import ProxySubscription
|
|
35
|
-
from utilities.task import TaskSet
|
|
36
|
-
|
|
37
|
-
if sys.platform == "win32":
|
|
38
|
-
import ctypes
|
|
39
|
-
|
|
40
|
-
def force_exit():
|
|
41
|
-
kernel32 = ctypes.windll.kernel32
|
|
42
|
-
kernel32.TerminateProcess(kernel32.GetCurrentProcess(), 1)
|
|
43
|
-
else:
|
|
44
|
-
|
|
45
|
-
def force_exit():
|
|
46
|
-
os.kill(os.getpid(), signal.SIGKILL)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def find_plugin_constructor(module: ModuleType) -> Any:
|
|
50
|
-
if hasattr(module, "__main__"):
|
|
51
|
-
main_func = module.__main__
|
|
52
|
-
if callable(main_func):
|
|
53
|
-
plugin_base_class: BasePlugin = main_func()
|
|
54
|
-
if isinstance(plugin_base_class, type):
|
|
55
|
-
return plugin_base_class
|
|
56
|
-
else:
|
|
57
|
-
raise Exception("Plugin's __main__ must return a plugin constructor.")
|
|
58
|
-
else:
|
|
59
|
-
raise Exception("Plugin's __main__ is not callable.")
|
|
60
|
-
|
|
61
|
-
else:
|
|
62
|
-
raise Exception("Plugin does not have a __main__ function.")
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def check_plugin_class_methods(cls: Any) -> None:
|
|
66
|
-
base_plugin_methods = {
|
|
67
|
-
name for name in dir(BasePlugin) if callable(getattr(BasePlugin, name)) and not name.startswith("__")
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
for method_name in base_plugin_methods:
|
|
71
|
-
if not hasattr(cls, method_name):
|
|
72
|
-
raise Exception(f"Method '{method_name}' is not implemented in plugin.")
|
|
73
|
-
|
|
74
|
-
cls_method = getattr(cls, method_name)
|
|
75
|
-
if not callable(cls_method):
|
|
76
|
-
raise Exception(f"Method '{method_name}' is not callable.")
|
|
77
|
-
|
|
78
|
-
# base_method = getattr(BasePlugin, method_name)
|
|
79
|
-
# cls_signature = inspect.signature(cls_method)
|
|
80
|
-
# base_signature = inspect.signature(base_method)
|
|
81
|
-
|
|
82
|
-
# if cls_signature.return_annotation != base_signature.return_annotation:
|
|
83
|
-
# raise Exception(
|
|
84
|
-
# f"Method '{method_name}' has a different return type than the one in BasePlugin. "
|
|
85
|
-
# f"Expected: {base_signature.return_annotation}, "
|
|
86
|
-
# f"Actual: {cls_signature.return_annotation}"
|
|
87
|
-
# )
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
class PluginChild:
|
|
91
|
-
def __init__(self) -> None:
|
|
92
|
-
self.proxy_endpoints = [endpoint for endpoint in os.environ["PROXY_ENDPOINTS"].split(",")]
|
|
93
|
-
|
|
94
|
-
self.auth: AuthConfig = {
|
|
95
|
-
"user": os.environ["PROXY_USER"],
|
|
96
|
-
"password": os.environ["PROXY_PASSWORD"],
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
del os.environ["PROXY_USER"]
|
|
100
|
-
del os.environ["PROXY_PASSWORD"]
|
|
101
|
-
del os.environ["PROXY_ENDPOINTS"]
|
|
102
|
-
|
|
103
|
-
self.display_name = sys.argv[1] if len(sys.argv) > 1 else "PluginChild"
|
|
104
|
-
self.logger = PluginLogger(self.display_name, os.environ["LOGGER_DISABLE_TIMESTAMPS"] == "true")
|
|
105
|
-
self.plugin_db: Optional[Lmdb[Literal["config"], dict[str, Any]]] = None
|
|
106
|
-
|
|
107
|
-
self.subject = f"{os.environ['WORKER_ID']}.ipc.subscriber"
|
|
108
|
-
self.plugin_subject = f"{os.environ['PLUGIN_ID']}.child"
|
|
109
|
-
self.target_subject = f"{os.environ['WORKER_ID']}.ipc.publisher"
|
|
110
|
-
|
|
111
|
-
self.publisher: Optional[ProxyConnection] = None
|
|
112
|
-
self.subscriber: Optional[ProxySubscription] = None
|
|
113
|
-
self.plugin_subscriber: Optional[ProxySubscription] = None
|
|
114
|
-
|
|
115
|
-
self.tasks: TaskSet = TaskSet(f"{self.display_name} PluginChild")
|
|
116
|
-
self.message_queue: Optional[MessageQueue] = None
|
|
117
|
-
|
|
118
|
-
self.api: Optional[PluginAPI] = None
|
|
119
|
-
self.plugin: Optional[BasePlugin] = None
|
|
120
|
-
|
|
121
|
-
self.stopped = False
|
|
122
|
-
self.closed = False
|
|
123
|
-
|
|
124
|
-
async def run(self):
|
|
125
|
-
try:
|
|
126
|
-
self.shutdown_event = asyncio.Event()
|
|
127
|
-
self.setup_signal_handlers()
|
|
128
|
-
await self.init()
|
|
129
|
-
await self.shutdown_event.wait()
|
|
130
|
-
except asyncio.CancelledError:
|
|
131
|
-
pass
|
|
132
|
-
|
|
133
|
-
async def init(self) -> None:
|
|
134
|
-
servers = [endpoint for endpoint in self.proxy_endpoints if endpoint.startswith("nats://")]
|
|
135
|
-
|
|
136
|
-
self.publisher = ProxyConnection(self.subject, servers, self.auth)
|
|
137
|
-
await self.publisher.connect()
|
|
138
|
-
|
|
139
|
-
self.subscriber = await self.publisher.subscribe(subject=self.subject)
|
|
140
|
-
self.subscriber.on("message", self.on_worker_message)
|
|
141
|
-
|
|
142
|
-
self.plugin_subscriber = await self.publisher.subscribe(subject=self.plugin_subject)
|
|
143
|
-
self.message_queue = MessageQueue(
|
|
144
|
-
self.logger,
|
|
145
|
-
self.publisher,
|
|
146
|
-
self.plugin_subscriber,
|
|
147
|
-
self.request_handler,
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
await self.send_message({"type": PLUGIN_STATUS.READY.value})
|
|
151
|
-
|
|
152
|
-
async def start(self, data: ProcessLoadMessage) -> None:
|
|
153
|
-
storage_path = data["storage"]["storagePath"]
|
|
154
|
-
config_file = data["storage"]["configFile"]
|
|
155
|
-
plugin_info = data["plugin"]
|
|
156
|
-
cameras = data["cameras"]
|
|
157
|
-
|
|
158
|
-
db_path = Path(storage_path) / "volume"
|
|
159
|
-
Path(db_path).mkdir(parents=True, exist_ok=True)
|
|
160
|
-
|
|
161
|
-
self.plugin_db = JsonLmdb.open(file=str(db_path), flag="c")
|
|
162
|
-
|
|
163
|
-
config: Any = self.plugin_db.get("config")
|
|
164
|
-
if config is None:
|
|
165
|
-
self.plugin_db.update({"config": {}})
|
|
166
|
-
|
|
167
|
-
self.api = PluginAPI(
|
|
168
|
-
plugin_info,
|
|
169
|
-
storage_path,
|
|
170
|
-
config_file,
|
|
171
|
-
self.logger,
|
|
172
|
-
self.proxy_endpoints,
|
|
173
|
-
self.auth,
|
|
174
|
-
self.plugin_db,
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
plugin_constructor = self.load_plugin()
|
|
178
|
-
self.plugin = cast(BasePlugin, plugin_constructor(self.logger, self.api))
|
|
179
|
-
|
|
180
|
-
await asyncio.gather(
|
|
181
|
-
self.api.core_manager.init(),
|
|
182
|
-
self.api.device_manager.init(),
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
cameras_devices = [
|
|
186
|
-
CameraDeviceProxy(
|
|
187
|
-
self.api,
|
|
188
|
-
self.logger,
|
|
189
|
-
camera,
|
|
190
|
-
plugin_info,
|
|
191
|
-
self.proxy_endpoints,
|
|
192
|
-
self.auth,
|
|
193
|
-
)
|
|
194
|
-
for camera in cameras
|
|
195
|
-
]
|
|
196
|
-
|
|
197
|
-
await asyncio.gather(*(camera_device.init() for camera_device in cameras_devices))
|
|
198
|
-
|
|
199
|
-
self.api.device_manager.configure_cameras(cameras_devices)
|
|
200
|
-
self.plugin.configure_cameras(cast(list[CameraDevice], cameras_devices))
|
|
201
|
-
|
|
202
|
-
await self.send_message({"type": PLUGIN_STATUS.STARTED.value})
|
|
203
|
-
|
|
204
|
-
self.api.emit("finishLaunching")
|
|
205
|
-
|
|
206
|
-
async def stop(self) -> None:
|
|
207
|
-
if self.stopped:
|
|
208
|
-
return
|
|
209
|
-
|
|
210
|
-
self.stopped = True
|
|
211
|
-
|
|
212
|
-
if self.api:
|
|
213
|
-
self.api.emit("shutdown")
|
|
214
|
-
|
|
215
|
-
if self.message_queue:
|
|
216
|
-
self.message_queue.abort_queue()
|
|
217
|
-
|
|
218
|
-
if self.publisher:
|
|
219
|
-
with suppress(Exception):
|
|
220
|
-
await self.publisher.close()
|
|
221
|
-
|
|
222
|
-
if self.plugin_db:
|
|
223
|
-
await asyncio.sleep(0.5)
|
|
224
|
-
with suppress(Exception):
|
|
225
|
-
self.plugin_db.close()
|
|
226
|
-
|
|
227
|
-
self.shutdown_event.set()
|
|
228
|
-
|
|
229
|
-
def load_plugin(self) -> Any:
|
|
230
|
-
module_path = os.environ.get("MODULE_PATH")
|
|
231
|
-
|
|
232
|
-
spec = importlib.util.spec_from_file_location("plugin_module", module_path)
|
|
233
|
-
if spec is None:
|
|
234
|
-
raise Exception(f"Could not load module from '{module_path}'.")
|
|
235
|
-
|
|
236
|
-
module = importlib.util.module_from_spec(spec)
|
|
237
|
-
sys.modules["plugin_module"] = module
|
|
238
|
-
|
|
239
|
-
if spec.loader is None:
|
|
240
|
-
raise Exception(f"Could not load module from '{module_path}'.")
|
|
241
|
-
|
|
242
|
-
spec.loader.exec_module(module)
|
|
243
|
-
|
|
244
|
-
plugin_constructor = find_plugin_constructor(module)
|
|
245
|
-
|
|
246
|
-
check_plugin_class_methods(plugin_constructor)
|
|
247
|
-
|
|
248
|
-
return plugin_constructor
|
|
249
|
-
|
|
250
|
-
async def send_message(self, message: ProcessResponse) -> None:
|
|
251
|
-
if not self.publisher:
|
|
252
|
-
raise Exception("Publisher is not initialized")
|
|
253
|
-
|
|
254
|
-
await self.publisher.publish(self.target_subject, message)
|
|
255
|
-
|
|
256
|
-
async def request_handler(self, message: ProxyMessageStructure) -> None:
|
|
257
|
-
if not self.message_queue:
|
|
258
|
-
raise Exception("Message queue not initialized")
|
|
259
|
-
|
|
260
|
-
reply = message.copy()
|
|
261
|
-
reply["type"] = "reply"
|
|
262
|
-
|
|
263
|
-
try:
|
|
264
|
-
if not self.plugin or not self.api:
|
|
265
|
-
raise Exception("Plugin not initialized")
|
|
266
|
-
|
|
267
|
-
fn = message["fn"]
|
|
268
|
-
args = message["args"]
|
|
269
|
-
camera_id = message.get("cameraId", None)
|
|
270
|
-
camera_storage = self.api.storage_controller.get_camera_storage(camera_id or "")
|
|
271
|
-
|
|
272
|
-
if hasattr(self.plugin, fn) and callable(getattr(self.plugin, fn)):
|
|
273
|
-
method_to_call = getattr(self.plugin, fn)
|
|
274
|
-
|
|
275
|
-
if inspect.iscoroutinefunction(method_to_call):
|
|
276
|
-
reply["response"] = await method_to_call(*args)
|
|
277
|
-
else:
|
|
278
|
-
reply["response"] = method_to_call(*args)
|
|
279
|
-
elif camera_storage and hasattr(camera_storage, fn) and callable(getattr(camera_storage, fn)):
|
|
280
|
-
method_to_call = getattr(camera_storage, fn)
|
|
281
|
-
|
|
282
|
-
if inspect.iscoroutinefunction(method_to_call):
|
|
283
|
-
reply["response"] = await method_to_call(*args)
|
|
284
|
-
else:
|
|
285
|
-
reply["response"] = method_to_call(*args)
|
|
286
|
-
else:
|
|
287
|
-
raise Exception(f"Unknown function: {fn}")
|
|
288
|
-
except Exception as e:
|
|
289
|
-
deserialized_error: DeserializedError = {
|
|
290
|
-
"name": type(e).__name__,
|
|
291
|
-
"message": str(e),
|
|
292
|
-
"stack": traceback.format_exc(),
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
reply["error"] = deserialized_error
|
|
296
|
-
|
|
297
|
-
if message["timeout"] == 0:
|
|
298
|
-
return
|
|
299
|
-
else:
|
|
300
|
-
await self.message_queue.enqueue(reply)
|
|
301
|
-
|
|
302
|
-
async def on_worker_message(self, msg: Msg) -> None:
|
|
303
|
-
if self.stopped:
|
|
304
|
-
return
|
|
305
|
-
|
|
306
|
-
message: ProcessMessage = unpack(msg.data)
|
|
307
|
-
|
|
308
|
-
if "type" in message:
|
|
309
|
-
if message["type"] == PLUGIN_COMMAND.START.value and "data" in message:
|
|
310
|
-
await self.start(message["data"])
|
|
311
|
-
elif message["type"] == PLUGIN_COMMAND.STOP.value:
|
|
312
|
-
await self.stop()
|
|
313
|
-
|
|
314
|
-
async def gracefully_close(self, signame: str, reason: Any = "unknown"):
|
|
315
|
-
if self.stopped or self.closed:
|
|
316
|
-
return
|
|
317
|
-
|
|
318
|
-
self.closed = True
|
|
319
|
-
|
|
320
|
-
self.logger.log(
|
|
321
|
-
f"{self.display_name} is gracefully closing from signal='{signame}' reason='{reason}'..."
|
|
322
|
-
)
|
|
323
|
-
|
|
324
|
-
try:
|
|
325
|
-
stop_task = asyncio.create_task(self.stop(), name=f"{self.display_name} Stop")
|
|
326
|
-
await asyncio.wait_for(stop_task, timeout=2)
|
|
327
|
-
self.force_exit()
|
|
328
|
-
except asyncio.TimeoutError:
|
|
329
|
-
self.logger.warn("Failed to gracefully close before timeout, force quit!")
|
|
330
|
-
self.force_exit()
|
|
331
|
-
|
|
332
|
-
def setup_signal_handlers(self):
|
|
333
|
-
loop = asyncio.get_running_loop()
|
|
334
|
-
loop.set_exception_handler(self.handle_exception)
|
|
335
|
-
|
|
336
|
-
if sys.platform == "win32":
|
|
337
|
-
try:
|
|
338
|
-
from win32api import SetConsoleCtrlHandler
|
|
339
|
-
|
|
340
|
-
def handler(ctrl_type: int) -> bool:
|
|
341
|
-
if ctrl_type in (0, 1, 2): # CTRL_C_EVENT, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT
|
|
342
|
-
asyncio.create_task(self.gracefully_close("SIGINT"))
|
|
343
|
-
return True
|
|
344
|
-
return False
|
|
345
|
-
|
|
346
|
-
SetConsoleCtrlHandler(handler, True)
|
|
347
|
-
except ImportError:
|
|
348
|
-
# self.logger.warn("win32api not available, falling back to limited signal support")
|
|
349
|
-
self.setup_limited_signal_handlers(loop)
|
|
350
|
-
|
|
351
|
-
def setup_limited_signal_handlers(self, loop: AbstractEventLoop):
|
|
352
|
-
for signame in ("SIGINT", "SIGTERM"):
|
|
353
|
-
try: # noqa: SIM105
|
|
354
|
-
loop.add_signal_handler(
|
|
355
|
-
getattr(signal, signame),
|
|
356
|
-
lambda signame=signame: asyncio.create_task(self.gracefully_close(signame)),
|
|
357
|
-
)
|
|
358
|
-
except NotImplementedError:
|
|
359
|
-
# self.logger.warn(f"Signal {signame} is not supported on this platform")
|
|
360
|
-
pass
|
|
361
|
-
|
|
362
|
-
def force_exit(self):
|
|
363
|
-
if sys.platform == "win32":
|
|
364
|
-
# Windows-spezifisches Beenden
|
|
365
|
-
import ctypes
|
|
366
|
-
|
|
367
|
-
kernel32 = ctypes.windll.kernel32
|
|
368
|
-
kernel32.TerminateProcess(kernel32.GetCurrentProcess(), 1)
|
|
369
|
-
else:
|
|
370
|
-
# Unix-basiertes Beenden
|
|
371
|
-
os.kill(os.getpid(), signal.SIGKILL)
|
|
372
|
-
|
|
373
|
-
def handle_exception(self, loop: AbstractEventLoop, context: Any):
|
|
374
|
-
print("Exception context:", context)
|
|
375
|
-
traceback.print_exc()
|
|
376
|
-
|
|
377
|
-
msg = context.get("message", "Unknown error")
|
|
378
|
-
exception = context.get("exception")
|
|
379
|
-
|
|
380
|
-
if exception:
|
|
381
|
-
tb_str = "".join(traceback.format_exception(type(exception), exception, exception.__traceback__)) # type: ignore
|
|
382
|
-
|
|
383
|
-
self.logger.error(f"Caught exception: {msg}\n{tb_str}")
|
|
384
|
-
else:
|
|
385
|
-
self.logger.error(f"Caught exception: {msg}")
|
|
386
|
-
|
|
387
|
-
if loop.is_running():
|
|
388
|
-
asyncio.create_task(self.gracefully_close("uncaughtException", msg))
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
if __name__ == "__main__":
|
|
392
|
-
plugin_child = PluginChild()
|
|
393
|
-
asyncio.run(plugin_child.run())
|
|
394
|
-
# asyncio.run(plugin_child.run(), debug=True)
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import os
|
|
3
|
-
from typing import Any, Callable, Optional
|
|
4
|
-
|
|
5
|
-
from camera_ui_types import JSONValue, PluginConfig
|
|
6
|
-
from utilities.object_path import ObjectPath, Path
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class PluginConfigService:
|
|
10
|
-
def __init__(self, config_file: str):
|
|
11
|
-
self.__config_file = config_file
|
|
12
|
-
self.__config: PluginConfig = {}
|
|
13
|
-
self.__init()
|
|
14
|
-
|
|
15
|
-
def get(
|
|
16
|
-
self,
|
|
17
|
-
key: Path,
|
|
18
|
-
default_value: Optional[JSONValue] = None,
|
|
19
|
-
validate: Optional[Callable[[Any], bool]] = None,
|
|
20
|
-
refresh: bool = False,
|
|
21
|
-
write_if_not_valid: bool = False,
|
|
22
|
-
) -> Any:
|
|
23
|
-
if refresh:
|
|
24
|
-
self.__read()
|
|
25
|
-
|
|
26
|
-
val = ObjectPath.get(self.__config, key, default_value)
|
|
27
|
-
|
|
28
|
-
if validate and default_value is not None:
|
|
29
|
-
is_valid = validate(val)
|
|
30
|
-
|
|
31
|
-
if not is_valid:
|
|
32
|
-
self.set(key, default_value, write_if_not_valid)
|
|
33
|
-
|
|
34
|
-
return val
|
|
35
|
-
|
|
36
|
-
def has(self, key: Path, refresh: bool = False) -> bool:
|
|
37
|
-
if refresh:
|
|
38
|
-
self.__read()
|
|
39
|
-
|
|
40
|
-
return ObjectPath.has(self.__config, key)
|
|
41
|
-
|
|
42
|
-
def ensure_exists(self, key: Path, default_value: JSONValue, write: bool = False) -> None:
|
|
43
|
-
exists = self.has(key)
|
|
44
|
-
|
|
45
|
-
ObjectPath.ensure_exists(self.__config, key, default_value)
|
|
46
|
-
|
|
47
|
-
if write and not exists:
|
|
48
|
-
self.__write()
|
|
49
|
-
|
|
50
|
-
def set(self, key: Path, value: Any, write: bool = False) -> None:
|
|
51
|
-
ObjectPath.set(self.__config, key, value)
|
|
52
|
-
|
|
53
|
-
if write:
|
|
54
|
-
self.__write()
|
|
55
|
-
|
|
56
|
-
def insert(self, key: Path, value: Any, at: int = 0, write: bool = False) -> None:
|
|
57
|
-
ObjectPath.insert(self.__config, key, value, at)
|
|
58
|
-
|
|
59
|
-
if write:
|
|
60
|
-
self.__write()
|
|
61
|
-
|
|
62
|
-
def push(self, key: Path, write: bool = False, *items: Any) -> None:
|
|
63
|
-
ObjectPath.push(self.__config, key, *items)
|
|
64
|
-
|
|
65
|
-
if write:
|
|
66
|
-
self.__write()
|
|
67
|
-
|
|
68
|
-
def delete(self, key: Path, write: bool = False) -> None:
|
|
69
|
-
ObjectPath.delete(self.__config, key)
|
|
70
|
-
|
|
71
|
-
if write:
|
|
72
|
-
self.__write()
|
|
73
|
-
|
|
74
|
-
def all(self, refresh: bool = False) -> PluginConfig:
|
|
75
|
-
if refresh:
|
|
76
|
-
self.__read()
|
|
77
|
-
|
|
78
|
-
return self.__config.copy()
|
|
79
|
-
|
|
80
|
-
def replace(self, config: PluginConfig, write: bool = False) -> None:
|
|
81
|
-
self.__config = config
|
|
82
|
-
|
|
83
|
-
if write:
|
|
84
|
-
self.__write()
|
|
85
|
-
|
|
86
|
-
def update_value(
|
|
87
|
-
self,
|
|
88
|
-
path: str,
|
|
89
|
-
search_key: str,
|
|
90
|
-
search_value: Any,
|
|
91
|
-
target_key: str,
|
|
92
|
-
new_value: Any,
|
|
93
|
-
write: bool = False,
|
|
94
|
-
) -> None:
|
|
95
|
-
path_segments = path.split(".")
|
|
96
|
-
|
|
97
|
-
def update_recursive(obj: Any, index: int) -> None:
|
|
98
|
-
if index == len(path_segments):
|
|
99
|
-
if obj.get(search_key) == search_value:
|
|
100
|
-
obj[target_key] = new_value
|
|
101
|
-
return
|
|
102
|
-
|
|
103
|
-
current_path = path_segments[index]
|
|
104
|
-
|
|
105
|
-
if isinstance(obj.get(current_path), list):
|
|
106
|
-
for element in obj[current_path]:
|
|
107
|
-
update_recursive(element, index + 1)
|
|
108
|
-
elif obj.get(current_path) is not None:
|
|
109
|
-
update_recursive(obj[current_path], index + 1)
|
|
110
|
-
|
|
111
|
-
update_recursive(self.__config, 0)
|
|
112
|
-
|
|
113
|
-
self.set(path_segments[0], self.__config[path_segments[0]], write)
|
|
114
|
-
|
|
115
|
-
def replace_or_add_item(
|
|
116
|
-
self,
|
|
117
|
-
path: str,
|
|
118
|
-
search_key: str,
|
|
119
|
-
search_value: Any,
|
|
120
|
-
new_item: Any,
|
|
121
|
-
write: bool = False,
|
|
122
|
-
) -> None:
|
|
123
|
-
path_segments = path.split(".")
|
|
124
|
-
|
|
125
|
-
def ensure_path_exists(obj: Any, path_segments: list[str], index: int) -> None:
|
|
126
|
-
if index >= len(path_segments):
|
|
127
|
-
return
|
|
128
|
-
|
|
129
|
-
current_path = path_segments[index]
|
|
130
|
-
|
|
131
|
-
if obj.get(current_path) is None:
|
|
132
|
-
obj[current_path] = [] if index == len(path_segments) - 1 else {}
|
|
133
|
-
|
|
134
|
-
ensure_path_exists(obj[current_path], path_segments, index + 1)
|
|
135
|
-
|
|
136
|
-
def find_and_replace_or_add_recursive(obj: Any, path_index: int) -> None:
|
|
137
|
-
if isinstance(obj, list):
|
|
138
|
-
o: list[Any] = obj
|
|
139
|
-
for sub_obj in o:
|
|
140
|
-
find_and_replace_or_add_recursive(sub_obj, path_index)
|
|
141
|
-
else:
|
|
142
|
-
current_path = path_segments[path_index]
|
|
143
|
-
if path_index == len(path_segments) - 1:
|
|
144
|
-
if isinstance(obj.get(current_path), list):
|
|
145
|
-
item_index = next(
|
|
146
|
-
(
|
|
147
|
-
index
|
|
148
|
-
for index, item in enumerate(obj[current_path])
|
|
149
|
-
if item.get(search_key) == search_value
|
|
150
|
-
),
|
|
151
|
-
-1,
|
|
152
|
-
)
|
|
153
|
-
if item_index != -1:
|
|
154
|
-
obj[current_path][item_index] = new_item
|
|
155
|
-
else:
|
|
156
|
-
obj[current_path].append(new_item)
|
|
157
|
-
elif obj.get(current_path) is not None:
|
|
158
|
-
find_and_replace_or_add_recursive(obj[current_path], path_index + 1)
|
|
159
|
-
|
|
160
|
-
ensure_path_exists(self.__config, path_segments, 0)
|
|
161
|
-
find_and_replace_or_add_recursive(self.__config, 0)
|
|
162
|
-
|
|
163
|
-
self.set(path_segments[0], self.__config[path_segments[0]], write)
|
|
164
|
-
|
|
165
|
-
def __init(self) -> None:
|
|
166
|
-
directory = os.path.dirname(self.__config_file)
|
|
167
|
-
|
|
168
|
-
if not os.path.exists(directory):
|
|
169
|
-
os.makedirs(directory)
|
|
170
|
-
|
|
171
|
-
if not os.path.exists(self.__config_file):
|
|
172
|
-
open(self.__config_file, "a").close()
|
|
173
|
-
|
|
174
|
-
self.__read()
|
|
175
|
-
|
|
176
|
-
def __read(self) -> None:
|
|
177
|
-
try:
|
|
178
|
-
with open(self.__config_file) as file:
|
|
179
|
-
config = json.load(file)
|
|
180
|
-
except (FileNotFoundError, json.JSONDecodeError):
|
|
181
|
-
config = {}
|
|
182
|
-
|
|
183
|
-
self.__config = config or self.__config or {}
|
|
184
|
-
|
|
185
|
-
def __write(self) -> None:
|
|
186
|
-
with open(self.__config_file, "w") as file:
|
|
187
|
-
json.dump(self.__config, file, indent=2)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
NATS_SERVER_SUBJECT = "camera.ui-server"
|