import { EventEmitter } from "node:events"; import type { AppManifest } from "@edenapp/types"; import { DlcResourceManager } from "../package-manager/DlcResourceManager"; import { type PlatformMessagePort, type PlatformUtilityProcess, type UtilityProcessPort } from "../platform/ports"; /** * BackendManager * * Manages utility processes for app backends. * Each app's backend code runs in an isolated utility process. * Uses Electron's utilityProcess for better main process integration * and MessageChannelMain for direct frontend<->backend communication. */ export declare class BackendManager extends EventEmitter { private utilityProcesses; private readonly dlcResources; private backends; private backendData; private distPath; /** * MessagePort pairs for frontend<->backend communication * The BackendManager holds references to the main-process side of ports */ private backendPorts; constructor(distPath: string, utilityProcesses: UtilityProcessPort, dlcResources: DlcResourceManager); private getMessageType; /** * Create and start a utility process for an app backend */ createBackend(appId: string, manifest: AppManifest, installPath: string, launchArgs?: string[]): Promise<{ backend: PlatformUtilityProcess; }>; /** * Send a message to a backend's utility process (for IPC from main) */ sendMessage(appId: string, message: unknown): boolean; /** * Send a message with ports to a backend's utility process */ sendPortToBackend(appId: string, message: unknown, ports: PlatformMessagePort[]): boolean; /** * Get the frontend port for an app (to transfer to renderer) */ getFrontendPort(appId: string): PlatformMessagePort | undefined; /** * Terminate a backend utility process */ terminateBackend(appId: string): Promise; /** * Get backend by app ID */ getBackend(appId: string): PlatformUtilityProcess | undefined; /** * Check if backend exists for app */ hasBackend(appId: string): boolean; /** * Get all running backend IDs */ getRunningBackends(): string[]; /** * Handle messages from backends (for system-level IPC) */ private handleBackendMessage; private pipeBackendOutput; /** * Terminate all backends */ terminateAll(): Promise; dispose(): Promise; } //# sourceMappingURL=BackendManager.d.ts.map