import { NextFunction, Request, Response } from 'express';
import type { ParamsDictionary, RequestHandler } from 'express-serve-static-core';
import type { ParsedQs } from 'qs';
import { type ZodType, type ZodTypeDef } from 'zod';
import type { UserSession } from '../middleware/auth.js';
export declare type RequestValidation<TBody, TQuery, TParams> = {
    body?: ZodType<TBody, ZodTypeDef, unknown>;
    query?: ZodType<TQuery>;
    pathParams?: ZodType<TParams>;
};
type RequestWithUser<TParams extends ParamsDictionary = ParamsDictionary, TBody = unknown, TQuery extends ParsedQs = ParsedQs> = Request<TParams, unknown, TBody, TQuery> & {
    user?: UserSession;
};
/**
 * Validate the body using Zod parse
 * @param schema Zod objects used to validate request
 * @returns Throws a Bad Request when validation fails
 */
export declare function validateRequest<TBody, TQuery extends ParsedQs = ParsedQs, TParams extends ParamsDictionary = ParamsDictionary>(schema: RequestValidation<TBody, TQuery, TParams>, handler: (req: RequestWithUser<TParams, TBody, TQuery>, res: Response, next: NextFunction) => unknown): RequestHandler<TParams, unknown, TBody, TQuery>;
export {};
