@camera.ui/server 2.1.15 → 2.1.17
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.
- package/dist/interface/assets/{404-DwgMdXqW.js → 404-Cg1J2LX8.js} +1 -1
- package/dist/interface/assets/{About-REFUgZk_.js → About-CW7G6onF.js} +1 -1
- package/dist/interface/assets/Automation-CIwBJK1Y.js +3 -0
- package/dist/interface/assets/AutomationImport-CHkNv7C-.js +2 -0
- package/dist/interface/assets/AutomationStore-5bTym-Gl.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-BF8UoG_l.js +2 -0
- package/dist/interface/assets/Automations-CaX2fHhJ.js +2 -0
- package/dist/interface/assets/Camera-1zdmJnP-.js +2 -0
- package/dist/interface/assets/Camera-DSyI4J5-.css +1 -0
- package/dist/interface/assets/{CameraConsole-S61HjIGA.js → CameraConsole-CB1HEFKJ.js} +2 -2
- package/dist/interface/assets/{Cameras-57rPP3Y_.js → Cameras-CyCY0rW9.js} +2 -2
- package/dist/interface/assets/Camview-CZct5cnP.css +1 -0
- package/dist/interface/assets/Camview-Dia7G1u_.js +1 -0
- package/dist/interface/assets/{CertificateUpload-CBSLHn_I.js → CertificateUpload-jP-JIxmY.js} +1 -1
- package/dist/interface/assets/Config-DOa7WHyQ.js +2 -0
- package/dist/interface/assets/{ConfigActionCameraControl-B7KwK7vb.js → ConfigActionCameraControl-BmCE3XLC.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-DwTGfeP4.js → ConfigActionDelay-CfHCZ0uf.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-idm-FKXM.js → ConfigActionHttp-DdM7gEb0.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-C-v-_UEM.js → ConfigActionImageInput-CrPPNT4K.js} +1 -1
- package/dist/interface/assets/{ConfigActionMqtt-CG1o9_6A.js → ConfigActionMqtt-D7-u4zri.js} +1 -1
- package/dist/interface/assets/ConfigActionNotification-BSuUI2FP.js +1 -0
- package/dist/interface/assets/{ConfigActionNotificationControl-BvHIqHE7.js → ConfigActionNotificationControl-DfvAxKnx.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-BQvDZGKV.js → ConfigActionOutput-DPplSpm_.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-C7mcZ0Kz.js → ConfigActionPlugin-BnRn_p26.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-BFnb75FI.js → ConfigActionSensor-CoEoqFAY.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-BfzPScY6.js → ConfigActionSnapshot-wXdFiyU-.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-CjIeZnOV.js → ConfigActionVariable-BqJvOOHH.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-Dgcqs9QP.js → ConfigConditionIfElse-DG2Kgqn5.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-DtLt1AvW.js → ConfigConditionSensorState-BytECo6r.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-C6BfIozf.js → ConfigConditionSwitch-DaSt9uZE.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-NcjSe4RM.js → ConfigConditionTime-D42OsshU.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-DuvBl4YL.js → ConfigSensorValueInput-BtEmtZSm.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-DsVb-Svo.js → ConfigTriggerDetection-CDH2fzsu.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-Dopegic5.js +1 -0
- package/dist/interface/assets/{ConfigTriggerManual-vG37zALd.js → ConfigTriggerManual-DAtWfH0-.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-BPl_Puje.js → ConfigTriggerMqtt-CB3_PxqD.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-Bn2drGV5.js → ConfigTriggerSchedule-BUzOrF23.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-DP0CXRLo.js → ConfigTriggerSensor-D5kRIb7I.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-DQikAjbB.js → ConfigTriggerSystem-Cud77VMR.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-Cl7KWuRQ.js → ConfigTriggerWebhook-CeG5R3kV.js} +1 -1
- package/dist/interface/assets/Console-DdOD6Pd5.js +1 -0
- package/dist/interface/assets/{CuiAutomationRunsDialog-D_rNvqan.js → CuiAutomationRunsDialog-Cym6xMVJ.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-B3QSHp4-.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-BSoMhymR.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-_KXSb13N.css +1 -0
- package/dist/interface/assets/CuiCameraPipCard-DGgrxZJd.js +1 -0
- package/dist/interface/assets/{CuiCameraRecordings-h6Yel4J4.js → CuiCameraRecordings-Bu68AFdM.js} +1 -1
- package/dist/interface/assets/CuiCameraShares-BOhfTcxQ.js +1 -0
- package/dist/interface/assets/CuiCameraTable-C1CHYnda.js +1 -0
- package/dist/interface/assets/{CuiCameraTable-CfXoLbtY.js → CuiCameraTable-D0lc0VAJ.js} +2 -2
- package/dist/interface/assets/{CuiChartTable-BWRwoTLX.js → CuiChartTable-DcrFI8tT.js} +1 -1
- package/dist/interface/assets/{CuiConsole-Cb3wDLZr.js → CuiConsole-ICLBq4Q-.js} +2 -2
- package/dist/interface/assets/{CuiDataTable-aAZV_F3r.js → CuiDataTable-BooFPsGH.js} +1 -1
- package/dist/interface/assets/CuiLightControl-D1ih2hO-.js +1 -0
- package/dist/interface/assets/{CuiList-BZYxCLqz.js → CuiList-ChI82KjI.js} +1 -1
- package/dist/interface/assets/CuiPluginCard-DqdSWrwb.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-C9trJ_ql.js → CuiPluginCategoryChip-DsRcMb72.js} +1 -1
- package/dist/interface/assets/CuiPluginOAuthButton-BSvRKUSY.js +2 -0
- package/dist/interface/assets/{CuiPluginTrustBadge-D5gkIhJv.js → CuiPluginTrustBadge-DXL7N1LC.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-DY5Q-Xel.js → CuiQRCode-DHln6Lo9.js} +1 -1
- package/dist/interface/assets/CuiSchema-B7i2O3Fy.js +1 -0
- package/dist/interface/assets/{CuiTopNavbarItem-CJqOqVMt.css → CuiTopNavbarItem-7673AFGS.css} +1 -1
- package/dist/interface/assets/CuiTopNavbarItem-TMfTyt8u.js +1 -0
- package/dist/interface/assets/Faces-CyTkMqMW.js +1 -0
- package/dist/interface/assets/FirstSteps-B4gb7Sgn.js +1 -0
- package/dist/interface/assets/{Floorplan-Bxhdg4C2.css → Floorplan-B1lItPnM.css} +1 -1
- package/dist/interface/assets/Floorplan-DBwWnuys.js +1 -0
- package/dist/interface/assets/Instances-D9fnwItz.js +1 -0
- package/dist/interface/assets/{Logs-CfYTWOv2.js → Logs-Brk6fJa0.js} +2 -2
- package/dist/interface/assets/{Menu-HzmLhy40.js → Menu-CrdBz1Er.js} +1 -1
- package/dist/interface/assets/Metrics-DXMgfNIL.js +9 -0
- package/dist/interface/assets/{OAuthDeviceFlow-DBac627V.js → OAuthDeviceFlow-D5hSwHeO.js} +1 -1
- package/dist/interface/assets/Plugin-C65oNZ9N.js +1 -0
- package/dist/interface/assets/{PluginConsole-C5dZgdl9.js → PluginConsole-Bs3Z5u9-.js} +2 -2
- package/dist/interface/assets/PluginDetail-C3KUrHvq.js +2 -0
- package/dist/interface/assets/{PluginSchema-DJ8NY8hW.js → PluginSchema-D22zRDkZ.js} +1 -1
- package/dist/interface/assets/PluginSearch-4ngDmZQ2.js +1 -0
- package/dist/interface/assets/PluginSearch-D7XYJzl4.js +2 -0
- package/dist/interface/assets/{PluginUpdateProgress-DgqaTwSS.js → PluginUpdateProgress-MEdR7mID.js} +1 -1
- package/dist/interface/assets/Plugins-DQTlb12n.js +1 -0
- package/dist/interface/assets/Recordings-CfSTX_Mw.css +1 -0
- package/dist/interface/assets/Recordings-CqBwRvn-.js +1 -0
- package/dist/interface/assets/SensorEdit-BM2zHAM7.js +1 -0
- package/dist/interface/assets/{SensorHistory-bCcPH0_I.js → SensorHistory-Dbv2ODqn.js} +1 -1
- package/dist/interface/assets/Sensors-B4YzyU7R.js +2 -0
- package/dist/interface/assets/{Sensors-CaKl4PQY.css → Sensors-DETviyjO.css} +1 -1
- package/dist/interface/assets/Settings--wgPYOyK.js +1 -0
- package/dist/interface/assets/{Settings-jQIhZFRY.css → Settings-D7495zbV.css} +1 -1
- package/dist/interface/assets/SettingsAccount-BF6Cp8Rt.js +1 -0
- package/dist/interface/assets/SettingsAccount-D7CHP0f1.js +1 -0
- package/dist/interface/assets/SettingsAppearance-Ba0jbbVW.js +1 -0
- package/dist/interface/assets/SettingsAppearance-BpXZwBjO.js +1 -0
- package/dist/interface/assets/SettingsBackup-qEYm-6De.js +1 -0
- package/dist/interface/assets/{SettingsList-Nc7OCZrn.js → SettingsList-1brGZ2E_.js} +1 -1
- package/dist/interface/assets/SettingsMqtt-Ds8YpoLA.js +1 -0
- package/dist/interface/assets/SettingsNotifications-Diqpfbrh.js +1 -0
- package/dist/interface/assets/{SettingsPermissions-BZXAgxUl.js → SettingsPermissions-GmGacrLc.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-Biyy3rTF.js → SettingsRecordings-CtEm_7PE.js} +1 -1
- package/dist/interface/assets/SettingsRemote-CENHI51U.js +2 -0
- package/dist/interface/assets/SettingsSystem-YkigO2-V.js +2 -0
- package/dist/interface/assets/SettingsUsers-BNPa87gu.js +1 -0
- package/dist/interface/assets/{Terminal-AsI0lb5n.js → Terminal-uxOHZpUp.js} +3 -3
- package/dist/interface/assets/Training-BRZKDa8S.js +1 -0
- package/dist/interface/assets/Training-DMNjB3uX.css +1 -0
- package/dist/interface/assets/Updates-CbscgL60.js +2 -0
- package/dist/interface/assets/{VariableInput-__I-FsBF.js → VariableInput-Dqg4sqBD.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-B-7auf15.js → VariableSuggestions-DZCkPAVs.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-BTe1Ev3b.js → VersionsHandler-BYFshrhO.js} +2 -2
- package/dist/interface/assets/{VirtualSensorCreate-DdLgJECI.js → VirtualSensorCreate-CQ-C4si3.js} +1 -1
- package/dist/interface/assets/Workers-DC77SjZQ.js +2 -0
- package/dist/interface/assets/api-Cb8_C_se.js +4 -0
- package/dist/interface/assets/{api-84bL4zpk.js → api-CbYNh0N1.js} +1 -1
- package/dist/interface/assets/api-DIyogyx5.css +2 -0
- package/dist/interface/assets/{auth-F2wU_mtw.js → auth-Bev1OdHw.js} +1 -1
- package/dist/interface/assets/{automations-D6fqhxhY.js → automations-DrpESBB_.js} +1 -1
- package/dist/interface/assets/cameraSources-QF2xqMxX.js +1 -0
- package/dist/interface/assets/cloudHandoff-BknPGUc0.js +1 -0
- package/dist/interface/assets/{config-Jzs6YXbB.js → config-DCK7k2P4.js} +1 -1
- package/dist/interface/assets/{flowSchema-C1fWwuQa.js → flowSchema-D3Ddm5sW.js} +1 -1
- package/dist/interface/assets/{intercomService-fFto_C1t.js → intercomService-DIwpkwG4.js} +1 -1
- package/dist/interface/assets/main-Cb5Z8N7b.css +1 -0
- package/dist/interface/assets/main-DVwdxi04.js +3 -0
- package/dist/interface/assets/mqtt-COWs_r7k.js +1 -0
- package/dist/interface/assets/{notifications-CIJEGR7A.js → notifications-sIv1-H85.js} +1 -1
- package/dist/interface/assets/{plugins-HYHSAzD-.js → plugins-CXQj6XQt.js} +1 -1
- package/dist/interface/assets/rooms-DScX89Ks.js +1 -0
- package/dist/interface/assets/{sensorIcons-ByPd6LR6.js → sensorIcons-CvVtOgZB.js} +1 -1
- package/dist/interface/assets/sensorSlots-DsfKs8_k.js +1 -0
- package/dist/interface/assets/{sensors-BgjfSfk6.js → sensors-Bf_gYmB5.js} +1 -1
- package/dist/interface/assets/{server-CIDx_I6S.js → server-CahE6_Pv.js} +1 -1
- package/dist/interface/assets/{theme-GSy1mQOB.js → theme-DmUc7UHl.js} +1 -1
- package/dist/interface/assets/{types-Do9v0d7I.js → types-D4kUDpid.js} +1 -1
- package/dist/interface/assets/{types-Dlk_iSoE.js → types-Dse8_nTX.js} +1 -1
- package/dist/interface/assets/types-hwOSxlNg.js +1 -0
- package/dist/interface/assets/ungrouped-Byxe4LNR.js +1 -0
- package/dist/interface/assets/ungrouped-n3OnGhCH.css +1 -0
- package/dist/interface/assets/{updates-73Yq11IN.js → updates-C4gAnNY6.js} +1 -1
- package/dist/interface/assets/{useAppVersion-B0_bYa9V.js → useAppVersion--b5Zj7tl.js} +1 -1
- package/dist/interface/assets/useBackupRestore-Bx13MgrJ.js +1 -0
- package/dist/interface/assets/{useCameraOptions-DKeZhfOM.js → useCameraOptions-DN4gJjIl.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-CmyTTUGN.js → useLogsSocket-DqVa6Hky.js} +1 -1
- package/dist/interface/assets/{useNavLayout-DOFS3269.js → useNavLayout-CuQ9F9cj.js} +1 -1
- package/dist/interface/assets/{usePermissions-D5I3gACT.js → usePermissions-C1L7m3Nc.js} +1 -1
- package/dist/interface/assets/{usePluginUpdates-BWxJ04h7.js → usePluginUpdates-CvQPy02x.js} +1 -1
- package/dist/interface/assets/{usePushRegistration-DWreQ-Hn.js → usePushRegistration-BKvefMFq.js} +1 -1
- package/dist/interface/assets/{useServerRestart-DDW-nw_t.js → useServerRestart-ByN6484v.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-COIha2d8.js → useStreamStatus-BbtTnidZ.js} +1 -1
- package/dist/interface/assets/{useTabSwipe-aoMqro29.js → useTabSwipe-D9udGzPx.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-CM9MYCZy.js → useUpdateChannel-8t3W9dNr.js} +1 -1
- package/dist/interface/assets/{useUpdatesSocket-DY4i32ml.js → useUpdatesSocket-D9s_5T3l.js} +1 -1
- package/dist/interface/assets/{useUserOptions-DHfprGgA.js → useUserOptions-CEPYkuSm.js} +1 -1
- package/dist/interface/assets/{vendor-cameraui-BRv7o4zz.js → vendor-cameraui-Dlzn4pyz.js} +26 -26
- package/dist/interface/assets/vendor-core-COMSlypG.js +1 -0
- package/dist/interface/assets/{vendor-primevue-C85v-zl5.js → vendor-primevue-DF71EsUM.js} +55 -55
- package/dist/interface/ha/{404-TwTUCqDv.js → 404-Bm-oxxip.js} +1 -1
- package/dist/interface/ha/{About-BeZkyUdW.js → About-CDcN0Q2J.js} +6 -6
- package/dist/interface/ha/{Automation-CL7j0Vgh.js → Automation-BQd4b0ym.js} +149 -149
- package/dist/interface/ha/{AutomationImport-D7arOHP-.js → AutomationImport-CX1C76Wb.js} +6 -6
- package/dist/interface/ha/{AutomationStore-DN0yBk6X.js → AutomationStore-D4B0KpoW.js} +27 -27
- package/dist/interface/ha/{AutomationStoreDetail-DUuLEnvx.js → AutomationStoreDetail-B53Giz4B.js} +24 -24
- package/dist/interface/ha/{Automations-Dfbren5V.js → Automations-BXlwOElS.js} +94 -94
- package/dist/interface/ha/{Camera-BxWpvZM8.js → Camera-CauwMneE.js} +182 -180
- package/dist/interface/ha/{CameraConsole-DT7BFGXD.js → CameraConsole-CmsMjuIR.js} +5 -5
- package/dist/interface/ha/{Cameras-ClmwBeNf.js → Cameras-CyHDmgs0.js} +117 -117
- package/dist/interface/ha/{Camview-CFAKNI6-.js → Camview-BwwvU5k8.js} +112 -112
- package/dist/interface/ha/{Config-D83QNz1P.js → Config-C_Zuyeoc.js} +9 -9
- package/dist/interface/ha/{ConfigActionCameraControl-D-2_gkM-.js → ConfigActionCameraControl-C1_QyuX8.js} +3 -3
- package/dist/interface/ha/{ConfigActionHttp-CDmzaJOb.js → ConfigActionHttp-C0d433mh.js} +2 -2
- package/dist/interface/ha/{ConfigActionImageInput-7mA-jNIj.js → ConfigActionImageInput-BYys2FwC.js} +1 -1
- package/dist/interface/ha/{ConfigActionMqtt-CGLqAswk.js → ConfigActionMqtt-DznDfzze.js} +4 -4
- package/dist/interface/ha/{ConfigActionNotification-DyhLsVfe.js → ConfigActionNotification-CC2qfBLm.js} +3 -3
- package/dist/interface/ha/{ConfigActionNotificationControl-C381uizv.js → ConfigActionNotificationControl-3jlm7_A4.js} +2 -2
- package/dist/interface/ha/{ConfigActionOutput-Cg6IMq5u.js → ConfigActionOutput-BEf1U3_l.js} +1 -1
- package/dist/interface/ha/{ConfigActionPlugin-vFD_OHt8.js → ConfigActionPlugin-C57BUrJD.js} +5 -5
- package/dist/interface/ha/{ConfigActionSensor-B0JYbb-_.js → ConfigActionSensor-BkoSPCUJ.js} +5 -5
- package/dist/interface/ha/{ConfigActionSnapshot-DlYRwdII.js → ConfigActionSnapshot-CC3EpmCq.js} +2 -2
- package/dist/interface/ha/{ConfigActionVariable-6HNVpSjs.js → ConfigActionVariable-JDyDhSzZ.js} +1 -1
- package/dist/interface/ha/{ConfigConditionIfElse-b5UhYSf4.js → ConfigConditionIfElse-BVg-TUpv.js} +3 -3
- package/dist/interface/ha/{ConfigConditionSensorState-CI1CS9qa.js → ConfigConditionSensorState-YYeWly1H.js} +4 -4
- package/dist/interface/ha/{ConfigConditionSwitch-DGoKb_ZM.js → ConfigConditionSwitch-DQHXX-4U.js} +5 -5
- package/dist/interface/ha/{ConfigSensorValueInput-BGQytgns.js → ConfigSensorValueInput-BuuzQ1nJ.js} +8 -8
- package/dist/interface/ha/{ConfigTriggerDetection-l_h4kt0X.js → ConfigTriggerDetection-CUvkAmpJ.js} +3 -3
- package/dist/interface/ha/{ConfigTriggerGeofence-Y2Od0L2_.js → ConfigTriggerGeofence-CCHELnfy.js} +7 -7
- package/dist/interface/ha/{ConfigTriggerMqtt-DttCVDHe.js → ConfigTriggerMqtt-BfLnCiWZ.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSensor-O4mWaXnJ.js → ConfigTriggerSensor-Bi-Jld2G.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSystem-C_uWI6kc.js → ConfigTriggerSystem-_HXrWjaJ.js} +2 -2
- package/dist/interface/ha/{ConfigTriggerWebhook-CY5vDxZe.js → ConfigTriggerWebhook-CFYsVF_r.js} +2 -2
- package/dist/interface/ha/{Console-DdOU0_jE.js → Console-CR95JZFd.js} +101 -101
- package/dist/interface/ha/{CuiAutomationRunsDialog-_WF5J4hV.js → CuiAutomationRunsDialog--mpkPFmw.js} +2 -2
- package/dist/interface/ha/{CuiBottomSheet-Bzr2zhm3.js → CuiBottomSheet-DfFzwDjq.js} +3 -3
- package/dist/interface/ha/{CuiCameraRecordings-HqWrHpr-.js → CuiCameraRecordings-DCIFFbFk.js} +13 -13
- package/dist/interface/ha/{CuiCameraShares-Bw1RlqC-.js → CuiCameraShares-Dwv_XtX4.js} +7 -7
- package/dist/interface/ha/{CuiCameraTable-DvIlmfmW.js → CuiCameraTable-L6wd-VYz.js} +9 -9
- package/dist/interface/ha/{CuiChartTable-C6vRR9ny.js → CuiChartTable-CxJR8u6U.js} +16 -16
- package/dist/interface/ha/{CuiConsole-B6fDJfvq.js → CuiConsole-CvL9TXZY.js} +7 -7
- package/dist/interface/ha/{CuiDataTable-BLL7vWD1.js → CuiDataTable-Bn80WJXi.js} +7 -7
- package/dist/interface/ha/{CuiPluginCard-CsJ-dlra.js → CuiPluginCard-CtOzPAal.js} +32 -32
- package/dist/interface/ha/CuiPluginOAuthButton-1LgNMLII.js +79 -0
- package/dist/interface/ha/{CuiPluginTrustBadge-CQtfi3UI.js → CuiPluginTrustBadge-mHuy3ab9.js} +3 -3
- package/dist/interface/ha/{CuiQRCode-DOj5PJo2.js → CuiQRCode-CloepWte.js} +6 -6
- package/dist/interface/ha/{CuiSchema-Dg43r2Vo.js → CuiSchema-CJsEWewj.js} +132 -132
- package/dist/interface/ha/{CuiTopNavbarItem-CMu_hCIP.js → CuiTopNavbarItem-B2EM-tmz.js} +3 -3
- package/dist/interface/ha/{Faces-Ed0ytbse.js → Faces-BMkZfxDm.js} +66 -66
- package/dist/interface/ha/{FirstSteps-Dkw2Enre.js → FirstSteps-BH0mga3u.js} +67 -67
- package/dist/interface/ha/{Floorplan-IdC1tgDr.js → Floorplan-CyfIUI4Z.js} +220 -220
- package/dist/interface/ha/{Instances-dvDlInn-.js → Instances-BwNXc91J.js} +18 -18
- package/dist/interface/ha/{Logs-rUL_mLTJ.js → Logs-CcSiN16r.js} +11 -11
- package/dist/interface/ha/{Menu-CfMgYCN9.js → Menu-qdN0OBb7.js} +15 -15
- package/dist/interface/ha/{Metrics-DYNvEdb-.js → Metrics-ClM5lhvC.js} +93 -93
- package/dist/interface/ha/{OAuthDeviceFlow-vgBWOkzP.js → OAuthDeviceFlow-BBr-rER_.js} +5 -5
- package/dist/interface/ha/{Plugin-PqUW_696.js → Plugin-BBkSXygO.js} +104 -104
- package/dist/interface/ha/{PluginConsole-CFJKNhQw.js → PluginConsole-DqrBnXSX.js} +4 -4
- package/dist/interface/ha/{PluginDetail-cC8nut35.js → PluginDetail-Clu6nv-B.js} +12 -12
- package/dist/interface/ha/{PluginSearch-BzSs0ibh.js → PluginSearch-Dn-24FLX.js} +53 -53
- package/dist/interface/ha/{PluginUpdateProgress-CtM7lrl9.js → PluginUpdateProgress-CzhHUKDg.js} +3 -3
- package/dist/interface/ha/{Plugins-CzvlXEaH.js → Plugins-qYJD5ioU.js} +27 -27
- package/dist/interface/ha/{Recordings-BtsW8I5D.js → Recordings-CBIt3vL7.js} +384 -366
- package/dist/interface/ha/{SensorEdit-DMwyTDIG.js → SensorEdit-BbG6apZA.js} +353 -353
- package/dist/interface/ha/{SensorHistory-DoJhFbTC.js → SensorHistory-CqGsnQPW.js} +2 -2
- package/dist/interface/ha/{Sensors-BoRfutfx.js → Sensors-mKWkCDF8.js} +507 -481
- package/dist/interface/ha/{Settings-vmfs1rfj.js → Settings-C5J4ubiA.js} +24 -24
- package/dist/interface/ha/SettingsAccount-tCyZsBxG.js +970 -0
- package/dist/interface/ha/{SettingsAppearance-v9zeetcx.js → SettingsAppearance-DqJp4Clt.js} +14 -14
- package/dist/interface/ha/{SettingsBackup-eO4r8MZe.js → SettingsBackup-CHnCKYgz.js} +6 -6
- package/dist/interface/ha/{SettingsList-burOi4S6.js → SettingsList-DsQOPeKW.js} +5 -5
- package/dist/interface/ha/{SettingsMqtt-CjZERKR8.js → SettingsMqtt-TPIsEcXe.js} +124 -124
- package/dist/interface/ha/SettingsNotifications-DH3T_xyh.js +529 -0
- package/dist/interface/ha/{SettingsRecordings-DzsXkzeu.js → SettingsRecordings-Ay8lj8Lm.js} +7 -7
- package/dist/interface/ha/{SettingsRemote-B0HZwZj3.js → SettingsRemote-CHiBADuu.js} +202 -202
- package/dist/interface/ha/{SettingsSystem-Bc_c8XYh.js → SettingsSystem-tqs40pUW.js} +10 -10
- package/dist/interface/ha/{SettingsUsers-CxL65q1C.js → SettingsUsers-BUbC_Qc7.js} +29 -29
- package/dist/interface/ha/{Terminal-DsX-_5R2.js → Terminal-f_b-089t.js} +76 -76
- package/dist/interface/ha/Training-Dcxo9PFi.js +1479 -0
- package/dist/interface/ha/{Updates-DG9i-tQu.js → Updates-aGl5hy8Q.js} +14 -14
- package/dist/interface/ha/{VariableInput-CcevSEwK.js → VariableInput-yJGbaZEo.js} +1 -1
- package/dist/interface/ha/{VersionsHandler-5GeFt6Lw.js → VersionsHandler-Q4PfRpbs.js} +10 -10
- package/dist/interface/ha/{VirtualSensorCreate-dWN8FANX.js → VirtualSensorCreate-Gbi6aJBh.js} +8 -8
- package/dist/interface/ha/{Workers-D1y6eFKT.js → Workers-BbBqOc0H.js} +167 -167
- package/dist/interface/ha/{api-DDUXI4DG.js → api-DBu4gh4_.js} +9705 -9275
- package/dist/interface/ha/{api-BgQ9AVgK.js → api-DY0z6Sp_.js} +3 -3
- package/dist/interface/ha/{auth-C8Vp1TkJ.js → auth-C2V-kpRp.js} +38 -38
- package/dist/interface/ha/{automationBlueprint-DhRjWL2p.js → automationBlueprint-MGUZJTFY.js} +4 -4
- package/dist/interface/ha/cameraui-cards.js +1 -1
- package/dist/interface/ha/{cards-BGikU5nh.js → cards-BA6g_9R5.js} +573 -573
- package/dist/interface/ha/cloud-check-BFJzoUtz.js +33 -0
- package/dist/interface/ha/{config-WqhFqx8D.js → config-BGlhgEOa.js} +16 -16
- package/dist/interface/ha/{dist-BQFunPaA.js → dist-BqTZri2H.js} +743 -725
- package/dist/interface/ha/{mqtt-CQopAljB.js → mqtt-BLKZNA-E.js} +12 -12
- package/dist/interface/ha/{notifications-C4IU7Zbu.js → notifications-BW0RNMnG.js} +22 -22
- package/dist/interface/ha/{pinia-3D39Do4a.js → pinia-DINxhtY-.js} +188 -162
- package/dist/interface/ha/{plugins-C2n0mAnr.js → plugins-Cj-B4Nwy.js} +62 -62
- package/dist/interface/ha/{rooms-qqdOrA2J.js → rooms-C32i51p-.js} +7 -7
- package/dist/interface/ha/{server-D6Yglz-z.js → server-CfbE_0Z9.js} +31 -31
- package/dist/interface/ha/{types-BtcJ7st-.js → types-Ry6RjBNa.js} +32 -32
- package/dist/interface/ha/{ungrouped-aASsOUNF.js → ungrouped-CO29-tSV.js} +415 -211
- package/dist/interface/ha/{updates-BuAFU-ZQ.js → updates-CZPI8XJ1.js} +38 -38
- package/dist/interface/ha/{useAppVersion-D0EOwpoO.js → useAppVersion-9jfqRo_z.js} +1 -1
- package/dist/interface/ha/{useLogsSocket-CCewWMZM.js → useLogsSocket-B0E7a3ys.js} +1 -1
- package/dist/interface/ha/{useNavLayout-B_QzdVtJ.js → useNavLayout-B2wfeha-.js} +19 -19
- package/dist/interface/ha/{useServerRestart-B0OMNlwZ.js → useServerRestart-CCH-yMWR.js} +1 -1
- package/dist/interface/ha/{useTabSwipe-DG6Gx2Md.js → useTabSwipe-D2uqGEvR.js} +1 -1
- package/dist/interface/ha/{useUpdateChannel-CXDGlWX2.js → useUpdateChannel--SP3Wjym.js} +2 -2
- package/dist/interface/ha/{useUpdatesSocket-BgCJLp_W.js → useUpdatesSocket-BBbUCMU-.js} +1 -1
- package/dist/interface/ha/{useUserOptions-rirRksyl.js → useUserOptions-Bh54UAkH.js} +1 -1
- package/dist/interface/index.html +28 -27
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +8 -8
- package/dist/server/src/api/controllers/training.controller.d.ts +40 -0
- package/dist/server/src/api/controllers/training.controller.js +97 -0
- package/dist/server/src/api/controllers/training.controller.js.map +1 -0
- package/dist/server/src/api/database/constants.d.ts +1 -0
- package/dist/server/src/api/database/constants.js +1 -0
- package/dist/server/src/api/database/constants.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +3 -2
- package/dist/server/src/api/database/index.js +4 -2
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migrations/v2-1-19.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-1-19.js +24 -0
- package/dist/server/src/api/database/migrations/v2-1-19.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +7 -1
- package/dist/server/src/api/database/record-schemas.js +8 -0
- package/dist/server/src/api/database/record-schemas.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +27 -0
- package/dist/server/src/api/index.js +1 -1
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/render-index.js +1 -1
- package/dist/server/src/api/render-index.js.map +1 -1
- package/dist/server/src/api/routes/index.js +2 -0
- package/dist/server/src/api/routes/index.js.map +1 -1
- package/dist/server/src/api/routes/training.routes.d.ts +2 -0
- package/dist/server/src/api/routes/training.routes.js +107 -0
- package/dist/server/src/api/routes/training.routes.js.map +1 -0
- package/dist/server/src/api/schemas/cameras.schema.d.ts +76 -76
- package/dist/server/src/api/schemas/remote.schema.d.ts +1 -1
- package/dist/server/src/api/schemas/training.schema.d.ts +46 -0
- package/dist/server/src/api/schemas/training.schema.js +45 -0
- package/dist/server/src/api/schemas/training.schema.js.map +1 -0
- package/dist/server/src/api/services/cameras.service.js +7 -2
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/sensors.service.d.ts +1 -0
- package/dist/server/src/api/services/sensors.service.js +1 -0
- package/dist/server/src/api/services/sensors.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +2 -1
- package/dist/server/src/api/websocket/index.js +3 -1
- package/dist/server/src/api/websocket/index.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/training.d.ts +11 -0
- package/dist/server/src/api/websocket/nsp/training.js +29 -0
- package/dist/server/src/api/websocket/nsp/training.js.map +1 -0
- package/dist/server/src/api/websocket/types.d.ts +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +1 -0
- package/dist/server/src/camera/decoder/detection-coordinator.js +48 -2
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-window.d.ts +5 -0
- package/dist/server/src/camera/decoder/detection-window.js +5 -5
- package/dist/server/src/camera/decoder/detection-window.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +10 -0
- package/dist/server/src/camera/decoder/event-manager.js +50 -1
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/training-sink.d.ts +37 -0
- package/dist/server/src/camera/decoder/training-sink.js +146 -0
- package/dist/server/src/camera/decoder/training-sink.js.map +1 -0
- package/dist/server/src/camera/decoder/types.d.ts +4 -0
- package/dist/server/src/camera/decoder/types.js +8 -0
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/manager/coreManager.d.ts +3 -1
- package/dist/server/src/manager/coreManager.js +18 -0
- package/dist/server/src/manager/coreManager.js.map +1 -1
- package/dist/server/src/manager/trainingCandidateManager.d.ts +41 -0
- package/dist/server/src/manager/trainingCandidateManager.js +249 -0
- package/dist/server/src/manager/trainingCandidateManager.js.map +1 -0
- package/dist/server/src/manager/types.d.ts +23 -0
- package/dist/server/src/manager/types.js.map +1 -1
- package/dist/server/src/remote/api/index.d.ts +2 -0
- package/dist/server/src/remote/api/index.js +3 -0
- package/dist/server/src/remote/api/index.js.map +1 -1
- package/dist/server/src/remote/api/routes/oauth.js +1 -1
- package/dist/server/src/remote/api/routes/oauth.js.map +1 -1
- package/dist/server/src/remote/api/routes/train.d.ts +24 -0
- package/dist/server/src/remote/api/routes/train.js +51 -0
- package/dist/server/src/remote/api/routes/train.js.map +1 -0
- package/dist/server/src/rpc/index.d.ts +2 -0
- package/dist/server/src/rpc/index.js +5 -0
- package/dist/server/src/rpc/index.js.map +1 -1
- package/dist/server/src/rpc/interfaces/core.d.ts +21 -0
- package/dist/server/src/rpc/server.js +2 -0
- package/dist/server/src/rpc/server.js.map +1 -1
- package/dist/server/src/sensors/registry.d.ts +1 -0
- package/dist/server/src/sensors/registry.js +10 -0
- package/dist/server/src/sensors/registry.js.map +1 -1
- package/package.json +8 -8
- package/dist/interface/assets/Automation-DThD-djr.js +0 -3
- package/dist/interface/assets/AutomationImport-CHKkZqA4.js +0 -2
- package/dist/interface/assets/AutomationStore-Aon4kqZU.js +0 -2
- package/dist/interface/assets/AutomationStoreDetail-CfZ45tLW.js +0 -2
- package/dist/interface/assets/Automations-BkRuMd-d.js +0 -2
- package/dist/interface/assets/Camera-BWdUUW_H.css +0 -1
- package/dist/interface/assets/Camera-G6xTnRAk.js +0 -2
- package/dist/interface/assets/Camview-BZS4_jv1.css +0 -1
- package/dist/interface/assets/Camview-BjCuw7nI.js +0 -1
- package/dist/interface/assets/Config-BTXb1LHN.js +0 -2
- package/dist/interface/assets/ConfigActionNotification-DtoP3c7I.js +0 -1
- package/dist/interface/assets/ConfigTriggerGeofence-DLuNWaN6.js +0 -1
- package/dist/interface/assets/Console-hUeddOJc.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-BGVpKjqe.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DOW6gNj0.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DsjZEdig.css +0 -1
- package/dist/interface/assets/CuiCameraPipCard-BBMkU-eN.js +0 -1
- package/dist/interface/assets/CuiCameraShares-C9Th3jEn.js +0 -1
- package/dist/interface/assets/CuiCameraTable-Cti7FZma.js +0 -1
- package/dist/interface/assets/CuiLightControl-BhBIiPv-.js +0 -1
- package/dist/interface/assets/CuiPluginCard-yYGvVtDJ.js +0 -2
- package/dist/interface/assets/CuiPluginOAuthButton-C8VRPoMj.js +0 -2
- package/dist/interface/assets/CuiSchema-Dy2eRCu2.js +0 -1
- package/dist/interface/assets/CuiTopNavbarItem-Btig8IUi.js +0 -1
- package/dist/interface/assets/Faces-D5PMl5Bx.js +0 -1
- package/dist/interface/assets/FirstSteps-BcjeaLz_.js +0 -1
- package/dist/interface/assets/Floorplan-DHl3zibU.js +0 -1
- package/dist/interface/assets/Instances-DXksjsQR.js +0 -1
- package/dist/interface/assets/Metrics-BWTImHsV.js +0 -9
- package/dist/interface/assets/Plugin-D5WuhMPO.js +0 -1
- package/dist/interface/assets/PluginDetail-3qrahg0_.js +0 -2
- package/dist/interface/assets/PluginSearch-D8zmSpkN.js +0 -2
- package/dist/interface/assets/PluginSearch-D_ba5x-O.js +0 -1
- package/dist/interface/assets/Plugins-5MzJrkSA.js +0 -1
- package/dist/interface/assets/Recordings-BuGuUwYE.js +0 -1
- package/dist/interface/assets/Recordings-D4NzYCO9.css +0 -1
- package/dist/interface/assets/SensorEdit-DF4sw0EW.js +0 -1
- package/dist/interface/assets/Sensors-D6GwAXQ2.js +0 -2
- package/dist/interface/assets/Settings-BZf-ziEZ.js +0 -1
- package/dist/interface/assets/SettingsAccount--5p79E6E.js +0 -1
- package/dist/interface/assets/SettingsAccount-Dlc0Wddo.js +0 -1
- package/dist/interface/assets/SettingsAppearance-B59zzxu4.js +0 -1
- package/dist/interface/assets/SettingsAppearance-xPKxmDpp.js +0 -1
- package/dist/interface/assets/SettingsBackup-CJJ5VBzp.js +0 -1
- package/dist/interface/assets/SettingsMqtt-DUUAcYuG.js +0 -1
- package/dist/interface/assets/SettingsNotifications-BH63oRsc.js +0 -1
- package/dist/interface/assets/SettingsRemote-Dbaxaq5H.js +0 -2
- package/dist/interface/assets/SettingsSystem-DzHIleOc.js +0 -2
- package/dist/interface/assets/SettingsUsers-D5YuEr7c.js +0 -1
- package/dist/interface/assets/Updates-DnAut-3U.js +0 -2
- package/dist/interface/assets/Workers-6aoL2zvF.js +0 -2
- package/dist/interface/assets/api-BI5TkcMD.js +0 -4
- package/dist/interface/assets/api-BTWXbCPQ.css +0 -2
- package/dist/interface/assets/cameraSources-C3PFkewy.js +0 -1
- package/dist/interface/assets/cloudHandoff-B1HA65AZ.js +0 -1
- package/dist/interface/assets/main-C6AqiNZK.js +0 -3
- package/dist/interface/assets/main-Qqk3RyYP.css +0 -1
- package/dist/interface/assets/mqtt-DGNlVikj.js +0 -1
- package/dist/interface/assets/rooms-DL_uUrGc.js +0 -1
- package/dist/interface/assets/types-QIK1kdY6.js +0 -1
- package/dist/interface/assets/ungrouped-CupkuPIQ.js +0 -1
- package/dist/interface/assets/ungrouped-DTYy_Pud.css +0 -1
- package/dist/interface/assets/useBackupRestore-jdHT_hab.js +0 -1
- package/dist/interface/assets/vendor-core-BUse5adB.js +0 -1
- package/dist/interface/ha/CuiPluginOAuthButton-ChNW42ux.js +0 -105
- package/dist/interface/ha/SettingsAccount-xJy6kGf6.js +0 -970
- package/dist/interface/ha/SettingsNotifications-QCKfSffa.js +0 -529
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { DBTrainingCandidate, DBTrainingSettings } from '../api/database/types.js';
|
|
2
|
+
import type { TrainingCandidateIngest, TrainingIngestResult } from '../rpc/interfaces/core.js';
|
|
3
|
+
import type { TrainingSubmissionPage, TrainingSubmitProgress, TrainingSubmitResult } from './types.js';
|
|
4
|
+
export declare class TrainingCandidateManager {
|
|
5
|
+
private logger;
|
|
6
|
+
private dbs;
|
|
7
|
+
private imagesDir;
|
|
8
|
+
private lastIngestAt;
|
|
9
|
+
private submitQueue;
|
|
10
|
+
private submitQueued;
|
|
11
|
+
private submitWorker?;
|
|
12
|
+
private submitProgress;
|
|
13
|
+
private retentionTimer?;
|
|
14
|
+
constructor();
|
|
15
|
+
register(): Promise<void>;
|
|
16
|
+
destroy(): Promise<void>;
|
|
17
|
+
getSettings(): DBTrainingSettings;
|
|
18
|
+
updateSettings(patch: Partial<DBTrainingSettings>): Promise<DBTrainingSettings>;
|
|
19
|
+
list(filter?: {
|
|
20
|
+
cameraId?: string;
|
|
21
|
+
status?: DBTrainingCandidate['status'];
|
|
22
|
+
}): DBTrainingCandidate[];
|
|
23
|
+
get(id: string): DBTrainingCandidate | undefined;
|
|
24
|
+
imagePath(id: string): string | null;
|
|
25
|
+
update(id: string, patch: Pick<Partial<DBTrainingCandidate>, 'boxes' | 'status'>): Promise<DBTrainingCandidate | undefined>;
|
|
26
|
+
queueSubmit(ids: string[]): Promise<TrainingSubmitResult>;
|
|
27
|
+
isUploadLocked(candidate: DBTrainingCandidate): boolean;
|
|
28
|
+
currentSubmitProgress(): TrainingSubmitProgress;
|
|
29
|
+
listSubmissions(cursor?: string): Promise<TrainingSubmissionPage>;
|
|
30
|
+
removeSubmission(id: string): Promise<void>;
|
|
31
|
+
remove(id: string): Promise<boolean>;
|
|
32
|
+
ingest(payload: TrainingCandidateIngest): Promise<TrainingIngestResult>;
|
|
33
|
+
private enforceCameraLimit;
|
|
34
|
+
private pruneExpired;
|
|
35
|
+
private pruneOrphanImages;
|
|
36
|
+
private runSubmitQueue;
|
|
37
|
+
private resetUploadLeftovers;
|
|
38
|
+
private emitSubmitProgress;
|
|
39
|
+
private trainingNamespace;
|
|
40
|
+
private emitChanged;
|
|
41
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
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 RETENTION_SWEEP_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
8
|
+
export class TrainingCandidateManager {
|
|
9
|
+
logger;
|
|
10
|
+
dbs;
|
|
11
|
+
imagesDir;
|
|
12
|
+
lastIngestAt = new Map();
|
|
13
|
+
submitQueue = [];
|
|
14
|
+
submitQueued = new Set();
|
|
15
|
+
submitWorker;
|
|
16
|
+
submitProgress = { total: 0, done: 0, failed: 0 };
|
|
17
|
+
retentionTimer;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.logger = container.resolve('logger');
|
|
20
|
+
this.dbs = container.resolve('dbs');
|
|
21
|
+
this.imagesDir = join(container.resolve('configService').STORAGE_PATH, 'training-candidates');
|
|
22
|
+
container.registerInstance('trainingCandidateManager', this);
|
|
23
|
+
}
|
|
24
|
+
async register() {
|
|
25
|
+
await mkdir(this.imagesDir, { recursive: true }).catch(() => { });
|
|
26
|
+
this.pruneOrphanImages().catch(() => { });
|
|
27
|
+
this.resetUploadLeftovers().catch(() => { });
|
|
28
|
+
this.pruneExpired().catch(() => { });
|
|
29
|
+
this.retentionTimer = setInterval(() => this.pruneExpired().catch(() => { }), RETENTION_SWEEP_INTERVAL_MS);
|
|
30
|
+
}
|
|
31
|
+
async destroy() {
|
|
32
|
+
clearInterval(this.retentionTimer);
|
|
33
|
+
}
|
|
34
|
+
getSettings() {
|
|
35
|
+
return { ...DEFAULT_SETTINGS, ...this.dbs.settingsDB.get('settings')?.training };
|
|
36
|
+
}
|
|
37
|
+
async updateSettings(patch) {
|
|
38
|
+
const next = { ...this.getSettings(), ...patch };
|
|
39
|
+
await this.dbs.commit(this.dbs.settingsDB, 'settings', (settings) => (settings ? { ...settings, training: next } : undefined));
|
|
40
|
+
if (patch.enabled !== undefined) {
|
|
41
|
+
container.resolve('proxy').coreManager?.publishCoreManagerEvent('trainingSettingsChanged', { enabled: next.enabled });
|
|
42
|
+
}
|
|
43
|
+
return next;
|
|
44
|
+
}
|
|
45
|
+
list(filter) {
|
|
46
|
+
const items = [];
|
|
47
|
+
for (const { value } of this.dbs.trainingCandidatesDB.getRange()) {
|
|
48
|
+
if (filter?.cameraId && value.cameraId !== filter.cameraId)
|
|
49
|
+
continue;
|
|
50
|
+
if (filter?.status && value.status !== filter.status)
|
|
51
|
+
continue;
|
|
52
|
+
items.push(value);
|
|
53
|
+
}
|
|
54
|
+
return items.sort((a, b) => b.createdAt - a.createdAt);
|
|
55
|
+
}
|
|
56
|
+
get(id) {
|
|
57
|
+
return this.dbs.trainingCandidatesDB.get(id);
|
|
58
|
+
}
|
|
59
|
+
imagePath(id) {
|
|
60
|
+
return this.dbs.trainingCandidatesDB.get(id) ? join(this.imagesDir, `${id}.jpg`) : null;
|
|
61
|
+
}
|
|
62
|
+
async update(id, patch) {
|
|
63
|
+
if (!this.dbs.trainingCandidatesDB.get(id))
|
|
64
|
+
return undefined;
|
|
65
|
+
await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (candidate) => candidate ? { ...candidate, ...patch, upload: undefined, uploadError: undefined } : undefined);
|
|
66
|
+
const updated = this.dbs.trainingCandidatesDB.get(id);
|
|
67
|
+
this.emitChanged(updated?.cameraId);
|
|
68
|
+
return updated;
|
|
69
|
+
}
|
|
70
|
+
async queueSubmit(ids) {
|
|
71
|
+
let queued = 0;
|
|
72
|
+
for (const id of ids) {
|
|
73
|
+
const candidate = this.dbs.trainingCandidatesDB.get(id);
|
|
74
|
+
if (candidate?.status !== 'verified' || this.isUploadLocked(candidate) || this.submitQueued.has(id))
|
|
75
|
+
continue;
|
|
76
|
+
await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'queued', uploadError: undefined } : undefined));
|
|
77
|
+
this.submitQueued.add(id);
|
|
78
|
+
this.submitQueue.push(id);
|
|
79
|
+
queued++;
|
|
80
|
+
}
|
|
81
|
+
if (queued > 0) {
|
|
82
|
+
this.submitProgress.total += queued;
|
|
83
|
+
this.emitChanged();
|
|
84
|
+
this.emitSubmitProgress(true);
|
|
85
|
+
this.submitWorker ??= this.runSubmitQueue().finally(() => {
|
|
86
|
+
this.submitWorker = undefined;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return { queued };
|
|
90
|
+
}
|
|
91
|
+
isUploadLocked(candidate) {
|
|
92
|
+
return candidate.upload === 'queued' || candidate.upload === 'uploading';
|
|
93
|
+
}
|
|
94
|
+
currentSubmitProgress() {
|
|
95
|
+
return { active: this.submitWorker !== undefined, ...this.submitProgress };
|
|
96
|
+
}
|
|
97
|
+
async listSubmissions(cursor) {
|
|
98
|
+
const page = await container.resolve('cloudApi').trainRoute.list(cursor);
|
|
99
|
+
return {
|
|
100
|
+
items: page.items.map((s) => ({
|
|
101
|
+
id: s.id,
|
|
102
|
+
labels: s.labels,
|
|
103
|
+
imageBytes: s.image_bytes,
|
|
104
|
+
createdAt: s.created_at,
|
|
105
|
+
usedInWave: s.used_in_wave,
|
|
106
|
+
imageUrl: s.image_url,
|
|
107
|
+
})),
|
|
108
|
+
nextCursor: page.next_cursor,
|
|
109
|
+
total: page.total,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async removeSubmission(id) {
|
|
113
|
+
await container.resolve('cloudApi').trainRoute.remove(id);
|
|
114
|
+
}
|
|
115
|
+
async remove(id) {
|
|
116
|
+
const candidate = this.dbs.trainingCandidatesDB.get(id);
|
|
117
|
+
if (!candidate)
|
|
118
|
+
return false;
|
|
119
|
+
await this.dbs.trainingCandidatesDB.remove(id);
|
|
120
|
+
await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
|
|
121
|
+
this.emitChanged(candidate.cameraId);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
async ingest(payload) {
|
|
125
|
+
const settings = this.getSettings();
|
|
126
|
+
if (!settings.enabled)
|
|
127
|
+
return 'disabled';
|
|
128
|
+
if (payload.boxes.length === 0 || payload.scene.length === 0)
|
|
129
|
+
return 'skip';
|
|
130
|
+
const last = this.lastIngestAt.get(payload.cameraId) ?? 0;
|
|
131
|
+
if (payload.capturedAt - last < settings.minIntervalSeconds * 1000)
|
|
132
|
+
return 'skip';
|
|
133
|
+
this.lastIngestAt.set(payload.cameraId, payload.capturedAt);
|
|
134
|
+
const id = randomUUID();
|
|
135
|
+
await writeFile(join(this.imagesDir, `${id}.jpg`), payload.scene);
|
|
136
|
+
this.dbs.trainingCandidatesDB.put(id, {
|
|
137
|
+
id,
|
|
138
|
+
cameraId: payload.cameraId,
|
|
139
|
+
eventId: payload.eventId,
|
|
140
|
+
createdAt: payload.capturedAt,
|
|
141
|
+
status: 'new',
|
|
142
|
+
boxes: payload.boxes,
|
|
143
|
+
});
|
|
144
|
+
await this.enforceCameraLimit(payload.cameraId, settings.perCameraLimit);
|
|
145
|
+
this.emitChanged(payload.cameraId);
|
|
146
|
+
return 'stored';
|
|
147
|
+
}
|
|
148
|
+
async enforceCameraLimit(cameraId, limit) {
|
|
149
|
+
// verified candidates are the user's work, eviction only eats unreviewed ones
|
|
150
|
+
const candidates = this.list({ cameraId });
|
|
151
|
+
const evictable = candidates.filter((c) => c.status !== 'verified');
|
|
152
|
+
const overflow = candidates.length - limit;
|
|
153
|
+
if (overflow <= 0)
|
|
154
|
+
return;
|
|
155
|
+
for (const candidate of evictable.slice(-overflow)) {
|
|
156
|
+
await this.dbs.trainingCandidatesDB.remove(candidate.id);
|
|
157
|
+
await unlink(join(this.imagesDir, `${candidate.id}.jpg`)).catch(() => { });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async pruneExpired() {
|
|
161
|
+
const cutoff = Date.now() - this.getSettings().retentionDays * 24 * 60 * 60 * 1000;
|
|
162
|
+
let removed = 0;
|
|
163
|
+
for (const { key, value } of this.dbs.trainingCandidatesDB.getRange()) {
|
|
164
|
+
if (value.status !== 'new' || value.createdAt >= cutoff || this.isUploadLocked(value))
|
|
165
|
+
continue;
|
|
166
|
+
const id = String(key);
|
|
167
|
+
await this.dbs.trainingCandidatesDB.remove(id);
|
|
168
|
+
await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
|
|
169
|
+
removed++;
|
|
170
|
+
}
|
|
171
|
+
if (removed > 0) {
|
|
172
|
+
this.logger.debug(`Training: pruned ${removed} expired candidates`);
|
|
173
|
+
this.emitChanged();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async pruneOrphanImages() {
|
|
177
|
+
const files = await readdir(this.imagesDir).catch(() => []);
|
|
178
|
+
if (files.length === 0)
|
|
179
|
+
return;
|
|
180
|
+
const referenced = new Set();
|
|
181
|
+
for (const { key } of this.dbs.trainingCandidatesDB.getRange())
|
|
182
|
+
referenced.add(String(key));
|
|
183
|
+
for (const file of files) {
|
|
184
|
+
if (referenced.has(file.replace(/\.jpg$/, '')))
|
|
185
|
+
continue;
|
|
186
|
+
await unlink(join(this.imagesDir, file)).catch(() => { });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async runSubmitQueue() {
|
|
190
|
+
const cloudApi = container.resolve('cloudApi');
|
|
191
|
+
for (;;) {
|
|
192
|
+
const id = this.submitQueue.shift();
|
|
193
|
+
if (!id)
|
|
194
|
+
break;
|
|
195
|
+
this.submitQueued.delete(id);
|
|
196
|
+
const candidate = this.dbs.trainingCandidatesDB.get(id);
|
|
197
|
+
if (candidate?.status !== 'verified')
|
|
198
|
+
continue;
|
|
199
|
+
await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'uploading' } : undefined));
|
|
200
|
+
this.emitChanged(candidate.cameraId);
|
|
201
|
+
try {
|
|
202
|
+
const image = await readFile(join(this.imagesDir, `${id}.jpg`));
|
|
203
|
+
await cloudApi.trainRoute.submit(candidate.boxes, candidate.createdAt, image);
|
|
204
|
+
await this.dbs.trainingCandidatesDB.remove(id);
|
|
205
|
+
await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
|
|
206
|
+
this.submitProgress.done++;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
const message = error?.message ?? String(error);
|
|
210
|
+
await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: 'failed', uploadError: message } : undefined));
|
|
211
|
+
this.submitProgress.failed++;
|
|
212
|
+
}
|
|
213
|
+
this.emitChanged(candidate.cameraId);
|
|
214
|
+
this.emitSubmitProgress(true);
|
|
215
|
+
if (this.submitQueue.length > 0)
|
|
216
|
+
await new Promise((resolve) => setTimeout(resolve, SUBMIT_ITEM_DELAY_MS));
|
|
217
|
+
}
|
|
218
|
+
this.emitSubmitProgress(false);
|
|
219
|
+
this.submitProgress = { total: 0, done: 0, failed: 0 };
|
|
220
|
+
}
|
|
221
|
+
async resetUploadLeftovers() {
|
|
222
|
+
for (const { key, value } of this.dbs.trainingCandidatesDB.getRange()) {
|
|
223
|
+
const id = String(key);
|
|
224
|
+
if (value.submittedAt || value.status === 'ignored') {
|
|
225
|
+
await this.dbs.trainingCandidatesDB.remove(id);
|
|
226
|
+
await unlink(join(this.imagesDir, `${id}.jpg`)).catch(() => { });
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (this.isUploadLocked(value)) {
|
|
230
|
+
await this.dbs.commit(this.dbs.trainingCandidatesDB, id, (c) => (c ? { ...c, upload: undefined } : undefined));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
emitSubmitProgress(active) {
|
|
235
|
+
this.trainingNamespace()?.emitSubmitProgress({ active, ...this.submitProgress });
|
|
236
|
+
}
|
|
237
|
+
trainingNamespace() {
|
|
238
|
+
try {
|
|
239
|
+
return container.resolve('socketService').namespaces.get('/training');
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
emitChanged(cameraId) {
|
|
246
|
+
this.trainingNamespace()?.emitCandidatesChanged(cameraId);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# 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,25 @@ 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
|
+
}
|
|
62
|
+
export interface TrainingSubmissionPage {
|
|
63
|
+
items: TrainingSubmission[];
|
|
64
|
+
nextCursor?: string;
|
|
65
|
+
total?: number;
|
|
66
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/manager/types.ts"],"names":[],"mappings":"
|
|
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;
|
|
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,
|
|
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,0FAA0F,CAAC;AAE1G,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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 interface CloudTrainSubmissionPage {
|
|
13
|
+
items: CloudTrainSubmission[];
|
|
14
|
+
next_cursor?: string;
|
|
15
|
+
total?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class TrainRoute {
|
|
18
|
+
private credentialStore;
|
|
19
|
+
constructor(credentialStore: CloudCredentialStore);
|
|
20
|
+
submit(boxes: DBTrainingCandidateBox[], capturedAt: number, image: Buffer): Promise<string>;
|
|
21
|
+
list(cursor?: string): Promise<CloudTrainSubmissionPage>;
|
|
22
|
+
remove(id: string): Promise<void>;
|
|
23
|
+
private fetchCloud;
|
|
24
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { assertResponseOk, cloudFetch } from '../instance.js';
|
|
2
|
+
const LIST_PAGE_SIZE = 30;
|
|
3
|
+
export class TrainRoute {
|
|
4
|
+
credentialStore;
|
|
5
|
+
constructor(credentialStore) {
|
|
6
|
+
this.credentialStore = credentialStore;
|
|
7
|
+
}
|
|
8
|
+
async submit(boxes, capturedAt, image) {
|
|
9
|
+
const createRes = await this.fetchCloud()('/api/v1/train/submissions', {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: { 'Content-Type': 'application/json' },
|
|
12
|
+
body: JSON.stringify({ boxes, captured_at: capturedAt }),
|
|
13
|
+
});
|
|
14
|
+
await assertResponseOk(createRes);
|
|
15
|
+
const created = (await createRes.json());
|
|
16
|
+
if (image.byteLength > created.max_image_bytes) {
|
|
17
|
+
throw new Error('Image exceeds the submission size limit');
|
|
18
|
+
}
|
|
19
|
+
const uploadRes = await fetch(created.upload_url, {
|
|
20
|
+
method: 'PUT',
|
|
21
|
+
headers: created.upload_headers,
|
|
22
|
+
body: new Uint8Array(image),
|
|
23
|
+
});
|
|
24
|
+
if (!uploadRes.ok) {
|
|
25
|
+
throw new Error(`Image upload failed (${uploadRes.status})`);
|
|
26
|
+
}
|
|
27
|
+
const completeRes = await this.fetchCloud()(`/api/v1/train/submissions/${created.id}/complete`, { method: 'POST' });
|
|
28
|
+
await assertResponseOk(completeRes);
|
|
29
|
+
return created.id;
|
|
30
|
+
}
|
|
31
|
+
async list(cursor) {
|
|
32
|
+
const params = new URLSearchParams({ limit: String(LIST_PAGE_SIZE) });
|
|
33
|
+
if (cursor)
|
|
34
|
+
params.set('cursor', cursor);
|
|
35
|
+
const res = await this.fetchCloud()(`/api/v1/train/submissions?${params.toString()}`, { method: 'GET' });
|
|
36
|
+
await assertResponseOk(res);
|
|
37
|
+
return (await res.json());
|
|
38
|
+
}
|
|
39
|
+
async remove(id) {
|
|
40
|
+
const res = await this.fetchCloud()(`/api/v1/train/submissions/${id}`, { method: 'DELETE' });
|
|
41
|
+
await assertResponseOk(res);
|
|
42
|
+
}
|
|
43
|
+
fetchCloud() {
|
|
44
|
+
return cloudFetch({
|
|
45
|
+
target: 'cloud',
|
|
46
|
+
credentialStore: this.credentialStore,
|
|
47
|
+
requiredScopes: ['train:submit'],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# 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;AA4B9D,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,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,CAAC,MAAe;QAC/B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACzG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6B,CAAC;IACxD,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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5D,MAAM,OAAO,WAAW;IACf,MAAM,CAAO;IACb,KAAK,CAAa;IAElB,WAAW,CAAe;IAC1B,WAAW,CAAe;IAC1B,aAAa,CAAiB;IAC9B,gBAAgB,CAAoB;IACpC,eAAe,CAAmB;IAClC,mBAAmB,CAAuB;IAC1C,eAAe,CAAmB;IAElC,IAAI,GAAc;QACvB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,MAAM,EAAE,mBAAmB,EAAE;QAC7B,MAAM,EAAE,mBAAmB,EAAE;KAC9B,CAAC;IAEM,GAAG,CAAe;IAClB,MAAM,CAAgB;IAEtB,WAAW,GAAG,KAAK,CAAC;IACpB,aAAa,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxC,UAAU,CAAU;IAErC,YAAY,OAAkC;QAC5C,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAgB,QAAQ,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAgB,eAAe,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ,CAAC;YACjE,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,oBAAoB,UAAU,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,CAAc,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;
|
|
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',
|