import type { IncomingMessage as NodeIncomingMessage, ServerResponse as NodeServerResponse } from 'node:http';
import type { Socket } from 'node:net';
import { TLSSocket } from 'node:tls';
import type { Headers as ResponseHeaders } from './Headers.ts';
interface IncomingMessage extends NodeIncomingMessage {
    authority?: string;
    socket: (Socket | TLSSocket) & {
        authorized?: boolean;
        encrypted?: boolean;
        getPeerCertificate?: (detailed?: boolean) => any;
        server?: {
            mtlsConfig?: any;
        };
    };
}
/**
 * We define our own request class, to ensure that it has integrity against leaks in a secure environment
 * and for better conformance to WHATWG standards.
 */
export declare class Request {
    #private;
    _nodeRequest: IncomingMessage;
    _nodeResponse?: NodeServerResponse;
    method: string;
    url: string;
    headers: Headers;
    isWebSocket?: boolean;
    user?: any;
    response: {
        status?: number;
        headers: ResponseHeaders;
    };
    __harperRequestUpgraded: boolean;
    constructor(nodeRequest: IncomingMessage, nodeResponse: NodeServerResponse);
    get absoluteURL(): string;
    get pathname(): string;
    set pathname(pathname: string);
    get protocol(): "http" | "https";
    get ip(): string;
    get authorized(): boolean;
    get peerCertificate(): any;
    get mtlsConfig(): any;
    get body(): RequestBody;
    get host(): string;
    get hostname(): string;
    get httpVersion(): string;
    get isAborted(): boolean;
    get nodeRequest(): IncomingMessage;
    sendEarlyHints(link: string, headers?: Record<string, any>): void;
}
declare class RequestBody {
    #private;
    constructor(nodeRequest: IncomingMessage);
    on(event: string, listener: (...args: any[]) => void): this;
    pipe(destination: any, options?: any): any;
}
declare class Headers {
    private asObject;
    constructor(asObject: Record<string, string | string[]>);
    set(name: string, value: string | string[]): void;
    get(name: string): string | string[] | undefined;
    has(name: string): boolean;
    [Symbol.iterator](): ArrayIterator<[string, string | string[]]>;
    keys(): string[];
    values(): (string | string[])[];
    delete(name: string): void;
    forEach(callback: (value: string | string[], key: string, headers: Headers) => void): void;
}
export declare let createReuseportFd: any;
export {};
