import { Application } from './Application';
import { Request } from './Request';
import { Response, TSupportedResponseTypes } from './Response';
import { Middleware } from './Middleware';
import { StormError } from './StormError';
import { ResponseData } from './ResponseData';
export declare class Handler<TApplication extends Application = Application, TGetRequest = void, TGetResponse extends TSupportedResponseTypes = TSupportedResponseTypes, TPostRequest = void, TPostResponse extends TSupportedResponseTypes = TSupportedResponseTypes, TPutRequest = void, TPutResponse extends TSupportedResponseTypes = TSupportedResponseTypes, TDeleteRequest = void, TDeleteResponse extends TSupportedResponseTypes = TSupportedResponseTypes> {
    private static $requestDuration;
    private $app;
    /**
     * @deprecated
     */
    private $middlewares;
    constructor(app: TApplication);
    getApplication(): TApplication;
    /**
     * @deprecated
     */
    protected _initMiddlewares(): Middleware[];
    getAccessToken(request: Request<unknown>): string;
    /**
     * @deprecated
     * @param request
     * @param response
     * @returns
     */
    private $executeMiddlewares;
    /**
     * @deprecated
     * @param request
     * @param response
     * @param error
     */
    protected _onMiddlewareReject(request: Request, response: Response<any>, error: StormError): void;
    private $handleResponse;
    private $handleResponseError;
    protected _logRequestStart(request: Request<unknown>): void;
    protected _logRequestEnd(request: Request<unknown>, response: Response<any>, elapsed: number): void;
    get(request: Request<TGetRequest>, response: Response<TGetResponse>): Promise<void>;
    put(request: Request<TPutRequest>, response: Response<TPutResponse>): Promise<void>;
    post(request: Request<TPostRequest>, response: Response<TPostResponse>): Promise<void>;
    delete(request: Request<TDeleteRequest>, response: Response<TDeleteResponse>): Promise<void>;
    protected _get(request: Request<TGetRequest>): Promise<TGetResponse | ResponseData<TGetResponse>>;
    protected _post(request: Request<TPostRequest>): Promise<TPostResponse | ResponseData<TPostResponse>>;
    protected _put(request: Request<TPutRequest>): Promise<TPutResponse | ResponseData<TPutResponse>>;
    protected _delete(request: Request<TDeleteRequest>): Promise<TDeleteResponse | ResponseData<TDeleteResponse>>;
}
