114 lines
3.0 KiB
TypeScript

/**
* 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<typeof validateSignupRequestSchema>;
export type UpdateProfileRequest = z.infer<typeof updateProfileRequestSchema>;
export type UpdateAddressRequest = z.infer<typeof updateAddressRequestSchema>;