import fs from 'node:fs/promises' import fsSync from 'node:fs' import path from 'path' import { dialog, shell } from 'electron' import { MachinesListing } from 'lib/machineManager' type EnvFn = (value?: string) => string export interface IElectronAPI { open: typeof dialog.showOpenDialog save: typeof dialog.showSaveDialog openExternal: typeof shell.openExternal 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, callback: (eventType: string, path: string) => void ) => void watchFileOff: (path: string) => void readFile: (path: string) => ReturnType 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 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 TEST_SETTINGS_FILE_KEY: 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_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 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 } declare global { interface Window { electron: IElectronAPI } }