(async function() { // ✅ 1. Generate UUID (no external dependencies) function generateUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; const v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }// ✅ 2. Extract UTM parameters from URLfunction extractUTMParams() { const urlParams = new URLSearchParams(window.location.search); return { utm_source: urlParams.get('utm_source') || '', utm_medium: urlParams.get('utm_medium') || '', utm_campaign: urlParams.get('utm_campaign') || '', utm_content: urlParams.get('utm_content') || '', utm_id: urlParams.get('utm_id') || '', utm_term: urlParams.get('utm_term') || '', ad_id: urlParams.get('Ad_id') || urlParams.get('ad_id') || '', // 🔥 Checks both Ad_id and ad_id fbclid: urlParams.get('fbclid') || '', gclid: urlParams.get('gclid') || '' }; } // ✅ 3. Get geolocation data from Cloudflare Worker async function getGeolocationData() { try { // 🚨 REPLACE THIS URL with your actual Cloudflare Worker URL const response = await fetch('https://broken-glade-32e5.sharan-262.workers.dev/', { method: 'GET', headers: { 'Content-Type': 'application/json', } });if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }const geoData = await response.json(); return { city: geoData.city || '', state: geoData.region || '', ip_address: geoData.ip || '' };} catch (error) { console.warn('Geolocation fetch failed:', error); // Return empty geo data if API fails return { city: '', state: '', ip_address: '' }; } }// ✅ 4. Main tracking function async function trackUTMData() { try { // Get UTM parameters const utmParams = extractUTMParams(); // Get geolocation data const geoData = await getGeolocationData(); // Prepare tracking data const trackingData = { id: generateUUID(), landing_page_url: window.location.href, created_at: new Date().toISOString(), ...utmParams, ...geoData };// Store in localStorage for thank you page localStorage.setItem('utm_tracking_data', JSON.stringify(trackingData)); console.log('✅ UTM tracking data stored:', trackingData);} catch (error) { console.error('❌ UTM tracking failed:', error); // Store minimal data even if geo fails const fallbackData = { id: generateUUID(), landing_page_url: window.location.href, created_at: new Date().toISOString(), ...extractUTMParams(), city: '', state: '', ip_address: '' }; localStorage.setItem('utm_tracking_data', JSON.stringify(fallbackData)); } }// ✅ 5. Run tracking when page loads // Wait a bit to ensure page is fully loaded if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', trackUTMData); } else { // Page already loaded setTimeout(trackUTMData, 100); }})();// 🚨 IMPORTANT: Replace 'utm-geo-tracker.your-username.workers.dev' with your actual Worker URL!