import { z } from 'zod'; // WebSocket incoming message schemas export const MessageSchema = z.object({ type: z.literal('message'), content: z.string().min(1).max(2000).trim(), }); export const RenameSchema = z.object({ type: z.literal('rename'), name: z.string().min(1).max(50).trim(), }); export const WebSocketMessageSchema = z.discriminatedUnion('type', [ MessageSchema, RenameSchema, ]); // Room ID validation export const RoomIdSchema = z.string() .min(1) .max(100) .regex(/^[a-zA-Z0-9_-]+$/, 'Room ID must be alphanumeric with dashes and underscores only'); // User name validation export const UserNameSchema = z.string() .min(1) .max(50) .trim(); // Types export type WebSocketMessage = z.infer; export type MessageData = z.infer; export type RenameData = z.infer;