import { contextBridge, ipcRenderer } from "electron"; import { electronAPI } from "@electron-toolkit/preload"; import { CodeRequest, PrinterRequest } from "./index.d.js"; // Custom APIs for renderer const api = { nfc: { onTag: (callback: (event: { uid: string }) => void): void => { ipcRenderer.on("nfc:tag", (_event, value) => callback(value)); }, onRemoved: (callback: (event: { uid: string }) => void): void => { ipcRenderer.on("nfc:removed", (_event, value) => callback(value)); }, onError: (callback: (event: { message: string }) => void): void => { ipcRenderer.on("nfc:error", (_event, value) => callback(value)); }, labelReq: (data: CodeRequest): Promise => { return ipcRenderer.invoke("nfc:labelReq", data); }, printReq: (data: PrinterRequest): Promise => { return ipcRenderer.invoke("nfc:printReq", data); }, ping: (url: string): Promise => { return ipcRenderer.invoke("ping:url", url); }, removeAllListeners: (): void => { ipcRenderer.removeAllListeners("nfc:tag"); ipcRenderer.removeAllListeners("nfc:removed"); ipcRenderer.removeAllListeners("nfc:error"); }, }, }; // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise // just add to the DOM global. if (process.contextIsolated) { try { contextBridge.exposeInMainWorld("electron", electronAPI); contextBridge.exposeInMainWorld("api", api); } catch (error) { console.error(error); } } else { // @ts-ignore (define in dts) window.electron = electronAPI; // @ts-ignore (define in dts) window.api = api; }