(request: { headers: { get(name: string): string | null } })
| 21 | } |
| 22 | |
| 23 | function getClientIp(request: { headers: { get(name: string): string | null } }): string { |
| 24 | return ( |
| 25 | request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() || |
| 26 | request.headers.get('x-real-ip')?.trim() || |
| 27 | 'unknown' |
| 28 | ) |
| 29 | } |
| 30 | |
| 31 | /** |
| 32 | * Fire-and-forget audit log write. Never throws; failures are logged. |