"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.redactMetadata = redactMetadata;
exports.createAuditEvent = createAuditEvent;
const SENSITIVE_KEY_PATTERNS = [
    /password/i,
    /secret/i,
    /token/i,
    /api[_-]?key/i,
    /private[_-]?key/i,
    /credential/i,
    /ssn/i,
    /iban/i,
    /email/i,
    /phone/i,
    /address/i,
];
const REDACTED = '[REDACTED]';
function isSensitiveKey(key) {
    return SENSITIVE_KEY_PATTERNS.some((p) => p.test(key));
}
function redactMetadata(metadata) {
    const out = {};
    for (const [key, value] of Object.entries(metadata)) {
        if (isSensitiveKey(key)) {
            out[key] = REDACTED;
            continue;
        }
        if (value && typeof value === 'object' && !Array.isArray(value)) {
            out[key] = redactMetadata(value);
        }
        else {
            out[key] = value;
        }
    }
    return out;
}
function createAuditEvent(partial) {
    const { metadata, ...rest } = partial;
    return {
        ...rest,
        timestamp: new Date().toISOString(),
        metadata_redacted: redactMetadata(metadata ?? {}),
    };
}
