UNPKG

n8n-nodes-a2a-protocol

Version:

Agent2Agent (A2A) Protocol nodes for n8n - Enable agent interoperability, communication, and MCP integration

211 lines (210 loc) 6.56 kB
/** * N8N A2A Protocol - URL Utilities * Provides dynamic URL detection for A2A nodes based on n8n instance configuration */ export interface UrlConfig { protocol: 'http' | 'https'; hostname: string; port?: number; } export interface AgentPortConfig { port: number; name: string; id: string; available?: boolean; } /** * Default A2A port configurations */ export declare const DEFAULT_A2A_PORTS: { REGISTRY: number; AGENTS: { TRANSLATOR: number; CALCULATOR: number; CODING: number; ORCHESTRATOR: number; }; }; /** * Predefined A2A agent configurations */ export declare const PREDEFINED_AGENTS: AgentPortConfig[]; /** * Store an A2A server using UUID-based registry pattern * ⚠️ IMPROVED: Following your UUID server registry approach */ export declare function storeActiveServer(nodeId: string, server: any, port: number, serviceType: 'registry' | 'agent'): string; /** * Get stored server info for a node (using new registry pattern) */ export declare function getActiveServer(nodeId: string): { serverId: string; port: number; serviceType: 'registry' | 'agent'; startedAt: string; } | null; /** * Stop previous server instance for a node (using UUID registry pattern) * ⚠️ IMPROVED: Uses your server registry approach for safe closure */ export declare function stopPreviousServerInstance(nodeId: string): Promise<{ stopped: boolean; message: string; }>; /** * Clean up stored server reference (using UUID registry pattern) * ⚠️ IMPROVED: Uses your server registry approach for safe cleanup */ export declare function cleanupActiveServer(nodeId: string): void; /** * List all stored active servers (using new registry pattern) */ export declare function listActiveServers(): Array<{ nodeId: string; port: number; serviceType: 'registry' | 'agent'; startedAt: string; serverId: string; }>; /** * Check if a specific port is available (both IPv4 and IPv6) */ export declare function isPortAvailable(port: number, host?: string): Promise<boolean>; /** * Find the next available port starting from a given port */ export declare function findNextAvailablePort(startPort: number, maxTries?: number): Promise<number | null>; /** * Check if all required A2A ports are available */ export declare function checkA2APortsAvailability(): Promise<{ available: boolean; conflicts: { port: number; service: string; }[]; suggestions: { port: number; service: string; }[]; }>; /** * Generate port availability error message for users */ export declare function generatePortErrorMessage(conflicts: { port: number; service: string; }[]): string; /** * Gets an available port for A2A registry with fallback */ export declare function getAvailableRegistryPort(preferredPort?: number): Promise<number>; /** * Gets an available port for A2A agent with fallback */ export declare function getAvailableAgentPort(preferredPort?: number): Promise<number>; /** * Checks availability of predefined A2A agent ports */ export declare function checkPredefinedAgentsAvailability(): Promise<AgentPortConfig[]>; /** * Gets placeholder URLs using dynamic configuration */ export declare function getRegistryPlaceholder(): string; export declare function getAgentPlaceholder(): string; /** * Detects the current n8n instance URL configuration * Priority order: * 1. N8N standard environment variables (WEBHOOK_URL, N8N_EDITOR_BASE_URL, etc.) * 2. N8N configuration variables (N8N_HOST, N8N_PROTOCOL, N8N_PORT) * 3. Runtime detection from request context (if available) * 4. Common deployment environment variables * 5. SSL/TLS detection * 6. Default to localhost */ export declare function detectInstanceUrl(): UrlConfig; /** * Builds a complete URL from configuration and path */ export declare function buildUrl(config: UrlConfig, port: number, path?: string): string; /** * Gets the default URL for A2A agent services */ export declare function getDefaultAgentUrl(port: number): string; /** * Gets the default callback URL pattern for A2A callbacks */ export declare function getDefaultCallbackUrl(port: number): string; /** * Gets the default registry URL */ export declare function getDefaultRegistryUrl(port?: number): string; /** * Creates endpoint URLs for an agent */ export declare function createAgentEndpoints(port: number): { endpoint: string; tasks: string; health: string; capabilities: string; }; /** * Logs the detected URL configuration for debugging */ export declare function logUrlConfiguration(port: number): void; /** * Attempts to detect the current n8n instance URL from runtime context * This can be called from within node execution to get more accurate detection */ export declare function detectRuntimeUrl(): UrlConfig | null; /** * Enhanced URL detection that tries runtime detection first, then falls back to environment */ export declare function detectInstanceUrlEnhanced(): UrlConfig; /** * Check if a port is being used by an A2A service and get process info */ export declare function getPortProcessInfo(port: number): Promise<{ inUse: boolean; pid?: number; isA2AService?: boolean; serviceType?: 'registry' | 'agent' | 'other'; canRestart?: boolean; }>; /** * Kill a process by PID (Windows-specific) */ export declare function killProcess(pid: number): Promise<boolean>; /** * Smart port management - kills A2A services for restart, errors for conflicts */ export declare function handlePortConflict(port: number, serviceType: 'registry' | 'agent', serviceName: string): Promise<{ canProceed: boolean; message: string; action: 'proceed' | 'killed_and_restart' | 'error'; }>; /** * Validate port availability and show user-friendly errors for workflow validation * ⚠️ ENHANCED: Performs comprehensive validation that prevents race conditions */ export declare function validateNodePort(port: number, serviceType: 'registry' | 'agent', serviceName: string, nodeId: string): Promise<{ isValid: boolean; errorMessage?: string; suggestedPort?: number; }>; /** * Check for A2A port conflicts across multiple nodes */ export declare function validateWorkflowPorts(nodes: Array<{ nodeId: string; port: number; serviceType: 'registry' | 'agent'; serviceName: string; }>): Promise<{ isValid: boolean; errors: Array<{ nodeId: string; errorMessage: string; suggestedPort?: number; }>; }>;