import { getCookie } from 'h3'; import { getClientHeaders } from './get-client-headers'; /** Возвращает true если пользователь находится в регионе где требуется верификация возраста (GB, штат KS). */ export async function isGeoMatch(event, _config) { const AGE_VERIFY_REGIONS = ['KS']; const AGE_VERIFY_COUNTRIES = ['GB']; const headers = getClientHeaders(event); const countryCode = headers[ 'countryCode' ]; const stateCode = headers[ 'stateCode' ]; return AGE_VERIFY_COUNTRIES.includes(countryCode) || AGE_VERIFY_REGIONS.includes(stateCode); } /** Проверяет через API прошёл ли пользователь верификацию возраста по session_id из cookie или контекста. */ export async function isAgeVerified(event, config) { const apiUrl = config.public.apiDomain; const sessionId = getCookie(event, 'session_id') || event?.context.sessionId; const res: any = await $fetch(`${apiUrl}/v1/user/is-age-verified`, { method: 'GET', params: { session_id: sessionId, }, headers: { 'x-domain': config.public.xDomain, 'X-Cache-Time': 259200, 'Content-Type': 'application/json', }, parseResponse: JSON.parse }); return res.data === true; } /** * Запрашивает у API URL для редиректа на страницу верификации возраста. * @param backPath - путь на который вернуть пользователя после верификации * @returns URL редиректа и countryCode пользователя */ export async function getAgeValidationUrl(event, backPath: string, config) { const sessionId = event.context?.sessionId || getCookie(event, 'session_id'); const apiUrl = config.public.apiDomain; const headers = getClientHeaders(event); const countryCode = headers[ 'countryCode' ]; const stateCode = headers[ 'stateCode' ]; const remoteIP = headers[ 'remoteIP' ]; const userAgent = headers[ 'userAgent' ]; const siteUrl = `https://${config.public.xDomain}`; const callbackURL = `${siteUrl}/bff/age/verify`; const resRaw: any = await $fetch(`${apiUrl}/v1/user/age-validation-url`, { method: 'POST', body: { backURL: `${siteUrl}${backPath}`, callbackURL, countryCode, stateCode, remoteIP, sessionId, userAgent, }, headers: { 'x-domain': config.public.xDomain, 'X-Cache-Time': 259200, 'Content-Type': 'application/json', }, }); const res: any = typeof resRaw === 'string' ? JSON.parse(resRaw) : resRaw; const url = typeof res?.data === 'string' ? res.data : ''; return { url, countryCode }; }