redaction.ts15 lines · main
| 1 | const EMAIL_RE = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g; |
| 2 | const 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 | |
| 4 | export 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 | |
| 10 | export 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 | } |