@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,492 +0,0 @@
1
- import { green } from 'ansicolor';
2
- import { dump as yamlDump } from 'js-yaml';
3
- import { constants, existsSync } from 'node:fs';
4
- import { writeFile } from 'node:fs/promises';
5
- import { homedir } from 'node:os';
6
- import { join } from 'node:path';
7
- import { container } from 'tsyringe';
8
-
9
- import { ConfigService } from '../../services/config/index.js';
10
- import {
11
- checkDatabaseCorruption,
12
- checkInstalledFFmpegs,
13
- checkOrphanedProcesses,
14
- checkPathPermissions,
15
- checkPathsExist,
16
- checkPortAvailability,
17
- cleanUpFiles,
18
- } from './checks.js';
19
-
20
- import type { LoggerService } from '../../services/logger/index.js';
21
- import type {
22
- CleanedUpFilesResult,
23
- DatabaseCorruptionResult,
24
- FFmpegExistenceResult,
25
- OrphanedProcessesResult,
26
- PathExistenceResult,
27
- PathPermission,
28
- PathPermissionsResult,
29
- PortAvailabilityResult,
30
- } from './checks.js';
31
-
32
- export interface SelfCheckConfig {
33
- enabled: boolean;
34
- checks: {
35
- pathsExistence: boolean;
36
- pathsPermissions: boolean;
37
- cleanupFiles: boolean;
38
- databaseCorruption: boolean;
39
- portAvailability: boolean;
40
- ffmpegBinaries: boolean;
41
- orphanedProcesses: boolean;
42
- };
43
- }
44
-
45
- export interface SelfCheckResults {
46
- status: 'success' | 'error' | 'disabled';
47
- error?: string;
48
- pathsExistence?: PathExistenceResult[];
49
- pathsPermissions?: PathPermissionsResult[];
50
- cleanedUpFiles?: CleanedUpFilesResult[];
51
- databaseCorruption?: DatabaseCorruptionResult;
52
- portAvailability?: PortAvailabilityResult[];
53
- installedFFmpegs?: FFmpegExistenceResult[];
54
- orphanedProcesses?: OrphanedProcessesResult[];
55
- }
56
-
57
- interface IssueReport {
58
- type: string;
59
- message: string;
60
- details?: any;
61
- }
62
-
63
- export class SelfCheck {
64
- private logger: LoggerService;
65
- private configService: ConfigService;
66
- private config: SelfCheckConfig;
67
-
68
- constructor(config: Partial<SelfCheckConfig> = {}) {
69
- this.logger = container.resolve<LoggerService>('logger');
70
- this.configService = container.resolve<ConfigService>('configService');
71
-
72
- this.config = {
73
- enabled: true,
74
- checks: {
75
- pathsExistence: true,
76
- pathsPermissions: true,
77
- cleanupFiles: true,
78
- databaseCorruption: true,
79
- portAvailability: true,
80
- ffmpegBinaries: true,
81
- orphanedProcesses: true,
82
- },
83
- ...config,
84
- };
85
- }
86
-
87
- public async run(): Promise<void> {
88
- if (!this.config.enabled) {
89
- this.logger.log('Self-check is disabled');
90
- return;
91
- }
92
-
93
- this.logger.log('Running self-checks...');
94
-
95
- const checkResults = await this.performChecks();
96
-
97
- if (checkResults.status === 'error') {
98
- this.logger.error(`Self-check failed: ${checkResults.error}`);
99
- throw new Error('SELF_CHECK_FAILED');
100
- }
101
-
102
- const criticalIssues = this.checkForCriticalIssues(checkResults);
103
- const nonCriticalIssues = this.checkForNonCriticalIssues(checkResults);
104
-
105
- if (criticalIssues.length > 0) {
106
- this.logger.error('Critical issues found during self-check. Check the detailed report for more information.');
107
- await this.saveCheckReport(checkResults, criticalIssues, nonCriticalIssues);
108
- throw new Error('CRITICAL_ISSUES_FOUND');
109
- }
110
-
111
- if (nonCriticalIssues.length > 0) {
112
- this.logger.warn('Non-critical issues found during self-check. Check the detailed report for more information.');
113
- } else {
114
- this.logger.log(green('Self-check passed successfully!'));
115
- }
116
-
117
- await this.saveCheckReport(checkResults, criticalIssues, nonCriticalIssues);
118
- }
119
-
120
- private async performChecks(): Promise<SelfCheckResults> {
121
- const results: Partial<SelfCheckResults> = {};
122
-
123
- const pathsToCheck = [
124
- this.configService.HOME_PATH,
125
- this.configService.STORAGE_PATH,
126
- this.configService.LOGS_PATH,
127
- this.configService.PIDS_FILE,
128
- this.configService.DATABASE_PATH,
129
- this.configService.TOKENS_PATH,
130
- this.configService.USERS_STORAGE_PATH,
131
- this.configService.TMP_PATH,
132
- this.configService.REPORTS_FILE,
133
- this.configService.PLUGINS_STORAGE_PATH,
134
- this.configService.PLUGINS_INSTALL_PATH,
135
- this.configService.LOG_FILE,
136
- this.configService.CONFIG_FILE,
137
- this.configService.SECRETS_FILE,
138
- this.configService.GO2RTC_BINARY,
139
- this.configService.GO2RTC_CONFIG_FILE,
140
- this.configService.NATS_BINARY,
141
- ];
142
-
143
- const pathsWithPermissionsToCheck: PathPermission[] = [
144
- { path: this.configService.GO2RTC_BINARY, mode: constants.X_OK },
145
- { path: this.configService.NATS_BINARY, mode: constants.X_OK },
146
- { path: this.configService.CONFIG_FILE, mode: constants.R_OK | constants.W_OK },
147
- { path: this.configService.GO2RTC_CONFIG_FILE, mode: constants.R_OK | constants.W_OK },
148
- { path: this.configService.SECRETS_FILE, mode: constants.R_OK | constants.W_OK },
149
- { path: this.configService.LOG_FILE, mode: constants.R_OK | constants.W_OK },
150
- { path: this.configService.DATABASE_PATH, mode: constants.R_OK | constants.W_OK },
151
- { path: this.configService.TOKENS_PATH, mode: constants.R_OK | constants.W_OK },
152
- { path: this.configService.HOME_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
153
- { path: this.configService.STORAGE_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
154
- { path: this.configService.LOGS_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
155
- { path: this.configService.USERS_STORAGE_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
156
- { path: this.configService.TMP_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
157
- { path: this.configService.PLUGINS_STORAGE_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
158
- { path: this.configService.PLUGINS_INSTALL_PATH, mode: constants.R_OK | constants.W_OK | constants.X_OK },
159
- { path: this.configService.PIDS_FILE, mode: constants.R_OK | constants.W_OK },
160
- ];
161
-
162
- const cleanedUpFiles: string[] = [];
163
-
164
- const portsToCheck = [
165
- this.configService.config.port,
166
- this.configService.go2rtcConfig.api.listen.split(':')[1],
167
- this.configService.go2rtcConfig.api.tls_listen.split(':')[1],
168
- this.configService.go2rtcConfig.rtsp.listen.split(':')[1],
169
- this.configService.go2rtcConfig.srtp.listen.split(':')[1],
170
- this.configService.go2rtcConfig.rtmp.listen.split(':')[1],
171
- this.configService.go2rtcConfig.webrtc.listen.split(':')[1],
172
- ]
173
- .filter((port) => port)
174
- .map((port) => parseInt(port as any, 10));
175
-
176
- try {
177
- if (this.config.checks.pathsExistence) {
178
- results.pathsExistence = await checkPathsExist(pathsToCheck);
179
- }
180
-
181
- if (this.config.checks.pathsPermissions) {
182
- results.pathsPermissions = await checkPathPermissions(pathsWithPermissionsToCheck);
183
- }
184
-
185
- if (this.config.checks.cleanupFiles) {
186
- results.cleanedUpFiles = await cleanUpFiles(cleanedUpFiles);
187
- }
188
-
189
- if (this.config.checks.databaseCorruption) {
190
- results.databaseCorruption = await checkDatabaseCorruption(this.configService.DATABASE_PATH);
191
- }
192
-
193
- if (this.config.checks.orphanedProcesses) {
194
- results.orphanedProcesses = await checkOrphanedProcesses(this.configService.processes);
195
- }
196
-
197
- if (this.config.checks.portAvailability) {
198
- results.portAvailability = await checkPortAvailability(portsToCheck);
199
- }
200
-
201
- if (this.config.checks.ffmpegBinaries) {
202
- results.installedFFmpegs = await checkInstalledFFmpegs();
203
- }
204
-
205
- return { status: 'success', ...results };
206
- } catch (error) {
207
- return { status: 'error', error: error.message, ...results };
208
- }
209
- }
210
-
211
- private checkForCriticalIssues(results: SelfCheckResults): IssueReport[] {
212
- const criticalIssues: IssueReport[] = [];
213
-
214
- if (results.databaseCorruption?.isCorrupt) {
215
- criticalIssues.push({
216
- type: 'Database Corruption',
217
- message: 'Database corruption detected',
218
- details: this.sanitizeDetails(results.databaseCorruption),
219
- });
220
- }
221
-
222
- if (results.pathsExistence) {
223
- const missingCriticalPaths = results.pathsExistence
224
- .filter((result) => !result.exists && this.isCriticalPath(result.path))
225
- .map((result) => ({
226
- type: 'Missing Critical Path',
227
- message: `Missing critical path: ${result.path}`,
228
- details: this.sanitizeDetails(result),
229
- }));
230
- criticalIssues.push(...missingCriticalPaths);
231
- }
232
-
233
- if (results.pathsPermissions) {
234
- const criticalPermissionIssues = results.pathsPermissions
235
- .filter((result) => !result.hasPermissions && this.isCriticalPath(result.path))
236
- .map((result) => ({
237
- type: 'Insufficient Permissions',
238
- message: `Insufficient permissions for critical path: ${result.path}`,
239
- details: this.sanitizeDetails(result),
240
- }));
241
- criticalIssues.push(...criticalPermissionIssues);
242
- }
243
-
244
- if (results.portAvailability) {
245
- const unavailablePorts = results.portAvailability
246
- .filter((result) => !result.isAvailable)
247
- .map((result) => ({
248
- type: 'Port Unavailable',
249
- message: `Required port ${result.port} is not available`,
250
- details: this.sanitizeDetails(result),
251
- }));
252
- criticalIssues.push(...unavailablePorts);
253
- }
254
-
255
- return criticalIssues;
256
- }
257
-
258
- private checkForNonCriticalIssues(results: SelfCheckResults): IssueReport[] {
259
- const nonCriticalIssues: IssueReport[] = [];
260
-
261
- if (results.pathsExistence) {
262
- const missingNonCriticalPaths = results.pathsExistence
263
- .filter((result) => !result.exists && !this.isCriticalPath(result.path))
264
- .map((result) => ({
265
- type: 'Missing Non-Critical Path',
266
- message: `Missing non-critical path: ${result.path}`,
267
- details: result,
268
- }));
269
- nonCriticalIssues.push(...missingNonCriticalPaths);
270
- }
271
-
272
- if (results.pathsPermissions) {
273
- const nonCriticalPermissionIssues = results.pathsPermissions
274
- .filter((result) => !result.hasPermissions && !this.isCriticalPath(result.path))
275
- .map((result) => ({
276
- type: 'Insufficient Permissions',
277
- message: `Insufficient permissions for non-critical path: ${result.path}`,
278
- details: result,
279
- }));
280
- nonCriticalIssues.push(...nonCriticalPermissionIssues);
281
- }
282
-
283
- if (results.orphanedProcesses) {
284
- const orphanedProcesses = results.orphanedProcesses
285
- .filter((result) => result.wasOrphaned)
286
- .map((result) => ({
287
- type: 'Orphaned Process',
288
- message: `Orphaned process detected: ${result.processInfo.command} (PID: ${result.processInfo.pid})`,
289
- details: result,
290
- }));
291
- nonCriticalIssues.push(...orphanedProcesses);
292
- }
293
-
294
- if (results.installedFFmpegs) {
295
- const missingFfmpegBinaries = results.installedFFmpegs
296
- .filter((result) => !result.exists)
297
- .map((result) => ({
298
- type: 'Installed FFmpeg Binary',
299
- message: 'FFmpeg binary not found',
300
- details: result,
301
- }));
302
- nonCriticalIssues.push(...missingFfmpegBinaries);
303
-
304
- const missingPermissions = results.installedFFmpegs
305
- .filter((result) => result.exists && !result.hasPermissions)
306
- .map((result) => ({
307
- type: 'FFmpeg Binary Permissions',
308
- message: 'FFmpeg binary has insufficient permissions',
309
- details: result,
310
- }));
311
- nonCriticalIssues.push(...missingPermissions);
312
- }
313
-
314
- return nonCriticalIssues;
315
- }
316
-
317
- private async saveCheckReport(checkResults: SelfCheckResults, criticalIssues: IssueReport[], nonCriticalIssues: IssueReport[]): Promise<void> {
318
- let reportPath = this.configService.REPORTS_FILE;
319
- if (!existsSync(this.configService.REPORTS_FILE)) {
320
- reportPath = join(homedir(), 'camera.ui.report.yaml');
321
- }
322
-
323
- const report = this.generateCheckReport(checkResults, criticalIssues, nonCriticalIssues);
324
-
325
- await writeFile(reportPath, report);
326
- this.logger.log(`Detailed self-check report saved to: ${reportPath}`);
327
- }
328
-
329
- private generateCheckReport(checkResults: SelfCheckResults, criticalIssues: IssueReport[], nonCriticalIssues: IssueReport[]): string {
330
- const report = {
331
- self_check_report: {
332
- environment: ConfigService.ENVIRONMENT,
333
- metadata: {
334
- status: checkResults.status,
335
- timestamp: new Date().toISOString(),
336
- },
337
- critical_issues: this.formatIssues(criticalIssues),
338
- non_critical_issues: this.formatIssues(nonCriticalIssues),
339
- detailed_results: {
340
- paths_existence: this.formatPathsExistence(checkResults.pathsExistence),
341
- paths_permissions: this.formatPathsPermissions(checkResults.pathsPermissions),
342
- cleaned_up_files: this.formatCleanedUpFiles(checkResults.cleanedUpFiles),
343
- database_corruption: this.formatDatabaseCorruption(checkResults.databaseCorruption),
344
- port_availability: this.formatPortAvailability(checkResults.portAvailability),
345
- ffmpeg_binaries: this.formatFfmpegBinaries(checkResults.installedFFmpegs),
346
- orphaned_processes: this.formatOrphanedProcesses(checkResults.orphanedProcesses),
347
- },
348
- },
349
- };
350
-
351
- return yamlDump(report, { indent: 2, lineWidth: -1 });
352
- }
353
-
354
- private formatIssues(issues: IssueReport[]): any[] {
355
- return issues.map((issue) => ({
356
- issue: {
357
- type: issue.type,
358
- message: issue.message,
359
- details: this.sanitizeDetails(issue.details),
360
- },
361
- }));
362
- }
363
-
364
- private formatPathsExistence(results?: SelfCheckResults['pathsExistence']): any[] {
365
- if (!results) return [];
366
- return results.map((result) => ({
367
- path: {
368
- name: this.getPathName(result.path),
369
- path: result.path,
370
- exists: result.exists,
371
- },
372
- }));
373
- }
374
-
375
- private formatPathsPermissions(results?: SelfCheckResults['pathsPermissions']): any[] {
376
- if (!results) return [];
377
- return results.map((result) => ({
378
- path_permission: {
379
- name: this.getPathName(result.path),
380
- path: result.path,
381
- has_permissions: result.hasPermissions,
382
- error: result.error ? this.serializeError(result.error) : undefined,
383
- },
384
- }));
385
- }
386
-
387
- private formatCleanedUpFiles(results?: SelfCheckResults['cleanedUpFiles']): any[] {
388
- if (!results) return [];
389
- return results.map((result) => ({
390
- cleaned_file: {
391
- name: this.getPathName(result.path),
392
- path: result.path,
393
- cleaned: result.wasCleaned,
394
- error: result.error ? this.serializeError(result.error) : undefined,
395
- },
396
- }));
397
- }
398
-
399
- private formatDatabaseCorruption(result?: SelfCheckResults['databaseCorruption']): Record<string, any> | null {
400
- if (!result) return null;
401
- return {
402
- path: result.dbPath,
403
- is_corrupt: result.isCorrupt,
404
- error: result.error?.message ? this.serializeError(result.error) : undefined,
405
- };
406
- }
407
-
408
- private formatPortAvailability(results?: SelfCheckResults['portAvailability']): any[] {
409
- if (!results) return [];
410
- return results.map((result) => ({
411
- port: {
412
- port: result.port,
413
- available: result.isAvailable,
414
- },
415
- }));
416
- }
417
-
418
- private formatFfmpegBinaries(results?: SelfCheckResults['installedFFmpegs']): any[] {
419
- if (!results) return [];
420
- return results.map((result) => ({
421
- ffmpeg_binary: {
422
- name: this.getPathName(result.path),
423
- path: result.path,
424
- exists: result.exists,
425
- hasPermissions: result.hasPermissions,
426
- error: result.error ? this.serializeError(result.error) : undefined,
427
- },
428
- }));
429
- }
430
-
431
- private formatOrphanedProcesses(results?: SelfCheckResults['orphanedProcesses']): any[] {
432
- if (!results) return [];
433
- return results.map((result) => ({
434
- process: {
435
- command: result.processInfo.command,
436
- pid: result.processInfo.pid,
437
- orphaned: result.wasOrphaned,
438
- error: result.error ? this.serializeError(result.error) : undefined,
439
- },
440
- }));
441
- }
442
-
443
- private sanitizeDetails(details: any): any {
444
- if (details instanceof Error) {
445
- return this.serializeError(details);
446
- } else if (Array.isArray(details)) {
447
- return details.map((item) => this.sanitizeDetails(item));
448
- } else if (typeof details === 'object' && details !== null) {
449
- const sanitizedObject: Record<string, any> = {};
450
- for (const key in details) {
451
- sanitizedObject[key] = this.sanitizeDetails(details[key]);
452
- }
453
- return sanitizedObject;
454
- } else {
455
- return details;
456
- }
457
- }
458
-
459
- private serializeError(error: Error): Record<string, any> {
460
- return {
461
- name: error.name,
462
- message: error.message,
463
- stack: error.stack,
464
- };
465
- }
466
-
467
- private getPathName(path: string): string {
468
- const parts = path.split('/');
469
- return parts[parts.length - 1] || path;
470
- }
471
-
472
- private isCriticalPath(path: string): boolean {
473
- const criticalPaths = [
474
- this.configService.HOME_PATH,
475
- this.configService.STORAGE_PATH,
476
- this.configService.PIDS_FILE,
477
- this.configService.DATABASE_PATH,
478
- this.configService.TOKENS_PATH,
479
- this.configService.USERS_STORAGE_PATH,
480
- this.configService.PLUGINS_STORAGE_PATH,
481
- this.configService.PLUGINS_INSTALL_PATH,
482
- this.configService.LOG_FILE,
483
- this.configService.CONFIG_FILE,
484
- this.configService.SECRETS_FILE,
485
- this.configService.GO2RTC_BINARY,
486
- this.configService.GO2RTC_CONFIG_FILE,
487
- this.configService.NATS_BINARY,
488
- ];
489
-
490
- return criticalPaths.includes(path);
491
- }
492
- }
@@ -1,104 +0,0 @@
1
- import type { UsableNetworkAddress } from '@camera.ui/common/network';
2
- import type { BaseCamera, CameraInputSettings, Point } from '@camera.ui/types';
3
- import type { CamviewSettingsLayoutMode, ClientData, JwtTokenEncoded } from '../types/index.js';
4
-
5
- export interface DBAuth {
6
- tokens: JwtTokenEncoded[];
7
- clients: ClientData[];
8
- }
9
-
10
- export interface DBCamera extends BaseCamera {
11
- sources: CameraInputSettings[];
12
- }
13
-
14
- export interface DBPlugin {
15
- readonly _id: string;
16
- pluginName: string;
17
- }
18
-
19
- export interface DBSettings {
20
- version: string;
21
- }
22
-
23
- export interface DBUser {
24
- readonly _id: string;
25
- avatar: string;
26
- username: string;
27
- password: string;
28
- sessionTimer: number;
29
- role: DBRoles;
30
- rememberMe: boolean;
31
- singleSession: boolean;
32
- firstLogin: boolean;
33
- preferences: DBUserPreferences;
34
- }
35
-
36
- export type RemoteAccessMode = 'disabled' | 'upnp' | 'port-forward' | 'router-forward' | 'cloudflare' | 'custom-domain';
37
-
38
- export interface CloudflareConfig {
39
- customDomain?: string;
40
- }
41
-
42
- export interface CustomDomainConfig {
43
- url?: string;
44
- }
45
-
46
- export interface DBSystem {
47
- serverAddresses?: string[];
48
- remoteAccess: {
49
- mode: RemoteAccessMode;
50
- cloudflare?: CloudflareConfig;
51
- customDomain?: CustomDomainConfig;
52
- };
53
- }
54
-
55
- export type DBRoles = 'master' | 'admin' | 'user';
56
-
57
- export interface DBCameraShortcut {
58
- readonly _id: string;
59
- cameraId: string;
60
- points: Point;
61
- }
62
-
63
- // prettier-ignore
64
- export type DBUserCameraPreferences = Record<
65
- string,
66
- | {
67
- shortcuts: DBCameraShortcut[];
68
- }
69
- | undefined
70
- >;
71
-
72
- export interface DBUserPreferences {
73
- camview: {
74
- views: DBCamviewLayout[];
75
- };
76
- cameras: DBUserCameraPreferences;
77
- }
78
-
79
- export type DBCamviewViewSize = 1 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 20 | 26;
80
-
81
- export interface DBCamviewLayout {
82
- readonly _id: string;
83
- name: string;
84
- viewSize: DBCamviewViewSize;
85
- cameras: DBCamviewLayoutCamera[];
86
- type: CamviewSettingsLayoutMode;
87
- }
88
-
89
- export interface DBCamviewLayoutCamera {
90
- index: number;
91
- cameraId: string;
92
- }
93
-
94
- export type DBPluginStorageValue = Record<string, any>;
95
-
96
- export interface SystemInfo extends DBSystem {
97
- networkAddresses: UsableNetworkAddress[];
98
- }
99
-
100
- export interface PluginData {
101
- pluginName: string;
102
- id?: string;
103
- version?: string;
104
- }
@@ -1,48 +0,0 @@
1
- import { sleep } from '@camera.ui/common/utils';
2
-
3
- import { fetchInstance } from './index.js';
4
-
5
- import type { RequestQueue } from '../queue.js';
6
- import type { ApplicationResponse, ExitData } from '../types.js';
7
-
8
- export class ApplicationApi {
9
- private requestQueue: RequestQueue;
10
-
11
- constructor(requestQueue: RequestQueue) {
12
- this.requestQueue = requestQueue;
13
- }
14
-
15
- public async close(data: ExitData): Promise<void> {
16
- try {
17
- const params = new URLSearchParams(data as any);
18
- await fetchInstance()(`/exit?${params}`, {
19
- method: 'POST',
20
- });
21
- } catch {
22
- // Do nothing
23
- }
24
- }
25
-
26
- public async info(): Promise<ApplicationResponse> {
27
- const response = await fetchInstance()('', {
28
- method: 'GET',
29
- });
30
-
31
- if (!response.ok) {
32
- throw new Error(`HTTP error! Message: ${response.statusText} (${response.status})`);
33
- }
34
-
35
- const json: ApplicationResponse = await response.json();
36
-
37
- return json;
38
- }
39
-
40
- public async restart(): Promise<void> {
41
- try {
42
- await fetchInstance()('/restart', { method: 'POST' });
43
- await sleep(250);
44
- } catch {
45
- // Do nothing
46
- }
47
- }
48
- }
@@ -1,61 +0,0 @@
1
- import { dump } from 'js-yaml';
2
-
3
- import { fetchInstance } from './index.js';
4
-
5
- import type { RequestQueue } from '../queue.js';
6
-
7
- export class ConfigApi {
8
- private requestQueue: RequestQueue;
9
-
10
- constructor(requestQueue: RequestQueue) {
11
- this.requestQueue = requestQueue;
12
- }
13
-
14
- public async getConfig(): Promise<any> {
15
- const response = await fetchInstance()('/config', {
16
- method: 'GET',
17
- });
18
-
19
- if (!response.ok) {
20
- throw new Error(`HTTP error! Message: ${response.statusText} (${response.status})`);
21
- }
22
-
23
- return response.text();
24
- }
25
-
26
- public async rewriteConfig(data: Record<string, any>): Promise<void> {
27
- if (data.streams && Object.keys(data.streams).length === 0) {
28
- delete data.streams;
29
- }
30
-
31
- const config = dump(data, { lineWidth: -1, noRefs: true });
32
- const response = await this.requestQueue.enqueue(() =>
33
- fetchInstance()('/config', {
34
- method: 'POST',
35
- body: config,
36
- }),
37
- );
38
-
39
- if (!response.ok) {
40
- throw new Error(`HTTP error! Message: ${response.statusText} (${response.status})`);
41
- }
42
- }
43
-
44
- public async mergeConfig(data: Record<string, any>): Promise<void> {
45
- if (data.streams && Object.keys(data.streams).length === 0) {
46
- delete data.streams;
47
- }
48
-
49
- const config = dump(data, { lineWidth: -1, noRefs: true });
50
- const response = await this.requestQueue.enqueue(() =>
51
- fetchInstance()('/config', {
52
- method: 'PATCH',
53
- body: config,
54
- }),
55
- );
56
-
57
- if (!response.ok) {
58
- throw new Error(`HTTP error! Message: ${response.statusText} (${response.status})`);
59
- }
60
- }
61
- }