vtube-studio/src/electron/preload/electron-preload.js

46 lines
1.6 KiB
JavaScript

const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
// Accept an optional apiKey argument so the renderer can pass a stored key from localStorage
generateAvatar: (prompt, apiKey) => ipcRenderer.invoke('generate-avatar', prompt, apiKey)
});
contextBridge.exposeInMainWorld('electronLog', {
info: (msg) => ipcRenderer.send('renderer-log', { level: 'info', msg }),
warn: (msg) => ipcRenderer.send('renderer-log', { level: 'warn', msg }),
error: (msg) => ipcRenderer.send('renderer-log', { level: 'error', msg }),
});
try {
ipcRenderer.send('renderer-log', { level: 'info', msg: 'preload loaded' });
} catch (e) {
}
try {
const forward = (level, args) => {
try {
const msg = args.map(a => {
try { return typeof a === 'string' ? a : JSON.stringify(a); } catch (e) { return String(a); }
}).join(' ');
ipcRenderer.send('renderer-log', { level, msg });
} catch (e) { }
};
const origError = console.error.bind(console);
console.error = (...args) => { forward('error', args); origError(...args); };
const origWarn = console.warn.bind(console);
console.warn = (...args) => { forward('warn', args); origWarn(...args); };
const origLog = console.log.bind(console);
console.log = (...args) => { forward('info', args); origLog(...args); };
// DOM snapshot logging removed — keep console forwarding only.
window.addEventListener('error', (ev) => {
try { ipcRenderer.send('renderer-log', { level: 'error', msg: `window.onerror: ${ev.message} ${ev.filename}:${ev.lineno}:${ev.colno}` }); } catch (e) {}
});
} catch (e) {
}