import { BrowserWindow } from 'electron'; import { gatewayManager } from '@electron/gateway/manager'; import { providerApiService } from '@electron/service/provider-api-service'; import type { HostApiContext } from './context'; import type { HostApiRequest } from './route-utils'; import { normalizeRequest } from './route-utils'; import { handleFileRoutes } from './routes/files'; import { handleGatewayRoutes } from './routes/gateway'; import { handleModelRoutes } from './routes/models'; import { handleProviderRoutes } from './routes/providers'; import { handleSessionRoutes } from './routes/sessions'; type RouteHandler = ( request: ReturnType, ctx: HostApiContext, ) => Promise; const routeHandlers: RouteHandler[] = [ handleProviderRoutes, handleModelRoutes, handleGatewayRoutes, handleFileRoutes, handleSessionRoutes, ]; function createContext(): HostApiContext { return { gatewayManager, providerApiService, mainWindow: BrowserWindow.getAllWindows()[0] ?? null, }; } export async function dispatchLocalHostApi(request: HostApiRequest) { const normalized = normalizeRequest(request); const ctx = createContext(); for (const handler of routeHandlers) { const result = await handler(normalized, ctx); if (result) { return result; } } return null; }