21 lines
747 B
TypeScript

import { Request, Response, NextFunction } from 'express';
import { ZodSchema, ZodError } from 'zod';
import { AppError } from './error-handler';
export function validate(schema: ZodSchema, source: 'body' | 'query' | 'params' = 'body') {
return (req: Request, _res: Response, next: NextFunction) => {
try {
const data = schema.parse(req[source]);
req[source] = data;
next();
} catch (err) {
if (err instanceof ZodError) {
// Sanitize validation errors - only expose field count, not detailed messages
const fieldCount = err.errors.length;
throw new AppError(400, `Invalid request data: ${fieldCount} field(s) failed validation`, 'VALIDATION_ERROR');
}
throw err;
}
};
}