( raw: string, query: ReadonlyArray<string> = DEFAULT_REDACT_QUERY, urlRedactor?: UrlRedactor, )
| 66 | export type UrlRedactor = (url: string) => string |
| 67 | |
| 68 | export const redactUrl = ( |
| 69 | raw: string, |
| 70 | query: ReadonlyArray<string> = DEFAULT_REDACT_QUERY, |
| 71 | urlRedactor?: UrlRedactor, |
| 72 | ) => { |
| 73 | if (!URL.canParse(raw)) return urlRedactor?.(raw) ?? raw |
| 74 | const url = new URL(raw) |
| 75 | if (url.username) url.username = REDACTED |
| 76 | if (url.password) url.password = REDACTED |
| 77 | const redacted = redactionSet(query, DEFAULT_REDACT_QUERY) |
| 78 | for (const key of url.searchParams.keys()) { |
| 79 | if (redacted.has(key.toLowerCase())) url.searchParams.set(key, REDACTED) |
| 80 | } |
| 81 | return urlRedactor?.(url.toString()) ?? url.toString() |
| 82 | } |
| 83 | |
| 84 | export const redactHeaders = ( |
| 85 | headers: Record<string, string>, |
no test coverage detected