Files
minecraft_launcher/src/installer-pf/preload.ts
claude-bot 86883f56e4 add standalone port-forwarding tool (마인크래프트 간편 포트포워딩)
포트포워딩만 단독으로 수행하는 세 번째 Electron 앱 추가.
- 포트 입력(기본 25565) → UPnP 개방 시도 → 외부에서 닿는지 점검(ifconfig.co
  + 임시 리스너) → 외부 접속 주소/성공·실패·확인불가 안내. '포트 닫기'로 매핑 제거.
- 점검 로직은 메인 설치기의 v0.3.14 오탐 수정(ifconfig 실패→확인불가)을 반영해
  자체 포함. sharp 미사용이라 빌드에서 제외(exe 약 73MB).
- 신규: src/installer-pf/{main,preload}.ts, installer-pf/{index.html,renderer.js},
  locales/installer-pf/ko-kr.json, tsconfig.installer-pf.json, electron-builder-pf.yml.
- package.json 에 installer:pf / dist:win:pf 스크립트, i18n 컴포넌트 유니온에
  'installer-pf' 추가. v0.3.15.

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
2026-06-24 21:43:06 +09:00

39 lines
1.1 KiB
TypeScript

import { contextBridge, ipcRenderer } from 'electron'
interface PortForwardOutcome {
externalIp: string
port: number
reachable: boolean | null
preForwarded: boolean
detail: string
}
const api = {
/** i18n 사전을 렌더러에 전달. */
loadLocale: (): Promise<Record<string, unknown>> => ipcRenderer.invoke('pf:i18n:dict'),
/** 지정 포트를 UPnP 로 개방 시도하고 외부에서 닿는지 점검. */
openPort: (port: number): Promise<PortForwardOutcome> => ipcRenderer.invoke('pf:open', port),
/** UPnP 포트 매핑 제거. */
closePort: (port: number): Promise<void> => ipcRenderer.invoke('pf:close', port),
/** 프로그램 종료. */
quit: (): Promise<void> => 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
}
}