UNPKG

@oxyhq/services

Version:

Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀

191 lines (170 loc) • 4.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.USERNAME_REGEX = exports.PASSWORD_REGEX = exports.EMAIL_REGEX = void 0; exports.isRequiredBoolean = isRequiredBoolean; exports.isRequiredNumber = isRequiredNumber; exports.isRequiredString = isRequiredString; exports.isValidArray = isValidArray; exports.isValidDate = isValidDate; exports.isValidEmail = isValidEmail; exports.isValidFileSize = isValidFileSize; exports.isValidFileType = isValidFileType; exports.isValidObject = isValidObject; exports.isValidObjectId = isValidObjectId; exports.isValidPassword = isValidPassword; exports.isValidURL = isValidURL; exports.isValidUUID = isValidUUID; exports.isValidUsername = isValidUsername; exports.sanitizeHTML = sanitizeHTML; exports.sanitizeString = sanitizeString; exports.validateAndSanitizeUserInput = validateAndSanitizeUserInput; /** * Validation utilities for common data validation patterns */ /** * Email validation regex */ const EMAIL_REGEX = exports.EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; /** * Username validation regex (alphanumeric, underscores, and hyphens, 3-30 chars) */ const USERNAME_REGEX = exports.USERNAME_REGEX = /^[a-zA-Z0-9_-]{3,30}$/; /** * Password validation regex (at least 8 chars, 1 uppercase, 1 lowercase, 1 number) */ // At least 8 characters (tests expect len>=8 without complexity requirements) const PASSWORD_REGEX = exports.PASSWORD_REGEX = /^.{8,}$/; /** * Validate email format */ function isValidEmail(email) { return EMAIL_REGEX.test(email); } /** * Validate username format */ function isValidUsername(username) { return USERNAME_REGEX.test(username); } /** * Validate password strength */ function isValidPassword(password) { return PASSWORD_REGEX.test(password); } /** * Validate required string */ function isRequiredString(value) { return typeof value === 'string' && value.trim().length > 0; } /** * Validate required number */ function isRequiredNumber(value) { return typeof value === 'number' && !Number.isNaN(value); } /** * Validate required boolean */ function isRequiredBoolean(value) { return typeof value === 'boolean'; } /** * Validate array */ function isValidArray(value) { return Array.isArray(value); } /** * Validate object */ function isValidObject(value) { return typeof value === 'object' && value !== null && !Array.isArray(value); } /** * Validate UUID format */ function isValidUUID(uuid) { const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; return UUID_REGEX.test(uuid); } /** * Validate URL format */ function isValidURL(url) { try { new URL(url); return true; } catch { return false; } } /** * Validate date string */ function isValidDate(dateString) { const date = new Date(dateString); return !Number.isNaN(date.getTime()); } /** * Validate file size (in bytes) */ function isValidFileSize(size, maxSize) { return size > 0 && size <= maxSize; } /** * Validate file type */ function isValidFileType(filename, allowedTypes) { const extension = filename.split('.').pop()?.toLowerCase(); return extension ? allowedTypes.includes(extension) : false; } /** * Sanitize string input */ function sanitizeString(input) { // Remove HTML tags entirely and trim whitespace return input.trim().replace(/<[^>]*>/g, ''); } /** * Sanitize HTML input */ function sanitizeHTML(input) { return input.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;'); } /** * Validate MongoDB ObjectId format * Note: This is a basic format check. For full validation, use mongoose.Types.ObjectId.isValid() * This function works in environments where mongoose may not be available (e.g., client-side) */ function isValidObjectId(id) { if (typeof id !== 'string') { return false; } // MongoDB ObjectId is 24 hex characters const OBJECT_ID_REGEX = /^[0-9a-fA-F]{24}$/; return OBJECT_ID_REGEX.test(id); } /** * Validate and sanitize user input */ function validateAndSanitizeUserInput(input, type) { if (typeof input !== 'string') { return null; } const sanitized = sanitizeString(input); switch (type) { case 'email': return isValidEmail(sanitized) ? sanitized : null; case 'username': return isValidUsername(sanitized) ? sanitized : null; case 'string': return isRequiredString(sanitized) ? sanitized : null; default: return null; } } //# sourceMappingURL=validationUtils.js.map