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.
This commit is contained in:
Richard Osborne
2026-01-15 18:47:20 +01:00
parent 9181d5d83c
commit dac5330d4c

View File

@@ -9,7 +9,6 @@
*/ */
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { platform } from '@noodl/platform';
/** Backend metadata as stored in config.json */ /** Backend metadata as stored in config.json */
export interface LocalBackendMetadata { export interface LocalBackendMetadata {
@@ -52,23 +51,16 @@ export interface UseLocalBackendsReturn {
/** /**
* Invoke IPC handler with error handling * Invoke IPC handler with error handling
* Uses window.require('electron').ipcRenderer like GitHubOAuthService
*/ */
async function invokeIPC<T>(channel: string, ...args: unknown[]): Promise<T | null> { async function invokeIPC<T>(channel: string, ...args: unknown[]): Promise<T | null> {
try { try {
// Use platform's invoke if available, otherwise fallback to window.electronAPI // eslint-disable-next-line @typescript-eslint/no-explicit-any
const electronAPI = (window as unknown as { electronAPI?: { invoke: (ch: string, ...a: unknown[]) => Promise<T> } }) const { ipcRenderer } = (window as any).require('electron');
.electronAPI; if (ipcRenderer?.invoke) {
if (electronAPI?.invoke) { return await ipcRenderer.invoke(channel, ...args);
return await electronAPI.invoke(channel, ...args);
} }
// Try Noodl platform console.warn('[useLocalBackends] ipcRenderer not available');
if (platform && (platform as unknown as { ipcInvoke?: (ch: string, ...a: unknown[]) => Promise<T> }).ipcInvoke) {
return await (platform as unknown as { ipcInvoke: (ch: string, ...a: unknown[]) => Promise<T> }).ipcInvoke(
channel,
...args
);
}
console.warn('[useLocalBackends] No IPC transport available');
return null; return null;
} catch (error) { } catch (error) {
console.error(`[useLocalBackends] IPC error (${channel}):`, error); console.error(`[useLocalBackends] IPC error (${channel}):`, error);