← back to Fleet Rag
lib/redact.js
27 lines
'use strict';
// Redact known fleet-secret shapes from any chunk before it is embedded/persisted.
// Added 2026-06-24 (fleet-rag-secret-spillage remediation): the ingestion pipeline
// slurped server.js heads + memory files verbatim, capturing plaintext secrets into
// data/vectors.jsonl. This filter neutralizes known secret shapes at ingest time so a
// rebuilt index carries no live credential even when a source file still holds one.
const PATTERNS = [
[/AIza[A-Za-z0-9_\-]{35}/g, '[REDACTED_GEMINI_KEY]'],
[/shpat_[a-f0-9]{32}/g, '[REDACTED_SHOPIFY_TOKEN]'],
[/shpss_[a-f0-9]{32}/g, '[REDACTED_SHOPIFY_SECRET]'],
[/shpca_[a-f0-9]{32}/g, '[REDACTED_SHOPIFY_SECRET]'],
[/https?:\/\/hooks\.slack\.com\/services\/[A-Za-z0-9\/]+/g, '[REDACTED_SLACK_WEBHOOK]'],
[/postgres(?:ql)?:\/\/[^:\/\s]+:[^@\s]+@[^\s"'`]+/g, '[REDACTED_PG_DSN]'],
[/DW2024!!?/g, '[REDACTED_PW]'],
[/DWSecure2024!?/g, '[REDACTED_PW]'],
[/[A-Za-z0-9]*access911[A-Za-z0-9]*/g, '[REDACTED_VENDOR_PW]'],
[/sk-[A-Za-z0-9]{20,}/g, '[REDACTED_OPENAI_KEY]'],
[/(?:r8_|ghp_|gho_|xoxb-|xoxp-)[A-Za-z0-9\-]{20,}/g, '[REDACTED_TOKEN]'],
];
function redact(text) {
if (!text) return text;
let out = String(text);
for (const [re, repl] of PATTERNS) out = out.replace(re, repl);
return out;
}
module.exports = { redact };