From 3b2f373946a405f1c99def4ef69e07b9a58f83b8 Mon Sep 17 00:00:00 2001 From: kitbyte Date: Sat, 2 May 2026 11:39:54 +0300 Subject: [PATCH] feat(web-panel): Add ipc-logger script to intercept WeMod Electron IPC traffic --- web-panel/scripts/default/ipc-logger.js | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 web-panel/scripts/default/ipc-logger.js diff --git a/web-panel/scripts/default/ipc-logger.js b/web-panel/scripts/default/ipc-logger.js new file mode 100644 index 0000000..8211587 --- /dev/null +++ b/web-panel/scripts/default/ipc-logger.js @@ -0,0 +1,46 @@ +(function installIpcLogger(WandEnhancer) { + if (globalThis.__wandIpcLoggerInstalled) { + return; + } + + globalThis.__wandIpcLoggerInstalled = true; + + try { + const electron = window.require ? window.require('electron') : null; + if (!electron || !electron.ipcRenderer) { + console.warn('[WandEnhancer] ipc-logger: electron.ipcRenderer not found. Node integration might be disabled or hidden behind contextBridge.'); + return; + } + + const { ipcRenderer } = electron; + + // Backup original methods + const originalInvoke = ipcRenderer.invoke.bind(ipcRenderer); + const originalSend = ipcRenderer.send.bind(ipcRenderer); + + // Hook invoke (Promises) + ipcRenderer.invoke = async function (channel, ...args) { + const startTime = performance.now(); + try { + const result = await originalInvoke(channel, ...args); + const duration = (performance.now() - startTime).toFixed(1); + console.log(`%c[IPC INVOKE]%c ${channel} %c(${duration}ms) =>`, 'color: #00c7f2; font-weight: bold;', 'color: white;', 'color: gray;', { args, result }); + return result; + } catch (err) { + console.error(`%c[IPC INVOKE ERROR]%c ${channel} =>`, 'color: #ff0056; font-weight: bold;', 'color: white;', { args, err }); + throw err; + } + }; + + // Hook send (Fire & Forget) + ipcRenderer.send = function (channel, ...args) { + console.log(`%c[IPC SEND]%c ${channel} =>`, 'color: #acff35; font-weight: bold;', 'color: white;', { args }); + return originalSend(channel, ...args); + }; + + console.log('%c[WandEnhancer]%c IPC Logger installed successfully! Use Ctrl+Shift+D to view logs.', 'color: #1293ff; font-weight: bold;', 'color: inherit;'); + + } catch (err) { + console.error('[WandEnhancer] Failed to hook IPC:', err); + } +})(globalThis.WandEnhancer);