import { contextBridge, ipcRenderer } from 'electron'; import type { HostedSessionConfig } from '../../../packages/domain/entities/HostedSessionConfig'; export interface PermissionStatus { accessibility: boolean; screenRecording: boolean; platform: NodeJS.Platform; } export interface PermissionCheckResponse { success: boolean; granted: boolean; status: PermissionStatus; missingPermissions: string[]; error?: string; } export interface ElectronAPI { startAutomation: (config: HostedSessionConfig) => Promise<{ success: boolean; sessionId?: string; error?: string; permissionError?: boolean; missingPermissions?: string[]; }>; stopAutomation: (sessionId: string) => Promise<{ success: boolean; error?: string }>; getSessionStatus: (sessionId: string) => Promise; pauseAutomation: (sessionId: string) => Promise<{ success: boolean; error?: string }>; resumeAutomation: (sessionId: string) => Promise<{ success: boolean; error?: string }>; onSessionProgress: (callback: (progress: any) => void) => void; // Permission APIs checkPermissions: () => Promise; requestAccessibility: () => Promise<{ success: boolean; granted: boolean; error?: string }>; openPermissionSettings: (pane?: 'accessibility' | 'screenRecording') => Promise<{ success: boolean; error?: string }>; } contextBridge.exposeInMainWorld('electronAPI', { startAutomation: (config: HostedSessionConfig) => ipcRenderer.invoke('start-automation', config), stopAutomation: (sessionId: string) => ipcRenderer.invoke('stop-automation', sessionId), getSessionStatus: (sessionId: string) => ipcRenderer.invoke('get-session-status', sessionId), pauseAutomation: (sessionId: string) => ipcRenderer.invoke('pause-automation', sessionId), resumeAutomation: (sessionId: string) => ipcRenderer.invoke('resume-automation', sessionId), onSessionProgress: (callback: (progress: any) => void) => { ipcRenderer.on('session-progress', (_event, progress) => callback(progress)); }, // Permission APIs checkPermissions: () => ipcRenderer.invoke('automation:checkPermissions'), requestAccessibility: () => ipcRenderer.invoke('automation:requestAccessibility'), openPermissionSettings: (pane?: 'accessibility' | 'screenRecording') => ipcRenderer.invoke('automation:openPermissionSettings', pane), } as ElectronAPI);