Files
sf-nfc-reader-desktop/src/preload/index.ts
2026-03-17 12:40:03 +01:00

60 lines
2.3 KiB
TypeScript

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: {
getReaderName: (): Promise<string> => {
return ipcRenderer.invoke("nfc:getReaderName");
},
onReader: (callback: (event: { name: string }) => void): void => {
ipcRenderer.on("nfc:reader", (_event, value) => callback(value));
},
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<unknown> => {
return ipcRenderer.invoke("nfc:labelReq", data);
},
printReq: (data: PrinterRequest): Promise<void> => {
return ipcRenderer.invoke("nfc:printReq", data);
},
ping: (url: string): Promise<boolean> => {
return ipcRenderer.invoke("ping:url", url);
},
pingSocket: (args: { ip: string; port: number }): Promise<boolean> => {
return ipcRenderer.invoke("ping:socket", args);
},
removeAllListeners: (): void => {
ipcRenderer.removeAllListeners("nfc:reader");
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;
}