@camera.ui/server 0.0.50-internal.0 → 0.0.50-internal.2

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/index.html +44 -44
  2. package/dist/interface/js/{@primevue.OhxoO3MD.0.0.50-internal.0.js → @primevue.BAIU_p3r.0.0.50-internal.2.js} +1 -1
  3. package/dist/interface/js/{@tanstack.D1IL6eOv.0.0.50-internal.0.js → @tanstack.mdCorqzE.0.0.50-internal.2.js} +1 -1
  4. package/dist/interface/js/{@vee-validate.BGPyWWTh.0.0.50-internal.0.js → @vee-validate.D0vsSsly.0.0.50-internal.2.js} +1 -1
  5. package/dist/interface/js/{@vueuse.BsKtqdiG.0.0.50-internal.0.js → @vueuse.we5ZpWr2.0.0.50-internal.2.js} +1 -1
  6. package/dist/interface/js/{Adminpanel.D93Kvbwp.0.0.50-internal.0.js → Adminpanel.9AEBJ3H1.0.0.50-internal.2.js} +1 -1
  7. package/dist/interface/js/{Camera.DF2l3OMA.0.0.50-internal.0.js → Camera.CZcnEH0C.0.0.50-internal.2.js} +1 -1
  8. package/dist/interface/js/{Cameras.YzvZccdv.0.0.50-internal.0.js → Cameras.DE0LkcGu.0.0.50-internal.2.js} +2 -2
  9. package/dist/interface/js/Cammesh.CVvmkelB.0.0.50-internal.2.js +1 -0
  10. package/dist/interface/js/{Camview.CB7_HnoQ.0.0.50-internal.0.js → Camview.CUr4pGoU.0.0.50-internal.2.js} +1 -1
  11. package/dist/interface/js/{Config.BwflsWTm.0.0.50-internal.0.js → Config.CaJhu4fF.0.0.50-internal.2.js} +2 -2
  12. package/dist/interface/js/{Console.DZM8pN8Q.0.0.50-internal.0.js → Console.5VUmgryj.0.0.50-internal.2.js} +1 -1
  13. package/dist/interface/js/{CuiConsole.BXXU7Gth.0.0.50-internal.0.js → CuiConsole.iYmUxAR5.0.0.50-internal.2.js} +1 -1
  14. package/dist/interface/js/{CuiPluginCard.YFOrpbVD.0.0.50-internal.0.js → CuiPluginCard.DXPyE5mF.0.0.50-internal.2.js} +1 -1
  15. package/dist/interface/js/{CuiTimeline.VV5KSJd5.0.0.50-internal.0.js → CuiTimeline.BqtlOFnV.0.0.50-internal.2.js} +1 -1
  16. package/dist/interface/js/{FirstSteps.b-nvymgb.0.0.50-internal.0.js → FirstSteps.C_RI-SDQ.0.0.50-internal.2.js} +1 -1
  17. package/dist/interface/js/{Plugin.BOMpVEwM.0.0.50-internal.0.js → Plugin.Ch_v02eN.0.0.50-internal.2.js} +1 -1
  18. package/dist/interface/js/{Plugins.DdPwaUDA.0.0.50-internal.0.js → Plugins.BpXAYgSG.0.0.50-internal.2.js} +1 -1
  19. package/dist/interface/js/Recordings.CIKHJytH.0.0.50-internal.2.js +1 -0
  20. package/dist/interface/js/{Settings.D24ttaPu.0.0.50-internal.0.js → Settings.BcLoGNEy.0.0.50-internal.2.js} +1 -1
  21. package/dist/interface/js/{SettingsAccount.ms3aqz4E.0.0.50-internal.0.js → SettingsAccount.DMROW8kx.0.0.50-internal.2.js} +1 -1
  22. package/dist/interface/js/SettingsAppearance.CUaHpihp.0.0.50-internal.2.js +1 -0
  23. package/dist/interface/js/{SettingsAppearance.vue_vue_type_script_setup_true_lang.CBQ6lL3T.0.0.50-internal.0.js → SettingsAppearance.vue_vue_type_script_setup_true_lang.BuKZ-Uco.0.0.50-internal.2.js} +1 -1
  24. package/dist/interface/js/{SettingsBackup.BPEc4Rjg.0.0.50-internal.0.js → SettingsBackup.0QdwFSpv.0.0.50-internal.2.js} +1 -1
  25. package/dist/interface/js/SettingsRecordings.B-aj0U8_.0.0.50-internal.2.js +1 -0
  26. package/dist/interface/js/{SettingsRemote.BL5nXbUT.0.0.50-internal.0.js → SettingsRemote.Bi1YAJ76.0.0.50-internal.2.js} +1 -1
  27. package/dist/interface/js/{SettingsSystem.D7T0AIpm.0.0.50-internal.0.js → SettingsSystem.CAx66Iir.0.0.50-internal.2.js} +1 -1
  28. package/dist/interface/js/{SettingsUsers.1u0vCOVG.0.0.50-internal.0.js → SettingsUsers.CQcDtGy1.0.0.50-internal.2.js} +1 -1
  29. package/dist/interface/js/{VersionsHandler.vue_vue_type_script_setup_true_lang.xDishkkS.0.0.50-internal.0.js → VersionsHandler.vue_vue_type_script_setup_true_lang.BhXMzIhV.0.0.50-internal.2.js} +1 -1
  30. package/dist/interface/js/{ace-builds.D1nmvCwb.0.0.50-internal.0.js → ace-builds.C0sCXSu5.0.0.50-internal.2.js} +2 -2
  31. package/dist/interface/js/{ace.config.G96T2z54.0.0.50-internal.0.js → ace.config.DNqPWa0Q.0.0.50-internal.2.js} +1 -1
  32. package/dist/interface/js/{backup.B_Gzxtp_.0.0.50-internal.0.js → backup.DAXgG3bP.0.0.50-internal.2.js} +1 -1
  33. package/dist/interface/js/{chart.js.CP_nMnnf.0.0.50-internal.0.js → chart.js.Bq3YocRX.0.0.50-internal.2.js} +1 -1
  34. package/dist/interface/js/{close-circle.DYLuVIOg.0.0.50-internal.0.js → close-circle.9rxyNw0z.0.0.50-internal.2.js} +1 -1
  35. package/dist/interface/js/{dnd-core.T9OeW7mu.0.0.50-internal.0.js → dnd-core.BuEvHAsS.0.0.50-internal.2.js} +1 -1
  36. package/dist/interface/js/{draggabilly.D3zGcBb3.0.0.50-internal.0.js → draggabilly.DUdE08x8.0.0.50-internal.2.js} +1 -1
  37. package/dist/interface/js/{engine.io-client.kITRnq-g.0.0.50-internal.0.js → engine.io-client.DWU6YI8o.0.0.50-internal.2.js} +1 -1
  38. package/dist/interface/js/{fast-deep-equal.Bpc9mIsj.0.0.50-internal.0.js → fast-deep-equal.BpPyC6E4.0.0.50-internal.2.js} +1 -1
  39. package/dist/interface/js/{highlight.js.BlSXU-Wb.0.0.50-internal.0.js → highlight.js.BoR2Rhdd.0.0.50-internal.2.js} +1 -1
  40. package/dist/interface/js/{linkify-it.C3N1lWsJ.0.0.50-internal.0.js → linkify-it.BXzPONHs.0.0.50-internal.2.js} +1 -1
  41. package/dist/interface/js/{main.D0YR3Jat.0.0.50-internal.0.js → main.DwcBYfWc.0.0.50-internal.2.js} +3 -3
  42. package/dist/interface/js/{markdown-it.Dj0dt5s2.0.0.50-internal.0.js → markdown-it.BUDVOjPt.0.0.50-internal.2.js} +1 -1
  43. package/dist/interface/js/{nprogress.BwQWDcGj.0.0.50-internal.0.js → nprogress.CsG-OBoI.0.0.50-internal.2.js} +1 -1
  44. package/dist/interface/js/{pinia.DRh7plEC.0.0.50-internal.0.js → pinia.CqEQao5R.0.0.50-internal.2.js} +1 -1
  45. package/dist/interface/js/{primevue.Cl58krXf.0.0.50-internal.0.js → primevue.D91sslRx.0.0.50-internal.2.js} +1 -1
  46. package/dist/interface/js/{qrcode.C1sDj6P8.0.0.50-internal.0.js → qrcode.SdSTPzZO.0.0.50-internal.2.js} +1 -1
  47. package/dist/interface/js/{react-dnd-touch-backend.BA4WhUJo.0.0.50-internal.0.js → react-dnd-touch-backend.BwroebQ4.0.0.50-internal.2.js} +1 -1
  48. package/dist/interface/js/{refresh-rounded.D_SmhhUf.0.0.50-internal.0.js → refresh-rounded.DxM48YSv.0.0.50-internal.2.js} +1 -1
  49. package/dist/interface/js/{rxjs.C-fTBwEO.0.0.50-internal.0.js → rxjs.Cmpbnzo4.0.0.50-internal.2.js} +1 -1
  50. package/dist/interface/js/{socket.io-client.DKrRxgjP.0.0.50-internal.0.js → socket.io-client.DF2YgZo1.0.0.50-internal.2.js} +1 -1
  51. package/dist/interface/js/{socket.io-parser.EXj3YDH2.0.0.50-internal.0.js → socket.io-parser.BUs2ineY.0.0.50-internal.2.js} +1 -1
  52. package/dist/interface/js/{system.CY8rGd-Q.0.0.50-internal.0.js → system.DmkT2LKx.0.0.50-internal.2.js} +1 -1
  53. package/dist/interface/js/{trash-fill.CMnCN3Oy.0.0.50-internal.0.js → trash-fill.dPzyZDVa.0.0.50-internal.2.js} +1 -1
  54. package/dist/interface/js/{unidragger.D0w6Tqtt.0.0.50-internal.0.js → unidragger.y2ZlFveS.0.0.50-internal.2.js} +1 -1
  55. package/dist/interface/js/{vee-validate.BeiObIH8.0.0.50-internal.0.js → vee-validate.Y-alCADW.0.0.50-internal.2.js} +1 -1
  56. package/dist/interface/js/{vue-chartjs.DtdZdiYw.0.0.50-internal.0.js → vue-chartjs.sRVFTqDf.0.0.50-internal.2.js} +1 -1
  57. package/dist/interface/js/{vue-i18n.BW2bx_6z.0.0.50-internal.0.js → vue-i18n.D5WrXOZa.0.0.50-internal.2.js} +1 -1
  58. package/dist/interface/js/{vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js → vue-inline-svg.R0uz_abA.0.0.50-internal.2.js} +1 -1
  59. package/dist/interface/js/{vue-router.B2mOXHaC.0.0.50-internal.0.js → vue-router.65mnGy-o.0.0.50-internal.2.js} +1 -1
  60. package/dist/interface/js/{vue-zoomable.BKDyCJE7.0.0.50-internal.0.js → vue-zoomable.B1Qop6Uu.0.0.50-internal.2.js} +1 -1
  61. package/dist/interface/js/{vue3-dnd.DRK24CBp.0.0.50-internal.0.js → vue3-dnd.CwmyAcir.0.0.50-internal.2.js} +1 -1
  62. package/dist/interface/js/{zoom-out.DxvzgVEo.0.0.50-internal.0.js → zoom-out.CMPALvRh.0.0.50-internal.2.js} +1 -1
  63. package/dist/interface/sw.js +1 -1
  64. package/dist/server/package.json +1 -1
  65. package/dist/server/src/rpc/server.js +4 -1
  66. package/dist/server/src/rpc/server.js.map +1 -1
  67. package/package.json +1 -1
  68. package/.prettierignore +0 -12
  69. package/.prettierrc.json +0 -12
  70. package/artillery.yaml +0 -29
  71. package/bin/cameraui-server.ts +0 -11
  72. package/dist/interface/js/Cammesh.D-6dAROQ.0.0.50-internal.0.js +0 -1
  73. package/dist/interface/js/Recordings.DhxjIW7e.0.0.50-internal.0.js +0 -1
  74. package/dist/interface/js/SettingsAppearance.DsTjKXk1.0.0.50-internal.0.js +0 -1
  75. package/dist/interface/js/SettingsRecordings.DgW7M0jj.0.0.50-internal.0.js +0 -1
  76. package/eslint.config.js +0 -103
  77. package/localdeps.txt +0 -10
  78. package/mypy.ini +0 -30
  79. package/requirements.txt +0 -15
  80. package/ruff.toml +0 -90
  81. package/src/__init__.py +0 -0
  82. package/src/_camera_ui_tools/__init__.py +0 -0
  83. package/src/_camera_ui_tools/__pycache__/__init__.cpython-311.pyc +0 -0
  84. package/src/api/controllers/api.controller.ts +0 -19
  85. package/src/api/controllers/auth.controller.ts +0 -294
  86. package/src/api/controllers/backup.controller.ts +0 -72
  87. package/src/api/controllers/cameras.controller.ts +0 -1029
  88. package/src/api/controllers/config.controller.ts +0 -102
  89. package/src/api/controllers/files.controller.ts +0 -35
  90. package/src/api/controllers/frameWorkers.controller.ts +0 -109
  91. package/src/api/controllers/plugins.controller.ts +0 -1206
  92. package/src/api/controllers/system.controller.ts +0 -273
  93. package/src/api/controllers/users.controller.ts +0 -648
  94. package/src/api/database/checks.ts +0 -268
  95. package/src/api/database/constants.ts +0 -8
  96. package/src/api/database/index.ts +0 -262
  97. package/src/api/database/migration.ts +0 -62
  98. package/src/api/database/selfcheck.ts +0 -492
  99. package/src/api/database/types.ts +0 -104
  100. package/src/api/go2rtc/api/application.ts +0 -48
  101. package/src/api/go2rtc/api/config.ts +0 -61
  102. package/src/api/go2rtc/api/discover.ts +0 -197
  103. package/src/api/go2rtc/api/index.ts +0 -49
  104. package/src/api/go2rtc/api/snapshot.ts +0 -44
  105. package/src/api/go2rtc/api/streams.ts +0 -168
  106. package/src/api/go2rtc/index.ts +0 -43
  107. package/src/api/go2rtc/queue.ts +0 -50
  108. package/src/api/go2rtc/types.ts +0 -174
  109. package/src/api/index.ts +0 -286
  110. package/src/api/middlewares/authPermission.middleware.ts +0 -46
  111. package/src/api/middlewares/authValidation.middleware.ts +0 -160
  112. package/src/api/middlewares/pagination.middleware.ts +0 -67
  113. package/src/api/middlewares/socketAuth.middleware.ts +0 -136
  114. package/src/api/plugins/header.plugin.ts +0 -15
  115. package/src/api/plugins/logger.plugin.ts +0 -44
  116. package/src/api/plugins/proxy.plugin.ts +0 -255
  117. package/src/api/plugins/socket.plugin.ts +0 -28
  118. package/src/api/plugins/system.plugin.ts +0 -48
  119. package/src/api/plugins/useragent.plugin.ts +0 -19
  120. package/src/api/routes/api.routes.ts +0 -10
  121. package/src/api/routes/auth.routes.ts +0 -56
  122. package/src/api/routes/backup.routes.ts +0 -28
  123. package/src/api/routes/cameras.routes.ts +0 -281
  124. package/src/api/routes/config.routes.ts +0 -66
  125. package/src/api/routes/files.routes.ts +0 -15
  126. package/src/api/routes/frameWorkers.routes.ts +0 -39
  127. package/src/api/routes/index.ts +0 -37
  128. package/src/api/routes/plugins.routes.ts +0 -420
  129. package/src/api/routes/system.routes.ts +0 -101
  130. package/src/api/routes/users.routes.ts +0 -167
  131. package/src/api/schemas/backup.schema.ts +0 -112
  132. package/src/api/schemas/cameras.schema.ts +0 -479
  133. package/src/api/schemas/config.schema.ts +0 -38
  134. package/src/api/schemas/go2rtc.schema.ts +0 -189
  135. package/src/api/schemas/plugins.schema.ts +0 -126
  136. package/src/api/schemas/storage.schema.ts +0 -11
  137. package/src/api/schemas/system.schema.ts +0 -45
  138. package/src/api/schemas/users.schema.ts +0 -185
  139. package/src/api/services/auth.service.ts +0 -210
  140. package/src/api/services/backup.service.ts +0 -144
  141. package/src/api/services/cameras.service.ts +0 -671
  142. package/src/api/services/plugins.service.ts +0 -470
  143. package/src/api/services/system.service.ts +0 -85
  144. package/src/api/services/users.service.ts +0 -276
  145. package/src/api/types/index.ts +0 -675
  146. package/src/api/utils/cert.ts +0 -254
  147. package/src/api/utils/constants.ts +0 -17
  148. package/src/api/utils/fetch.ts +0 -21
  149. package/src/api/utils/moveFiles.ts +0 -45
  150. package/src/api/utils/parse.ts +0 -17
  151. package/src/api/websocket/index.ts +0 -110
  152. package/src/api/websocket/nsp/logs.ts +0 -240
  153. package/src/api/websocket/nsp/main.ts +0 -27
  154. package/src/api/websocket/nsp/metrics.ts +0 -301
  155. package/src/api/websocket/nsp/notifications.ts +0 -43
  156. package/src/api/websocket/nsp/plugins.ts +0 -37
  157. package/src/api/websocket/nsp/server.ts +0 -220
  158. package/src/api/websocket/nsp/status.ts +0 -77
  159. package/src/api/websocket/types.ts +0 -55
  160. package/src/api.ts +0 -163
  161. package/src/camera/classes.ts +0 -32
  162. package/src/camera/controller.ts +0 -579
  163. package/src/camera/device.ts +0 -422
  164. package/src/camera/frameWorker.ts +0 -403
  165. package/src/camera/index.ts +0 -679
  166. package/src/camera/interfaces.ts +0 -95
  167. package/src/camera/iou.ts +0 -153
  168. package/src/camera/polygon.ts +0 -226
  169. package/src/camera/python/__init__.py +0 -0
  170. package/src/camera/python/__pycache__/__init__.cpython-311.pyc +0 -0
  171. package/src/camera/python/__pycache__/classes.cpython-311.pyc +0 -0
  172. package/src/camera/python/__pycache__/delegate_controller.cpython-311.pyc +0 -0
  173. package/src/camera/python/__pycache__/interfaces.cpython-311.pyc +0 -0
  174. package/src/camera/python/__pycache__/iou.cpython-310.pyc +0 -0
  175. package/src/camera/python/__pycache__/iou.cpython-311.pyc +0 -0
  176. package/src/camera/python/__pycache__/iou2.cpython-310.pyc +0 -0
  177. package/src/camera/python/__pycache__/polygon.cpython-311.pyc +0 -0
  178. package/src/camera/python/__pycache__/typings.cpython-311.pyc +0 -0
  179. package/src/camera/python/__pycache__/video_frame.cpython-311.pyc +0 -0
  180. package/src/camera/python/classes.py +0 -41
  181. package/src/camera/python/interfaces.py +0 -130
  182. package/src/camera/python/iou.py +0 -158
  183. package/src/camera/python/polygon.py +0 -230
  184. package/src/camera/python/test/__pycache__/polygon.cpython-310.pyc +0 -0
  185. package/src/camera/python/test/iou_test.py +0 -799
  186. package/src/camera/python/test/polygon.py +0 -238
  187. package/src/camera/python/test/polygon_test.py +0 -256
  188. package/src/camera/python/test/polygon_test2.py +0 -484
  189. package/src/camera/python/typings.py +0 -50
  190. package/src/camera/python/video_frame.py +0 -143
  191. package/src/camera/session.ts +0 -192
  192. package/src/camera/streaming/fmp4-session.ts +0 -390
  193. package/src/camera/streaming/peer-connection.ts +0 -273
  194. package/src/camera/streaming/rtsp-session.ts +0 -331
  195. package/src/camera/streaming/webrtc-connection.ts +0 -260
  196. package/src/camera/streaming/werift-session.ts +0 -317
  197. package/src/camera/test/iou_test.ts +0 -761
  198. package/src/camera/test/polygon.test.ts +0 -611
  199. package/src/camera/test/polygon_test.ts +0 -210
  200. package/src/camera/types.ts +0 -48
  201. package/src/camera/utils.ts +0 -489
  202. package/src/camera/videoFrame.ts +0 -123
  203. package/src/cloud/index.ts +0 -61
  204. package/src/cloud/remote/cloudflare.ts +0 -18
  205. package/src/cloud/remote/upnp.ts +0 -18
  206. package/src/cloud/remote/utils.ts +0 -24
  207. package/src/cloud/types.ts +0 -16
  208. package/src/decoder/child.ts +0 -883
  209. package/src/decoder/imageUtils.ts +0 -275
  210. package/src/decoder/manager.ts +0 -251
  211. package/src/decoder/python/__init__.py +0 -0
  212. package/src/decoder/python/__pycache__/__init__.cpython-311.pyc +0 -0
  213. package/src/decoder/python/__pycache__/image_utils.cpython-311.pyc +0 -0
  214. package/src/decoder/python/__pycache__/typings.cpython-311.pyc +0 -0
  215. package/src/decoder/python/__pycache__/utils.cpython-311.pyc +0 -0
  216. package/src/decoder/python/child.py +0 -903
  217. package/src/decoder/python/image_utils.py +0 -196
  218. package/src/decoder/python/pool.py +0 -45
  219. package/src/decoder/python/test/group.py +0 -62
  220. package/src/decoder/python/test/motion.mp4 +0 -0
  221. package/src/decoder/python/test/motion2.mp4 +0 -0
  222. package/src/decoder/python/test/opencl.cl +0 -70
  223. package/src/decoder/python/test/opencl2.cl +0 -130
  224. package/src/decoder/python/test/test.py +0 -427
  225. package/src/decoder/python/test/test1.jpg +0 -0
  226. package/src/decoder/python/test/test1_resized.jpg +0 -0
  227. package/src/decoder/python/test/test2.jpg +0 -0
  228. package/src/decoder/python/test/test2.py +0 -451
  229. package/src/decoder/python/test/test2_resized.jpg +0 -0
  230. package/src/decoder/python/test/test3.jpg +0 -0
  231. package/src/decoder/python/test/utils.py +0 -50
  232. package/src/decoder/python/typings.py +0 -57
  233. package/src/decoder/python/utils.py +0 -70
  234. package/src/decoder/test/child.ts +0 -117
  235. package/src/decoder/test/ffmpeg.ts +0 -371
  236. package/src/decoder/test/test.ts +0 -182
  237. package/src/decoder/types.ts +0 -27
  238. package/src/decoder/utils.ts +0 -64
  239. package/src/decoder/wasm/asconfig.json +0 -28
  240. package/src/decoder/wasm/assembly/console.ts +0 -1
  241. package/src/decoder/wasm/assembly/index.ts +0 -890
  242. package/src/decoder/wasm/build/decoder.d.ts +0 -43
  243. package/src/decoder/wasm/build/decoder.js +0 -108
  244. package/src/decoder/wasm/build/decoder.wasm +0 -0
  245. package/src/decoder/wasm/tsconfig.json +0 -5
  246. package/src/decoder/worker.ts +0 -113
  247. package/src/go2rtc/index.ts +0 -324
  248. package/src/go2rtc/types.ts +0 -88
  249. package/src/main.ts +0 -267
  250. package/src/manager/coreManager.ts +0 -78
  251. package/src/manager/deviceManager.ts +0 -132
  252. package/src/manager/types.ts +0 -17
  253. package/src/plugins/index.ts +0 -443
  254. package/src/plugins/plugin.ts +0 -177
  255. package/src/plugins/runtime/base.ts +0 -282
  256. package/src/plugins/runtime/index.ts +0 -15
  257. package/src/plugins/runtime/node/child.ts +0 -193
  258. package/src/plugins/runtime/node/index.ts +0 -67
  259. package/src/plugins/runtime/node/plugin.ts +0 -122
  260. package/src/plugins/runtime/node/pluginApi.ts +0 -27
  261. package/src/plugins/runtime/node/proxy/cameraDevice.ts +0 -299
  262. package/src/plugins/runtime/node/proxy/coreManager.ts +0 -128
  263. package/src/plugins/runtime/node/proxy/deviceManager.ts +0 -187
  264. package/src/plugins/runtime/node/storage.ts +0 -312
  265. package/src/plugins/runtime/node/storageController.ts +0 -91
  266. package/src/plugins/runtime/python/__init__.py +0 -0
  267. package/src/plugins/runtime/python/__pycache__/__init__.cpython-311.pyc +0 -0
  268. package/src/plugins/runtime/python/__pycache__/camera_storage.cpython-311.pyc +0 -0
  269. package/src/plugins/runtime/python/__pycache__/config_service.cpython-311.pyc +0 -0
  270. package/src/plugins/runtime/python/__pycache__/constants.cpython-311.pyc +0 -0
  271. package/src/plugins/runtime/python/__pycache__/ipc.cpython-311.pyc +0 -0
  272. package/src/plugins/runtime/python/__pycache__/logger.cpython-311.pyc +0 -0
  273. package/src/plugins/runtime/python/__pycache__/message_queue.cpython-311.pyc +0 -0
  274. package/src/plugins/runtime/python/__pycache__/namespaces.cpython-311.pyc +0 -0
  275. package/src/plugins/runtime/python/__pycache__/plugin.cpython-311.pyc +0 -0
  276. package/src/plugins/runtime/python/__pycache__/plugin_api.cpython-311.pyc +0 -0
  277. package/src/plugins/runtime/python/__pycache__/plugin_logger.cpython-311.pyc +0 -0
  278. package/src/plugins/runtime/python/__pycache__/proxy_utils.cpython-311.pyc +0 -0
  279. package/src/plugins/runtime/python/__pycache__/schema.cpython-311.pyc +0 -0
  280. package/src/plugins/runtime/python/__pycache__/storage.cpython-311.pyc +0 -0
  281. package/src/plugins/runtime/python/__pycache__/storage_controller.cpython-311.pyc +0 -0
  282. package/src/plugins/runtime/python/__pycache__/typings.cpython-311.pyc +0 -0
  283. package/src/plugins/runtime/python/child.py +0 -248
  284. package/src/plugins/runtime/python/index.ts +0 -73
  285. package/src/plugins/runtime/python/namespaces.py +0 -101
  286. package/src/plugins/runtime/python/plugin.py +0 -155
  287. package/src/plugins/runtime/python/plugin_api.py +0 -29
  288. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-310.pyc +0 -0
  289. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-311.pyc +0 -0
  290. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-38.pyc +0 -0
  291. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-39.pyc +0 -0
  292. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-311.pyc +0 -0
  293. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-39.pyc +0 -0
  294. package/src/plugins/runtime/python/proxy/__pycache__/core_manager.cpython-311.pyc +0 -0
  295. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-310.pyc +0 -0
  296. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-311.pyc +0 -0
  297. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-38.pyc +0 -0
  298. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-39.pyc +0 -0
  299. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-310.pyc +0 -0
  300. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-311.pyc +0 -0
  301. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-38.pyc +0 -0
  302. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-39.pyc +0 -0
  303. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-310.pyc +0 -0
  304. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-311.pyc +0 -0
  305. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-38.pyc +0 -0
  306. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-39.pyc +0 -0
  307. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-310.pyc +0 -0
  308. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-311.pyc +0 -0
  309. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-38.pyc +0 -0
  310. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-39.pyc +0 -0
  311. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-310.pyc +0 -0
  312. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-311.pyc +0 -0
  313. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-38.pyc +0 -0
  314. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-39.pyc +0 -0
  315. package/src/plugins/runtime/python/proxy/camera_device.py +0 -1732
  316. package/src/plugins/runtime/python/proxy/core_manager.py +0 -126
  317. package/src/plugins/runtime/python/proxy/device_manager.py +0 -197
  318. package/src/plugins/runtime/python/schema.py +0 -99
  319. package/src/plugins/runtime/python/storage.py +0 -353
  320. package/src/plugins/runtime/python/storage_controller.py +0 -102
  321. package/src/plugins/runtime/python/typings.py +0 -195
  322. package/src/plugins/schema.ts +0 -472
  323. package/src/plugins/types.ts +0 -60
  324. package/src/plugins/worker.ts +0 -250
  325. package/src/rpc/index.ts +0 -149
  326. package/src/rpc/namespaces.ts +0 -79
  327. package/src/rpc/server.ts +0 -422
  328. package/src/rpc/types.ts +0 -119
  329. package/src/rpc/utils.ts +0 -16
  330. package/src/services/config/constants.ts +0 -47
  331. package/src/services/config/defaults.ts +0 -57
  332. package/src/services/config/index.ts +0 -744
  333. package/src/services/config/types.ts +0 -211
  334. package/src/services/logger/index.ts +0 -96
  335. package/src/types.ts +0 -47
  336. package/src/utils/path.ts +0 -16
  337. package/src/utils/pythonInstaller.ts +0 -597
  338. package/tsconfig.json +0 -37
  339. package/types/fastify.d.ts +0 -14
  340. package/updates.config.js +0 -3
  341. /package/dist/interface/assets/{@xterm.DYP7pi_n.0.0.50-internal.0.css → @xterm.DYP7pi_n.0.0.50-internal.2.css} +0 -0
  342. /package/dist/interface/assets/{Adminpanel.BKek2EMH.0.0.50-internal.0.css → Adminpanel.BKek2EMH.0.0.50-internal.2.css} +0 -0
  343. /package/dist/interface/assets/{Cameras.BDWZJqPN.0.0.50-internal.0.css → Cameras.BDWZJqPN.0.0.50-internal.2.css} +0 -0
  344. /package/dist/interface/assets/{Camview.BFUFMoNX.0.0.50-internal.0.css → Camview.BFUFMoNX.0.0.50-internal.2.css} +0 -0
  345. /package/dist/interface/assets/{CuiConsole.DCYyxdVg.0.0.50-internal.0.css → CuiConsole.DCYyxdVg.0.0.50-internal.2.css} +0 -0
  346. /package/dist/interface/assets/{CuiPluginCard.yF8V0SZY.0.0.50-internal.0.css → CuiPluginCard.yF8V0SZY.0.0.50-internal.2.css} +0 -0
  347. /package/dist/interface/assets/{CuiTimeline.BkIwlYtw.0.0.50-internal.0.css → CuiTimeline.BkIwlYtw.0.0.50-internal.2.css} +0 -0
  348. /package/dist/interface/assets/{Plugin.DJElsAn5.0.0.50-internal.0.css → Plugin.DJElsAn5.0.0.50-internal.2.css} +0 -0
  349. /package/dist/interface/assets/{Plugins.0h77qnmN.0.0.50-internal.0.css → Plugins.0h77qnmN.0.0.50-internal.2.css} +0 -0
  350. /package/dist/interface/assets/{Settings.CkgfRkQr.0.0.50-internal.0.css → Settings.CkgfRkQr.0.0.50-internal.2.css} +0 -0
  351. /package/dist/interface/assets/{SettingsAccount.DeFul3eQ.0.0.50-internal.0.css → SettingsAccount.DeFul3eQ.0.0.50-internal.2.css} +0 -0
  352. /package/dist/interface/assets/{SettingsBackup.CX0rT0QJ.0.0.50-internal.0.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.2.css} +0 -0
  353. /package/dist/interface/assets/{highlight.Ch2EwETz.0.0.50-internal.0.css → highlight.Ch2EwETz.0.0.50-internal.2.css} +0 -0
  354. /package/dist/interface/assets/{logo-256.BCQk9H1-.0.0.50-internal.0.png → logo-256.BCQk9H1-.0.0.50-internal.2.png} +0 -0
  355. /package/dist/interface/assets/{logo-512.DLKVOU2S.0.0.50-internal.0.png → logo-512.DLKVOU2S.0.0.50-internal.2.png} +0 -0
  356. /package/dist/interface/assets/{logo.DmEiRk0z.0.0.50-internal.0.png → logo.DmEiRk0z.0.0.50-internal.2.png} +0 -0
  357. /package/dist/interface/assets/{main.Cip9LkS3.0.0.50-internal.0.css → main.Cip9LkS3.0.0.50-internal.2.css} +0 -0
  358. /package/dist/interface/assets/{mode-json.Br7xisR1.0.0.50-internal.0.js → mode-json.Br7xisR1.0.0.50-internal.2.js} +0 -0
  359. /package/dist/interface/assets/{mode-yaml.CIYL8U3d.0.0.50-internal.0.js → mode-yaml.CIYL8U3d.0.0.50-internal.2.js} +0 -0
  360. /package/dist/interface/assets/{worker-base.jEXLGV2h.0.0.50-internal.0.js → worker-base.jEXLGV2h.0.0.50-internal.2.js} +0 -0
  361. /package/dist/interface/assets/{worker-json.DgwNIOck.0.0.50-internal.0.js → worker-json.DgwNIOck.0.0.50-internal.2.js} +0 -0
  362. /package/dist/interface/assets/{worker-yaml.B3uUYINB.0.0.50-internal.0.js → worker-yaml.B3uUYINB.0.0.50-internal.2.js} +0 -0
  363. /package/dist/interface/js/{@babel.l0sNRNKZ.0.0.50-internal.0.js → @babel.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  364. /package/dist/interface/js/{@intlify.BkGPX90O.0.0.50-internal.0.js → @intlify.BkGPX90O.0.0.50-internal.2.js} +0 -0
  365. /package/dist/interface/js/{@kurkle.D8fDXNIl.0.0.50-internal.0.js → @kurkle.D8fDXNIl.0.0.50-internal.2.js} +0 -0
  366. /package/dist/interface/js/{@primeuix.BFAY2Bk9.0.0.50-internal.0.js → @primeuix.BFAY2Bk9.0.0.50-internal.2.js} +0 -0
  367. /package/dist/interface/js/{@react-dnd.CcwRs9xb.0.0.50-internal.0.js → @react-dnd.CcwRs9xb.0.0.50-internal.2.js} +0 -0
  368. /package/dist/interface/js/{@socket.io.Dkula2eQ.0.0.50-internal.0.js → @socket.io.Dkula2eQ.0.0.50-internal.2.js} +0 -0
  369. /package/dist/interface/js/{@vue.B5vqhCp2.0.0.50-internal.0.js → @vue.B5vqhCp2.0.0.50-internal.2.js} +0 -0
  370. /package/dist/interface/js/{@xterm.CAa7rpjv.0.0.50-internal.0.js → @xterm.C-5Lxnx_.0.0.50-internal.2.js} +0 -0
  371. /package/dist/interface/js/{axios.DHr9lByg.0.0.50-internal.0.js → axios.DHr9lByg.0.0.50-internal.2.js} +0 -0
  372. /package/dist/interface/js/{birpc.l0sNRNKZ.0.0.50-internal.0.js → birpc.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  373. /package/dist/interface/js/{compare-versions.DqEOhma6.0.0.50-internal.0.js → compare-versions.DqEOhma6.0.0.50-internal.2.js} +0 -0
  374. /package/dist/interface/js/{dijkstrajs.C00ieaqj.0.0.50-internal.0.js → dijkstrajs.C00ieaqj.0.0.50-internal.2.js} +0 -0
  375. /package/dist/interface/js/{engine.io-parser.BiEtp6m2.0.0.50-internal.0.js → engine.io-parser.BiEtp6m2.0.0.50-internal.2.js} +0 -0
  376. /package/dist/interface/js/{entities.C20TfXL6.0.0.50-internal.0.js → entities.C20TfXL6.0.0.50-internal.2.js} +0 -0
  377. /package/dist/interface/js/{ev-emitter.X5f1qa-c.0.0.50-internal.0.js → ev-emitter.X5f1qa-c.0.0.50-internal.2.js} +0 -0
  378. /package/dist/interface/js/{get-size.D1dS-IaP.0.0.50-internal.0.js → get-size.D1dS-IaP.0.0.50-internal.2.js} +0 -0
  379. /package/dist/interface/js/{hookable.l0sNRNKZ.0.0.50-internal.0.js → hookable.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  380. /package/dist/interface/js/{mdurl.k9Sl0PQj.0.0.50-internal.0.js → mdurl.k9Sl0PQj.0.0.50-internal.2.js} +0 -0
  381. /package/dist/interface/js/{perfect-debounce.l0sNRNKZ.0.0.50-internal.0.js → perfect-debounce.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  382. /package/dist/interface/js/{primelocale.Bga3dOQu.0.0.50-internal.0.js → primelocale.Bga3dOQu.0.0.50-internal.2.js} +0 -0
  383. /package/dist/interface/js/{punycode.js.Dj65hjkv.0.0.50-internal.0.js → punycode.js.Dj65hjkv.0.0.50-internal.2.js} +0 -0
  384. /package/dist/interface/js/{react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.2.js} +0 -0
  385. /package/dist/interface/js/{redux.BFxtlG_c.0.0.50-internal.0.js → redux.BFxtlG_c.0.0.50-internal.2.js} +0 -0
  386. /package/dist/interface/js/{tslib.9k7AwCpt.0.0.50-internal.0.js → tslib.9k7AwCpt.0.0.50-internal.2.js} +0 -0
  387. /package/dist/interface/js/{uc.micro.kMc2yuuw.0.0.50-internal.0.js → uc.micro.kMc2yuuw.0.0.50-internal.2.js} +0 -0
  388. /package/dist/interface/js/{uuid.C6aID195.0.0.50-internal.0.js → uuid.C6aID195.0.0.50-internal.2.js} +0 -0
  389. /package/dist/interface/js/{vue.l0sNRNKZ.0.0.50-internal.0.js → vue.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  390. /package/dist/interface/js/{zod.SKKegNRO.0.0.50-internal.0.js → zod.SKKegNRO.0.0.50-internal.2.js} +0 -0
@@ -1,240 +0,0 @@
1
- import ansiRegex from 'ansi-regex';
2
- import { red } from 'ansicolor';
3
- import { createReadStream, existsSync } from 'node:fs';
4
- import { stat } from 'node:fs/promises';
5
- import { Tail } from 'tail';
6
- import { container } from 'tsyringe';
7
-
8
- import type { EventEmitter } from 'node:events';
9
- import type { ReadStream } from 'node:fs';
10
- import type { Namespace, Server, Socket } from 'socket.io';
11
- import type { CameraUiAPI } from '../../../api.js';
12
- import type { PluginManager } from '../../../plugins/index.js';
13
- import type { ConfigService } from '../../../services/config/index.js';
14
- import type { SocketNsp } from '../types.js';
15
-
16
- export class LogsNamespace {
17
- public nsp: Namespace;
18
- public nspName: SocketNsp = '/logs';
19
-
20
- private tailInstances = new Map<string, Tail & EventEmitter>();
21
-
22
- private api: CameraUiAPI;
23
- private configService: ConfigService;
24
- private pluginManager: PluginManager;
25
-
26
- constructor(io: Server) {
27
- this.api = container.resolve<CameraUiAPI>('api');
28
- this.configService = container.resolve<ConfigService>('configService');
29
- this.pluginManager = container.resolve<PluginManager>('pluginManager');
30
-
31
- this.nsp = io.of(this.nspName);
32
- this.nsp.on('connection', (socket: Socket) => {
33
- socket.on('get-all-logs', () => this.getAllLogs(socket));
34
- socket.on('get-camera-log', (cameraName: string, options?: { sinceLastStart?: boolean }) => this.getCameraLog(socket, cameraName, options));
35
- socket.on('get-plugin-log', (pluginName: string, options?: { sinceLastStart?: boolean }) => this.getPluginLog(socket, pluginName, options));
36
- });
37
- }
38
-
39
- public getAllLogs(socket: Socket) {
40
- const emitTo = 'stdout';
41
- this.tailLogFromFileNative(socket, this.configService.LOG_FILE, emitTo);
42
- }
43
-
44
- public getCameraLog(socket: Socket, cameraName: string, options?: { sinceLastStart?: boolean }) {
45
- const emitTo = `stdout/${cameraName}`;
46
- const cameraController = this.api.getCamera(cameraName);
47
-
48
- if (!cameraController) {
49
- socket.emit(emitTo, red(`Camera "${cameraName}" not found.\r\n`));
50
- return;
51
- }
52
-
53
- this.tailLogFromFileNative(socket, cameraController.logPath, emitTo, cameraController.camera.name, options);
54
- }
55
-
56
- public getPluginLog(socket: Socket, pluginName: string, options?: { sinceLastStart?: boolean }) {
57
- const emitTo = `stdout/${pluginName}`;
58
- const plugin = this.pluginManager.plugins.get(pluginName);
59
-
60
- if (!plugin) {
61
- socket.emit(emitTo, red(`Plugin "${pluginName}" not found.\r\n`));
62
- return;
63
- }
64
-
65
- this.tailLogFromFileNative(socket, plugin.logPath, emitTo, plugin.displayName, options);
66
- }
67
-
68
- private async tailLogFromFileNative(socket: Socket, logFile: string, to: string, filter?: string | number, options?: { sinceLastStart?: boolean }) {
69
- if (!existsSync(logFile)) {
70
- socket.emit(to, red(`\r\nNo log file exists at path: ${logFile}\r\n`));
71
- return;
72
- }
73
-
74
- const tailId = `${logFile}-${to}`;
75
-
76
- try {
77
- const logStats = await stat(logFile);
78
- const fileContent = await this.readFileContent(logFile, logStats.size);
79
-
80
- if (options?.sinceLastStart) {
81
- const lastStartPosition = this.findLastStartPosition(fileContent);
82
- if (lastStartPosition !== -1) {
83
- const recentContent = fileContent.substring(lastStartPosition);
84
- this.emitContent(socket, to, recentContent, filter);
85
- } else {
86
- const logStartPosition = logStats.size <= 50000 ? 0 : logStats.size - 50000;
87
- const logStream = createReadStream(logFile, { start: logStartPosition });
88
- this.handleLogStream(socket, to, logStream, filter);
89
- }
90
- } else {
91
- const logStartPosition = logStats.size <= 50000 ? 0 : logStats.size - 50000;
92
- const logStream = createReadStream(logFile, { start: logStartPosition });
93
- this.handleLogStream(socket, to, logStream, filter);
94
- }
95
-
96
- this.setupTail(socket, logFile, to, tailId, filter);
97
- } catch (error: any) {
98
- socket.emit(to, red(`Failed to read log file: ${error.message}\r\n`));
99
- }
100
- }
101
-
102
- private async readFileContent(logFile: string, size: number): Promise<string> {
103
- const startPosition = size <= 50000 ? 0 : size - 50000;
104
- const fd = createReadStream(logFile, { start: startPosition });
105
-
106
- return new Promise((resolve, reject) => {
107
- let content = '';
108
- fd.on('data', (chunk) => {
109
- content += chunk.toString();
110
- });
111
- fd.on('end', () => resolve(content));
112
- fd.on('error', reject);
113
- });
114
- }
115
-
116
- private findLastStartPosition(content: string): number {
117
- const startMarkerPattern = /-{3,}\r?\n[\d/]+, [\d:]+ [AP]M:/;
118
- const matches = [...content.matchAll(new RegExp(startMarkerPattern, 'g'))];
119
-
120
- if (matches.length > 0) {
121
- const lastMatch = matches[matches.length - 1];
122
- return lastMatch.index || -1;
123
- }
124
-
125
- return -1;
126
- }
127
-
128
- private emitContent(socket: Socket, to: string, content: string, filter?: string | number) {
129
- const lines = content.split(/\r?\n/);
130
- lines.forEach((line) => {
131
- if (line.trim()) {
132
- let processedLine = line;
133
- if (filter !== undefined) {
134
- processedLine = this.filterLine(processedLine, filter);
135
- }
136
- socket.emit(to, processedLine + '\r\n');
137
- }
138
- });
139
- }
140
-
141
- private handleLogStream(socket: Socket, to: string, logStream: ReadStream, filter?: string | number) {
142
- logStream.on('data', (buffer) => {
143
- let line = buffer.toString().split(/\r?\n/).join('\r\n');
144
- if (filter !== undefined) {
145
- line = this.filterLine(line, filter);
146
- }
147
- socket.emit(to, line);
148
- });
149
-
150
- logStream.on('end', () => {
151
- logStream.close();
152
- });
153
-
154
- logStream.on('error', (error) => {
155
- socket.emit(to, red(`Error reading log file: ${error.message}\r\n`));
156
- logStream.close();
157
- });
158
- }
159
-
160
- private setupTail(socket: Socket, logFile: string, to: string, tailId: string, filter?: string | number) {
161
- if (this.tailInstances.has(tailId)) {
162
- const existingTail = this.tailInstances.get(tailId);
163
- existingTail?.unwatch();
164
- this.tailInstances.delete(tailId);
165
- }
166
-
167
- const tail = new Tail(logFile, {
168
- fromBeginning: false,
169
- useWatchFile: true,
170
- fsWatchOptions: {
171
- interval: 200,
172
- },
173
- }) as Tail & EventEmitter;
174
-
175
- this.tailInstances.set(tailId, tail);
176
-
177
- const onLine = (line: string) => {
178
- let processedLine = line.toString().split(/\r?\n/).join('\r\n');
179
- if (filter !== undefined) {
180
- processedLine = this.filterLine(processedLine, filter);
181
- }
182
- socket.emit(to, processedLine + '\r\n');
183
- };
184
-
185
- const onError = (error: Error | string) => {
186
- let errorLine = error.toString().split(/\r?\n/).join('\r\n');
187
- if (filter !== undefined) {
188
- errorLine = this.filterLine(errorLine, filter);
189
- }
190
- socket.emit(to, red(errorLine + '\r\n'));
191
- };
192
-
193
- tail.on('line', onLine);
194
- tail.on('error', onError);
195
-
196
- const cleanup = () => {
197
- tail.removeListener('line', onLine);
198
- tail.removeListener('error', onError);
199
- tail.unwatch();
200
- this.tailInstances.delete(tailId);
201
-
202
- socket.removeAllListeners('end');
203
- socket.removeAllListeners('disconnect');
204
- };
205
-
206
- socket.on('end', cleanup);
207
- socket.on('disconnect', cleanup);
208
- }
209
-
210
- private filterLine(line: string, filter: string | number): string {
211
- if (typeof filter === 'string') {
212
- return this.removeName(line, filter);
213
- } else {
214
- return this.removeBracketedContent(line, filter);
215
- }
216
- }
217
-
218
- private removeName(str: string, cameraName: string) {
219
- const escapeRegex = (string: string) => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
220
- const escapedCameraName = escapeRegex(cameraName);
221
- const regex = new RegExp(`(${ansiRegex().source}\\s*\\[${escapedCameraName}\\]\\s*${ansiRegex().source})`, 'g');
222
-
223
- return str
224
- .replace(regex, ' ')
225
- .replace(/[^\S\r\n]+/g, ' ')
226
- .replace(/^[^\S\r\n]+|[^\S\r\n]+$/gm, '');
227
- }
228
-
229
- private removeBracketedContent(str: string, n: number) {
230
- let count = 0;
231
- const regex = new RegExp(`(${ansiRegex().source}\\s*\\[[^\\]]+\\]\\s*${ansiRegex().source})`, 'g');
232
-
233
- const replacedStr = str.replace(regex, (match) => {
234
- count++;
235
- return count === n ? ' ' : match;
236
- });
237
-
238
- return replacedStr.replace(/[^\S\r\n]+/g, ' ').replace(/^[^\S\r\n]+|[^\S\r\n]+$/gm, '');
239
- }
240
- }
@@ -1,27 +0,0 @@
1
- import { container } from 'tsyringe';
2
-
3
- import type { Namespace, Server, Socket } from 'socket.io';
4
- import type { CameraUi } from '../../../main.js';
5
- import type { SocketNsp } from '../types.js';
6
-
7
- export class MainNamespace {
8
- public nsp: Namespace;
9
- public nspName: SocketNsp = '/camera.ui';
10
-
11
- private cameraui: CameraUi;
12
-
13
- constructor(io: Server) {
14
- this.cameraui = container.resolve<CameraUi>('cameraui');
15
-
16
- this.nsp = io.of(this.nspName);
17
- this.nsp.on('connection', (socket: Socket) => {
18
- socket.on('get-status', this.getStatus.bind(this));
19
- });
20
- }
21
-
22
- public async getStatus(payload: any, callback?: Function): Promise<'loading' | 'ready'> {
23
- const status = this.cameraui.status;
24
- callback?.(status);
25
- return status;
26
- }
27
- }
@@ -1,301 +0,0 @@
1
- import { cpus, loadavg, platform } from 'node:os';
2
- import { currentLoad, mem, processes } from 'systeminformation';
3
- import { container } from 'tsyringe';
4
-
5
- import type { Namespace, Server, Socket } from 'socket.io';
6
- import type { Systeminformation } from 'systeminformation';
7
- import type { CameraUiAPI } from '../../../api.js';
8
- import type { Go2Rtc } from '../../../go2rtc/index.js';
9
- import type { PluginManager } from '../../../plugins/index.js';
10
- import type { NATS } from '../../../rpc/server.js';
11
- import type { AllProcesses, ProcessInfo, ProcessType, ServerProcesses, SocketNsp, WorkerProcesses } from '../types.js';
12
-
13
- export class MetricsNamespace {
14
- public nsp: Namespace;
15
- public nspName: SocketNsp = '/metrics';
16
-
17
- private readonly HISTORY_INTERVAL = 60000;
18
- private readonly REALTIME_INTERVAL = 5000;
19
- private readonly MAX_HISTORY_POINTS = 60;
20
-
21
- private api: CameraUiAPI;
22
- private pluginManager: PluginManager;
23
- private go2rtc: Go2Rtc;
24
- private natsServer: NATS;
25
-
26
- private history = {
27
- system: [] as ProcessInfo[],
28
- processes: {
29
- 'camera.ui': [] as ProcessInfo[],
30
- go2rtc: [] as ProcessInfo[],
31
- nats: [] as ProcessInfo[],
32
- },
33
- plugins: {} as WorkerProcesses,
34
- frameWorkers: {} as WorkerProcesses,
35
- };
36
-
37
- private realtimeData: { system: ProcessInfo | null; processes: AllProcesses | null } = {
38
- system: null,
39
- processes: null,
40
- };
41
-
42
- constructor(io: Server) {
43
- this.api = container.resolve<CameraUiAPI>('api');
44
- this.pluginManager = container.resolve<PluginManager>('pluginManager');
45
- this.go2rtc = container.resolve<Go2Rtc>('go2rtc');
46
- this.natsServer = container.resolve<NATS>('natsServer');
47
-
48
- if (platform() === 'freebsd') {
49
- // eslint-disable-next-line @typescript-eslint/unbound-method
50
- this.getSystemLoad = this.getSystemLoadAlt;
51
- }
52
-
53
- this.nsp = io.of(this.nspName);
54
- this.nsp.on('connection', (socket: Socket) => {
55
- socket.on('get-system-info', this.handleGetSystemInfo.bind(this));
56
- socket.on('get-server-process-info', this.handleGetServerProcessInfo.bind(this));
57
- socket.on('get-plugins-process-info', this.handleGetPluginsProcessInfo.bind(this));
58
- socket.on('get-frameworker-process-info', this.handleGetFrameWorkerProcessInfo.bind(this));
59
-
60
- if (this.realtimeData.system) {
61
- socket.emit('system-infos-realtime', this.realtimeData.system);
62
- }
63
- if (this.realtimeData.processes) {
64
- socket.emit('process-infos-realtime', this.realtimeData.processes);
65
- }
66
- });
67
-
68
- this.setupIntervals();
69
- }
70
-
71
- private setupIntervals(): void {
72
- setInterval(async () => {
73
- let processData = this.realtimeData.processes;
74
- let systemData = this.realtimeData.system;
75
-
76
- if (!processData || !systemData) {
77
- [processData, systemData] = await Promise.all([this.collectProcessData(), this.getSystemLoad()]);
78
- }
79
-
80
- this.updateHistory(processData, systemData);
81
- this.emitHistoryUpdates(processData, systemData);
82
- }, this.HISTORY_INTERVAL);
83
-
84
- setInterval(async () => {
85
- const [processData, systemData] = await Promise.all([this.collectProcessData(), this.getSystemLoad()]);
86
-
87
- this.realtimeData = {
88
- system: systemData,
89
- processes: processData,
90
- };
91
-
92
- if (this.shouldUpdateHistory()) {
93
- this.updateHistory(processData, systemData);
94
- }
95
-
96
- this.emitRealtimeUpdates(processData, systemData);
97
- }, this.REALTIME_INTERVAL);
98
-
99
- this.collectInitialData();
100
- }
101
-
102
- private async collectInitialData(): Promise<void> {
103
- const [processData, systemData] = await Promise.all([this.collectProcessData(), this.getSystemLoad()]);
104
-
105
- this.updateHistory(processData, systemData);
106
- this.realtimeData = {
107
- system: systemData,
108
- processes: processData,
109
- };
110
- }
111
-
112
- private async collectProcessData(): Promise<AllProcesses> {
113
- const allProcesses = await processes();
114
- const currentTime = Date.now();
115
- const processList = allProcesses.list;
116
-
117
- const createProcessInfo = (process: Systeminformation.ProcessesProcessData, name: string, type: ProcessType): ProcessInfo => ({
118
- name,
119
- type,
120
- pid: process.pid,
121
- cpuLoad: (process.cpu || 0.1).toFixed(2),
122
- memLoad: (process.mem || 0.1).toFixed(2),
123
- timestamp: currentTime,
124
- });
125
-
126
- const serverProcess = processList.find((p) => p.pid === process.pid);
127
- const go2rtcProcess = processList.find((p) => p.pid === this.go2rtc.getPID());
128
- const natsProcess = processList.find((p) => p.pid === this.natsServer.getPID());
129
-
130
- const plugins = Array.from(this.pluginManager.plugins);
131
- const pluginProcesses = Object.fromEntries(
132
- plugins
133
- .map(([name, plugin]) => {
134
- const proc = processList.find((p) => p.pid === plugin.worker.getPID());
135
- return proc ? [name, createProcessInfo(proc, name, 'plugin')] : undefined;
136
- })
137
- .filter((entry): entry is [string, ProcessInfo] => entry !== undefined),
138
- );
139
-
140
- const cameraControllers = this.api.getCameras();
141
- const frameWorkerProcesses = Object.fromEntries(
142
- cameraControllers
143
- .map((controller) => {
144
- const proc = processList.find((p) => p.pid === controller.frameWorker.getPID());
145
- return proc ? [controller.frameWorker.name, createProcessInfo(proc, controller.frameWorker.name, 'frameworker')] : null;
146
- })
147
- .filter((entry): entry is [string, ProcessInfo] => entry !== null),
148
- );
149
-
150
- return {
151
- 'camera.ui': serverProcess ? createProcessInfo(serverProcess, 'camera.ui', 'core') : this.defaultProcessInfo('camera.ui', 'core'),
152
- go2rtc: go2rtcProcess ? createProcessInfo(go2rtcProcess, 'go2rtc', 'core') : this.defaultProcessInfo('go2rtc', 'core'),
153
- nats: natsProcess ? createProcessInfo(natsProcess, 'nats', 'core') : this.defaultProcessInfo('nats', 'core'),
154
- plugins: pluginProcesses,
155
- workers: frameWorkerProcesses,
156
- };
157
- }
158
-
159
- private async getSystemLoad(): Promise<ProcessInfo> {
160
- const load = (await currentLoad()).currentLoad;
161
- const memory = await mem();
162
- const memoryFreePercent = ((memory.total - memory.available) / memory.total) * 100;
163
-
164
- return {
165
- name: 'system',
166
- type: 'system',
167
- cpuLoad: load.toFixed(2),
168
- memLoad: memoryFreePercent.toFixed(2),
169
- timestamp: Date.now(),
170
- };
171
- }
172
-
173
- private async getSystemLoadAlt(): Promise<ProcessInfo> {
174
- const load = (loadavg()[0] * 100) / cpus().length;
175
- const memory = await mem();
176
- const memoryFreePercent = ((memory.total - memory.available) / memory.total) * 100;
177
-
178
- return {
179
- name: 'system',
180
- type: 'system',
181
- cpuLoad: load.toFixed(2),
182
- memLoad: memoryFreePercent.toFixed(2),
183
- timestamp: Date.now(),
184
- };
185
- }
186
-
187
- private updateHistory(processData: AllProcesses, systemData: ProcessInfo): void {
188
- this.history.system.push(systemData);
189
- this.history.system = this.history.system.slice(-this.MAX_HISTORY_POINTS);
190
-
191
- if (processData['camera.ui']) {
192
- this.history.processes['camera.ui'].push(processData['camera.ui']);
193
- this.history.processes['camera.ui'] = this.history.processes['camera.ui'].slice(-this.MAX_HISTORY_POINTS);
194
- }
195
- if (processData.go2rtc) {
196
- this.history.processes.go2rtc.push(processData.go2rtc);
197
- this.history.processes.go2rtc = this.history.processes.go2rtc.slice(-this.MAX_HISTORY_POINTS);
198
- }
199
- if (processData.nats) {
200
- this.history.processes.nats.push(processData.nats);
201
- this.history.processes.nats = this.history.processes.nats.slice(-this.MAX_HISTORY_POINTS);
202
- }
203
-
204
- Object.entries(processData.plugins || {}).forEach(([name, info]) => {
205
- if (!this.history.plugins[name]) {
206
- this.history.plugins[name] = [];
207
- }
208
- this.history.plugins[name].push(info);
209
- this.history.plugins[name] = this.history.plugins[name].slice(-this.MAX_HISTORY_POINTS);
210
- });
211
-
212
- Object.entries(processData.workers || {}).forEach(([name, info]) => {
213
- if (!this.history.frameWorkers[name]) {
214
- this.history.frameWorkers[name] = [];
215
- }
216
- this.history.frameWorkers[name].push(info);
217
- this.history.frameWorkers[name] = this.history.frameWorkers[name].slice(-this.MAX_HISTORY_POINTS);
218
- });
219
-
220
- this.cleanupOrphanedEntries(processData);
221
- }
222
-
223
- private cleanupOrphanedEntries(currentData: AllProcesses): void {
224
- Object.keys(this.history.plugins).forEach((name) => {
225
- if (!currentData.plugins?.[name]) {
226
- delete this.history.plugins[name];
227
- }
228
- });
229
-
230
- Object.keys(this.history.frameWorkers).forEach((name) => {
231
- if (!currentData.workers?.[name]) {
232
- delete this.history.frameWorkers[name];
233
- }
234
- });
235
- }
236
-
237
- private emitHistoryUpdates(processData: AllProcesses, systemData: ProcessInfo): void {
238
- if (!this.hasConnectedClients()) {
239
- return;
240
- }
241
-
242
- this.nsp.emit('process-infos', processData);
243
- this.nsp.emit('system-infos', systemData);
244
- }
245
-
246
- private emitRealtimeUpdates(processData: AllProcesses, systemData: ProcessInfo): void {
247
- if (!this.hasConnectedClients()) {
248
- return;
249
- }
250
-
251
- this.nsp.emit('process-infos-realtime', processData);
252
- this.nsp.emit('system-infos-realtime', systemData);
253
- }
254
-
255
- private async handleGetSystemInfo(payload: any, callback?: Function): Promise<ProcessInfo[]> {
256
- callback?.(this.history.system);
257
- return this.history.system;
258
- }
259
-
260
- private async handleGetServerProcessInfo(payload: any, callback?: Function): Promise<ServerProcesses> {
261
- const data: ServerProcesses = {
262
- 'camera.ui': this.history.processes['camera.ui'],
263
- go2rtc: this.history.processes.go2rtc,
264
- nats: this.history.processes.nats,
265
- };
266
- callback?.(data);
267
- return data;
268
- }
269
-
270
- private async handleGetPluginsProcessInfo(payload: any, callback?: Function): Promise<WorkerProcesses> {
271
- callback?.(this.history.plugins);
272
- return this.history.plugins;
273
- }
274
-
275
- private async handleGetFrameWorkerProcessInfo(payload: any, callback?: Function): Promise<WorkerProcesses> {
276
- callback?.(this.history.frameWorkers);
277
- return this.history.frameWorkers;
278
- }
279
-
280
- private hasConnectedClients(): boolean {
281
- return this.nsp.sockets.size > 0;
282
- }
283
-
284
- private defaultProcessInfo(name: string, type: ProcessType): ProcessInfo {
285
- return {
286
- name,
287
- type,
288
- pid: -1,
289
- cpuLoad: '0.00',
290
- memLoad: '0.00',
291
- timestamp: 0,
292
- };
293
- }
294
-
295
- private shouldUpdateHistory(): boolean {
296
- return (
297
- (Object.keys(this.history.plugins).length === 0 && this.pluginManager.plugins.size > 0) ||
298
- (Object.keys(this.history.frameWorkers).length === 0 && this.api.getCameras().length > 0)
299
- );
300
- }
301
- }
@@ -1,43 +0,0 @@
1
- import { container } from 'tsyringe';
2
-
3
- import type { Namespace, Server, Socket } from 'socket.io';
4
- import type { LoggerService } from '../../../services/logger/index.js';
5
- import type { UiNotification } from '../../types/index.js';
6
- import type { SocketNsp } from '../types.js';
7
-
8
- export class NotificationsNamespace {
9
- public nsp: Namespace;
10
- public nspName: SocketNsp = '/notifications';
11
-
12
- private logger: LoggerService;
13
-
14
- constructor(io: Server) {
15
- this.logger = container.resolve<LoggerService>('logger');
16
-
17
- this.nsp = io.of(this.nspName);
18
- this.nsp.on('connection', (socket: Socket) => {
19
- socket.on('get-notifications', this.getNotifications.bind(this));
20
- socket.on('remove-notification', (id: string) => this.removeNotification(id));
21
- socket.on('clear-notifications', this.clearNotifications.bind(this));
22
- });
23
- }
24
-
25
- public clearNotifications(): void {
26
- this.logger.notifications.splice(0, this.logger.notifications.length);
27
- }
28
-
29
- public getNotifications(payload: any, callback?: Function): UiNotification[] {
30
- const notifications = this.logger.notifications;
31
-
32
- callback?.(notifications);
33
- return notifications;
34
- }
35
-
36
- public removeNotification(id?: string): void {
37
- const notificationIndex = this.logger.notifications.findIndex((notification) => notification._id === id);
38
-
39
- if (notificationIndex !== -1) {
40
- this.logger.notifications.splice(notificationIndex, 1);
41
- }
42
- }
43
- }
@@ -1,37 +0,0 @@
1
- import { container } from 'tsyringe';
2
-
3
- import type { Namespace, Server, Socket } from 'socket.io';
4
- import type { PluginManager } from '../../../plugins/index.js';
5
- import type { PLUGIN_STATUS } from '../../../plugins/types.js';
6
- import type { SocketNsp } from '../types.js';
7
-
8
- export class PluginsNamespace {
9
- public nsp: Namespace;
10
- public nspName: SocketNsp = '/plugins';
11
-
12
- private pluginManager: PluginManager;
13
-
14
- constructor(io: Server) {
15
- this.pluginManager = container.resolve<PluginManager>('pluginManager');
16
-
17
- this.nsp = io.of(this.nspName);
18
- this.nsp.on('connection', (socket: Socket) => {
19
- socket.on('get-plugin-status', this.pluginStatus.bind(this));
20
- });
21
- }
22
-
23
- public async pluginStatus(pluginName: string, callback?: Function): Promise<void | { pluginName: string; status: PLUGIN_STATUS }> {
24
- const plugin = this.pluginManager.plugins.get(pluginName);
25
-
26
- if (plugin) {
27
- const status = plugin.worker.status;
28
- const data = {
29
- pluginName,
30
- status,
31
- };
32
-
33
- callback?.(data);
34
- return data;
35
- }
36
- }
37
- }