import * as express from 'express';
import { IncomingHttpHeaders } from 'http';
import { Writable } from 'stream';
import { IFormData } from './IFormData';
import { IAuthTokenData } from './IAuthTokenData';
import { IDatabasePosition } from './IDatabasePosition';
export type IQueryParamValue = undefined | string | IQueryParams | (string | IQueryParams)[];
export interface IQueryParams {
    [key: string]: IQueryParamValue;
}
export interface IParameterMap {
    [key: string]: string | string[];
}
export declare class Request<TBody = any, TAuthToken extends IAuthTokenData = IAuthTokenData> {
    private $request;
    constructor(request: express.Request);
    getBody(): TBody;
    getForm(): Promise<IFormData>;
    getHeaders(): IncomingHttpHeaders;
    getHeader(name: string): string;
    getQueryVariables(): IQueryParams;
    getQueryVariable(name: string): IQueryParamValue;
    getQuerySingleVariable(name: string): string;
    getQueryMultiVariable(name: string): string[];
    getParams(): IParameterMap;
    getParam(name: string): string | string[];
    /**
     * Returns the matched route
     */
    getRoute(): string;
    /**
     * Gets a URL parameter as string. If the value is multiple
     * then only the first value is returned.
     * This is a convenience method over `getParam` which returns a union.
     */
    getURLSingleParam(name: string): string;
    /**
     * Gets a URL parameter as string[].
     * This is a convenience method over `getParam` which returns a union.
     */
    getURLMultiParam(name: string): string[];
    getIP(): string;
    getForwardedIP(): string;
    getHostname(): string;
    getMethod(): string;
    getURL(): string;
    isSecure(): boolean;
    pipe(destination: Writable): Writable;
    unpipe(source: Writable): void;
    getRequestSource(): express.Request;
    /**
     * Reads the Page/Position DB headers if present
     * Will return null if headers are not parseable.
     *
     * @since 9.1.0
     * @returns {IDatabasePosition}
     */
    getDatabasePosition(): IDatabasePosition;
    getAuthenticationToken(): Promise<TAuthToken>;
}
