import { Request, Response } from 'express'; import { Logger } from 'winston'; import { z } from 'zod'; import { ConfigType } from './config-type'; import { ApiResponse, IOSchema, Merge, OutputMarker, ReplaceMarkerInShape } from './helpers'; import { Method, MethodsDefinition } from './method'; import { MiddlewareDefinition } from './middleware'; import { ResultHandlerDefinition } from './result-handler'; export declare type Handler = (params: { input: IN; options: OPT; logger: Logger; }) => Promise; export declare abstract class AbstractEndpoint { protected description?: string; abstract execute(params: { request: Request; response: Response; logger: Logger; config: ConfigType; }): Promise; getDescription(): string | undefined; abstract getMethods(): Method[]; abstract getInputSchema(): IOSchema; abstract getOutputSchema(): IOSchema; abstract getPositiveResponseSchema(): z.ZodTypeAny; abstract getNegativeResponseSchema(): z.ZodTypeAny; abstract getPositiveMimeTypes(): string[]; abstract getNegativeMimeTypes(): string[]; } export declare type EndpointInput = T extends Endpoint ? z.input> : never; export declare type EndpointOutput = T extends Endpoint ? z.output : never; export declare type EndpointResponse = z.output extends z.ZodObject ? z.ZodObject['_shape'], ReturnType>> : ReturnType extends OutputMarker ? ReturnType : ReturnType> | z.output>; declare type EndpointProps = { middlewares: MiddlewareDefinition[]; inputSchema: IN; outputSchema: OUT; handler: Handler>, z.input, OPT>; resultHandler: ResultHandlerDefinition; description?: string; } & MethodsDefinition; /** mIN, OPT - from Middlewares */ export declare class Endpoint extends AbstractEndpoint { #private; protected methods: M[]; protected middlewares: MiddlewareDefinition[]; protected inputSchema: Merge; protected outputSchema: OUT; protected handler: Handler>, z.input, OPT>; protected resultHandler: ResultHandlerDefinition; constructor({ middlewares, inputSchema, outputSchema, handler, resultHandler, description, ...rest }: EndpointProps); getMethods(): M[]; getInputSchema(): Merge; getOutputSchema(): OUT; getPositiveResponseSchema(): POS['schema']; getNegativeResponseSchema(): NEG['schema']; getPositiveMimeTypes(): string[]; getNegativeMimeTypes(): string[]; execute({ request, response, logger, config }: { request: Request; response: Response; logger: Logger; config: ConfigType; }): Promise; } export {};