28 lines
841 B
TypeScript
28 lines
841 B
TypeScript
import { z } from "zod";
|
|
|
|
export const emailSchema = z.string().trim().toLowerCase().email().max(254);
|
|
|
|
export const passwordSchema = z
|
|
.string()
|
|
.min(8, "Password must be at least 8 characters")
|
|
.max(128, "Password must be at most 128 characters")
|
|
.regex(/[A-Z]/, "Password must contain at least one uppercase letter")
|
|
.regex(/[a-z]/, "Password must contain at least one lowercase letter")
|
|
.regex(/[0-9]/, "Password must contain at least one number");
|
|
|
|
export const registerSchema = z.object({
|
|
email: emailSchema,
|
|
password: passwordSchema,
|
|
username: z
|
|
.string()
|
|
.trim()
|
|
.toLowerCase()
|
|
.regex(/^[a-z0-9_]{3,32}$/, "Username must be 3-32 chars (a-z, 0-9, _)"),
|
|
displayName: z.string().trim().min(2).max(60)
|
|
});
|
|
|
|
export const loginSchema = z.object({
|
|
email: emailSchema,
|
|
password: z.string().min(1)
|
|
});
|