From dac5330d4cd47bc14b70d011982627dba341ec36 Mon Sep 17 00:00:00 2001 From: Richard Osborne Date: Thu, 15 Jan 2026 18:47:20 +0100 Subject: [PATCH] fix(editor): use correct IPC transport pattern in useLocalBackends Use window.require('electron').ipcRenderer.invoke() pattern which is consistent with how GitHubOAuthService and other IPC calls work. This fixes 'No IPC transport available' error when using local backends. --- .../hooks/useLocalBackends.ts | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/packages/noodl-editor/src/editor/src/views/panels/BackendServicesPanel/hooks/useLocalBackends.ts b/packages/noodl-editor/src/editor/src/views/panels/BackendServicesPanel/hooks/useLocalBackends.ts index 8487d28..b629da7 100644 --- a/packages/noodl-editor/src/editor/src/views/panels/BackendServicesPanel/hooks/useLocalBackends.ts +++ b/packages/noodl-editor/src/editor/src/views/panels/BackendServicesPanel/hooks/useLocalBackends.ts @@ -9,7 +9,6 @@ */ import { useCallback, useEffect, useState } from 'react'; -import { platform } from '@noodl/platform'; /** Backend metadata as stored in config.json */ export interface LocalBackendMetadata { @@ -52,23 +51,16 @@ export interface UseLocalBackendsReturn { /** * Invoke IPC handler with error handling + * Uses window.require('electron').ipcRenderer like GitHubOAuthService */ async function invokeIPC(channel: string, ...args: unknown[]): Promise { try { - // Use platform's invoke if available, otherwise fallback to window.electronAPI - const electronAPI = (window as unknown as { electronAPI?: { invoke: (ch: string, ...a: unknown[]) => Promise } }) - .electronAPI; - if (electronAPI?.invoke) { - return await electronAPI.invoke(channel, ...args); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const { ipcRenderer } = (window as any).require('electron'); + if (ipcRenderer?.invoke) { + return await ipcRenderer.invoke(channel, ...args); } - // Try Noodl platform - if (platform && (platform as unknown as { ipcInvoke?: (ch: string, ...a: unknown[]) => Promise }).ipcInvoke) { - return await (platform as unknown as { ipcInvoke: (ch: string, ...a: unknown[]) => Promise }).ipcInvoke( - channel, - ...args - ); - } - console.warn('[useLocalBackends] No IPC transport available'); + console.warn('[useLocalBackends] ipcRenderer not available'); return null; } catch (error) { console.error(`[useLocalBackends] IPC error (${channel}):`, error);