UNPKG

@superadnim/osint-mcp-server

Version:

Professional OSINT MCP Server for intelligence gathering with privacy protection

78 lines 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrivacyFilter = void 0; class PrivacyFilter { configManager; ssnRegex = /\b\d{3}-?\d{2}-?\d{4}\b/g; creditCardRegex = /\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/g; phoneRegex = /\b\d{3}[\s.-]?\d{3}[\s.-]?\d{4}\b/g; constructor(configManager) { this.configManager = configManager; } filter(data) { const config = this.configManager.getConfig(); if (!config.privacy.redactSSN && !config.privacy.redactFinancial) { return data; } return this.recursiveFilter(data, config); } recursiveFilter(data, config) { if (typeof data === 'string') { return this.filterString(data, config); } if (Array.isArray(data)) { return data.map(item => this.recursiveFilter(item, config)); } if (data !== null && typeof data === 'object') { const filtered = {}; for (const [key, value] of Object.entries(data)) { if (this.isSensitiveField(key) && config.privacy.redactSSN) { filtered[key] = '[REDACTED]'; } else { filtered[key] = this.recursiveFilter(value, config); } } return filtered; } return data; } filterString(text, config) { let filtered = text; if (config.privacy.redactSSN) { filtered = filtered.replace(this.ssnRegex, '[SSN-REDACTED]'); } if (config.privacy.redactFinancial) { filtered = filtered.replace(this.creditCardRegex, '[CARD-REDACTED]'); } return filtered; } isSensitiveField(fieldName) { const sensitiveFields = [ 'ssn', 'social_security_number', 'tax_id', 'credit_card', 'bank_account', 'routing_number', 'medical_record', 'patient_id', ]; return sensitiveFields.some(field => fieldName.toLowerCase().includes(field)); } redactPhoneNumbers(text) { return text.replace(this.phoneRegex, '[PHONE-REDACTED]'); } redactEmails(text) { const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g; return text.replace(emailRegex, '[EMAIL-REDACTED]'); } isDataRetentionExpired(timestamp) { const config = this.configManager.getConfig(); const expirationTime = new Date(timestamp).getTime() + (config.privacy.dataRetentionHours * 60 * 60 * 1000); return Date.now() > expirationTime; } } exports.PrivacyFilter = PrivacyFilter; //# sourceMappingURL=privacy-filter.js.map