camera.ui3 0.0.34-alpha.0 → 0.0.34-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/interface/{@intlify.8z0ZxsCR.0.0.34-alpha.0.js → @intlify.sEJX3RNi.0.0.34-alpha.2.js} +4 -4
  2. package/dist/interface/@tanstack.DaYhomXG.0.0.34-alpha.2.js +1 -0
  3. package/dist/interface/{@vee-validate.ptox5Hkw.0.0.34-alpha.0.js → @vee-validate.BgfhJ3tv.0.0.34-alpha.2.js} +1 -1
  4. package/dist/interface/@vue.D0DP0v6_.0.0.34-alpha.2.js +17 -0
  5. package/dist/interface/{@vueform.DZw58F7r.0.0.34-alpha.0.js → @vueform.B9nWZDbJ.0.0.34-alpha.2.js} +1 -1
  6. package/dist/interface/{@vueuse.B8UZ0pix.0.0.34-alpha.0.js → @vueuse.Di3-85fa.0.0.34-alpha.2.js} +1 -1
  7. package/dist/interface/{Account.G8q0djcz.0.0.34-alpha.0.js → Account.Dt2M2G9T.0.0.34-alpha.2.js} +1 -1
  8. package/dist/interface/{Adminpanel.Cr3YkJpH.0.0.34-alpha.0.js → Adminpanel.C3sidzLi.0.0.34-alpha.2.js} +2 -2
  9. package/dist/interface/{Appearance.DxjEOUgB.0.0.34-alpha.0.js → Appearance.DcUS-yy7.0.0.34-alpha.2.js} +1 -1
  10. package/dist/interface/{Backup.Ca-TnbiL.0.0.34-alpha.0.js → Backup.DDEr-2_6.0.0.34-alpha.2.js} +1 -1
  11. package/dist/interface/Camera.CLxaywAi.0.0.34-alpha.2.js +1 -0
  12. package/dist/interface/Cameras.CKQTl7Gl.0.0.34-alpha.2.js +1 -0
  13. package/dist/interface/Camview.BuKRBlZg.0.0.34-alpha.2.js +1 -0
  14. package/dist/interface/{Config.D8ivzHjO.0.0.34-alpha.0.js → Config.B9PNvDV2.0.0.34-alpha.2.js} +1 -1
  15. package/dist/interface/Console.DnRRAJB4.0.0.34-alpha.2.js +4 -0
  16. package/dist/interface/{FirstSteps.D-ZB1UK_.0.0.34-alpha.0.js → FirstSteps.YGowg836.0.0.34-alpha.2.js} +1 -1
  17. package/dist/interface/{NewCamera.Cs_xkRSg.0.0.34-alpha.0.js → NewCamera.fxgE3DwM.0.0.34-alpha.2.js} +2 -2
  18. package/dist/interface/Plugin.CKc5qj6D.0.0.34-alpha.2.js +1 -0
  19. package/dist/interface/Plugins.DjzGLIs2.0.0.34-alpha.2.js +1 -0
  20. package/dist/interface/Recordings.MD4_BOBv.0.0.34-alpha.2.js +1 -0
  21. package/dist/interface/Recordings.jFnATBbC.0.0.34-alpha.2.js +1 -0
  22. package/dist/interface/{Settings.B9-lP69C.0.0.34-alpha.0.js → Settings.CNd6al6p.0.0.34-alpha.2.js} +1 -1
  23. package/dist/interface/{System.DU2no3Ij.0.0.34-alpha.0.js → System.BjAkow0D.0.0.34-alpha.2.js} +1 -1
  24. package/dist/interface/{User.s4mfuOd8.0.0.34-alpha.0.js → User.BtpdbtGz.0.0.34-alpha.2.js} +1 -1
  25. package/dist/interface/{VConfigEditor.vue_vue_type_script_setup_true_lang.opUam6Jm.0.0.34-alpha.0.js → VConfigEditor.vue_vue_type_script_setup_true_lang.DYl7B603.0.0.34-alpha.2.js} +2 -2
  26. package/dist/interface/VConsole.BA0SOrQC.0.0.34-alpha.2.js +1 -0
  27. package/dist/interface/VPlayer.CSx272u1.0.0.34-alpha.2.js +4 -0
  28. package/dist/interface/VPluginCard.Bump1l-o.0.0.34-alpha.2.js +4 -0
  29. package/dist/interface/{ace-builds.DAtsxZmg.0.0.34-alpha.0.js → ace-builds.CRQWwDGY.0.0.34-alpha.2.js} +1 -1
  30. package/dist/interface/{apexcharts.CuJL_Z73.0.0.34-alpha.0.js → apexcharts.DXGZ805q.0.0.34-alpha.2.js} +1 -1
  31. package/dist/interface/assets/Cameras.0.0.34-alpha.2.CF0l3cIy.css +1 -0
  32. package/dist/interface/assets/Console.0.0.34-alpha.2.DJvMOm8N.css +1 -0
  33. package/dist/interface/assets/NewCamera.0.0.34-alpha.2.W16dakdJ.css +1 -0
  34. package/dist/interface/assets/VConsole.0.0.34-alpha.2.e0RL6-05.css +1 -0
  35. package/dist/interface/assets/{VPlayer.0.0.34-alpha.0.Bqxk0BU5.css → VPlayer.0.0.34-alpha.2.Pcy9j9b5.css} +1 -1
  36. package/dist/interface/assets/VPluginCard.0.0.34-alpha.2.W0BxyDkV.css +1 -0
  37. package/dist/interface/assets/main.0.0.34-alpha.2.D6i_pncP.css +1 -0
  38. package/dist/interface/{dnd-core.C0RkhVD8.0.0.34-alpha.0.js → dnd-core.CsRU4im_.0.0.34-alpha.2.js} +1 -1
  39. package/dist/interface/{draggabilly.CJPXfEji.0.0.34-alpha.0.js → draggabilly.l2s5eYjI.0.0.34-alpha.2.js} +1 -1
  40. package/dist/interface/{engine.io-client.DvNvteG8.0.0.34-alpha.0.js → engine.io-client.Dwbs-ZkK.0.0.34-alpha.2.js} +1 -1
  41. package/dist/interface/{ev-emitter.V8vOXEOF.0.0.34-alpha.0.js → ev-emitter.DepL03rS.0.0.34-alpha.2.js} +1 -1
  42. package/dist/interface/{fast-deep-equal.Cu8v9QP1.0.0.34-alpha.0.js → fast-deep-equal.CmcaBmI9.0.0.34-alpha.2.js} +1 -1
  43. package/dist/interface/{highlight.js.BlYBoHvQ.0.0.34-alpha.0.js → highlight.js.DZ1tIawt.0.0.34-alpha.2.js} +1 -1
  44. package/dist/interface/index.html +31 -31
  45. package/dist/interface/{linkify-it.e9Xezb7f.0.0.34-alpha.0.js → linkify-it.BGRcCXsE.0.0.34-alpha.2.js} +1 -1
  46. package/dist/interface/main.CHr8NDgU.0.0.34-alpha.2.js +5 -0
  47. package/dist/interface/{markdown-it.TYz2Vywi.0.0.34-alpha.0.js → markdown-it.BuMckFhq.0.0.34-alpha.2.js} +1 -1
  48. package/dist/interface/{nprogress.BpOU_abF.0.0.34-alpha.0.js → nprogress.CKm3qYbh.0.0.34-alpha.2.js} +1 -1
  49. package/dist/interface/{pinia.4SaF1m4j.0.0.34-alpha.0.js → pinia.CgXasWeS.0.0.34-alpha.2.js} +1 -1
  50. package/dist/interface/plugins.OB3Qt6a7.0.0.34-alpha.2.js +1 -0
  51. package/dist/interface/{qrcode.r6S5KRtW.0.0.34-alpha.0.js → qrcode.xTmFSDRr.0.0.34-alpha.2.js} +1 -1
  52. package/dist/interface/{react-dnd-touch-backend.CTlTDjPd.0.0.34-alpha.0.js → react-dnd-touch-backend.pfTbNVbd.0.0.34-alpha.2.js} +1 -1
  53. package/dist/interface/{rxjs.qNj2ii7F.0.0.34-alpha.0.js → rxjs.D38gERkL.0.0.34-alpha.2.js} +1 -1
  54. package/dist/interface/{socket.io-client.6m8Wx6Gb.0.0.34-alpha.0.js → socket.io-client.DyznceoQ.0.0.34-alpha.2.js} +1 -1
  55. package/dist/interface/{socket.io-parser.C3f8D3GG.0.0.34-alpha.0.js → socket.io-parser.DxT7zcFX.0.0.34-alpha.2.js} +1 -1
  56. package/dist/interface/sw.js +1 -1
  57. package/dist/interface/system.DZXlNuRR.0.0.34-alpha.2.js +1 -0
  58. package/dist/interface/{unidragger.CuhjnRz3.0.0.34-alpha.0.js → unidragger.D0z7py8V.0.0.34-alpha.2.js} +1 -1
  59. package/dist/interface/{v-calendar.Bj3BKKi_.0.0.34-alpha.0.js → v-calendar.B8iX5lRb.0.0.34-alpha.2.js} +1 -1
  60. package/dist/interface/{vee-validate.DmSS7Yyb.0.0.34-alpha.0.js → vee-validate.DKbtKMvz.0.0.34-alpha.2.js} +1 -1
  61. package/dist/interface/{vue-i18n.Bw8XEyfx.0.0.34-alpha.0.js → vue-i18n.BH1Ai61X.0.0.34-alpha.2.js} +3 -3
  62. package/dist/interface/{vue-inline-svg.T4jTFiI-.0.0.34-alpha.0.js → vue-inline-svg.DuJxxmO_.0.0.34-alpha.2.js} +1 -1
  63. package/dist/interface/{vue-router.FDI0ZN2g.0.0.34-alpha.0.js → vue-router.C0Bd386U.0.0.34-alpha.2.js} +1 -1
  64. package/dist/interface/vue3-apexcharts.BvLojs3t.0.0.34-alpha.2.js +1 -0
  65. package/dist/interface/{vue3-dnd.BgXj5sqW.0.0.34-alpha.0.js → vue3-dnd.DMur3pq_.0.0.34-alpha.2.js} +1 -1
  66. package/dist/interface/{vue3-toastify.Bn4mvAn3.0.0.34-alpha.0.js → vue3-toastify.CQn1aNYZ.0.0.34-alpha.2.js} +1 -1
  67. package/dist/interface/vuetify.BawD4IXx.0.0.34-alpha.2.js +5 -0
  68. package/dist/server/bin/cameraui.d.ts +3 -2
  69. package/dist/server/bin/cameraui.js +59 -76
  70. package/dist/server/bin/cameraui.js.map +1 -1
  71. package/dist/server/bin/fork.js +1 -4
  72. package/dist/server/bin/fork.js.map +1 -1
  73. package/dist/server/bin/installer/win32.js +3 -3
  74. package/dist/server/bin/installer/win32.js.map +1 -1
  75. package/dist/server/bin/logger.d.ts +3 -2
  76. package/dist/server/bin/logger.js +33 -20
  77. package/dist/server/bin/logger.js.map +1 -1
  78. package/dist/server/package.json +17 -13
  79. package/dist/server/requirements.txt +3 -2
  80. package/dist/server/src/api/controllers/cameras.controller.d.ts +2 -0
  81. package/dist/server/src/api/controllers/cameras.controller.js +67 -11
  82. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  83. package/dist/server/src/api/controllers/frameWorkers.controller.d.ts +1 -1
  84. package/dist/server/src/api/controllers/frameWorkers.controller.js +14 -6
  85. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
  86. package/dist/server/src/api/controllers/plugins.controller.d.ts +2 -0
  87. package/dist/server/src/api/controllers/plugins.controller.js +64 -4
  88. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  89. package/dist/server/src/api/controllers/system.controller.d.ts +2 -2
  90. package/dist/server/src/api/controllers/system.controller.js +18 -40
  91. package/dist/server/src/api/controllers/system.controller.js.map +1 -1
  92. package/dist/server/src/api/database/checks.d.ts +55 -0
  93. package/dist/server/src/api/database/checks.js +183 -0
  94. package/dist/server/src/api/database/checks.js.map +1 -0
  95. package/dist/server/src/api/database/index.d.ts +2 -1
  96. package/dist/server/src/api/database/index.js +6 -2
  97. package/dist/server/src/api/database/index.js.map +1 -1
  98. package/dist/server/src/api/database/migration.d.ts +1 -0
  99. package/dist/server/src/api/database/migration.js +29 -0
  100. package/dist/server/src/api/database/migration.js.map +1 -1
  101. package/dist/server/src/api/database/selfcheck.d.ts +48 -0
  102. package/dist/server/src/api/database/selfcheck.js +398 -0
  103. package/dist/server/src/api/database/selfcheck.js.map +1 -0
  104. package/dist/server/src/api/routes/cameras.routes.js +12 -0
  105. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  106. package/dist/server/src/api/routes/plugins.routes.js +24 -0
  107. package/dist/server/src/api/routes/plugins.routes.js.map +1 -1
  108. package/dist/server/src/api/schemas/cameras.schema.d.ts +26 -26
  109. package/dist/server/src/api/schemas/cameras.schema.js +16 -4
  110. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  111. package/dist/server/src/api/services/cameras.service.d.ts +1 -0
  112. package/dist/server/src/api/services/cameras.service.js +13 -2
  113. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  114. package/dist/server/src/api/services/plugins.service.d.ts +1 -0
  115. package/dist/server/src/api/services/plugins.service.js +8 -3
  116. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  117. package/dist/server/src/api/types/index.d.ts +0 -5
  118. package/dist/server/src/api/websocket/index.js +1 -0
  119. package/dist/server/src/api/websocket/index.js.map +1 -1
  120. package/dist/server/src/api/websocket/nsp/logs.d.ts +7 -1
  121. package/dist/server/src/api/websocket/nsp/logs.js +70 -51
  122. package/dist/server/src/api/websocket/nsp/logs.js.map +1 -1
  123. package/dist/server/src/api/websocket/nsp/metrics.d.ts +1 -1
  124. package/dist/server/src/api/websocket/nsp/metrics.js +15 -13
  125. package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
  126. package/dist/server/src/api/websocket/nsp/plugins.js +3 -3
  127. package/dist/server/src/api/websocket/nsp/plugins.js.map +1 -1
  128. package/dist/server/src/api/websocket/nsp/status.d.ts +1 -1
  129. package/dist/server/src/api/websocket/nsp/status.js +8 -6
  130. package/dist/server/src/api/websocket/nsp/status.js.map +1 -1
  131. package/dist/server/src/api.d.ts +5 -14
  132. package/dist/server/src/api.js +43 -24
  133. package/dist/server/src/api.js.map +1 -1
  134. package/dist/server/src/camera/controller.d.ts +17 -4
  135. package/dist/server/src/camera/controller.js +113 -25
  136. package/dist/server/src/camera/controller.js.map +1 -1
  137. package/dist/server/src/{decoder/worker.d.ts → camera/frameWorker.d.ts} +8 -5
  138. package/dist/server/src/{decoder/worker.js → camera/frameWorker.js} +126 -56
  139. package/dist/server/src/camera/frameWorker.js.map +1 -0
  140. package/dist/server/src/go2rtc/index.js +18 -5
  141. package/dist/server/src/go2rtc/index.js.map +1 -1
  142. package/dist/server/src/main.js +23 -52
  143. package/dist/server/src/main.js.map +1 -1
  144. package/dist/server/src/nats/index.js +1 -0
  145. package/dist/server/src/nats/index.js.map +1 -1
  146. package/dist/server/src/nats/proxy/cameraDevice.d.ts +1 -1
  147. package/dist/server/src/nats/proxy/cameraDevice.js +35 -43
  148. package/dist/server/src/nats/proxy/cameraDevice.js.map +1 -1
  149. package/dist/server/src/nats/proxy/coreManager.d.ts +1 -1
  150. package/dist/server/src/nats/proxy/coreManager.js +2 -4
  151. package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
  152. package/dist/server/src/nats/server.js +31 -19
  153. package/dist/server/src/nats/server.js.map +1 -1
  154. package/dist/server/src/plugins/index.d.ts +3 -4
  155. package/dist/server/src/plugins/index.js +29 -30
  156. package/dist/server/src/plugins/index.js.map +1 -1
  157. package/dist/server/src/plugins/plugin.d.ts +5 -0
  158. package/dist/server/src/plugins/plugin.js +40 -6
  159. package/dist/server/src/plugins/plugin.js.map +1 -1
  160. package/dist/server/src/plugins/worker.d.ts +17 -2
  161. package/dist/server/src/plugins/worker.js +189 -45
  162. package/dist/server/src/plugins/worker.js.map +1 -1
  163. package/dist/server/src/services/config/constants.d.ts +1 -0
  164. package/dist/server/src/services/config/constants.js +3 -2
  165. package/dist/server/src/services/config/constants.js.map +1 -1
  166. package/dist/server/src/services/config/index.d.ts +11 -2
  167. package/dist/server/src/services/config/index.js +57 -9
  168. package/dist/server/src/services/config/index.js.map +1 -1
  169. package/dist/server/src/services/config/types.d.ts +7 -0
  170. package/dist/server/src/services/config/types.js.map +1 -1
  171. package/localdeps.txt +1 -0
  172. package/package.json +17 -13
  173. package/upgrade-server.sh +2 -1
  174. package/dist/interface/@tanstack.RTx9E9y7.0.0.34-alpha.0.js +0 -1
  175. package/dist/interface/@vue.DD07jlOO.0.0.34-alpha.0.js +0 -17
  176. package/dist/interface/Camera.DU8K1N0C.0.0.34-alpha.0.js +0 -1
  177. package/dist/interface/Cameras.ClJj-LiP.0.0.34-alpha.0.js +0 -1
  178. package/dist/interface/Camview.CZC51EkR.0.0.34-alpha.0.js +0 -1
  179. package/dist/interface/Console._P_NhXZc.0.0.34-alpha.0.js +0 -4
  180. package/dist/interface/Plugin.CG1TNvyW.0.0.34-alpha.0.js +0 -1
  181. package/dist/interface/Plugins.CMW2b9VP.0.0.34-alpha.0.js +0 -1
  182. package/dist/interface/Recordings.BeL5j0br.0.0.34-alpha.0.js +0 -1
  183. package/dist/interface/Recordings.nKhVoEv_.0.0.34-alpha.0.js +0 -1
  184. package/dist/interface/VConsole.kG4Wm6NV.0.0.34-alpha.0.js +0 -1
  185. package/dist/interface/VPlayer.BpXzNzAf.0.0.34-alpha.0.js +0 -1
  186. package/dist/interface/VPluginCard.FMoeWaor.0.0.34-alpha.0.js +0 -4
  187. package/dist/interface/assets/Cameras.0.0.34-alpha.0.BgZN27ly.css +0 -1
  188. package/dist/interface/assets/Console.0.0.34-alpha.0.Cc8Jy8yw.css +0 -1
  189. package/dist/interface/assets/NewCamera.0.0.34-alpha.0.ByGNe7eR.css +0 -1
  190. package/dist/interface/assets/VConsole.0.0.34-alpha.0.BZT1WyS-.css +0 -1
  191. package/dist/interface/assets/VPluginCard.0.0.34-alpha.0.BpMChOJT.css +0 -1
  192. package/dist/interface/assets/main.0.0.34-alpha.0.C1atsWH3.css +0 -1
  193. package/dist/interface/main.CBun-MVF.0.0.34-alpha.0.js +0 -4
  194. package/dist/interface/plugins.Btkvninu.0.0.34-alpha.0.js +0 -1
  195. package/dist/interface/system.C_kiuqo-.0.0.34-alpha.0.js +0 -1
  196. package/dist/interface/vue3-apexcharts.D3zy1HLu.0.0.34-alpha.0.js +0 -1
  197. package/dist/interface/vuetify.BZRDiB_v.0.0.34-alpha.0.js +0 -5
  198. package/dist/server/src/decoder/index.d.ts +0 -11
  199. package/dist/server/src/decoder/index.js +0 -32
  200. package/dist/server/src/decoder/index.js.map +0 -1
  201. package/dist/server/src/decoder/types.d.ts +0 -7
  202. package/dist/server/src/decoder/types.js +0 -2
  203. package/dist/server/src/decoder/types.js.map +0 -1
  204. package/dist/server/src/decoder/worker.js.map +0 -1
  205. /package/dist/interface/{@babel.l0sNRNKZ.0.0.34-alpha.0.js → @babel.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  206. /package/dist/interface/{@mdi.C1UTQKuc.0.0.34-alpha.0.js → @mdi.C1UTQKuc.0.0.34-alpha.2.js} +0 -0
  207. /package/dist/interface/{@popperjs.l0sNRNKZ.0.0.34-alpha.0.js → @popperjs.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  208. /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.34-alpha.0.js → @react-dnd.CcwRs9xb.0.0.34-alpha.2.js} +0 -0
  209. /package/dist/interface/{@socket.io.Dkula2eQ.0.0.34-alpha.0.js → @socket.io.Dkula2eQ.0.0.34-alpha.2.js} +0 -0
  210. /package/dist/interface/{@turf.l0sNRNKZ.0.0.34-alpha.0.js → @turf.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  211. /package/dist/interface/{@xterm.CRsBeZ-e.0.0.34-alpha.0.js → @xterm.Dv6b8EJg.0.0.34-alpha.2.js} +0 -0
  212. /package/dist/interface/assets/{@vueform.0.0.34-alpha.0.h7tNX9p6.css → @vueform.0.0.34-alpha.2.h7tNX9p6.css} +0 -0
  213. /package/dist/interface/assets/{@xterm.0.0.34-alpha.0.CGrrDQr5.css → @xterm.0.0.34-alpha.2.CGrrDQr5.css} +0 -0
  214. /package/dist/interface/assets/{Account.0.0.34-alpha.0.Ce3OmKrC.css → Account.0.0.34-alpha.2.Ce3OmKrC.css} +0 -0
  215. /package/dist/interface/assets/{Adminpanel.0.0.34-alpha.0.BCpVV7QL.css → Adminpanel.0.0.34-alpha.2.BCpVV7QL.css} +0 -0
  216. /package/dist/interface/assets/{Backup.0.0.34-alpha.0.BIwaSlv3.css → Backup.0.0.34-alpha.2.BIwaSlv3.css} +0 -0
  217. /package/dist/interface/assets/{Camera.0.0.34-alpha.0.D49XscoW.css → Camera.0.0.34-alpha.2.D49XscoW.css} +0 -0
  218. /package/dist/interface/assets/{Camview.0.0.34-alpha.0.BdTE1Iny.css → Camview.0.0.34-alpha.2.BdTE1Iny.css} +0 -0
  219. /package/dist/interface/assets/{Config.0.0.34-alpha.0.BtdZEuQO.css → Config.0.0.34-alpha.2.BtdZEuQO.css} +0 -0
  220. /package/dist/interface/assets/{FirstSteps.0.0.34-alpha.0.CCo2y-sU.css → FirstSteps.0.0.34-alpha.2.CCo2y-sU.css} +0 -0
  221. /package/dist/interface/assets/{Plugin.0.0.34-alpha.0.BtRA6zDt.css → Plugin.0.0.34-alpha.2.BtRA6zDt.css} +0 -0
  222. /package/dist/interface/assets/{Plugins.0.0.34-alpha.0.Cwu0aGUO.css → Plugins.0.0.34-alpha.2.Cwu0aGUO.css} +0 -0
  223. /package/dist/interface/assets/{Settings.0.0.34-alpha.0.DTRm1psP.css → Settings.0.0.34-alpha.2.DTRm1psP.css} +0 -0
  224. /package/dist/interface/assets/{User.0.0.34-alpha.0.DPDcJbx8.css → User.0.0.34-alpha.2.DPDcJbx8.css} +0 -0
  225. /package/dist/interface/assets/{highlight.0.0.34-alpha.0.DgoK_Xib.css → highlight.0.0.34-alpha.2.DgoK_Xib.css} +0 -0
  226. /package/dist/interface/assets/{logo-256.0.0.34-alpha.0.BCQk9H1-.png → logo-256.0.0.34-alpha.2.BCQk9H1-.png} +0 -0
  227. /package/dist/interface/assets/{logo-512.0.0.34-alpha.0.DLKVOU2S.png → logo-512.0.0.34-alpha.2.DLKVOU2S.png} +0 -0
  228. /package/dist/interface/assets/{logo.0.0.34-alpha.0.DmEiRk0z.png → logo.0.0.34-alpha.2.DmEiRk0z.png} +0 -0
  229. /package/dist/interface/assets/{mode-json.0.0.34-alpha.0.Br7xisR1.js → mode-json.0.0.34-alpha.2.Br7xisR1.js} +0 -0
  230. /package/dist/interface/assets/{mode-yaml.0.0.34-alpha.0.CIYL8U3d.js → mode-yaml.0.0.34-alpha.2.CIYL8U3d.js} +0 -0
  231. /package/dist/interface/assets/{vue3-toastify.0.0.34-alpha.0.DTY1DMRs.css → vue3-toastify.0.0.34-alpha.2.DTY1DMRs.css} +0 -0
  232. /package/dist/interface/assets/{vuetify.0.0.34-alpha.0.B_k2Rcut.css → vuetify.0.0.34-alpha.2.B_k2Rcut.css} +0 -0
  233. /package/dist/interface/{axios.C-n2IhIP.0.0.34-alpha.0.js → axios.C-n2IhIP.0.0.34-alpha.2.js} +0 -0
  234. /package/dist/interface/{compare-versions.DqEOhma6.0.0.34-alpha.0.js → compare-versions.DqEOhma6.0.0.34-alpha.2.js} +0 -0
  235. /package/dist/interface/{dijkstrajs.D_NXgYpA.0.0.34-alpha.0.js → dijkstrajs.D_NXgYpA.0.0.34-alpha.2.js} +0 -0
  236. /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.34-alpha.0.js → engine.io-parser.BiEtp6m2.0.0.34-alpha.2.js} +0 -0
  237. /package/dist/interface/{entities.C20TfXL6.0.0.34-alpha.0.js → entities.C20TfXL6.0.0.34-alpha.2.js} +0 -0
  238. /package/dist/interface/{get-size.D1dS-IaP.0.0.34-alpha.0.js → get-size.D1dS-IaP.0.0.34-alpha.2.js} +0 -0
  239. /package/dist/interface/{mdurl.k9Sl0PQj.0.0.34-alpha.0.js → mdurl.k9Sl0PQj.0.0.34-alpha.2.js} +0 -0
  240. /package/dist/interface/{point-in-polygon-hao.l0sNRNKZ.0.0.34-alpha.0.js → point-in-polygon-hao.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  241. /package/dist/interface/{punycode.js.Dj65hjkv.0.0.34-alpha.0.js → punycode.js.Dj65hjkv.0.0.34-alpha.2.js} +0 -0
  242. /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.34-alpha.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.34-alpha.2.js} +0 -0
  243. /package/dist/interface/{redux.CuxFRhX_.0.0.34-alpha.0.js → redux.CuxFRhX_.0.0.34-alpha.2.js} +0 -0
  244. /package/dist/interface/{sweepline-intersections.l0sNRNKZ.0.0.34-alpha.0.js → sweepline-intersections.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  245. /package/dist/interface/{tslib.9k7AwCpt.0.0.34-alpha.0.js → tslib.9k7AwCpt.0.0.34-alpha.2.js} +0 -0
  246. /package/dist/interface/{types.Cz9TaZAP.0.0.34-alpha.0.js → types.Cz9TaZAP.0.0.34-alpha.2.js} +0 -0
  247. /package/dist/interface/{uc.micro.kMc2yuuw.0.0.34-alpha.0.js → uc.micro.kMc2yuuw.0.0.34-alpha.2.js} +0 -0
  248. /package/dist/interface/{utils.mAKpSMLY.0.0.34-alpha.0.js → utils.mAKpSMLY.0.0.34-alpha.2.js} +0 -0
  249. /package/dist/interface/{uuid.DvF23Exx.0.0.34-alpha.0.js → uuid.DvF23Exx.0.0.34-alpha.2.js} +0 -0
  250. /package/dist/interface/{vue.l0sNRNKZ.0.0.34-alpha.0.js → vue.l0sNRNKZ.0.0.34-alpha.2.js} +0 -0
  251. /package/dist/interface/{zod.DnW1_kUe.0.0.34-alpha.0.js → zod.DnW1_kUe.0.0.34-alpha.2.js} +0 -0
@@ -1,5 +1,7 @@
1
1
  import { PythonInstaller } from '@camera.ui/plugineer';
2
+ import { PluginWorker } from './worker.js';
2
3
  import type { PluginContract } from '@camera.ui/plugineer';
4
+ import type { CameraExtension } from '@camera.ui/types';
3
5
  import type { CameraUiPlugin, IPackageJson } from '../api/types/index.js';
4
6
  export declare class Plugin {
5
7
  private logger;
@@ -19,11 +21,14 @@ export declare class Plugin {
19
21
  readonly configFile: string;
20
22
  readonly storagePath: string;
21
23
  readonly py: PythonInstaller;
24
+ readonly logPath: string;
25
+ readonly worker: PluginWorker;
22
26
  get contract(): PluginContract;
23
27
  get info(): CameraUiPlugin;
24
28
  set info(value: CameraUiPlugin);
25
29
  get disabled(): boolean;
26
30
  set disabled(value: boolean);
31
+ get type(): CameraExtension[];
27
32
  constructor(pluginName: string, installPath: string, packageJSON: IPackageJson, pluginId: string, scope?: string);
28
33
  load(): Promise<void>;
29
34
  reparsePackageJson(): void;
@@ -6,6 +6,7 @@ import { join } from 'node:path';
6
6
  import { container } from 'tsyringe';
7
7
  import { ConfigService } from '../services/config/index.js';
8
8
  import { PluginManager } from './index.js';
9
+ import { PluginWorker } from './worker.js';
9
10
  export class Plugin {
10
11
  logger;
11
12
  configService;
@@ -24,6 +25,8 @@ export class Plugin {
24
25
  configFile;
25
26
  storagePath;
26
27
  py;
28
+ logPath;
29
+ worker;
27
30
  get contract() {
28
31
  return this._contract;
29
32
  }
@@ -41,6 +44,17 @@ export class Plugin {
41
44
  set disabled(value) {
42
45
  this._disabled = value;
43
46
  this._info.disabled = value;
47
+ this.worker.disable();
48
+ }
49
+ get type() {
50
+ const types = new Set();
51
+ if (this._contract.builtIns) {
52
+ this._contract.builtIns.forEach((type) => types.add(type));
53
+ }
54
+ if (this._contract.extension) {
55
+ types.add(this._contract.extension);
56
+ }
57
+ return Array.from(types);
44
58
  }
45
59
  constructor(pluginName, installPath, packageJSON, pluginId, scope) {
46
60
  this.logger = container.resolve('logger');
@@ -50,6 +64,7 @@ export class Plugin {
50
64
  this.id = pluginId;
51
65
  this.pluginName = pluginName;
52
66
  this.storagePath = join(this.configService.PLUGINS_STORAGE_PATH, this.pluginName);
67
+ this.logPath = join(this.configService.LOGS_PATH, `plugin-${this.id}.log`);
53
68
  this.configFile = join(this.storagePath, 'config.json');
54
69
  ensureFileSync(this.configFile);
55
70
  this.main = this.getMainFile(packageJSON);
@@ -63,6 +78,8 @@ export class Plugin {
63
78
  engines: packageJSON.engines,
64
79
  dependencies: packageJSON.dependencies,
65
80
  };
81
+ this.worker = new PluginWorker(this);
82
+ this.disabled = this.configService.config.plugins.disabledPlugins.includes(pluginName);
66
83
  }
67
84
  async load() {
68
85
  if (!this.loadContext.engines || !this.loadContext.engines['camera.ui']) {
@@ -124,13 +141,30 @@ major incompatibility issues and thus is considered bad practice. Please inform
124
141
  contract.pythonVersion = DEFAULT_PY_VERSION;
125
142
  }
126
143
  }
127
- return {
128
- builtIns: contract?.builtIns ? Array.from(new Set(contract.builtIns)) : [],
129
- dependencies: contract?.dependencies ? Array.from(new Set(contract.dependencies)) : [],
130
- supportAdditionalCameras: contract && contract.supportAdditionalCameras && !contract.extension && contract.builtIns?.length ? true : false,
131
- extension: contract && contract.extension && !contract.supportAdditionalCameras ? contract.extension : undefined,
132
- pythonVersion: contract?.pythonVersion,
144
+ const builtIns = contract?.builtIns ? Array.from(new Set(contract.builtIns)) : [];
145
+ const dependencies = contract?.dependencies ? Array.from(new Set(contract.dependencies)) : [];
146
+ const supportAdditionalCameras = contract && contract.supportAdditionalCameras && !contract.extension && builtIns?.length ? true : false;
147
+ const extension = contract && contract.extension && !contract.supportAdditionalCameras ? contract.extension : undefined;
148
+ const pythonVersion = contract?.pythonVersion;
149
+ const options = contract?.options;
150
+ const newContract = {
151
+ builtIns,
152
+ dependencies,
153
+ options,
154
+ pythonVersion,
133
155
  };
156
+ if (supportAdditionalCameras) {
157
+ return {
158
+ supportAdditionalCameras,
159
+ ...newContract,
160
+ };
161
+ }
162
+ else {
163
+ return {
164
+ extension,
165
+ ...newContract,
166
+ };
167
+ }
134
168
  }
135
169
  getMainFile(packageJSON) {
136
170
  let main = '';
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/plugins/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/plugins/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,MAAM,OAAO,MAAM;IACT,MAAM,CAAgB;IACtB,aAAa,CAAgB;IAE7B,SAAS,GAAG,KAAK,CAAC;IAClB,KAAK,CAAiB;IACtB,SAAS,CAAiB;IAC1B,WAAW,CAAU;IAEpB,EAAE,CAAS;IACX,IAAI,CAAS;IACb,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,KAAK,CAAU;IACf,QAAQ,CAAU;IAClB,SAAS,CAAU;IACnB,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,EAAE,CAAkB;IACpB,OAAO,CAAS;IAChB,MAAM,CAAe;IAE9B,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,IAAI;QACb,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAW,IAAI,CAAC,KAAqB;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAW,IAAI;QACb,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;QAEzC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY,UAAkB,EAAE,WAAmB,EAAE,WAAyB,EAAE,QAAgB,EAAE,KAAc;QAC9G,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAgB,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAAO,CAAgB,eAAe,CAAC,CAAC;QAEvE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAExD,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC;QAE9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAEhK,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzF,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,WAAW,yDAAyD,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QAE1D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACzH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,qCAAqC,eAAe;+CAC1D,aAAa,CAAC,OAAO,oDAAoD,CAAC,CAAC;YACpH,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,mBAAmB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACvH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,iCAAiC,mBAAmB;6CAC5D,OAAO,CAAC,OAAO,wDAAwD,CAAC,CAAC;QAClH,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;QACzD,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,UAAU;;sHAEgE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAEM,kBAAkB;QACvB,MAAM,KAAK,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEO,gBAAgB,CAAC,KAAmB,EAAE,WAAmB;QAC/D,MAAM,iBAAiB,GAAmB;YACxC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK;YAC9F,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK;YAC/B,UAAU,EAAE,KAAK,CAAC,IAAI;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC/E,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACxG,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YACjH,gBAAgB,EAAE,KAAK,CAAC,OAAO;YAC/B,aAAa,EAAE,KAAK,CAAC,OAAO;YAC5B,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK;YACrC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW;YACX,KAAK,EAAE;gBACL,GAAG,EAAE,iCAAiC,IAAI,CAAC,UAAU,EAAE;gBACvD,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ;YACtB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;SACvC,CAAC;QAEF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,aAAa,CAAC,KAAmB;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,aAAa,4CAA4C,kBAAkB,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACzJ,QAAQ,CAAC,aAAa,GAAG,kBAAkB,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,wBAAwB,GAAG,QAAQ,IAAI,QAAQ,CAAC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACzI,MAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACxH,MAAM,aAAa,GAAG,QAAQ,EAAE,aAAa,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,CAAC;QAElC,MAAM,WAAW,GAAG;YAClB,QAAQ;YACR,YAAY;YACZ,OAAO;YACP,aAAa;SACd,CAAC;QAEF,IAAI,wBAAwB,EAAE,CAAC;YAC7B,OAAO;gBACL,wBAAwB;gBACxB,GAAG,WAAW;aACf,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,SAAS;gBACT,GAAG,WAAW;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,WAAyB;QAC3C,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEjK,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;oBAC5D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,IAAI,WAAW,CAAC,IAAI,IAAI,YAAY,CAAC;IAClD,CAAC;CACF"}
@@ -4,26 +4,34 @@ export declare class PluginWorker {
4
4
  plugin: Plugin;
5
5
  private pluginWorker?;
6
6
  private proxyServer;
7
+ private logStream?;
7
8
  private api;
8
- private logger;
9
+ private mainLogger;
10
+ private pluginLogger;
11
+ private processLogger;
9
12
  private configService;
10
13
  private socketService;
14
+ private pluginManager;
11
15
  private publisher?;
12
16
  private subscriber?;
13
17
  private subject;
14
18
  private targetSubject;
15
19
  private started;
16
20
  private shuttingDown;
21
+ private truncateInterval?;
22
+ private truncateIntervalMs;
17
23
  private _status;
18
24
  get status(): PLUGIN_STATUS;
19
25
  constructor(plugin: Plugin);
20
26
  start(): Promise<void>;
21
27
  teardown(): Promise<void>;
22
- destroy(): void;
28
+ destroy(): Promise<void>;
23
29
  restart(): Promise<void>;
30
+ disable(): void;
24
31
  getPID(): number;
25
32
  isRunning(): boolean;
26
33
  isReady(): boolean;
34
+ cleanup(): Promise<void>;
27
35
  private gatherDevices;
28
36
  private kill;
29
37
  private setStatus;
@@ -32,5 +40,12 @@ export declare class PluginWorker {
32
40
  private reset;
33
41
  private updatePython;
34
42
  private onChildMessage;
43
+ private createPythonPath;
44
+ writeLog(...args: any[]): void;
45
+ private internalLog;
46
+ private createLogStream;
47
+ private closeLogStream;
48
+ private removeLogStream;
49
+ private truncateLog;
35
50
  private cleanedProcessEnv;
36
51
  }
@@ -1,26 +1,38 @@
1
1
  import { sleep } from '@camera.ui/common';
2
- import { PLUGIN_COMMAND, PLUGIN_STATUS, ProxyConnection, unpack } from '@camera.ui/plugineer';
2
+ import { DEFAULT_PY_VERSION, PLUGIN_COMMAND, PLUGIN_STATUS, ProxyConnection, unpack } from '@camera.ui/plugineer';
3
3
  import { nodePluginPath, pythonPath, pythonPluginPath } from '@camera.ui/plugineer/path';
4
+ import { pathExists } from 'fs-extra/esm';
4
5
  import { fork, spawn } from 'node:child_process';
5
- import { existsSync, statSync } from 'node:fs';
6
+ import { createWriteStream, existsSync, ftruncate, read, rmSync, statSync } from 'node:fs';
7
+ import { open, stat } from 'node:fs/promises';
6
8
  import { platform } from 'node:os';
7
9
  import { dirname, join, resolve } from 'node:path';
10
+ import { promisify } from 'node:util';
8
11
  import { container } from 'tsyringe';
12
+ import { API_EVENT } from '../api.js';
9
13
  import { CamerasService } from '../api/services/cameras.service.js';
14
+ const truncatePromise = promisify(ftruncate);
15
+ const readPromise = promisify(read);
10
16
  export class PluginWorker {
11
17
  plugin;
12
18
  pluginWorker;
13
19
  proxyServer;
20
+ logStream;
14
21
  api;
15
- logger;
22
+ mainLogger;
23
+ pluginLogger;
24
+ processLogger;
16
25
  configService;
17
26
  socketService;
27
+ pluginManager;
18
28
  publisher;
19
29
  subscriber;
20
30
  subject;
21
31
  targetSubject;
22
32
  started = false;
23
33
  shuttingDown = false;
34
+ truncateInterval;
35
+ truncateIntervalMs = 1000 * 60 * 60 * 2;
24
36
  _status = PLUGIN_STATUS.UNKNOWN;
25
37
  get status() {
26
38
  return this._status;
@@ -30,31 +42,43 @@ export class PluginWorker {
30
42
  if (plugin.disabled) {
31
43
  this._status = PLUGIN_STATUS.DISABLED;
32
44
  }
33
- this.logger = container.resolve('logger');
34
- this.configService = container.resolve('configService');
45
+ this.mainLogger = container.resolve('logger');
46
+ this.pluginLogger = this.mainLogger.createLogger({ prefix: plugin.displayName });
47
+ this.processLogger = this.mainLogger.createLogger({ disablePrefix: true, disableTimestamps: true, prefix: undefined, suffix: undefined });
35
48
  this.api = container.resolve('api');
49
+ this.configService = container.resolve('configService');
36
50
  this.socketService = container.resolve('socketService');
37
51
  this.proxyServer = container.resolve('proxy');
52
+ this.pluginManager = container.resolve('pluginManager');
38
53
  this.subject = `${this.plugin.id}.ipc.publisher`;
39
54
  this.targetSubject = `${this.plugin.id}.ipc.subscriber`;
55
+ this.logStream = this.createLogStream();
56
+ this.truncateInterval = setInterval(() => this.truncateLog(), this.truncateIntervalMs);
57
+ this.truncateLog();
58
+ this.api.setMaxListeners(this.api.getMaxListeners() + 1);
59
+ this.api.once(API_EVENT.SHUTDOWN, () => {
60
+ clearInterval(this.truncateInterval);
61
+ this.logStream?.destroy();
62
+ this.logStream = undefined;
63
+ });
40
64
  }
41
65
  start() {
42
66
  return new Promise(async (_resolve) => {
43
67
  if (this.started) {
44
- this.logger.warn(`Plugin ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion}) already running!`);
68
+ this.mainLogger.warn(`Plugin ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion}) already running!`);
45
69
  _resolve();
46
70
  return;
47
71
  }
48
72
  if (this.plugin.disabled) {
49
73
  this.setStatus(PLUGIN_STATUS.DISABLED);
50
- this.logger.warn(`Can not start plugin. Plugin ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion}) is disabled!`);
74
+ this.mainLogger.warn(`Can not start plugin. Plugin ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion}) is disabled!`);
51
75
  _resolve();
52
76
  return;
53
77
  }
54
- this.logger.log(`Starting plugin: ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion})...`);
78
+ this.mainLogger.log(`Starting plugin: ${this.plugin.displayName} (${this.plugin.pluginName}.${this.plugin.info.installedVersion})...`);
55
79
  await this.reset();
56
- await this.updatePython();
57
80
  this.setStatus(PLUGIN_STATUS.STARTING);
81
+ await this.updatePython();
58
82
  const servers = this.proxyServer.server.endpoints.filter((endpoint) => endpoint.startsWith('nats://'));
59
83
  this.publisher = new ProxyConnection(this.subject, servers, this.proxyServer.auth.server);
60
84
  await this.publisher.connect();
@@ -67,51 +91,63 @@ export class PluginWorker {
67
91
  PLUGIN_ID: this.plugin.id,
68
92
  PLUGIN_NAME: this.plugin.pluginName,
69
93
  FORCE_COLOR: '1',
70
- LOGGER_LEVEL: this.configService.config.logger.level,
71
- LOGGER_DISABLE_TIMESTAMPS: this.configService.config.logger.disableTimestamps === true ? '1' : '0',
72
94
  PROXY_USER: this.proxyServer.auth.server.user,
73
95
  PROXY_PASSWORD: this.proxyServer.auth.server.password,
74
96
  PROXY_ENDPOINTS: this.proxyServer.server.endpoints.join(','),
75
97
  MODULE_PATH: join(this.plugin.installPath, this.plugin.main),
76
98
  };
99
+ let command;
100
+ const args = [];
101
+ const processNames = [this.plugin.pluginName, this.plugin.displayName];
77
102
  if (this.plugin.isPython) {
78
- const createPythonPath = () => {
79
- const separator = platform() === 'win32' ? ';' : ':';
80
- const mainFile = this.plugin.main;
81
- const mainFullPath = resolve(join(this.plugin.installPath, mainFile));
82
- const mainDir = dirname(mainFullPath);
83
- const paths = [pythonPath, this.plugin.installPath, this.plugin.py.serverPackagesPath, this.plugin.installPath, mainDir];
84
- return paths.join(separator);
85
- };
103
+ command = this.plugin.py.pluginPythonPath;
104
+ args.push('-u', pythonPluginPath, ...processNames);
86
105
  options = {
87
106
  PYTHONUNBUFFERED: '1',
88
- PYTHONPATH: createPythonPath(),
107
+ PYTHONPATH: this.createPythonPath(),
89
108
  ...options,
90
109
  };
91
- const args = ['-u', pythonPluginPath, this.plugin.displayName];
92
- this.logger.debug(`Spawning plugin: ${this.plugin.py.pluginPythonPath} ${args.join(' ')}`);
93
- this.pluginWorker = spawn(this.plugin.py.pluginPythonPath, args, {
110
+ this.mainLogger.debug(`Spawning plugin: ${this.plugin.pluginName}`);
111
+ this.pluginWorker = spawn(this.plugin.py.pluginPythonPath, ['-u', pythonPluginPath, ...processNames], {
94
112
  env: options,
95
- stdio: 'inherit',
113
+ // stdio: 'inherit',
96
114
  });
97
115
  }
98
116
  else {
99
- this.logger.debug(`Forking plugin: ${nodePluginPath} ${this.plugin.displayName}`);
117
+ command = process.execPath;
118
+ args.push(nodePluginPath, ...processNames);
119
+ this.mainLogger.debug(`Forking plugin: ${this.plugin.pluginName}`);
100
120
  options = {
101
121
  ...this.cleanedProcessEnv(),
102
122
  ...options,
103
123
  };
104
- this.pluginWorker = fork(nodePluginPath, [this.plugin.displayName], {
124
+ this.pluginWorker = fork(nodePluginPath, [...processNames], {
105
125
  env: options,
126
+ silent: true,
106
127
  });
107
128
  }
129
+ let pluginPID = undefined;
130
+ this.pluginWorker.on('spawn', () => {
131
+ this.pluginLogger.log(`Initializing Plugin process with PID: ${this.pluginWorker?.pid}`);
132
+ pluginPID = this.pluginWorker?.pid;
133
+ if (pluginPID) {
134
+ this.configService.addProc({
135
+ pid: pluginPID,
136
+ startTime: Date.now(),
137
+ command,
138
+ args,
139
+ titles: [...processNames, 'camera.ui - Plugin'],
140
+ });
141
+ }
142
+ });
108
143
  this.pluginWorker.on('error', (error) => {
109
- this.logger.warn(`The plugin process for "${this.plugin.pluginName}" failed to start/stop!`);
110
- this.logger.error(error);
144
+ this.mainLogger.warn(`The plugin process for "${this.plugin.pluginName}" failed to start/stop!`);
145
+ this.mainLogger.error(error);
111
146
  this.setStatus(PLUGIN_STATUS.ERROR);
112
147
  _resolve();
113
148
  });
114
149
  this.pluginWorker.on('exit', () => {
150
+ this.configService.removeProcByPID(pluginPID);
115
151
  setTimeout(() => {
116
152
  if (this.plugin.disabled) {
117
153
  this.setStatus(PLUGIN_STATUS.DISABLED);
@@ -123,17 +159,48 @@ export class PluginWorker {
123
159
  _resolve();
124
160
  }, 100);
125
161
  });
162
+ this.pluginWorker.stdout?.on('data', (data) => {
163
+ const lines = data.toString().split('\n');
164
+ for (const line of lines) {
165
+ if (!line || line == '') {
166
+ continue;
167
+ }
168
+ const { loggerId, content } = this.processLogger.extractLoggerIdAndContent(line);
169
+ if (loggerId) {
170
+ this.api.writeCameraLog(loggerId, content);
171
+ }
172
+ this.processLogger.log(content);
173
+ this.logStream?.write(content + '\n');
174
+ }
175
+ });
176
+ this.pluginWorker.stderr?.on('data', (data) => {
177
+ const lines = data.toString().split('\n');
178
+ for (const line of lines) {
179
+ if (!line || line == '') {
180
+ continue;
181
+ }
182
+ const { loggerId, content } = this.processLogger.extractLoggerIdAndContent(line);
183
+ if (loggerId) {
184
+ this.api.writeCameraLog(loggerId, content);
185
+ }
186
+ this.processLogger.log(content);
187
+ this.logStream?.write(content + '\n');
188
+ }
189
+ });
126
190
  });
127
191
  }
128
192
  async teardown() {
193
+ if (this.isRunning()) {
194
+ this.mainLogger.log(`Stopping plugin: ${this.plugin.pluginName}.${this.plugin.displayName}...`);
195
+ }
129
196
  this.shuttingDown = true;
130
- this.logger.log(`Stopping plugin: ${this.plugin.pluginName}.${this.plugin.displayName}...`);
131
- const cameras = this.api.getCameras(this.plugin.id);
132
- cameras.forEach((cameraMap) => cameraMap.controller.disconnect());
197
+ const cameraControllers = this.api.getCameras(this.plugin.id);
198
+ cameraControllers.forEach((cameraController) => cameraController.disconnect());
133
199
  await this.kill();
134
200
  await this.reset();
135
201
  }
136
- destroy() {
202
+ async destroy() {
203
+ await this.reset();
137
204
  this.pluginWorker?.kill('SIGKILL');
138
205
  }
139
206
  async restart() {
@@ -141,6 +208,10 @@ export class PluginWorker {
141
208
  await sleep(1000);
142
209
  await this.start();
143
210
  }
211
+ disable() {
212
+ this.teardown();
213
+ this.setStatus(PLUGIN_STATUS.DISABLED);
214
+ }
144
215
  getPID() {
145
216
  return this.pluginWorker?.pid || 0;
146
217
  }
@@ -150,6 +221,10 @@ export class PluginWorker {
150
221
  isReady() {
151
222
  return this.status === PLUGIN_STATUS.READY || this.status === PLUGIN_STATUS.STARTED;
152
223
  }
224
+ async cleanup() {
225
+ this.removeLogStream();
226
+ await this.teardown();
227
+ }
153
228
  gatherDevices() {
154
229
  const pluginType = this.plugin.contract.extension
155
230
  ? [this.plugin.contract.extension]
@@ -167,22 +242,21 @@ export class PluginWorker {
167
242
  kill() {
168
243
  return new Promise(async (_resolve) => {
169
244
  this.sendMessage({ type: PLUGIN_COMMAND.STOP });
170
- const cameras = this.api.getCameras(this.plugin.id);
171
- cameras.forEach((cameraMap) => cameraMap.controller.disconnect());
245
+ const cameraControllers = this.api.getCameras(this.plugin.id);
246
+ cameraControllers.forEach((cameraController) => cameraController.disconnect());
172
247
  if (!this.pluginWorker) {
173
- this.logger.log(`Plugin ${this.plugin.displayName} is not running.`);
174
248
  await this.reset();
175
- resolve();
249
+ _resolve();
176
250
  return;
177
251
  }
178
252
  const killTimeout = setTimeout(() => {
179
- this.logger.warn(`Plugin ${this.plugin.displayName} did not terminate gracefully. Forcing closure.`);
253
+ this.mainLogger.warn(`Plugin ${this.plugin.displayName} did not terminate gracefully. Forcing closure.`);
180
254
  this.pluginWorker?.kill('SIGKILL');
181
- resolve();
255
+ _resolve();
182
256
  }, 3000);
183
257
  this.pluginWorker.once('close', (code, signal) => {
184
258
  clearTimeout(killTimeout);
185
- this.logger.log(`Plugin ${this.plugin.displayName} closed. Code: ${code}, Signal: ${signal}`);
259
+ this.mainLogger.log(`Plugin ${this.plugin.displayName} closed. Code: ${code}, Signal: ${signal}`);
186
260
  this.reset().then(_resolve);
187
261
  });
188
262
  this.pluginWorker.kill('SIGTERM');
@@ -205,7 +279,7 @@ export class PluginWorker {
205
279
  }
206
280
  handleClose() {
207
281
  if (!this.shuttingDown) {
208
- this.logger.log(`Restarting plugin: ${this.plugin.pluginName}.${this.plugin.displayName} in 5s...`);
282
+ this.mainLogger.log(`Restarting plugin: ${this.plugin.pluginName}.${this.plugin.displayName} in 5s...`);
209
283
  setTimeout(() => {
210
284
  this.start();
211
285
  }, 5000);
@@ -231,13 +305,16 @@ export class PluginWorker {
231
305
  if (existsSync(requirementsPath) && statSync(requirementsPath).size > 0) {
232
306
  await this.plugin.py.updatePluginDependencies(requirementsPath);
233
307
  }
308
+ if (!this.pluginManager.installedPythonVersions.has(this.plugin.contract.pythonVersion || DEFAULT_PY_VERSION)) {
309
+ throw new Error(`Python version ${this.plugin.contract.pythonVersion || DEFAULT_PY_VERSION} is not installed! Cannot start plugin.`);
310
+ }
234
311
  }
235
312
  }
236
313
  async onChildMessage(_resolve, msg) {
237
314
  const message = unpack(msg.data);
238
315
  switch (message.type) {
239
316
  case PLUGIN_STATUS.READY:
240
- this.logger.debug(`Plugin ready: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion})`);
317
+ this.mainLogger.debug(`Plugin ready: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion})`);
241
318
  this.setStatus(PLUGIN_STATUS.READY);
242
319
  this.sendMessage({
243
320
  type: PLUGIN_COMMAND.START,
@@ -257,19 +334,86 @@ export class PluginWorker {
257
334
  });
258
335
  break;
259
336
  case PLUGIN_STATUS.STARTED:
260
- this.logger.log(`Started plugin: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion}) with PID ${this.getPID()} successfully`);
337
+ this.mainLogger.log(`Started plugin: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion}) with PID ${this.getPID()} successfully`);
261
338
  this.setStatus(PLUGIN_STATUS.STARTED);
262
339
  _resolve();
263
340
  break;
264
341
  case PLUGIN_STATUS.ERROR:
265
- this.logger.warn(`Starting plugin: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion}) failed!`);
266
- this.logger.error(message.data);
342
+ this.mainLogger.warn(`Starting plugin: ${this.plugin.displayName} (${this.plugin.pluginName}@${this.plugin.info.installedVersion}) failed!`);
343
+ this.mainLogger.error(message.data);
267
344
  this.setStatus(PLUGIN_STATUS.ERROR);
268
345
  this.teardown();
269
346
  _resolve();
270
347
  break;
271
348
  default:
272
- this.logger.warn(`Unknown message type: ${message.type}`);
349
+ this.mainLogger.warn(`Unknown message type: ${message.type}`);
350
+ }
351
+ }
352
+ createPythonPath() {
353
+ const separator = platform() === 'win32' ? ';' : ':';
354
+ const mainFile = this.plugin.main;
355
+ const mainFullPath = resolve(join(this.plugin.installPath, mainFile));
356
+ const mainDir = dirname(mainFullPath);
357
+ const paths = [pythonPath, this.plugin.installPath, this.plugin.py.serverPackagesPath, this.plugin.installPath, mainDir];
358
+ return paths.join(separator);
359
+ }
360
+ writeLog(...args) {
361
+ this.logStream?.write(args.join(' ') + '\n');
362
+ }
363
+ internalLog(level, ...args) {
364
+ this.pluginLogger[level](...args);
365
+ const message = this.mainLogger.formatMessage(level, ...args);
366
+ this.logStream?.write(message.join(' ') + '\n');
367
+ }
368
+ createLogStream() {
369
+ const logStream = createWriteStream(this.plugin.logPath, { flags: 'a' });
370
+ const date = new Date().toLocaleString('en-US');
371
+ const pluginInfo = `${this.plugin.pluginName}@${this.plugin.info.installedVersion}`;
372
+ const content = `${date}: ${pluginInfo}`;
373
+ const lineLength = content.length + 3;
374
+ const line = '-'.repeat(lineLength);
375
+ logStream.write(`\r\n${line}\r\n`);
376
+ logStream.write(content.padEnd(lineLength));
377
+ logStream.write(`\r\n${line}\r\n\r\n`);
378
+ return logStream;
379
+ }
380
+ closeLogStream() {
381
+ clearInterval(this.truncateInterval);
382
+ this.logStream?.destroy();
383
+ this.logStream = undefined;
384
+ }
385
+ removeLogStream() {
386
+ this.closeLogStream();
387
+ rmSync(this.plugin.logPath);
388
+ }
389
+ async truncateLog() {
390
+ if (!(await pathExists(this.plugin.logPath))) {
391
+ return;
392
+ }
393
+ const maxSize = 1000000; // ~1 MB
394
+ const truncateSize = 200000; // ~0.2 MB
395
+ try {
396
+ const logStats = await stat(this.plugin.logPath);
397
+ if (logStats.size < maxSize) {
398
+ // this.internalLog('debug', `Log file size is less than ${maxSize} bytes, skipping truncate`);
399
+ return;
400
+ }
401
+ // this.internalLog('debug', `Truncating log file to ${truncateSize} bytes...`);
402
+ const logStartPosition = logStats.size - truncateSize;
403
+ const logBuffer = Buffer.alloc(truncateSize);
404
+ const fileHandle = await open(this.plugin.logPath, 'r+');
405
+ try {
406
+ await readPromise(fileHandle.fd, logBuffer, 0, truncateSize, logStartPosition);
407
+ await truncatePromise(fileHandle.fd, 0);
408
+ await fileHandle.write(logBuffer, 0, truncateSize, 0);
409
+ }
410
+ finally {
411
+ await fileHandle.close();
412
+ }
413
+ // this.internalLog('debug', 'Log file truncated successfully');
414
+ }
415
+ catch (e) {
416
+ this.internalLog('error', `Failed to truncate log file: ${e.message}`);
273
417
  }
274
418
  }
275
419
  cleanedProcessEnv() {