@superadnim/osint-mcp-server
Version:
Professional OSINT MCP Server for intelligence gathering with privacy protection
78 lines • 2.77 kB
JavaScript
;
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