@camera.ui/server 2.1.15 → 2.1.16

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 (403) hide show
  1. package/dist/interface/assets/{404-DwgMdXqW.js → 404-CqZDSHs_.js} +1 -1
  2. package/dist/interface/assets/{About-REFUgZk_.js → About-Dk4SUTxo.js} +1 -1
  3. package/dist/interface/assets/Automation-CDvt2MXN.js +3 -0
  4. package/dist/interface/assets/AutomationImport-DDywNuRK.js +2 -0
  5. package/dist/interface/assets/AutomationStore-o0JYwGRr.js +2 -0
  6. package/dist/interface/assets/AutomationStoreDetail-DeAGahaF.js +2 -0
  7. package/dist/interface/assets/Automations-2K-7hZfK.js +2 -0
  8. package/dist/interface/assets/Camera-B72IU-UF.js +2 -0
  9. package/dist/interface/assets/Camera-Cm9I0H6c.css +1 -0
  10. package/dist/interface/assets/{CameraConsole-S61HjIGA.js → CameraConsole-32WtMX1a.js} +1 -1
  11. package/dist/interface/assets/{Cameras-57rPP3Y_.js → Cameras-zffI0fD9.js} +2 -2
  12. package/dist/interface/assets/Camview-CZct5cnP.css +1 -0
  13. package/dist/interface/assets/Camview-KzzN0Q1w.js +1 -0
  14. package/dist/interface/assets/{CertificateUpload-CBSLHn_I.js → CertificateUpload-Dg0V9Hei.js} +1 -1
  15. package/dist/interface/assets/Config-CKrqFe-g.js +2 -0
  16. package/dist/interface/assets/{ConfigActionCameraControl-B7KwK7vb.js → ConfigActionCameraControl-sbvBJQr3.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionDelay-DwTGfeP4.js → ConfigActionDelay-CiPxydTn.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionHttp-idm-FKXM.js → ConfigActionHttp-UqiZm0kq.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionImageInput-C-v-_UEM.js → ConfigActionImageInput-DkGVZ-ti.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionMqtt-CG1o9_6A.js → ConfigActionMqtt-DQu5H4bY.js} +1 -1
  21. package/dist/interface/assets/{ConfigActionNotification-DtoP3c7I.js → ConfigActionNotification-C2uXIMpm.js} +1 -1
  22. package/dist/interface/assets/{ConfigActionNotificationControl-BvHIqHE7.js → ConfigActionNotificationControl-B_EpM5m9.js} +1 -1
  23. package/dist/interface/assets/{ConfigActionOutput-BQvDZGKV.js → ConfigActionOutput-DeOsk0T1.js} +1 -1
  24. package/dist/interface/assets/{ConfigActionPlugin-C7mcZ0Kz.js → ConfigActionPlugin-CSZHcNQ6.js} +1 -1
  25. package/dist/interface/assets/{ConfigActionSensor-BFnb75FI.js → ConfigActionSensor-Dx7DcDVr.js} +1 -1
  26. package/dist/interface/assets/{ConfigActionSnapshot-BfzPScY6.js → ConfigActionSnapshot-Baj-r4Cd.js} +1 -1
  27. package/dist/interface/assets/{ConfigActionVariable-CjIeZnOV.js → ConfigActionVariable-Ccu___aS.js} +1 -1
  28. package/dist/interface/assets/{ConfigConditionIfElse-Dgcqs9QP.js → ConfigConditionIfElse-0hU7UW8q.js} +1 -1
  29. package/dist/interface/assets/{ConfigConditionSensorState-DtLt1AvW.js → ConfigConditionSensorState-BX19KYLJ.js} +1 -1
  30. package/dist/interface/assets/{ConfigConditionSwitch-C6BfIozf.js → ConfigConditionSwitch-D-XUhwcE.js} +1 -1
  31. package/dist/interface/assets/{ConfigConditionTime-NcjSe4RM.js → ConfigConditionTime-B6OO8cmh.js} +1 -1
  32. package/dist/interface/assets/{ConfigSensorValueInput-DuvBl4YL.js → ConfigSensorValueInput-DZHYQez8.js} +1 -1
  33. package/dist/interface/assets/{ConfigTriggerDetection-DsVb-Svo.js → ConfigTriggerDetection-BNyR5aOG.js} +1 -1
  34. package/dist/interface/assets/ConfigTriggerGeofence-Cuq1SnOZ.js +1 -0
  35. package/dist/interface/assets/{ConfigTriggerManual-vG37zALd.js → ConfigTriggerManual-DFSTAuUt.js} +1 -1
  36. package/dist/interface/assets/{ConfigTriggerMqtt-BPl_Puje.js → ConfigTriggerMqtt-D_O8RyrQ.js} +1 -1
  37. package/dist/interface/assets/{ConfigTriggerSchedule-Bn2drGV5.js → ConfigTriggerSchedule-BFZnBfCM.js} +1 -1
  38. package/dist/interface/assets/{ConfigTriggerSensor-DP0CXRLo.js → ConfigTriggerSensor-D1Tst2wQ.js} +1 -1
  39. package/dist/interface/assets/{ConfigTriggerSystem-DQikAjbB.js → ConfigTriggerSystem-BNfatCp8.js} +1 -1
  40. package/dist/interface/assets/{ConfigTriggerWebhook-Cl7KWuRQ.js → ConfigTriggerWebhook--nEO_Odl.js} +1 -1
  41. package/dist/interface/assets/{Console-hUeddOJc.js → Console-DkylrXI4.js} +1 -1
  42. package/dist/interface/assets/{CuiAutomationRunsDialog-D_rNvqan.js → CuiAutomationRunsDialog-CkMRT1C8.js} +1 -1
  43. package/dist/interface/assets/CuiBottomSheet-DILQuWKb.js +1 -0
  44. package/dist/interface/assets/CuiBottomSheet-_KXSb13N.css +1 -0
  45. package/dist/interface/assets/CuiBottomSheet-mKu68LHd.js +1 -0
  46. package/dist/interface/assets/CuiCameraPipCard-Djp8qBvZ.js +1 -0
  47. package/dist/interface/assets/CuiCameraRecordings-Bi0I7jeO.js +1 -0
  48. package/dist/interface/assets/CuiCameraShares-B73pWIFh.js +1 -0
  49. package/dist/interface/assets/CuiCameraTable-CUdAnRJP.js +1 -0
  50. package/dist/interface/assets/{CuiCameraTable-CfXoLbtY.js → CuiCameraTable-DripFD6D.js} +1 -1
  51. package/dist/interface/assets/{CuiChartTable-BWRwoTLX.js → CuiChartTable-DyyQV7mt.js} +1 -1
  52. package/dist/interface/assets/{CuiConsole-Cb3wDLZr.js → CuiConsole-UxJwQqNG.js} +2 -2
  53. package/dist/interface/assets/{CuiDataTable-aAZV_F3r.js → CuiDataTable-DZm0I8k7.js} +1 -1
  54. package/dist/interface/assets/CuiLightControl-CB3l0ZLj.js +1 -0
  55. package/dist/interface/assets/{CuiList-BZYxCLqz.js → CuiList-DMQgYqaU.js} +1 -1
  56. package/dist/interface/assets/CuiPluginCard-HpQMNND1.js +2 -0
  57. package/dist/interface/assets/{CuiPluginCategoryChip-C9trJ_ql.js → CuiPluginCategoryChip-C6aEP-ug.js} +1 -1
  58. package/dist/interface/assets/CuiPluginOAuthButton-DpGacvsa.js +2 -0
  59. package/dist/interface/assets/{CuiPluginTrustBadge-D5gkIhJv.js → CuiPluginTrustBadge-Dl1PEsm6.js} +1 -1
  60. package/dist/interface/assets/CuiQRCode-D04Onyhk.js +1 -0
  61. package/dist/interface/assets/CuiRecordingsGrid-BhATIjIf.css +1 -0
  62. package/dist/interface/assets/CuiRecordingsGrid-BzyJWpFt.js +1 -0
  63. package/dist/interface/assets/CuiSchema-thjfmEWw.js +1 -0
  64. package/dist/interface/assets/{CuiTopNavbarItem-CJqOqVMt.css → CuiTopNavbarItem-7673AFGS.css} +1 -1
  65. package/dist/interface/assets/CuiTopNavbarItem-qPj6XwXr.js +1 -0
  66. package/dist/interface/assets/Faces-DRWIPDfH.js +1 -0
  67. package/dist/interface/assets/FirstSteps-C6GVpZVr.js +1 -0
  68. package/dist/interface/assets/{Floorplan-Bxhdg4C2.css → Floorplan-B1lItPnM.css} +1 -1
  69. package/dist/interface/assets/Floorplan-Q-UYDnrE.js +1 -0
  70. package/dist/interface/assets/Instances-VC4-anOF.js +1 -0
  71. package/dist/interface/assets/{Logs-CfYTWOv2.js → Logs-DROgZxLH.js} +2 -2
  72. package/dist/interface/assets/{Menu-HzmLhy40.js → Menu-CmTk2or7.js} +1 -1
  73. package/dist/interface/assets/Metrics-CYZF-em9.js +9 -0
  74. package/dist/interface/assets/{OAuthDeviceFlow-DBac627V.js → OAuthDeviceFlow-BrdiDoCh.js} +1 -1
  75. package/dist/interface/assets/Plugin-DuPHiiYJ.js +1 -0
  76. package/dist/interface/assets/{PluginConsole-C5dZgdl9.js → PluginConsole-CxiW1w6K.js} +1 -1
  77. package/dist/interface/assets/PluginDetail-DWP7_hNa.js +2 -0
  78. package/dist/interface/assets/{PluginSchema-DJ8NY8hW.js → PluginSchema-BgVZ_4if.js} +1 -1
  79. package/dist/interface/assets/PluginSearch-1djFQUjL.js +1 -0
  80. package/dist/interface/assets/PluginSearch-Ba-hQHxm.js +2 -0
  81. package/dist/interface/assets/{PluginUpdateProgress-DgqaTwSS.js → PluginUpdateProgress-DEcle8-x.js} +1 -1
  82. package/dist/interface/assets/Plugins-BZ3U4pcG.js +1 -0
  83. package/dist/interface/assets/Recordings-CI5MIFR-.js +1 -0
  84. package/dist/interface/assets/Recordings-CfSTX_Mw.css +1 -0
  85. package/dist/interface/assets/{SensorEdit-DF4sw0EW.js → SensorEdit-B6s-VZ3F.js} +1 -1
  86. package/dist/interface/assets/{SensorHistory-bCcPH0_I.js → SensorHistory-H03yZia0.js} +1 -1
  87. package/dist/interface/assets/Sensors-DDPUwbb-.js +2 -0
  88. package/dist/interface/assets/{Sensors-CaKl4PQY.css → Sensors-DzGV2Ngo.css} +1 -1
  89. package/dist/interface/assets/Settings-9nC18KH8.js +1 -0
  90. package/dist/interface/assets/{Settings-jQIhZFRY.css → Settings-D7495zbV.css} +1 -1
  91. package/dist/interface/assets/SettingsAccount-BTYvhCJP.js +1 -0
  92. package/dist/interface/assets/SettingsAccount-CKi0z3Bm.js +1 -0
  93. package/dist/interface/assets/SettingsAppearance-CDbQnSvl.js +1 -0
  94. package/dist/interface/assets/{SettingsAppearance-B59zzxu4.js → SettingsAppearance-D9Y28zzz.js} +1 -1
  95. package/dist/interface/assets/SettingsBackup-Bu48xw4v.js +1 -0
  96. package/dist/interface/assets/{SettingsList-Nc7OCZrn.js → SettingsList-74c5OMQf.js} +1 -1
  97. package/dist/interface/assets/SettingsMqtt-81rJ4zV6.js +1 -0
  98. package/dist/interface/assets/{SettingsNotifications-BH63oRsc.js → SettingsNotifications-xHV5KiZg.js} +1 -1
  99. package/dist/interface/assets/{SettingsPermissions-BZXAgxUl.js → SettingsPermissions-DqyVtVKE.js} +1 -1
  100. package/dist/interface/assets/{SettingsRecordings-Biyy3rTF.js → SettingsRecordings-Bxn28Frz.js} +1 -1
  101. package/dist/interface/assets/SettingsRemote-7h2dKJlF.js +2 -0
  102. package/dist/interface/assets/SettingsSystem-D-MLhCdN.js +2 -0
  103. package/dist/interface/assets/SettingsUsers-DUOJN7uO.js +1 -0
  104. package/dist/interface/assets/{Terminal-AsI0lb5n.js → Terminal-45QW5yPE.js} +2 -2
  105. package/dist/interface/assets/Training-B5SzDUAC.css +1 -0
  106. package/dist/interface/assets/Training-DWrQVSS0.js +1 -0
  107. package/dist/interface/assets/Updates-B32Pra5E.js +2 -0
  108. package/dist/interface/assets/{VariableInput-__I-FsBF.js → VariableInput-CyTGQFtz.js} +1 -1
  109. package/dist/interface/assets/{VariableSuggestions-B-7auf15.js → VariableSuggestions-BLlD4F87.js} +1 -1
  110. package/dist/interface/assets/{VersionsHandler-BTe1Ev3b.js → VersionsHandler-CIq6v6lE.js} +1 -1
  111. package/dist/interface/assets/{VirtualSensorCreate-DdLgJECI.js → VirtualSensorCreate-Di2IyYAg.js} +1 -1
  112. package/dist/interface/assets/Workers-tb039NGc.js +2 -0
  113. package/dist/interface/assets/{api-84bL4zpk.js → api-4JRK8ya0.js} +1 -1
  114. package/dist/interface/assets/api-CFf063x3.js +4 -0
  115. package/dist/interface/assets/api-eoOLTOnS.css +2 -0
  116. package/dist/interface/assets/{auth-F2wU_mtw.js → auth-ISkWvJbZ.js} +1 -1
  117. package/dist/interface/assets/{automations-D6fqhxhY.js → automations-CeH81DN-.js} +1 -1
  118. package/dist/interface/assets/{cameraSources-C3PFkewy.js → cameraSources-CgAEmb37.js} +1 -1
  119. package/dist/interface/assets/cloudHandoff-B_kCnm4R.js +1 -0
  120. package/dist/interface/assets/{config-Jzs6YXbB.js → config-DthCyQJv.js} +1 -1
  121. package/dist/interface/assets/{flowSchema-C1fWwuQa.js → flowSchema-DZ2bDhJt.js} +1 -1
  122. package/dist/interface/assets/{intercomService-fFto_C1t.js → intercomService-Bd71KwsB.js} +1 -1
  123. package/dist/interface/assets/main--lW4P3A4.js +3 -0
  124. package/dist/interface/assets/main-ExPfCNlz.css +1 -0
  125. package/dist/interface/assets/mqtt-oPORDio9.js +1 -0
  126. package/dist/interface/assets/{notifications-CIJEGR7A.js → notifications-BirFkpbF.js} +1 -1
  127. package/dist/interface/assets/{plugins-HYHSAzD-.js → plugins-vyA7MMhx.js} +1 -1
  128. package/dist/interface/assets/rooms-MfPQPywT.js +1 -0
  129. package/dist/interface/assets/{sensorIcons-ByPd6LR6.js → sensorIcons-B4H11BbT.js} +1 -1
  130. package/dist/interface/assets/{sensors-BgjfSfk6.js → sensors-xryx8Wvn.js} +1 -1
  131. package/dist/interface/assets/{server-CIDx_I6S.js → server-BK9gwxH8.js} +1 -1
  132. package/dist/interface/assets/{theme-GSy1mQOB.js → theme-DQeAzJ1v.js} +1 -1
  133. package/dist/interface/assets/{types-Do9v0d7I.js → types-Bcj_K26s.js} +1 -1
  134. package/dist/interface/assets/types-D626ASim.js +1 -0
  135. package/dist/interface/assets/{types-Dlk_iSoE.js → types-kN1Tn2Og.js} +1 -1
  136. package/dist/interface/assets/ungrouped-C6pQb0X4.css +1 -0
  137. package/dist/interface/assets/ungrouped-C_gJm6d7.js +1 -0
  138. package/dist/interface/assets/{updates-73Yq11IN.js → updates-Dzqxen12.js} +1 -1
  139. package/dist/interface/assets/{useAppVersion-B0_bYa9V.js → useAppVersion-JY7cdzlr.js} +1 -1
  140. package/dist/interface/assets/useBackupRestore-CeShFVWy.js +1 -0
  141. package/dist/interface/assets/{useCameraOptions-DKeZhfOM.js → useCameraOptions-BeUNT5Rz.js} +1 -1
  142. package/dist/interface/assets/{useLogsSocket-CmyTTUGN.js → useLogsSocket-DDSuX00j.js} +1 -1
  143. package/dist/interface/assets/{useNavLayout-DOFS3269.js → useNavLayout-DgAgRNq2.js} +1 -1
  144. package/dist/interface/assets/{usePermissions-D5I3gACT.js → usePermissions-DFzwIs8L.js} +1 -1
  145. package/dist/interface/assets/{usePluginUpdates-BWxJ04h7.js → usePluginUpdates-Bb-LOOyL.js} +1 -1
  146. package/dist/interface/assets/{usePushRegistration-DWreQ-Hn.js → usePushRegistration-iverdyzz.js} +1 -1
  147. package/dist/interface/assets/{useServerRestart-DDW-nw_t.js → useServerRestart-BchofDLe.js} +1 -1
  148. package/dist/interface/assets/{useStreamStatus-COIha2d8.js → useStreamStatus-BOJt1v1c.js} +1 -1
  149. package/dist/interface/assets/{useTabSwipe-aoMqro29.js → useTabSwipe-v0Yet-YZ.js} +1 -1
  150. package/dist/interface/assets/{useUpdateChannel-CM9MYCZy.js → useUpdateChannel-K9ADk5yx.js} +1 -1
  151. package/dist/interface/assets/{useUpdatesSocket-DY4i32ml.js → useUpdatesSocket-sj1-DmFM.js} +1 -1
  152. package/dist/interface/assets/{useUserOptions-DHfprGgA.js → useUserOptions-BnF_qBdZ.js} +1 -1
  153. package/dist/interface/assets/{vendor-cameraui-BRv7o4zz.js → vendor-cameraui-BPX4wReW.js} +1 -1
  154. package/dist/interface/assets/{vendor-core-BUse5adB.js → vendor-core-D0ANiY7g.js} +1 -1
  155. package/dist/interface/assets/{vendor-primevue-C85v-zl5.js → vendor-primevue-iEFYdXsu.js} +1 -1
  156. package/dist/interface/ha/{404-TwTUCqDv.js → 404-DlQnv9jN.js} +1 -1
  157. package/dist/interface/ha/{About-BeZkyUdW.js → About-BLQJmllv.js} +6 -6
  158. package/dist/interface/ha/{Automation-CL7j0Vgh.js → Automation-DLMPArOd.js} +184 -184
  159. package/dist/interface/ha/{AutomationImport-D7arOHP-.js → AutomationImport-Qzz3Ta4D.js} +6 -6
  160. package/dist/interface/ha/{AutomationStore-DN0yBk6X.js → AutomationStore-DNXC9s6h.js} +51 -51
  161. package/dist/interface/ha/{AutomationStoreDetail-DUuLEnvx.js → AutomationStoreDetail-CTqydRKj.js} +24 -24
  162. package/dist/interface/ha/{Automations-Dfbren5V.js → Automations-DRxe1fli.js} +102 -102
  163. package/dist/interface/ha/{Camera-BxWpvZM8.js → Camera-OrI4Wf4F.js} +180 -180
  164. package/dist/interface/ha/{CameraConsole-DT7BFGXD.js → CameraConsole-6yGhoHmu.js} +4 -4
  165. package/dist/interface/ha/{Cameras-ClmwBeNf.js → Cameras-DpEaKKDG.js} +253 -253
  166. package/dist/interface/ha/{Camview-CFAKNI6-.js → Camview-CnPz4cGs.js} +128 -128
  167. package/dist/interface/ha/{Config-D83QNz1P.js → Config-Bb2ERyAA.js} +11 -11
  168. package/dist/interface/ha/{ConfigActionCameraControl-D-2_gkM-.js → ConfigActionCameraControl-CC2tWFz2.js} +3 -3
  169. package/dist/interface/ha/{ConfigActionHttp-CDmzaJOb.js → ConfigActionHttp-DBsEL44i.js} +2 -2
  170. package/dist/interface/ha/{ConfigActionImageInput-7mA-jNIj.js → ConfigActionImageInput-Rt3AOJ3I.js} +1 -1
  171. package/dist/interface/ha/{ConfigActionMqtt-CGLqAswk.js → ConfigActionMqtt-BYSSc954.js} +4 -4
  172. package/dist/interface/ha/{ConfigActionNotification-DyhLsVfe.js → ConfigActionNotification-DKlIsZJd.js} +3 -3
  173. package/dist/interface/ha/{ConfigActionNotificationControl-C381uizv.js → ConfigActionNotificationControl-D5AVW2tR.js} +2 -2
  174. package/dist/interface/ha/{ConfigActionOutput-Cg6IMq5u.js → ConfigActionOutput-DIlu8Ujc.js} +1 -1
  175. package/dist/interface/ha/{ConfigActionPlugin-vFD_OHt8.js → ConfigActionPlugin-o1YNBh-g.js} +4 -4
  176. package/dist/interface/ha/{ConfigActionSensor-B0JYbb-_.js → ConfigActionSensor-BEvwg0tf.js} +5 -5
  177. package/dist/interface/ha/{ConfigActionSnapshot-DlYRwdII.js → ConfigActionSnapshot-Bnw0JNNj.js} +2 -2
  178. package/dist/interface/ha/{ConfigActionVariable-6HNVpSjs.js → ConfigActionVariable-oGPagsvF.js} +1 -1
  179. package/dist/interface/ha/{ConfigConditionIfElse-b5UhYSf4.js → ConfigConditionIfElse-7LCDNDvS.js} +3 -3
  180. package/dist/interface/ha/{ConfigConditionSensorState-CI1CS9qa.js → ConfigConditionSensorState-nO-s7wi6.js} +4 -4
  181. package/dist/interface/ha/{ConfigConditionSwitch-DGoKb_ZM.js → ConfigConditionSwitch-GrIKkY-P.js} +4 -4
  182. package/dist/interface/ha/{ConfigSensorValueInput-BGQytgns.js → ConfigSensorValueInput-Cthp3KXt.js} +7 -7
  183. package/dist/interface/ha/{ConfigTriggerDetection-l_h4kt0X.js → ConfigTriggerDetection-CJE9QFaK.js} +11 -11
  184. package/dist/interface/ha/{ConfigTriggerGeofence-Y2Od0L2_.js → ConfigTriggerGeofence-Cyeu7Cit.js} +5 -5
  185. package/dist/interface/ha/{ConfigTriggerMqtt-DttCVDHe.js → ConfigTriggerMqtt-D5EoOztE.js} +1 -1
  186. package/dist/interface/ha/{ConfigTriggerSensor-O4mWaXnJ.js → ConfigTriggerSensor-DYg_HRjO.js} +1 -1
  187. package/dist/interface/ha/{ConfigTriggerSystem-C_uWI6kc.js → ConfigTriggerSystem-DzpajiyS.js} +2 -2
  188. package/dist/interface/ha/{ConfigTriggerWebhook-CY5vDxZe.js → ConfigTriggerWebhook-IE4PVb4O.js} +2 -2
  189. package/dist/interface/ha/{Console-DdOU0_jE.js → Console-BYgny5Dy.js} +100 -100
  190. package/dist/interface/ha/{CuiAutomationRunsDialog-_WF5J4hV.js → CuiAutomationRunsDialog-CoYgpbW0.js} +2 -2
  191. package/dist/interface/ha/{CuiBottomSheet-Bzr2zhm3.js → CuiBottomSheet-C4cK3fYK.js} +3 -3
  192. package/dist/interface/ha/{CuiCameraRecordings-HqWrHpr-.js → CuiCameraRecordings-BAxchc71.js} +16 -15
  193. package/dist/interface/ha/{CuiCameraShares-Bw1RlqC-.js → CuiCameraShares-CfQr1iyX.js} +7 -7
  194. package/dist/interface/ha/{CuiCameraTable-DvIlmfmW.js → CuiCameraTable-B60mcEl_.js} +9 -9
  195. package/dist/interface/ha/{CuiChartTable-C6vRR9ny.js → CuiChartTable-CbUVz-Cj.js} +42 -42
  196. package/dist/interface/ha/{CuiConsole-B6fDJfvq.js → CuiConsole-DEjAQFwC.js} +19 -19
  197. package/dist/interface/ha/{CuiDataTable-BLL7vWD1.js → CuiDataTable-005ptLsa.js} +7 -7
  198. package/dist/interface/ha/{CuiPluginCard-CsJ-dlra.js → CuiPluginCard-BWwPLJ6m.js} +33 -33
  199. package/dist/interface/ha/CuiPluginOAuthButton-CgmDgRY9.js +79 -0
  200. package/dist/interface/ha/{CuiPluginTrustBadge-CQtfi3UI.js → CuiPluginTrustBadge-BWnP1whX.js} +3 -3
  201. package/dist/interface/ha/{CuiQRCode-DOj5PJo2.js → CuiQRCode-ONkk6Wqy.js} +6 -6
  202. package/dist/interface/ha/{ungrouped-aASsOUNF.js → CuiRecordingsGrid-D6HHyF1D.js} +81 -462
  203. package/dist/interface/ha/{CuiSchema-Dg43r2Vo.js → CuiSchema-C3uI1GwG.js} +138 -138
  204. package/dist/interface/ha/{CuiTopNavbarItem-CMu_hCIP.js → CuiTopNavbarItem-Bhws0XkE.js} +3 -3
  205. package/dist/interface/ha/{Faces-Ed0ytbse.js → Faces-DuxYlZGd.js} +79 -79
  206. package/dist/interface/ha/{FirstSteps-Dkw2Enre.js → FirstSteps-BAlqShSK.js} +64 -64
  207. package/dist/interface/ha/{Floorplan-IdC1tgDr.js → Floorplan-BVwSNFd6.js} +332 -332
  208. package/dist/interface/ha/{Instances-dvDlInn-.js → Instances-BM9sRNSP.js} +73 -73
  209. package/dist/interface/ha/{Logs-rUL_mLTJ.js → Logs-KISz4BU-.js} +11 -11
  210. package/dist/interface/ha/{Menu-CfMgYCN9.js → Menu-DYI6PeIn.js} +19 -19
  211. package/dist/interface/ha/{Metrics-DYNvEdb-.js → Metrics-BjpKFunA.js} +101 -101
  212. package/dist/interface/ha/{OAuthDeviceFlow-vgBWOkzP.js → OAuthDeviceFlow-DG-KUGZj.js} +4 -4
  213. package/dist/interface/ha/{Plugin-PqUW_696.js → Plugin-BjWyUUhe.js} +103 -103
  214. package/dist/interface/ha/{PluginConsole-CFJKNhQw.js → PluginConsole-BK3cotea.js} +6 -6
  215. package/dist/interface/ha/{PluginDetail-cC8nut35.js → PluginDetail-BDzDeShX.js} +13 -13
  216. package/dist/interface/ha/{PluginSearch-BzSs0ibh.js → PluginSearch-DsFUuPC-.js} +54 -54
  217. package/dist/interface/ha/{PluginUpdateProgress-CtM7lrl9.js → PluginUpdateProgress-BMrdkjRq.js} +3 -3
  218. package/dist/interface/ha/{Plugins-CzvlXEaH.js → Plugins-3WPnsHXw.js} +27 -27
  219. package/dist/interface/ha/{Recordings-BtsW8I5D.js → Recordings-0wDF4ArK.js} +153 -134
  220. package/dist/interface/ha/{SensorEdit-DMwyTDIG.js → SensorEdit-B0L2zIha.js} +359 -359
  221. package/dist/interface/ha/{SensorHistory-DoJhFbTC.js → SensorHistory-CQJEY1sW.js} +2 -2
  222. package/dist/interface/ha/{Sensors-BoRfutfx.js → Sensors-BYdBTCLo.js} +251 -251
  223. package/dist/interface/ha/{Settings-vmfs1rfj.js → Settings-BaqGiBCa.js} +24 -24
  224. package/dist/interface/ha/SettingsAccount-B0Sth0EF.js +970 -0
  225. package/dist/interface/ha/{SettingsAppearance-v9zeetcx.js → SettingsAppearance-B_oylmTa.js} +14 -14
  226. package/dist/interface/ha/{SettingsBackup-eO4r8MZe.js → SettingsBackup-BLmoV5AW.js} +8 -8
  227. package/dist/interface/ha/{SettingsList-burOi4S6.js → SettingsList-CMX7wMye.js} +5 -5
  228. package/dist/interface/ha/{SettingsMqtt-CjZERKR8.js → SettingsMqtt-C-sGwxOZ.js} +148 -148
  229. package/dist/interface/ha/SettingsNotifications-tc9FCCUF.js +529 -0
  230. package/dist/interface/ha/{SettingsRecordings-DzsXkzeu.js → SettingsRecordings-DDs16z2A.js} +6 -6
  231. package/dist/interface/ha/{SettingsRemote-B0HZwZj3.js → SettingsRemote-0c0umjFJ.js} +355 -355
  232. package/dist/interface/ha/{SettingsSystem-Bc_c8XYh.js → SettingsSystem-DfXxWXQk.js} +10 -10
  233. package/dist/interface/ha/{SettingsUsers-CxL65q1C.js → SettingsUsers-CmjC0zsF.js} +42 -42
  234. package/dist/interface/ha/{Terminal-DsX-_5R2.js → Terminal-nbUX6PPZ.js} +76 -76
  235. package/dist/interface/ha/Training-GMcD4Qg9.js +1440 -0
  236. package/dist/interface/ha/{Updates-DG9i-tQu.js → Updates-UaxBGn6D.js} +14 -14
  237. package/dist/interface/ha/{VariableInput-CcevSEwK.js → VariableInput-0bF2H1Bm.js} +1 -1
  238. package/dist/interface/ha/{VersionsHandler-5GeFt6Lw.js → VersionsHandler-CnXVnfBl.js} +10 -10
  239. package/dist/interface/ha/{VirtualSensorCreate-dWN8FANX.js → VirtualSensorCreate-BE60rAkJ.js} +7 -7
  240. package/dist/interface/ha/{Workers-D1y6eFKT.js → Workers-CaX3Z3w-.js} +104 -104
  241. package/dist/interface/ha/{api-DDUXI4DG.js → api-CmcbBFTx.js} +9738 -9383
  242. package/dist/interface/ha/{api-BgQ9AVgK.js → api-S-NnjUWl.js} +4 -4
  243. package/dist/interface/ha/{auth-C8Vp1TkJ.js → auth-CqYE7s1-.js} +24 -24
  244. package/dist/interface/ha/{automationBlueprint-DhRjWL2p.js → automationBlueprint-Dmp54JD1.js} +2 -2
  245. package/dist/interface/ha/cameraui-cards.js +1 -1
  246. package/dist/interface/ha/{cards-BGikU5nh.js → cards-MnCBmBIR.js} +121 -121
  247. package/dist/interface/ha/cloud-check-BFJzoUtz.js +33 -0
  248. package/dist/interface/ha/{config-WqhFqx8D.js → config-C94KN4WM.js} +15 -15
  249. package/dist/interface/ha/{mqtt-CQopAljB.js → mqtt-HDLqlOJt.js} +15 -15
  250. package/dist/interface/ha/{notifications-C4IU7Zbu.js → notifications-C2_2_NRh.js} +22 -22
  251. package/dist/interface/ha/{pinia-3D39Do4a.js → pinia-DLNUke3Q.js} +172 -149
  252. package/dist/interface/ha/{plugins-C2n0mAnr.js → plugins-l2i4DgqO.js} +68 -68
  253. package/dist/interface/ha/{rooms-qqdOrA2J.js → rooms-Bp1ZVAzT.js} +11 -11
  254. package/dist/interface/ha/{server-D6Yglz-z.js → server-BsduJDAB.js} +32 -32
  255. package/dist/interface/ha/{types-BtcJ7st-.js → types-iZUCCt1P.js} +30 -30
  256. package/dist/interface/ha/ungrouped-wz-KNJpA.js +426 -0
  257. package/dist/interface/ha/{updates-BuAFU-ZQ.js → updates-CDsPvhpo.js} +36 -36
  258. package/dist/interface/ha/{useAppVersion-D0EOwpoO.js → useAppVersion-BJtSGn4X.js} +1 -1
  259. package/dist/interface/ha/{useLogsSocket-CCewWMZM.js → useLogsSocket-Ck-ZQpQD.js} +1 -1
  260. package/dist/interface/ha/{useNavLayout-B_QzdVtJ.js → useNavLayout-Bn6HYs-i.js} +19 -19
  261. package/dist/interface/ha/{useServerRestart-B0OMNlwZ.js → useServerRestart-fff_KK9Y.js} +1 -1
  262. package/dist/interface/ha/{useTabSwipe-DG6Gx2Md.js → useTabSwipe-B1CQZuyT.js} +1 -1
  263. package/dist/interface/ha/{useUpdateChannel-CXDGlWX2.js → useUpdateChannel-DUBmGEDe.js} +2 -2
  264. package/dist/interface/ha/{useUpdatesSocket-BgCJLp_W.js → useUpdatesSocket-DoLb2kcJ.js} +1 -1
  265. package/dist/interface/ha/{useUserOptions-rirRksyl.js → useUserOptions-D0kNSHFH.js} +1 -1
  266. package/dist/interface/index.html +27 -27
  267. package/dist/interface/sw.js +1 -1
  268. package/dist/server/package.json +8 -8
  269. package/dist/server/src/api/controllers/training.controller.d.ts +38 -0
  270. package/dist/server/src/api/controllers/training.controller.js +97 -0
  271. package/dist/server/src/api/controllers/training.controller.js.map +1 -0
  272. package/dist/server/src/api/database/constants.d.ts +1 -0
  273. package/dist/server/src/api/database/constants.js +1 -0
  274. package/dist/server/src/api/database/constants.js.map +1 -1
  275. package/dist/server/src/api/database/index.d.ts +3 -2
  276. package/dist/server/src/api/database/index.js +4 -2
  277. package/dist/server/src/api/database/index.js.map +1 -1
  278. package/dist/server/src/api/database/migrations/v2-1-19.d.ts +3 -0
  279. package/dist/server/src/api/database/migrations/v2-1-19.js +24 -0
  280. package/dist/server/src/api/database/migrations/v2-1-19.js.map +1 -0
  281. package/dist/server/src/api/database/record-schemas.d.ts +6 -1
  282. package/dist/server/src/api/database/record-schemas.js +7 -0
  283. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  284. package/dist/server/src/api/database/types.d.ts +27 -0
  285. package/dist/server/src/api/index.js +1 -1
  286. package/dist/server/src/api/index.js.map +1 -1
  287. package/dist/server/src/api/render-index.js +1 -1
  288. package/dist/server/src/api/render-index.js.map +1 -1
  289. package/dist/server/src/api/routes/index.js +2 -0
  290. package/dist/server/src/api/routes/index.js.map +1 -1
  291. package/dist/server/src/api/routes/training.routes.d.ts +2 -0
  292. package/dist/server/src/api/routes/training.routes.js +106 -0
  293. package/dist/server/src/api/routes/training.routes.js.map +1 -0
  294. package/dist/server/src/api/schemas/cameras.schema.d.ts +76 -76
  295. package/dist/server/src/api/schemas/remote.schema.d.ts +1 -1
  296. package/dist/server/src/api/schemas/training.schema.d.ts +42 -0
  297. package/dist/server/src/api/schemas/training.schema.js +42 -0
  298. package/dist/server/src/api/schemas/training.schema.js.map +1 -0
  299. package/dist/server/src/api/services/cameras.service.js +7 -2
  300. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  301. package/dist/server/src/api/websocket/index.js +3 -1
  302. package/dist/server/src/api/websocket/index.js.map +1 -1
  303. package/dist/server/src/api/websocket/nsp/training.d.ts +11 -0
  304. package/dist/server/src/api/websocket/nsp/training.js +29 -0
  305. package/dist/server/src/api/websocket/nsp/training.js.map +1 -0
  306. package/dist/server/src/api/websocket/types.d.ts +1 -1
  307. package/dist/server/src/camera/decoder/detection-coordinator.d.ts +1 -0
  308. package/dist/server/src/camera/decoder/detection-coordinator.js +31 -1
  309. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  310. package/dist/server/src/camera/decoder/event-manager.d.ts +6 -0
  311. package/dist/server/src/camera/decoder/event-manager.js +43 -1
  312. package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
  313. package/dist/server/src/camera/decoder/training-sink.d.ts +26 -0
  314. package/dist/server/src/camera/decoder/training-sink.js +131 -0
  315. package/dist/server/src/camera/decoder/training-sink.js.map +1 -0
  316. package/dist/server/src/camera/decoder/types.d.ts +4 -0
  317. package/dist/server/src/camera/decoder/types.js +12 -0
  318. package/dist/server/src/camera/decoder/types.js.map +1 -1
  319. package/dist/server/src/manager/coreManager.d.ts +3 -1
  320. package/dist/server/src/manager/coreManager.js +18 -0
  321. package/dist/server/src/manager/coreManager.js.map +1 -1
  322. package/dist/server/src/manager/trainingCandidateManager.d.ts +42 -0
  323. package/dist/server/src/manager/trainingCandidateManager.js +250 -0
  324. package/dist/server/src/manager/trainingCandidateManager.js.map +1 -0
  325. package/dist/server/src/manager/types.d.ts +18 -0
  326. package/dist/server/src/manager/types.js.map +1 -1
  327. package/dist/server/src/remote/api/index.d.ts +2 -0
  328. package/dist/server/src/remote/api/index.js +3 -0
  329. package/dist/server/src/remote/api/index.js.map +1 -1
  330. package/dist/server/src/remote/api/routes/oauth.js +1 -1
  331. package/dist/server/src/remote/api/routes/oauth.js.map +1 -1
  332. package/dist/server/src/remote/api/routes/train.d.ts +19 -0
  333. package/dist/server/src/remote/api/routes/train.js +47 -0
  334. package/dist/server/src/remote/api/routes/train.js.map +1 -0
  335. package/dist/server/src/rpc/index.d.ts +2 -0
  336. package/dist/server/src/rpc/index.js +5 -0
  337. package/dist/server/src/rpc/index.js.map +1 -1
  338. package/dist/server/src/rpc/interfaces/core.d.ts +21 -0
  339. package/dist/server/src/rpc/server.js +2 -0
  340. package/dist/server/src/rpc/server.js.map +1 -1
  341. package/package.json +8 -8
  342. package/dist/interface/assets/Automation-DThD-djr.js +0 -3
  343. package/dist/interface/assets/AutomationImport-CHKkZqA4.js +0 -2
  344. package/dist/interface/assets/AutomationStore-Aon4kqZU.js +0 -2
  345. package/dist/interface/assets/AutomationStoreDetail-CfZ45tLW.js +0 -2
  346. package/dist/interface/assets/Automations-BkRuMd-d.js +0 -2
  347. package/dist/interface/assets/Camera-BWdUUW_H.css +0 -1
  348. package/dist/interface/assets/Camera-G6xTnRAk.js +0 -2
  349. package/dist/interface/assets/Camview-BZS4_jv1.css +0 -1
  350. package/dist/interface/assets/Camview-BjCuw7nI.js +0 -1
  351. package/dist/interface/assets/Config-BTXb1LHN.js +0 -2
  352. package/dist/interface/assets/ConfigTriggerGeofence-DLuNWaN6.js +0 -1
  353. package/dist/interface/assets/CuiBottomSheet-BGVpKjqe.js +0 -1
  354. package/dist/interface/assets/CuiBottomSheet-DOW6gNj0.js +0 -1
  355. package/dist/interface/assets/CuiBottomSheet-DsjZEdig.css +0 -1
  356. package/dist/interface/assets/CuiCameraPipCard-BBMkU-eN.js +0 -1
  357. package/dist/interface/assets/CuiCameraRecordings-h6Yel4J4.js +0 -1
  358. package/dist/interface/assets/CuiCameraShares-C9Th3jEn.js +0 -1
  359. package/dist/interface/assets/CuiCameraTable-Cti7FZma.js +0 -1
  360. package/dist/interface/assets/CuiLightControl-BhBIiPv-.js +0 -1
  361. package/dist/interface/assets/CuiPluginCard-yYGvVtDJ.js +0 -2
  362. package/dist/interface/assets/CuiPluginOAuthButton-C8VRPoMj.js +0 -2
  363. package/dist/interface/assets/CuiQRCode-DY5Q-Xel.js +0 -1
  364. package/dist/interface/assets/CuiSchema-Dy2eRCu2.js +0 -1
  365. package/dist/interface/assets/CuiTopNavbarItem-Btig8IUi.js +0 -1
  366. package/dist/interface/assets/Faces-D5PMl5Bx.js +0 -1
  367. package/dist/interface/assets/FirstSteps-BcjeaLz_.js +0 -1
  368. package/dist/interface/assets/Floorplan-DHl3zibU.js +0 -1
  369. package/dist/interface/assets/Instances-DXksjsQR.js +0 -1
  370. package/dist/interface/assets/Metrics-BWTImHsV.js +0 -9
  371. package/dist/interface/assets/Plugin-D5WuhMPO.js +0 -1
  372. package/dist/interface/assets/PluginDetail-3qrahg0_.js +0 -2
  373. package/dist/interface/assets/PluginSearch-D8zmSpkN.js +0 -2
  374. package/dist/interface/assets/PluginSearch-D_ba5x-O.js +0 -1
  375. package/dist/interface/assets/Plugins-5MzJrkSA.js +0 -1
  376. package/dist/interface/assets/Recordings-BuGuUwYE.js +0 -1
  377. package/dist/interface/assets/Recordings-D4NzYCO9.css +0 -1
  378. package/dist/interface/assets/Sensors-D6GwAXQ2.js +0 -2
  379. package/dist/interface/assets/Settings-BZf-ziEZ.js +0 -1
  380. package/dist/interface/assets/SettingsAccount--5p79E6E.js +0 -1
  381. package/dist/interface/assets/SettingsAccount-Dlc0Wddo.js +0 -1
  382. package/dist/interface/assets/SettingsAppearance-xPKxmDpp.js +0 -1
  383. package/dist/interface/assets/SettingsBackup-CJJ5VBzp.js +0 -1
  384. package/dist/interface/assets/SettingsMqtt-DUUAcYuG.js +0 -1
  385. package/dist/interface/assets/SettingsRemote-Dbaxaq5H.js +0 -2
  386. package/dist/interface/assets/SettingsSystem-DzHIleOc.js +0 -2
  387. package/dist/interface/assets/SettingsUsers-D5YuEr7c.js +0 -1
  388. package/dist/interface/assets/Updates-DnAut-3U.js +0 -2
  389. package/dist/interface/assets/Workers-6aoL2zvF.js +0 -2
  390. package/dist/interface/assets/api-BI5TkcMD.js +0 -4
  391. package/dist/interface/assets/api-BTWXbCPQ.css +0 -2
  392. package/dist/interface/assets/cloudHandoff-B1HA65AZ.js +0 -1
  393. package/dist/interface/assets/main-C6AqiNZK.js +0 -3
  394. package/dist/interface/assets/main-Qqk3RyYP.css +0 -1
  395. package/dist/interface/assets/mqtt-DGNlVikj.js +0 -1
  396. package/dist/interface/assets/rooms-DL_uUrGc.js +0 -1
  397. package/dist/interface/assets/types-QIK1kdY6.js +0 -1
  398. package/dist/interface/assets/ungrouped-CupkuPIQ.js +0 -1
  399. package/dist/interface/assets/ungrouped-DTYy_Pud.css +0 -1
  400. package/dist/interface/assets/useBackupRestore-jdHT_hab.js +0 -1
  401. package/dist/interface/ha/CuiPluginOAuthButton-ChNW42ux.js +0 -105
  402. package/dist/interface/ha/SettingsAccount-xJy6kGf6.js +0 -970
  403. package/dist/interface/ha/SettingsNotifications-QCKfSffa.js +0 -529
