import { IResponseBodyStringifier } from "../options/IResponseBodyStringifier";
import { TypedRoute } from "./TypedRoute";
/**
 * Encrypted router decorator functions.
 *
 * `EncryptedRoute` is a module containing router decorator functions which
 * encrypts response body data through AES-128/256 encryption. Furthermore, they
 * can boost up JSON string conversion speed about 50x times faster than
 * `class-transformer`, even type safe through
 * [typia](https://github.com/samchon/typia).
 *
 * For reference, if you try to invalid data that is not following the promised
 * type `T`, 500 internal server error would be thrown. Also, as
 * `EncryptedRoute` composes JSON string through `typia.assertStringify<T>()`
 * function, it is not possible to modify response data through interceptors.
 *
 * - AES-128/256
 * - CBC mode
 * - PKCS #5 Padding
 * - Base64 Encoding
 *
 * @author Jeongho Nam - https://github.com/samchon
 */
export declare namespace EncryptedRoute {
    /**
     * Encrypted router decorator function for the GET method.
     *
     * @param paths Path(s) of the HTTP request
     * @returns Method decorator
     */
    const Get: {
        (path?: string | string[]): MethodDecorator;
        <T>(stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
        <T>(path: string | string[], stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
    };
    /**
     * Encrypted router decorator function for the GET method.
     *
     * @param paths Path(s) of the HTTP request
     * @returns Method decorator
     */
    const Post: {
        (path?: string | string[]): MethodDecorator;
        <T>(stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
        <T>(path: string | string[], stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
    };
    /**
     * Encrypted router decorator function for the PATCH method.
     *
     * @param path Path of the HTTP request
     * @returns Method decorator
     */
    const Patch: {
        (path?: string | string[]): MethodDecorator;
        <T>(stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
        <T>(path: string | string[], stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
    };
    /**
     * Encrypted router decorator function for the PUT method.
     *
     * @param path Path of the HTTP request
     * @returns Method decorator
     */
    const Put: {
        (path?: string | string[]): MethodDecorator;
        <T>(stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
        <T>(path: string | string[], stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
    };
    /**
     * Encrypted router decorator function for the DELETE method.
     *
     * @param path Path of the HTTP request
     * @returns Method decorator
     */
    const Delete: {
        (path?: string | string[]): MethodDecorator;
        <T>(stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
        <T>(path: string | string[], stringify?: IResponseBodyStringifier<T> | null): MethodDecorator;
    };
    /**
     * Set the logger function for the response validation failure.
     *
     * If you've configured the transformation option to `validate.log` in the
     * `tsconfig.json` file, then the error log information of the response
     * validation failure would be logged through this function instead of
     * throwing the 400 bad request error.
     *
     * By the way, be careful. If you've configured the response transformation
     * option to be `validate.log`, client may get wrong response data. Therefore,
     * this way is not recommended in the common backend server case.
     *
     * @default console.log
     * @param func Logger function
     */
    function setValidateErrorLogger(func: (log: IValidateErrorLog) => void): void;
    export import IValidateErrorLog = TypedRoute.IValidateErrorLog;
}
