(function () { const METASITE_APP_DEF_ID = '22bef345-3c5b-4c18-b782-74d4085112ff'; const getXSRFTokenFromCookie = () => { const match = new RegExp('XSRF-TOKEN=(.+?);').exec(document.cookie); return match ? match[1] : ''; }; const eventNames = { Purchase: 'Purchase', Lead: 'Lead', }; const eventNameToConversionActionCategory = { [eventNames.Purchase]: 'PURCHASE', [eventNames.Lead]: 'SUBMIT_LEAD_FORM', }; const channelParams = { price: 'price', id: 'id', currency: 'currency', name: 'name', category: 'category', brand: 'brand', variant: 'variant', list: 'list_name', quantity: 'quantity', step: 'checkout_step', option: 'checkout_option', position: 'list_position', coupon: 'coupon', affiliation: 'affiliation', revenue: 'value', tax: 'tax', sku: 'sku', shipping: 'shipping', }; const mapContents = ({ contents = [] }) => contents.map(({ currency, ...product }) => paramsMapper(product, channelParams), ); const paramsMapper = (params, mapper) => { const mappedParams = Object.keys(params); if (mappedParams.length === 0) { return params; } return mappedParams.reduce((mappedObject, currentKey) => { const newKey = mapper[currentKey]; if (newKey && (params[currentKey] || params[currentKey] === 0)) { mappedObject[newKey] = params[currentKey]; } return mappedObject; }, {}); }; const loadGtag = () => { const gtagInitScript = document.createElement('script'); gtagInitScript.type = 'text/javascript'; gtagInitScript.innerHTML = ` window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()) `; document.head.appendChild(gtagInitScript); const gtagScript = document.createElement('script'); gtagScript.type = 'text/javascript'; gtagScript.setAttribute('async', 'true'); gtagScript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js'); document.head.appendChild(gtagScript); }; const handleGoogleConsent = () => { window.dataLayer = window.dataLayer || []; if (window.consentPolicyManager && window.consentPolicyManager.initRan) { const { policy, defaultPolicy } = window.consentPolicyManager.getCurrentConsentPolicy(); setConsent('default', evaluateConsentPolicy(policy, defaultPolicy)); } else { setConsent('default', { advertising: false, analytics: false, functional: false, waitForUpdate: 500, }); } window.document.addEventListener('consentPolicyInitialized', ({ detail }) => { setConsent( 'update', evaluateConsentPolicy(detail.policy, detail.defaultPolicy), ); }); window.document.addEventListener('consentPolicyChanged', ({ detail }) => { setConsent('update', detail.policy); }); function evaluateConsentPolicy(policy, defaultPolicy) { const { gdprEnforcedGeo } = window.wixTagManager.getConfig(); return defaultPolicy && gdprEnforcedGeo ? { ...policy, advertising: false, analytics: false } : policy; } function setConsent( action, { advertising, analytics, functional, waitForUpdate }, ) { (function () { window.dataLayer.push(arguments); })('consent', action, { ad_storage: advertising ? 'granted' : 'denied', ad_user_data: advertising ? 'granted' : 'denied', ad_personalization: advertising ? 'granted' : 'denied', analytics_storage: analytics ? 'granted' : 'denied', functionality_storage: functional ? 'granted' : 'denied', personalization_storage: 'granted', security_storage: 'granted', ...(waitForUpdate ? { wait_for_update: waitForUpdate } : {}), }); } }; let conversionActions; const loadConversionActions = () => { const XSRFToken = getXSRFTokenFromCookie(); const headers = { 'Content-Type': 'application/json', 'X-XSRF-TOKEN': XSRFToken, }; const getAppToken = window.wixEmbedsAPI?.getAppToken; if (getAppToken) { headers.authorization = getAppToken(METASITE_APP_DEF_ID); } const metaSiteId = window.wixEmbedsAPI?.getMetaSiteId(); return fetch( `${window.location.origin}/_serverless/pa-google/v1/accounts/current-site/conversion-actions?metaSiteId=${metaSiteId}`, { method: 'GET', headers, }, ) .then((response) => response.json()) .then((data) => { conversionActions = data.conversionActions; gtag('config', conversionActions[0].conversionId); }); }; const reportEvent = (eventName, eventParams) => { const category = eventNameToConversionActionCategory[eventName]; const conversionAction = conversionActions.find( (currentConversionAction) => currentConversionAction.category.category === category, ); if (conversionAction) { let conversionData = { send_to: `${conversionAction.conversionId}/${conversionAction.conversionLabel}`, }; switch (category) { case 'PURCHASE': { const { revenue, id, currency, coupon, ...params } = eventParams; conversionData = { ...conversionData, ...paramsMapper({ revenue, id, currency, coupon }, channelParams), transactionId: eventParams.id, items: mapContents(params), }; break; } default: break; } gtag('event', 'conversion', conversionData); } }; let isBootstrapped = false; const bootstrap = () => { handleGoogleConsent(); loadGtag(); return loadConversionActions().then(() => { isBootstrapped = true; }); }; const bootstrapPromise = bootstrap(); const registerListener = () => { window.wixDevelopersAnalytics.register( 'd6708a0e-5b2a-458e-8cfe-bdca240aa2ce', (eventName, eventParams) => { if (isBootstrapped) { reportEvent(eventName, eventParams); } else { bootstrapPromise.then(() => { reportEvent(eventName, eventParams); }); } }, ); }; window.wixDevelopersAnalytics ? registerListener() : window.addEventListener('wixDevelopersAnalyticsReady', registerListener); })();