@camera.ui/server 0.0.49 → 0.0.50-internal.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/dist/interface/assets/@xterm.DYP7pi_n.0.0.50-internal.1.css +32 -0
  2. package/dist/interface/assets/Adminpanel.BKek2EMH.0.0.50-internal.1.css +1 -0
  3. package/dist/interface/assets/Cameras.BDWZJqPN.0.0.50-internal.1.css +1 -0
  4. package/dist/interface/assets/Camview.BFUFMoNX.0.0.50-internal.1.css +1 -0
  5. package/dist/interface/assets/CuiConsole.DCYyxdVg.0.0.50-internal.1.css +1 -0
  6. package/dist/interface/assets/CuiPluginCard.yF8V0SZY.0.0.50-internal.1.css +1 -0
  7. package/dist/interface/assets/CuiTimeline.BkIwlYtw.0.0.50-internal.1.css +1 -0
  8. package/dist/interface/assets/Plugin.DJElsAn5.0.0.50-internal.1.css +1 -0
  9. package/dist/interface/assets/Plugins.0h77qnmN.0.0.50-internal.1.css +1 -0
  10. package/dist/interface/assets/Settings.CkgfRkQr.0.0.50-internal.1.css +1 -0
  11. package/dist/interface/assets/SettingsAccount.DeFul3eQ.0.0.50-internal.1.css +1 -0
  12. package/dist/interface/assets/main.Cip9LkS3.0.0.50-internal.1.css +1 -0
  13. package/dist/interface/assets/worker-base.jEXLGV2h.0.0.50-internal.1.js +1332 -0
  14. package/dist/interface/assets/worker-json.DgwNIOck.0.0.50-internal.1.js +1626 -0
  15. package/dist/interface/assets/worker-yaml.B3uUYINB.0.0.50-internal.1.js +5819 -0
  16. package/dist/interface/fonts/InterVariable.woff2 +0 -0
  17. package/dist/interface/index.html +48 -38
  18. package/dist/interface/js/@intlify.BkGPX90O.0.0.50-internal.1.js +15 -0
  19. package/dist/interface/js/@kurkle.D8fDXNIl.0.0.50-internal.1.js +6 -0
  20. package/dist/interface/js/@primeuix.BFAY2Bk9.0.0.50-internal.1.js +5722 -0
  21. package/dist/interface/js/@primevue.CiB2EGly.0.0.50-internal.1.js +57 -0
  22. package/dist/interface/js/@tanstack.DxMw_rJn.0.0.50-internal.1.js +1 -0
  23. package/dist/interface/{@vee-validate.DHkwupr6.0.0.49.js → js/@vee-validate.RxZ3hn6V.0.0.50-internal.1.js} +2 -2
  24. package/dist/interface/js/@vue.B5vqhCp2.0.0.50-internal.1.js +17 -0
  25. package/dist/interface/js/@vueuse.C-k73ACm.0.0.50-internal.1.js +1 -0
  26. package/dist/interface/{@xterm.D6R4zI7m.0.0.49.js → js/@xterm.DIUBesyz.0.0.50-internal.1.js} +8 -8
  27. package/dist/interface/js/Adminpanel.DumNu6GD.0.0.50-internal.1.js +1 -0
  28. package/dist/interface/js/Camera.BuosoqFl.0.0.50-internal.1.js +1 -0
  29. package/dist/interface/js/Cameras.A7NJflGG.0.0.50-internal.1.js +482 -0
  30. package/dist/interface/js/Cammesh.Dv3C0UiR.0.0.50-internal.1.js +1 -0
  31. package/dist/interface/js/Camview.GgjJp7JR.0.0.50-internal.1.js +1 -0
  32. package/dist/interface/js/Config.BL3L-BFE.0.0.50-internal.1.js +2 -0
  33. package/dist/interface/js/Console.CxwRmUVF.0.0.50-internal.1.js +4 -0
  34. package/dist/interface/js/CuiConsole.D16kkT6R.0.0.50-internal.1.js +1 -0
  35. package/dist/interface/js/CuiPluginCard.Bkp__d8n.0.0.50-internal.1.js +4 -0
  36. package/dist/interface/js/CuiTimeline.C9HKvo0G.0.0.50-internal.1.js +1 -0
  37. package/dist/interface/js/FirstSteps.QuJjtAtF.0.0.50-internal.1.js +1 -0
  38. package/dist/interface/js/Plugin.BLUUbEej.0.0.50-internal.1.js +1 -0
  39. package/dist/interface/js/Plugins.DviCIk7w.0.0.50-internal.1.js +1 -0
  40. package/dist/interface/js/Recordings.Dsp07cHs.0.0.50-internal.1.js +1 -0
  41. package/dist/interface/js/Settings.Clx4y9gP.0.0.50-internal.1.js +1 -0
  42. package/dist/interface/js/SettingsAccount.cfY4-PYd.0.0.50-internal.1.js +1 -0
  43. package/dist/interface/js/SettingsAppearance.CBGZAazb.0.0.50-internal.1.js +1 -0
  44. package/dist/interface/js/SettingsAppearance.vue_vue_type_script_setup_true_lang.kxAPXcBy.0.0.50-internal.1.js +1 -0
  45. package/dist/interface/js/SettingsBackup.DOaJA4pp.0.0.50-internal.1.js +1 -0
  46. package/dist/interface/js/SettingsRecordings.BGcwL6tk.0.0.50-internal.1.js +1 -0
  47. package/dist/interface/js/SettingsRemote.BVU_w1Jm.0.0.50-internal.1.js +1 -0
  48. package/dist/interface/js/SettingsSystem.P0vy90vA.0.0.50-internal.1.js +1 -0
  49. package/dist/interface/js/SettingsUsers.DaP5m7eo.0.0.50-internal.1.js +1 -0
  50. package/dist/interface/js/VersionsHandler.vue_vue_type_script_setup_true_lang.MmrWYW3K.0.0.50-internal.1.js +4 -0
  51. package/dist/interface/js/ace-builds.C0aqA_3x.0.0.50-internal.1.js +1090 -0
  52. package/dist/interface/js/ace.config.C9wgzklI.0.0.50-internal.1.js +1 -0
  53. package/dist/interface/js/axios.DHr9lByg.0.0.50-internal.1.js +6 -0
  54. package/dist/interface/js/backup.BeH6lJ5t.0.0.50-internal.1.js +1 -0
  55. package/dist/interface/js/chart.js.BQHSWV_g.0.0.50-internal.1.js +13 -0
  56. package/dist/interface/js/close-circle.DDKMxauw.0.0.50-internal.1.js +1 -0
  57. package/dist/interface/js/dnd-core.dWz9rJqH.0.0.50-internal.1.js +1 -0
  58. package/dist/interface/{draggabilly.C0hZWkL0.0.0.49.js → js/draggabilly.D-iZIS1n.0.0.50-internal.1.js} +1 -1
  59. package/dist/interface/js/engine.io-client.BwxOddB_.0.0.50-internal.1.js +1 -0
  60. package/dist/interface/js/fast-deep-equal.Dz96RC_N.0.0.50-internal.1.js +1 -0
  61. package/dist/interface/js/highlight.js.CmcM8OM6.0.0.50-internal.1.js +3 -0
  62. package/dist/interface/js/linkify-it.BgLcBzlw.0.0.50-internal.1.js +1 -0
  63. package/dist/interface/js/main.6bOgRV7D.0.0.50-internal.1.js +31 -0
  64. package/dist/interface/{markdown-it.64FJJcTG.0.0.49.js → js/markdown-it.CTgfs-3p.0.0.50-internal.1.js} +1 -1
  65. package/dist/interface/{nprogress.DkWvUoHh.0.0.49.js → js/nprogress.CMhnq8jS.0.0.50-internal.1.js} +1 -1
  66. package/dist/interface/js/perfect-debounce.l0sNRNKZ.0.0.50-internal.1.js +1 -0
  67. package/dist/interface/js/pinia.CuC5ZfNs.0.0.50-internal.1.js +5 -0
  68. package/dist/interface/js/primelocale.Bga3dOQu.0.0.50-internal.1.js +1 -0
  69. package/dist/interface/js/primevue.DmwjJ4xV.0.0.50-internal.1.js +142 -0
  70. package/dist/interface/{qrcode.BixA_YE2.0.0.49.js → js/qrcode.DGZO3j1c.0.0.50-internal.1.js} +1 -1
  71. package/dist/interface/js/react-dnd-touch-backend.CEGHlD-T.0.0.50-internal.1.js +1 -0
  72. package/dist/interface/js/refresh-rounded.D0keXzBc.0.0.50-internal.1.js +1 -0
  73. package/dist/interface/js/rxjs.CiDbFOB0.0.0.50-internal.1.js +3 -0
  74. package/dist/interface/js/socket.io-client.BPcXPAHG.0.0.50-internal.1.js +1 -0
  75. package/dist/interface/js/socket.io-parser.DSGzrW_l.0.0.50-internal.1.js +1 -0
  76. package/dist/interface/js/system.BKlEObmx.0.0.50-internal.1.js +1 -0
  77. package/dist/interface/js/trash-fill.BDFILs86.0.0.50-internal.1.js +1 -0
  78. package/dist/interface/{unidragger.C8ueS-PW.0.0.49.js → js/unidragger.DcxsxHCS.0.0.50-internal.1.js} +1 -1
  79. package/dist/interface/js/uuid.C6aID195.0.0.50-internal.1.js +1 -0
  80. package/dist/interface/js/vee-validate.BGRg3oQ8.0.0.50-internal.1.js +5 -0
  81. package/dist/interface/js/vue-chartjs.B9yk2de7.0.0.50-internal.1.js +1 -0
  82. package/dist/interface/js/vue-i18n.DXDZITpf.0.0.50-internal.1.js +5 -0
  83. package/dist/interface/js/vue-inline-svg.BDYaTfbi.0.0.50-internal.1.js +1 -0
  84. package/dist/interface/js/vue-router.CFEDA008.0.0.50-internal.1.js +5 -0
  85. package/dist/interface/js/vue-zoomable.zqTafMgD.0.0.50-internal.1.js +1 -0
  86. package/dist/interface/js/vue.l0sNRNKZ.0.0.50-internal.1.js +1 -0
  87. package/dist/interface/js/vue3-dnd.BxM3dbYs.0.0.50-internal.1.js +1 -0
  88. package/dist/interface/js/zod.SKKegNRO.0.0.50-internal.1.js +1 -0
  89. package/dist/interface/js/zoom-out.B6SY9IIj.0.0.50-internal.1.js +1 -0
  90. package/dist/interface/manifest.webmanifest +1 -1
  91. package/dist/interface/pwa/favicon-32.ico +0 -0
  92. package/dist/interface/pwa/favicon-48.ico +0 -0
  93. package/dist/interface/sw.js +1 -1
  94. package/dist/server/package.json +57 -45
  95. package/dist/server/requirements.txt +12 -11
  96. package/dist/server/src/__init__.py +0 -0
  97. package/dist/server/src/_camera_ui_tools/__init__.py +0 -0
  98. package/dist/server/src/_camera_ui_tools/camera_ui_common/__init__.py +28 -0
  99. package/dist/server/src/_camera_ui_tools/camera_ui_common/camera_utils/utils.py +52 -0
  100. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/__init__.py +0 -0
  101. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/object_path.py +198 -0
  102. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/reactive.py +42 -0
  103. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/signal_handler.py +92 -0
  104. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/subscribed.py +21 -0
  105. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/task.py +39 -0
  106. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/thread.py +10 -0
  107. package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/utils.py +91 -0
  108. package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/__init__.py +0 -0
  109. package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/ansicolor.py +62 -0
  110. package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/logger.py +178 -0
  111. package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/test.py +116 -0
  112. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/__init__.py +350 -0
  113. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/__init__.py +0 -0
  114. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/base.py +237 -0
  115. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/client.py +256 -0
  116. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/connection.py +784 -0
  117. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/errors.py +745 -0
  118. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/messaging.py +57 -0
  119. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/rpc.py +227 -0
  120. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/rpc_generator.py +584 -0
  121. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/constants.py +96 -0
  122. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/typings.py +218 -0
  123. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/__init__.py +0 -0
  124. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/connection_state.py +86 -0
  125. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/logger.py +30 -0
  126. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/metrics.py +152 -0
  127. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/packer.py +20 -0
  128. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/routing.py +75 -0
  129. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/rpc.py +177 -0
  130. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/subscriptions.py +24 -0
  131. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/tasks.py +39 -0
  132. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/uid.py +37 -0
  133. package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/validate.py +119 -0
  134. package/dist/server/src/_camera_ui_tools/camera_ui_types/__init__.py +1360 -0
  135. package/dist/server/src/_camera_ui_tools/camera_ui_types/hybrid_observer.py +338 -0
  136. package/dist/server/src/_camera_ui_tools/camera_ui_types/test.py +196 -0
  137. package/dist/server/src/api/controllers/auth.controller.d.ts +2 -2
  138. package/dist/server/src/api/controllers/auth.controller.js +49 -43
  139. package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
  140. package/dist/server/src/api/controllers/backup.controller.js +1 -2
  141. package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
  142. package/dist/server/src/api/controllers/cameras.controller.d.ts +13 -11
  143. package/dist/server/src/api/controllers/cameras.controller.js +314 -105
  144. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  145. package/dist/server/src/api/controllers/plugins.controller.d.ts +8 -8
  146. package/dist/server/src/api/controllers/plugins.controller.js +208 -244
  147. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  148. package/dist/server/src/api/controllers/system.controller.d.ts +1 -0
  149. package/dist/server/src/api/controllers/system.controller.js +22 -8
  150. package/dist/server/src/api/controllers/system.controller.js.map +1 -1
  151. package/dist/server/src/api/controllers/users.controller.d.ts +2 -2
  152. package/dist/server/src/api/controllers/users.controller.js +13 -25
  153. package/dist/server/src/api/controllers/users.controller.js.map +1 -1
  154. package/dist/server/src/api/database/checks.js +2 -2
  155. package/dist/server/src/api/database/checks.js.map +1 -1
  156. package/dist/server/src/api/database/index.d.ts +4 -7
  157. package/dist/server/src/api/database/index.js +59 -86
  158. package/dist/server/src/api/database/index.js.map +1 -1
  159. package/dist/server/src/api/database/migration.js +5 -141
  160. package/dist/server/src/api/database/migration.js.map +1 -1
  161. package/dist/server/src/api/database/selfcheck.js +5 -5
  162. package/dist/server/src/api/database/selfcheck.js.map +1 -1
  163. package/dist/server/src/api/database/types.d.ts +17 -25
  164. package/dist/server/src/api/go2rtc/api/discover.d.ts +30 -0
  165. package/dist/server/src/api/go2rtc/api/discover.js +162 -0
  166. package/dist/server/src/api/go2rtc/api/discover.js.map +1 -0
  167. package/dist/server/src/api/go2rtc/api/index.d.ts +1 -1
  168. package/dist/server/src/api/go2rtc/api/index.js +15 -4
  169. package/dist/server/src/api/go2rtc/api/index.js.map +1 -1
  170. package/dist/server/src/api/go2rtc/api/streams.d.ts +3 -1
  171. package/dist/server/src/api/go2rtc/api/streams.js +66 -9
  172. package/dist/server/src/api/go2rtc/api/streams.js.map +1 -1
  173. package/dist/server/src/api/go2rtc/index.d.ts +2 -0
  174. package/dist/server/src/api/go2rtc/index.js +3 -0
  175. package/dist/server/src/api/go2rtc/index.js.map +1 -1
  176. package/dist/server/src/api/go2rtc/queue.js +3 -3
  177. package/dist/server/src/api/go2rtc/queue.js.map +1 -1
  178. package/dist/server/src/api/go2rtc/types.d.ts +66 -11
  179. package/dist/server/src/api/index.d.ts +4 -0
  180. package/dist/server/src/api/index.js +45 -9
  181. package/dist/server/src/api/index.js.map +1 -1
  182. package/dist/server/src/api/middlewares/authPermission.middleware.d.ts +1 -0
  183. package/dist/server/src/api/middlewares/authPermission.middleware.js +11 -2
  184. package/dist/server/src/api/middlewares/authPermission.middleware.js.map +1 -1
  185. package/dist/server/src/api/middlewares/authValidation.middleware.js +20 -12
  186. package/dist/server/src/api/middlewares/authValidation.middleware.js.map +1 -1
  187. package/dist/server/src/api/middlewares/pagination.middleware.js +45 -53
  188. package/dist/server/src/api/middlewares/pagination.middleware.js.map +1 -1
  189. package/dist/server/src/api/plugins/proxy.plugin.d.ts +14 -0
  190. package/dist/server/src/api/plugins/proxy.plugin.js +200 -0
  191. package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -0
  192. package/dist/server/src/api/routes/cameras.routes.js +56 -30
  193. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  194. package/dist/server/src/api/routes/plugins.routes.js +65 -63
  195. package/dist/server/src/api/routes/plugins.routes.js.map +1 -1
  196. package/dist/server/src/api/routes/system.routes.js +7 -1
  197. package/dist/server/src/api/routes/system.routes.js.map +1 -1
  198. package/dist/server/src/api/routes/users.routes.js +8 -8
  199. package/dist/server/src/api/routes/users.routes.js.map +1 -1
  200. package/dist/server/src/api/schemas/backup.schema.d.ts +3 -3
  201. package/dist/server/src/api/schemas/backup.schema.js +1 -1
  202. package/dist/server/src/api/schemas/backup.schema.js.map +1 -1
  203. package/dist/server/src/api/schemas/cameras.schema.d.ts +1413 -529
  204. package/dist/server/src/api/schemas/cameras.schema.js +228 -182
  205. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  206. package/dist/server/src/api/schemas/config.schema.d.ts +29 -41
  207. package/dist/server/src/api/schemas/config.schema.js +10 -21
  208. package/dist/server/src/api/schemas/config.schema.js.map +1 -1
  209. package/dist/server/src/api/schemas/go2rtc.schema.d.ts +194 -162
  210. package/dist/server/src/api/schemas/go2rtc.schema.js +33 -58
  211. package/dist/server/src/api/schemas/go2rtc.schema.js.map +1 -1
  212. package/dist/server/src/api/schemas/plugins.schema.d.ts +17 -17
  213. package/dist/server/src/api/schemas/plugins.schema.js +1 -1
  214. package/dist/server/src/api/schemas/plugins.schema.js.map +1 -1
  215. package/dist/server/src/api/schemas/storage.schema.d.ts +22 -0
  216. package/dist/server/src/api/schemas/storage.schema.js +5 -0
  217. package/dist/server/src/api/schemas/storage.schema.js.map +1 -0
  218. package/dist/server/src/api/schemas/system.schema.d.ts +171 -3
  219. package/dist/server/src/api/schemas/system.schema.js +30 -3
  220. package/dist/server/src/api/schemas/system.schema.js.map +1 -1
  221. package/dist/server/src/api/schemas/users.schema.d.ts +98 -254
  222. package/dist/server/src/api/schemas/users.schema.js +6 -6
  223. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  224. package/dist/server/src/api/services/auth.service.d.ts +5 -5
  225. package/dist/server/src/api/services/auth.service.js +26 -35
  226. package/dist/server/src/api/services/auth.service.js.map +1 -1
  227. package/dist/server/src/api/services/cameras.service.d.ts +11 -16
  228. package/dist/server/src/api/services/cameras.service.js +143 -310
  229. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  230. package/dist/server/src/api/services/plugins.service.d.ts +3 -1
  231. package/dist/server/src/api/services/plugins.service.js +48 -50
  232. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  233. package/dist/server/src/api/services/users.service.d.ts +1 -0
  234. package/dist/server/src/api/services/users.service.js +20 -14
  235. package/dist/server/src/api/services/users.service.js.map +1 -1
  236. package/dist/server/src/api/types/index.d.ts +57 -46
  237. package/dist/server/src/api/types/index.js +0 -4
  238. package/dist/server/src/api/types/index.js.map +1 -1
  239. package/dist/server/src/api/utils/cert.d.ts +5 -1
  240. package/dist/server/src/api/utils/cert.js +24 -26
  241. package/dist/server/src/api/utils/cert.js.map +1 -1
  242. package/dist/server/src/api/utils/constants.d.ts +4 -2
  243. package/dist/server/src/api/utils/constants.js +4 -2
  244. package/dist/server/src/api/utils/constants.js.map +1 -1
  245. package/dist/server/src/api/utils/fetch.d.ts +1 -1
  246. package/dist/server/src/api/utils/fetch.js +2 -2
  247. package/dist/server/src/api/utils/fetch.js.map +1 -1
  248. package/dist/server/src/api/websocket/index.d.ts +1 -0
  249. package/dist/server/src/api/websocket/index.js +14 -9
  250. package/dist/server/src/api/websocket/index.js.map +1 -1
  251. package/dist/server/src/api/websocket/nsp/logs.d.ts +10 -2
  252. package/dist/server/src/api/websocket/nsp/logs.js +75 -27
  253. package/dist/server/src/api/websocket/nsp/logs.js.map +1 -1
  254. package/dist/server/src/api/websocket/nsp/metrics.d.ts +20 -12
  255. package/dist/server/src/api/websocket/nsp/metrics.js +188 -117
  256. package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
  257. package/dist/server/src/api/websocket/nsp/plugins.d.ts +1 -1
  258. package/dist/server/src/api/websocket/nsp/plugins.js +3 -5
  259. package/dist/server/src/api/websocket/nsp/plugins.js.map +1 -1
  260. package/dist/server/src/api/websocket/nsp/server.js +6 -0
  261. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  262. package/dist/server/src/api/websocket/types.d.ts +4 -2
  263. package/dist/server/src/api.d.ts +3 -4
  264. package/dist/server/src/api.js +13 -13
  265. package/dist/server/src/api.js.map +1 -1
  266. package/dist/server/src/camera/classes.d.ts +2 -0
  267. package/dist/server/src/camera/classes.js +24 -0
  268. package/dist/server/src/camera/classes.js.map +1 -0
  269. package/dist/server/src/camera/controller.d.ts +30 -18
  270. package/dist/server/src/camera/controller.js +236 -202
  271. package/dist/server/src/camera/controller.js.map +1 -1
  272. package/dist/server/src/camera/device.d.ts +34 -0
  273. package/dist/server/src/camera/device.js +327 -0
  274. package/dist/server/src/camera/device.js.map +1 -0
  275. package/dist/server/src/camera/frameWorker.d.ts +32 -31
  276. package/dist/server/src/camera/frameWorker.js +257 -247
  277. package/dist/server/src/camera/frameWorker.js.map +1 -1
  278. package/dist/server/src/camera/index.d.ts +92 -0
  279. package/dist/server/src/camera/index.js +531 -0
  280. package/dist/server/src/camera/index.js.map +1 -0
  281. package/dist/server/src/camera/interfaces.d.ts +17 -0
  282. package/dist/server/src/camera/interfaces.js +99 -0
  283. package/dist/server/src/camera/interfaces.js.map +1 -0
  284. package/dist/server/src/camera/iou.d.ts +2 -0
  285. package/dist/server/src/camera/iou.js +123 -0
  286. package/dist/server/src/camera/iou.js.map +1 -0
  287. package/dist/server/src/camera/polygon.d.ts +4 -0
  288. package/dist/server/src/camera/polygon.js +192 -0
  289. package/dist/server/src/camera/polygon.js.map +1 -0
  290. package/dist/server/src/camera/python/__init__.py +0 -0
  291. package/dist/server/src/camera/python/classes.py +41 -0
  292. package/dist/server/src/camera/python/interfaces.py +130 -0
  293. package/dist/server/src/camera/python/iou.py +158 -0
  294. package/dist/server/src/camera/python/polygon.py +230 -0
  295. package/dist/server/src/camera/python/typings.py +50 -0
  296. package/dist/server/src/camera/python/video_frame.py +143 -0
  297. package/dist/server/src/camera/session.d.ts +37 -0
  298. package/dist/server/src/camera/session.js +160 -0
  299. package/dist/server/src/camera/session.js.map +1 -0
  300. package/dist/server/src/camera/streaming/fmp4-session.d.ts +17 -0
  301. package/dist/server/src/camera/streaming/fmp4-session.js +308 -0
  302. package/dist/server/src/camera/streaming/fmp4-session.js.map +1 -0
  303. package/dist/server/src/camera/streaming/peer-connection.d.ts +26 -0
  304. package/dist/server/src/camera/streaming/peer-connection.js +213 -0
  305. package/dist/server/src/camera/streaming/peer-connection.js.map +1 -0
  306. package/dist/server/src/camera/streaming/rtsp-session.d.ts +19 -0
  307. package/dist/server/src/camera/streaming/rtsp-session.js +253 -0
  308. package/dist/server/src/camera/streaming/rtsp-session.js.map +1 -0
  309. package/dist/server/src/camera/streaming/webrtc-connection.d.ts +44 -0
  310. package/dist/server/src/camera/streaming/webrtc-connection.js +177 -0
  311. package/dist/server/src/camera/streaming/webrtc-connection.js.map +1 -0
  312. package/dist/server/src/camera/streaming/werift-session.d.ts +19 -0
  313. package/dist/server/src/camera/streaming/werift-session.js +246 -0
  314. package/dist/server/src/camera/streaming/werift-session.js.map +1 -0
  315. package/dist/server/src/camera/types.d.ts +16 -10
  316. package/dist/server/src/camera/utils.d.ts +9 -0
  317. package/dist/server/src/camera/utils.js +416 -0
  318. package/dist/server/src/camera/utils.js.map +1 -0
  319. package/dist/server/src/camera/videoFrame.d.ts +18 -0
  320. package/dist/server/src/camera/videoFrame.js +88 -0
  321. package/dist/server/src/camera/videoFrame.js.map +1 -0
  322. package/dist/server/src/cloud/index.d.ts +12 -0
  323. package/dist/server/src/cloud/index.js +49 -0
  324. package/dist/server/src/cloud/index.js.map +1 -0
  325. package/dist/server/src/cloud/remote/cloudflare.d.ts +7 -0
  326. package/dist/server/src/cloud/remote/cloudflare.js +12 -0
  327. package/dist/server/src/cloud/remote/cloudflare.js.map +1 -0
  328. package/dist/server/src/cloud/remote/upnp.d.ts +7 -0
  329. package/dist/server/src/cloud/remote/upnp.js +12 -0
  330. package/dist/server/src/cloud/remote/upnp.js.map +1 -0
  331. package/dist/server/src/cloud/remote/utils.d.ts +3 -0
  332. package/dist/server/src/cloud/remote/utils.js +20 -0
  333. package/dist/server/src/cloud/remote/utils.js.map +1 -0
  334. package/dist/server/src/cloud/types.d.ts +15 -0
  335. package/dist/server/src/cloud/types.js +11 -0
  336. package/dist/server/src/cloud/types.js.map +1 -0
  337. package/dist/server/src/decoder/child.d.ts +1 -0
  338. package/dist/server/src/decoder/child.js +749 -0
  339. package/dist/server/src/decoder/child.js.map +1 -0
  340. package/dist/server/src/decoder/imageUtils.d.ts +22 -0
  341. package/dist/server/src/decoder/imageUtils.js +196 -0
  342. package/dist/server/src/decoder/imageUtils.js.map +1 -0
  343. package/dist/server/src/decoder/manager.d.ts +19 -0
  344. package/dist/server/src/decoder/manager.js +208 -0
  345. package/dist/server/src/decoder/manager.js.map +1 -0
  346. package/dist/server/src/decoder/python/__init__.py +0 -0
  347. package/dist/server/src/decoder/python/child.py +903 -0
  348. package/dist/server/src/decoder/python/image_utils.py +196 -0
  349. package/dist/server/src/decoder/python/pool.py +45 -0
  350. package/dist/server/src/decoder/python/typings.py +57 -0
  351. package/dist/server/src/decoder/python/utils.py +70 -0
  352. package/dist/server/src/decoder/types.d.ts +23 -0
  353. package/dist/server/src/decoder/types.js.map +1 -0
  354. package/dist/server/src/decoder/utils.d.ts +13 -0
  355. package/dist/server/src/decoder/utils.js +45 -0
  356. package/dist/server/src/decoder/utils.js.map +1 -0
  357. package/dist/server/src/decoder/wasm/build/decoder.d.ts +43 -0
  358. package/dist/server/src/decoder/wasm/build/decoder.js +108 -0
  359. package/dist/server/src/decoder/wasm/build/decoder.wasm +0 -0
  360. package/dist/server/src/decoder/worker.d.ts +1 -0
  361. package/dist/server/src/decoder/worker.js +79 -0
  362. package/dist/server/src/decoder/worker.js.map +1 -0
  363. package/dist/server/src/go2rtc/index.d.ts +1 -0
  364. package/dist/server/src/go2rtc/index.js +27 -9
  365. package/dist/server/src/go2rtc/index.js.map +1 -1
  366. package/dist/server/src/go2rtc/types.d.ts +5 -4
  367. package/dist/server/src/go2rtc/types.js +6 -2
  368. package/dist/server/src/go2rtc/types.js.map +1 -1
  369. package/dist/server/src/main.js +19 -5
  370. package/dist/server/src/main.js.map +1 -1
  371. package/dist/server/src/manager/coreManager.d.ts +16 -0
  372. package/dist/server/src/manager/coreManager.js +95 -0
  373. package/dist/server/src/manager/coreManager.js.map +1 -0
  374. package/dist/server/src/manager/deviceManager.d.ts +12 -0
  375. package/dist/server/src/manager/deviceManager.js +130 -0
  376. package/dist/server/src/manager/deviceManager.js.map +1 -0
  377. package/dist/server/src/manager/types.d.ts +15 -0
  378. package/dist/server/src/manager/types.js +2 -0
  379. package/dist/server/src/manager/types.js.map +1 -0
  380. package/dist/server/src/plugins/index.d.ts +3 -1
  381. package/dist/server/src/plugins/index.js +42 -21
  382. package/dist/server/src/plugins/index.js.map +1 -1
  383. package/dist/server/src/plugins/plugin.d.ts +3 -3
  384. package/dist/server/src/plugins/plugin.js +13 -20
  385. package/dist/server/src/plugins/plugin.js.map +1 -1
  386. package/dist/server/src/plugins/runtime/base.d.ts +54 -0
  387. package/dist/server/src/plugins/runtime/base.js +223 -0
  388. package/dist/server/src/plugins/runtime/base.js.map +1 -0
  389. package/dist/server/src/plugins/runtime/index.d.ts +5 -0
  390. package/dist/server/src/plugins/runtime/index.js +13 -0
  391. package/dist/server/src/plugins/runtime/index.js.map +1 -0
  392. package/dist/server/src/plugins/runtime/node/child.d.ts +22 -0
  393. package/dist/server/src/plugins/runtime/node/child.js +152 -0
  394. package/dist/server/src/plugins/runtime/node/child.js.map +1 -0
  395. package/dist/server/src/plugins/runtime/node/index.d.ts +7 -0
  396. package/dist/server/src/plugins/runtime/node/index.js +54 -0
  397. package/dist/server/src/plugins/runtime/node/index.js.map +1 -0
  398. package/dist/server/src/plugins/runtime/node/plugin.d.ts +24 -0
  399. package/dist/server/src/plugins/runtime/node/plugin.js +128 -0
  400. package/dist/server/src/plugins/runtime/node/plugin.js.map +1 -0
  401. package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +16 -0
  402. package/dist/server/src/plugins/runtime/node/pluginApi.js +18 -0
  403. package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -0
  404. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +25 -0
  405. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +230 -0
  406. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -0
  407. package/dist/server/src/plugins/runtime/node/proxy/coreManager.d.ts +16 -0
  408. package/dist/server/src/plugins/runtime/node/proxy/coreManager.js +98 -0
  409. package/dist/server/src/plugins/runtime/node/proxy/coreManager.js.map +1 -0
  410. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +19 -0
  411. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +144 -0
  412. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -0
  413. package/dist/server/src/plugins/runtime/node/storage.d.ts +34 -0
  414. package/dist/server/src/plugins/runtime/node/storage.js +313 -0
  415. package/dist/server/src/plugins/runtime/node/storage.js.map +1 -0
  416. package/dist/server/src/plugins/runtime/node/storageController.d.ts +18 -0
  417. package/dist/server/src/plugins/runtime/node/storageController.js +67 -0
  418. package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -0
  419. package/dist/server/src/plugins/runtime/python/__init__.py +0 -0
  420. package/dist/server/src/plugins/runtime/python/child.py +248 -0
  421. package/dist/server/src/plugins/runtime/python/index.d.ts +9 -0
  422. package/dist/server/src/plugins/runtime/python/index.js +57 -0
  423. package/dist/server/src/plugins/runtime/python/index.js.map +1 -0
  424. package/dist/server/src/plugins/runtime/python/namespaces.py +101 -0
  425. package/dist/server/src/plugins/runtime/python/plugin.py +155 -0
  426. package/dist/server/src/plugins/runtime/python/plugin_api.py +29 -0
  427. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +1732 -0
  428. package/dist/server/src/plugins/runtime/python/proxy/core_manager.py +126 -0
  429. package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +197 -0
  430. package/dist/server/src/plugins/runtime/python/schema.py +99 -0
  431. package/dist/server/src/plugins/runtime/python/storage.py +353 -0
  432. package/dist/server/src/plugins/runtime/python/storage_controller.py +102 -0
  433. package/dist/server/src/plugins/runtime/python/typings.py +195 -0
  434. package/dist/server/src/plugins/schema.d.ts +27 -34
  435. package/dist/server/src/plugins/schema.js +358 -369
  436. package/dist/server/src/plugins/schema.js.map +1 -1
  437. package/dist/server/src/plugins/types.d.ts +43 -1
  438. package/dist/server/src/plugins/types.js +16 -0
  439. package/dist/server/src/plugins/types.js.map +1 -1
  440. package/dist/server/src/plugins/worker.d.ts +12 -31
  441. package/dist/server/src/plugins/worker.js +89 -343
  442. package/dist/server/src/plugins/worker.js.map +1 -1
  443. package/dist/server/src/rpc/index.d.ts +32 -0
  444. package/dist/server/src/rpc/index.js +103 -0
  445. package/dist/server/src/rpc/index.js.map +1 -0
  446. package/dist/server/src/rpc/namespaces.d.ts +35 -0
  447. package/dist/server/src/rpc/namespaces.js +42 -0
  448. package/dist/server/src/rpc/namespaces.js.map +1 -0
  449. package/dist/server/src/{nats → rpc}/server.d.ts +6 -2
  450. package/dist/server/src/{nats → rpc}/server.js +76 -55
  451. package/dist/server/src/rpc/server.js.map +1 -0
  452. package/dist/server/src/rpc/types.d.ts +111 -0
  453. package/dist/server/src/rpc/types.js +2 -0
  454. package/dist/server/src/{nats → rpc}/types.js.map +1 -1
  455. package/dist/server/src/{nats → rpc}/utils.d.ts +1 -1
  456. package/dist/server/src/rpc/utils.js.map +1 -0
  457. package/dist/server/src/services/config/constants.js +12 -48
  458. package/dist/server/src/services/config/constants.js.map +1 -1
  459. package/dist/server/src/services/config/defaults.d.ts +12 -0
  460. package/dist/server/src/services/config/defaults.js +55 -0
  461. package/dist/server/src/services/config/defaults.js.map +1 -0
  462. package/dist/server/src/services/config/index.d.ts +57 -9
  463. package/dist/server/src/services/config/index.js +277 -130
  464. package/dist/server/src/services/config/index.js.map +1 -1
  465. package/dist/server/src/services/config/types.d.ts +10 -4
  466. package/dist/server/src/types.d.ts +3 -0
  467. package/dist/server/src/utils/path.d.ts +5 -0
  468. package/dist/server/src/utils/path.js +12 -0
  469. package/dist/server/src/utils/path.js.map +1 -0
  470. package/dist/server/src/utils/pythonInstaller.d.ts +46 -0
  471. package/dist/server/src/utils/pythonInstaller.js +463 -0
  472. package/dist/server/src/utils/pythonInstaller.js.map +1 -0
  473. package/package.json +57 -45
  474. package/types/fastify.d.ts +14 -0
  475. package/dist/interface/@intlify.Do1-T-x0.0.0.49.js +0 -15
  476. package/dist/interface/@mdi.CbjpODVZ.0.0.49.js +0 -1
  477. package/dist/interface/@tanstack.CgZ4BVuY.0.0.49.js +0 -1
  478. package/dist/interface/@vue.DeX8WChi.0.0.49.js +0 -17
  479. package/dist/interface/@vueform.WCJNykTK.0.0.49.js +0 -1
  480. package/dist/interface/@vueuse.fmA4o7MO.0.0.49.js +0 -1
  481. package/dist/interface/Account.D_hgF7as.0.0.49.js +0 -1
  482. package/dist/interface/Adminpanel.Cr2ysRnk.0.0.49.js +0 -2
  483. package/dist/interface/Appearance.DJPnnakw.0.0.49.js +0 -1
  484. package/dist/interface/Backup.DWrnTw65.0.0.49.js +0 -1
  485. package/dist/interface/Camera.Cm8bv5Jw.0.0.49.js +0 -1
  486. package/dist/interface/Cameras.BdMnnB_B.0.0.49.js +0 -1
  487. package/dist/interface/Camview.CvyTACeS.0.0.49.js +0 -1
  488. package/dist/interface/Config.R58trs6R.0.0.49.js +0 -1
  489. package/dist/interface/Console.ByS6OcfG.0.0.49.js +0 -4
  490. package/dist/interface/FirstSteps.BSZVBND8.0.0.49.js +0 -1
  491. package/dist/interface/NewCamera.CpKY8-_z.0.0.49.js +0 -469
  492. package/dist/interface/Plugin.ucDXXC6d.0.0.49.js +0 -1
  493. package/dist/interface/Plugins.Bl6Yy3fd.0.0.49.js +0 -1
  494. package/dist/interface/Recordings.Bm-_HDqk.0.0.49.js +0 -1
  495. package/dist/interface/Recordings.CVFqRJTQ.0.0.49.js +0 -1
  496. package/dist/interface/Settings.ClbXnv3j.0.0.49.js +0 -1
  497. package/dist/interface/System.BE0hX95Q.0.0.49.js +0 -4
  498. package/dist/interface/User.Ih1R_8u4.0.0.49.js +0 -1
  499. package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.CAHg6HiL.0.0.49.js +0 -2
  500. package/dist/interface/VConsole.B9yVZ89i.0.0.49.js +0 -1
  501. package/dist/interface/VPlayer.DWJVzwuw.0.0.49.js +0 -4
  502. package/dist/interface/VPluginCard.pJNHjHpP.0.0.49.js +0 -4
  503. package/dist/interface/ace-builds.S1varnlI.0.0.49.js +0 -970
  504. package/dist/interface/apexcharts.BQn4Fbzn.0.0.49.js +0 -838
  505. package/dist/interface/assets/@vueform.0.0.49.CroAHJs8.css +0 -1
  506. package/dist/interface/assets/@xterm.0.0.49.CFbL2ovg.css +0 -32
  507. package/dist/interface/assets/Account.0.0.49.Bnw6Lbtd.css +0 -1
  508. package/dist/interface/assets/Adminpanel.0.0.49.a3t1v3MB.css +0 -1
  509. package/dist/interface/assets/Camera.0.0.49.Br9s6-lM.css +0 -1
  510. package/dist/interface/assets/Cameras.0.0.49.Buf1Dgce.css +0 -1
  511. package/dist/interface/assets/Camview.0.0.49.B7Cja2ry.css +0 -1
  512. package/dist/interface/assets/Config.0.0.49.DNGo2krN.css +0 -1
  513. package/dist/interface/assets/Console.0.0.49.Bh8l9QnM.css +0 -1
  514. package/dist/interface/assets/FirstSteps.0.0.49.Mu8VPl13.css +0 -1
  515. package/dist/interface/assets/NewCamera.0.0.49.DtjxW0Pf.css +0 -1
  516. package/dist/interface/assets/Plugin.0.0.49.YIpAU1_n.css +0 -1
  517. package/dist/interface/assets/Plugins.0.0.49.DXSoO9M1.css +0 -1
  518. package/dist/interface/assets/Settings.0.0.49.CVmui2kE.css +0 -1
  519. package/dist/interface/assets/User.0.0.49.BiGtIFqt.css +0 -1
  520. package/dist/interface/assets/VConsole.0.0.49.BCqKHpmJ.css +0 -1
  521. package/dist/interface/assets/VPlayer.0.0.49.C4lm2rVR.css +0 -1
  522. package/dist/interface/assets/VPluginCard.0.0.49.C8Lj6X-J.css +0 -1
  523. package/dist/interface/assets/main.0.0.49.OJngntGT.css +0 -1
  524. package/dist/interface/assets/vue3-toastify.0.0.49.DHXAGmwn.css +0 -1
  525. package/dist/interface/assets/vuetify.0.0.49.Dua9WSqa.css +0 -5
  526. package/dist/interface/axios.DIsA03vz.0.0.49.js +0 -6
  527. package/dist/interface/backup.DO02r0Uq.0.0.49.js +0 -1
  528. package/dist/interface/dnd-core.De50QAoi.0.0.49.js +0 -1
  529. package/dist/interface/engine.io-client.BkCVneko.0.0.49.js +0 -1
  530. package/dist/interface/fast-deep-equal.Cba0yG7P.0.0.49.js +0 -1
  531. package/dist/interface/fonts/Inter/Inter-Regular.ttf +0 -0
  532. package/dist/interface/highlight.js.B_E0LW5C.0.0.49.js +0 -2
  533. package/dist/interface/hookable.B8xFkYCm.0.0.49.js +0 -1
  534. package/dist/interface/linkify-it.B6s2BWlj.0.0.49.js +0 -1
  535. package/dist/interface/main.BBe3SGhH.0.0.49.js +0 -4
  536. package/dist/interface/perfect-debounce.Cp2ysxOb.0.0.49.js +0 -1
  537. package/dist/interface/pinia.ggULzsrQ.0.0.49.js +0 -5
  538. package/dist/interface/plugins.D11FBqVV.0.0.49.js +0 -1
  539. package/dist/interface/react-dnd-touch-backend.Bu6wFEmw.0.0.49.js +0 -1
  540. package/dist/interface/rxjs.BoFuGUYG.0.0.49.js +0 -3
  541. package/dist/interface/socket.io-client.DkEQDv7C.0.0.49.js +0 -1
  542. package/dist/interface/socket.io-parser.DIURoCw8.0.0.49.js +0 -1
  543. package/dist/interface/system.D_LabhBl.0.0.49.js +0 -1
  544. package/dist/interface/types.Cz9TaZAP.0.0.49.js +0 -1
  545. package/dist/interface/utils.mAKpSMLY.0.0.49.js +0 -1
  546. package/dist/interface/uuid.Ch9TGLTe.0.0.49.js +0 -1
  547. package/dist/interface/vee-validate.8pUAwQ7T.0.0.49.js +0 -5
  548. package/dist/interface/vue-i18n.CBqdKRmG.0.0.49.js +0 -5
  549. package/dist/interface/vue-inline-svg.ZWpe_tFT.0.0.49.js +0 -1
  550. package/dist/interface/vue-router.DvFvaoP2.0.0.49.js +0 -5
  551. package/dist/interface/vue3-apexcharts.BHSDC9pf.0.0.49.js +0 -1
  552. package/dist/interface/vue3-dnd.DbCy3Qbj.0.0.49.js +0 -1
  553. package/dist/interface/vue3-toastify.JJyrPHKk.0.0.49.js +0 -1
  554. package/dist/interface/vuetify.kkqUjVJA.0.0.49.js +0 -5
  555. package/dist/interface/zod.bkdEMpUp.0.0.49.js +0 -1
  556. package/dist/server/src/api/utils/cameraSource.d.ts +0 -6
  557. package/dist/server/src/api/utils/cameraSource.js +0 -51
  558. package/dist/server/src/api/utils/cameraSource.js.map +0 -1
  559. package/dist/server/src/api/websocket/go2rtc.d.ts +0 -21
  560. package/dist/server/src/api/websocket/go2rtc.js +0 -88
  561. package/dist/server/src/api/websocket/go2rtc.js.map +0 -1
  562. package/dist/server/src/api/websocket/nsp/proxy.d.ts +0 -27
  563. package/dist/server/src/api/websocket/nsp/proxy.js +0 -127
  564. package/dist/server/src/api/websocket/nsp/proxy.js.map +0 -1
  565. package/dist/server/src/nats/index.d.ts +0 -40
  566. package/dist/server/src/nats/index.js +0 -164
  567. package/dist/server/src/nats/index.js.map +0 -1
  568. package/dist/server/src/nats/proxy/cameraDevice.d.ts +0 -22
  569. package/dist/server/src/nats/proxy/cameraDevice.js +0 -249
  570. package/dist/server/src/nats/proxy/cameraDevice.js.map +0 -1
  571. package/dist/server/src/nats/proxy/coreManager.d.ts +0 -14
  572. package/dist/server/src/nats/proxy/coreManager.js +0 -68
  573. package/dist/server/src/nats/proxy/coreManager.js.map +0 -1
  574. package/dist/server/src/nats/proxy/deviceManager.d.ts +0 -14
  575. package/dist/server/src/nats/proxy/deviceManager.js +0 -101
  576. package/dist/server/src/nats/proxy/deviceManager.js.map +0 -1
  577. package/dist/server/src/nats/server.js.map +0 -1
  578. package/dist/server/src/nats/types.d.ts +0 -18
  579. package/dist/server/src/nats/utils.js.map +0 -1
  580. /package/dist/interface/assets/{Backup.0.0.49.CX0rT0QJ.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.1.css} +0 -0
  581. /package/dist/interface/assets/{highlight.0.0.49.Ch2EwETz.css → highlight.Ch2EwETz.0.0.50-internal.1.css} +0 -0
  582. /package/dist/interface/assets/{logo-256.0.0.49.BCQk9H1-.png → logo-256.BCQk9H1-.0.0.50-internal.1.png} +0 -0
  583. /package/dist/interface/assets/{logo-512.0.0.49.DLKVOU2S.png → logo-512.DLKVOU2S.0.0.50-internal.1.png} +0 -0
  584. /package/dist/interface/assets/{logo.0.0.49.DmEiRk0z.png → logo.DmEiRk0z.0.0.50-internal.1.png} +0 -0
  585. /package/dist/interface/assets/{mode-json.0.0.49.Br7xisR1.js → mode-json.Br7xisR1.0.0.50-internal.1.js} +0 -0
  586. /package/dist/interface/assets/{mode-yaml.0.0.49.CIYL8U3d.js → mode-yaml.CIYL8U3d.0.0.50-internal.1.js} +0 -0
  587. /package/dist/interface/{@babel.l0sNRNKZ.0.0.49.js → js/@babel.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  588. /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.49.js → js/@react-dnd.CcwRs9xb.0.0.50-internal.1.js} +0 -0
  589. /package/dist/interface/{@socket.io.Dkula2eQ.0.0.49.js → js/@socket.io.Dkula2eQ.0.0.50-internal.1.js} +0 -0
  590. /package/dist/interface/{birpc.l0sNRNKZ.0.0.49.js → js/birpc.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  591. /package/dist/interface/{compare-versions.DqEOhma6.0.0.49.js → js/compare-versions.DqEOhma6.0.0.50-internal.1.js} +0 -0
  592. /package/dist/interface/{dijkstrajs.C00ieaqj.0.0.49.js → js/dijkstrajs.C00ieaqj.0.0.50-internal.1.js} +0 -0
  593. /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.49.js → js/engine.io-parser.BiEtp6m2.0.0.50-internal.1.js} +0 -0
  594. /package/dist/interface/{entities.C20TfXL6.0.0.49.js → js/entities.C20TfXL6.0.0.50-internal.1.js} +0 -0
  595. /package/dist/interface/{ev-emitter.X5f1qa-c.0.0.49.js → js/ev-emitter.X5f1qa-c.0.0.50-internal.1.js} +0 -0
  596. /package/dist/interface/{get-size.D1dS-IaP.0.0.49.js → js/get-size.D1dS-IaP.0.0.50-internal.1.js} +0 -0
  597. /package/dist/interface/{vue.l0sNRNKZ.0.0.49.js → js/hookable.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  598. /package/dist/interface/{mdurl.k9Sl0PQj.0.0.49.js → js/mdurl.k9Sl0PQj.0.0.50-internal.1.js} +0 -0
  599. /package/dist/interface/{punycode.js.Dj65hjkv.0.0.49.js → js/punycode.js.Dj65hjkv.0.0.50-internal.1.js} +0 -0
  600. /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.49.js → js/react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.1.js} +0 -0
  601. /package/dist/interface/{redux.BFxtlG_c.0.0.49.js → js/redux.BFxtlG_c.0.0.50-internal.1.js} +0 -0
  602. /package/dist/interface/{tslib.9k7AwCpt.0.0.49.js → js/tslib.9k7AwCpt.0.0.50-internal.1.js} +0 -0
  603. /package/dist/interface/{uc.micro.kMc2yuuw.0.0.49.js → js/uc.micro.kMc2yuuw.0.0.50-internal.1.js} +0 -0
  604. /package/dist/server/src/{nats → decoder}/types.js +0 -0
  605. /package/dist/server/src/{nats → rpc}/utils.js +0 -0
