preload.ts 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const { contextBridge, ipcRenderer } = require('electron');
  2. type NetworkPattern = { match: string; key: string };
  3. type NetworkPayload = { webContentsId: number; key: string; url: string; data: unknown };
  4. type ServiceStatus = { nodeOk: boolean };
  5. type LocalServicesStatus = { node: { ready: boolean; port: number; restartCount: number } };
  6. type LocalUrls = { nodeUrl: string };
  7. contextBridge.exposeInMainWorld('electronAPI', {
  8. getAppVersion: () => ipcRenderer.invoke('get-app-version'),
  9. getPlatform: () => ipcRenderer.invoke('get-platform'),
  10. minimizeWindow: () => ipcRenderer.send('window-minimize'),
  11. maximizeWindow: () => ipcRenderer.send('window-maximize'),
  12. closeWindow: () => ipcRenderer.send('window-close'),
  13. quitApp: () => ipcRenderer.send('app-quit'),
  14. isMaximized: () => ipcRenderer.invoke('window-is-maximized'),
  15. onMaximizedChange: (callback: (isMaximized: boolean) => void) => {
  16. ipcRenderer.on('window-maximized', (_event: unknown, isMaximized: boolean) => callback(isMaximized));
  17. },
  18. selectFile: (options?: { filters?: { name: string; extensions: string[] }[] }) =>
  19. ipcRenderer.invoke('select-file', options),
  20. selectFolder: () => ipcRenderer.invoke('select-folder'),
  21. showNotification: (title: string, body: string) =>
  22. ipcRenderer.send('show-notification', { title, body }),
  23. openBackendExternal: (url: string, cookieData?: string, title?: string) =>
  24. ipcRenderer.invoke('open-backend-external', { url, cookieData, title }),
  25. getWebviewCookies: (partition: string, url: string) =>
  26. ipcRenderer.invoke('get-webview-cookies', partition, url),
  27. getWebviewAllCookies: (partition: string) =>
  28. ipcRenderer.invoke('get-webview-all-cookies', partition),
  29. clearWebviewCookies: (partition: string) =>
  30. ipcRenderer.invoke('clear-webview-cookies', partition),
  31. setWebviewCookies: (partition: string, cookies: any[]) =>
  32. ipcRenderer.invoke('set-webview-cookies', partition, cookies),
  33. captureWebviewPage: (webContentsId: number) =>
  34. ipcRenderer.invoke('capture-webview-page', webContentsId),
  35. webviewSendMouseClick: (webContentsId: number, x: number, y: number) =>
  36. ipcRenderer.invoke('webview-send-mouse-click', webContentsId, x, y),
  37. webviewSendTextInput: (webContentsId: number, text: string) =>
  38. ipcRenderer.invoke('webview-send-text-input', webContentsId, text),
  39. webviewGetElementPosition: (webContentsId: number, selector: string) =>
  40. ipcRenderer.invoke('webview-get-element-position', webContentsId, selector),
  41. webviewClickByText: (webContentsId: number, text: string) =>
  42. ipcRenderer.invoke('webview-click-by-text', webContentsId, text),
  43. enableNetworkIntercept: (webContentsId: number, patterns: NetworkPattern[]) =>
  44. ipcRenderer.invoke('enable-network-intercept', webContentsId, patterns),
  45. disableNetworkIntercept: (webContentsId: number) =>
  46. ipcRenderer.invoke('disable-network-intercept', webContentsId),
  47. updateNetworkPatterns: (webContentsId: number, patterns: NetworkPattern[]) =>
  48. ipcRenderer.invoke('update-network-patterns', webContentsId, patterns),
  49. onNetworkInterceptData: (callback: (data: NetworkPayload) => void) => {
  50. ipcRenderer.on('network-intercept-data', (_event: unknown, data: NetworkPayload) => callback(data));
  51. },
  52. removeNetworkInterceptListener: () => {
  53. ipcRenderer.removeAllListeners('network-intercept-data');
  54. },
  55. testServerConnection: (url: string) =>
  56. ipcRenderer.invoke('test-server-connection', { url }),
  57. getLocalServicesStatus: (): Promise<LocalServicesStatus> =>
  58. ipcRenderer.invoke('get-local-services-status'),
  59. getLocalUrls: (): Promise<LocalUrls> => ipcRenderer.invoke('get-local-urls'),
  60. getServiceLog: () => ipcRenderer.invoke('get-service-log'),
  61. openLogFile: () => ipcRenderer.invoke('open-log-file'),
  62. onServicesStatusChanged: (callback: (status: ServiceStatus) => void) => {
  63. ipcRenderer.on('services-status-changed', (_event: unknown, status: ServiceStatus) => callback(status));
  64. },
  65. removeServicesStatusListener: () => {
  66. ipcRenderer.removeAllListeners('services-status-changed');
  67. },
  68. });
  69. export {};