// Откуда пришёл посетитель: UTM-метки из адреса первой страницы и внешний сайт-источник. // Запоминается на сессию (первый заход) и уходит вместе с заявкой — по этим данным // строится «Источники заявок» в админке. Никаких персональных данных здесь нет. const KEY = 'dana:attribution'; const UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; function storage() { try { return window.sessionStorage; } catch { return null; // приватный режим или запрет сайта } } export function captureAttribution() { if (typeof window === 'undefined') return; const store = storage(); if (!store || store.getItem(KEY)) return; const data = {}; const params = new URLSearchParams(window.location.search); for (const k of UTM_KEYS) { const v = params.get(k); if (v) data[k] = v.slice(0, 200); } try { const ref = document.referrer ? new URL(document.referrer) : null; if (ref && ref.host !== window.location.host) data.referrer = ref.host; } catch { /* битый referrer — просто без него */ } try { store.setItem(KEY, JSON.stringify(data)); } catch { /* хранилище переполнено или запрещено */ } } export function attribution() { try { return JSON.parse(storage()?.getItem(KEY) || '{}'); } catch { return {}; } }