mirror of
https://github.com/dadosfera/maestro.git
synced 2026-10-09 21:59:07 +00:00
This fix addresses a breaking change introduced in class-validator 0.14.0 where the default for forbidUnknownValues changed from false to true. Issue: - POST /connections was returning 400 "an unknown value was passed to the validate function" errors - This occurred because CreateConnectionDto and UpdateConnectionDto have no validation decorators, causing class-validator 0.14.0+ to treat them as "unknown values" - Extra fields (like connector_version) in request payloads would fail validation Solution: - Set forbidUnknownValues: false to allow DTOs without validation decorators - Set whitelist: true to automatically strip extra properties not defined in DTOs - This maintains backward compatibility while adding security by removing unexpected fields 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
33 lines
905 B
TypeScript
33 lines
905 B
TypeScript
import {
|
|
PipeTransform,
|
|
Injectable,
|
|
ArgumentMetadata,
|
|
BadRequestException,
|
|
} from '@nestjs/common';
|
|
import { validate } from 'class-validator';
|
|
import { plainToInstance } from 'class-transformer';
|
|
|
|
@Injectable()
|
|
export class ValidationPipe implements PipeTransform<any> {
|
|
async transform(value: any, { metatype }: ArgumentMetadata) {
|
|
if (!metatype || !this.toValidate(metatype)) {
|
|
return value;
|
|
}
|
|
const object = plainToInstance(metatype, value);
|
|
const errors = await validate(object, {
|
|
forbidUnknownValues: false,
|
|
whitelist: true,
|
|
});
|
|
if (errors.length > 0) {
|
|
const errorMessages = errors.map((err) => err.constraints);
|
|
throw new BadRequestException(errorMessages);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private toValidate(metatype): boolean {
|
|
const types = [String, Boolean, Number, Array, Object];
|
|
return !types.includes(metatype);
|
|
}
|
|
}
|