import { z } from 'zod'; import { passwordStrength } from './password-strength'; export const emailSchema = z.string().trim().toLowerCase().email('Enter a valid e-mail address').max(254); export const passwordSchema = z .string() .min(10, 'Use at least 10 characters') .max(200, 'Password is too long') .refine((p) => passwordStrength(p).score >= 1, 'That password is too common or too simple'); export const codeSchema = z .string() .transform((s) => s.replace(/\D/g, '')) .pipe(z.string().length(6, 'Enter the 6-digit code')); export const handleSchema = z .string() .trim() .toLowerCase() .min(3, 'At least 3 characters') .max(24, 'At most 24 characters') .regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/, 'Letters, numbers and hyphens only'); const RESERVED = new Set(['admin', 'rareindex', 'api', 'support', 'help', 'about', 'login', 'signup', 'account', 'collections', 'watchlist', 'root', 'system', 'null', 'undefined']); export function isReservedHandle(h: string): boolean { return RESERVED.has(h); } export const signupSchema = z.object({ email: emailSchema, password: passwordSchema, name: z.string().trim().max(80).optional().or(z.literal('')) }); export const loginSchema = z.object({ email: emailSchema, password: z.string().min(1, 'Enter your password').max(200), remember: z.boolean().optional() });