client/src/preload/index.ts

34 lines
1.2 KiB
TypeScript

import { contextBridge, ipcRenderer } from 'electron'
import { electronAPI } from '@electron-toolkit/preload'
// Custom APIs for renderer - extend with explicit audio/video IPC
const api = {
// Explicitly expose receive channels for media
onAudioFragment: (callback: (payload: any) => void) => {
const handler = (_: any, payload: any) => callback(payload);
ipcRenderer.on('audio-fragment', handler);
return () => ipcRenderer.removeListener('audio-fragment', handler);
},
onVideoChunk: (callback: (payload: any) => void) => {
const handler = (_: any, payload: any) => callback(payload);
ipcRenderer.on('video-chunk', handler);
return () => ipcRenderer.removeListener('video-chunk', handler);
}
}
// 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
}