import { MachinesListing } from 'components/MachineManagerProvider' import 'electron' import fs from 'node:fs/promises' import path from 'path' import { dialog, shell } from 'electron' import type { WebContentSendPayload } from 'menu/channels' import { ZooLabel } from 'menu/roles' // Extend the interface with additional custom properties declare module 'electron' { interface Menu { label?: ZooLabel } } type EnvFn = (value?: string) => string export interface IElectronAPI { resizeWindow: (width: number, height: number) => Promise open: typeof dialog.showOpenDialog save: typeof dialog.showSaveDialog openExternal: typeof shell.openExternal openInNewWindow: (name: string) => void takeElectronWindowScreenshot: ({ width, height, }: { width: number height: number }) => Promise showInFolder: typeof shell.showItemInFolder /** Require to be called first before {@link loginWithDeviceFlow} */ startDeviceFlow: (host: string) => Promise /** Registered by first calling {@link startDeviceFlow}, which sets up the device flow handle */ loginWithDeviceFlow: () => Promise platform: typeof process.env.platform arch: typeof process.env.arch version: typeof process.env.version watchFileOn: ( path: string, key: string, callback: (eventType: string, path: string) => void ) => void readFile: typeof fs.readFile copyFile: typeof fs.copyFile watchFileOff: (path: string, key: string) => void writeFile: ( path: string, data: string | Uint8Array ) => ReturnType readdir: (path: string) => ReturnType exists: (path: string) => ReturnType getPath: (name: string) => Promise rm: typeof fs.rm stat: (path: string) => ReturnType statIsDirectory: (path: string) => Promise canReadWriteDirectory: ( path: string ) => Promise<{ value: boolean; error: unknown }> path: typeof path mkdir: typeof fs.mkdir join: typeof path.join sep: typeof path.sep rename: (prev: string, next: string) => typeof fs.rename packageJson: { name: string } os: { isMac: boolean isWindows: boolean isLinux: boolean } process: { env: { BASE_URL: string IS_PLAYWRIGHT: string VITE_KC_DEV_TOKEN: string VITE_KC_API_WS_MODELING_URL: string VITE_KC_API_BASE_URL: string VITE_KC_SITE_BASE_URL: string VITE_KC_SITE_APP_URL: string VITE_KC_SKIP_AUTH: string VITE_KC_CONNECTION_TIMEOUT_MS: string VITE_KC_DEV_TOKEN: string NODE_ENV: string PROD: string DEV: string TEST: string CI: string } } kittycad: (access: string, args: any) => any listMachines: (machineApiIp: string) => Promise getMachineApiIp: () => Promise onUpdateChecking: (callback: () => void) => Electron.IpcRenderer onUpdateNotAvailable: (callback: () => void) => Electron.IpcRenderer onUpdateDownloadStart: ( callback: (value: { version: string }) => void ) => Electron.IpcRenderer onUpdateDownloaded: ( callback: (value: { version: string; releaseNotes: string }) => void ) => Electron.IpcRenderer onUpdateError: (callback: (value: { error: Error }) => void) => Electron appRestart: () => void appCheckForUpdates: () => Promise getArgvParsed: () => any getAppTestProperty: (propertyName: string) => any // Helper functions to create application Menus createHomePageMenu: () => Promise createModelingPageMenu: () => Promise createFallbackMenu: () => Promise enableMenu(menuId: string): Promise disableMenu(menuId: string): Promise menuOn: (callback: (payload: WebContentSendPayload) => void) => any } declare global { interface Window { electron: IElectronAPI openExternalLink: (e: React.MouseEvent) => void } }