@camera.ui/server 0.0.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 (652) hide show
  1. package/dist/interface/assets/@babel-l0sNRNKZ.js +1 -0
  2. package/dist/interface/assets/@camera.ui-2NVnv26v.js +8 -0
  3. package/dist/interface/assets/@intlify-Ck2ZoCVz.js +15 -0
  4. package/dist/interface/assets/@mdi-C-QA1nE3.js +1 -0
  5. package/dist/interface/assets/@popperjs-BQBsAJpH.js +1 -0
  6. package/dist/interface/assets/@react-dnd-CcwRs9xb.js +1 -0
  7. package/dist/interface/assets/@socket.io-Dkula2eQ.js +1 -0
  8. package/dist/interface/assets/@tanstack-BqH4GyO-.js +1 -0
  9. package/dist/interface/assets/@vee-validate-DCBdnGo-.js +5 -0
  10. package/dist/interface/assets/@vue-C7-KaDG4.js +17 -0
  11. package/dist/interface/assets/@vueform-arggO0eF.js +1 -0
  12. package/dist/interface/assets/@vueform-h7tNX9p6.css +1 -0
  13. package/dist/interface/assets/@vueuse-C3WMTDqL.js +1 -0
  14. package/dist/interface/assets/@xterm-B4Ga69iL.js +9 -0
  15. package/dist/interface/assets/@xterm-CGrrDQr5.css +32 -0
  16. package/dist/interface/assets/Account-B_tHnXoX.css +1 -0
  17. package/dist/interface/assets/Account-gJpkf0nE.js +1 -0
  18. package/dist/interface/assets/Adminpanel-B_SY1GJM.css +0 -0
  19. package/dist/interface/assets/Adminpanel-Bge9nu5N.js +1 -0
  20. package/dist/interface/assets/Appearance-D22q-X_I.js +1 -0
  21. package/dist/interface/assets/Backup-DBv9xFPh.css +1 -0
  22. package/dist/interface/assets/Backup-pJm6s10G.js +1 -0
  23. package/dist/interface/assets/Camera-BgO2yRjb.js +1 -0
  24. package/dist/interface/assets/Camera-CWiLco3W.css +1 -0
  25. package/dist/interface/assets/Cameras-BM3vSM_R.css +1 -0
  26. package/dist/interface/assets/Cameras-DjeKruR_.js +1 -0
  27. package/dist/interface/assets/Camview-DfzlprzN.js +1 -0
  28. package/dist/interface/assets/Camview-vUAs5YHU.css +1 -0
  29. package/dist/interface/assets/Config-BKIOIkjC.js +1 -0
  30. package/dist/interface/assets/Config-DAiKsG7W.css +1 -0
  31. package/dist/interface/assets/Console-BsyX2S3R.css +1 -0
  32. package/dist/interface/assets/Console-Caz7y-T0.js +4 -0
  33. package/dist/interface/assets/FirstSteps-DNHhyDSw.css +1 -0
  34. package/dist/interface/assets/FirstSteps-mQK4XFTs.js +1 -0
  35. package/dist/interface/assets/NewCamera-B9t-0NCc.js +448 -0
  36. package/dist/interface/assets/NewCamera-CHMgUDbC.css +1 -0
  37. package/dist/interface/assets/Plugin-BSHKKjrl.css +1 -0
  38. package/dist/interface/assets/Plugin-Di_bBsg-.js +1 -0
  39. package/dist/interface/assets/Plugins-BsMITags.css +1 -0
  40. package/dist/interface/assets/Plugins-DhmzMNuO.js +1 -0
  41. package/dist/interface/assets/Recordings-Bu53bSBp.js +1 -0
  42. package/dist/interface/assets/Recordings-XY20w8yp.js +1 -0
  43. package/dist/interface/assets/Settings-JES2wb8p.css +1 -0
  44. package/dist/interface/assets/Settings-gGRBRVST.js +1 -0
  45. package/dist/interface/assets/System-ZDrcLNk0.js +1 -0
  46. package/dist/interface/assets/User-BXColIbU.css +1 -0
  47. package/dist/interface/assets/User-D4vEhhzi.js +1 -0
  48. package/dist/interface/assets/VConfigEditor.vue_vue_type_script_setup_true_lang-CXFI-IeE.js +2 -0
  49. package/dist/interface/assets/VConsole-BHo3xprq.js +1 -0
  50. package/dist/interface/assets/VConsole-f-nUkOuD.css +1 -0
  51. package/dist/interface/assets/VPlayer-D3KhRfx-.css +1 -0
  52. package/dist/interface/assets/VPlayer-YdRn97Bs.js +1 -0
  53. package/dist/interface/assets/VPluginCard--3bx6UJb.js +4 -0
  54. package/dist/interface/assets/VPluginCard-BJYMuCLk.css +1 -0
  55. package/dist/interface/assets/ace-builds-CigWTak4.js +956 -0
  56. package/dist/interface/assets/axios--Jv2L996.js +6 -0
  57. package/dist/interface/assets/dijkstrajs-D_NXgYpA.js +1 -0
  58. package/dist/interface/assets/dnd-core-SnWOpY0X.js +1 -0
  59. package/dist/interface/assets/draggabilly-Arakw9Dk.js +6 -0
  60. package/dist/interface/assets/encode-utf8-Cn5aGd7v.js +1 -0
  61. package/dist/interface/assets/engine.io-client-DBBxzneW.js +1 -0
  62. package/dist/interface/assets/engine.io-parser-BiEtp6m2.js +1 -0
  63. package/dist/interface/assets/entities-C20TfXL6.js +1 -0
  64. package/dist/interface/assets/ev-emitter-CXYwG0eJ.js +1 -0
  65. package/dist/interface/assets/fast-deep-equal-5pvsDbwX.js +1 -0
  66. package/dist/interface/assets/get-size-D1dS-IaP.js +5 -0
  67. package/dist/interface/assets/highlight-DgoK_Xib.css +1 -0
  68. package/dist/interface/assets/highlight.js-TxRCSjhv.js +2 -0
  69. package/dist/interface/assets/linkify-it-DmNjr4Kv.js +1 -0
  70. package/dist/interface/assets/logo-256-BCQk9H1-.png +0 -0
  71. package/dist/interface/assets/logo-512-DLKVOU2S.png +0 -0
  72. package/dist/interface/assets/logo-DmEiRk0z.png +0 -0
  73. package/dist/interface/assets/main-B3IVLctZ.css +1 -0
  74. package/dist/interface/assets/main-C4rYiRNz.js +2 -0
  75. package/dist/interface/assets/markdown-it-DI8MEbma.js +15 -0
  76. package/dist/interface/assets/mdurl-k9Sl0PQj.js +2 -0
  77. package/dist/interface/assets/mode-json-Br7xisR1.js +275 -0
  78. package/dist/interface/assets/mode-yaml-CIYL8U3d.js +395 -0
  79. package/dist/interface/assets/nprogress-DSyAi0LF.js +2 -0
  80. package/dist/interface/assets/pinia-D8MtiGcH.js +5 -0
  81. package/dist/interface/assets/plugins-Bf03y242.js +1 -0
  82. package/dist/interface/assets/punycode.js-Dj65hjkv.js +1 -0
  83. package/dist/interface/assets/qrcode-CGiDONbL.js +8 -0
  84. package/dist/interface/assets/react-dnd-html5-backend-1HQjlkwI.js +2 -0
  85. package/dist/interface/assets/react-dnd-touch-backend-NgACaG8W.js +1 -0
  86. package/dist/interface/assets/redux-CuxFRhX_.js +1 -0
  87. package/dist/interface/assets/rxjs-B53o3e_J.js +3 -0
  88. package/dist/interface/assets/socket.io-client-Bq_SHkin.js +1 -0
  89. package/dist/interface/assets/socket.io-parser-BBkuslX-.js +1 -0
  90. package/dist/interface/assets/system-BONnDA4y.js +1 -0
  91. package/dist/interface/assets/tslib-9k7AwCpt.js +1 -0
  92. package/dist/interface/assets/uc.micro-kMc2yuuw.js +1 -0
  93. package/dist/interface/assets/ui-CNpIJotI.js +1 -0
  94. package/dist/interface/assets/unidragger-BYtqgAQ0.js +5 -0
  95. package/dist/interface/assets/utils-BvINh1mj.js +1 -0
  96. package/dist/interface/assets/uuid-DvF23Exx.js +1 -0
  97. package/dist/interface/assets/v-calendar-CtSuDYZU.css +1 -0
  98. package/dist/interface/assets/v-calendar-uh0aTGqP.js +1 -0
  99. package/dist/interface/assets/vee-validate-D3FqbChK.js +5 -0
  100. package/dist/interface/assets/vue-i18n-1AU8MPys.js +5 -0
  101. package/dist/interface/assets/vue-inline-svg-2DDwYW6V.js +1 -0
  102. package/dist/interface/assets/vue-l0sNRNKZ.js +1 -0
  103. package/dist/interface/assets/vue-router-DfeQ8s4I.js +5 -0
  104. package/dist/interface/assets/vue3-dnd-BwxcSU9Z.js +1 -0
  105. package/dist/interface/assets/vue3-toastify-DTY1DMRs.css +1 -0
  106. package/dist/interface/assets/vue3-toastify-Ul-rf53I.js +1 -0
  107. package/dist/interface/assets/vuetify-B__3Y-at.css +5 -0
  108. package/dist/interface/assets/vuetify-_-Oqac3B.js +5 -0
  109. package/dist/interface/assets/zod-BaF2dDCd.js +1 -0
  110. package/dist/interface/browserconfig.xml +11 -0
  111. package/dist/interface/fonts/Inter/Inter-Regular.ttf +0 -0
  112. package/dist/interface/index.html +377 -0
  113. package/dist/interface/manifest.webmanifest +1 -0
  114. package/dist/interface/pwa/apple-splash-landscape-dark-1136x640.png +0 -0
  115. package/dist/interface/pwa/apple-splash-landscape-dark-1334x750.png +0 -0
  116. package/dist/interface/pwa/apple-splash-landscape-dark-1792x828.png +0 -0
  117. package/dist/interface/pwa/apple-splash-landscape-dark-2048x1536.png +0 -0
  118. package/dist/interface/pwa/apple-splash-landscape-dark-2160x1620.png +0 -0
  119. package/dist/interface/pwa/apple-splash-landscape-dark-2208x1242.png +0 -0
  120. package/dist/interface/pwa/apple-splash-landscape-dark-2224x1668.png +0 -0
  121. package/dist/interface/pwa/apple-splash-landscape-dark-2388x1668.png +0 -0
  122. package/dist/interface/pwa/apple-splash-landscape-dark-2436x1125.png +0 -0
  123. package/dist/interface/pwa/apple-splash-landscape-dark-2532x1170.png +0 -0
  124. package/dist/interface/pwa/apple-splash-landscape-dark-2556x1179.png +0 -0
  125. package/dist/interface/pwa/apple-splash-landscape-dark-2688x1242.png +0 -0
  126. package/dist/interface/pwa/apple-splash-landscape-dark-2732x2048.png +0 -0
  127. package/dist/interface/pwa/apple-splash-landscape-dark-2778x1284.png +0 -0
  128. package/dist/interface/pwa/apple-splash-landscape-dark-2796x1290.png +0 -0
  129. package/dist/interface/pwa/apple-splash-landscape-light-1136x640.png +0 -0
  130. package/dist/interface/pwa/apple-splash-landscape-light-1334x750.png +0 -0
  131. package/dist/interface/pwa/apple-splash-landscape-light-1792x828.png +0 -0
  132. package/dist/interface/pwa/apple-splash-landscape-light-2048x1536.png +0 -0
  133. package/dist/interface/pwa/apple-splash-landscape-light-2160x1620.png +0 -0
  134. package/dist/interface/pwa/apple-splash-landscape-light-2208x1242.png +0 -0
  135. package/dist/interface/pwa/apple-splash-landscape-light-2224x1668.png +0 -0
  136. package/dist/interface/pwa/apple-splash-landscape-light-2388x1668.png +0 -0
  137. package/dist/interface/pwa/apple-splash-landscape-light-2436x1125.png +0 -0
  138. package/dist/interface/pwa/apple-splash-landscape-light-2532x1170.png +0 -0
  139. package/dist/interface/pwa/apple-splash-landscape-light-2556x1179.png +0 -0
  140. package/dist/interface/pwa/apple-splash-landscape-light-2688x1242.png +0 -0
  141. package/dist/interface/pwa/apple-splash-landscape-light-2732x2048.png +0 -0
  142. package/dist/interface/pwa/apple-splash-landscape-light-2778x1284.png +0 -0
  143. package/dist/interface/pwa/apple-splash-landscape-light-2796x1290.png +0 -0
  144. package/dist/interface/pwa/apple-splash-portrait-dark-1125x2436.png +0 -0
  145. package/dist/interface/pwa/apple-splash-portrait-dark-1170x2532.png +0 -0
  146. package/dist/interface/pwa/apple-splash-portrait-dark-1179x2556.png +0 -0
  147. package/dist/interface/pwa/apple-splash-portrait-dark-1242x2208.png +0 -0
  148. package/dist/interface/pwa/apple-splash-portrait-dark-1242x2688.png +0 -0
  149. package/dist/interface/pwa/apple-splash-portrait-dark-1284x2778.png +0 -0
  150. package/dist/interface/pwa/apple-splash-portrait-dark-1290x2796.png +0 -0
  151. package/dist/interface/pwa/apple-splash-portrait-dark-1536x2048.png +0 -0
  152. package/dist/interface/pwa/apple-splash-portrait-dark-1620x2160.png +0 -0
  153. package/dist/interface/pwa/apple-splash-portrait-dark-1668x2224.png +0 -0
  154. package/dist/interface/pwa/apple-splash-portrait-dark-1668x2388.png +0 -0
  155. package/dist/interface/pwa/apple-splash-portrait-dark-2048x2732.png +0 -0
  156. package/dist/interface/pwa/apple-splash-portrait-dark-640x1136.png +0 -0
  157. package/dist/interface/pwa/apple-splash-portrait-dark-750x1334.png +0 -0
  158. package/dist/interface/pwa/apple-splash-portrait-dark-828x1792.png +0 -0
  159. package/dist/interface/pwa/apple-splash-portrait-light-1125x2436.png +0 -0
  160. package/dist/interface/pwa/apple-splash-portrait-light-1170x2532.png +0 -0
  161. package/dist/interface/pwa/apple-splash-portrait-light-1179x2556.png +0 -0
  162. package/dist/interface/pwa/apple-splash-portrait-light-1242x2208.png +0 -0
  163. package/dist/interface/pwa/apple-splash-portrait-light-1242x2688.png +0 -0
  164. package/dist/interface/pwa/apple-splash-portrait-light-1284x2778.png +0 -0
  165. package/dist/interface/pwa/apple-splash-portrait-light-1290x2796.png +0 -0
  166. package/dist/interface/pwa/apple-splash-portrait-light-1536x2048.png +0 -0
  167. package/dist/interface/pwa/apple-splash-portrait-light-1620x2160.png +0 -0
  168. package/dist/interface/pwa/apple-splash-portrait-light-1668x2224.png +0 -0
  169. package/dist/interface/pwa/apple-splash-portrait-light-1668x2388.png +0 -0
  170. package/dist/interface/pwa/apple-splash-portrait-light-2048x2732.png +0 -0
  171. package/dist/interface/pwa/apple-splash-portrait-light-640x1136.png +0 -0
  172. package/dist/interface/pwa/apple-splash-portrait-light-750x1334.png +0 -0
  173. package/dist/interface/pwa/apple-splash-portrait-light-828x1792.png +0 -0
  174. package/dist/interface/pwa/apple-touch-icon-180x180.png +0 -0
  175. package/dist/interface/pwa/favicon-16.ico +0 -0
  176. package/dist/interface/pwa/favicon-32.ico +0 -0
  177. package/dist/interface/pwa/favicon-48.ico +0 -0
  178. package/dist/interface/pwa/favicon-64.ico +0 -0
  179. package/dist/interface/pwa/logo.svg +1 -0
  180. package/dist/interface/pwa/maskable-icon-1240x600.png +0 -0
  181. package/dist/interface/pwa/maskable-icon-512x512.png +0 -0
  182. package/dist/interface/pwa/maskable-icon-620x300.png +0 -0
  183. package/dist/interface/pwa/pwa-1024x1024.png +0 -0
  184. package/dist/interface/pwa/pwa-120x120.png +0 -0
  185. package/dist/interface/pwa/pwa-144x144.png +0 -0
  186. package/dist/interface/pwa/pwa-152x152.png +0 -0
  187. package/dist/interface/pwa/pwa-167x167.png +0 -0
  188. package/dist/interface/pwa/pwa-180x180.png +0 -0
  189. package/dist/interface/pwa/pwa-192x192.png +0 -0
  190. package/dist/interface/pwa/pwa-24x24.png +0 -0
  191. package/dist/interface/pwa/pwa-300x300.png +0 -0
  192. package/dist/interface/pwa/pwa-36x36.png +0 -0
  193. package/dist/interface/pwa/pwa-48x48.png +0 -0
  194. package/dist/interface/pwa/pwa-50x50.png +0 -0
  195. package/dist/interface/pwa/pwa-64x64.png +0 -0
  196. package/dist/interface/pwa/pwa-72x72.png +0 -0
  197. package/dist/interface/pwa/pwa-88x88.png +0 -0
  198. package/dist/interface/pwa/pwa-96x96.png +0 -0
  199. package/dist/interface/registerSW.js +1 -0
  200. package/dist/interface/robots.txt +2 -0
  201. package/dist/interface/sw.js +1 -0
  202. package/dist/interface/workbox-3e911b1d.js +1 -0
  203. package/dist/server/bin/cui-service.d.ts +43 -0
  204. package/dist/server/bin/cui-service.js +472 -0
  205. package/dist/server/bin/cui-service.js.map +1 -0
  206. package/dist/server/bin/cui.d.ts +2 -0
  207. package/dist/server/bin/cui.js +8 -0
  208. package/dist/server/bin/cui.js.map +1 -0
  209. package/dist/server/bin/installer/base.d.ts +16 -0
  210. package/dist/server/bin/installer/base.js +41 -0
  211. package/dist/server/bin/installer/base.js.map +1 -0
  212. package/dist/server/bin/installer/darwin.d.ts +49 -0
  213. package/dist/server/bin/installer/darwin.js +200 -0
  214. package/dist/server/bin/installer/darwin.js.map +1 -0
  215. package/dist/server/bin/installer/freebsd.d.ts +61 -0
  216. package/dist/server/bin/installer/freebsd.js +252 -0
  217. package/dist/server/bin/installer/freebsd.js.map +1 -0
  218. package/dist/server/bin/installer/linux.d.ts +92 -0
  219. package/dist/server/bin/installer/linux.js +386 -0
  220. package/dist/server/bin/installer/linux.js.map +1 -0
  221. package/dist/server/bin/installer/win32.d.ts +37 -0
  222. package/dist/server/bin/installer/win32.js +158 -0
  223. package/dist/server/bin/installer/win32.js.map +1 -0
  224. package/dist/server/package.json +142 -0
  225. package/dist/server/requirements.txt +13 -0
  226. package/dist/server/src/api/controllers/api.controller.d.ts +6 -0
  227. package/dist/server/src/api/controllers/api.controller.js +11 -0
  228. package/dist/server/src/api/controllers/api.controller.js.map +1 -0
  229. package/dist/server/src/api/controllers/auth.controller.d.ts +20 -0
  230. package/dist/server/src/api/controllers/auth.controller.js +263 -0
  231. package/dist/server/src/api/controllers/auth.controller.js.map +1 -0
  232. package/dist/server/src/api/controllers/backup.controller.d.ts +10 -0
  233. package/dist/server/src/api/controllers/backup.controller.js +52 -0
  234. package/dist/server/src/api/controllers/backup.controller.js.map +1 -0
  235. package/dist/server/src/api/controllers/cameras.controller.d.ts +34 -0
  236. package/dist/server/src/api/controllers/cameras.controller.js +522 -0
  237. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -0
  238. package/dist/server/src/api/controllers/config.controller.d.ts +14 -0
  239. package/dist/server/src/api/controllers/config.controller.js +89 -0
  240. package/dist/server/src/api/controllers/config.controller.js.map +1 -0
  241. package/dist/server/src/api/controllers/files.controller.d.ts +8 -0
  242. package/dist/server/src/api/controllers/files.controller.js +28 -0
  243. package/dist/server/src/api/controllers/files.controller.js.map +1 -0
  244. package/dist/server/src/api/controllers/frameWorkers.controller.d.ts +16 -0
  245. package/dist/server/src/api/controllers/frameWorkers.controller.js +85 -0
  246. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -0
  247. package/dist/server/src/api/controllers/plugins.controller.d.ts +59 -0
  248. package/dist/server/src/api/controllers/plugins.controller.js +1178 -0
  249. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -0
  250. package/dist/server/src/api/controllers/system.controller.d.ts +14 -0
  251. package/dist/server/src/api/controllers/system.controller.js +149 -0
  252. package/dist/server/src/api/controllers/system.controller.js.map +1 -0
  253. package/dist/server/src/api/controllers/users.controller.d.ts +28 -0
  254. package/dist/server/src/api/controllers/users.controller.js +463 -0
  255. package/dist/server/src/api/controllers/users.controller.js.map +1 -0
  256. package/dist/server/src/api/database/index.d.ts +34 -0
  257. package/dist/server/src/api/database/index.js +185 -0
  258. package/dist/server/src/api/database/index.js.map +1 -0
  259. package/dist/server/src/api/database/migration.d.ts +12 -0
  260. package/dist/server/src/api/database/migration.js +47 -0
  261. package/dist/server/src/api/database/migration.js.map +1 -0
  262. package/dist/server/src/api/database/types.d.ts +209 -0
  263. package/dist/server/src/api/database/types.js +2 -0
  264. package/dist/server/src/api/database/types.js.map +1 -0
  265. package/dist/server/src/api/go2rtc/api/application.d.ts +9 -0
  266. package/dist/server/src/api/go2rtc/api/application.js +38 -0
  267. package/dist/server/src/api/go2rtc/api/application.js.map +1 -0
  268. package/dist/server/src/api/go2rtc/api/config.d.ts +8 -0
  269. package/dist/server/src/api/go2rtc/api/config.js +44 -0
  270. package/dist/server/src/api/go2rtc/api/config.js.map +1 -0
  271. package/dist/server/src/api/go2rtc/api/index.d.ts +1 -0
  272. package/dist/server/src/api/go2rtc/api/index.js +28 -0
  273. package/dist/server/src/api/go2rtc/api/index.js.map +1 -0
  274. package/dist/server/src/api/go2rtc/api/snapshot.d.ts +8 -0
  275. package/dist/server/src/api/go2rtc/api/snapshot.js +34 -0
  276. package/dist/server/src/api/go2rtc/api/snapshot.js.map +1 -0
  277. package/dist/server/src/api/go2rtc/api/streams.d.ts +10 -0
  278. package/dist/server/src/api/go2rtc/api/streams.js +67 -0
  279. package/dist/server/src/api/go2rtc/api/streams.js.map +1 -0
  280. package/dist/server/src/api/go2rtc/index.d.ts +13 -0
  281. package/dist/server/src/api/go2rtc/index.js +25 -0
  282. package/dist/server/src/api/go2rtc/index.js.map +1 -0
  283. package/dist/server/src/api/go2rtc/queue.d.ts +10 -0
  284. package/dist/server/src/api/go2rtc/queue.js +38 -0
  285. package/dist/server/src/api/go2rtc/queue.js.map +1 -0
  286. package/dist/server/src/api/go2rtc/types.d.ts +60 -0
  287. package/dist/server/src/api/go2rtc/types.js +2 -0
  288. package/dist/server/src/api/go2rtc/types.js.map +1 -0
  289. package/dist/server/src/api/index.d.ts +20 -0
  290. package/dist/server/src/api/index.js +233 -0
  291. package/dist/server/src/api/index.js.map +1 -0
  292. package/dist/server/src/api/middlewares/authPermission.middleware.d.ts +5 -0
  293. package/dist/server/src/api/middlewares/authPermission.middleware.js +28 -0
  294. package/dist/server/src/api/middlewares/authPermission.middleware.js.map +1 -0
  295. package/dist/server/src/api/middlewares/authValidation.middleware.d.ts +4 -0
  296. package/dist/server/src/api/middlewares/authValidation.middleware.js +129 -0
  297. package/dist/server/src/api/middlewares/authValidation.middleware.js.map +1 -0
  298. package/dist/server/src/api/middlewares/pagination.middleware.d.ts +3 -0
  299. package/dist/server/src/api/middlewares/pagination.middleware.js +65 -0
  300. package/dist/server/src/api/middlewares/pagination.middleware.js.map +1 -0
  301. package/dist/server/src/api/middlewares/socketAuth.middleware.d.ts +41 -0
  302. package/dist/server/src/api/middlewares/socketAuth.middleware.js +81 -0
  303. package/dist/server/src/api/middlewares/socketAuth.middleware.js.map +1 -0
  304. package/dist/server/src/api/plugins/cameraui.plugin.d.ts +11 -0
  305. package/dist/server/src/api/plugins/cameraui.plugin.js +6 -0
  306. package/dist/server/src/api/plugins/cameraui.plugin.js.map +1 -0
  307. package/dist/server/src/api/plugins/database.plugin.d.ts +11 -0
  308. package/dist/server/src/api/plugins/database.plugin.js +12 -0
  309. package/dist/server/src/api/plugins/database.plugin.js.map +1 -0
  310. package/dist/server/src/api/plugins/go2rtc.plugin.d.ts +11 -0
  311. package/dist/server/src/api/plugins/go2rtc.plugin.js +11 -0
  312. package/dist/server/src/api/plugins/go2rtc.plugin.js.map +1 -0
  313. package/dist/server/src/api/plugins/logger.plugin.d.ts +7 -0
  314. package/dist/server/src/api/plugins/logger.plugin.js +29 -0
  315. package/dist/server/src/api/plugins/logger.plugin.js.map +1 -0
  316. package/dist/server/src/api/plugins/socket.plugin.d.ts +11 -0
  317. package/dist/server/src/api/plugins/socket.plugin.js +12 -0
  318. package/dist/server/src/api/plugins/socket.plugin.js.map +1 -0
  319. package/dist/server/src/api/plugins/system.plugin.d.ts +21 -0
  320. package/dist/server/src/api/plugins/system.plugin.js +33 -0
  321. package/dist/server/src/api/plugins/system.plugin.js.map +1 -0
  322. package/dist/server/src/api/plugins/useragent.plugin.d.ts +8 -0
  323. package/dist/server/src/api/plugins/useragent.plugin.js +10 -0
  324. package/dist/server/src/api/plugins/useragent.plugin.js.map +1 -0
  325. package/dist/server/src/api/routes/api.routes.d.ts +2 -0
  326. package/dist/server/src/api/routes/api.routes.js +6 -0
  327. package/dist/server/src/api/routes/api.routes.js.map +1 -0
  328. package/dist/server/src/api/routes/auth.routes.d.ts +2 -0
  329. package/dist/server/src/api/routes/auth.routes.js +47 -0
  330. package/dist/server/src/api/routes/auth.routes.js.map +1 -0
  331. package/dist/server/src/api/routes/backup.routes.d.ts +2 -0
  332. package/dist/server/src/api/routes/backup.routes.js +23 -0
  333. package/dist/server/src/api/routes/backup.routes.js.map +1 -0
  334. package/dist/server/src/api/routes/cameras.routes.d.ts +2 -0
  335. package/dist/server/src/api/routes/cameras.routes.js +181 -0
  336. package/dist/server/src/api/routes/cameras.routes.js.map +1 -0
  337. package/dist/server/src/api/routes/config.routes.d.ts +2 -0
  338. package/dist/server/src/api/routes/config.routes.js +55 -0
  339. package/dist/server/src/api/routes/config.routes.js.map +1 -0
  340. package/dist/server/src/api/routes/files.routes.d.ts +2 -0
  341. package/dist/server/src/api/routes/files.routes.js +12 -0
  342. package/dist/server/src/api/routes/files.routes.js.map +1 -0
  343. package/dist/server/src/api/routes/frameWorkers.routes.d.ts +2 -0
  344. package/dist/server/src/api/routes/frameWorkers.routes.js +33 -0
  345. package/dist/server/src/api/routes/frameWorkers.routes.js.map +1 -0
  346. package/dist/server/src/api/routes/index.d.ts +6 -0
  347. package/dist/server/src/api/routes/index.js +32 -0
  348. package/dist/server/src/api/routes/index.js.map +1 -0
  349. package/dist/server/src/api/routes/plugins.routes.d.ts +2 -0
  350. package/dist/server/src/api/routes/plugins.routes.js +339 -0
  351. package/dist/server/src/api/routes/plugins.routes.js.map +1 -0
  352. package/dist/server/src/api/routes/system.routes.d.ts +2 -0
  353. package/dist/server/src/api/routes/system.routes.js +43 -0
  354. package/dist/server/src/api/routes/system.routes.js.map +1 -0
  355. package/dist/server/src/api/routes/users.routes.d.ts +2 -0
  356. package/dist/server/src/api/routes/users.routes.js +139 -0
  357. package/dist/server/src/api/routes/users.routes.js.map +1 -0
  358. package/dist/server/src/api/schemas/backup.schema.d.ts +118 -0
  359. package/dist/server/src/api/schemas/backup.schema.js +75 -0
  360. package/dist/server/src/api/schemas/backup.schema.js.map +1 -0
  361. package/dist/server/src/api/schemas/cameras.schema.d.ts +932 -0
  362. package/dist/server/src/api/schemas/cameras.schema.js +271 -0
  363. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -0
  364. package/dist/server/src/api/schemas/config.schema.d.ts +202 -0
  365. package/dist/server/src/api/schemas/config.schema.js +68 -0
  366. package/dist/server/src/api/schemas/config.schema.js.map +1 -0
  367. package/dist/server/src/api/schemas/go2rtc.schema.d.ts +703 -0
  368. package/dist/server/src/api/schemas/go2rtc.schema.js +188 -0
  369. package/dist/server/src/api/schemas/go2rtc.schema.js.map +1 -0
  370. package/dist/server/src/api/schemas/plugins.schema.d.ts +72 -0
  371. package/dist/server/src/api/schemas/plugins.schema.js +103 -0
  372. package/dist/server/src/api/schemas/plugins.schema.js.map +1 -0
  373. package/dist/server/src/api/schemas/users.schema.d.ts +1008 -0
  374. package/dist/server/src/api/schemas/users.schema.js +151 -0
  375. package/dist/server/src/api/schemas/users.schema.js.map +1 -0
  376. package/dist/server/src/api/services/auth.service.d.ts +19 -0
  377. package/dist/server/src/api/services/auth.service.js +115 -0
  378. package/dist/server/src/api/services/auth.service.js.map +1 -0
  379. package/dist/server/src/api/services/backup.service.d.ts +11 -0
  380. package/dist/server/src/api/services/backup.service.js +108 -0
  381. package/dist/server/src/api/services/backup.service.js.map +1 -0
  382. package/dist/server/src/api/services/cameras.service.d.ts +55 -0
  383. package/dist/server/src/api/services/cameras.service.js +700 -0
  384. package/dist/server/src/api/services/cameras.service.js.map +1 -0
  385. package/dist/server/src/api/services/plugins.service.d.ts +25 -0
  386. package/dist/server/src/api/services/plugins.service.js +145 -0
  387. package/dist/server/src/api/services/plugins.service.js.map +1 -0
  388. package/dist/server/src/api/services/users.service.d.ts +25 -0
  389. package/dist/server/src/api/services/users.service.js +197 -0
  390. package/dist/server/src/api/services/users.service.js.map +1 -0
  391. package/dist/server/src/api/types/index.d.ts +580 -0
  392. package/dist/server/src/api/types/index.js +9 -0
  393. package/dist/server/src/api/types/index.js.map +1 -0
  394. package/dist/server/src/api/utils/cert.d.ts +11 -0
  395. package/dist/server/src/api/utils/cert.js +411 -0
  396. package/dist/server/src/api/utils/cert.js.map +1 -0
  397. package/dist/server/src/api/utils/constants.d.ts +15 -0
  398. package/dist/server/src/api/utils/constants.js +17 -0
  399. package/dist/server/src/api/utils/constants.js.map +1 -0
  400. package/dist/server/src/api/utils/fetch.d.ts +2 -0
  401. package/dist/server/src/api/utils/fetch.js +24 -0
  402. package/dist/server/src/api/utils/fetch.js.map +1 -0
  403. package/dist/server/src/api/utils/moveFiles.d.ts +1 -0
  404. package/dist/server/src/api/utils/moveFiles.js +38 -0
  405. package/dist/server/src/api/utils/moveFiles.js.map +1 -0
  406. package/dist/server/src/api/utils/parse.d.ts +2 -0
  407. package/dist/server/src/api/utils/parse.js +12 -0
  408. package/dist/server/src/api/utils/parse.js.map +1 -0
  409. package/dist/server/src/api/websocket/index.d.ts +15 -0
  410. package/dist/server/src/api/websocket/index.js +69 -0
  411. package/dist/server/src/api/websocket/index.js.map +1 -0
  412. package/dist/server/src/api/websocket/nsp/frameWorker.d.ts +13 -0
  413. package/dist/server/src/api/websocket/nsp/frameWorker.js +29 -0
  414. package/dist/server/src/api/websocket/nsp/frameWorker.js.map +1 -0
  415. package/dist/server/src/api/websocket/nsp/logs.d.ts +11 -0
  416. package/dist/server/src/api/websocket/nsp/logs.js +113 -0
  417. package/dist/server/src/api/websocket/nsp/logs.js.map +1 -0
  418. package/dist/server/src/api/websocket/nsp/metrics.d.ts +38 -0
  419. package/dist/server/src/api/websocket/nsp/metrics.js +266 -0
  420. package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -0
  421. package/dist/server/src/api/websocket/nsp/notifications.d.ts +11 -0
  422. package/dist/server/src/api/websocket/nsp/notifications.js +35 -0
  423. package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -0
  424. package/dist/server/src/api/websocket/nsp/plugins.d.ts +13 -0
  425. package/dist/server/src/api/websocket/nsp/plugins.js +29 -0
  426. package/dist/server/src/api/websocket/nsp/plugins.js.map +1 -0
  427. package/dist/server/src/api/websocket/nsp/server.d.ts +9 -0
  428. package/dist/server/src/api/websocket/nsp/server.js +48 -0
  429. package/dist/server/src/api/websocket/nsp/server.js.map +1 -0
  430. package/dist/server/src/api/websocket/nsp/status.d.ts +26 -0
  431. package/dist/server/src/api/websocket/nsp/status.js +59 -0
  432. package/dist/server/src/api/websocket/nsp/status.js.map +1 -0
  433. package/dist/server/src/api/websocket/types.d.ts +86 -0
  434. package/dist/server/src/api/websocket/types.js +2 -0
  435. package/dist/server/src/api/websocket/types.js.map +1 -0
  436. package/dist/server/src/api.d.ts +43 -0
  437. package/dist/server/src/api.js +90 -0
  438. package/dist/server/src/api.js.map +1 -0
  439. package/dist/server/src/camera/controller.d.ts +41 -0
  440. package/dist/server/src/camera/controller.js +220 -0
  441. package/dist/server/src/camera/controller.js.map +1 -0
  442. package/dist/server/src/camera/device.d.ts +18 -0
  443. package/dist/server/src/camera/device.js +21 -0
  444. package/dist/server/src/camera/device.js.map +1 -0
  445. package/dist/server/src/camera/index.d.ts +121 -0
  446. package/dist/server/src/camera/index.js +643 -0
  447. package/dist/server/src/camera/index.js.map +1 -0
  448. package/dist/server/src/camera/interfaces/camera.d.ts +11 -0
  449. package/dist/server/src/camera/interfaces/camera.js +31 -0
  450. package/dist/server/src/camera/interfaces/camera.js.map +1 -0
  451. package/dist/server/src/camera/interfaces/prebuffer.d.ts +11 -0
  452. package/dist/server/src/camera/interfaces/prebuffer.js +26 -0
  453. package/dist/server/src/camera/interfaces/prebuffer.js.map +1 -0
  454. package/dist/server/src/camera/interfaces/ptz.d.ts +13 -0
  455. package/dist/server/src/camera/interfaces/ptz.js +47 -0
  456. package/dist/server/src/camera/interfaces/ptz.js.map +1 -0
  457. package/dist/server/src/camera/polygon.d.ts +6 -0
  458. package/dist/server/src/camera/polygon.js +151 -0
  459. package/dist/server/src/camera/polygon.js.map +1 -0
  460. package/dist/server/src/camera/streaming/peer-connection.d.ts +46 -0
  461. package/dist/server/src/camera/streaming/peer-connection.js +150 -0
  462. package/dist/server/src/camera/streaming/peer-connection.js.map +1 -0
  463. package/dist/server/src/camera/streaming/webrtc-connection.d.ts +34 -0
  464. package/dist/server/src/camera/streaming/webrtc-connection.js +152 -0
  465. package/dist/server/src/camera/streaming/webrtc-connection.js.map +1 -0
  466. package/dist/server/src/camera/streaming/werift-session.d.ts +31 -0
  467. package/dist/server/src/camera/streaming/werift-session.js +168 -0
  468. package/dist/server/src/camera/streaming/werift-session.js.map +1 -0
  469. package/dist/server/src/camera/types.d.ts +202 -0
  470. package/dist/server/src/camera/types.js +7 -0
  471. package/dist/server/src/camera/types.js.map +1 -0
  472. package/dist/server/src/camera/videoFrame.d.ts +24 -0
  473. package/dist/server/src/camera/videoFrame.js +105 -0
  474. package/dist/server/src/camera/videoFrame.js.map +1 -0
  475. package/dist/server/src/decoder/ffmpeg.d.ts +2 -0
  476. package/dist/server/src/decoder/ffmpeg.js +61 -0
  477. package/dist/server/src/decoder/ffmpeg.js.map +1 -0
  478. package/dist/server/src/decoder/index.d.ts +11 -0
  479. package/dist/server/src/decoder/index.js +32 -0
  480. package/dist/server/src/decoder/index.js.map +1 -0
  481. package/dist/server/src/decoder/types.d.ts +156 -0
  482. package/dist/server/src/decoder/types.js +2 -0
  483. package/dist/server/src/decoder/types.js.map +1 -0
  484. package/dist/server/src/decoder/worker.d.ts +42 -0
  485. package/dist/server/src/decoder/worker.js +273 -0
  486. package/dist/server/src/decoder/worker.js.map +1 -0
  487. package/dist/server/src/go2rtc/index.d.ts +25 -0
  488. package/dist/server/src/go2rtc/index.js +211 -0
  489. package/dist/server/src/go2rtc/index.js.map +1 -0
  490. package/dist/server/src/go2rtc/types.d.ts +14 -0
  491. package/dist/server/src/go2rtc/types.js +73 -0
  492. package/dist/server/src/go2rtc/types.js.map +1 -0
  493. package/dist/server/src/index.d.ts +16 -0
  494. package/dist/server/src/index.js +5 -0
  495. package/dist/server/src/index.js.map +1 -0
  496. package/dist/server/src/main.d.ts +18 -0
  497. package/dist/server/src/main.js +118 -0
  498. package/dist/server/src/main.js.map +1 -0
  499. package/dist/server/src/nats/constants.d.ts +1 -0
  500. package/dist/server/src/nats/constants.js +2 -0
  501. package/dist/server/src/nats/constants.js.map +1 -0
  502. package/dist/server/src/nats/index.d.ts +35 -0
  503. package/dist/server/src/nats/index.js +150 -0
  504. package/dist/server/src/nats/index.js.map +1 -0
  505. package/dist/server/src/nats/messageQueue.d.ts +17 -0
  506. package/dist/server/src/nats/messageQueue.js +148 -0
  507. package/dist/server/src/nats/messageQueue.js.map +1 -0
  508. package/dist/server/src/nats/proxy/cameraDevice.d.ts +30 -0
  509. package/dist/server/src/nats/proxy/cameraDevice.js +252 -0
  510. package/dist/server/src/nats/proxy/cameraDevice.js.map +1 -0
  511. package/dist/server/src/nats/proxy/deviceManager.d.ts +16 -0
  512. package/dist/server/src/nats/proxy/deviceManager.js +110 -0
  513. package/dist/server/src/nats/proxy/deviceManager.js.map +1 -0
  514. package/dist/server/src/nats/proxy/index.d.ts +2 -0
  515. package/dist/server/src/nats/proxy/index.js +3 -0
  516. package/dist/server/src/nats/proxy/index.js.map +1 -0
  517. package/dist/server/src/nats/server.d.ts +38 -0
  518. package/dist/server/src/nats/server.js +325 -0
  519. package/dist/server/src/nats/server.js.map +1 -0
  520. package/dist/server/src/nats/types.d.ts +125 -0
  521. package/dist/server/src/nats/types.js +11 -0
  522. package/dist/server/src/nats/types.js.map +1 -0
  523. package/dist/server/src/nats/utils.d.ts +4 -0
  524. package/dist/server/src/nats/utils.js +12 -0
  525. package/dist/server/src/nats/utils.js.map +1 -0
  526. package/dist/server/src/nats/websocket.d.ts +27 -0
  527. package/dist/server/src/nats/websocket.js +214 -0
  528. package/dist/server/src/nats/websocket.js.map +1 -0
  529. package/dist/server/src/plugins/index.d.ts +32 -0
  530. package/dist/server/src/plugins/index.js +326 -0
  531. package/dist/server/src/plugins/index.js.map +1 -0
  532. package/dist/server/src/plugins/interfaces/audioDetection.d.ts +7 -0
  533. package/dist/server/src/plugins/interfaces/audioDetection.js +4 -0
  534. package/dist/server/src/plugins/interfaces/audioDetection.js.map +1 -0
  535. package/dist/server/src/plugins/interfaces/base.d.ts +6 -0
  536. package/dist/server/src/plugins/interfaces/base.js +3 -0
  537. package/dist/server/src/plugins/interfaces/base.js.map +1 -0
  538. package/dist/server/src/plugins/interfaces/motionDetection.d.ts +6 -0
  539. package/dist/server/src/plugins/interfaces/motionDetection.js +4 -0
  540. package/dist/server/src/plugins/interfaces/motionDetection.js.map +1 -0
  541. package/dist/server/src/plugins/interfaces/objectDetection.d.ts +7 -0
  542. package/dist/server/src/plugins/interfaces/objectDetection.js +4 -0
  543. package/dist/server/src/plugins/interfaces/objectDetection.js.map +1 -0
  544. package/dist/server/src/plugins/plugin.d.ts +42 -0
  545. package/dist/server/src/plugins/plugin.js +207 -0
  546. package/dist/server/src/plugins/plugin.js.map +1 -0
  547. package/dist/server/src/plugins/types.d.ts +181 -0
  548. package/dist/server/src/plugins/types.js +18 -0
  549. package/dist/server/src/plugins/types.js.map +1 -0
  550. package/dist/server/src/plugins/worker.d.ts +35 -0
  551. package/dist/server/src/plugins/worker.js +309 -0
  552. package/dist/server/src/plugins/worker.js.map +1 -0
  553. package/dist/server/src/polyglot/node/decoder/child.d.ts +1 -0
  554. package/dist/server/src/polyglot/node/decoder/child.js +703 -0
  555. package/dist/server/src/polyglot/node/decoder/child.js.map +1 -0
  556. package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +24 -0
  557. package/dist/server/src/polyglot/node/decoder/imageUtils.js +203 -0
  558. package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +1 -0
  559. package/dist/server/src/polyglot/node/decoder/reader.d.ts +5 -0
  560. package/dist/server/src/polyglot/node/decoder/reader.js +41 -0
  561. package/dist/server/src/polyglot/node/decoder/reader.js.map +1 -0
  562. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +144 -0
  563. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +65 -0
  564. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
  565. package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +106 -0
  566. package/dist/server/src/polyglot/node/plugins/api.d.ts +37 -0
  567. package/dist/server/src/polyglot/node/plugins/api.js +34 -0
  568. package/dist/server/src/polyglot/node/plugins/api.js.map +1 -0
  569. package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +108 -0
  570. package/dist/server/src/polyglot/node/plugins/cameraStorage.js +310 -0
  571. package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +1 -0
  572. package/dist/server/src/polyglot/node/plugins/child.d.ts +25 -0
  573. package/dist/server/src/polyglot/node/plugins/child.js +206 -0
  574. package/dist/server/src/polyglot/node/plugins/child.js.map +1 -0
  575. package/dist/server/src/polyglot/node/plugins/config.d.ts +104 -0
  576. package/dist/server/src/polyglot/node/plugins/config.js +213 -0
  577. package/dist/server/src/polyglot/node/plugins/config.js.map +1 -0
  578. package/dist/server/src/polyglot/node/plugins/logger.d.ts +16 -0
  579. package/dist/server/src/polyglot/node/plugins/logger.js +128 -0
  580. package/dist/server/src/polyglot/node/plugins/logger.js.map +1 -0
  581. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +75 -0
  582. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +474 -0
  583. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +1 -0
  584. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +49 -0
  585. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +194 -0
  586. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +1 -0
  587. package/dist/server/src/polyglot/node/plugins/proxy/index.d.ts +2 -0
  588. package/dist/server/src/polyglot/node/plugins/proxy/index.js +3 -0
  589. package/dist/server/src/polyglot/node/plugins/proxy/index.js.map +1 -0
  590. package/dist/server/src/polyglot/node/plugins/proxy/messageQueue.d.ts +20 -0
  591. package/dist/server/src/polyglot/node/plugins/proxy/messageQueue.js +152 -0
  592. package/dist/server/src/polyglot/node/plugins/proxy/messageQueue.js.map +1 -0
  593. package/dist/server/src/polyglot/node/plugins/schema.d.ts +280 -0
  594. package/dist/server/src/polyglot/node/plugins/schema.js +719 -0
  595. package/dist/server/src/polyglot/node/plugins/schema.js.map +1 -0
  596. package/dist/server/src/polyglot/node/plugins/storageController.d.ts +28 -0
  597. package/dist/server/src/polyglot/node/plugins/storageController.js +38 -0
  598. package/dist/server/src/polyglot/node/plugins/storageController.js.map +1 -0
  599. package/dist/server/src/polyglot/python/camera/interfaces/camera.py +26 -0
  600. package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +25 -0
  601. package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +38 -0
  602. package/dist/server/src/polyglot/python/camera/polygon.py +173 -0
  603. package/dist/server/src/polyglot/python/camera/video_frame.py +196 -0
  604. package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +1221 -0
  605. package/dist/server/src/polyglot/python/decoder/child.py +922 -0
  606. package/dist/server/src/polyglot/python/decoder/image_utils.py +149 -0
  607. package/dist/server/src/polyglot/python/decoder/typings.py +99 -0
  608. package/dist/server/src/polyglot/python/plugins/camera_storage.py +459 -0
  609. package/dist/server/src/polyglot/python/plugins/child.py +267 -0
  610. package/dist/server/src/polyglot/python/plugins/config_service.py +180 -0
  611. package/dist/server/src/polyglot/python/plugins/constants.py +2 -0
  612. package/dist/server/src/polyglot/python/plugins/logger.py +111 -0
  613. package/dist/server/src/polyglot/python/plugins/plugin_api.py +114 -0
  614. package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +1722 -0
  615. package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +265 -0
  616. package/dist/server/src/polyglot/python/plugins/proxy/message_queue.py +213 -0
  617. package/dist/server/src/polyglot/python/plugins/schema.py +392 -0
  618. package/dist/server/src/polyglot/python/plugins/storage_controller.py +57 -0
  619. package/dist/server/src/polyglot/python/plugins/typings.py +248 -0
  620. package/dist/server/src/polyglot/python/utilities/object_path.py +187 -0
  621. package/dist/server/src/polyglot/python/utilities/packer.py +11 -0
  622. package/dist/server/src/polyglot/python/utilities/task.py +25 -0
  623. package/dist/server/src/polyglot/python/utilities/thread.py +10 -0
  624. package/dist/server/src/polyglot/python/utilities/utils.py +48 -0
  625. package/dist/server/src/services/config/constants.d.ts +4 -0
  626. package/dist/server/src/services/config/constants.js +58 -0
  627. package/dist/server/src/services/config/constants.js.map +1 -0
  628. package/dist/server/src/services/config/index.d.ts +54 -0
  629. package/dist/server/src/services/config/index.js +288 -0
  630. package/dist/server/src/services/config/index.js.map +1 -0
  631. package/dist/server/src/services/config/types.d.ts +162 -0
  632. package/dist/server/src/services/config/types.js +11 -0
  633. package/dist/server/src/services/config/types.js.map +1 -0
  634. package/dist/server/src/services/logger/index.d.ts +30 -0
  635. package/dist/server/src/services/logger/index.js +179 -0
  636. package/dist/server/src/services/logger/index.js.map +1 -0
  637. package/dist/server/src/types.d.ts +4 -0
  638. package/dist/server/src/types.js +2 -0
  639. package/dist/server/src/types.js.map +1 -0
  640. package/dist/server/src/utils/packer.d.ts +2 -0
  641. package/dist/server/src/utils/packer.js +17 -0
  642. package/dist/server/src/utils/packer.js.map +1 -0
  643. package/dist/server/src/utils/pythonInstaller.d.ts +48 -0
  644. package/dist/server/src/utils/pythonInstaller.js +465 -0
  645. package/dist/server/src/utils/pythonInstaller.js.map +1 -0
  646. package/dist/server/src/utils/subscribed.d.ts +9 -0
  647. package/dist/server/src/utils/subscribed.js +17 -0
  648. package/dist/server/src/utils/subscribed.js.map +1 -0
  649. package/dist/server/src/utils/utils.d.ts +10 -0
  650. package/dist/server/src/utils/utils.js +165 -0
  651. package/dist/server/src/utils/utils.js.map +1 -0
  652. package/package.json +142 -0
