import { contextBridge, ipcRenderer } from 'electron' interface PortForwardOutcome { externalIp: string port: number reachable: boolean | null preForwarded: boolean detail: string } const api = { /** i18n 사전을 렌더러에 전달. */ loadLocale: (): Promise> => ipcRenderer.invoke('pf:i18n:dict'), /** 지정 포트를 UPnP 로 개방 시도하고 외부에서 닿는지 점검. */ openPort: (port: number): Promise => ipcRenderer.invoke('pf:open', port), /** UPnP 포트 매핑 제거. */ closePort: (port: number): Promise => ipcRenderer.invoke('pf:close', port), /** 프로그램 종료. */ quit: (): Promise => ipcRenderer.invoke('pf:quit'), /** 로그 스트림 구독. */ onLog: (handler: (line: string) => void): (() => void) => { const listener = (_event: unknown, line: string) => handler(line) ipcRenderer.on('log', listener) return () => ipcRenderer.removeListener('log', listener) } } contextBridge.exposeInMainWorld('pfTool', api) declare global { interface Window { pfTool: typeof api } }