const SECRET_KEY_PATTERN = /(apiKey|authorization|cookie|token|secret|password|credential)/i;
export function redactConfig(value: unknown): unknown {
return redactValue(value, undefined);
}
function redactValue(value: unknown, key: string | undefined): unknown {
if (key && SECRET_KEY_PATTERN.test(key)) {
return "<redacted>";
}
if (Array.isArray(value)) {
return value.map((item) => redactValue(item, undefined));
}
if (value && typeof value === "object") {
const output: Record<string, unknown> = {};
for (const [entryKey, entryValue] of Object.entries(value as Record<string, unknown>)) {
output[entryKey] = redactValue(entryValue, entryKey);
}
return output;
}
return value;
}