@@ -0,0 +1,250 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, readdir, readFile, unlink, writeFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { container } from 'tsyringe';
5
+ const DEFAULT_SETTINGS = { enabled: true, perCameraLimit: 200, minIntervalSeconds: 10, retentionDays: 14 };
6
+ const SUBMIT_ITEM_DELAY_MS = 750;
7
+ const SUBMIT_EMIT_INTERVAL_MS = 1000;
8
+ const RETENTION_SWEEP_INTERVAL_MS = 6 * 60 * 60 * 1000;
9
+ export class TrainingCandidateManager {
10
+ logger;
11
+ dbs;
12
+ imagesDir;
13
+ lastIngestAt = new Map();
14
+ submitQueue = [];
15
+ submitQueued = new Set();
16
+ submitWorker;
17
+ submitProgress = { total: 0, done: 0, failed: 0 };
18
+ lastSubmitEmitAt = 0;
19
+ retentionTimer;
20
+ constructor() {
21
+ this.logger = container.resolve('logger');
22
+ this.dbs = container.resolve('dbs');
23
+ this.imagesDir = join(container.resolve('configService').STORAGE_PATH, 'training-candidates');
24
+ container.registerInstance('trainingCandidateManager', this);
25
+ }
26
+ async register() {
27
+ await mkdir(this.imagesDir, { recursive: true }).catch(() => { });
28
+ this.pruneOrphanImages().catch(() => { });
29
+ this.resetUploadLeftovers().catch(() => { });
30
+ this.pruneExpired().catch(() => { });
31
+ this.retentionTimer = setInterval(() => this.pruneExpired().catch(() => { }), RETENTION_SWEEP_INTERVAL_MS);
32
+ }
33
+ async destroy() {
34
+ clearInterval(this.retentionTimer);
35
+ }
36
+ getSettings() {
37
+ return { ...DEFAULT_SETTINGS, ...this.dbs.settingsDB.get('settings')?.training };
38
+ }
39
+ async updateSettings(patch) {
40
+ const next = { ...this.getSettings(), ...patch };
41
+ await this.dbs.commit(this.dbs.settingsDB, 'settings', (settings) => (settings ? { ...settings, training: next } : undefined));
42
+ if (patch.enabled !== undefined) {
43
+ container.resolve('proxy').coreManager?.publishCoreManagerEvent('trainingSettingsChanged', { enabled: next.enabled });
44
+ }
45
+ return next;
46
+ }
47
+ list(filter) {
48
+ const items = [];
49
+ for (const { value } of this.dbs.trainingCandidatesDB.getRange()) {
50
+ if (filter?.cameraId && value.cameraId !== filter.cameraId)
51
+ continue;
52
+ if (filter?.status && value.status !== filter.status)
53
+ continue;
54
+ items.push(value);
55
+ }
56
+ return items.sort((a, b) => b.createdAt - a.createdAt);
57
+ }
58
+ get(id) {
59
+ return this.dbs.trainingCandidatesDB.get(id);
60
+ }
61
+ imagePath(id) {
62
+ return this.dbs.trainingCandidatesDB.get(id) ? join(this.imagesDir, `${id}.jpg`) : null;
63
+ }
64
+ async update(id, patch) {
65
+ if (!this.dbs.trainingCandidatesDB.get(id))
66
+ return undefined;
67
+ await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (candidate) => candidate ? { ...candidate, ...patch, upload: undefined, uploadError: undefined } : undefined);
68
+ const updated = this.dbs.trainingCandidatesDB.get(id);
69
+ this.emitChanged(updated?.cameraId);
70
+ return updated;
71
+ }
72
+ async queueSubmit(ids) {
73
+ let queued = 0;
74
+ for (const id of ids) {
75
+ const candidate = this.dbs.trainingCandidatesDB.get(id);
76
+ if (candidate?.status !== 'verified' || this.isUploadLocked(candidate) || this.submitQueued.has(id))
77
+ continue;
78
+ await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'queued', uploadError: undefined } : undefined));
79
+ this.submitQueued.add(id);
80
+ this.submitQueue.push(id);
81
+ queued++;
82
+ }
83
+ if (queued > 0) {
84
+ this.submitProgress.total += queued;
85
+ this.emitChanged();
86
+ this.emitSubmitProgress(true);
87
+ this.submitWorker ??= this.runSubmitQueue().finally(() => {
88
+ this.submitWorker = undefined;
89
+ });
90
+ }
91
+ return { queued };
92
+ }
93
+ isUploadLocked(candidate) {
94
+ return candidate.upload === 'queued' || candidate.upload === 'uploading';
95
+ }
96
+ currentSubmitProgress() {
97
+ return { active: this.submitWorker !== undefined, ...this.submitProgress };
98
+ }
99
+ async listSubmissions() {
100
+ const items = await container.resolve('cloudApi').trainRoute.list();
101
+ return items.map((s) => ({
102
+ id: s.id,
103
+ labels: s.labels,
104
+ imageBytes: s.image_bytes,
105
+ createdAt: s.created_at,
106
+ usedInWave: s.used_in_wave,
107
+ imageUrl: s.image_url,
108
+ }));
109
+ }
110
+ async removeSubmission(id) {
111
+ await container.resolve('cloudApi').trainRoute.remove(id);
112
+ }
113
+ async remove(id) {
114
+ const candidate = this.dbs.trainingCandidatesDB.get(id);
115
+ if (!candidate)
116
+ return false;
117
+ await this.dbs.trainingCandidatesDB.remove(id);
118
+ await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
119
+ this.emitChanged(candidate.cameraId);
120
+ return true;
121
+ }
122
+ async ingest(payload) {
123
+ const settings = this.getSettings();
124
+ if (!settings.enabled)
125
+ return 'disabled';
126
+ if (payload.boxes.length === 0 || payload.scene.length === 0)
127
+ return 'skip';
128
+ const last = this.lastIngestAt.get(payload.cameraId) ?? 0;
129
+ if (payload.capturedAt - last < settings.minIntervalSeconds * 1000)
130
+ return 'skip';
131
+ this.lastIngestAt.set(payload.cameraId, payload.capturedAt);
132
+ const id = randomUUID();
133
+ await writeFile(join(this.imagesDir, `${id}.jpg`), payload.scene);
134
+ this.dbs.trainingCandidatesDB.put(id, {
135
+ id,
136
+ cameraId: payload.cameraId,
137
+ eventId: payload.eventId,
138
+ createdAt: payload.capturedAt,
139
+ status: 'new',
140
+ boxes: payload.boxes,
141
+ });
142
+ await this.enforceCameraLimit(payload.cameraId, settings.perCameraLimit);
143
+ this.emitChanged(payload.cameraId);
144
+ return 'stored';
145
+ }
146
+ async enforceCameraLimit(cameraId, limit) {
147
+ // verified candidates are the user's work, eviction only eats unreviewed ones
148
+ const candidates = this.list({ cameraId });
149
+ const evictable = candidates.filter((c) => c.status !== 'verified');
150
+ const overflow = candidates.length - limit;
151
+ if (overflow <= 0)
152
+ return;
153
+ for (const candidate of evictable.slice(-overflow)) {
154
+ await this.dbs.trainingCandidatesDB.remove(candidate.id);
155
+ await unlink(join(this.imagesDir, `${candidate.id}.jpg`)).catch(() => { });
156
+ }
157
+ }
158
+ async pruneExpired() {
159
+ const cutoff = Date.now() - this.getSettings().retentionDays * 24 * 60 * 60 * 1000;
160
+ let removed = 0;
161
+ for (const { key, value } of this.dbs.trainingCandidatesDB.getRange()) {
162
+ if (value.status !== 'new' || value.createdAt >= cutoff || this.isUploadLocked(value))
163
+ continue;
164
+ const id = String(key);
165
+ await this.dbs.trainingCandidatesDB.remove(id);
166
+ await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
167
+ removed++;
168
+ }
169
+ if (removed > 0) {
170
+ this.logger.debug(`Training: pruned ${removed} expired candidates`);
171
+ this.emitChanged();
172
+ }
173
+ }
174
+ async pruneOrphanImages() {
175
+ const files = await readdir(this.imagesDir).catch(() => []);
176
+ if (files.length === 0)
177
+ return;
178
+ const referenced = new Set();
179
+ for (const { key } of this.dbs.trainingCandidatesDB.getRange())
180
+ referenced.add(String(key));
181
+ for (const file of files) {
182
+ if (referenced.has(file.replace(/\.jpg$/, '')))
183
+ continue;
184
+ await unlink(join(this.imagesDir, file)).catch(() => { });
185
+ }
186
+ }
187
+ async runSubmitQueue() {
188
+ const cloudApi = container.resolve('cloudApi');
189
+ for (;;) {
190
+ const id = this.submitQueue.shift();
191
+ if (!id)
192
+ break;
193
+ this.submitQueued.delete(id);
194
+ const candidate = this.dbs.trainingCandidatesDB.get(id);
195
+ if (candidate?.status !== 'verified')
196
+ continue;
197
+ await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'uploading' } : undefined));
198
+ try {
199
+ const image = await readFile(join(this.imagesDir, `${id}.jpg`));
200
+ await cloudApi.trainRoute.submit(candidate.boxes, candidate.createdAt, image);
201
+ await this.dbs.trainingCandidatesDB.remove(id);
202
+ await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
203
+ this.submitProgress.done++;
204
+ }
205
+ catch (error) {
206
+ const message = error?.message ?? String(error);
207
+ await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'failed', uploadError: message } : undefined));
208
+ this.submitProgress.failed++;
209
+ }
210
+ const now = Date.now();
211
+ if (now - this.lastSubmitEmitAt >= SUBMIT_EMIT_INTERVAL_MS || this.submitQueue.length === 0) {
212
+ this.lastSubmitEmitAt = now;
213
+ this.emitChanged(candidate.cameraId);
214
+ this.emitSubmitProgress(true);
215
+ }
216
+ if (this.submitQueue.length > 0)
217
+ await new Promise((resolve) => setTimeout(resolve, SUBMIT_ITEM_DELAY_MS));
218
+ }
219
+ this.emitSubmitProgress(false);
220
+ this.submitProgress = { total: 0, done: 0, failed: 0 };
221
+ }
222
+ async resetUploadLeftovers() {
223
+ for (const { key, value } of this.dbs.trainingCandidatesDB.getRange()) {
224
+ const id = String(key);
225
+ if (value.submittedAt || value.status === 'ignored') {
226
+ await this.dbs.trainingCandidatesDB.remove(id);
227
+ await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
228
+ continue;
229
+ }
230
+ if (this.isUploadLocked(value)) {
231
+ await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: undefined } : undefined));
232
+ }
233
+ }
234
+ }
235
+ emitSubmitProgress(active) {
236
+ this.trainingNamespace()?.emitSubmitProgress({ active, ...this.submitProgress });
237
+ }
238
+ trainingNamespace() {
239
+ try {
240
+ return container.resolve('socketService').namespaces.get('/training');
241
+ }
242
+ catch {
243
+ return undefined;
244
+ }
245
+ }
246
+ emitChanged(cameraId) {
247
+ this.trainingNamespace()?.emitCandidatesChanged(cameraId);
248
+ }
249
+ }
250
+ //# sourceMappingURL=trainingCandidateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trainingCandidateManager.js","sourceRoot":"","sources":["../../../../src/manager/trainingCandidateManager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Notification, NotifierDevice } from '@camera.ui/sdk';
2
+ import type { DBTrainingCandidateBox } from '../api/database/types.js';
2
3
  export type NotificationSourceKind = 'plugin' | 'system' | 'automation';
