( route: 'GET' | 'POST', userId: string, countryAccess: FreeModeCountryAccess, deps: FreebuffSessionDeps, )
| 91 | } |
| 92 | |
| 93 | function logCountryAccess( |
| 94 | route: 'GET' | 'POST', |
| 95 | userId: string, |
| 96 | countryAccess: FreeModeCountryAccess, |
| 97 | deps: FreebuffSessionDeps, |
| 98 | ): void { |
| 99 | const privacyProviderDecision = |
| 100 | getFreeModePrivacyProviderDecision(countryAccess) |
| 101 | if (countryAccess.allowed && privacyProviderDecision !== 'ipinfo_only') return |
| 102 | |
| 103 | const privacyHardBlocked = shouldHardBlockFreeModeAccess(countryAccess) |
| 104 | deps.logger.info( |
| 105 | { |
| 106 | route, |
| 107 | userId, |
| 108 | accessTier: getFreeModeAccessTier(countryAccess), |
| 109 | cfHeader: countryAccess.cfCountry, |
| 110 | geoipResult: countryAccess.geoipCountry, |
| 111 | resolvedCountry: countryAccess.countryCode, |
| 112 | countryBlockReason: countryAccess.blockReason, |
| 113 | ipPrivacySignals: countryAccess.ipPrivacy?.signals, |
| 114 | spurIpPrivacySignals: countryAccess.spurIpPrivacy?.signals, |
| 115 | spurStatus: countryAccess.spurStatus, |
| 116 | privacyDecision: getFreeModePrivacyDecision(countryAccess), |
| 117 | privacyProviderDecision, |
| 118 | privacyHardBlocked, |
| 119 | clientIp: countryAccess.hasClientIp ? '[redacted]' : undefined, |
| 120 | }, |
| 121 | '[freebuff/session] country detection', |
| 122 | ) |
| 123 | } |
| 124 | |
| 125 | async function endSessionForHardBlock( |
| 126 | auth: Extract<AuthResult, { userId: string }>, |
no test coverage detected