@@ -0,0 +1,149 @@
1
+ from typing import Any, Literal, Union
2
+
3
+ import numpy as np
4
+ from camera_ui_types import DecoderFormat, ImageCrop, ImageFormat, ImageOptions, ImageResize
5
+ from PIL import Image
6
+ from utilities.thread import to_thread
7
+
8
+
9
+ async def process_image_threaded(
10
+ image_data: bytes,
11
+ input_width: int,
12
+ input_height: int,
13
+ input_format: Union[DecoderFormat, Literal["rgba"], Literal["gray"]],
14
+ options: ImageOptions,
15
+ ) -> bytes:
16
+ return await to_thread(
17
+ lambda: process_image(image_data, input_width, input_height, input_format, options)
18
+ )
19
+
20
+
21
+ def process_image(
22
+ image_data: bytes,
23
+ input_width: int,
24
+ input_height: int,
25
+ input_format: Union[DecoderFormat, Literal["rgba"], Literal["gray"]],
26
+ options: ImageOptions,
27
+ ) -> bytes:
28
+ image: Union[Image.Image, None] = None
29
+
30
+ crop = options.get("crop", None)
31
+ resize = options.get("resize", None)
32
+ format = options.get("format", None)
33
+
34
+ if format and format["to"] == "gray":
35
+ if input_format == "yuv":
36
+ gray = yuv420_to_gray(image_data, input_width, input_height)
37
+ image = Image.fromarray(gray)
38
+ elif input_format == "rgb":
39
+ image = Image.frombytes("RGB", (input_width, input_height), image_data).convert("L")
40
+ elif input_format == "rgba":
41
+ image = Image.frombytes("RGBA", (input_width, input_height), image_data).convert("L")
42
+ else:
43
+ image = Image.frombytes("L", (input_width, input_height), image_data)
44
+
45
+ format = None
46
+ elif format and format["to"] == "rgba":
47
+ if input_format == "yuv":
48
+ rgba = yuv420_to_rgba(image_data, input_width, input_height)
49
+ image = Image.fromarray(rgba)
50
+ elif input_format == "rgb":
51
+ image = Image.frombytes("RGB", (input_width, input_height), image_data).convert("RGBA")
52
+ elif input_format == "gray":
53
+ image = Image.frombytes("L", (input_width, input_height), image_data).convert("RGBA")
54
+ else:
55
+ image = Image.frombytes("RGBA", (input_width, input_height), image_data)
56
+
57
+ format = None
58
+ else:
59
+ if input_format == "yuv":
60
+ rgb = yuv420_to_rgb(image_data, input_width, input_height)
61
+ image = Image.fromarray(rgb)
62
+ elif input_format == "rgb":
63
+ image = Image.frombytes("RGB", (input_width, input_height), image_data)
64
+ elif input_format == "gray":
65
+ image = Image.frombytes("L", (input_width, input_height), image_data)
66
+ else:
67
+ image = Image.frombytes("RGBA", (input_width, input_height), image_data)
68
+
69
+ if crop:
70
+ image = crop_image(image, crop)
71
+ input_width = crop["width"]
72
+ input_height = crop["height"]
73
+
74
+ if resize:
75
+ image = resize_image(image, input_width, input_height, resize)
76
+ input_width = resize.get("width", input_width)
77
+ input_height = resize.get("height", input_height)
78
+
79
+ if format:
80
+ image = format_image(image, format)
81
+
82
+ return image.tobytes()
83
+
84
+
85
+ def crop_image(image: Image.Image, crop: ImageCrop) -> Image.Image:
86
+ crop_box = (
87
+ int(crop["left"]),
88
+ int(crop["top"]),
89
+ int(crop["left"] + crop["width"]),
90
+ int(crop["top"] + crop["height"]),
91
+ )
92
+
93
+ return image.crop(crop_box)
94
+
95
+
96
+ def resize_image(image: Image.Image, input_width: int, input_height: int, resize: ImageResize) -> Image.Image:
97
+ width = resize.get("width", input_width)
98
+ height = resize.get("height", input_height)
99
+
100
+ if width and height and (width != input_width and height != input_height):
101
+ image = image.resize((int(width), int(height)), resample=Image.Resampling.BILINEAR)
102
+
103
+ return image
104
+
105
+
106
+ def format_image(image: Image.Image, format: ImageFormat) -> Image.Image:
107
+ if format["to"] == "rgba":
108
+ image = image.convert("RGBA")
109
+ elif format["to"] == "gray":
110
+ image = image.convert("L")
111
+
112
+ return image
113
+
114
+
115
+ def yuv420_to_rgb(yuv_bytes: bytes, width: int, height: int) -> np.ndarray[Any, Any]:
116
+ frame_size = width * height
117
+ uv_size = frame_size // 4
118
+
119
+ raw_data = np.frombuffer(yuv_bytes, dtype=np.uint8)
120
+
121
+ y = raw_data[:frame_size].reshape((height, width)).astype(np.float32) - 16.0
122
+ u = (
123
+ raw_data[frame_size : frame_size + uv_size].reshape((height // 2, width // 2)).astype(np.float32)
124
+ - 128.0
125
+ )
126
+ v = raw_data[frame_size + uv_size :].reshape((height // 2, width // 2)).astype(np.float32) - 128.0
127
+
128
+ u = u.repeat(2, axis=0).repeat(2, axis=1)
129
+ v = v.repeat(2, axis=0).repeat(2, axis=1)
130
+
131
+ r = y + 1.402 * v
132
+ g = y - 0.344136 * u - 0.714136 * v
133
+ b = y + 1.772 * u
134
+
135
+ rgb = np.stack((r, g, b), axis=-1)
136
+ return np.clip(rgb, 0, 255).astype(np.uint8)
137
+
138
+
139
+ def yuv420_to_rgba(yuv_bytes: bytes, width: int, height: int) -> np.ndarray[Any, Any]:
140
+ rgb = yuv420_to_rgb(yuv_bytes, width, height)
141
+ alpha = np.full((height, width, 1), 255, dtype=np.uint8)
142
+ rgba = np.concatenate((rgb, alpha), axis=-1)
143
+ return rgba
144
+
145
+
146
+ def yuv420_to_gray(yuv_bytes: bytes, width: int, height: int) -> np.ndarray[Any, Any]:
147
+ frame_size = width * height
148
+ raw_data = np.frombuffer(yuv_bytes, dtype=np.uint8)
149
+ return raw_data[:frame_size].reshape((height, width)).astype(np.uint8)
@@ -0,0 +1,99 @@
1
+ from typing import Any
2
+
3
+ from camera_ui_types import FrameMetadata
4
+ from typing_extensions import Literal, NotRequired, TypedDict
5
+
6
+ WorkerMessage = Literal["started", "getFFmpegArgs", "updateClient", "removeClient"]
7
+
8
+ MainMessage = Literal["setCameraName", "recoverClients"]
9
+
10
+
11
+ class AuthConfig(TypedDict):
12
+ user: str
13
+ password: str
14
+
15
+
16
+ class BaseFrameWorkerConfig(TypedDict):
17
+ frameWorkerId: str
18
+ cameraId: str
19
+ cameraName: str
20
+ ffmpegPath: str
21
+ logLevel: str
22
+ disableTimestamps: bool
23
+ auth: AuthConfig
24
+ proxyEndpoints: list[str]
25
+ fps: int
26
+ resolution: int
27
+
28
+
29
+ class MainToWorkerMessage(TypedDict):
30
+ message: MainMessage
31
+ data: dict[str, Any]
32
+
33
+
34
+ class WorkerToMainResponse(TypedDict):
35
+ response: NotRequired[dict[str, Any]]
36
+
37
+
38
+ class WorkerToMainMessage(TypedDict):
39
+ message: WorkerMessage
40
+ data: dict[str, Any]
41
+
42
+
43
+ class MainToWorkerResponse(TypedDict):
44
+ response: NotRequired[dict[str, Any]]
45
+
46
+
47
+ class FfmpegArgs(TypedDict):
48
+ hwaccel: str
49
+ hwaccelArgs: list[str]
50
+ hwaccelFilter: str
51
+ threads: str
52
+
53
+
54
+ class FfmpegArgsResponse(TypedDict):
55
+ cameraSource: str
56
+ ffmpegArgs: FfmpegArgs
57
+
58
+
59
+ SignalingMessageType = Literal["connect", "disconnect", "metadata"]
60
+
61
+
62
+ class SignalingRequest(TypedDict):
63
+ type: SignalingMessageType
64
+ requestId: str
65
+ cameraId: str
66
+ pluginId: str
67
+
68
+
69
+ class SignalingResponse(TypedDict):
70
+ type: SignalingMessageType
71
+ requestId: str
72
+ metadata: NotRequired[FrameMetadata]
73
+
74
+
75
+ class PingMessage(TypedDict):
76
+ type: Literal["ping"]
77
+ requestId: str
78
+
79
+
80
+ class PongMessage(TypedDict):
81
+ type: Literal["pong"]
82
+ requestId: str
83
+
84
+
85
+ class FrameWorkerClient:
86
+ def __init__(self, plugin_id: str, request_ids: list[str]):
87
+ self.plugin_id = plugin_id
88
+ self.request_ids = request_ids
89
+
90
+
91
+ class RecoveredClient(TypedDict):
92
+ pluginId: str
93
+ requestIds: list[str]
94
+
95
+
96
+ class PrebufferContainer(TypedDict):
97
+ frame_id: str
98
+ time: float
99
+ frame: bytes
@@ -0,0 +1,459 @@
1
+ import inspect
2
+ import json
3
+ from contextlib import suppress
4
+ from copy import deepcopy
5
+ from pathlib import Path
6
+ from typing import Any, Optional, TypeVar, Union, cast
7
+
8
+ from camera_ui_types import (
9
+ PluginJsonBaseSchema,
10
+ PluginJsonSchema,
11
+ PluginJsonSchemaForm,
12
+ PluginRootSchema,
13
+ SchemaConfig,
14
+ )
15
+ from deepdiff import DeepDiff
16
+ from lmdbm import Lmdb
17
+ from logger import PluginLogger
18
+ from plugin_api import PluginAPI
19
+ from schema import (
20
+ config_path_to_schema_path,
21
+ generate_json_from_root_schema,
22
+ get_value_by_path,
23
+ remove_functions_from_schema_form,
24
+ schema_path_to_config_path,
25
+ )
26
+ from typing_extensions import Literal, overload
27
+ from utilities.object_path import ObjectPath
28
+ from utilities.utils import merge_with
29
+
30
+ P = TypeVar("P", str, int, float, bool, dict[Any, Any], list[Any], None)
31
+
32
+
33
+ def merge(
34
+ obj_value: Any,
35
+ src_value: Any,
36
+ key: Union[str, int],
37
+ object: Union[dict[str, Any], list[Any]],
38
+ source: Union[dict[str, Any], list[Any]],
39
+ stack: list[Any],
40
+ ) -> Any:
41
+ if isinstance(obj_value, list):
42
+ return src_value
43
+
44
+
45
+ class JsonLmdb(Lmdb[Literal["config"], dict[str, Any]]):
46
+ def _pre_key(self, key: Literal["config"]) -> bytes:
47
+ return key.encode("utf-8")
48
+
49
+ def _post_key(self, key: bytes) -> Literal["config"]:
50
+ _key: Any = key.decode("utf-8")
51
+ return _key
52
+
53
+ def _pre_value(self, value: dict[str, Any]) -> bytes:
54
+ return json.dumps(value).encode("utf-8")
55
+
56
+ def _post_value(self, value: bytes) -> dict[str, Any]:
57
+ return json.loads(value.decode("utf-8"))
58
+
59
+
60
+ class CameraStorage:
61
+ def __init__(
62
+ self,
63
+ api: PluginAPI,
64
+ logger: PluginLogger,
65
+ instance: Any,
66
+ camera_id: str,
67
+ schema: Optional[PluginJsonSchemaForm] = None,
68
+ ) -> None:
69
+ if schema is None:
70
+ schema = {}
71
+ self.__api = api
72
+ self.__logger = logger
73
+ self.__instance = instance
74
+ self.__camera_id = camera_id
75
+ self.__schema: PluginJsonSchemaForm = schema or {}
76
+ self.__values: dict[str, Any] = {}
77
+
78
+ db_path = Path(api.storage_path) / "volume"
79
+ self.__db: Lmdb[Literal["config"], dict[str, Any]] = JsonLmdb.open(file=str(db_path), flag="c")
80
+
81
+ self.__api.device_manager.once("cameraDeselected", self.__deselected)
82
+ self.__api.once("shutdown", self.__close)
83
+
84
+ @property
85
+ def values(self) -> dict[str, Any]:
86
+ return self.__values
87
+
88
+ def initialize_storage(self) -> None:
89
+ """
90
+ Initialize the storage.
91
+ This will load the configuration from the database.
92
+ """
93
+
94
+ camera_config: dict[str, Any] = {}
95
+
96
+ try:
97
+ config: Any = self.__db.get("config") or {}
98
+ camera_config = config.get(self.__camera_id, {})
99
+ except Exception as e:
100
+ self.__logger.error("Error loading config from database:", e)
101
+
102
+ schema_config = generate_json_from_root_schema({"schema": self.__schema})
103
+
104
+ self.__values = merge_with(schema_config, camera_config, merge, [])
105
+
106
+ self.__save_db()
107
+
108
+ @overload
109
+ async def get_value(self, path: str) -> Union[Any, None]: ...
110
+ @overload
111
+ async def get_value(self, path: str, default_value: P) -> P: ...
112
+ async def get_value(self, path: str, default_value: Optional[P] = None) -> Union[P, None]:
113
+ """
114
+ Get a value from the configuration by its key/path.
115
+ If the schema has an onGet function, the onGet function will be called.
116
+ If the onGet function is undefined, the value from the configuration will be returned.
117
+ If the schema has a default value, and the configuration value is undefined, the default value will be returned.
118
+
119
+ :param path: The path to the configuration value.
120
+ :param default_value: The default value to return if the actual value is undefined.
121
+ :return: The value from the configuration.
122
+ """
123
+
124
+ schema_path = config_path_to_schema_path(path)
125
+ schema: PluginJsonBaseSchema = ObjectPath.get(self.__schema, schema_path)
126
+ config_value = ObjectPath.get(self.__values, path)
127
+
128
+ if schema:
129
+ on_get_function = schema.get("onGet", None)
130
+ if on_get_function is not None:
131
+ if inspect.iscoroutinefunction(on_get_function):
132
+ return await on_get_function()
133
+ else:
134
+ return on_get_function() # type: ignore
135
+ if config_value is not None:
136
+ return config_value
137
+ if "default" in schema:
138
+ return schema["default"]
139
+ else:
140
+ return default_value
141
+
142
+ async def set_value(self, path: str, new_value: Any) -> None:
143
+ """
144
+ Set a new value for a given key/path in the configuration.
145
+ If the schema of the value has an onSet function, and the value has changed, the onSet function will be called.
146
+ If the schema of the value is declared as storable, the value will be saved to the database.
147
+
148
+ :param path: The path to the configuration value.
149
+ :param new_value: The new value to set.
150
+ """
151
+
152
+ schema_path = config_path_to_schema_path(path)
153
+ schema: PluginJsonSchema = ObjectPath.get(self.__schema, schema_path)
154
+
155
+ if schema:
156
+ old_config = deepcopy(self.__values)
157
+ ObjectPath.set(self.__values, path, new_value)
158
+
159
+ await self.__trigger_on_set_for_changes(old_config, self.__values)
160
+
161
+ if self.__contains_storable_schema(schema):
162
+ self.__save_db()
163
+
164
+ def has_value(self, path: str) -> bool:
165
+ """
166
+ Check if a value exists by its config path/key.
167
+
168
+ :param path: The path to the value to check.
169
+ :return: True if the value exists, false otherwise.
170
+ """
171
+
172
+ config_value = ObjectPath.get(self.__values, path)
173
+ return config_value is not None
174
+
175
+ async def getConfig(self) -> SchemaConfig:
176
+ """
177
+ Get the root schema and configuration.
178
+ This will also call the onGet functions for the schema.
179
+
180
+ :return: The root schema and configuration.
181
+ """
182
+
183
+ filtered_schema = remove_functions_from_schema_form(self.__schema)
184
+ root_schema: PluginRootSchema = {"schema": filtered_schema}
185
+
186
+ await self.__resolve_on_get_functions(self.__schema)
187
+
188
+ return {"rootSchema": root_schema, "config": self.__values}
189
+
190
+ async def setConfig(self, new_config: dict[str, Any]) -> None:
191
+ """
192
+ Set a new configuration.
193
+ If the schema of a value which has been changed has an onSet function, the onSet function will be called.
194
+
195
+ :param new_config: The new configuration to set.
196
+ """
197
+
198
+ old_config = deepcopy(self.__values)
199
+ self.__values = new_config
200
+
201
+ await self.__trigger_on_set_for_changes(old_config, self.__values)
202
+ self.__save_db()
203
+
204
+ @overload
205
+ async def add_schema(self, schema_or_path: PluginJsonSchemaForm) -> None: ...
206
+ @overload
207
+ async def add_schema(self, schema_or_path: str, schema: PluginJsonSchema) -> None: ...
208
+ async def add_schema(
209
+ self,
210
+ schema_or_path: Union[PluginJsonSchemaForm, str],
211
+ schema: Optional[PluginJsonSchema] = None,
212
+ ) -> None:
213
+ """
214
+ Add a new schema to the existing schema.
215
+ It will also add the value to the configuration.
216
+ If the schema is declared as storable, the value will be saved to the database.
217
+
218
+ :param schema: The new schema to add.
219
+ :param path: The path to the schema to add, optional.
220
+ """
221
+
222
+ should_save = False
223
+
224
+ if isinstance(schema_or_path, str) and schema is not None:
225
+ path = schema_or_path
226
+ schema_path = config_path_to_schema_path(path)
227
+
228
+ ObjectPath.set(self.__schema, schema_path, schema)
229
+
230
+ await self.__resolve_on_get_functions(schema, schema_path)
231
+
232
+ if self.__contains_storable_schema(schema):
233
+ should_save = True
234
+
235
+ elif isinstance(schema_or_path, dict) and schema is None:
236
+ new_schema = schema_or_path
237
+
238
+ self.__schema = merge_with(self.__schema, new_schema, merge, [])
239
+
240
+ await self.__resolve_on_get_functions(new_schema)
241
+
242
+ if self.__contains_storable_schema(new_schema):
243
+ should_save = True
244
+
245
+ else:
246
+ raise Exception("Invalid arguments for add_schema")
247
+
248
+ if should_save:
249
+ self.__save_db()
250
+
251
+ def remove_schema(self, path: str) -> None:
252
+ """
253
+ Remove a schema by its config path/key from the existing schema.
254
+ It will also remove the value from the configuration.
255
+ If the schema is declared as storable, the value will be removed from the database.
256
+
257
+ :param path: The path to the schema to remove.
258
+ """
259
+
260
+ schema_path = config_path_to_schema_path(path)
261
+ schema: Optional[PluginJsonSchema] = ObjectPath.get(self.__schema, schema_path) or None
262
+
263
+ if schema:
264
+ ObjectPath.delete(self.__schema, schema_path)
265
+ ObjectPath.delete(self.__values, path)
266
+
267
+ if self.__contains_storable_schema(schema):
268
+ self.__remove_db()
269
+
270
+ async def change_schema(self, path: str, new_schema: dict[str, Any]) -> None:
271
+ """
272
+ Change a schema by its config path/key from the existing schema.
273
+ It will also change the value from the configuration.
274
+ If the schema is declared as storable, the value will be saved to the database.
275
+
276
+ :param path: The path to the schema to change.
277
+ :param schema: The new schema to set.
278
+ """
279
+
280
+ schema_path = config_path_to_schema_path(path)
281
+ schema: Optional[PluginJsonSchema] = ObjectPath.get(self.__schema, schema_path) or None
282
+
283
+ if schema:
284
+ merge_with(schema, new_schema, merge, [])
285
+ ObjectPath.set(self.__schema, schema_path, schema)
286
+
287
+ await self.__resolve_on_get_functions(schema, schema_path)
288
+
289
+ if self.__contains_storable_schema(schema):
290
+ self.__save_db()
291
+
292
+ def get_schema(self, path: str) -> Optional[PluginJsonSchema]:
293
+ """
294
+ Get a schema by its config path/key.
295
+
296
+ :param path: The path to the schema to get.
297
+ :return: The schema.
298
+ """
299
+
300
+ schema_path = config_path_to_schema_path(path)
301
+ schema: Optional[PluginJsonSchema] = ObjectPath.get(self.__schema, schema_path) or None
302
+
303
+ return schema
304
+
305
+ def has_schema(self, path: str) -> bool:
306
+ """
307
+ Check if a schema exists by its config path/key.
308
+
309
+ :param path: The path to the schema to check.
310
+ :return: True if the schema exists, false otherwise.
311
+ """
312
+
313
+ schema_path = config_path_to_schema_path(path)
314
+ schema: Optional[PluginJsonSchema] = ObjectPath.get(self.__schema, schema_path) or None
315
+
316
+ return schema is not None
317
+
318
+ async def __resolve_on_get_functions(
319
+ self,
320
+ schema: Union[PluginJsonSchemaForm, PluginJsonSchema],
321
+ base_schema_path: str = "",
322
+ ) -> None:
323
+ if "onGet" in schema or "onSet" in schema:
324
+ await self.__resolve_on_get_functions_for_schema(base_schema_path)
325
+ elif "type" in schema and schema["type"] == "object":
326
+ if "properties" in schema:
327
+ await self.___resolve_on_get_functions_for_object(
328
+ schema["properties"], # type: ignore
329
+ base_schema_path,
330
+ )
331
+ else:
332
+ _schema = cast(PluginJsonSchemaForm, schema)
333
+
334
+ for key, value in _schema.items():
335
+ schema_path = f"{base_schema_path}.{key}" if base_schema_path else key
336
+
337
+ if "type" in value and value["type"] == "object":
338
+ if "properties" in value:
339
+ s: Any = value["properties"]
340
+ await self.__resolve_on_get_functions(s, schema_path)
341
+ else:
342
+ await self.__resolve_on_get_functions_for_schema(schema_path)
343
+
344
+ async def ___resolve_on_get_functions_for_object(
345
+ self,
346
+ schema: PluginJsonSchemaForm,
347
+ base_schema_path: str,
348
+ ) -> None:
349
+ for key, _ in schema.items():
350
+ schema_path = f"{base_schema_path}.{key}" if base_schema_path else key
351
+ await self.__resolve_on_get_functions_for_schema(schema_path)
352
+
353
+ async def __resolve_on_get_functions_for_schema(self, schema_path: str) -> None:
354
+ config_path = schema_path_to_config_path(schema_path)
355
+ schema_value = await self.get_value(config_path)
356
+
357
+ if schema_value is not None:
358
+ ObjectPath.set(self.__values, config_path, schema_value)
359
+
360
+ async def __trigger_on_set_for_changes(
361
+ self, old_config: dict[str, Any], new_config: dict[str, Any], path: str = ""
362
+ ) -> None:
363
+ for key, _ in new_config.items():
364
+ new_path = f"{path}.{key}" if path else key
365
+ old_value: Any = get_value_by_path(old_config, key) or {}
366
+ new_value: Any = new_config[key]
367
+
368
+ if DeepDiff(old_value, new_value, ignore_order=True) != {}:
369
+ schema_path = config_path_to_schema_path(new_path)
370
+ schema_item: Optional[PluginJsonBaseSchema] = get_value_by_path(self.__schema, schema_path)
371
+
372
+ if schema_item:
373
+ on_set_function = schema_item.get("onSet", None)
374
+ if on_set_function:
375
+ if inspect.iscoroutinefunction(on_set_function):
376
+ await on_set_function(old_value, new_value)
377
+ else:
378
+ on_set_function(old_value, new_value)
379
+
380
+ if new_value and isinstance(new_value, dict):
381
+ nv: Any = new_value
382
+ await self.__trigger_on_set_for_changes(old_value, nv, new_path)
383
+
384
+ def __filter_storable_values(
385
+ self,
386
+ schema: PluginJsonSchemaForm,
387
+ base_schema_path: str = "",
388
+ result: dict[str, Any] = {},
389
+ ) -> dict[str, Any]:
390
+ for key, value in schema.items():
391
+ if "type" in value and value["type"] == "object":
392
+ if "properties" in value:
393
+ s: Any = value["properties"]
394
+ path = f"{base_schema_path}.{key}" if base_schema_path else key
395
+ self.__filter_storable_values(s, path, result)
396
+ elif "store" in value and value["store"]:
397
+ schema_path = f"{base_schema_path}.{key}" if base_schema_path else key
398
+ config_path = schema_path_to_config_path(schema_path)
399
+ config_value = get_value_by_path(self.__values, config_path)
400
+
401
+ ObjectPath.set(result, config_path, config_value)
402
+
403
+ return result
404
+
405
+ def __contains_storable_schema(
406
+ self,
407
+ schema: Union[PluginJsonSchemaForm, PluginJsonSchema],
408
+ ) -> bool:
409
+ if "type" in schema and schema["type"] == "object":
410
+ if "type" in schema and schema["type"] == "object":
411
+ if "store" in schema and schema["store"]:
412
+ return True
413
+ if "properties" in schema and schema["properties"]:
414
+ for sub_schema in schema["properties"].values():
415
+ sub: Any = sub_schema
416
+ if self.__contains_storable_schema(sub):
417
+ return True
418
+
419
+ return False
420
+
421
+ return False
422
+ else:
423
+ return any(
424
+ self.__contains_storable_schema(sub_schema) # type: ignore
425
+ for sub_schema in schema.values()
426
+ )
427
+
428
+ def __save_db(self) -> None:
429
+ try:
430
+ config: Any = self.__db.get("config") or {}
431
+ storable_config = self.__filter_storable_values(self.__schema)
432
+
433
+ config[self.__camera_id] = storable_config
434
+
435
+ self.__db.update(
436
+ {
437
+ "config": config,
438
+ }
439
+ )
440
+ except Exception as e:
441
+ self.__logger.error("Error saving to database:", e)
442
+
443
+ def __remove_db(self) -> None:
444
+ try:
445
+ config: Any = self.__db.get("config") or {}
446
+
447
+ if self.__camera_id in config:
448
+ del config[self.__camera_id]
449
+ self.__db.update(config)
450
+ except Exception as e:
451
+ self.__logger.error("Error removing from database:", e)
452
+
453
+ def __deselected(self, id: str) -> None:
454
+ if id == self.__camera_id:
455
+ self.__remove_db()
456
+
457
+ def __close(self) -> None:
458
+ with suppress(Exception):
459
+ self.__db.close()