
function registerListener() { 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 XSRFToken = getXSRFTokenFromCookie(); let conversionActions; const reportEvent = (eventName, eventParams) => { if (typeof gtag !== 'function') { loadGtag(); } const category = eventNameToConversionActionCategory[eventName]; const conversionAction = conversionActions.find( (currentConversionAction) => currentConversionAction.category.category === category, ); if (conversionAction) { gtag('config', conversionAction.conversionId); 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); } }; // @ts-expect-error wixDevelopersAnalytics window.wixDevelopersAnalytics.register( 'd6708a0e-5b2a-458e-8cfe-bdca240aa2ce', (eventName, eventParams) => { console.log('registering ga event reporter'); if (conversionActions) { reportEvent(eventName, eventParams); } else { const headers = { 'Content-Type': 'application/json', 'X-XSRF-TOKEN': XSRFToken, }; const getAppToken = window.wixEmbedsAPI?.getAppToken; if (getAppToken) { console.log('ASSIGNING AUTHORIZATION HEADER'); headers.authorization = getAppToken(METASITE_APP_DEF_ID); } const metaSiteId = window.wixEmbedsAPI?.getMetaSiteId(); console.log({ metaSiteId }); 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; reportEvent(eventName, eventParams); }); } }, ); } console.log('ga event report embedded'); // @ts-expect-error wixDevelopersAnalytics window.wixDevelopersAnalytics ? registerListener() : window.addEventListener('wixDevelopersAnalyticsReady', registerListener);