gerbil/electron/preload.ts

53 lines
2.2 KiB
TypeScript

import { contextBridge, ipcRenderer, type IpcRendererEvent } from 'electron';
import type { KoboldAPI, AppAPI, UpdateInfo } from '../src/types/electron.js';
const koboldAPI: KoboldAPI = {
isInstalled: () => ipcRenderer.invoke('kobold:isInstalled'),
getInstalledVersion: () => ipcRenderer.invoke('kobold:getInstalledVersion'),
getInstalledVersions: () => ipcRenderer.invoke('kobold:getInstalledVersions'),
getCurrentVersion: () => ipcRenderer.invoke('kobold:getCurrentVersion'),
setCurrentVersion: (version: string) =>
ipcRenderer.invoke('kobold:setCurrentVersion', version),
getVersionFromBinary: (binaryPath: string) =>
ipcRenderer.invoke('kobold:getVersionFromBinary', binaryPath),
checkForUpdates: () => ipcRenderer.invoke('kobold:checkForUpdates'),
getLatestReleaseWithStatus: () =>
ipcRenderer.invoke('kobold:getLatestReleaseWithStatus'),
getROCmDownload: () => ipcRenderer.invoke('kobold:getROCmDownload'),
downloadROCm: () => ipcRenderer.invoke('kobold:downloadROCm'),
getLatestRelease: () => ipcRenderer.invoke('kobold:getLatestRelease'),
getAllReleases: () => ipcRenderer.invoke('kobold:getAllReleases'),
getPlatform: () => ipcRenderer.invoke('kobold:getPlatform'),
getCurrentInstallDir: () => ipcRenderer.invoke('kobold:getCurrentInstallDir'),
selectInstallDirectory: () =>
ipcRenderer.invoke('kobold:selectInstallDirectory'),
downloadRelease: (asset) =>
ipcRenderer.invoke('kobold:downloadRelease', asset),
launchKoboldCpp: (args) => ipcRenderer.invoke('kobold:launchKoboldCpp', args),
openInstallDialog: () => ipcRenderer.invoke('kobold:openInstallDialog'),
onDownloadProgress: (callback) => {
ipcRenderer.on(
'download-progress',
(_: IpcRendererEvent, progress: number) => callback(progress)
);
},
onUpdateAvailable: (callback) => {
ipcRenderer.on(
'update-available',
(_: IpcRendererEvent, updateInfo: UpdateInfo) => callback(updateInfo)
);
},
removeAllListeners: (channel) => {
ipcRenderer.removeAllListeners(channel);
},
};
const appAPI: AppAPI = {
getVersion: () => ipcRenderer.invoke('app:getVersion'),
openExternal: (url) => ipcRenderer.invoke('app:openExternal', url),
};
contextBridge.exposeInMainWorld('electronAPI', {
kobold: koboldAPI,
app: appAPI,
});