@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,267 @@
1
+ import asyncio
2
+ import inspect
3
+ import os
4
+ import signal
5
+ import sys
6
+ import traceback
7
+ from asyncio import AbstractEventLoop
8
+ from contextlib import suppress
9
+ from typing import Any, Optional, cast
10
+
11
+ import nats
12
+ from camera_ui_types import CameraDevice
13
+ from logger import PluginLogger
14
+ from nats.aio.client import Client as NatsConnection
15
+ from nats.aio.subscription import Subscription
16
+ from plugin_api import PluginAPI
17
+ from proxy.camera_device import CameraDeviceProxy
18
+ from proxy.message_queue import ClientMessageQueue
19
+ from typings import (
20
+ PLUGIN_COMMAND,
21
+ PLUGIN_STATUS,
22
+ DeserializedError,
23
+ ProcessLoadMessage,
24
+ ProcessMessage,
25
+ ProcessResponse,
26
+ ProxyMessageStructure,
27
+ )
28
+ from utilities.packer import pack, unpack
29
+ from utilities.task import TaskSet
30
+
31
+
32
+ class PluginChild:
33
+ def __init__(self) -> None:
34
+ self.proxy_endpoints = [endpoint for endpoint in os.environ["PROXY_ENDPOINTS"].split(",")]
35
+
36
+ self.auth = {
37
+ "user": os.environ["PROXY_USER"],
38
+ "pass": os.environ["PROXY_PASSWORD"],
39
+ }
40
+
41
+ del os.environ["PROXY_USER"]
42
+ del os.environ["PROXY_PASSWORD"]
43
+ del os.environ["PROXY_ENDPOINTS"]
44
+
45
+ self.display_name = sys.argv[1] if len(sys.argv) > 1 else "PluginChild"
46
+ self.logger = PluginLogger(self.display_name, os.environ["LOGGER_DISABLE_TIMESTAMPS"] == "true")
47
+
48
+ self.subject = f"{os.environ['WORKER_ID']}.ipc.subscriber"
49
+ self.plugin_subject = f"{os.environ['PLUGIN_ID']}.child"
50
+ self.target_subject = f"{os.environ['WORKER_ID']}.ipc.publisher"
51
+
52
+ self.publisher: Optional[NatsConnection] = None
53
+ self.subscriber: Optional[Subscription] = None
54
+ self.plugin_subscriber: Optional[Subscription] = None
55
+
56
+ self.tasks: TaskSet = TaskSet(f"{self.display_name} PluginChild")
57
+ self.message_queue: Optional[ClientMessageQueue] = None
58
+
59
+ self.api = None
60
+ self.stopped = False
61
+
62
+ async def run(self):
63
+ self.shutdown_event = asyncio.Event()
64
+ self.setup_signal_handlers()
65
+ await self.init()
66
+ await self.shutdown_event.wait()
67
+
68
+ async def init(self) -> None:
69
+ async def ignore_cb(e: Optional[Any] = None):
70
+ pass
71
+
72
+ self.publisher = await nats.connect(
73
+ servers=[endpoint for endpoint in self.proxy_endpoints if endpoint.startswith("nats://")],
74
+ name=self.subject,
75
+ user=self.auth["user"],
76
+ password=self.auth["pass"],
77
+ max_reconnect_attempts=-1,
78
+ error_cb=ignore_cb,
79
+ disconnected_cb=ignore_cb,
80
+ closed_cb=ignore_cb,
81
+ reconnected_cb=ignore_cb,
82
+ discovered_server_cb=ignore_cb,
83
+ )
84
+
85
+ self.subscriber = await self.publisher.subscribe(subject=self.subject)
86
+ self.plugin_subscriber = await self.publisher.subscribe(subject=self.plugin_subject)
87
+
88
+ self.message_queue = ClientMessageQueue(
89
+ self.logger,
90
+ self.publisher,
91
+ self.plugin_subscriber,
92
+ self.__request_handler,
93
+ )
94
+
95
+ self.tasks.add(self.message_queue.start())
96
+ self.tasks.add(self.listen_to_messages())
97
+
98
+ await self.send_message({"type": PLUGIN_STATUS.READY.value})
99
+
100
+ async def start(self, data: ProcessLoadMessage) -> None:
101
+ storage_path = data["storage"]["storagePath"]
102
+ config_file = data["storage"]["configFile"]
103
+ plugin = data["plugin"]
104
+ cameras = data["cameras"]
105
+
106
+ self.api = PluginAPI(plugin, storage_path, config_file, self.logger, self.proxy_endpoints, self.auth)
107
+ await self.api.init()
108
+
109
+ cameras = [
110
+ CameraDeviceProxy(
111
+ self.api,
112
+ self.logger,
113
+ camera,
114
+ plugin,
115
+ self.proxy_endpoints,
116
+ self.auth,
117
+ )
118
+ for camera in cameras
119
+ ]
120
+
121
+ await asyncio.gather(*(camera.init() for camera in cameras))
122
+
123
+ self.api.device_manager.configure_cameras(cameras)
124
+ self.api.plugin.configure_cameras(cast(list[CameraDevice], cameras))
125
+
126
+ await self.send_message({"type": PLUGIN_STATUS.STARTED.value})
127
+
128
+ self.api.emit("finishLaunching")
129
+
130
+ async def stop(self) -> None:
131
+ if self.stopped:
132
+ return
133
+
134
+ self.stopped = True
135
+
136
+ if self.message_queue:
137
+ self.message_queue.abort_queue()
138
+
139
+ if self.publisher:
140
+ with suppress(Exception):
141
+ await self.publisher.close()
142
+
143
+ if self.api:
144
+ self.api.emit("shutdown")
145
+
146
+ self.shutdown_event.set()
147
+
148
+ async def send_message(self, message: ProcessResponse) -> None:
149
+ if not self.publisher:
150
+ raise Exception("Publisher is not initialized")
151
+
152
+ await self.publisher.publish(self.target_subject, pack(message))
153
+
154
+ async def __request_handler(self, message: ProxyMessageStructure) -> None:
155
+ if not self.message_queue:
156
+ raise Exception("Message queue not initialized")
157
+
158
+ try:
159
+ plugin = None
160
+
161
+ if self.api:
162
+ plugin = self.api.plugin
163
+
164
+ if not plugin or not self.api:
165
+ raise Exception("Plugin not initialized")
166
+
167
+ fn = message["fn"]
168
+ args = message["args"]
169
+ camera_id = message.get("cameraId", None)
170
+ camera_storage = self.api.storage_controller.get_camera_storage(camera_id or "")
171
+
172
+ if hasattr(plugin, fn) and callable(getattr(plugin, fn)):
173
+ method_to_call = getattr(plugin, fn)
174
+
175
+ if inspect.iscoroutinefunction(method_to_call):
176
+ response = await method_to_call(*args)
177
+ else:
178
+ response = method_to_call(*args)
179
+
180
+ await self.message_queue.enqueue({**message, "type": "reply", "response": response})
181
+ elif camera_storage and hasattr(camera_storage, fn) and callable(getattr(camera_storage, fn)):
182
+ method_to_call = getattr(camera_storage, fn)
183
+
184
+ if inspect.iscoroutinefunction(method_to_call):
185
+ response = await method_to_call(*args)
186
+ else:
187
+ response = method_to_call(*args)
188
+
189
+ await self.message_queue.enqueue({**message, "type": "reply", "response": response})
190
+ else:
191
+ await self.message_queue.enqueue({**message, "type": "reply"})
192
+ except Exception as e:
193
+ deserialized_error: DeserializedError = {
194
+ "name": type(e).__name__,
195
+ "message": str(e),
196
+ "stack": traceback.format_exc(),
197
+ }
198
+
199
+ await self.message_queue.enqueue({**message, "type": "reply", "error": deserialized_error})
200
+
201
+ async def listen_to_messages(self) -> None:
202
+ if not self.subscriber:
203
+ raise Exception("Subscriber is not initialized")
204
+
205
+ async for msg in self.subscriber.messages:
206
+ try:
207
+ if self.stopped:
208
+ break
209
+
210
+ if len(msg.data) == 0:
211
+ continue
212
+
213
+ message: ProcessMessage = unpack(msg.data)
214
+
215
+ if "type" in message:
216
+ if message["type"] == PLUGIN_COMMAND.START.value and "data" in message:
217
+ self.tasks.add(self.start(message["data"]))
218
+ elif message["type"] == PLUGIN_COMMAND.STOP.value:
219
+ self.tasks.add(self.stop())
220
+ except Exception as e:
221
+ if not self.stopped:
222
+ self.logger.error("Error while processing server message:", e)
223
+ else:
224
+ break
225
+
226
+ def setup_signal_handlers(self):
227
+ loop = asyncio.get_running_loop()
228
+ loop.set_exception_handler(self.handle_exception)
229
+
230
+ for signame in ("SIGINT", "SIGTERM"):
231
+ loop.add_signal_handler(
232
+ getattr(signal, signame),
233
+ lambda signame=signame: self.gracefully_close(signame, getattr(signal, signame)),
234
+ )
235
+
236
+ def gracefully_close(self, signame: str, reason: Any = "unknown"):
237
+ if self.stopped:
238
+ return
239
+
240
+ self.logger.log(
241
+ f"{self.display_name} is gracefully closing from signal='{signame}' reason='{reason}'..."
242
+ )
243
+
244
+ self.tasks.add(self.stop())
245
+ self.shutdown_event.set()
246
+
247
+ def handle_exception(self, loop: AbstractEventLoop, context: Any):
248
+ print("Exception context:", context)
249
+ traceback.print_exc()
250
+
251
+ msg = context.get("message", "Unknown error")
252
+ exception = context.get("exception")
253
+
254
+ if exception:
255
+ tb_str = "".join(traceback.format_exception(type(exception), exception, exception.__traceback__)) # type: ignore
256
+
257
+ self.logger.error(f"Caught exception: {msg}\n{tb_str}")
258
+ else:
259
+ self.logger.error(f"Caught exception: {msg}")
260
+
261
+ if loop.is_running():
262
+ self.gracefully_close("uncaughtException", msg)
263
+
264
+
265
+ if __name__ == "__main__":
266
+ plugin_child = PluginChild()
267
+ asyncio.run(plugin_child.run(), debug=True)
@@ -0,0 +1,180 @@
1
+ import json
2
+ import os
3
+ from typing import Any, Callable, Optional
4
+
5
+ from camera_ui_types import JSONValue, PluginConfig
6
+ from utilities.object_path import ObjectPath, Path
7
+
8
+
9
+ class PluginConfigService:
10
+ def __init__(self, config_file: str):
11
+ self.__config_file = config_file
12
+ self.__config: PluginConfig = {}
13
+ self.__init()
14
+
15
+ def get(
16
+ self,
17
+ key: Path,
18
+ default_value: Optional[JSONValue] = None,
19
+ validate: Optional[Callable[[Any], bool]] = None,
20
+ refresh: bool = False,
21
+ write_if_not_valid: bool = False,
22
+ ) -> Any:
23
+ if refresh:
24
+ self.__read()
25
+
26
+ val = ObjectPath.get(self.__config, key, default_value)
27
+
28
+ if validate and default_value is not None:
29
+ is_valid = validate(val)
30
+
31
+ if not is_valid:
32
+ self.set(key, default_value, write_if_not_valid)
33
+
34
+ return val
35
+
36
+ def has(self, key: Path, refresh: bool = False) -> bool:
37
+ if refresh:
38
+ self.__read()
39
+
40
+ return ObjectPath.has(self.__config, key)
41
+
42
+ def ensure_exists(self, key: Path, default_value: JSONValue, write: bool = False) -> None:
43
+ exists = self.has(key)
44
+
45
+ ObjectPath.ensure_exists(self.__config, key, default_value)
46
+
47
+ if write and not exists:
48
+ self.__write()
49
+
50
+ def set(self, key: Path, value: Any, write: bool = False) -> None:
51
+ ObjectPath.set(self.__config, key, value)
52
+
53
+ if write:
54
+ self.__write()
55
+
56
+ def insert(self, key: Path, value: Any, at: int = 0, write: bool = False) -> None:
57
+ ObjectPath.insert(self.__config, key, value, at)
58
+
59
+ if write:
60
+ self.__write()
61
+
62
+ def push(self, key: Path, write: bool = False, *items: Any) -> None:
63
+ ObjectPath.push(self.__config, key, *items)
64
+
65
+ if write:
66
+ self.__write()
67
+
68
+ def delete(self, key: Path, write: bool = False) -> None:
69
+ ObjectPath.delete(self.__config, key)
70
+
71
+ if write:
72
+ self.__write()
73
+
74
+ def all(self, refresh: bool = False) -> PluginConfig:
75
+ if refresh:
76
+ self.__read()
77
+
78
+ return self.__config.copy()
79
+
80
+ def replace(self, config: PluginConfig, write: bool = False) -> None:
81
+ self.__config = config
82
+
83
+ if write:
84
+ self.__write()
85
+
86
+ def update_value(
87
+ self,
88
+ path: str,
89
+ search_key: str,
90
+ search_value: Any,
91
+ target_key: str,
92
+ new_value: Any,
93
+ write: bool = False,
94
+ ) -> None:
95
+ path_segments = path.split(".")
96
+
97
+ def update_recursive(obj: Any, index: int) -> None:
98
+ if index == len(path_segments):
99
+ if obj.get(search_key) == search_value:
100
+ obj[target_key] = new_value
101
+ return
102
+
103
+ current_path = path_segments[index]
104
+
105
+ if isinstance(obj.get(current_path), list):
106
+ for element in obj[current_path]:
107
+ update_recursive(element, index + 1)
108
+ elif obj.get(current_path) is not None:
109
+ update_recursive(obj[current_path], index + 1)
110
+
111
+ update_recursive(self.__config, 0)
112
+
113
+ self.set(path_segments[0], self.__config[path_segments[0]], write)
114
+
115
+ def replace_or_add_item(
116
+ self,
117
+ path: str,
118
+ search_key: str,
119
+ search_value: Any,
120
+ new_item: Any,
121
+ write: bool = False,
122
+ ) -> None:
123
+ path_segments = path.split(".")
124
+
125
+ def ensure_path_exists(obj: Any, path_segments: list[str], index: int) -> None:
126
+ if index >= len(path_segments):
127
+ return
128
+
129
+ current_path = path_segments[index]
130
+
131
+ if obj.get(current_path) is None:
132
+ obj[current_path] = [] if index == len(path_segments) - 1 else {}
133
+
134
+ ensure_path_exists(obj[current_path], path_segments, index + 1)
135
+
136
+ def find_and_replace_or_add_recursive(obj: Any, path_index: int) -> None:
137
+ if isinstance(obj, list):
138
+ o: list[Any] = obj
139
+ for sub_obj in o:
140
+ find_and_replace_or_add_recursive(sub_obj, path_index)
141
+ else:
142
+ current_path = path_segments[path_index]
143
+ if path_index == len(path_segments) - 1:
144
+ if isinstance(obj.get(current_path), list):
145
+ item_index = next(
146
+ (
147
+ index
148
+ for index, item in enumerate(obj[current_path])
149
+ if item.get(search_key) == search_value
150
+ ),
151
+ -1,
152
+ )
153
+ if item_index != -1:
154
+ obj[current_path][item_index] = new_item
155
+ else:
156
+ obj[current_path].append(new_item)
157
+ elif obj.get(current_path) is not None:
158
+ find_and_replace_or_add_recursive(obj[current_path], path_index + 1)
159
+
160
+ ensure_path_exists(self.__config, path_segments, 0)
161
+ find_and_replace_or_add_recursive(self.__config, 0)
162
+
163
+ self.set(path_segments[0], self.__config[path_segments[0]], write)
164
+
165
+ def __init(self) -> None:
166
+ os.makedirs(os.path.dirname(self.__config_file), exist_ok=True)
167
+ self.__read()
168
+
169
+ def __read(self) -> None:
170
+ try:
171
+ with open(self.__config_file) as file:
172
+ config = json.load(file)
173
+ except (FileNotFoundError, json.JSONDecodeError):
174
+ config = {}
175
+
176
+ self.__config = config or self.__config or {}
177
+
178
+ def __write(self) -> None:
179
+ with open(self.__config_file, "w") as file:
180
+ json.dump(self.__config, file, indent=2)
@@ -0,0 +1,2 @@
1
+ NATS_SERVER_SUBJECT = "camera.ui-server"
2
+ NATS_SIGNALING_SUBJECT = "camera.ui-signaling"
@@ -0,0 +1,111 @@
1
+ import json
2
+ import traceback
3
+ from datetime import datetime
4
+ from typing import Any
5
+
6
+
7
+ class Colors:
8
+ RESET = "\033[0m"
9
+ WHITE = "\033[37m"
10
+ BLUE = "\033[34m"
11
+ CYAN = "\033[36m"
12
+ RED = "\033[31m"
13
+ YELLOW = "\033[33m"
14
+ MAGENTA = "\033[35m"
15
+ LIGHT_BLACK = "\033[90m"
16
+ RED_BACKGROUND = "\033[41m"
17
+ YELLOW_BACKGROUND = "\033[43m"
18
+ MAGENTA_BACKGROUND = "\033[45m"
19
+ WHITE_BACKGROUND = "\033[47m"
20
+ BOLD = "\033[1m"
21
+
22
+
23
+ class PluginLogger:
24
+ def __init__(self, prefix: str, disable_timestamps: bool) -> None:
25
+ self.__prefix = "camera.ui"
26
+ self.__disable_timestamps = disable_timestamps
27
+ self.__logger_prefix = prefix
28
+
29
+ self.debug_enabled = True
30
+ self.trace_enabled = True
31
+
32
+ @property
33
+ def prefix(self) -> str:
34
+ if not self.__disable_timestamps:
35
+ return f"{Colors.WHITE}[{self.__format_date_time()}] {Colors.BLUE}[{self.__prefix}] {Colors.CYAN}[{self.__logger_prefix}]{Colors.RESET}"
36
+ else:
37
+ return f"{Colors.BLUE}[{self.__prefix}] {Colors.CYAN}[{self.__logger_prefix}]{Colors.RESET}"
38
+
39
+ def log(self, *args: Any) -> None:
40
+ formatted_args = self.__format_args(args)
41
+ print(self.prefix, *formatted_args)
42
+
43
+ def error(self, *args: Any) -> None:
44
+ formatted_args = self.__format_args(args)
45
+ print(
46
+ self.prefix,
47
+ f"{Colors.RED_BACKGROUND}{Colors.BOLD} ERROR {Colors.RESET}",
48
+ f"{Colors.RED}{' '.join(formatted_args)}{Colors.RESET}",
49
+ )
50
+
51
+ def warn(self, *args: Any) -> None:
52
+ formatted_args = self.__format_args(args)
53
+ print(
54
+ self.prefix,
55
+ f"{Colors.YELLOW_BACKGROUND}{Colors.BOLD} WARN {Colors.RESET}",
56
+ f"{Colors.YELLOW}{' '.join(formatted_args)}{Colors.RESET}",
57
+ )
58
+
59
+ def attention(self, *args: Any) -> None:
60
+ formatted_args = self.__format_args(args)
61
+ print(
62
+ self.prefix,
63
+ f"{Colors.MAGENTA_BACKGROUND}{Colors.BOLD} ATTENTION {Colors.RESET}",
64
+ f"{Colors.MAGENTA}{' '.join(formatted_args)}{Colors.RESET}",
65
+ )
66
+
67
+ def debug(self, *args: Any) -> None:
68
+ if not self.debug_enabled:
69
+ return
70
+
71
+ formatted_args = self.__format_args(args)
72
+ print(
73
+ self.prefix,
74
+ f"{Colors.LIGHT_BLACK}{' '.join(formatted_args)}{Colors.RESET}",
75
+ )
76
+
77
+ def trace(self, *args: Any) -> None:
78
+ if not self.trace_enabled:
79
+ return
80
+
81
+ formatted_args = self.__format_args(args)
82
+ print(
83
+ self.prefix,
84
+ f"{Colors.WHITE_BACKGROUND}{Colors.BOLD} TRACE {Colors.RESET}",
85
+ f"{Colors.LIGHT_BLACK}{' '.join(formatted_args)}{Colors.RESET}",
86
+ )
87
+
88
+ def __format_args(self, args: Any) -> list[str]:
89
+ formatted_args: list[str] = []
90
+ for arg in args:
91
+ if isinstance(arg, BaseException):
92
+ message = f"{arg.__class__.__name__}: {arg}"
93
+ formatted_args.append(message)
94
+ traceback_info = traceback.format_exception(type(arg), arg, arg.__traceback__)
95
+ formatted_args.append("\n")
96
+ formatted_args.extend(traceback_info)
97
+ # formatted_args.extend(traceback_info[:-1])
98
+ elif isinstance(arg, dict):
99
+ try:
100
+ formatted_args.append(json.dumps(arg, indent=2))
101
+ except TypeError:
102
+ formatted_args.append(repr(arg)) # type: ignore
103
+ else:
104
+ formatted_args.append(str(arg))
105
+ return formatted_args
106
+
107
+ def __format_date_time(self) -> str:
108
+ try:
109
+ return datetime.now().strftime("%d.%m.%Y, %H:%M:%S")
110
+ except: # noqa
111
+ return "Unknown"
@@ -0,0 +1,114 @@
1
+ import importlib.util
2
+
3
+ # import inspect
4
+ import os
5
+ import sys
6
+ from types import ModuleType
7
+ from typing import Any, cast
8
+
9
+ from camera_ui_types import BasePlugin
10
+ from camera_ui_types import PluginAPI as IPluginAPI
11
+ from config_service import PluginConfigService
12
+ from logger import PluginLogger
13
+ from pyeecui.asyncio import AsyncIOEventEmitter
14
+ from typings import PluginInfo
15
+
16
+
17
+ class PluginAPI(AsyncIOEventEmitter):
18
+ def __init__(
19
+ self,
20
+ plugin: PluginInfo,
21
+ storage_path: str,
22
+ config_file: str,
23
+ logger: PluginLogger,
24
+ proxy_endpoints: list[str],
25
+ auth: dict[str, str],
26
+ ) -> None:
27
+ super().__init__()
28
+
29
+ from proxy.device_manager import DeviceManager
30
+ from storage_controller import StorageController
31
+
32
+ api_instance = cast(IPluginAPI, self)
33
+
34
+ self.__initialized = False
35
+
36
+ self.storage_path = storage_path
37
+ self.config_file = config_file
38
+
39
+ self.config_service = PluginConfigService(config_file)
40
+ self.storage_controller = StorageController(self, logger)
41
+
42
+ self.device_manager = DeviceManager(self, logger, plugin, proxy_endpoints, auth)
43
+
44
+ module = self.__load_module()
45
+ plugin_class = self.__find_plugin_class(module)
46
+ self.__check_plugin_class_methods(plugin_class)
47
+
48
+ self.plugin: BasePlugin = plugin_class(logger, api_instance)
49
+
50
+ async def init(self) -> None:
51
+ if self.__initialized:
52
+ return
53
+
54
+ self.__initialized = True
55
+
56
+ await self.device_manager.init()
57
+
58
+ def __load_module(self) -> ModuleType:
59
+ module_path = os.environ.get("MODULE_PATH")
60
+
61
+ spec = importlib.util.spec_from_file_location("plugin_module", module_path)
62
+ if spec is None:
63
+ raise Exception(f"Could not load module from '{module_path}'.")
64
+
65
+ module = importlib.util.module_from_spec(spec)
66
+ sys.modules["plugin_module"] = module
67
+
68
+ if spec.loader is None:
69
+ raise Exception(f"Could not load module from '{module_path}'.")
70
+
71
+ spec.loader.exec_module(module)
72
+
73
+ return module
74
+
75
+ def __find_plugin_class(self, module: ModuleType) -> Any:
76
+ if hasattr(module, "__main__"):
77
+ main_func = module.__main__
78
+ if callable(main_func):
79
+ plugin_base_class: BasePlugin = main_func()
80
+ if isinstance(plugin_base_class, type):
81
+ return plugin_base_class
82
+ else:
83
+ raise Exception("Plugin's __main__ must return a class plugin class")
84
+ else:
85
+ raise Exception("Plugin's __main__ is not callable.")
86
+
87
+ else:
88
+ raise Exception("Plugin does not have a __main__ function.")
89
+
90
+ def __check_plugin_class_methods(self, cls: Any) -> None:
91
+ base_plugin_methods = {
92
+ name
93
+ for name in dir(BasePlugin)
94
+ if callable(getattr(BasePlugin, name)) and not name.startswith("__")
95
+ }
96
+
97
+ for method_name in base_plugin_methods:
98
+ if not hasattr(cls, method_name):
99
+ raise Exception(f"Method '{method_name}' is not implemented in plugin.")
100
+
101
+ cls_method = getattr(cls, method_name)
102
+ if not callable(cls_method):
103
+ raise Exception(f"Method '{method_name}' is not callable.")
104
+
105
+ # base_method = getattr(BasePlugin, method_name)
106
+ # cls_signature = inspect.signature(cls_method)
107
+ # base_signature = inspect.signature(base_method)
108
+
109
+ # if cls_signature.return_annotation != base_signature.return_annotation:
110
+ # raise Exception(
111
+ # f"Method '{method_name}' has a different return type than the one in BasePlugin. "
112
+ # f"Expected: {base_signature.return_annotation}, "
113
+ # f"Actual: {cls_signature.return_annotation}"
114
+ # )