import * as plugins from '../../plugins.js';
import type { IRouteConfig } from '../../proxies/smart-proxy/models/route-types.js';
/**
 * Interface for router result with additional metadata
 */
export interface RouterResult {
    route: IRouteConfig;
    pathMatch?: string;
    pathParams?: Record<string, string>;
    pathRemainder?: string;
}
/**
 * Logger interface for HttpRouter
 */
export interface ILogger {
    debug?: (message: string, data?: any) => void;
    info: (message: string, data?: any) => void;
    warn: (message: string, data?: any) => void;
    error: (message: string, data?: any) => void;
}
/**
 * Unified HTTP Router for reverse proxy requests
 *
 * Domain matching patterns:
 * - Exact matches: "example.com"
 * - Wildcard subdomains: "*.example.com" (matches any subdomain of example.com)
 * - TLD wildcards: "example.*" (matches example.com, example.org, etc.)
 * - Complex wildcards: "*.lossless*" (matches any subdomain of any lossless domain)
 * - Default fallback: "*" (matches any unmatched domain)
 *
 * Path pattern matching:
 * - Exact path: "/api/users"
 * - Wildcard paths: "/api/*"
 * - Path parameters: "/users/:id/profile"
 */
export declare class HttpRouter {
    private routes;
    private defaultRoute?;
    private logger;
    constructor(routes?: IRouteConfig[], logger?: ILogger);
    /**
     * Sets a new set of routes
     * @param routes Array of route configurations
     */
    setRoutes(routes: IRouteConfig[]): void;
    /**
     * Routes a request based on hostname and path
     * @param req The incoming HTTP request
     * @returns The matching route or undefined if no match found
     */
    routeReq(req: plugins.http.IncomingMessage): IRouteConfig | undefined;
    /**
     * Routes a request with detailed matching information
     * @param req The incoming HTTP request
     * @returns Detailed routing result including matched route and path information
     */
    routeReqWithDetails(req: plugins.http.IncomingMessage): RouterResult | undefined;
    /**
     * Find the best matching route for a given hostname and path
     */
    private findMatchingRoute;
    /**
     * Gets all currently active route configurations
     * @returns Array of all active routes
     */
    getRoutes(): IRouteConfig[];
    /**
     * Gets all hostnames that this router is configured to handle
     * @returns Array of unique hostnames
     */
    getHostnames(): string[];
    /**
     * Adds a single new route configuration
     * @param route The route configuration to add
     */
    addRoute(route: IRouteConfig): void;
    /**
     * Removes routes by domain pattern
     * @param domain The domain pattern to remove routes for
     * @returns Boolean indicating whether any routes were removed
     */
    removeRoutesByDomain(domain: string): boolean;
    /**
     * Remove a specific route by reference
     * @param route The route to remove
     * @returns Boolean indicating if the route was found and removed
     */
    removeRoute(route: IRouteConfig): boolean;
}
