import { N as NextRestFrameworkConfig, B as BaseQuery, a as BaseParams, A as AnyContentTypeWithAutocompleteForMostCommonOnes, O as OutputObject, b as BaseOptions, c as BaseStatus, d as BaseContentType, e as OpenApiOperation, M as Modify, f as AnyCase, g as OpenApiPathItem, R as RpcOperationDefinition, h as RpcClient } from './index-RAoE6vgd.js';
export { r as rpcOperation } from './index-RAoE6vgd.js';
import * as openapi_types from 'openapi-types';
import { OpenAPIV3_1 } from 'openapi-types';
import { NextApiRequest, NextApiResponse } from 'next/types';
import { ValidMethod } from './constants.js';
import { z, ZodSchema } from 'zod';
import { NextRequest, NextResponse } from 'next/server';
import { I18NConfig } from 'next/dist/server/config-shared';
import { ResponseCookies } from 'next/dist/server/web/spec-extension/cookies';
import { NextURL } from 'next/dist/server/web/next-url';

declare const docsRoute: (_config?: NextRestFrameworkConfig) => {
    GET: {
        (req: NextRequest, _context: {
            params: BaseQuery;
        }): Promise<NextResponse<unknown>>;
        _nextRestFrameworkConfig: Required<NextRestFrameworkConfig> & NextRestFrameworkConfig;
    };
};

