This commit is contained in:
2025-12-01 00:48:34 +01:00
parent 645f537895
commit e7ada8aa23
24 changed files with 866 additions and 438 deletions

View File

@@ -11,9 +11,6 @@ let lifecycleSubscribed = false;
export function setupIpcHandlers(mainWindow: BrowserWindow): void {
const container = DIContainer.getInstance();
const startAutomationUseCase = container.getStartAutomationUseCase();
const sessionRepository = container.getSessionRepository();
const automationEngine = container.getAutomationEngine();
const logger = container.getLogger();
// Setup checkout confirmation adapter and wire it into the container
@@ -156,15 +153,18 @@ export function setupIpcHandlers(mainWindow: BrowserWindow): void {
ipcMain.handle('start-automation', async (_event: IpcMainInvokeEvent, config: HostedSessionConfig) => {
try {
const container = DIContainer.getInstance();
const startAutomationUseCase = container.getStartAutomationUseCase();
const sessionRepository = container.getSessionRepository();
const automationEngine = container.getAutomationEngine();
logger.info('Starting automation', { sessionName: config.sessionName });
// Clear any existing progress interval
if (progressMonitorInterval) {
clearInterval(progressMonitorInterval);
progressMonitorInterval = null;
}
// Connect to browser first (required for dev mode)
const connectionResult = await container.initializeBrowserConnection();
if (!connectionResult.success) {
logger.error('Browser connection failed', undefined, { errorMessage: connectionResult.error });
@@ -172,7 +172,6 @@ export function setupIpcHandlers(mainWindow: BrowserWindow): void {
}
logger.info('Browser connection established');
// Check authentication before starting automation (production/development mode only)
const checkAuthUseCase = container.getCheckAuthenticationUseCase();
if (checkAuthUseCase) {
const authResult = await checkAuthUseCase.execute();
@@ -199,14 +198,14 @@ export function setupIpcHandlers(mainWindow: BrowserWindow): void {
const session = await sessionRepository.findById(result.sessionId);
if (session) {
// Start the automation by executing step 1
logger.info('Executing step 1');
await automationEngine.executeStep(StepId.create(1), config);
}
// Set up progress monitoring
progressMonitorInterval = setInterval(async () => {
const updatedSession = await sessionRepository.findById(result.sessionId);
const containerForProgress = DIContainer.getInstance();
const repoForProgress = containerForProgress.getSessionRepository();
const updatedSession = await repoForProgress.findById(result.sessionId);
if (!updatedSession) {
if (progressMonitorInterval) {
clearInterval(progressMonitorInterval);
@@ -250,6 +249,8 @@ export function setupIpcHandlers(mainWindow: BrowserWindow): void {
});
ipcMain.handle('get-session-status', async (_event: IpcMainInvokeEvent, sessionId: string) => {
const container = DIContainer.getInstance();
const sessionRepository = container.getSessionRepository();
const session = await sessionRepository.findById(sessionId);
if (!session) {
return { found: false };
@@ -275,20 +276,21 @@ export function setupIpcHandlers(mainWindow: BrowserWindow): void {
ipcMain.handle('stop-automation', async (_event: IpcMainInvokeEvent, sessionId: string) => {
try {
const container = DIContainer.getInstance();
const automationEngine = container.getAutomationEngine();
const sessionRepository = container.getSessionRepository();
logger.info('Stopping automation', { sessionId });
// Clear progress monitoring interval
if (progressMonitorInterval) {
clearInterval(progressMonitorInterval);
progressMonitorInterval = null;
logger.info('Progress monitor cleared');
}
// Stop the automation engine interval
automationEngine.stopAutomation();
logger.info('Automation engine stopped');
// Update session state to failed with user stop reason
const session = await sessionRepository.findById(sessionId);
if (session) {
session.fail('User stopped automation');