import { EventEmitter } from 'events';
import { ConduitPlugin, PluginConfig, RoutingContext, RoutingDecision, HealthStatus } from '../types';
/**
 * Enhanced plugin manager with lifecycle hooks and health monitoring
 */
export declare class PluginManager extends EventEmitter {
    private plugins;
    private pluginConfigs;
    /**
     * Load plugins from configuration
     */
    loadPlugins(configs: PluginConfig[]): Promise<void>;
    /**
     * Load plugins from directory (backward compatibility)
     */
    loadPluginsFromDirectory(pluginDir: string): Promise<void>;
    /**
     * Load a single plugin from configuration
     */
    private loadPlugin;
    /**
     * Load a builtin plugin from the conduit package
     */
    private loadBuiltinPlugin;
    /**
     * Load plugin from file
     */
    private loadPluginFromFile;
    /**
     * Load plugin file (backward compatibility)
     */
    private loadPluginFile;
    /**
     * Register a plugin with lifecycle management
     */
    private registerPlugin;
    /**
     * Unregister a plugin
     */
    private unregisterPlugin;
    /**
     * Execute beforeRouting hooks
     */
    beforeRouting(context: RoutingContext): Promise<RoutingContext>;
    /**
     * Execute afterRouting hooks
     */
    afterRouting(decision: RoutingDecision): Promise<RoutingDecision>;
    /**
     * Execute custom routing
     */
    customRouting(context: RoutingContext): Promise<RoutingDecision | null>;
    /**
     * Get health status from all plugins
     */
    getHealthStatus(): Promise<Record<string, HealthStatus>>;
    /**
     * Validate plugin configurations
     */
    validateConfigs(): Record<string, boolean>;
    /**
     * Execute generic hook
     */
    executeHook<T>(hookName: string, data: T): Promise<T>;
    /**
     * Get registered plugins
     */
    getRegisteredPlugins(): string[];
    /**
     * Get plugin by name
     */
    getPlugin(name: string): ConduitPlugin | undefined;
    /**
     * Get plugin configuration
     */
    getPluginConfig(name: string): PluginConfig | undefined;
    /**
     * Get plugin count
     */
    getPluginCount(): number;
    /**
     * Check if plugin is loaded
     */
    hasPlugin(name: string): boolean;
    /**
     * Validate plugin interface
     */
    private isValidPlugin;
    /**
     * Cleanup all plugins
     */
    cleanup(): Promise<void>;
}
//# sourceMappingURL=EnhancedPluginManager.d.ts.map