const { contextBridge, ipcRenderer } = require('electron'); type NetworkPattern = { match: string; key: string }; type NetworkPayload = { webContentsId: number; key: string; url: string; data: unknown }; type ServiceStatus = { nodeOk: boolean }; type LocalServicesStatus = { node: { ready: boolean; port: number; restartCount: number } }; type LocalUrls = { nodeUrl: string }; contextBridge.exposeInMainWorld('electronAPI', { getAppVersion: () => ipcRenderer.invoke('get-app-version'), getPlatform: () => ipcRenderer.invoke('get-platform'), minimizeWindow: () => ipcRenderer.send('window-minimize'), maximizeWindow: () => ipcRenderer.send('window-maximize'), closeWindow: () => ipcRenderer.send('window-close'), quitApp: () => ipcRenderer.send('app-quit'), isMaximized: () => ipcRenderer.invoke('window-is-maximized'), onMaximizedChange: (callback: (isMaximized: boolean) => void) => { ipcRenderer.on('window-maximized', (_event: unknown, isMaximized: boolean) => callback(isMaximized)); }, selectFile: (options?: { filters?: { name: string; extensions: string[] }[] }) => ipcRenderer.invoke('select-file', options), selectFolder: () => ipcRenderer.invoke('select-folder'), showNotification: (title: string, body: string) => ipcRenderer.send('show-notification', { title, body }), openBackendExternal: (url: string, cookieData?: string, title?: string) => ipcRenderer.invoke('open-backend-external', { url, cookieData, title }), getWebviewCookies: (partition: string, url: string) => ipcRenderer.invoke('get-webview-cookies', partition, url), getWebviewAllCookies: (partition: string) => ipcRenderer.invoke('get-webview-all-cookies', partition), clearWebviewCookies: (partition: string) => ipcRenderer.invoke('clear-webview-cookies', partition), setWebviewCookies: (partition: string, cookies: any[]) => ipcRenderer.invoke('set-webview-cookies', partition, cookies), captureWebviewPage: (webContentsId: number) => ipcRenderer.invoke('capture-webview-page', webContentsId), webviewSendMouseClick: (webContentsId: number, x: number, y: number) => ipcRenderer.invoke('webview-send-mouse-click', webContentsId, x, y), webviewSendTextInput: (webContentsId: number, text: string) => ipcRenderer.invoke('webview-send-text-input', webContentsId, text), webviewGetElementPosition: (webContentsId: number, selector: string) => ipcRenderer.invoke('webview-get-element-position', webContentsId, selector), webviewClickByText: (webContentsId: number, text: string) => ipcRenderer.invoke('webview-click-by-text', webContentsId, text), enableNetworkIntercept: (webContentsId: number, patterns: NetworkPattern[]) => ipcRenderer.invoke('enable-network-intercept', webContentsId, patterns), disableNetworkIntercept: (webContentsId: number) => ipcRenderer.invoke('disable-network-intercept', webContentsId), updateNetworkPatterns: (webContentsId: number, patterns: NetworkPattern[]) => ipcRenderer.invoke('update-network-patterns', webContentsId, patterns), onNetworkInterceptData: (callback: (data: NetworkPayload) => void) => { ipcRenderer.on('network-intercept-data', (_event: unknown, data: NetworkPayload) => callback(data)); }, removeNetworkInterceptListener: () => { ipcRenderer.removeAllListeners('network-intercept-data'); }, testServerConnection: (url: string) => ipcRenderer.invoke('test-server-connection', { url }), getLocalServicesStatus: (): Promise => ipcRenderer.invoke('get-local-services-status'), getLocalUrls: (): Promise => ipcRenderer.invoke('get-local-urls'), getServiceLog: () => ipcRenderer.invoke('get-service-log'), openLogFile: () => ipcRenderer.invoke('open-log-file'), onServicesStatusChanged: (callback: (status: ServiceStatus) => void) => { ipcRenderer.on('services-status-changed', (_event: unknown, status: ServiceStatus) => callback(status)); }, removeServicesStatusListener: () => { ipcRenderer.removeAllListeners('services-status-changed'); }, }); export {};