// Copyright 2024, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 const { contextBridge, ipcRenderer } = require("electron"); contextBridge.exposeInMainWorld("api", { getIsDev: () => ipcRenderer.sendSync("getIsDev"), getPlatform: () => ipcRenderer.sendSync("getPlatform"), getCursorPoint: () => ipcRenderer.sendSync("getCursorPoint"), openNewWindow: () => ipcRenderer.send("openNewWindow"), showContextMenu: (menu, position) => ipcRenderer.send("contextmenu-show", menu, position), onContextMenuClick: (callback) => ipcRenderer.on("contextmenu-click", (_event, id) => callback(id)), downloadFile: (filePath) => ipcRenderer.send("download", { filePath }), openExternal: (url) => { if (url && typeof url === "string") { ipcRenderer.send("open-external", url); } else { console.error("Invalid URL passed to openExternal:", url); } }, getEnv: (varName) => ipcRenderer.sendSync("getEnv", varName), onFullScreenChange: (callback) => ipcRenderer.on("fullscreen-change", (_event, isFullScreen) => callback(isFullScreen)), onUpdaterStatusChange: (callback) => ipcRenderer.on("app-update-status", (_event, status) => callback(status)), getUpdaterStatus: () => ipcRenderer.sendSync("get-app-update-status"), installAppUpdate: () => ipcRenderer.send("install-app-update"), }); // Custom event for "new-window" ipcRenderer.on("webview-new-window", (e, webContentsId, details) => { const event = new CustomEvent("new-window", { detail: details }); document.getElementById("webview").dispatchEvent(event); });