Advertisement

← vibesdk

worker/api/controllers/auth/authSchemas.ts

2.2 KB Download file
/**
 * Authentication Validation Schemas
 * Zod schemas for validating auth-related requests
 */

import { z } from 'zod';
import { commonSchemas } from '../../../utils/inputValidator';

/**
 * Login request schema
 */
export const loginSchema = z.object({
  email: commonSchemas.email,
  password: z.string().min(1, 'Password is required')
});

export type LoginRequest = z.infer<typeof loginSchema>;

/**
 * Registration request schema
 */
export const registerSchema = z.object({
  email: commonSchemas.email,
  password: commonSchemas.password,
  name: z.string().min(2, 'Name must be at least 2 characters').max(100).optional()
});

export type RegisterRequest = z.infer<typeof registerSchema>;

/**
 * OAuth callback schema
 */
export const oauthCallbackSchema = z.object({
  code: z.string().min(1, 'Authorization code is required'),
  state: z.string().min(1, 'State is required'),
  error: z.string().optional(),
  error_description: z.string().optional()
});

export type OAuthCallbackRequest = z.infer<typeof oauthCallbackSchema>;

/**
 * Change password schema
 */
export const changePasswordSchema = z.object({
  currentPassword: z.string().min(1, 'Current password is required'),
  newPassword: commonSchemas.password,
  confirmPassword: z.string()
}).refine(data => data.newPassword === data.confirmPassword, {
  message: "Passwords don't match",
  path: ['confirmPassword']
});

export type ChangePasswordRequest = z.infer<typeof changePasswordSchema>;

/**
 * Forgot password schema
 */
export const forgotPasswordSchema = z.object({
  email: commonSchemas.email
});

export type ForgotPasswordRequest = z.infer<typeof forgotPasswordSchema>;

/**
 * Reset password schema
 */
export const resetPasswordSchema = z.object({
  token: z.string().min(1, 'Reset token is required'),
  newPassword: commonSchemas.password,
  confirmPassword: z.string()
}).refine(data => data.newPassword === data.confirmPassword, {
  message: "Passwords don't match",
  path: ['confirmPassword']
});

export type ResetPasswordRequest = z.infer<typeof resetPasswordSchema>;

/**
 * OAuth provider schema
 */
export const oauthProviderSchema = z.enum(['google', 'github', 'cloudflare']);

export type OAuthProviderParam = z.infer<typeof oauthProviderSchema>;