/** * Auth Domain - Schemas */ import { z } from "zod"; import { addressSchema, emailSchema, nameSchema, passwordSchema, phoneSchema, } from "../common/schema"; const genderEnum = z.enum(["male", "female", "other"]); export const loginRequestSchema = z.object({ email: emailSchema, password: z.string().min(1, "Password is required"), }); export const signupRequestSchema = z.object({ email: emailSchema, password: passwordSchema, firstName: nameSchema, lastName: nameSchema, company: z.string().optional(), phone: phoneSchema, sfNumber: z.string().min(6, "Customer number must be at least 6 characters"), address: addressSchema.optional(), nationality: z.string().optional(), dateOfBirth: z.string().optional(), gender: genderEnum.optional(), acceptTerms: z.boolean(), marketingConsent: z.boolean().optional(), }); export const passwordResetRequestSchema = z.object({ email: emailSchema }); export const passwordResetSchema = z.object({ token: z.string().min(1, "Reset token is required"), password: passwordSchema, }); export const setPasswordRequestSchema = z.object({ email: emailSchema, password: passwordSchema, }); export const changePasswordRequestSchema = z.object({ currentPassword: z.string().min(1, "Current password is required"), newPassword: passwordSchema, }); export const linkWhmcsRequestSchema = z.object({ email: emailSchema, password: z.string().min(1, "Password is required"), }); export const validateSignupRequestSchema = z.object({ sfNumber: z.string().min(1, "Customer number is required"), }); export const updateProfileRequestSchema = z.object({ firstName: nameSchema.optional(), lastName: nameSchema.optional(), company: z.string().optional(), phone: phoneSchema.optional(), avatar: z.string().optional(), nationality: z.string().optional(), dateOfBirth: z.string().optional(), gender: genderEnum.optional(), }); export const updateAddressRequestSchema = z.object({ address: addressSchema, }); export const accountStatusRequestSchema = z.object({ email: emailSchema, }); export const ssoLinkRequestSchema = z.object({ destination: z.string().optional(), }); export const checkPasswordNeededRequestSchema = z.object({ email: emailSchema, }); export const refreshTokenRequestSchema = z.object({ refreshToken: z.string().min(1, "Refresh token is required").optional(), deviceId: z.string().optional(), }); export const authTokensSchema = z.object({ accessToken: z.string().min(1, "Access token is required"), refreshToken: z.string().min(1, "Refresh token is required"), expiresAt: z.string().min(1, "Access token expiry required"), refreshExpiresAt: z.string().min(1, "Refresh token expiry required"), tokenType: z.literal("Bearer"), }); export const authResponseSchema = z.object({ user: z.unknown(), tokens: authTokensSchema, }); export type ValidateSignupRequest = z.infer; export type UpdateProfileRequest = z.infer; export type UpdateAddressRequest = z.infer;