3
4
  export interface NotificationSource {
4
5
  id: string;
@@ -41,3 +42,20 @@ export interface NotifierDeviceWithSource extends NotifierDevice {
41
42
  pluginId: string;
42
43
  pluginName: string;
43
44
  }
45
+ export interface TrainingSubmitResult {
46
+ queued: number;
47
+ }
48
+ export interface TrainingSubmitProgress {
49
+ active: boolean;
50
+ total: number;
51
+ done: number;
52
+ failed: number;
53
+ }
54
+ export interface TrainingSubmission {
55
+ id: string;
56
+ labels: DBTrainingCandidateBox[];
57
+ imageBytes: number;
58
+ createdAt: string;
59
+ usedInWave?: string;
60
+ imageUrl?: string;
61
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/manager/types.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,qBAAqB,EAAE,gCAAgC;IACvD,aAAa,EAAE,uBAAuB;IACtC,kBAAkB,EAAE,4BAA4B;IAChD,eAAe,EAAE,yBAAyB;IAC1C,kBAAkB,EAAE,6BAA6B;IACjD,qBAAqB,EAAE,gCAAgC;IACvD,WAAW,EAAE,8BAA8B;CACnC,CAAC;AAIX,MAAM,CAAC,MAAM,yBAAyB,GAAsC;IAC1E,EAAE,IAAI,EAAE,wBAAwB,CAAC,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3F,EAAE,IAAI,EAAE,wBAAwB,CAAC,aAAa,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACrF,EAAE,IAAI,EAAE,wBAAwB,CAAC,kBAAkB,EAAE,KAAK,EAAE,iCAAiC,EAAE;IAC/F,EAAE,IAAI,EAAE,wBAAwB,CAAC,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACpF,EAAE,IAAI,EAAE,wBAAwB,CAAC,kBAAkB,EAAE,KAAK,EAAE,sBAAsB,EAAE;IACpF,EAAE,IAAI,EAAE,wBAAwB,CAAC,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3F,EAAE,IAAI,EAAE,wBAAwB,CAAC,WAAW,EAAE,KAAK,EAAE,wBAAwB,EAAE;CACvE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/manager/types.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,qBAAqB,EAAE,gCAAgC;IACvD,aAAa,EAAE,uBAAuB;IACtC,kBAAkB,EAAE,4BAA4B;IAChD,eAAe,EAAE,yBAAyB;IAC1C,kBAAkB,EAAE,6BAA6B;IACjD,qBAAqB,EAAE,gCAAgC;IACvD,WAAW,EAAE,8BAA8B;CACnC,CAAC;AAIX,MAAM,CAAC,MAAM,yBAAyB,GAAsC;IAC1E,EAAE,IAAI,EAAE,wBAAwB,CAAC,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3F,EAAE,IAAI,EAAE,wBAAwB,CAAC,aAAa,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACrF,EAAE,IAAI,EAAE,wBAAwB,CAAC,kBAAkB,EAAE,KAAK,EAAE,iCAAiC,EAAE;IAC/F,EAAE,IAAI,EAAE,wBAAwB,CAAC,eAAe,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACpF,EAAE,IAAI,EAAE,wBAAwB,CAAC,kBAAkB,EAAE,KAAK,EAAE,sBAAsB,EAAE;IACpF,EAAE,IAAI,EAAE,wBAAwB,CAAC,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3F,EAAE,IAAI,EAAE,wBAAwB,CAAC,WAAW,EAAE,KAAK,EAAE,wBAAwB,EAAE;CACvE,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { CloudCredentialStore } from './credentialStore.js';
2
2
  import { OAuthRoute } from './routes/oauth.js';
3
3
  import { ServerRoute } from './routes/server.js';
4
+ import { TrainRoute } from './routes/train.js';
4
5
  export declare class CloudApi {
5
6
  readonly oauthRoute: OAuthRoute;
6
7
  readonly serverRoute: ServerRoute;
8
+ readonly trainRoute: TrainRoute;
7
9
  readonly credentialStore: CloudCredentialStore;
8
10
  constructor();
9
11
  }
@@ -2,15 +2,18 @@ import { container } from 'tsyringe';
2
2
  import { CloudCredentialStore } from './credentialStore.js';
3
3
  import { OAuthRoute } from './routes/oauth.js';
4
4
  import { ServerRoute } from './routes/server.js';
5
+ import { TrainRoute } from './routes/train.js';
5
6
  export class CloudApi {
6
7
  oauthRoute;
7
8
  serverRoute;
9
+ trainRoute;
8
10
  credentialStore;
9
11
  constructor() {
10
12
  container.registerInstance('cloudApi', this);
11
13
  this.credentialStore = new CloudCredentialStore();
12
14
  this.oauthRoute = new OAuthRoute(this.credentialStore);
13
15
  this.serverRoute = new ServerRoute(this.credentialStore);
16
+ this.trainRoute = new TrainRoute(this.credentialStore);
14
17
  }
15
18
  }
16
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/remote/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,QAAQ;IACH,UAAU,CAAa;IACvB,WAAW,CAAc;IACzB,eAAe,CAAuB;IAEtD;QACE,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/remote/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,QAAQ;IACH,UAAU,CAAa;IACvB,WAAW,CAAc;IACzB,UAAU,CAAa;IACvB,eAAe,CAAuB;IAEtD;QACE,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  import { hostname } from 'node:os';
2
2
  import { assertResponseOk, cloudFetch } from '../instance.js';
3
3
  const CLIENT_ID = 'camera-ui-server';
4
- const SCOPES = 'server:register server:update server:share server:unregister tunnel:connect';
4
+ const SCOPES = 'server:register server:update server:share server:unregister tunnel:connect train:submit';
5
5
  export class OAuthRoute {
6
6
  credentialStore;
7
7
  constructor(credentialStore) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../src/remote/api/routes/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAsB9D,MAAM,SAAS,GAAG,kBAAkB,CAAC;AACrC,MAAM,MAAM,GAAG,6EAA6E,CAAC;AAE7F,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,eAAqC;QAArC,oBAAe,GAAf,eAAe,CAAsB;IAAG,CAAC;IAEtD,KAAK,CAAC,eAAe,CAAC,iBAA0B;QACrD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,QAAQ,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI;SACL,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,8CAA8C;gBAC1D,WAAW,EAAE,UAAU;gBACvB,SAAS,EAAE,SAAS;aACrB,CAAC;SACH,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAQ7B,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;gBACjC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI;gBACtD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;aAChC,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,eAAe,EAAE;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SAChF,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../src/remote/api/routes/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DBTrainingCandidateBox } from '../../../api/database/types.js';
2
+ import type { CloudCredentialStore } from '../credentialStore.js';
3
+ export interface CloudTrainSubmission {
4
+ id: string;
5
+ status: string;
6
+ labels: DBTrainingCandidateBox[];
7
+ image_bytes: number;
8
+ created_at: string;
9
+ used_in_wave?: string;
10
+ image_url?: string;
11
+ }
12
+ export declare class TrainRoute {
13
+ private credentialStore;
14
+ constructor(credentialStore: CloudCredentialStore);
15
+ submit(boxes: DBTrainingCandidateBox[], capturedAt: number, image: Buffer): Promise<string>;
16
+ list(): Promise<CloudTrainSubmission[]>;
17
+ remove(id: string): Promise<void>;
18
+ private fetchCloud;
19
+ }
@@ -0,0 +1,47 @@
1
+ import { assertResponseOk, cloudFetch } from '../instance.js';
2
+ export class TrainRoute {
3
+ credentialStore;
4
+ constructor(credentialStore) {
5
+ this.credentialStore = credentialStore;
6
+ }
7
+ async submit(boxes, capturedAt, image) {
8
+ const createRes = await this.fetchCloud()('/api/v1/train/submissions', {
9
+ method: 'POST',
10
+ headers: { 'Content-Type': 'application/json' },
11
+ body: JSON.stringify({ boxes, captured_at: capturedAt }),
12
+ });
13
+ await assertResponseOk(createRes);
14
+ const created = (await createRes.json());
15
+ if (image.byteLength > created.max_image_bytes) {
16
+ throw new Error('Image exceeds the submission size limit');
17
+ }
18
+ const uploadRes = await fetch(created.upload_url, {
19
+ method: 'PUT',
20
+ headers: created.upload_headers,
21
+ body: new Uint8Array(image),
22
+ });
23
+ if (!uploadRes.ok) {
24
+ throw new Error(`Image upload failed (${uploadRes.status})`);
25
+ }
26
+ const completeRes = await this.fetchCloud()(`/api/v1/train/submissions/${created.id}/complete`, { method: 'POST' });
27
+ await assertResponseOk(completeRes);
28
+ return created.id;
29
+ }
30
+ async list() {
31
+ const res = await this.fetchCloud()('/api/v1/train/submissions', { method: 'GET' });
32
+ await assertResponseOk(res);
33
+ return (await res.json());
34
+ }
35
+ async remove(id) {
36
+ const res = await this.fetchCloud()(`/api/v1/train/submissions/${id}`, { method: 'DELETE' });
37
+ await assertResponseOk(res);
38
+ }
39
+ fetchCloud() {
40
+ return cloudFetch({
41
+ target: 'cloud',
42
+ credentialStore: this.credentialStore,
43
+ requiredScopes: ['train:submit'],
44
+ });
45
+ }
46
+ }
47
+ //# sourceMappingURL=train.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train.js","sourceRoot":"","sources":["../../../../../../src/remote/api/routes/train.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAsB9D,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,eAAqC;QAArC,oBAAe,GAAf,eAAe,CAAsB;IAAG,CAAC;IAEtD,KAAK,CAAC,MAAM,CAAC,KAA+B,EAAE,UAAkB,EAAE,KAAa;QACpF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,2BAA2B,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAkC,CAAC;QAE1E,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAAO,CAAC,cAAc;YAC/B,IAAI,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,6BAA6B,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACpH,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,EAAE,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAEO,UAAU;QAChB,OAAO,UAAU,CAAC;YAChB,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,CAAC,cAAc,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -5,6 +5,7 @@ import { DiscoveryManager } from '../manager/discoveryManager.js';
5
5
  import { DownloadManager } from '../manager/downloadManager.js';
6
6
  import { NotificationManager } from '../manager/notificationManager.js';
7
7
  import { TerminalManager } from '../manager/terminalManager.js';
8
+ import { TrainingCandidateManager } from '../manager/trainingCandidateManager.js';
8
9
  import { NATS } from './server.js';
9
10
  import type { RPCClient } from '@camera.ui/rpc';
10
11
  import type { ProxyAuth } from './interfaces/config.js';
@@ -17,6 +18,7 @@ export declare class ProxyServer {
17
18
  discoveryManager: DiscoveryManager;
18
19
  downloadManager: DownloadManager;
19
20
  notificationManager: NotificationManager;
21
+ trainingCandidateManager: TrainingCandidateManager;
20
22
  terminalManager: TerminalManager;
21
23
  auth: ProxyAuth;
22
24
  private api?;
@@ -10,6 +10,7 @@ import { DiscoveryManager } from '../manager/discoveryManager.js';
10
10
  import { DownloadManager } from '../manager/downloadManager.js';
11
11
  import { NotificationManager } from '../manager/notificationManager.js';
12
12
  import { TerminalManager } from '../manager/terminalManager.js';
13
+ import { TrainingCandidateManager } from '../manager/trainingCandidateManager.js';
13
14
  import { NATS } from './server.js';
14
15
  import { generateCredentials, safeAsync } from './utils.js';
15
16
  export class ProxyServer {
@@ -21,6 +22,7 @@ export class ProxyServer {
21
22
  discoveryManager;
22
23
  downloadManager;
23
24
  notificationManager;
25
+ trainingCandidateManager;
24
26
  terminalManager;
25
27
  auth = {
26
28
  cluster: generateCredentials(),
@@ -53,6 +55,7 @@ export class ProxyServer {
53
55
  this.downloadManager = new DownloadManager();
54
56
  this.notificationManager = new NotificationManager();
55
57
  this.terminalManager = new TerminalManager();
58
+ this.trainingCandidateManager = new TrainingCandidateManager();
56
59
  // this.api.setMaxListeners(this.api.getMaxListeners() + 1);
57
60
  // this.api.once(API_EVENT.SHUTDOWN, this.close.bind(this));
58
61
  }
@@ -121,6 +124,7 @@ export class ProxyServer {
121
124
  await this.discoveryManager.register();
122
125
  await this.downloadManager.register();
123
126
  await this.notificationManager.register();
127
+ await this.trainingCandidateManager.register();
124
128
  await this.terminalManager.register();
125
129
  }
126
130
  }
@@ -131,6 +135,7 @@ export class ProxyServer {
131
135
  await safeAsync(this.downloadManager.destroy());
132
136
  await safeAsync(this.discoveryManager.destroy());
133
137
  await safeAsync(this.notificationManager.destroy());
138
+ await safeAsync(this.trainingCandidateManager.destroy());
134
139
  }
135
140
  await safeAsync(this.server.stop());
136
141
  // proxy is unset when startup failed before initialize() (e.g. pairing)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rpc/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rpc/index.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,25 @@ export interface FloorPlan {
7
7
  rooms: DBRoomCatalog;
8
8
  plan: DBFloorPlan;
9
9
  }
10
+ export interface TrainingCandidateBox {
11
+ label: string;
12
+ confidence: number;
13
+ x: number;
14
+ y: number;
15
+ width: number;
16
+ height: number;
17
+ }
18
+ export interface TrainingCandidateIngest {
19
+ cameraId: string;
20
+ eventId: string;
21
+ capturedAt: number;
22
+ boxes: TrainingCandidateBox[];
23
+ scene: Uint8Array;
24
+ }
25
+ export type TrainingIngestResult = 'stored' | 'skip' | 'disabled';
10
26
  export interface CoreManagerInterface {
27
+ ingestTrainingCandidate(payload: TrainingCandidateIngest): Promise<TrainingIngestResult>;
28
+ getTrainingCollectionEnabled(): Promise<boolean>;
11
29
  getFFmpegPath(): Promise<string>;
12
30
  getServerAddresses(): Promise<string[]>;
13
31
  getCloudServerId(): Promise<string>;
@@ -19,6 +37,9 @@ export interface CoreManagerProxyEvents {
19
37
  cloudAccountChanged: {
20
38
  connected: boolean;
21
39
  };
40
+ trainingSettingsChanged: {
41
+ enabled: boolean;
42
+ };
22
43
  pluginStatusChanged: {
23
44
  pluginName: string;
24
45
  running: boolean;
@@ -95,6 +95,8 @@ export class NATS {
95
95
  'rpc.plugin.*.child.rpc.getSystemEvents',
96
96
  'rpc.plugin.*.child.rpc.getClipReindexStatus',
97
97
  'rpc.plugin.*.child.rpc.onClipReindex',
98
+ 'rpc.plugin.*.child.rpc.getFacesRescanStatus',
99
+ 'rpc.plugin.*.child.rpc.onFacesRescan',
98
100
  'rpc.plugin.*.child.rpc.onRecordingState',
99
101
  'rpc.plugin.*.child.rpc.onSystemEvent',
100
102
  'rpc.plugin.*.child.rpc.onEventsDeleted',