/** * DTO for user signup with comprehensive validation * * Security: * - All fields validated against DB constraints * - Input sanitization applied automatically * - Password strength enforced (8-128 chars) * - Email/username uniqueness checked in service layer */ export declare class SignupDTO { /** * User email address * * Validation: * - Valid email format (RFC 5322) * - Max 255 characters (matches DB limit) * * Sanitization: * - Trimmed and lowercased */ email: string; /** * User password * * Validation: * - Min 8 characters * - Max 128 characters (prevents DoS via Argon2 hashing) * - Additional policy checks in service layer * * Note: NOT trimmed (passwords can have leading/trailing spaces) */ password: string; /** * Optional username * * Validation: * - 3-50 characters * - Alphanumeric, underscores, and hyphens only * - Max 255 characters (DB limit) * * Sanitization: * - Trimmed * - Case preserved (username can be case-sensitive per config) */ username?: string; /** * Optional first name * * Validation: * - 1-100 characters * - Max 100 characters (DB limit) * * Sanitization: * - Trimmed * - Title case preserved */ firstName?: string; /** * Optional last name * * Validation: * - 1-100 characters * - Max 100 characters (DB limit) * * Sanitization: * - Trimmed * - Title case preserved */ lastName?: string; /** * Optional phone number * * Validation: * - E.164 format (international standard) * - MUST start with + (required for security) * - Max 20 characters (DB limit) * - Example: +14155552671, +61444567890 * * Sanitization: * - Whitespace removed * - Only digits and leading + preserved * * Security: * - Strict E.164 validation prevents SQL injection * - Max length prevents oversized inputs * * Note: Using regex for E.164 format as IsPhoneNumber requires specific country codes * and doesn't support international E.164 format validation directly */ phone?: string; /** * Optional metadata (custom fields) * * Security: * - Validated in service layer if used * - Max depth/size limits should be enforced */ metadata?: Record; /** * Optional reCAPTCHA token * * Required when server has reCAPTCHA enabled and enforces validation * for the current token delivery mode (typically 'cookies' for web). * * Validation: * - Must be a string * - Token is single-use and expires after 2 minutes * - Token must be generated for correct action (e.g., 'signup') * * Security: * - Token validation happens server-side only * - Invalid/expired tokens result in RECAPTCHA_VALIDATION_FAILED error * - Low scores (v3) result in RECAPTCHA_SCORE_TOO_LOW error * * @example Web app (v3 automatic) * ```typescript * // Angular: Token auto-generated by AuthService * await this.authService.signup({ email, password }); * * // Vanilla JS: Generate token manually * const token = await grecaptcha.execute(siteKey, { action: 'signup' }); * await client.signup({ email, password, recaptchaToken: token }); * ``` * * @example Web app (v2 checkbox) * ```typescript * const token = grecaptcha.getResponse(widgetId); * await client.signup({ email, password, recaptchaToken: token }); * ``` */ recaptchaToken?: string; } //# sourceMappingURL=signup.dto.d.ts.map