Files
CamTalk/desktop/preload/index.ts

70 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-06-14 18:10:58 +08:00
// ============================================================
// Preload 脚本 — 安全桥接 Main Process 与 Renderer
// 职责:通过 contextBridge 暴露安全的 API 给前端
// ============================================================
import { contextBridge, ipcRenderer } from 'electron'
// 暴露给渲染进程的 API
const electronAPI = {
/**
* WebSocket
*/
getBackendUrl: (): string => {
return ipcRenderer.sendSync('get-backend-url') as string
},
/**
* WebSocket
*/
setBackendUrl: (url: string): void => {
ipcRenderer.send('set-backend-url', url)
},
/**
*
*/
getVersion: (): string => {
return ipcRenderer.sendSync('get-version') as string
},
/**
* macOS
*
*/
requestCameraAccess: async (): Promise<boolean> => {
return await ipcRenderer.invoke('request-camera-access') as boolean
},
/**
* macOS
*/
requestMicAccess: async (): Promise<boolean> => {
return await ipcRenderer.invoke('request-mic-access') as boolean
},
/**
*
* callback type: 'camera' | 'microphone'
*/
onPermissionGranted: (callback: (type: string) => void): void => {
ipcRenderer.on('permission-granted', (_event, type: string) => callback(type))
},
/**
*
*/
platform: process.platform,
/**
* Electron
*/
isElectron: true,
}
// 通过 contextBridge 安全地暴露 API
contextBridge.exposeInMainWorld('electronAPI', electronAPI)
// 类型声明,让前端 TypeScript 能识别
export type ElectronAPI = typeof electronAPI