import * as plugins from './plugins.js';
/** Domain configuration with per-domain allowed port ranges */
export interface IDomainConfig {
    domains: string[];
    allowedIPs: string[];
    blockedIPs?: string[];
    targetIPs?: string[];
    portRanges?: Array<{
        from: number;
        to: number;
    }>;
    connectionTimeout?: number;
    useNetworkProxy?: boolean;
    networkProxyPort?: number;
}
/** Port proxy settings including global allowed port ranges */
export interface IPortProxySettings {
    fromPort: number;
    toPort: number;
    targetIP?: string;
    domainConfigs: IDomainConfig[];
    sniEnabled?: boolean;
    defaultAllowedIPs?: string[];
    defaultBlockedIPs?: string[];
    preserveSourceIP?: boolean;
    pfx?: Buffer;
    key?: string | Buffer | Array<Buffer | string>;
    passphrase?: string;
    cert?: string | Buffer | Array<string | Buffer>;
    ca?: string | Buffer | Array<string | Buffer>;
    ciphers?: string;
    honorCipherOrder?: boolean;
    rejectUnauthorized?: boolean;
    secureProtocol?: string;
    servername?: string;
    minVersion?: string;
    maxVersion?: string;
    initialDataTimeout?: number;
    socketTimeout?: number;
    inactivityCheckInterval?: number;
    maxConnectionLifetime?: number;
    inactivityTimeout?: number;
    gracefulShutdownTimeout?: number;
    globalPortRanges: Array<{
        from: number;
        to: number;
    }>;
    forwardAllGlobalRanges?: boolean;
    noDelay?: boolean;
    keepAlive?: boolean;
    keepAliveInitialDelay?: number;
    maxPendingDataSize?: number;
    disableInactivityCheck?: boolean;
    enableKeepAliveProbes?: boolean;
    enableDetailedLogging?: boolean;
    enableTlsDebugLogging?: boolean;
    enableRandomizedTimeouts?: boolean;
    allowSessionTicket?: boolean;
    maxConnectionsPerIP?: number;
    connectionRateLimitPerMinute?: number;
    keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
    keepAliveInactivityMultiplier?: number;
    extendedKeepAliveLifetime?: number;
    useNetworkProxy?: number[];
    networkProxyPort?: number;
    port80HandlerConfig?: {
        enabled?: boolean;
        port?: number;
        contactEmail?: string;
        useProduction?: boolean;
        renewThresholdDays?: number;
        autoRenew?: boolean;
        certificateStore?: string;
        skipConfiguredCerts?: boolean;
        httpsRedirectPort?: number;
        renewCheckIntervalHours?: number;
        domainForwards?: Array<{
            domain: string;
            forwardConfig?: {
                ip: string;
                port: number;
            };
            acmeForwardConfig?: {
                ip: string;
                port: number;
            };
        }>;
    };
    acme?: {
        enabled?: boolean;
        port?: number;
        contactEmail?: string;
        useProduction?: boolean;
        renewThresholdDays?: number;
        autoRenew?: boolean;
        certificateStore?: string;
        skipConfiguredCerts?: boolean;
    };
}
/**
 * Enhanced connection record
 */
export interface IConnectionRecord {
    id: string;
    incoming: plugins.net.Socket;
    outgoing: plugins.net.Socket | null;
    incomingStartTime: number;
    outgoingStartTime?: number;
    outgoingClosedTime?: number;
    lockedDomain?: string;
    connectionClosed: boolean;
    cleanupTimer?: NodeJS.Timeout;
    alertFallbackTimeout?: NodeJS.Timeout;
    lastActivity: number;
    pendingData: Buffer[];
    pendingDataSize: number;
    bytesReceived: number;
    bytesSent: number;
    remoteIP: string;
    localPort: number;
    isTLS: boolean;
    tlsHandshakeComplete: boolean;
    hasReceivedInitialData: boolean;
    domainConfig?: IDomainConfig;
    hasKeepAlive: boolean;
    inactivityWarningIssued?: boolean;
    incomingTerminationReason?: string | null;
    outgoingTerminationReason?: string | null;
    usingNetworkProxy?: boolean;
    renegotiationHandler?: (chunk: Buffer) => void;
    isBrowserConnection?: boolean;
    domainSwitches?: number;
}
