feat(overlay-sync): wire OverlaySyncService into DI, IPC and renderer gating

This commit is contained in:
2025-11-26 19:14:25 +01:00
parent d08f9e5264
commit 1d7c4f78d1
20 changed files with 611 additions and 561 deletions

View File

@@ -21,19 +21,22 @@ export class IPCVerifier {
*/
async testCheckAuth(): Promise<IPCTestResult> {
const start = Date.now();
const channel = 'checkAuth';
const channel = 'auth:check';
try {
const result = await this.app.evaluate(async ({ ipcMain }) => {
return new Promise((resolve) => {
// Simulate IPC call
const mockEvent = { reply: (ch: string, data: any) => resolve(data) } as any;
const handler = (ipcMain as any).listeners('checkAuth')[0];
// Simulate IPC invoke handler by calling the first registered handler for the channel
const handlers = (ipcMain as any).listeners('auth:check') || [];
const handler = handlers[0];
if (!handler) {
resolve({ error: 'Handler not registered' });
} else {
handler(mockEvent);
// Invoke the handler similar to ipcMain.handle invocation signature
// (event, ...args) => Promise
const mockEvent = {} as any;
Promise.resolve(handler(mockEvent)).then((res: any) => resolve(res)).catch((err: any) => resolve({ error: err && err.message ? err.message : String(err) }));
}
});
});
@@ -59,26 +62,27 @@ export class IPCVerifier {
*/
async testGetBrowserMode(): Promise<IPCTestResult> {
const start = Date.now();
const channel = 'getBrowserMode';
const channel = 'browser-mode:get';
try {
const result = await this.app.evaluate(async ({ ipcMain }) => {
return new Promise((resolve) => {
const mockEvent = { reply: (ch: string, data: any) => resolve(data) } as any;
const handler = (ipcMain as any).listeners('getBrowserMode')[0];
const handlers = (ipcMain as any).listeners('browser-mode:get') || [];
const handler = handlers[0];
if (!handler) {
resolve({ error: 'Handler not registered' });
} else {
handler(mockEvent);
const mockEvent = {} as any;
Promise.resolve(handler(mockEvent)).then((res: any) => resolve(res)).catch((err: any) => resolve({ error: err && err.message ? err.message : String(err) }));
}
});
});
return {
channel,
success: typeof result === 'boolean' || !result.error,
error: result.error,
success: (result && !result.error) || typeof result === 'object',
error: result && result.error,
duration: Date.now() - start,
};
} catch (error) {
@@ -96,19 +100,20 @@ export class IPCVerifier {
*/
async testStartAutomationSession(): Promise<IPCTestResult> {
const start = Date.now();
const channel = 'startAutomationSession';
const channel = 'start-automation';
try {
const result = await this.app.evaluate(async ({ ipcMain }) => {
return new Promise((resolve) => {
const mockEvent = { reply: (ch: string, data: any) => resolve(data) } as any;
const handler = (ipcMain as any).listeners('startAutomationSession')[0];
const handlers = (ipcMain as any).listeners('start-automation') || [];
const handler = handlers[0];
if (!handler) {
resolve({ error: 'Handler not registered' });
} else {
// Test with mock data
handler(mockEvent, { mode: 'test' });
const mockEvent = {} as any;
Promise.resolve(handler(mockEvent, { sessionName: 'test', mode: 'test' })).then((res: any) => resolve(res)).catch((err: any) => resolve({ error: err && err.message ? err.message : String(err) }));
}
});
});