import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
declare global {
    interface HTMLElementTagNameMap {
        'sz-route-card': SzRouteCard;
    }
}
export type TRouteActionType = 'forward' | 'socket-handler';
export type TTlsMode = 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
export type TPortRange = number | number[] | Array<{
    from: number;
    to: number;
}>;
export interface IRouteMatch {
    ports: TPortRange;
    domains?: string | string[];
    path?: string;
    clientIp?: string[];
    tlsVersion?: string[];
    headers?: Record<string, string>;
    protocol?: 'http' | 'tcp';
}
export interface IRouteTarget {
    host: string | string[];
    port: number | 'preserve';
}
export interface IRouteTls {
    mode: TTlsMode;
    certificate?: 'auto' | {
        key: string;
        cert: string;
    };
}
export interface IRouteAction {
    type: TRouteActionType;
    targets?: IRouteTarget[];
    tls?: IRouteTls;
    websocket?: {
        enabled: boolean;
    };
    loadBalancing?: {
        algorithm: 'round-robin' | 'least-connections' | 'ip-hash';
    };
    forwardingEngine?: 'node' | 'nftables';
}
export interface IRouteSecurity {
    ipAllowList?: string[];
    ipBlockList?: string[];
    maxConnections?: number;
    rateLimit?: {
        enabled: boolean;
        maxRequests: number;
        window: number;
    };
}
export interface IRouteMetadata {
    sourceProfileRef?: string;
    networkTargetRef?: string;
    sourceProfileName?: string;
    networkTargetName?: string;
    lastResolvedAt?: number;
}
export interface IRouteConfig {
    id?: string;
    match: IRouteMatch;
    action: IRouteAction;
    security?: IRouteSecurity;
    headers?: {
        request?: Record<string, string>;
        response?: Record<string, string>;
    };
    metadata?: IRouteMetadata;
    /** When true, only VPN clients whose TargetProfile matches this route get access */
    vpnOnly?: boolean;
    name?: string;
    description?: string;
    priority?: number;
    tags?: string[];
    enabled?: boolean;
}
export declare class SzRouteCard extends DeesElement {
    static demo: () => TemplateResult<1>;
    static demoGroups: string[];
    accessor route: IRouteConfig | null;
    accessor showActions: boolean;
    static styles: import("@design.estate/dees-element").CSSResult[];
    render(): TemplateResult;
    private renderDomains;
    private renderVpn;
    private renderLinked;
    private renderFeatures;
}
