import { Reflector } from '@nestjs/core';
import { Observable } from 'rxjs';
import { BadRequestException, CallHandler, ExecutionContext, HttpException, HttpExceptionOptions, InternalServerErrorException, NestInterceptor } from '@nestjs/common';
import { AppRoute, AppRouter, ServerInferResponses } from '@ts-rest/core';
import { TsRestRequestShape } from './ts-rest-request.decorator';
import { z } from 'zod';
import { MaybeTsRestOptions, TsRestOptions } from './ts-rest-options';
export declare class RequestValidationError extends BadRequestException {
    pathParams: z.ZodError | null;
    headers: z.ZodError | null;
    query: z.ZodError | null;
    body: z.ZodError | null;
    constructor(pathParams: z.ZodError | null, headers: z.ZodError | null, query: z.ZodError | null, body: z.ZodError | null);
}
export declare const RequestValidationErrorSchema: z.ZodObject<{
    paramsResult: z.ZodNullable<z.ZodObject<{
        name: z.ZodLiteral<"ZodError">;
        issues: z.ZodArray<z.ZodObject<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, "strip", z.ZodAny, z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">, z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">>, "many">;
    }, "strip", z.ZodTypeAny, {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }, {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }>>;
    headersResult: z.ZodNullable<z.ZodObject<{
        name: z.ZodLiteral<"ZodError">;
        issues: z.ZodArray<z.ZodObject<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, "strip", z.ZodAny, z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">, z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">>, "many">;
    }, "strip", z.ZodTypeAny, {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }, {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }>>;
    queryResult: z.ZodNullable<z.ZodObject<{
        name: z.ZodLiteral<"ZodError">;
        issues: z.ZodArray<z.ZodObject<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, "strip", z.ZodAny, z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">, z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">>, "many">;
    }, "strip", z.ZodTypeAny, {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }, {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }>>;
    bodyResult: z.ZodNullable<z.ZodObject<{
        name: z.ZodLiteral<"ZodError">;
        issues: z.ZodArray<z.ZodObject<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, "strip", z.ZodAny, z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">, z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">>, "many">;
    }, "strip", z.ZodTypeAny, {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }, {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    }>>;
}, "strip", z.ZodTypeAny, {
    paramsResult: {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    headersResult: {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    queryResult: {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    bodyResult: {
        name: "ZodError";
        issues: z.objectOutputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
}, {
    paramsResult: {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    headersResult: {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    queryResult: {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
    bodyResult: {
        name: "ZodError";
        issues: z.objectInputType<{
            path: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">;
            message: z.ZodOptional<z.ZodString>;
            code: z.ZodNativeEnum<{
                invalid_type: "invalid_type";
                invalid_literal: "invalid_literal";
                custom: "custom";
                invalid_union: "invalid_union";
                invalid_union_discriminator: "invalid_union_discriminator";
                invalid_enum_value: "invalid_enum_value";
                unrecognized_keys: "unrecognized_keys";
                invalid_arguments: "invalid_arguments";
                invalid_return_type: "invalid_return_type";
                invalid_date: "invalid_date";
                invalid_string: "invalid_string";
                too_small: "too_small";
                too_big: "too_big";
                invalid_intersection_types: "invalid_intersection_types";
                not_multiple_of: "not_multiple_of";
                not_finite: "not_finite";
            }>;
        }, z.ZodAny, "strip">[];
    } | null;
}>;
export declare class ResponseValidationError extends InternalServerErrorException {
    appRoute: AppRoute;
    error: z.ZodError;
    constructor(appRoute: AppRoute, error: z.ZodError);
}
export declare const TsRestHandler: (appRouterOrRoute: AppRouter | AppRoute, options?: TsRestOptions) => MethodDecorator;
type NestHandlerImplementation<T extends AppRouter | AppRoute> = T extends AppRoute ? (args: TsRestRequestShape<T>) => Promise<ServerInferResponses<T>> : {
    [K in keyof T]: T[K] extends AppRoute ? (args: TsRestRequestShape<T[K]>) => Promise<ServerInferResponses<T[K]>> : never;
};
/**
 *
 * @param contract - The contract or route to implement
 * @param implementation - Implementation of the route or entire contract as an object
 * @returns
 */
export declare const tsRestHandler: <T extends AppRoute | AppRouter>(contract: T, implementation: NestHandlerImplementation<T>) => NestHandlerImplementation<T>;
/**
 * Error you can throw to return a response from a handler
 */
export declare class TsRestException<T extends AppRoute> extends HttpException {
    constructor(route: T, response: ServerInferResponses<T>, options?: HttpExceptionOptions);
}
export declare class TsRestHandlerInterceptor implements NestInterceptor {
    private reflector;
    private globalOptions;
    constructor(reflector: Reflector, globalOptions: MaybeTsRestOptions);
    /**
     * We use metadata to store the route, and the key of the route in a router on a given method
     */
    private getAppRouteFromContext;
    intercept(ctx: ExecutionContext, next: CallHandler<any>): Observable<any>;
}
export {};