type TypedNextRequest<Body = unknown, Query = BaseQuery> = Modify<NextRequest, {
    json: () => Promise<Body>;
    method: ValidMethod;
    nextUrl: Modify<NextURL, {
        searchParams: Modify<URLSearchParams, {
            get: (key: keyof Query) => string | null;
            getAll: (key: keyof Query) => string[];
        }>;
    }>;
}>;
type TypedHeaders<ContentType extends BaseContentType> = Modify<Record<string, string>, {
    [K in AnyCase<'Content-Type'>]?: ContentType;
}>;
interface TypedResponseInit<Status extends BaseStatus, ContentType extends BaseContentType> extends globalThis.ResponseInit {
    nextConfig?: {
        basePath?: string;
        i18n?: I18NConfig;
        trailingSlash?: boolean;
    };
    url?: string;
    status?: Status;
    headers?: TypedHeaders<ContentType>;
}
interface ModifiedRequest {
    headers?: Headers;
}
interface TypedMiddlewareResponseInit<Status extends BaseStatus> extends globalThis.ResponseInit {
    request?: ModifiedRequest;
    status?: Status;
}
declare const INTERNALS: unique symbol;
declare class TypedNextResponseType<Body, Status extends BaseStatus, ContentType extends BaseContentType> extends Response {
    [INTERNALS]: {
        cookies: ResponseCookies;
        url?: NextURL;
        body?: Body;
        status?: Status;
        contentType?: ContentType;
    };
    constructor(body?: BodyInit | null, init?: TypedResponseInit<Status, ContentType>);
    get cookies(): ResponseCookies;
    static json<Body, Status extends BaseStatus, ContentType extends BaseContentType>(body: Body, init?: TypedResponseInit<Status, ContentType>): TypedNextResponseType<Body, Status, ContentType>;
    static redirect<Status extends BaseStatus, ContentType extends BaseContentType>(url: string | NextURL | URL, init?: number | TypedResponseInit<Status, ContentType>): TypedNextResponseType<unknown, Status, ContentType>;
    static rewrite<Status extends BaseStatus, ContentType extends BaseContentType>(destination: string | NextURL | URL, init?: TypedMiddlewareResponseInit<Status>): TypedNextResponseType<unknown, Status, ContentType>;
    static next<Status extends BaseStatus, ContentType extends BaseContentType>(init?: TypedMiddlewareResponseInit<Status>): TypedNextResponseType<unknown, Status, ContentType>;
}
declare const TypedNextResponse: typeof TypedNextResponseType;
type RouteMiddleware<InputOptions extends BaseOptions = BaseOptions, OutputOptions extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['schema']>> | void> = (req: NextRequest, context: {
    params: BaseParams;
}, options: InputOptions) => Promise<TypedResponse> | TypedResponse | OutputOptions;
type TypedRouteHandler<Body = unknown, Query extends BaseQuery = BaseQuery, Params extends BaseParams = BaseParams, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>, TypedResponse = TypedNextResponseType<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']> | NextResponse<z.infer<Outputs[number]['schema']>> | void> = (req: TypedNextRequest<Body, Query>, context: {
    params: Params;
}, options: Options) => Promise<TypedResponse> | TypedResponse;
interface InputObject$1<Body = unknown, Query = BaseQuery, Params = BaseParams> {
    contentType?: BaseContentType;
    body?: ZodSchema<Body>;
    query?: ZodSchema<Query>;
    params?: ZodSchema<Params>;
}
interface RouteOperationDefinition<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod> {
    openApiOperation?: OpenApiOperation;
    method: Method;
    input?: InputObject$1;
    outputs?: readonly OutputObject[];
    middleware1?: RouteMiddleware;
    middleware2?: RouteMiddleware;
    middleware3?: RouteMiddleware;
    handler?: TypedRouteHandler;
}
declare const routeOperation: <Method extends "GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">({ openApiOperation, method }: {
    openApiOperation?: Partial<Pick<openapi_types.OpenAPIV3_1.OperationObject<{}>, "servers" | "security" | "tags" | "externalDocs" | "description" | "summary" | "parameters" | "callbacks" | "deprecated">> | undefined;
    method: Method;
}) => {
    input: <Body_1, Query extends BaseQuery, Params extends BaseParams>(input: InputObject$1<Body_1, Query, Params>) => {
        outputs: <ResponseBody, Status extends number, ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ContentType>[]>(outputs: Outputs) => {
            middleware: <Options1 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
                middleware: <Options2 extends BaseOptions>(middleware2: RouteMiddleware<Options1, Options2, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
                    middleware: <Options3 extends BaseOptions>(middleware3: RouteMiddleware<Options2, Options3, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => {
                        handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options3, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
                    };
                    handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
                };
                handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options1, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
            };
            handler: (handler: TypedRouteHandler<Body_1, Query, Params, BaseOptions, ResponseBody, Status, ContentType, Outputs, void | TypedNextResponseType<z.TypeOf<Outputs[number]["schema"]>, Outputs[number]["status"], Outputs[number]["contentType"]> | NextResponse<z.TypeOf<Outputs[number]["schema"]>>>) => RouteOperationDefinition<Method>;
        };
        middleware: <Options1_1 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
            middleware: <Options2_1 extends BaseOptions>(middleware2: RouteMiddleware<Options1_1, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
                middleware: <Options3_1 extends BaseOptions>(middleware3: RouteMiddleware<Options2_1, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
                    outputs: <ResponseBody_1, Status_1 extends number, ContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ContentType_1>[]>(outputs: Outputs_1) => {
                        handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options3_1, ResponseBody_1, Status_1, ContentType_1, Outputs_1, void | TypedNextResponseType<z.TypeOf<Outputs_1[number]["schema"]>, Outputs_1[number]["status"], Outputs_1[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_1[number]["schema"]>>>) => RouteOperationDefinition<Method>;
                    };
                    handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
                };
                outputs: <ResponseBody_2, Status_2 extends number, ContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ContentType_2>[]>(outputs: Outputs_2) => {
                    handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2_1, ResponseBody_2, Status_2, ContentType_2, Outputs_2, void | TypedNextResponseType<z.TypeOf<Outputs_2[number]["schema"]>, Outputs_2[number]["status"], Outputs_2[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_2[number]["schema"]>>>) => RouteOperationDefinition<Method>;
                };
                handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
            };
            outputs: <ResponseBody_3, Status_3 extends number, ContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ContentType_3>[]>(outputs: Outputs_3) => {
                handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options1_1, ResponseBody_3, Status_3, ContentType_3, Outputs_3, void | TypedNextResponseType<z.TypeOf<Outputs_3[number]["schema"]>, Outputs_3[number]["status"], Outputs_3[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_3[number]["schema"]>>>) => RouteOperationDefinition<Method>;
            };
            handler: (handler: TypedRouteHandler<Body_1, Query, Params, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
        };
        handler: (handler: TypedRouteHandler<Body_1, Query, Params, BaseOptions, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
    };
    outputs: <ResponseBody_4, Status_4 extends number, ContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ContentType_4>[]>(outputs: Outputs_4) => {
        middleware: <Options1_2 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
            middleware: <Options2_2 extends BaseOptions>(middleware2: RouteMiddleware<Options1_2, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
                middleware: <Options3_2 extends BaseOptions>(middleware3: RouteMiddleware<Options2_2, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => {
                    handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
                };
                handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
            };
            handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
        };
        handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, BaseOptions, ResponseBody_4, Status_4, ContentType_4, Outputs_4, void | TypedNextResponseType<z.TypeOf<Outputs_4[number]["schema"]>, Outputs_4[number]["status"], Outputs_4[number]["contentType"]> | NextResponse<z.TypeOf<Outputs_4[number]["schema"]>>>) => RouteOperationDefinition<Method>;
    };
    middleware: <Options1_3 extends BaseOptions>(middleware1: RouteMiddleware<BaseOptions, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
        middleware: <Options2_3 extends BaseOptions>(middleware2: RouteMiddleware<Options1_3, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
            middleware: <Options3_3 extends BaseOptions>(middleware3: RouteMiddleware<Options2_3, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => {
                handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
            };
            handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
        };
        handler: (handler: TypedRouteHandler<unknown, BaseQuery, BaseParams, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[], void | NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>) => RouteOperationDefinition<Method>;
    };
    handler: (handler: TypedRouteHandler) => RouteOperationDefinition<Method>;
};

declare const route: <T extends Record<string, RouteOperationDefinition<"GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">>>(operations: T, options?: {
    openApiPath?: OpenApiPathItem;
}) => { [key in T[keyof T]["method"]]: {
    (req: NextRequest, context: {
        params: BaseParams;
    }): Promise<NextResponse<unknown> | TypedNextResponseType<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>>;
    _getPathsForRoute(route: string): Promise<NrfOasData>;
}; };

declare const rpcRoute: <T extends Record<string, RpcOperationDefinition<any, any, any>>>(operations: T, options?: {
    openApiPath?: OpenApiPathItem;
}) => {
    POST: {
        (req: NextRequest, { params }: {
            params: BaseParams;
        }): Promise<NextResponse<any>>;
        _getPathsForRoute(route: string): Promise<NrfOasData>;
        client: RpcClient<T>;
    };
};

interface NrfOasData {
    paths?: OpenAPIV3_1.PathsObject;
    schemas?: Record<string, OpenAPIV3_1.SchemaObject>;
}

type TypedNextApiRequest<Body = unknown, Query = BaseQuery> = Modify<NextApiRequest, {
    body: Body;
    query: Query;
    method: ValidMethod;
}>;
type TypedNextApiResponse<Body, Status, ContentType> = Modify<NextApiResponse<Body>, {
    status: (status: Status) => TypedNextApiResponse<Body, Status, ContentType>;
    redirect: (status: Status, url: string) => TypedNextApiResponse<Body, Status, ContentType>;
    setDraftMode: (options: {
        enable: boolean;
    }) => TypedNextApiResponse<Body, Status, ContentType>;
    setPreviewData: (data: object | string, options?: {
        maxAge?: number;
        path?: string;
    }) => TypedNextApiResponse<Body, Status, ContentType>;
    clearPreviewData: (options?: {
        path?: string;
    }) => TypedNextApiResponse<Body, Status, ContentType>;
    setHeader: <K extends AnyCase<'Content-Type'> | string, V extends number | string | readonly string[]>(name: K, value: K extends AnyCase<'Content-Type'> ? ContentType : V) => void;
}>;
type TypedApiRouteHandler<Body = unknown, Query extends BaseQuery = BaseQuery, Options extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>> = (req: TypedNextApiRequest<Body, Query>, res: TypedNextApiResponse<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']>, options: Options) => Promise<void> | void;
type ApiRouteMiddleware<InputOptions extends BaseOptions = BaseOptions, OutputOptions extends BaseOptions = BaseOptions, ResponseBody = unknown, Status extends BaseStatus = BaseStatus, ContentType extends BaseContentType = BaseContentType, Outputs extends ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>> = ReadonlyArray<OutputObject<ResponseBody, Status, ContentType>>> = (req: NextApiRequest, res: TypedNextApiResponse<z.infer<Outputs[number]['schema']>, Outputs[number]['status'], Outputs[number]['contentType']>, options: InputOptions) => Promise<void> | void | OutputOptions;
interface InputObject<Body = unknown, Query = BaseQuery> {
    contentType?: BaseContentType;
    body?: ZodSchema<Body>;
    query?: ZodSchema<Query>;
}
interface ApiRouteOperationDefinition<Method extends keyof typeof ValidMethod = keyof typeof ValidMethod> {
    openApiOperation?: OpenApiOperation;
    method: Method;
    input?: InputObject;
    outputs?: readonly OutputObject[];
    middleware1?: ApiRouteMiddleware;
    middleware2?: ApiRouteMiddleware;
    middleware3?: ApiRouteMiddleware;
    handler?: TypedApiRouteHandler;
}
declare const apiRouteOperation: <Method extends "GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">({ openApiOperation, method }: {
    openApiOperation?: Partial<Pick<openapi_types.OpenAPIV3_1.OperationObject<{}>, "servers" | "security" | "tags" | "externalDocs" | "description" | "summary" | "parameters" | "callbacks" | "deprecated">> | undefined;
    method: Method;
}) => {
    input: <Body_1, Query extends BaseQuery>(input: InputObject<Body_1, Query>) => {
        outputs: <ResponseBody, Status extends number, ContentType extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs extends readonly OutputObject<ResponseBody, Status, ContentType>[]>(outputs: Outputs) => {
            middleware: <Options1 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1, ResponseBody, Status, ContentType, Outputs>) => {
                middleware: <Options2 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1, Options2, ResponseBody, Status, ContentType, Outputs>) => {
                    middleware: <Options3 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2, Options3, ResponseBody, Status, ContentType, Outputs>) => {
                        handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
                    };
                    handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
                };
                handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
            };
            handler: (handler: TypedApiRouteHandler<Body_1, Query, BaseOptions, ResponseBody, Status, ContentType, Outputs>) => ApiRouteOperationDefinition<Method>;
        };
        middleware: <Options1_1 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
            middleware: <Options2_1 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_1, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
                middleware: <Options3_1 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_1, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
                    outputs: <ResponseBody_1, Status_1 extends number, ContentType_1 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_1 extends readonly OutputObject<ResponseBody_1, Status_1, ContentType_1>[]>(outputs: Outputs_1) => {
                        handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3_1, ResponseBody_1, Status_1, ContentType_1, Outputs_1>) => ApiRouteOperationDefinition<Method>;
                    };
                    handler: (handler: TypedApiRouteHandler<Body_1, Query, Options3_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
                };
                outputs: <ResponseBody_2, Status_2 extends number, ContentType_2 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_2 extends readonly OutputObject<ResponseBody_2, Status_2, ContentType_2>[]>(outputs: Outputs_2) => {
                    handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2_1, ResponseBody_2, Status_2, ContentType_2, Outputs_2>) => ApiRouteOperationDefinition<Method>;
                };
                handler: (handler: TypedApiRouteHandler<Body_1, Query, Options2_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
            };
            outputs: <ResponseBody_3, Status_3 extends number, ContentType_3 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_3 extends readonly OutputObject<ResponseBody_3, Status_3, ContentType_3>[]>(outputs: Outputs_3) => {
                handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1_1, ResponseBody_3, Status_3, ContentType_3, Outputs_3>) => ApiRouteOperationDefinition<Method>;
            };
            handler: (handler: TypedApiRouteHandler<Body_1, Query, Options1_1, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
        };
        handler: (handler: TypedApiRouteHandler<Body_1, Query, BaseOptions, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
    };
    outputs: <ResponseBody_4, Status_4 extends number, ContentType_4 extends AnyContentTypeWithAutocompleteForMostCommonOnes, Outputs_4 extends readonly OutputObject<ResponseBody_4, Status_4, ContentType_4>[]>(outputs: Outputs_4) => {
        middleware: <Options1_2 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
            middleware: <Options2_2 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_2, Options2_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
                middleware: <Options3_2 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_2, Options3_2, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
                    handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options3_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
                };
                handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options2_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
            };
            handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options1_2, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
        };
        handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, BaseOptions, ResponseBody_4, Status_4, ContentType_4, Outputs_4>) => ApiRouteOperationDefinition<Method>;
    };
    middleware: <Options1_3 extends BaseOptions>(middleware1: ApiRouteMiddleware<BaseOptions, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
        middleware: <Options2_3 extends BaseOptions>(middleware2: ApiRouteMiddleware<Options1_3, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
            middleware: <Options3_3 extends BaseOptions>(middleware3: ApiRouteMiddleware<Options2_3, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => {
                handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options3_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
            };
            handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options2_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
        };
        handler: (handler: TypedApiRouteHandler<unknown, BaseQuery, Options1_3, unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes, readonly OutputObject<unknown, number, AnyContentTypeWithAutocompleteForMostCommonOnes>[]>) => ApiRouteOperationDefinition<Method>;
    };
    handler: (handler: TypedApiRouteHandler) => ApiRouteOperationDefinition<Method>;
};

declare const apiRoute: <T extends Record<string, ApiRouteOperationDefinition<"GET" | "PUT" | "POST" | "DELETE" | "OPTIONS" | "HEAD" | "PATCH">>>(operations: T, options?: {
    openApiPath?: OpenApiPathItem;
}) => {
    (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>;
    _getPathsForRoute(route: string): Promise<NrfOasData>;
};

declare const docsApiRoute: (_config?: NextRestFrameworkConfig) => {
    (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>;
    _nextRestFrameworkConfig: Required<NextRestFrameworkConfig> & NextRestFrameworkConfig;
};

declare const rpcApiRoute: <T extends Record<string, RpcOperationDefinition<any, any, any>>>(operations: T, options?: {
    openApiPath?: OpenApiPathItem;
    openApiOperation?: OpenApiOperation;
}) => {
    (req: NextApiRequest, res: NextApiResponse): Promise<Response | undefined>;
    _getPathsForRoute(route: string): Promise<NrfOasData>;
    client: RpcClient<T>;
};

export { TypedNextResponse, apiRoute, apiRouteOperation, docsApiRoute, docsRoute, route, routeOperation, rpcApiRoute, rpcRoute };
