/** * Comprehensive Input Validation and Sanitization System * Provides security-focused validation for all MCP tool inputs */ import { z } from "zod"; /** * True when a string contains an unmistakable XSS vector (script tag, javascript:/data: URL * scheme, or an inline event-handler attribute). Intended for general free-text MCP tool * parameters (titles, search queries, usernames, etc.) — NOT WordPress content fields, which * legitimately contain rich HTML/Gutenberg block markup; use isUnsafeWordPressContent instead. */ export declare function isUnsafePlainText(value: string): boolean; /** * True when WordPress post/page/comment content contains an unmistakable XSS vector. Narrower * than isUnsafePlainText: does not reject `data:` URLs (legitimate in embedded block content) * and carries no length cap of its own — callers apply their own maxLength. */ export declare function isUnsafeWordPressContent(value: string): boolean; /** * Security validation schemas */ export declare const SecuritySchemas: { safeString: z.ZodString; htmlContent: z.ZodString; url: z.ZodString; email: z.ZodString; slug: z.ZodString; wpContent: z.ZodString; siteId: z.ZodString; wpId: z.ZodNumber; searchQuery: z.ZodString; filePath: z.ZodString; passwordMask: z.ZodPipe>; appPassword: z.ZodPipe>; }; /** * Input sanitization functions */ export declare class InputSanitizer { /** * Sanitize HTML content by removing dangerous elements */ static sanitizeHtml(input: string): string; /** * Sanitize search queries to prevent SQL injection */ static sanitizeSearchQuery(query: string): string; /** * Sanitize file paths to prevent directory traversal */ static sanitizeFilePath(path: string): string; /** * Encode output for safe display */ static encodeOutput(input: string): string; } /** * Security validation decorator for tool methods */ export declare function validateSecurity(schema: z.ZodSchema): (target: unknown, propertyName: string, descriptor: PropertyDescriptor) => PropertyDescriptor; /** * Custom security validation error */ export declare class SecurityValidationError extends Error { readonly issues: Array; constructor(message: string, issues?: Array); } /** * Tool-specific validation schemas */ export declare const ToolSchemas: { postData: z.ZodObject<{ site: z.ZodOptional; title: z.ZodOptional; content: z.ZodOptional; excerpt: z.ZodOptional; status: z.ZodOptional>; slug: z.ZodOptional; categories: z.ZodOptional>; tags: z.ZodOptional>; }, z.core.$strip>; userData: z.ZodObject<{ site: z.ZodOptional; username: z.ZodString; email: z.ZodString; password: z.ZodOptional; roles: z.ZodOptional>; firstName: z.ZodOptional; lastName: z.ZodOptional; }, z.core.$strip>; searchParams: z.ZodObject<{ site: z.ZodOptional; query: z.ZodString; type: z.ZodOptional>; limit: z.ZodOptional; }, z.core.$strip>; mediaUpload: z.ZodObject<{ site: z.ZodOptional; filename: z.ZodString; title: z.ZodOptional; caption: z.ZodOptional; description: z.ZodOptional; }, z.core.$strip>; siteSettings: z.ZodObject<{ site: z.ZodOptional; title: z.ZodOptional; description: z.ZodOptional; url: z.ZodOptional; adminEmail: z.ZodOptional; }, z.core.$strip>; listParams: z.ZodObject<{ site: z.ZodOptional; page: z.ZodOptional; perPage: z.ZodOptional; search: z.ZodOptional; orderBy: z.ZodOptional; order: z.ZodOptional>; }, z.core.$strip>; idParams: z.ZodObject<{ site: z.ZodOptional; id: z.ZodNumber; }, z.core.$strip>; }; /** * Rate limiting and DoS protection */ export declare class SecurityLimiter { private static requestCounts; private static readonly RATE_LIMIT; private static readonly WINDOW_MS; /** * Check if request is within rate limits */ static checkRateLimit(identifier: string): boolean; /** * Clean up expired rate limit entries */ static cleanup(): void; } //# sourceMappingURL=InputValidator.d.ts.map