Validation des Payloads
Le monde des WebSockets est le "Far West". Un client malicieux peut envoyer n'importe quoi comme données JSON. Si tu attends un objet { message: string } et qu'on t'envoie null, ton serveur peut crasher.
Le décorateur @SocketSchema utilise le validateur interne de Fastify pour sécuriser tes événements.
Utilisation
Tu définis un schéma JSON pour le body du message.
import { SocketSchema, SubscribeMessage } from 'my-fastify-decorators';
const MessageSchema = {
body: {
type: 'object',
required: ['content', 'roomId'],
properties: {
content: { type: 'string', maxLength: 500 },
roomId: { type: 'string' }
}
}
};
@WebSocketGateway()
export class SecureGateway {
@SubscribeMessage('send_msg')
@SocketSchema(MessageSchema)
handleMessage(socket: Socket, payload: any) {
// Si on arrive ici, payload est GARANTI valide par AJV.
console.log(payload.content);
}
}
Que se passe-t-il en cas d'erreur ?
Si la validation échoue, le handler handleMessage n'est pas exécuté.
À la place, le serveur émet automatiquement un événement error vers le client fautif avec les détails de l'erreur.
Exemple de réponse reçue par le client :
{
"event": "send_msg",
"message": "Validation failed",
"errors": [ ... liste des erreurs AJV ... ]
}
AJV = Validateur de fastify