const backupRestoreService = require('./src/services/backupRestoreService'); // A staged restore must replace data before configuration, identity, or report // services open SQLite. Requiring the service here is safe because its runtime // HTTP/socket dependencies remain lazy until register() is called below. backupRestoreService.applyPendingRestore(); require('./src/globals/logger'); require('./src/globals/config'); require('./src/globals/http'); require('./src/globals/io'); require('./src/globals/ws'); require('./src/helpers/sensorDecoder'); require('./src/services/alertService'); require('./src/services/authService'); // Setup remains available only until the first lockdown administrator exists; // the administrative configuration gateway then owns all subsequent changes. require('./src/services/setupService'); require('./src/services/adminConfigurationService'); require('./src/services/eventBus'); require('./src/services/modeManager'); require('./src/services/lockdownGuard'); require('./src/services/roverManager'); // Help monitoring subscribes to roverManager telemetry before assignment and // session services begin consuming the resulting roster state. require('./src/services/roverHelpService'); require('./src/services/commandService'); require('./src/services/roverConnectionService'); require('./src/services/assignmentService'); require('./src/services/roverRebootService'); require('./src/services/nicknameService'); require('./src/services/verificationService'); require('./src/services/identityAdminService'); require('./src/services/privateRoverAccessRequestService'); require('./src/services/chatService'); require('./src/services/llmCommentaryService'); require('./src/services/overseerControlService'); require('./src/services/globalObjectiveService'); require('./src/services/serverControlService'); require('./src/services/videoSessions'); require('./src/services/ptzCameraService'); require('./src/services/videoAuthService'); require('./src/services/mediaMtxService'); require('./src/services/videoSocketService'); require('./src/services/roomCameraService'); require('./src/services/roverSnapshotService'); require('./src/services/interInstanceService'); require('./src/services/humanAlertButtonService'); require('./src/services/embedHttpService'); require('./src/services/logStreamService'); require('./src/services/adminLogService'); require('./src/services/homeAssistantService'); require('./src/services/idleService'); require('./src/services/neatoService'); require('./src/services/liftService'); require('./src/services/audioLevelsService'); require('./src/services/audioForwardService'); require('./src/services/buttonBoxService'); require('./src/services/barcodeScannerService'); require('./src/services/barcodeGameService'); require('./src/services/kinectService'); require('./src/services/balanceBoardService'); require('./src/services/sessionService'); require('./src/services/batteryManager'); // Fleet reporting starts after the rover and battery services so its passive // subscriptions see fully decoded state without becoming an initialization // dependency of either control path. require('./src/services/fleetReportService'); require('./src/services/replayEngineV2'); // Replay delivery is a core service. It must subscribe before the optional // Discord feature so web requests always have a local delivery path. require('./src/services/replayDeliveryService'); require('./src/services/discordBotService'); backupRestoreService.register(); require('./src/services/httpServer');