import { firstHeaderValue } from '@admin/actions/audit/first-header-value' import { MAX_IP_LENGTH } from '@admin/actions/audit/max-ip-length' import { MAX_USER_AGENT_LENGTH } from '@admin/actions/audit/max-user-agent-length' import { headers } from 'next/headers' function truncate(value: string | null, maxLength: number): string | null { if (!value) return null return value.length > maxLength ? value.slice(0, maxLength) : value } export async function getAuditRequestMetadata(): Promise<{ ipAddress: string | null userAgent: string | null }> { try { const requestHeaders = await headers() const ipAddress = firstHeaderValue(requestHeaders.get('x-forwarded-for')) ?? firstHeaderValue(requestHeaders.get('x-real-ip')) ?? firstHeaderValue(requestHeaders.get('cf-connecting-ip')) const userAgent = requestHeaders.get('user-agent')?.trim() || null return { ipAddress: truncate(ipAddress, MAX_IP_LENGTH), userAgent: truncate(userAgent, MAX_USER_AGENT_LENGTH) } } catch { return { ipAddress: null, userAgent: null } } }