export interface TunnelOptions {
    provider?: string;
    password?: string;
    maxViewers?: number;
    ttl?: number;
    analytics?: boolean;
}
export interface TunnelInfo {
    url: string;
    provider: string;
    expiresAt?: Date;
    passwordProtected: boolean;
}
export interface TunnelStatus {
    active: boolean;
    info?: TunnelInfo;
    viewers?: number;
    error?: string;
}
export interface TunnelProvider {
    name: string;
    isAvailable(): Promise<boolean>;
    createTunnel(_port: number, _options: ProviderOptions): Promise<TunnelInstance>;
    validateConfig(): Promise<void>;
}
export interface ProviderOptions {
    ttl?: number;
    metadata?: Record<string, string>;
}
export interface TunnelInstance {
    url: string;
    status: 'active' | 'closing' | 'error';
    provider: string;
    createdAt: Date;
    close(): Promise<void>;
    getHealth(): Promise<HealthStatus>;
}
export interface HealthStatus {
    healthy: boolean;
    latency?: number;
    error?: string;
}
export interface TunnelConfig {
    providers: {
        cloudflare?: {
            accountId?: string;
            tunnelName?: string;
        };
        ngrok?: {
            authToken?: string;
            region?: string;
        };
    };
    defaults: {
        provider: string;
        ttl: number;
        maxViewers: number;
    };
    security: {
        requirePassword: boolean;
        allowedOrigins: string[];
    };
}
export declare class TunnelProviderError extends Error {
    readonly provider: string;
    readonly code: string;
    readonly userMessage?: string | undefined;
    readonly troubleshooting?: string[] | undefined;
    constructor(provider: string, code: string, message: string, userMessage?: string | undefined, troubleshooting?: string[] | undefined);
    /**
     * Get user-friendly error message with troubleshooting steps
     */
    getUserFriendlyMessage(): string;
}
export interface TunnelRecoveryOptions {
    maxRetries?: number;
    retryDelay?: number;
    healthCheckInterval?: number;
    enableAutoReconnect?: boolean;
}
export interface TunnelHealth {
    status: 'healthy' | 'degraded' | 'unhealthy';
    lastCheck: Date;
    consecutiveFailures: number;
    uptime: number;
}
//# sourceMappingURL=types.d.ts.map