<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">define(['jquery','mage/url'],function($,urlBuilder){'use strict';const AJAX_COMPLETE_TYPE='ajaxComplete';const AJAX_SEND_TYPE='ajaxSend';$.widget('amGa4.ajaxObserver',{options:{eventDataEndpoint:'amga4/event/track',observedEvents:[]},requestPromiseMap:new Map(),_create:function(){this.registerAjaxCompleteEvent();this.registerAjaxSendEvent();},registerAjaxCompleteEvent:function(){$(document).on('ajaxComplete',(event,xhr,settings)=&gt;{try{const observedEvent=this.getObservedEvent(settings,AJAX_COMPLETE_TYPE);observedEvent&amp;&amp;this.performAjax(settings,observedEvent);}catch(e){console.error(e);}});},registerAjaxSendEvent:function(){$(document).on('ajaxSend',(event,xhr,settings)=&gt;{try{const observedEvent=this.getObservedEvent(settings,AJAX_SEND_TYPE);if(!observedEvent){return;}
const requestHashKey=this.hashString(this.convertSettingsData(settings).toString());this.requestPromiseMap.set(requestHashKey,this.performAjax(settings,observedEvent));}catch(e){console.error(e);}});$(document).on('ajaxComplete',(event,xhr,settings)=&gt;{try{const observedEvent=this.getObservedEvent(settings,AJAX_SEND_TYPE);const requestHashKey=this.hashString(this.convertSettingsData(settings).toString());if(!observedEvent||!this.requestPromiseMap.has(requestHashKey)){return;}
this.requestPromiseMap.get(requestHashKey).done((observedData)=&gt;{observedData.forEach(data=&gt;this.pushToDataLayer(data));}).always(()=&gt;{this.requestPromiseMap.delete(requestHashKey);});}catch(e){console.error(e);}});},performAjax:function(settings,observedEvent){const dataToObserve=this.convertSettingsData(settings);const successCallback=observedEvent.observerType===AJAX_COMPLETE_TYPE?(observedData)=&gt;{observedData.forEach(data=&gt;this.pushToDataLayer(data));}:()=&gt;{};dataToObserve.append('event',observedEvent.gaEvent);dataToObserve.append('ga4_page_name',document.title);dataToObserve.append('ga4_page_type',window.amga4PageType);return $.ajax({method:'POST',url:urlBuilder.build(this.options.eventDataEndpoint),global:false,contentType:false,processData:false,async:observedEvent.observerType===AJAX_COMPLETE_TYPE,data:dataToObserve,success:successCallback,});},pushToDataLayer:function(data){window.dataLayer.push(data);},getObservedEvent:function(settings,observerType){const url=new URL(settings.url);return this.options.observedEvents.find(observedEvent=&gt;{return observedEvent.observerType===observerType&amp;&amp;url.pathname.includes(observedEvent.pathname);});},convertSettingsData:function(settings){let settingsData=new URLSearchParams();switch(settings.contentType){case'application/json':try{const parsedData=JSON.parse(settings.data);settingsData=Object.keys(parsedData).reduce((output,key)=&gt;{const value=parsedData[key];const valueString=JSON.stringify(value);output.append(key,valueString);return output;},new URLSearchParams());}catch(e){settingsData=''}
break;default:settingsData=new URLSearchParams(settings.data);break;}
return settingsData;},hashString:function(string){return Array.from(string).reduce((accumulator,currentValue)=&gt;accumulator+currentValue.charCodeAt(0),0);}});return $.amGa4.ajaxObserver;});</pre></body></html>