UNPKG

perplexity-mcp-server

Version:

A Perplexity API Model Context Protocol (MCP) server that unlocks Perplexity's search-augmented AI capabilities for LLM agents. Features robust error handling, secure input validation, and transparent reasoning with the showThinking parameter. Built with

140 lines (139 loc) 5.12 kB
import sanitizeHtml from 'sanitize-html'; /** * Options for path sanitization */ export interface PathSanitizeOptions { /** Restrict paths to a specific root directory */ rootDir?: string; /** Normalize Windows-style paths to POSIX-style */ toPosix?: boolean; /** Allow absolute paths (if false, converts to relative paths) */ allowAbsolute?: boolean; } /** * Context-specific input sanitization options */ export interface SanitizeStringOptions { /** Handle content differently based on context */ context?: 'text' | 'html' | 'attribute' | 'url' | 'javascript'; /** Custom allowed tags when using html context */ allowedTags?: string[]; /** Custom allowed attributes when using html context */ allowedAttributes?: Record<string, string[]>; } /** * Configuration for HTML sanitization */ export interface HtmlSanitizeConfig { /** Allowed HTML tags */ allowedTags?: string[]; /** Allowed HTML attributes (global or per-tag) */ allowedAttributes?: sanitizeHtml.IOptions['allowedAttributes']; /** Allow preserving comments - uses allowedTags internally */ preserveComments?: boolean; /** Custom URL sanitizer */ transformTags?: sanitizeHtml.IOptions['transformTags']; } /** * Sanitization class for handling various input sanitization tasks */ export declare class Sanitization { private static instance; /** Default list of sensitive fields for sanitizing logs */ private sensitiveFields; /** Default sanitize-html configuration */ private defaultHtmlSanitizeConfig; /** * Private constructor to enforce singleton pattern */ private constructor(); /** * Get the singleton Sanitization instance * @returns Sanitization instance */ static getInstance(): Sanitization; /** * Set sensitive fields for log sanitization * @param fields Array of field names to consider sensitive */ setSensitiveFields(fields: string[]): void; /** * Get the current list of sensitive fields * @returns Array of sensitive field names */ getSensitiveFields(): string[]; /** * Sanitize HTML content using sanitize-html library * @param input HTML string to sanitize * @param config Optional custom sanitization config * @returns Sanitized HTML */ sanitizeHtml(input: string, config?: HtmlSanitizeConfig): string; /** * Sanitize string input based on context. * * **Important:** Using `context: 'javascript'` is explicitly disallowed and will throw an `McpError`. * This is a security measure to prevent accidental execution or ineffective sanitization of JavaScript code. * * @param input String to sanitize * @param options Sanitization options * @returns Sanitized string * @throws {McpError} If `context: 'javascript'` is used. */ sanitizeString(input: string, options?: SanitizeStringOptions): string; /** * Sanitize URL with robust validation and sanitization * @param input URL to sanitize * @param allowedProtocols Allowed URL protocols * @returns Sanitized URL * @throws {McpError} If URL is invalid */ sanitizeUrl(input: string, allowedProtocols?: string[]): string; /** * Sanitize file paths to prevent path traversal attacks * @param input Path to sanitize * @param options Options for path sanitization * @returns Sanitized and normalized path * @throws {McpError} If path is invalid or unsafe */ sanitizePath(input: string, options?: PathSanitizeOptions): string; /** * Sanitize a JSON string * @param input JSON string to sanitize * @param maxSize Maximum allowed size in bytes * @returns Parsed and sanitized object * @throws {McpError} If JSON is invalid or too large */ sanitizeJson<T = unknown>(input: string, maxSize?: number): T; /** * Ensure input is within a numeric range * @param input Number or string to validate * @param min Minimum allowed value (inclusive) * @param max Maximum allowed value (inclusive) * @returns Sanitized number within range * @throws {McpError} If input is not a valid number */ sanitizeNumber(input: number | string, min?: number, max?: number): number; /** * Sanitize input for logging to protect sensitive information * @param input Input to sanitize * @returns Sanitized input safe for logging */ sanitizeForLogging(input: unknown): unknown; /** * Private helper to convert attribute format from record to sanitize-html format */ private convertAttributesFormat; /** * Recursively redact sensitive fields in an object or array */ private redactSensitiveFields; } export declare const sanitization: Sanitization; /** * Sanitize input for logging to protect sensitive information. * Kept as a separate export for convenience. * @param input Input to sanitize * @returns Sanitized input safe for logging */ export declare const sanitizeInputForLogging: (input: unknown) => unknown;