import { z } from 'zod'; export const LoginDtoSchema = z.object({ username: z.string().min(1).max(64), password: z.string().min(1).max(256), }); export type LoginDto = z.infer; export const RefreshDtoSchema = z.object({ refreshToken: z.string().min(1).optional(), }); export type RefreshDto = z.infer; export const CsrfResponseDtoSchema = z.object({ csrfToken: z.string(), }); export type CsrfResponseDto = z.infer; export const RegisterDtoSchema = z .object({ username: z .string() .min(3) .max(32) .regex(/^[a-zA-Z0-9_.-]+$/, 'Username may only contain letters, digits, dot, dash and underscore'), password: z.string().min(1).max(256), passwordConfirm: z.string().min(1).max(256), }) .refine((d) => d.password === d.passwordConfirm, { path: ['passwordConfirm'], message: 'Passwords do not match', }); export type RegisterDto = z.infer; export interface LoginResponse { accessToken: string; refreshToken: string; expiresIn: number; user: { id: string; username: string; role: 'admin' | 'player' }; }