import { MAX_PASSWORD_LENGTH, MIN_PASSWORD_LENGTH, PASSWORD_STRENGTH_ACME } from '@/config/validation' import { object, optional, string } from 'zod' const _2FA_CODE_LENGTH = 6 const _2FA_CODE_REGEX = /^\d{6}$/ // all translations is implemented in '@/components/ui/form' via TranslateClientFragment const minPasswordMessage = JSON.stringify(['schema.password.length.min', { min: MIN_PASSWORD_LENGTH }]) const maxPasswordMessage = JSON.stringify(['schema.password.length.max', { max: MAX_PASSWORD_LENGTH }]) const maxPasswordStrength = JSON.stringify( ['schema.password.strength.acme', { min: MIN_PASSWORD_LENGTH, max: MAX_PASSWORD_LENGTH }]) const regexCodeMessage = JSON.stringify(['schema.two_factor.length', { length: _2FA_CODE_LENGTH }]) const email = string().trim().toLowerCase().email({ message: 'schema.email.required' }) const password = string().trim().regex(new RegExp(PASSWORD_STRENGTH_ACME, 'mg'), { message: maxPasswordStrength }).min(MIN_PASSWORD_LENGTH, { message: minPasswordMessage }). max(MAX_PASSWORD_LENGTH, { message: maxPasswordMessage }) export const LoginSchema = object({ email, password: string().trim().min(1, { message: 'schema.password.required' }), code: string({ message: regexCodeMessage }). trim(). length(_2FA_CODE_LENGTH, { message: regexCodeMessage }). regex(_2FA_CODE_REGEX, { message: regexCodeMessage }). optional(), }) export const RegisterSchema = object({ email, password, name: string().trim().min(1, { message: 'schema.name.required' }), }) export const ResetSchema = object({ email, }) export const NewPasswordSchema = object({ password, })