mcp-sanitizer
Version:
Comprehensive security sanitization library for Model Context Protocol (MCP) servers with trusted security libraries
243 lines (208 loc) • 8.61 kB
JavaScript
/**
* MCP Sanitizer - Main Entry Point
*
* This is the main entry point for the MCP Sanitizer package. It provides
* a clean, comprehensive API for input validation and sanitization with
* modular validators and configuration system.
*
* The package includes:
* - Main MCPSanitizer orchestrator class
* - Modular validators for different input types
* - Configuration system with security policies
* - Pattern detection for security threats
* - Utility functions for common operations
*
* @example
* // Import the main class
* const MCPSanitizer = require('mcp-sanitizer');
* const sanitizer = new MCPSanitizer('PRODUCTION');
*
* // Use specific validators
* const { validators } = require('mcp-sanitizer');
* const urlValidator = new validators.URLValidator();
*
* // Use convenience functions
* const { validateFilePath } = require('mcp-sanitizer');
* const result = await validateFilePath('/path/to/file.txt');
*/
// Import main sanitizer class
const MCPSanitizer = require('./sanitizer/mcp-sanitizer')
// Import modular validators
const validators = require('./sanitizer/validators')
// Import configuration system
const config = require('./config')
// Import pattern detection
const patterns = require('./patterns')
// Import utilities
const utils = require('./utils')
// Re-export the main class as default export
module.exports = MCPSanitizer
// Named exports for modular access
module.exports.MCPSanitizer = MCPSanitizer
// Export validator system
module.exports.validators = validators
// Export individual validator classes for direct access
module.exports.FilePathValidator = validators.FilePathValidator
module.exports.URLValidator = validators.URLValidator
module.exports.CommandValidator = validators.CommandValidator
module.exports.SQLValidator = validators.SQLValidator
// Export validator factory functions
module.exports.createFilePathValidator = validators.createFilePathValidator
module.exports.createURLValidator = validators.createURLValidator
module.exports.createCommandValidator = validators.createCommandValidator
module.exports.createSQLValidator = validators.createSQLValidator
module.exports.createValidator = validators.createValidator
module.exports.createValidatorManager = validators.createValidatorManager
// Export convenience validation functions
module.exports.validateFilePath = validators.validateFilePath
module.exports.sanitizeFilePath = validators.sanitizeFilePath
module.exports.validateURL = validators.validateURL
module.exports.sanitizeURL = validators.sanitizeURL
module.exports.validateCommand = validators.validateCommand
module.exports.sanitizeCommand = validators.sanitizeCommand
module.exports.validateSQL = validators.validateSQL
module.exports.sanitizeSQL = validators.sanitizeSQL
// Export generic validation functions
module.exports.validate = validators.validate
module.exports.sanitize = validators.sanitize
module.exports.validateBatch = validators.validateBatch
module.exports.sanitizeBatch = validators.sanitizeBatch
// Export configuration system
module.exports.config = config
module.exports.createConfig = config.createConfig
module.exports.createConfigFromPolicy = config.createConfigFromPolicy
module.exports.createRecommendedConfig = config.createRecommendedConfig
module.exports.createConfigBuilder = config.createConfigBuilder
// Export security policies
module.exports.SECURITY_POLICIES = config.SECURITY_POLICIES
module.exports.POLICY_NAMES = config.POLICY_NAMES
// Export pattern detection
module.exports.patterns = patterns
module.exports.detectAllPatterns = patterns.detectAllPatterns
module.exports.hasSecurityPatterns = patterns.hasSecurityPatterns
module.exports.analyzeSecurityPatterns = patterns.analyzeSecurityPatterns
// Export individual pattern detectors
module.exports.commandInjection = patterns.commandInjection
module.exports.sqlInjection = patterns.sqlInjection
module.exports.prototypePollution = patterns.prototypePollution
module.exports.templateInjection = patterns.templateInjection
// Export utilities
module.exports.utils = utils
module.exports.stringUtils = utils.stringUtils
module.exports.objectUtils = utils.objectUtils
module.exports.validationUtils = utils.validationUtils
// Export commonly used utility functions
module.exports.htmlEncode = utils.htmlEncode
module.exports.validateStringLength = utils.validateStringLength
module.exports.validateAgainstBlockedPatterns = utils.validateAgainstBlockedPatterns
module.exports.isDangerousKey = utils.isDangerousKey
module.exports.validateObjectKey = utils.validateObjectKey
module.exports.validateNonEmptyString = utils.validateNonEmptyString
// Export constants
module.exports.SEVERITY_LEVELS = validators.SEVERITY_LEVELS
module.exports.VALIDATOR_TYPES = validators.VALIDATOR_TYPES
module.exports.PATTERN_TYPES = patterns.PATTERN_TYPES
// Export version information (if available)
try {
const packageInfo = require('../package.json')
module.exports.version = packageInfo.version
module.exports.name = packageInfo.name
} catch (error) {
// Package info not available, skip version export
}
/**
* Create a pre-configured sanitizer instance for common use cases
* @param {string} environment - Environment type ('development', 'production', 'testing')
* @param {Object} customizations - Additional customizations
* @returns {MCPSanitizer} Configured sanitizer instance
*/
function createSanitizer (environment = 'production', customizations = {}) {
const policyMap = {
development: 'DEVELOPMENT',
dev: 'DEVELOPMENT',
production: 'PRODUCTION',
prod: 'PRODUCTION',
testing: 'PERMISSIVE',
test: 'PERMISSIVE',
staging: 'MODERATE'
}
const policyName = policyMap[environment.toLowerCase()] || 'PRODUCTION'
return new MCPSanitizer({ policy: policyName, ...customizations })
}
/**
* Quick sanitization function for simple string inputs
* @param {string} input - Input to sanitize
* @param {Object} options - Sanitization options
* @returns {Object} Sanitization result
*/
function quickSanitize (input, options = {}) {
const sanitizer = createSanitizer(options.environment || 'production')
return sanitizer.sanitize(input, options.context || {})
}
/**
* Batch sanitization for multiple inputs
* @param {Array} inputs - Array of inputs to sanitize
* @param {Object} options - Global options
* @returns {Array} Array of sanitization results
*/
function batchSanitize (inputs, options = {}) {
const sanitizer = createSanitizer(options.environment || 'production')
return inputs.map(input => {
const inputOptions = typeof input === 'object' && input.options ? input.options : {}
const inputValue = typeof input === 'object' && input.value !== undefined ? input.value : input
const context = typeof input === 'object' && input.context ? input.context : {}
return sanitizer.sanitize(inputValue, { ...context, ...inputOptions })
})
}
// Export factory functions
module.exports.createSanitizer = createSanitizer
module.exports.quickSanitize = quickSanitize
module.exports.batchSanitize = batchSanitize
// Export middleware creation function (if middleware directory exists)
try {
const middleware = require('./middleware')
module.exports.middleware = middleware
module.exports.createMiddleware = middleware.createMiddleware || middleware.create
} catch (error) {
// Middleware not available, skip export
}
/**
* Helper function to check if the package is being used correctly
* @returns {Object} Package health information
*/
function getPackageInfo () {
return {
name: module.exports.name || 'mcp-sanitizer',
version: module.exports.version || 'unknown',
modules: {
validators: Object.keys(validators),
patterns: Object.keys(patterns),
config: Object.keys(config),
utils: Object.keys(utils)
},
environment: process.env.NODE_ENV || 'unknown'
}
}
module.exports.getPackageInfo = getPackageInfo
/**
* Compatibility layer for older versions
* These exports maintain backward compatibility with existing code
*/
// Legacy class name support
module.exports.Sanitizer = MCPSanitizer
module.exports.MCP = MCPSanitizer
// Legacy method names
module.exports.sanitizeInput = quickSanitize
module.exports.sanitizeArray = batchSanitize
// Legacy pattern detection
module.exports.detectInjection = patterns.detectAllPatterns
module.exports.hasInjection = patterns.hasSecurityPatterns
/**
* TypeScript support - export type definitions if available
*/
try {
const types = require('./types')
module.exports.types = types
} catch (error) {
// Types not available, skip export
}