@@ -1,7 +1,8 @@
1
- import { orderBy } from '@camera.ui/common/utils';
1
+ import { createSourceName, orderBy } from '@camera.ui/common/utils';
2
2
  import { createReadStream, truncate } from 'node:fs';
3
3
  import { Readable } from 'node:stream';
4
4
  import { container } from 'tsyringe';
5
+ import { createCameraSchema } from '../schemas/cameras.schema.js';
5
6
  import { CamerasService } from '../services/cameras.service.js';
6
7
  import { PluginsService } from '../services/plugins.service.js';
7
8
  export class CamerasController {
@@ -39,7 +40,7 @@ export class CamerasController {
39
40
  });
40
41
  }
41
42
  }
42
- getZoneByName(req, reply) {
43
+ getZones(req, reply) {
43
44
  try {
44
45
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
45
46
  if (!camera) {
@@ -48,8 +49,7 @@ export class CamerasController {
48
49
  message: 'Camera not exists',
49
50
  });
50
51
  }
51
- const zone = camera.detectionZone.find((z) => z.name === req.params.zonename);
52
- return reply.code(200).send(zone);
52
+ return reply.code(200).send(camera.detectionZones);
53
53
  }
54
54
  catch (error) {
55
55
  return reply.code(500).send({
@@ -58,7 +58,7 @@ export class CamerasController {
58
58
  });
59
59
  }
60
60
  }
61
- async insertZone(req, reply) {
61
+ async patchZones(req, reply) {
62
62
  try {
63
63
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
64
64
  if (!camera) {
@@ -67,21 +67,8 @@ export class CamerasController {
67
67
  message: 'Camera not exists',
68
68
  });
69
69
  }
70
- const zone = camera.detectionZone.find((z) => z.name === req.body.name);
71
- if (zone) {
72
- return reply.code(409).send({
73
- statusCode: 409,
74
- message: 'Zone already exists',
75
- });
76
- }
77
- if (camera.detectionZone.length > 0) {
78
- return reply.code(409).send({
79
- statusCode: 409,
80
- message: 'Only one zone is allowed',
81
- });
82
- }
83
- const newCamera = await this.service.createZone(camera.name, req.body);
84
- return reply.code(201).send(newCamera);
70
+ const newZone = await this.service.patchZones(req.params.cameraname, req.body);
71
+ return reply.code(200).send(newZone);
85
72
  }
86
73
  catch (error) {
87
74
  return reply.code(500).send({
@@ -90,7 +77,7 @@ export class CamerasController {
90
77
  });
91
78
  }
92
79
  }
93
- async patchZoneByName(req, reply) {
80
+ getExtensionsByName(req, reply) {
94
81
  try {
95
82
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
96
83
  if (!camera) {
@@ -99,15 +86,19 @@ export class CamerasController {
99
86
  message: 'Camera not exists',
100
87
  });
101
88
  }
102
- const zone = camera.detectionZone.find((z) => z.name === req.params.zonename);
103
- if (!zone) {
104
- return reply.code(404).send({
105
- statusCode: 404,
106
- message: 'Zone not exists',
107
- });
108
- }
109
- const newZone = await this.service.patchZoneByName(req.params.cameraname, req.params.zonename, req.body);
110
- return reply.code(200).send(newZone);
89
+ const cameraExtensions = [];
90
+ camera.extensions.plugins.forEach((extension) => {
91
+ const plugin = this.pluginsService.getPluginByName(extension.name);
92
+ if (plugin) {
93
+ cameraExtensions.push({
94
+ pluginName: plugin.pluginName,
95
+ displayName: plugin.displayName,
96
+ type: plugin.contract.extensions,
97
+ });
98
+ }
99
+ });
100
+ const ordered = orderBy(cameraExtensions, ['displayName'], ['asc', 'asc']);
101
+ return reply.code(200).send(ordered);
111
102
  }
112
103
  catch (error) {
113
104
  return reply.code(500).send({
@@ -116,7 +107,7 @@ export class CamerasController {
116
107
  });
117
108
  }
118
109
  }
119
- async removeZoneByName(req, reply) {
110
+ async getExtensionConfigByName(req, reply) {
120
111
  try {
121
112
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
122
113
  if (!camera) {
@@ -125,54 +116,30 @@ export class CamerasController {
125
116
  message: 'Camera not exists',
126
117
  });
127
118
  }
128
- const zone = camera.detectionZone.find((z) => z.name === req.params.zonename);
129
- if (!zone) {
119
+ const pluginName = this.resolvePluginName(req.params);
120
+ const plugin = this.pluginsService.getPluginByName(pluginName);
121
+ const cameraDevice = this.api.getCamera(camera._id);
122
+ if (!plugin) {
130
123
  return reply.code(404).send({
131
124
  statusCode: 404,
132
- message: 'Zone not exists',
125
+ message: 'Plugin not exists',
133
126
  });
134
127
  }
135
- await this.service.removeZoneByName(req.params.cameraname, req.params.zonename);
136
- return reply.code(204).send();
137
- }
138
- catch (error) {
139
- return reply.code(500).send({
140
- statusCode: 500,
141
- message: error.message,
142
- });
143
- }
144
- }
145
- getExtensionsByName(req, reply) {
146
- try {
147
- const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
148
- if (!camera) {
128
+ if (!cameraDevice) {
149
129
  return reply.code(404).send({
150
130
  statusCode: 404,
151
131
  message: 'Camera not exists',
152
132
  });
153
133
  }
154
- const cameraExtensions = [];
155
- const plugin = this.pluginsService.getPluginById(camera.pluginId);
156
- if (plugin?.contract.builtIns) {
157
- cameraExtensions.push({
158
- pluginName: plugin.pluginName,
159
- displayName: plugin.displayName,
160
- type: plugin.contract.builtIns,
161
- builtIn: true,
162
- });
163
- }
164
- camera.extensions.plugins.forEach((pluginName) => {
165
- const plugin = this.pluginsService.getPluginByName(pluginName);
166
- if (plugin?.contract.extension || plugin?.contract.supportAdditionalCameras) {
167
- cameraExtensions.push({
168
- pluginName: plugin.pluginName,
169
- displayName: plugin.displayName,
170
- type: plugin?.contract.extension ? [plugin.contract.extension] : plugin.contract.builtIns,
171
- });
172
- }
173
- });
174
- const ordered = orderBy(cameraExtensions, ['displayName'], ['asc', 'asc']);
175
- return reply.code(200).send(ordered);
134
+ const proxy = await cameraDevice.storageProxy(plugin.id);
135
+ const cameraSchemaConfig = await proxy.getConfig();
136
+ const cameraExtension = {
137
+ pluginName: plugin.pluginName,
138
+ displayName: plugin.displayName,
139
+ type: plugin.contract.extensions,
140
+ ...cameraSchemaConfig,
141
+ };
142
+ return reply.code(200).send(cameraExtension);
176
143
  }
177
144
  catch (error) {
178
145
  return reply.code(500).send({
@@ -181,7 +148,7 @@ export class CamerasController {
181
148
  });
182
149
  }
183
150
  }
184
- async getExtensionConfigByName(req, reply) {
151
+ async patchExtensionConfigByName(req, reply) {
185
152
  try {
186
153
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
187
154
  if (!camera) {
@@ -192,23 +159,22 @@ export class CamerasController {
192
159
  }
193
160
  const pluginName = this.resolvePluginName(req.params);
194
161
  const plugin = this.pluginsService.getPluginByName(pluginName);
162
+ const cameraDevice = this.api.getCamera(camera._id);
195
163
  if (!plugin) {
196
164
  return reply.code(404).send({
197
165
  statusCode: 404,
198
166
  message: 'Plugin not exists',
199
167
  });
200
168
  }
201
- const cameraSchemaConfig = await this.proxyServer.requestStorageFn(plugin.id, camera._id, 'getConfig', []);
202
- const rootSchema = cameraSchemaConfig?.rootSchema && Object.keys(cameraSchemaConfig.rootSchema).length ? cameraSchemaConfig.rootSchema : undefined;
203
- const config = cameraSchemaConfig?.config && Object.keys(cameraSchemaConfig.config).length ? cameraSchemaConfig.config : undefined;
204
- const cameraExtension = {
205
- pluginName: plugin.pluginName,
206
- displayName: plugin.displayName,
207
- type: plugin.contract.extension ? [plugin.contract.extension] : plugin.contract.builtIns,
208
- rootSchema,
209
- config,
210
- };
211
- return reply.code(200).send(cameraExtension);
169
+ if (!cameraDevice) {
170
+ return reply.code(404).send({
171
+ statusCode: 404,
172
+ message: 'Camera not exists',
173
+ });
174
+ }
175
+ const proxy = await cameraDevice.storageProxy(plugin.id);
176
+ await proxy.setConfig(req.body);
177
+ return reply.code(200).send(req.body);
212
178
  }
213
179
  catch (error) {
214
180
  return reply.code(500).send({
@@ -217,7 +183,7 @@ export class CamerasController {
217
183
  });
218
184
  }
219
185
  }
220
- async patchExtensionConfigByName(req, reply) {
186
+ async setExtensionConfigByName(req, reply) {
221
187
  try {
222
188
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
223
189
  if (!camera) {
@@ -228,14 +194,22 @@ export class CamerasController {
228
194
  }
229
195
  const pluginName = this.resolvePluginName(req.params);
230
196
  const plugin = this.pluginsService.getPluginByName(pluginName);
197
+ const cameraDevice = this.api.getCamera(camera._id);
231
198
  if (!plugin) {
232
199
  return reply.code(404).send({
233
200
  statusCode: 404,
234
201
  message: 'Plugin not exists',
235
202
  });
236
203
  }
237
- await this.proxyServer.requestStorageFn(plugin.id, camera._id, 'setConfig', [req.body]);
238
- return reply.code(200).send(req.body);
204
+ if (!cameraDevice) {
205
+ return reply.code(404).send({
206
+ statusCode: 404,
207
+ message: 'Camera not exists',
208
+ });
209
+ }
210
+ const proxy = await cameraDevice.storageProxy(plugin.id);
211
+ await proxy.setValue(req.body.key, undefined);
212
+ return reply.code(204).send();
239
213
  }
240
214
  catch (error) {
241
215
  return reply.code(500).send({
@@ -255,14 +229,22 @@ export class CamerasController {
255
229
  }
256
230
  const pluginName = this.resolvePluginName(req.params);
257
231
  const plugin = this.pluginsService.getPluginByName(pluginName);
232
+ const cameraDevice = this.api.getCamera(camera._id);
258
233
  if (!plugin) {
259
234
  return reply.code(404).send({
260
235
  statusCode: 404,
261
236
  message: 'Plugin not exists',
262
237
  });
263
238
  }
264
- await this.proxyServer.requestStorageFn(plugin.id, camera._id, 'setValue', [req.body.configPath, undefined]);
265
- return reply.code(204).send();
239
+ if (!cameraDevice) {
240
+ return reply.code(404).send({
241
+ statusCode: 404,
242
+ message: 'Camera not exists',
243
+ });
244
+ }
245
+ const proxy = await cameraDevice.storageProxy(plugin.id);
246
+ const response = await proxy.submitValue(req.body.key, req.body.payload);
247
+ return reply.code(200).send(response);
266
248
  }
267
249
  catch (error) {
268
250
  return reply.code(500).send({
@@ -288,13 +270,18 @@ export class CamerasController {
288
270
  message: 'Source not exists',
289
271
  });
290
272
  }
291
- const probe = await this.service.probeCameraSource(camera, source);
292
- return reply.code(200).send({ url: source.urls.rtsp.default, probe });
273
+ const probeConfig = {
274
+ video: req.query.video,
275
+ audio: req.query.audio,
276
+ microphone: req.query.microphone,
277
+ };
278
+ const probe = await this.service.probeCameraSource(camera, source, probeConfig);
279
+ return reply.code(200).send({ rtspUrl: source.urls.rtsp.base, onvifUrl: source.urls.rtsp.onvif, probe });
293
280
  }
294
281
  catch (error) {
295
- return reply.code(error.response?.status || 500).send({
296
- statusCode: error.response?.status || 500,
297
- message: error.response?.statusText || error.message,
282
+ return reply.code(error.response?.status ?? 500).send({
283
+ statusCode: error.response?.status ?? 500,
284
+ message: error.response?.statusText ?? error.message,
298
285
  });
299
286
  }
300
287
  }
@@ -308,15 +295,16 @@ export class CamerasController {
308
295
  message: 'Camera not exists',
309
296
  });
310
297
  }
311
- const snapshot = await cameraController.snapshot(req.query.forceNew);
298
+ const source = cameraController.snapshotSource ?? cameraController.streamSource;
299
+ const snapshot = await cameraController.snapshot(source._id, req.query.forceNew);
312
300
  const base64string = snapshot ? Buffer.from(snapshot).toString('base64') : undefined;
313
301
  reply.header('Content-Type', 'image/jpeg');
314
302
  return reply.code(200).send(base64string);
315
303
  }
316
304
  catch (error) {
317
- return reply.code(error.response?.status || 500).send({
318
- statusCode: error.response?.status || 500,
319
- message: error.response?.statusText || error.message,
305
+ return reply.code(error.response?.status ?? 500).send({
306
+ statusCode: error.response?.status ?? 500,
307
+ message: error.response?.statusText ?? error.message,
320
308
  });
321
309
  }
322
310
  }
@@ -330,15 +318,16 @@ export class CamerasController {
330
318
  message: 'Camera not exists',
331
319
  });
332
320
  }
333
- const snapshot = await cameraController.snapshot();
321
+ const source = cameraController.snapshotSource ?? cameraController.streamSource;
322
+ const snapshot = await cameraController.snapshot(source._id, req.query.forceNew);
334
323
  const base64string = snapshot ? Buffer.from(snapshot).toString('base64') : undefined;
335
324
  reply.header('Content-Type', 'image/jpeg');
336
325
  return reply.code(200).send(base64string);
337
326
  }
338
327
  catch (error) {
339
- return reply.code(error.response?.status || 500).send({
340
- statusCode: error.response?.status || 500,
341
- message: error.response?.statusText || error.message,
328
+ return reply.code(error.response?.status ?? 500).send({
329
+ statusCode: error.response?.status ?? 500,
330
+ message: error.response?.statusText ?? error.message,
342
331
  });
343
332
  }
344
333
  }
@@ -368,6 +357,182 @@ export class CamerasController {
368
357
  });
369
358
  }
370
359
  }
360
+ async pairCamera(req, reply) {
361
+ try {
362
+ const camera = this.service.findByName(req.body.name) ?? this.service.findById(req.body.name);
363
+ if (camera) {
364
+ return reply.code(409).send({
365
+ statusCode: 409,
366
+ message: 'Camera already exists',
367
+ });
368
+ }
369
+ const cameraSources = [];
370
+ const existingGo2RtcSources = Object.keys(this.configService.go2rtcConfig.streams ?? {});
371
+ const checkSourceExists = (sourceName) => {
372
+ if (existingGo2RtcSources.includes(sourceName)) {
373
+ return reply.code(409).send({
374
+ statusCode: 409,
375
+ message: 'Go2Rtc Source already exist',
376
+ });
377
+ }
378
+ return undefined;
379
+ };
380
+ if (req.body.type === 'HomeKit') {
381
+ const sourceName = createSourceName(req.body.name, 'main');
382
+ const sourceExistsError = checkSourceExists(sourceName);
383
+ if (sourceExistsError) {
384
+ return sourceExistsError;
385
+ }
386
+ if (!req.body.pin) {
387
+ return reply.code(400).send({
388
+ statusCode: 400,
389
+ message: 'PIN is required for HomeKit',
390
+ });
391
+ }
392
+ const { source } = await this.go2rtcApi.streamsApi.pairHomekit({
393
+ id: sourceName,
394
+ url: req.body.url,
395
+ pin: req.body.pin,
396
+ });
397
+ cameraSources.push({
398
+ name: 'main',
399
+ role: 'high-resolution',
400
+ urls: [source.url],
401
+ useForSnapshot: true,
402
+ hotMode: false,
403
+ });
404
+ }
405
+ else if (req.body.type === 'Onvif') {
406
+ const url = new URL(req.body.url);
407
+ url.username = req.body.username ?? '';
408
+ url.password = req.body.password ?? '';
409
+ const { sources } = await this.go2rtcApi.discoverApi.discoverOnvif({ src: url.toString() });
410
+ if (!sources.length) {
411
+ throw new Error('No sources found');
412
+ }
413
+ const streamSources = sources.filter((source) => source.id !== 'snapshot');
414
+ const snapshotSource = sources.find((source) => source.id === 'snapshot');
415
+ const hasMultipleStreams = streamSources.length > 2;
416
+ const sourceAssignments = [];
417
+ if (streamSources[0]) {
418
+ sourceAssignments.push({
419
+ source: streamSources[0],
420
+ role: 'high-resolution',
421
+ });
422
+ }
423
+ if (streamSources[1]) {
424
+ sourceAssignments.push({
425
+ source: streamSources[1],
426
+ role: hasMultipleStreams ? 'mid-resolution' : 'low-resolution',
427
+ });
428
+ }
429
+ if (streamSources[2]) {
430
+ sourceAssignments.push({
431
+ source: streamSources[2],
432
+ role: 'low-resolution',
433
+ });
434
+ }
435
+ if (snapshotSource) {
436
+ sourceAssignments.push({
437
+ source: snapshotSource,
438
+ role: 'snapshot',
439
+ });
440
+ }
441
+ for (const { source } of sourceAssignments) {
442
+ const sourceName = createSourceName(req.body.name, source.id);
443
+ const sourceExistsError = checkSourceExists(sourceName);
444
+ if (sourceExistsError) {
445
+ return sourceExistsError;
446
+ }
447
+ }
448
+ const determineSnapshotSource = () => {
449
+ if (snapshotSource)
450
+ return false;
451
+ if (streamSources[2])
452
+ return 'low-resolution';
453
+ if (streamSources[1])
454
+ return hasMultipleStreams ? 'mid-resolution' : 'low-resolution';
455
+ return 'high-resolution';
456
+ };
457
+ const snapshotRole = determineSnapshotSource();
458
+ for (const { source, role } of sourceAssignments) {
459
+ cameraSources.push({
460
+ name: source.id,
461
+ role: role,
462
+ urls: [source.url],
463
+ useForSnapshot: role === 'snapshot' ? false : snapshotRole === role,
464
+ hotMode: false,
465
+ });
466
+ }
467
+ }
468
+ else if (req.body.type === 'Google') {
469
+ const sourceName = createSourceName(req.body.name, 'main');
470
+ const sourceExistsError = checkSourceExists(sourceName);
471
+ if (sourceExistsError) {
472
+ return sourceExistsError;
473
+ }
474
+ if (!req.body.clientId || !req.body.clientSecret || !req.body.refreshToken || !req.body.projectId) {
475
+ return reply.code(400).send({
476
+ statusCode: 400,
477
+ message: 'Google credentials are required',
478
+ });
479
+ }
480
+ // Todo
481
+ }
482
+ else if (req.body.type === 'Ring') {
483
+ const sourceName = createSourceName(req.body.name, 'main');
484
+ const sourceExistsError = checkSourceExists(sourceName);
485
+ if (sourceExistsError) {
486
+ return sourceExistsError;
487
+ }
488
+ if (!req.body.email || !req.body.password) {
489
+ return reply.code(400).send({
490
+ statusCode: 400,
491
+ message: 'Ring credentials are required',
492
+ });
493
+ }
494
+ // Todo
495
+ }
496
+ else if (req.body.type === 'Roborock') {
497
+ const sourceName = createSourceName(req.body.name, 'main');
498
+ const sourceExistsError = checkSourceExists(sourceName);
499
+ if (sourceExistsError) {
500
+ return sourceExistsError;
501
+ }
502
+ if (!req.body.username || !req.body.password) {
503
+ return reply.code(400).send({
504
+ statusCode: 400,
505
+ message: 'Roborock credentials are required',
506
+ });
507
+ }
508
+ // Todo
509
+ }
510
+ else {
511
+ return reply.code(400).send({
512
+ statusCode: 400,
513
+ message: 'Invalid camera type',
514
+ });
515
+ }
516
+ if (!cameraSources.length) {
517
+ return reply.code(500).send({
518
+ statusCode: 500,
519
+ message: 'No sources found',
520
+ });
521
+ }
522
+ const parsedCamera = createCameraSchema.parse({
523
+ name: req.body.name,
524
+ sources: cameraSources,
525
+ });
526
+ const newCamera = await this.service.createCamera(parsedCamera);
527
+ return reply.code(201).send(newCamera);
528
+ }
529
+ catch (error) {
530
+ return reply.code(500).send({
531
+ statusCode: 500,
532
+ message: error.message,
533
+ });
534
+ }
535
+ }
371
536
  async preview(req, reply) {
372
537
  const sourceName = Math.random().toString(36).substring(7);
373
538
  const streamSource = req.body.url;
@@ -380,6 +545,12 @@ export class CamerasController {
380
545
  await this.go2rtcApi.streamsApi.deleteStream({
381
546
  src: sourceName,
382
547
  });
548
+ if (!img.byteLength) {
549
+ return reply.code(500).send({
550
+ statusCode: 500,
551
+ message: 'Failed to take snapshot',
552
+ });
553
+ }
383
554
  reply.header('Content-Type', 'image/jpeg');
384
555
  return reply.code(201).send(Buffer.from(img).toString('base64'));
385
556
  }
@@ -392,9 +563,9 @@ export class CamerasController {
392
563
  catch {
393
564
  //
394
565
  }
395
- return reply.code(error.response?.status || 500).send({
396
- statusCode: error.response?.status || 500,
397
- message: error.response?.statusText || error.message,
566
+ return reply.code(error.response?.status ?? 500).send({
567
+ statusCode: error.response?.status ?? 500,
568
+ message: error.response?.statusText ?? error.message,
398
569
  });
399
570
  }
400
571
  }
@@ -411,6 +582,44 @@ export class CamerasController {
411
582
  });
412
583
  }
413
584
  }
585
+ async getStreamUrl(req, reply) {
586
+ try {
587
+ const camera = this.api.getCamera(req.params.cameraid);
588
+ if (!camera) {
589
+ return reply.code(404).send({
590
+ statusCode: 404,
591
+ message: 'Camera not exists',
592
+ });
593
+ }
594
+ const streamUrl = await camera.interfaces.streamUrl(req.params.sourcename);
595
+ if (!streamUrl) {
596
+ return reply.code(404).send({
597
+ statusCode: 404,
598
+ message: 'Stream URL not found',
599
+ });
600
+ }
601
+ return reply.code(200).send({ streamUrl });
602
+ }
603
+ catch (error) {
604
+ return reply.code(500).send({
605
+ statusCode: 500,
606
+ message: error.message,
607
+ });
608
+ }
609
+ }
610
+ async discoverCameras(req, reply) {
611
+ try {
612
+ const devices = await this.service.discoverCameras(req.query.type, req.query.src);
613
+ devices.sources = devices.sources.filter((source) => !this.configService.cameraURLExists(source.url));
614
+ return reply.code(200).send(devices);
615
+ }
616
+ catch (error) {
617
+ return reply.code(500).send({
618
+ statusCode: 500,
619
+ message: error.message,
620
+ });
621
+ }
622
+ }
414
623
  async patchByName(req, reply) {
415
624
  try {
416
625
  const camera = this.service.findByName(req.params.cameraname) ?? this.service.findById(req.params.cameraname);
@@ -557,7 +766,7 @@ export class CamerasController {
557
766
  message: 'Plugin not exists',
558
767
  });
559
768
  }
560
- const newCamera = await this.service.addExtensionByName(req.params.cameraname, pluginName);
769
+ const newCamera = await this.service.addExtensionByName(req.params.cameraname, pluginName, req.query.type);
561
770
  return reply.code(200).send(newCamera);
562
771
  }
563
772
  catch (error) {
@@ -584,7 +793,7 @@ export class CamerasController {
584
793
  message: 'Plugin not exists',
585
794
  });
586
795
  }
587
- const newCamera = await this.service.removeExtensionByName(req.params.cameraname, pluginName);
796
+ const newCamera = await this.service.removeExtensionByName(req.params.cameraname, pluginName, req.query.type);
588
797
  return reply.code(200).send(newCamera);
589
798
  }
590
799
  catch (error) {