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.
Files changed (390) hide show
  1. package/dist/interface/@camera.ui.DuwfK59t.0.0.30-alpha.3.js +3 -0
  2. package/dist/interface/@tanstack.DBBaUHTS.0.0.30-alpha.3.js +1 -0
  3. package/dist/interface/{@vee-validate.0Cv0x9aN.0.0.30-alpha.0.js → @vee-validate.BRR3_tWq.0.0.30-alpha.3.js} +1 -1
  4. package/dist/interface/@vue.BeJw0wEm.0.0.30-alpha.3.js +17 -0
  5. package/dist/interface/{@vueform.Du_niMHk.0.0.30-alpha.0.js → @vueform.Dcx-RQUw.0.0.30-alpha.3.js} +1 -1
  6. package/dist/interface/{@vueuse.Dv9U068T.0.0.30-alpha.0.js → @vueuse.Sz46sDez.0.0.30-alpha.3.js} +1 -1
  7. package/dist/interface/Account.hmetZWTc.0.0.30-alpha.3.js +1 -0
  8. package/dist/interface/Adminpanel.DxC80W0K.0.0.30-alpha.3.js +2 -0
  9. package/dist/interface/Appearance.BHZdWQlZ.0.0.30-alpha.3.js +1 -0
  10. package/dist/interface/Backup.petPSq60.0.0.30-alpha.3.js +1 -0
  11. package/dist/interface/Camera.DS7gbgwV.0.0.30-alpha.3.js +1 -0
  12. package/dist/interface/Cameras.eqceAkdR.0.0.30-alpha.3.js +1 -0
  13. package/dist/interface/Camview.DumV6nmv.0.0.30-alpha.3.js +1 -0
  14. package/dist/interface/Config.DQ5vyHcx.0.0.30-alpha.3.js +1 -0
  15. package/dist/interface/Console.CWp-LL5w.0.0.30-alpha.3.js +4 -0
  16. package/dist/interface/FirstSteps.DR2B1Gmx.0.0.30-alpha.3.js +1 -0
  17. package/dist/interface/{NewCamera.Kn9biZIb.0.0.30-alpha.0.js → NewCamera.CpENkWIP.0.0.30-alpha.3.js} +2 -2
  18. package/dist/interface/Plugin.KK2gWYUL.0.0.30-alpha.3.js +1 -0
  19. package/dist/interface/Plugins.Dy1rL-Pc.0.0.30-alpha.3.js +1 -0
  20. package/dist/interface/Recordings.Bny11D38.0.0.30-alpha.3.js +1 -0
  21. package/dist/interface/Recordings.IdGxswmI.0.0.30-alpha.3.js +1 -0
  22. package/dist/interface/Settings.D6l7BlOF.0.0.30-alpha.3.js +1 -0
  23. package/dist/interface/System.FIkCpF0A.0.0.30-alpha.3.js +4 -0
  24. package/dist/interface/User.By9sAd8k.0.0.30-alpha.3.js +1 -0
  25. package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.C7ZcC7dX.0.0.30-alpha.3.js +2 -0
  26. package/dist/interface/{VConsole.BT0UxZb1.0.0.30-alpha.0.js → VConsole.BG4nEIk8.0.0.30-alpha.3.js} +1 -1
  27. package/dist/interface/VPlayer.CZqXCM-i.0.0.30-alpha.3.js +1 -0
  28. package/dist/interface/{VPluginCard.Bz3GmzAE.0.0.30-alpha.0.js → VPluginCard.B_M3puzM.0.0.30-alpha.3.js} +2 -2
  29. package/dist/interface/{ace-builds.SRW0xGs1.0.0.30-alpha.0.js → ace-builds.D4S-MJ6b.0.0.30-alpha.3.js} +1 -1
  30. package/dist/interface/{apexcharts.BV8prH5x.0.0.30-alpha.0.js → apexcharts.u0duws01.0.0.30-alpha.3.js} +1 -1
  31. package/dist/interface/{dnd-core.BdsXoke-.0.0.30-alpha.0.js → dnd-core.C4232Xyz.0.0.30-alpha.3.js} +1 -1
  32. package/dist/interface/{draggabilly.D9j4BYFu.0.0.30-alpha.0.js → draggabilly.Xgwn1bT3.0.0.30-alpha.3.js} +1 -1
  33. 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
  34. package/dist/interface/{ev-emitter.Dxl4QoSg.0.0.30-alpha.0.js → ev-emitter.BYRnnQXb.0.0.30-alpha.3.js} +1 -1
  35. 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
  36. package/dist/interface/{highlight.js.CMosnU3p.0.0.30-alpha.0.js → highlight.js.sNLmnsuC.0.0.30-alpha.3.js} +1 -1
  37. package/dist/interface/index.html +34 -33
  38. package/dist/interface/{linkify-it.B9RFwlcp.0.0.30-alpha.0.js → linkify-it.8PrPWg7W.0.0.30-alpha.3.js} +1 -1
  39. package/dist/interface/main.gxLiydtV.0.0.30-alpha.3.js +2 -0
  40. package/dist/interface/{markdown-it.DAiultxC.0.0.30-alpha.0.js → markdown-it.Q4_2MGLy.0.0.30-alpha.3.js} +1 -1
  41. package/dist/interface/{nprogress.C2KbBHcZ.0.0.30-alpha.0.js → nprogress.DQYtKLt9.0.0.30-alpha.3.js} +1 -1
  42. package/dist/interface/{pinia.DRjp4GU7.0.0.30-alpha.0.js → pinia.DcgsdRJU.0.0.30-alpha.3.js} +2 -2
  43. package/dist/interface/{plugins.Ur_7V4x8.0.0.30-alpha.0.js → plugins.DZjXmoDp.0.0.30-alpha.3.js} +1 -1
  44. package/dist/interface/{qrcode.DrYVb5am.0.0.30-alpha.0.js → qrcode.XqSuoGPb.0.0.30-alpha.3.js} +1 -1
  45. 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
  46. package/dist/interface/{rxjs.Dl5P76vZ.0.0.30-alpha.0.js → rxjs.CXnJywSk.0.0.30-alpha.3.js} +1 -1
  47. 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
  48. 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
  49. package/dist/interface/sw.js +1 -1
  50. package/dist/interface/{system.CRn9Cy3C.0.0.30-alpha.0.js → system.Bh4wNIkr.0.0.30-alpha.3.js} +1 -1
  51. package/dist/interface/{ui.C-XbEPHk.0.0.30-alpha.0.js → ui.B0YwbqBU.0.0.30-alpha.3.js} +1 -1
  52. package/dist/interface/{unidragger.zHlf1Df_.0.0.30-alpha.0.js → unidragger.DDL70rPA.0.0.30-alpha.3.js} +1 -1
  53. package/dist/interface/utils.mAKpSMLY.0.0.30-alpha.3.js +1 -0
  54. package/dist/interface/{v-calendar.CapJoEkJ.0.0.30-alpha.0.js → v-calendar.C8Yj7x1Q.0.0.30-alpha.3.js} +1 -1
  55. package/dist/interface/{vee-validate.DcgOEpak.0.0.30-alpha.0.js → vee-validate.BbcoErf-.0.0.30-alpha.3.js} +2 -2
  56. package/dist/interface/{vue-i18n.D2pqkMP3.0.0.30-alpha.0.js → vue-i18n.B7m8y9GA.0.0.30-alpha.3.js} +2 -2
  57. 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
  58. package/dist/interface/{vue-router.BVs4qaVs.0.0.30-alpha.0.js → vue-router.B3QeItm5.0.0.30-alpha.3.js} +2 -2
  59. package/dist/interface/{vue3-apexcharts.CBV9x5vk.0.0.30-alpha.0.js → vue3-apexcharts.DVzl7xGy.0.0.30-alpha.3.js} +1 -1
  60. package/dist/interface/{vue3-dnd.CXMddGIZ.0.0.30-alpha.0.js → vue3-dnd.76cFMD9V.0.0.30-alpha.3.js} +1 -1
  61. package/dist/interface/{vue3-toastify.DE7YmDSX.0.0.30-alpha.0.js → vue3-toastify.B-AJ7WuP.0.0.30-alpha.3.js} +1 -1
  62. package/dist/interface/{vuetify.CYxxHEVN.0.0.30-alpha.0.js → vuetify.CYln2r6g.0.0.30-alpha.3.js} +1 -1
  63. package/dist/interface/zod.DnW1_kUe.0.0.30-alpha.3.js +1 -0
  64. package/dist/server/bin/cameraui.js +10 -7
  65. package/dist/server/bin/cameraui.js.map +1 -1
  66. package/dist/server/bin/fork.js +2 -2
  67. package/dist/server/bin/fork.js.map +1 -1
  68. package/dist/server/bin/installer/darwin.js +1 -1
  69. package/dist/server/bin/installer/darwin.js.map +1 -1
  70. package/dist/server/bin/installer/linux.js +1 -1
  71. package/dist/server/bin/installer/linux.js.map +1 -1
  72. package/dist/server/package.json +11 -15
  73. package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
  74. package/dist/server/src/api/controllers/cameras.controller.js +1 -1
  75. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  76. package/dist/server/src/api/controllers/frameWorkers.controller.js +1 -1
  77. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
  78. package/dist/server/src/api/controllers/plugins.controller.js +1 -2
  79. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  80. package/dist/server/src/api/controllers/system.controller.js +1 -3
  81. package/dist/server/src/api/controllers/system.controller.js.map +1 -1
  82. package/dist/server/src/api/controllers/users.controller.js +2 -2
  83. package/dist/server/src/api/controllers/users.controller.js.map +1 -1
  84. package/dist/server/src/api/database/constants.d.ts +8 -0
  85. package/dist/server/src/api/database/constants.js +9 -0
  86. package/dist/server/src/api/database/constants.js.map +1 -0
  87. package/dist/server/src/api/database/index.d.ts +0 -8
  88. package/dist/server/src/api/database/index.js +14 -21
  89. package/dist/server/src/api/database/index.js.map +1 -1
  90. package/dist/server/src/api/database/migration.js +5 -4
  91. package/dist/server/src/api/database/migration.js.map +1 -1
  92. package/dist/server/src/api/database/types.d.ts +6 -6
  93. package/dist/server/src/api/go2rtc/api/application.js +1 -1
  94. package/dist/server/src/api/go2rtc/api/application.js.map +1 -1
  95. package/dist/server/src/api/index.js.map +1 -1
  96. package/dist/server/src/api/plugins/logger.plugin.js.map +1 -1
  97. package/dist/server/src/api/schemas/cameras.schema.d.ts +71 -71
  98. package/dist/server/src/api/schemas/config.schema.d.ts +6 -6
  99. package/dist/server/src/api/schemas/go2rtc.schema.d.ts +98 -98
  100. package/dist/server/src/api/schemas/users.schema.d.ts +116 -116
  101. package/dist/server/src/api/services/auth.service.js +1 -1
  102. package/dist/server/src/api/services/auth.service.js.map +1 -1
  103. package/dist/server/src/api/services/backup.service.js.map +1 -1
  104. package/dist/server/src/api/services/cameras.service.js +1 -1
  105. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  106. package/dist/server/src/api/services/system.service.js +1 -1
  107. package/dist/server/src/api/services/system.service.js.map +1 -1
  108. package/dist/server/src/api/services/users.service.js +1 -1
  109. package/dist/server/src/api/services/users.service.js.map +1 -1
  110. package/dist/server/src/api/types/index.d.ts +2 -2
  111. package/dist/server/src/api/types/index.js.map +1 -1
  112. package/dist/server/src/api/utils/cert.js.map +1 -1
  113. package/dist/server/src/api/websocket/index.js.map +1 -1
  114. package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -1
  115. package/dist/server/src/api/websocket/nsp/server.js +1 -1
  116. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  117. package/dist/server/src/api.d.ts +1 -7
  118. package/dist/server/src/api.js.map +1 -1
  119. package/dist/server/src/camera/controller.d.ts +4 -6
  120. package/dist/server/src/camera/controller.js +5 -8
  121. package/dist/server/src/camera/controller.js.map +1 -1
  122. package/dist/server/src/camera/types.d.ts +140 -13
  123. package/dist/server/src/camera/types.js.map +1 -1
  124. package/dist/server/src/decoder/index.js.map +1 -1
  125. package/dist/server/src/decoder/types.d.ts +1 -18
  126. package/dist/server/src/decoder/worker.d.ts +3 -2
  127. package/dist/server/src/decoder/worker.js +10 -22
  128. package/dist/server/src/decoder/worker.js.map +1 -1
  129. package/dist/server/src/go2rtc/index.js +2 -3
  130. package/dist/server/src/go2rtc/index.js.map +1 -1
  131. package/dist/server/src/main.js +3 -3
  132. package/dist/server/src/main.js.map +1 -1
  133. package/dist/server/src/nats/index.d.ts +3 -4
  134. package/dist/server/src/nats/index.js +1 -3
  135. package/dist/server/src/nats/index.js.map +1 -1
  136. package/dist/server/src/nats/proxy/cameraDevice.d.ts +2 -2
  137. package/dist/server/src/nats/proxy/coreManager.d.ts +4 -2
  138. package/dist/server/src/nats/proxy/coreManager.js +7 -0
  139. package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
  140. package/dist/server/src/nats/proxy/deviceManager.d.ts +5 -5
  141. package/dist/server/src/nats/proxy/deviceManager.js +4 -2
  142. package/dist/server/src/nats/proxy/deviceManager.js.map +1 -1
  143. package/dist/server/src/nats/server.js +2 -3
  144. package/dist/server/src/nats/server.js.map +1 -1
  145. package/dist/server/src/nats/types.d.ts +19 -32
  146. package/dist/server/src/nats/utils.d.ts +1 -1
  147. package/dist/server/src/nats/websocket.js.map +1 -1
  148. package/dist/server/src/plugins/index.js +11 -9
  149. package/dist/server/src/plugins/index.js.map +1 -1
  150. package/dist/server/src/plugins/interfaces/base.d.ts +1 -1
  151. package/dist/server/src/plugins/plugin.d.ts +1 -1
  152. package/dist/server/src/plugins/plugin.js +4 -4
  153. package/dist/server/src/plugins/plugin.js.map +1 -1
  154. package/dist/server/src/plugins/types.d.ts +36 -3
  155. package/dist/server/src/plugins/types.js.map +1 -1
  156. package/dist/server/src/plugins/worker.js +7 -16
  157. package/dist/server/src/plugins/worker.js.map +1 -1
  158. package/dist/server/src/services/config/constants.js +2 -2
  159. package/dist/server/src/services/config/constants.js.map +1 -1
  160. package/dist/server/src/services/config/index.d.ts +2 -0
  161. package/dist/server/src/services/config/index.js +10 -2
  162. package/dist/server/src/services/config/index.js.map +1 -1
  163. package/dist/server/src/services/logger/index.d.ts +4 -16
  164. package/dist/server/src/services/logger/index.js +4 -83
  165. package/dist/server/src/services/logger/index.js.map +1 -1
  166. package/dist/server/src/services/logger/types.d.ts +8 -0
  167. package/dist/server/src/services/logger/types.js +2 -0
  168. package/dist/server/src/services/logger/types.js.map +1 -0
  169. package/localdeps.txt +4 -0
  170. package/package.json +11 -15
  171. package/dist/interface/@tanstack.DYQ7Jj8U.0.0.30-alpha.0.js +0 -1
  172. package/dist/interface/@vue.CvjRlaU6.0.0.30-alpha.0.js +0 -17
  173. package/dist/interface/Account.Dm2FouAU.0.0.30-alpha.0.js +0 -1
  174. package/dist/interface/Adminpanel.B2Aiobnt.0.0.30-alpha.0.js +0 -2
  175. package/dist/interface/Appearance.EfH0tMdM.0.0.30-alpha.0.js +0 -1
  176. package/dist/interface/Backup.D8SRclhB.0.0.30-alpha.0.js +0 -1
  177. package/dist/interface/Camera.D-cOf4sS.0.0.30-alpha.0.js +0 -1
  178. package/dist/interface/Cameras.oolxbmXU.0.0.30-alpha.0.js +0 -1
  179. package/dist/interface/Camview.BHw8Pe3v.0.0.30-alpha.0.js +0 -1
  180. package/dist/interface/Config.DmPTI5iz.0.0.30-alpha.0.js +0 -1
  181. package/dist/interface/Console.Dq4khHFF.0.0.30-alpha.0.js +0 -4
  182. package/dist/interface/FirstSteps.Bo467abx.0.0.30-alpha.0.js +0 -1
  183. package/dist/interface/Plugin.BLTVcTt1.0.0.30-alpha.0.js +0 -1
  184. package/dist/interface/Plugins.Cp8mK__o.0.0.30-alpha.0.js +0 -1
  185. package/dist/interface/Recordings.B_JIFk_G.0.0.30-alpha.0.js +0 -1
  186. package/dist/interface/Recordings.gMbvwmk_.0.0.30-alpha.0.js +0 -1
  187. package/dist/interface/Settings.EhHJjGrl.0.0.30-alpha.0.js +0 -1
  188. package/dist/interface/System.VodoK0U6.0.0.30-alpha.0.js +0 -4
  189. package/dist/interface/User.DpcN7DEC.0.0.30-alpha.0.js +0 -1
  190. package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.Br68bfQJ.0.0.30-alpha.0.js +0 -2
  191. package/dist/interface/VPlayer.DYua3Eh_.0.0.30-alpha.0.js +0 -1
  192. package/dist/interface/main.19pRAqPU.0.0.30-alpha.0.js +0 -4
  193. package/dist/interface/utils.BvINh1mj.0.0.30-alpha.0.js +0 -1
  194. package/dist/interface/zod.BaF2dDCd.0.0.30-alpha.0.js +0 -1
  195. package/dist/server/src/camera/device.d.ts +0 -29
  196. package/dist/server/src/camera/device.js +0 -20
  197. package/dist/server/src/camera/device.js.map +0 -1
  198. package/dist/server/src/camera/index.d.ts +0 -90
  199. package/dist/server/src/camera/index.js +0 -581
  200. package/dist/server/src/camera/index.js.map +0 -1
  201. package/dist/server/src/camera/interfaces/camera.d.ts +0 -10
  202. package/dist/server/src/camera/interfaces/camera.js +0 -23
  203. package/dist/server/src/camera/interfaces/camera.js.map +0 -1
  204. package/dist/server/src/camera/interfaces/prebuffer.d.ts +0 -11
  205. package/dist/server/src/camera/interfaces/prebuffer.js +0 -31
  206. package/dist/server/src/camera/interfaces/prebuffer.js.map +0 -1
  207. package/dist/server/src/camera/interfaces/ptz.d.ts +0 -13
  208. package/dist/server/src/camera/interfaces/ptz.js +0 -47
  209. package/dist/server/src/camera/interfaces/ptz.js.map +0 -1
  210. package/dist/server/src/camera/iou.d.ts +0 -2
  211. package/dist/server/src/camera/iou.js +0 -53
  212. package/dist/server/src/camera/iou.js.map +0 -1
  213. package/dist/server/src/camera/polygon.d.ts +0 -6
  214. package/dist/server/src/camera/polygon.js +0 -151
  215. package/dist/server/src/camera/polygon.js.map +0 -1
  216. package/dist/server/src/camera/streaming/peer-connection.d.ts +0 -55
  217. package/dist/server/src/camera/streaming/peer-connection.js +0 -203
  218. package/dist/server/src/camera/streaming/peer-connection.js.map +0 -1
  219. package/dist/server/src/camera/streaming/webrtc-connection.d.ts +0 -35
  220. package/dist/server/src/camera/streaming/webrtc-connection.js +0 -170
  221. package/dist/server/src/camera/streaming/webrtc-connection.js.map +0 -1
  222. package/dist/server/src/camera/streaming/werift-session.d.ts +0 -41
  223. package/dist/server/src/camera/streaming/werift-session.js +0 -179
  224. package/dist/server/src/camera/streaming/werift-session.js.map +0 -1
  225. package/dist/server/src/camera/videoFrame.d.ts +0 -24
  226. package/dist/server/src/camera/videoFrame.js +0 -104
  227. package/dist/server/src/camera/videoFrame.js.map +0 -1
  228. package/dist/server/src/index.d.ts +0 -18
  229. package/dist/server/src/index.js +0 -5
  230. package/dist/server/src/index.js.map +0 -1
  231. package/dist/server/src/nats/connection.d.ts +0 -17
  232. package/dist/server/src/nats/connection.js +0 -66
  233. package/dist/server/src/nats/connection.js.map +0 -1
  234. package/dist/server/src/nats/constants.d.ts +0 -1
  235. package/dist/server/src/nats/constants.js +0 -2
  236. package/dist/server/src/nats/constants.js.map +0 -1
  237. package/dist/server/src/nats/error.d.ts +0 -9
  238. package/dist/server/src/nats/error.js +0 -11
  239. package/dist/server/src/nats/error.js.map +0 -1
  240. package/dist/server/src/nats/messageQueue.d.ts +0 -20
  241. package/dist/server/src/nats/messageQueue.js +0 -132
  242. package/dist/server/src/nats/messageQueue.js.map +0 -1
  243. package/dist/server/src/nats/subscription.d.ts +0 -12
  244. package/dist/server/src/nats/subscription.js +0 -21
  245. package/dist/server/src/nats/subscription.js.map +0 -1
  246. package/dist/server/src/polyglot/node/decoder/child.d.ts +0 -1
  247. package/dist/server/src/polyglot/node/decoder/child.js +0 -644
  248. package/dist/server/src/polyglot/node/decoder/child.js.map +0 -1
  249. package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +0 -24
  250. package/dist/server/src/polyglot/node/decoder/imageUtils.js +0 -205
  251. package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +0 -1
  252. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +0 -144
  253. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +0 -65
  254. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
  255. package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +0 -106
  256. package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +0 -107
  257. package/dist/server/src/polyglot/node/plugins/cameraStorage.js +0 -292
  258. package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +0 -1
  259. package/dist/server/src/polyglot/node/plugins/child.d.ts +0 -28
  260. package/dist/server/src/polyglot/node/plugins/child.js +0 -222
  261. package/dist/server/src/polyglot/node/plugins/child.js.map +0 -1
  262. package/dist/server/src/polyglot/node/plugins/configService.d.ts +0 -104
  263. package/dist/server/src/polyglot/node/plugins/configService.js +0 -213
  264. package/dist/server/src/polyglot/node/plugins/configService.js.map +0 -1
  265. package/dist/server/src/polyglot/node/plugins/pluginApi.d.ts +0 -35
  266. package/dist/server/src/polyglot/node/plugins/pluginApi.js +0 -23
  267. package/dist/server/src/polyglot/node/plugins/pluginApi.js.map +0 -1
  268. package/dist/server/src/polyglot/node/plugins/pluginLogger.d.ts +0 -18
  269. package/dist/server/src/polyglot/node/plugins/pluginLogger.js +0 -89
  270. package/dist/server/src/polyglot/node/plugins/pluginLogger.js.map +0 -1
  271. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +0 -69
  272. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +0 -423
  273. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +0 -1
  274. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.d.ts +0 -40
  275. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js +0 -105
  276. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js.map +0 -1
  277. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +0 -47
  278. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +0 -164
  279. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +0 -1
  280. package/dist/server/src/polyglot/node/plugins/schema.d.ts +0 -293
  281. package/dist/server/src/polyglot/node/plugins/schema.js +0 -740
  282. package/dist/server/src/polyglot/node/plugins/schema.js.map +0 -1
  283. package/dist/server/src/polyglot/node/plugins/storageController.d.ts +0 -30
  284. package/dist/server/src/polyglot/node/plugins/storageController.js +0 -40
  285. package/dist/server/src/polyglot/node/plugins/storageController.js.map +0 -1
  286. package/dist/server/src/polyglot/python/camera/interfaces/camera.py +0 -20
  287. package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +0 -28
  288. package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +0 -38
  289. package/dist/server/src/polyglot/python/camera/iou.py +0 -80
  290. package/dist/server/src/polyglot/python/camera/polygon.py +0 -173
  291. package/dist/server/src/polyglot/python/camera/video_frame.py +0 -188
  292. package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +0 -1200
  293. package/dist/server/src/polyglot/python/decoder/child.py +0 -882
  294. package/dist/server/src/polyglot/python/decoder/image_utils.py +0 -149
  295. package/dist/server/src/polyglot/python/decoder/typings.py +0 -99
  296. package/dist/server/src/polyglot/python/plugins/camera_storage.py +0 -391
  297. package/dist/server/src/polyglot/python/plugins/child.py +0 -394
  298. package/dist/server/src/polyglot/python/plugins/config_service.py +0 -187
  299. package/dist/server/src/polyglot/python/plugins/constants.py +0 -1
  300. package/dist/server/src/polyglot/python/plugins/message_queue.py +0 -182
  301. package/dist/server/src/polyglot/python/plugins/plugin_api.py +0 -34
  302. package/dist/server/src/polyglot/python/plugins/plugin_logger.py +0 -111
  303. package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +0 -1599
  304. package/dist/server/src/polyglot/python/plugins/proxy/core_manager.py +0 -145
  305. package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +0 -226
  306. package/dist/server/src/polyglot/python/plugins/schema.py +0 -181
  307. package/dist/server/src/polyglot/python/plugins/storage_controller.py +0 -58
  308. package/dist/server/src/polyglot/python/plugins/typings.py +0 -253
  309. package/dist/server/src/polyglot/python/utilities/connection.py +0 -86
  310. package/dist/server/src/polyglot/python/utilities/json_lmdb.py +0 -19
  311. package/dist/server/src/polyglot/python/utilities/object_path.py +0 -195
  312. package/dist/server/src/polyglot/python/utilities/packer.py +0 -11
  313. package/dist/server/src/polyglot/python/utilities/subscriptions.py +0 -22
  314. package/dist/server/src/polyglot/python/utilities/task.py +0 -35
  315. package/dist/server/src/polyglot/python/utilities/thread.py +0 -10
  316. package/dist/server/src/polyglot/python/utilities/utils.py +0 -73
  317. package/dist/server/src/utils/ffmpeg.d.ts +0 -2
  318. package/dist/server/src/utils/ffmpeg.js +0 -61
  319. package/dist/server/src/utils/ffmpeg.js.map +0 -1
  320. package/dist/server/src/utils/network.d.ts +0 -12
  321. package/dist/server/src/utils/network.js +0 -92
  322. package/dist/server/src/utils/network.js.map +0 -1
  323. package/dist/server/src/utils/npm.d.ts +0 -4
  324. package/dist/server/src/utils/npm.js +0 -128
  325. package/dist/server/src/utils/npm.js.map +0 -1
  326. package/dist/server/src/utils/packer.d.ts +0 -2
  327. package/dist/server/src/utils/packer.js +0 -17
  328. package/dist/server/src/utils/packer.js.map +0 -1
  329. package/dist/server/src/utils/pythonInstaller.d.ts +0 -48
  330. package/dist/server/src/utils/pythonInstaller.js +0 -494
  331. package/dist/server/src/utils/pythonInstaller.js.map +0 -1
  332. package/dist/server/src/utils/reader.d.ts +0 -5
  333. package/dist/server/src/utils/reader.js +0 -41
  334. package/dist/server/src/utils/reader.js.map +0 -1
  335. package/dist/server/src/utils/subscribed.d.ts +0 -9
  336. package/dist/server/src/utils/subscribed.js +0 -17
  337. package/dist/server/src/utils/subscribed.js.map +0 -1
  338. package/dist/server/src/utils/utils.d.ts +0 -10
  339. package/dist/server/src/utils/utils.js +0 -165
  340. package/dist/server/src/utils/utils.js.map +0 -1
  341. /package/dist/interface/{@babel.l0sNRNKZ.0.0.30-alpha.0.js → @babel.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
  342. /package/dist/interface/{@intlify.YW_pt133.0.0.30-alpha.0.js → @intlify.YW_pt133.0.0.30-alpha.3.js} +0 -0
  343. /package/dist/interface/{@mdi.DnMbZhUH.0.0.30-alpha.0.js → @mdi.DnMbZhUH.0.0.30-alpha.3.js} +0 -0
  344. /package/dist/interface/{@popperjs.BQBsAJpH.0.0.30-alpha.0.js → @popperjs.BQBsAJpH.0.0.30-alpha.3.js} +0 -0
  345. /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.30-alpha.0.js → @react-dnd.CcwRs9xb.0.0.30-alpha.3.js} +0 -0
  346. /package/dist/interface/{@socket.io.Dkula2eQ.0.0.30-alpha.0.js → @socket.io.Dkula2eQ.0.0.30-alpha.3.js} +0 -0
  347. /package/dist/interface/{@xterm.CnserxUX.0.0.30-alpha.0.js → @xterm.-WsTvn6n.0.0.30-alpha.3.js} +0 -0
  348. /package/dist/interface/assets/{@vueform.0.0.30-alpha.0.h7tNX9p6.css → @vueform.0.0.30-alpha.3.h7tNX9p6.css} +0 -0
  349. /package/dist/interface/assets/{@xterm.0.0.30-alpha.0.CGrrDQr5.css → @xterm.0.0.30-alpha.3.CGrrDQr5.css} +0 -0
  350. /package/dist/interface/assets/{Account.0.0.30-alpha.0.Ce3OmKrC.css → Account.0.0.30-alpha.3.Ce3OmKrC.css} +0 -0
  351. /package/dist/interface/assets/{Adminpanel.0.0.30-alpha.0.CXsTAXPL.css → Adminpanel.0.0.30-alpha.3.CXsTAXPL.css} +0 -0
  352. /package/dist/interface/assets/{Backup.0.0.30-alpha.0.BIwaSlv3.css → Backup.0.0.30-alpha.3.BIwaSlv3.css} +0 -0
  353. /package/dist/interface/assets/{Camera.0.0.30-alpha.0.BDtUJ-lA.css → Camera.0.0.30-alpha.3.BDtUJ-lA.css} +0 -0
  354. /package/dist/interface/assets/{Cameras.0.0.30-alpha.0.Djx0F2MM.css → Cameras.0.0.30-alpha.3.Djx0F2MM.css} +0 -0
  355. /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
  356. /package/dist/interface/assets/{Config.0.0.30-alpha.0.k4QpWumg.css → Config.0.0.30-alpha.3.k4QpWumg.css} +0 -0
  357. /package/dist/interface/assets/{Console.0.0.30-alpha.0.DWrfRWs9.css → Console.0.0.30-alpha.3.DWrfRWs9.css} +0 -0
  358. /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
  359. /package/dist/interface/assets/{NewCamera.0.0.30-alpha.0.DJ3tUBT_.css → NewCamera.0.0.30-alpha.3.DJ3tUBT_.css} +0 -0
  360. /package/dist/interface/assets/{Plugin.0.0.30-alpha.0.BtRA6zDt.css → Plugin.0.0.30-alpha.3.BtRA6zDt.css} +0 -0
  361. /package/dist/interface/assets/{Plugins.0.0.30-alpha.0.Cwu0aGUO.css → Plugins.0.0.30-alpha.3.Cwu0aGUO.css} +0 -0
  362. /package/dist/interface/assets/{Settings.0.0.30-alpha.0.DC_-E3CR.css → Settings.0.0.30-alpha.3.DC_-E3CR.css} +0 -0
  363. /package/dist/interface/assets/{User.0.0.30-alpha.0.DPDcJbx8.css → User.0.0.30-alpha.3.DPDcJbx8.css} +0 -0
  364. /package/dist/interface/assets/{VConsole.0.0.30-alpha.0.BZT1WyS-.css → VConsole.0.0.30-alpha.3.BZT1WyS-.css} +0 -0
  365. /package/dist/interface/assets/{VPlayer.0.0.30-alpha.0.CZXlTn4I.css → VPlayer.0.0.30-alpha.3.CZXlTn4I.css} +0 -0
  366. /package/dist/interface/assets/{VPluginCard.0.0.30-alpha.0.CIL48ca_.css → VPluginCard.0.0.30-alpha.3.CIL48ca_.css} +0 -0
  367. /package/dist/interface/assets/{highlight.0.0.30-alpha.0.DgoK_Xib.css → highlight.0.0.30-alpha.3.DgoK_Xib.css} +0 -0
  368. /package/dist/interface/assets/{logo-256.0.0.30-alpha.0.BCQk9H1-.png → logo-256.0.0.30-alpha.3.BCQk9H1-.png} +0 -0
  369. /package/dist/interface/assets/{logo-512.0.0.30-alpha.0.DLKVOU2S.png → logo-512.0.0.30-alpha.3.DLKVOU2S.png} +0 -0
  370. /package/dist/interface/assets/{logo.0.0.30-alpha.0.DmEiRk0z.png → logo.0.0.30-alpha.3.DmEiRk0z.png} +0 -0
  371. /package/dist/interface/assets/{main.0.0.30-alpha.0.BOf8IWhK.css → main.0.0.30-alpha.3.BOf8IWhK.css} +0 -0
  372. /package/dist/interface/assets/{mode-json.0.0.30-alpha.0.Br7xisR1.js → mode-json.0.0.30-alpha.3.Br7xisR1.js} +0 -0
  373. /package/dist/interface/assets/{mode-yaml.0.0.30-alpha.0.CIYL8U3d.js → mode-yaml.0.0.30-alpha.3.CIYL8U3d.js} +0 -0
  374. /package/dist/interface/assets/{v-calendar.0.0.30-alpha.0.CtSuDYZU.css → v-calendar.0.0.30-alpha.3.CtSuDYZU.css} +0 -0
  375. /package/dist/interface/assets/{vue3-toastify.0.0.30-alpha.0.DTY1DMRs.css → vue3-toastify.0.0.30-alpha.3.DTY1DMRs.css} +0 -0
  376. /package/dist/interface/assets/{vuetify.0.0.30-alpha.0.Cd1awv3t.css → vuetify.0.0.30-alpha.3.Cd1awv3t.css} +0 -0
  377. /package/dist/interface/{axios.C-n2IhIP.0.0.30-alpha.0.js → axios.C-n2IhIP.0.0.30-alpha.3.js} +0 -0
  378. /package/dist/interface/{compare-versions.DqEOhma6.0.0.30-alpha.0.js → compare-versions.DqEOhma6.0.0.30-alpha.3.js} +0 -0
  379. /package/dist/interface/{dijkstrajs.D_NXgYpA.0.0.30-alpha.0.js → dijkstrajs.D_NXgYpA.0.0.30-alpha.3.js} +0 -0
  380. /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
  381. /package/dist/interface/{entities.C20TfXL6.0.0.30-alpha.0.js → entities.C20TfXL6.0.0.30-alpha.3.js} +0 -0
  382. /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
  383. /package/dist/interface/{mdurl.k9Sl0PQj.0.0.30-alpha.0.js → mdurl.k9Sl0PQj.0.0.30-alpha.3.js} +0 -0
  384. /package/dist/interface/{punycode.js.Dj65hjkv.0.0.30-alpha.0.js → punycode.js.Dj65hjkv.0.0.30-alpha.3.js} +0 -0
  385. /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
  386. /package/dist/interface/{redux.CuxFRhX_.0.0.30-alpha.0.js → redux.CuxFRhX_.0.0.30-alpha.3.js} +0 -0
  387. /package/dist/interface/{tslib.9k7AwCpt.0.0.30-alpha.0.js → tslib.9k7AwCpt.0.0.30-alpha.3.js} +0 -0
  388. /package/dist/interface/{uc.micro.kMc2yuuw.0.0.30-alpha.0.js → uc.micro.kMc2yuuw.0.0.30-alpha.3.js} +0 -0
  389. /package/dist/interface/{uuid.DvF23Exx.0.0.30-alpha.0.js → uuid.DvF23Exx.0.0.30-alpha.3.js} +0 -0
  390. /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"