redaction.ts15 lines · main
1const EMAIL_RE = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
2const IPV4_RE = /\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g;
3
4export function containsForbiddenContent(value: string): boolean {
5 EMAIL_RE.lastIndex = 0;
6 IPV4_RE.lastIndex = 0;
7 return EMAIL_RE.test(value) || IPV4_RE.test(value);
8}
9
10export function redactValue<T>(value: T): T {
11 if (typeof value !== 'string') return value;
12 return value
13 .replace(EMAIL_RE, '[REDACTED:email]')
14 .replace(IPV4_RE, '[REDACTED:ip]') as unknown as T;
15}