let electronRenderer; try { electronRenderer = require('electron/renderer'); } catch { electronRenderer = require('electron'); } const { contextBridge, ipcRenderer } = electronRenderer; contextBridge.exposeInMainWorld('dtmApi', { listJLinks: () => ipcRenderer.invoke('jlink:list'), listSerialPorts: () => ipcRenderer.invoke('jlink:list'), startTest: (sessionId, config) => ipcRenderer.invoke('dtm:start', sessionId, config), stopTest: sessionId => ipcRenderer.invoke('dtm:stop', sessionId), getStatus: sessionId => ipcRenderer.invoke('dtm:status', sessionId), syncSessionConfig: (sessionId, config) => ipcRenderer.invoke('dtm:sync-config', sessionId, config), canStartSession: (sessionId, config) => ipcRenderer.invoke('dtm:can-start', sessionId, config), onEvent: callback => { const handler = (_, event) => callback(event); ipcRenderer.on('dtm:event', handler); return () => ipcRenderer.removeListener('dtm:event', handler); }, });