import type { ITransportAdapter } from './ITransportAdapter';
/**
 * Interface for transport adapter registry.
 *
 * Martin Fowler (PoEAA):
 *   "Registry pattern provides a single point of lookup for services.
 *    But it should be injected, not accessed globally."
 *
 * Mark Miller (Capability Security):
 *   "The registry is itself a capability. Only holders can register/resolve."
 *
 * This interface enables:
 * - Dependency injection instead of global singleton
 * - Test isolation with separate registries
 * - Future distributed implementations
 */
export interface ITransportRegistry {
    /**
     * Register a transport adapter for a scheme.
     *
     * @param scheme - URI scheme (e.g., 'matrix', 'nats', 'http')
     * @param adapter - Transport adapter implementation
     */
    register(scheme: string, adapter: ITransportAdapter): void;
    /**
     * Unregister a transport adapter.
     *
     * @param scheme - URI scheme to unregister
     */
    unregister(scheme: string): void;
    /**
     * Check if a scheme has a registered adapter.
     *
     * @param scheme - URI scheme to check
     * @returns true if adapter exists
     */
    has(scheme: string): boolean;
    /**
     * Resolve transport adapter by scheme.
     *
     * @param scheme - URI scheme to resolve
     * @returns The transport adapter
     * @throws Error if no adapter registered for scheme
     */
    resolveByScheme(scheme: string): ITransportAdapter;
    /**
     * Clear all registered adapters.
     * Primarily for testing.
     */
    clear(): void;
}
//# sourceMappingURL=ITransportRegistry.d.ts.map