Skip to main content
Glama
validation.ts2.23 kB
/** * Validation utilities */ import validator from 'validator'; /** * Validates if a string is not empty */ export function validateNotEmpty(value: string, fieldName: string): void { if (!value || value.trim().length === 0) { throw new Error(`${fieldName} cannot be empty`); } } /** * Validates if a value is a valid enum value */ export function validateEnum<T>(value: any, enumObj: T, fieldName: string): void { const validValues = Object.values(enumObj as any); if (!validValues.includes(value)) { throw new Error( `${fieldName} must be one of: ${validValues.join(', ')}` ); } } /** * Validates if a number is within range */ export function validateRange( value: number, min: number, max: number, fieldName: string ): void { if (value < min || value > max) { throw new Error(`${fieldName} must be between ${min} and ${max}`); } } /** * Sanitizes text input to prevent injection attacks * Uses comprehensive sanitization for security */ export function sanitizeText(text: string): string { if (!text) return ''; // Trim whitespace let sanitized = text.trim(); // Escape HTML entities to prevent XSS sanitized = validator.escape(sanitized); // Remove any remaining script-like patterns sanitized = sanitized.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, ''); // Remove potential SQL injection patterns sanitized = sanitized.replace(/(\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC|EXECUTE)\b)/gi, ''); // Limit length to prevent DoS if (sanitized.length > 10000) { sanitized = sanitized.substring(0, 10000); } return sanitized; } /** * Validates and sanitizes email address */ export function validateEmail(email: string, fieldName: string = 'Email'): string { const trimmed = email.trim(); if (!validator.isEmail(trimmed)) { throw new Error(`${fieldName} must be a valid email address`); } return validator.normalizeEmail(trimmed) || trimmed; } /** * Validates URL */ export function validateURL(url: string, fieldName: string = 'URL'): void { if (!validator.isURL(url, { protocols: ['http', 'https'] })) { throw new Error(`${fieldName} must be a valid HTTP(S) URL`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/osmarsant/fitslot-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server