Files
spoon/apps/agent-worker/src/redact.ts
T

30 lines
1.0 KiB
TypeScript

const secretPatterns: { pattern: RegExp; replacement: string }[] = [
{ pattern: /ghs_[A-Za-z0-9_]+/g, replacement: '[redacted]' },
{ pattern: /github_pat_[A-Za-z0-9_]+/g, replacement: '[redacted]' },
{ pattern: /sk-[A-Za-z0-9_-]+/g, replacement: '[redacted]' },
{
pattern: /(client_secret|auth_secret|api_key|token|password)=([^ \n\r]+)/gi,
replacement: '$1=[redacted]',
},
];
export const createRedactor = (values: string[]) => {
const secrets = values.filter((value) => value.length >= 3);
return (input: string) => {
let output = input;
for (const secret of secrets) {
output = output.split(secret).join('[redacted]');
}
for (const { pattern, replacement } of secretPatterns) {
output = output.replace(pattern, replacement);
}
return output;
};
};
export const truncate = (value: string, maxBytes: number) => {
const buffer = Buffer.from(value);
if (buffer.byteLength <= maxBytes) return value;
return `${buffer.subarray(0, maxBytes).toString('utf8')}\n[truncated]`;
};