Todos los componentes del NIVEL 2 ya están implementados correctamente: - ✅ Notification Bar (#49) - ✅ Navbar (#50) - ✅ Hero Section (#51) - ✅ Sidebar (#52) - ✅ Footer (#53) Solo se actualizó notification-bar.css para usar variables CSS. Próximo paso: NIVEL 3 (Refinamientos visuales) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
36 lines
79 KiB
Plaintext
36 lines
79 KiB
Plaintext
/**
|
|
* Fibr SDK Config
|
|
*/
|
|
var config={"urlCheck":false,"clientId":"6825b0c91488ce7a4532e112","campaignUrls":[],"campaignSelectors":{},"googleData":false,"country":"IN","region":"AP","observers":{"body":false,"elements":false},"reinitializeSdk":false,"auxillaryEvents":{},"validatedUrls":["https://www.ibeam.ai/general-contractor","https://www.ibeam.ai"],"googleAnalyticsEnabled":true};
|
|
/**
|
|
* SDK Code
|
|
*/
|
|
var asyncElements=config?.campaignSelectors;let PAGELOAD_MODES={ASYNC:"async",SYNC:"sync"},fibrConfig={pageLoad:PAGELOAD_MODES.ASYNC},auxillaryEventsObj=config?.auxillaryEvents,validatedUrls=config?.validatedUrls,ENV_STAGE="staging",ENV_PROD="prod",ENV_PROD_IN="prod-in",ENV_UAT="uat",ENV="prod",allowedJourneyAuxillaryClientIds=["68513ceb018246d1d3b65682","68ca6ae3ec82a96d5ec07be0"],isDebugModeEnabled=!1,watchMutationObserverOnBody=config?.observers?.body??!1,watchMutationObserverOnElements=config?.observers?.elements??!1,areChangesGotApplied=!1,isBodyMutationObserverActivated=!1,changeLogsMapForObserver=new Map,changeLogsMapForElementsNotFound=new Map,FIBR_PROCESSING_FLAG="fibr-processing",FIBR_DATA_ATTRIBUTE="fibr-element-id",FIBR_HIDE_ID_ATTRIBUTE="fibr-hide-id",attributeElementMap=new Map,hiddenElementsMap=new Map,isFibrApplyingChanges=!1,FIBR_MULTI_ELEMENT_CHANGE_TYPE="editMultiEle",FIBR_MULTI_ELEMENT_SUB_TYPE={DISPLAY_BLOCK_ELE:"displayBlockEle",DISPLAY_NONE_ELE:"displayNoneEle"};function logger(...e){isDebugModeEnabled&&console.log(...e)}function validateCurrentUrl(t){var e=new URL(t),i=e.host;validatedUrls&&validatedUrls.includes(t)?logger("FPT URL already validated:",t):(e=e.protocol+"//"+i,validatedUrls&&validatedUrls.includes(e)?logger("FPT Domain already validated:",e):(i={clientId:config?.clientId,url:t},fetch(API_URL+"/client/sdk/validate",{method:"POST",body:JSON.stringify(i),headers:{"Content-type":"application/json"}}).then(e=>{if(e.ok)return e.json();throw new Error("URL validation failed: "+e.status)}).then(e=>{logger("FPT URL validation successful:",e),validatedUrls&&!validatedUrls.includes(t)&&validatedUrls.push(t)}).catch(e=>{logger("FPT URL validation error:",e)})))}window.addEventListener("DOMContentLoaded",function(){isDebugModeEnabled=localStorage.getItem("fibrDebugMode")||ENV===ENV_STAGE,config&&config.clientId&&"654374a78975d93f720400df"===config.clientId&&(isDebugModeEnabled=!0)}),logger("FPT enters",fibrConfig);var root=document.querySelector(":root");let currentUrl=getCurrentUrl(),isReloadFailed=determineIfReloadOnFailedEvent(),urlObject=new URL(currentUrl),currentDomain=urlObject.host,currentBaseUrl=(urlObject.origin+"/"+urlObject.pathname.split("/")[1])?.replace(/\/$/,""),currentUrlWithoutQuery=currentUrl.split("?")[0]?.replace(/\/$/,""),visitorDetails=(logger("FPT urls - ",currentUrl,currentBaseUrl,currentUrlWithoutQuery),{}),visitCount={},campaignDetails={},sessionDetails={},experienceId=(visitorDetails.locationDetails={},null),isRequestFromFibrEditor=determineRequestSourceIsEditor(),isRequestFromFibrEditorPreview=determineRequestSourceIsEditorPreview(),isHoldout=!1,noRuleSetMatch=!1,doNotTrack=!1,errorApplyingExperience=!1,areWidgetChangesApplied=!1,triggeredWidgetsInSession=new Set,triggeredWidgets=new Set,globalWidgetManager=null,region=config&&config?.region&&"NA"===config?.region?"NA":"AP",API_URL=`https://${ENV}-api.fibr.shop`,RESOLVER_PROD_API_URL="https://prod-l-rep.fibr.shop",RESOLVER_PROD_US_API_URL="https://prod-us-rep.fibr.shop",RESOLVER_PROD_IN_API_URL="https://prod-in-rep.fibr.shop",RESOLVER_OLD_URL=`https://${ENV}-apig.fibr.shop/resolver`,RESOLVER_API_URL=ENV===ENV_PROD?"NA"===region?RESOLVER_PROD_US_API_URL:RESOLVER_PROD_API_URL:ENV===ENV_PROD_IN?RESOLVER_PROD_IN_API_URL:RESOLVER_OLD_URL,ANALYTICS_API_US_URL=`https://${ENV}-apig.fibr.shop/fpt-event`,ANALYTICS_API_IN_URL=`https://${ENV}-apigw.fibr.shop/fpt-event`,ANALYTICS_API_URL=ENV===ENV_PROD_IN?ANALYTICS_API_IN_URL:ANALYTICS_API_US_URL;var pages=null,widgets=null,triggers=null;let expIgnoreListCookieName="fpt_ignoreExp",sdkVersion="v1.115",applyingChanges=!1,inViewportElements=[],hasHiddenElementsForAsync=!1,cachedElements=new Map,cachedNodes=new Map,hiding=null,changesApplying=null,loggerTimer=new Date,ignoreInvisbleElements=[],originalRootDocumentElement=null,start=null,end=null,isByPassResolver=byPassResolver(),hasFibrTimedOut=!1,multiElementMap=new Map,previousUrlForAuxillaryEvent="";try{validateCurrentUrl(currentUrlWithoutQuery)}catch(e){logger("FPT error in validateCurrentUrl",e)}let fibr_startTime=performance.now(),fibr_formatTimeDiff=e=>{try{return(e-fibr_startTime)?.toFixed(2)+"ms"}catch(e){return logger("Error formatting time difference:",e),"0.00ms"}},fibr_logEvent=t=>{try{var e=performance.now();logger(`fibr_logger ${t}:
|
|
Time since start: ${fibr_formatTimeDiff(e)}
|
|
Timestamp: `+(new Date).toISOString())}catch(e){logger(`fibr_logger ${t}:`,e)}},buildCleanUrl=i=>{try{var e,r,n=/^((?:(?:(?:https|http):\/\/)(?:[-a-zA-Z0-9]+)(?:\.[-a-zA-Z0-9.]+)?)\.(?:[a-zA-Z0-9]+)(?:\/[\w\-/.]*)?)$/;let t=i.trim();return t?(["http://","https://"].some(e=>t.startsWith(e))||(t="https://"+t),e=new URL(t),t=e.protocol+"//"+e.host+e.pathname,""+e.host&&(r=t.match(n))&&r?.[1]?t=t?.replace(/\/+$/,""):null):null}catch(e){return logger("(buildCleanUrl) - Error encountered while building clean url --\x3e "+i),""}};function setStyleImportant(e,t,i,r={}){try{var n,a,o;e?.style&&(n=i||"",{important:a=!1,camelCaseProperty:o}=r,a?e.style.setProperty(t,n,"important"):o&&(e.style[o]=n))}catch(e){console.error(`Error setting style property ${t}:`,e)}}function initializeDataAttributesForChangelogs(e){logger("FPT initializing data attributes for changelogs");let a=new Map;e?.forEach(i=>{var e,t,r,n;"rearrangeEle"===i?.type?(e=i?.properties?.rearrange)&&0<(n=Object.entries(e?.parent||{})).length&&([n,t]=n[0],a.has(n)?logger(`FPT Skipping ID assignment for parent ${n} and its children as already processed`):(a.set(n,t),(r=getElementByXpath(n))&&!r.hasAttribute(FIBR_DATA_ATTRIBUTE)&&(r.setAttribute(FIBR_PROCESSING_FLAG,"true"),r.setAttribute(FIBR_DATA_ATTRIBUTE,t),r.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT Applied data attribute to parent element: "+t),attributeElementMap.set(n,{attributeValue:t,changelog:i}),e?.childrenIDMap?.forEach(e=>{var t;e?.xpath&&e?.fibrId&&(t=getElementByXpath(e.xpath))&&!t.hasAttribute(FIBR_DATA_ATTRIBUTE)&&(t.setAttribute(FIBR_PROCESSING_FLAG,"true"),t.setAttribute(FIBR_DATA_ATTRIBUTE,e.fibrId),t.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT Applied data attribute to child element: "+e.fibrId),attributeElementMap.set(e.xpath,{attributeValue:e.fibrId,changelog:i}))})))):i?.attributes&&i?.attributes?.elementId&&i?.type!==FIBR_MULTI_ELEMENT_CHANGE_TYPE&&(r=i?.attributes?.elementId,attributeElementMap.set(i?.selectorPath,{attributeValue:r,changelog:i}),n=getElementByXpath(i?.selectorPath))&&!n.hasAttribute(FIBR_DATA_ATTRIBUTE)&&!n.hasAttribute(FIBR_PROCESSING_FLAG)&&(n.setAttribute(FIBR_PROCESSING_FLAG,"true"),n.setAttribute(FIBR_DATA_ATTRIBUTE,r),n.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT Applied data attribute to element: "+r))})}function initializeDataAttributesForGroups(e){logger("FPT initializing data attributes for groups"),e?.forEach(e=>{var t;e?.a&&(t=e?.a,attributeElementMap.set(e?.p,{attributeValue:t,group:e}),!(e=getElementByXpath(e?.p))||e.hasAttribute(FIBR_DATA_ATTRIBUTE)||e.hasAttribute(FIBR_PROCESSING_FLAG)||(e.setAttribute(FIBR_PROCESSING_FLAG,"true"),e.setAttribute(FIBR_DATA_ATTRIBUTE,t),e.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT Applied data attribute to element: "+t)))})}function convertPositionToResponsive(e){var t,i;return!e||"string"!=typeof e||(t=parseInt(e.replace("px","")),isNaN(t))?e:(i=window.innerWidth,Math.round(t*(i/1920))+"px")}function setCookieWithTtl(e,t,i){var r=new Date,i=(r.setTime(r.getTime()+60*i*60*1e3),"expires="+r.toUTCString());document.cookie=e+"="+t+"; "+i+"; path=/"}function setCookie(e,t){var i=new Date,t=(i.setTime(i.getTime()+24*t*60*60*1e3),"expires="+i.toUTCString());document.cookie=e+t+";path=/"}function setEncodedCookie(e,t,i=null){e=e+"="+encodeURIComponent(JSON.stringify(t));let r="";null===i||isNaN(new Date(i).getTime())||(r="expires="+i.toUTCString()+"; "),document.cookie=e+"; "+r+"path=/"}function getCookieExpiryDate(t){var i=document.cookie.split("; ");for(let e=0;e<i.length;e++){var r=i[e].trim();if(r.startsWith(t+"=")){var n=r.split("=");for(let e=1;e<n.length;e++){var a=n[e].trim();if(a.includes("expires="))return a=a.split("expires=")[1].split(";")[0].trim(),new Date(a)}}}return null}function getFilteredCookies(t){if(!config?.privacySettings)return{...t};var e=config.privacySettings.cookiesAllowedType;if(!e||"all_cookies"===e)return{...t};let i={};let r={fibr_only:/^(_?fibr|__fibr|fpt_)/,fibr_analytics:/^(_?fibr|__fibr|fpt_|_ga[a-z0-9_]*|_gid[a-z0-9_]*|_gat[a-z0-9_]*|_gac[a-z0-9_]*|_gadebug[a-z0-9_]*|_gtm[a-z0-9_]*|_gcl[a-z0-9_]*|_gaexp[a-z0-9_]*)/}[e];return r?(Object.keys(t).forEach(e=>{r.test(e)&&(i[e]=t[e])}),i):(console.error("FPT unknown cookiesAllowedType: "+e),{})}function getCookies(){for(var e=document.cookie.split(";"),t={},i=0;i<e.length;i++){var r=e[i].split("=");t[(r[0]+"").trim()]=unescape(r.slice(1).join("="))}return getFilteredCookies(t)}function getCookie(t){var i=document.cookie.split(";");for(let e=0;e<i.length;e++){var r=i[e].trim().split("=");if(r[0]===t)return r[1]}return null}function getDecodedCookie(t){var e=document.cookie.split("; ").find(e=>e.startsWith(t+"="));return e?(e=e.split("=")[1].replace(/expires=[^;]+;?\s*/i,""),decodeURIComponent(e)):null}let auxillaryCookieKey="__fibr_auxillary",TLD_PATTERNS=[/^[a-z]{2}$/,/^(com|edu|gov|org|net|ac|co|mil|int)\.[a-z]{2}$/,/^(com|edu|gov|org|net|co)\.[a-z]{2,4}$/];function fibr_getApexDomain(e){try{if(!e||"string"!=typeof e)return"";var i=/^https?:\/\//.test(e)?new URL(e).hostname:e,r=i.toLowerCase().split(".");if(r.length<=2)return"."+i;let t=r.slice(-2).join(".");var n=TLD_PATTERNS.some(e=>e.test(t));return"."+r.slice(n?-3:-2).join(".")}catch(e){return""}}let sendAuxillaryCookieEvent=n=>{if(n&&auxillaryEventsObj[n]&&Array.isArray(auxillaryEventsObj[n])&&auxillaryEventsObj[n]?.length){let r=buildCleanUrl(window?.frames?.top?.document?.referrer||previousUrlForAuxillaryEvent||"");(auxillaryEventsObj[n]||[]).forEach(e=>{var t=e?.en,e=e?.ru,i=r===e;t&&i&&(sendAuxillaryEvent({eventType:"SUCCESS_EVENT",path:n,name:t,timestamp:Date.now(),isAuxillaryEvent:!0,refererUrl:e,subType:"successMetrics"}),logger("FPT event auxillary fired event: "+t))})}},setFibrAuxillaryCookieData=()=>{var e={campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails};let t=getCookieExpiryDate("fpt_ssid");null===t&&(t=new Date).setTime(t.getTime()+864e5);e=auxillaryCookieKey+"="+encodeURIComponent(JSON.stringify(e));let i="";null===t||isNaN(new Date(t).getTime())||(i="expires="+t.toUTCString()+"; ");var r=fibr_getApexDomain(location.hostname);document.cookie=e+"; "+i+`path=/; domain=${r}; SameSite=Lax; Secure`},getJourneyFromCookie=()=>{try{var e=(document.cookie||"").split(";").map(e=>e.trim()).find(e=>e.startsWith("__fibr_journey=")),t=e?JSON.parse(decodeURIComponent(e.split("=")[1])):null;return logger("FPT Journey: Get cookie result:",t),t}catch(e){return logger("FPT Journey: Get cookie error:",e),null}},setJourneyCookie=e=>{try{var t=fibr_getApexDomain(location.hostname),i=new Date(Date.now()+864e5);document.cookie=`__fibr_journey=${encodeURIComponent(JSON.stringify(e))}; expires=${i.toUTCString()}; path=/; domain=${t}; SameSite=Lax; Secure`,logger("FPT Journey: Set cookie:",e)}catch(e){logger("FPT Journey: Set cookie error:",e)}},clearJourneyCookie=()=>{try{var e=fibr_getApexDomain(location.hostname);document.cookie=`__fibr_journey=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=${e}; SameSite=Lax; Secure`,logger("FPT Journey: Cookie cleared")}catch(e){logger("FPT Journey: Clear cookie error:",e)}},processJourneyTracking=e=>{try{if(logger("FPT Journey: Processing journey for URL:",e),e&&auxillaryEventsObj){let n=buildCleanUrl(e);if(n){logger("FPT Journey: Clean URL:",n);let e=!1;for(var t of Object.values(auxillaryEventsObj))if(Array.isArray(t)&&t.some(e=>e.ru===n)){e=!0;break}var i,a;if(logger("FPT Journey: Is source page:",e),e)logger("FPT Journey: Starting new journey:",i={source:n,started:Date.now(),visited:[n]}),setJourneyCookie(i);else{let r=getJourneyFromCookie();r?(logger("FPT Journey: Found existing journey:",r),r.visited.includes(n)?logger("FPT Journey: Page already visited:",n):(logger("FPT Journey: Adding new page to journey:",n),r.visited.push(n),setJourneyCookie(r)),a=auxillaryEventsObj[n],logger(`FPT Journey: Destination configs for ${n}:`,a),a&&Array.isArray(a)?a.forEach((e,t)=>{var{en:e,ru:i}=e;logger(`FPT Journey: Checking source ${t}:`,{sourceUrl:i,eventName:e,journeySource:r.source}),i===buildCleanUrl(r.source)?(logger("FPT Journey: MATCH FOUND! Firing event:",e),logger("FPT Journey: Event payload:",t={eventType:"SUCCESS_EVENT",path:n,name:e,timestamp:Date.now(),isAuxillaryEvent:!0,refererUrl:i,subType:"successMetrics",journeyObj:r}),sendAuxillaryEvent(t),clearJourneyCookie()):logger(`FPT Journey: No match - ${i} !== `+r.source)}):logger("FPT Journey: No destination configs found for:",n)):logger("FPT Journey: No existing journey found")}}else logger("FPT Journey: Early return - cleanUrl failed for:",e)}else logger(`FPT Journey: Early return - currentUrl:${!!e}, auxillaryEventsObj:`+!!auxillaryEventsObj)}catch(e){logger("FPT error in processJourneyTracking",e)}},handleUrlChange=()=>{try{var e=buildCleanUrl(getCurrentWindowUrl()),t=buildCleanUrl(getCurrentUrl());t!==e&&(previousUrlForAuxillaryEvent=t,sendAuxillaryCookieEvent(e))}catch(e){logger("FPT error in handleUrlChange",e)}},initSpaUrlChangeDetection=()=>{try{["pushState","replaceState"].forEach(e=>{let t=window.history[e];window.history[e]=(...e)=>{t.apply(window.history,e),setTimeout(handleUrlChange,50)}}),window.addEventListener("popstate",handleUrlChange)}catch(e){logger("FPT error in initSpaUrlChangeDetection",e)}};function fibr_initialHideFunction(){var e;(fibrConfig={pageLoad:window.fibrConfig?.pageLoad??PAGELOAD_MODES.ASYNC})?.pageLoad!==PAGELOAD_MODES.ASYNC||isByPassResolver?(logger("FPT fibrStyle",e=document.getElementById("fibr-style")),e&&document.head.removeChild(e),setTimeout(()=>{logger("FPT Time Taken img tag",new Date-loggerTimer);var e=document.getElementById("fibr-async-img-style");logger("POC FPT asynImgStyle",e),e&&document.head.removeChild(e)},300)):hasHiddenElementsForAsync||hasFibrTimedOut&&!isRequestFromFibrEditor||(logger("FPT asyncElements[currentBaseUrl]",asyncElements,fibrConfig),hideElementsForAsync(asyncElements[currentUrlWithoutQuery]??[]))}let OBSERVER_CONFIG={childList:!0,subtree:!0,attributes:!0,attributeFilter:["src",FIBR_DATA_ATTRIBUTE]};function matchesWildcardXPath(e,t){var i;return!!t&&!!e&&(t.includes("[*]")?(i=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\\\[\\\*\\\]/g,"\\[(\\d+)\\]"),new RegExp(`^${i}$`).test(e)):e===t)}let reapplyChangesOnElements=(r,e)=>{if(r&&e)try{if(!isFibrApplyingChanges&&!e?.nodeType!==Node.ELEMENT_NODE){let i=getXpath(e);i&&multiElementMap&&0!==multiElementMap.size&&multiElementMap?.forEach((e,t)=>{matchesWildcardXPath(i,t)&&(t=getElementByXpath(i))&&(r.disconnect(),applyWildcardChangesOnElement(t,{...e,selectorPath:i,attributes:{elementId:generateFibrId()}}),r.observe(document.body,OBSERVER_CONFIG))})}}catch(e){logger("FPT error in checkForPendingElements",e)}},checkForPendingElements=(i,r)=>{try{isFibrApplyingChanges||!r?.nodeType!==Node.ELEMENT_NODE&&changeLogsMapForObserver.forEach((e,t)=>{matchesXPath(r,t)&&(t=getElementBySelector(e))&&(i.disconnect(),applyChangesOnElement(t,e),i.observe(document.body,OBSERVER_CONFIG))})}catch(e){logger("FPT error in checkForPendingElements",e)}};function handleAttributeChange(e){try{var t,i,r;isFibrApplyingChanges||e&&e.hasAttribute(FIBR_PROCESSING_FLAG)||e.hasAttribute(FIBR_DATA_ATTRIBUTE)||0!==attributeElementMap.size&&(t=getXpath(e),i=attributeElementMap.get(t))&&(r=i.attributeValue,matchesXPath(e,t))&&r&&!e.hasAttribute(FIBR_DATA_ATTRIBUTE)&&(e.setAttribute(FIBR_PROCESSING_FLAG,"true"),e.setAttribute(FIBR_DATA_ATTRIBUTE,r),e.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT Reapplied data attribute to observed element"))}catch(e){logger("FPT error in handleAttributeChange",e)}}let initBodyObserver=()=>{if(logger("FPT BODY mutation observer attempted, current status :"+isBodyMutationObserverActivated),watchMutationObserverOnBody&&!isRequestFromFibrEditor)if(logger(`FPT BODY mutation observer initiated
|
|
current status :${isBodyMutationObserverActivated}
|
|
changelog to apply: `+changeLogsMapForObserver.size),"undefined"!=typeof document&&document.body)try{let s=new MutationObserver(e=>{if(!isFibrApplyingChanges){let t=[];for(var i of e)if(!i.target.hasAttribute(FIBR_PROCESSING_FLAG)){if("attributes"===i.type&&"src"===i.attributeName&&"IMG"===i.target.nodeName&&i.target){var r=getXpath(i.target);let t=null;if(t=i.target?.hasAttribute(FIBR_DATA_ATTRIBUTE)?getElementByFibrId(i.target?.getAttribute(FIBR_DATA_ATTRIBUTE)):getElementByXpath(r),0<changeLogsMapForObserver.size&&changeLogsMapForObserver.has(r)&&t){let e=changeLogsMapForObserver.get(r);o=r=void 0,r=e.properties?.media,o=e.properties?.srcset,t.src===r||o&&Array.isArray(o)&&0<o?.length&&o?.includes(t.src)||(s.disconnect(),applyChangesOnElement(t,e),setTimeout(()=>{s.observe(document.body,OBSERVER_CONFIG)},100))}}"attributes"===i.type&&i.target&&handleAttributeChange(i.target);for(var n of i.addedNodes){var a;n.nodeType===Node.ELEMENT_NODE&&"script"!==n.tagName?.toLowerCase()&&(a=getXpath(n),t.push(n),n.querySelectorAll("*").forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&"script"!==e.tagName?.toLowerCase()&&(t.push(e),multiElementMap)&&0<multiElementMap?.size&&reapplyChangesOnElements(s,e)}),0<changeLogsMapForObserver.size)&&changeLogsMapForObserver.has(a)&&checkForPendingElements(s,n)}}var o;if(0<t.length&&t.forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&handleAttributeChange(e)}),0<changeLogsMapForElementsNotFound?.size)try{s.disconnect(),changeLogsMapForElementsNotFound?.forEach((e,t)=>{var i=getElementBySelector(e);i&&(applyChangesOnElement(i,e),changeLogsMapForElementsNotFound.delete(t))}),s.observe(document.body,OBSERVER_CONFIG)}catch(e){logger("FPT error in checkForPendingElements",e)}}});s.observe(document.body,OBSERVER_CONFIG),isBodyMutationObserverActivated=!0}catch(e){console.error("(initBodyObserver) - Failed to initialize MutationObserver:",e)}else console.error("(initBodyObserver) - DOM not available for MutationObserver")};function checkSessionIdExpired(){var e,t=localStorage.getItem("__fibr_data_layer");if(t)return t=JSON.parse(t),e=getCookie("fpt_ssid"),logger("FPT checking sessionId expired",t.fibr_session_id,e),t.fibr_session_id!==e}async function copyDataLayerToWindow(){var e=checkSessionIdExpired();if(e)logger("FPT sessionId expired, removing data layer",e),localStorage.removeItem("__fibr_data_layer");else try{logger("FPT getting data layer from localStorage");var t,i=localStorage.getItem("__fibr_data_layer");logger("FPT dataLayer from localStorage:",i),i&&(logger("FPT parsing dataLayer JSON"),logger("FPT parsed dataLayerObj:",t=JSON.parse(i)),logger("FPT checking if window.dataLayer exists"),window.dataLayer||(logger("FPT initializing window.dataLayer"),window.dataLayer=[],logger("FPT window.dataLayer initialized")),logger("FPT pushing dataLayerObj to window.dataLayer"),window.dataLayer.push(t),logger("FPT pushed localStorage data layer to window.dataLayer")),logger("FPT finished processing dataLayer")}catch(e){logger("FPT Error pushing data layer to window.dataLayer: "+e)}}"loading"!==document.readyState?(fibr_logEvent("fibr_initialHideFunctioninsideloading"),fibr_initialHideFunction(),initBodyObserver()):document.addEventListener("DOMContentLoaded",e=>{fibr_logEvent("fibr_initialHideFunctioninsidedomcontentloaded"),fibr_initialHideFunction(),initBodyObserver()});let copyDataLayerAndSendEvent=()=>{try{copyDataLayerToWindow()}catch(e){logger("FPT Error in copyDataLayerToWindow: "+e)}try{sendCookieEvent()}catch(e){logger("FPT Error in sendCookieEvent: "+e)}};function init(){start=new Date;try{initSpaUrlChangeDetection(),sendAuxillaryCookieEvent(currentUrlWithoutQuery),config?.clientId&&allowedJourneyAuxillaryClientIds?.includes(config?.clientId)&&processJourneyTracking(getCurrentWindowUrl()),logger("FPT Auxillary event fired")}catch(e){logger("FPT Auxillary event fired err: "+e)}isReloadFailed?(logger("FPT failed event reloaded scenario"),localStorage.removeItem("__fibr_data_layer"),transitionFibrBlurEffect(),copyDataLayerAndSendEvent()):isRequestFromFibrEditor?(localStorage.removeItem("__fibr_data_layer"),getExperienceData(applyChanges)):isByPassResolver?(transitionFibrBlurEffect(),copyDataLayerAndSendEvent()):(logger("FPT init called 2"),getRequestParameters(applyChanges))}init();let resetAsyncElements=()=>{try{hasHiddenElementsForAsync=!1,unhideElementsForAsync(asyncElements[currentUrlWithoutQuery]??[]);var e=document.getElementById("fibr-style");logger("FPT fibrStyle",e),e&&document.head.removeChild(e),setTimeout(()=>{try{logger("FPT Time Taken img tag",new Date-loggerTimer);var e=document.getElementById("fibr-async-img-style");logger("POC FPT asynImgStyle",e),e&&document.head.removeChild(e)}catch(e){logger("FPT error in resetAsyncElements",e)}},300)}catch(e){logger("FPT error in resetAsyncElements",e)}};function transitionFibrBlurEffect(e=!1){if(!0!==e&&!areChangesGotApplied)return!1;hasHiddenElementsForAsync&&!isByPassResolver&&resetAsyncElements(),root.style.opacity=1,root.style.filter="blur(0px)";try{document.body.style.opacity="1";var t=document.getElementById("fibr-style");t&&t.parentNode&&t.parentNode.removeChild(t)}catch(e){logger("transitionFibrBlurEffect failed",e)}}function deepCloneElement(e){return e.cloneNode(!0)}function replaceDocumentRootElement(e){document.documentElement.replaceWith(e)}function hideElementsForAsync(e){logger("FPT hideElements",e),logger("FPT Time Taken hiding start",new Date-loggerTimer);let t=getDeviceType();e?.forEach(i=>{if("all"===i?.d?.toLowerCase()||i?.d?.toLowerCase()===t){let t=getElementByXpath(i?.p);try{if(t){var e=generateFibrId();if(t&&e)try{t.setAttribute(FIBR_PROCESSING_FLAG,"true"),hiddenElementsMap.set(i.p,{attributeValue:e,changelog:null}),t.setAttribute(FIBR_HIDE_ID_ATTRIBUTE,e),t.removeAttribute(FIBR_PROCESSING_FLAG),"A"===t?.tagName&&config&&"678fd37effb4d5a6b22f9c0c"===config?.clientId?requestAnimationFrame(()=>{t.style.setProperty("display","none","important")}):t.style.visibility="hidden",logger("FPT Successfully hid element with Fibr ID: "+e)}catch(e){logger("FPT Error in element hiding process:",e),t.hasAttribute(FIBR_PROCESSING_FLAG)&&t.removeAttribute(FIBR_PROCESSING_FLAG),hiddenElementsMap.has(i.p)&&hiddenElementsMap.delete(i.p)}else logger("FPT Error: Invalid element or hideElementId generation failed")}}catch(e){logger("FPT error in hideElementsForAsync",e)}}});e=document.getElementById("fibr-style");logger("FPT fibrStyle",e),e&&document.head.removeChild(e),setTimeout(()=>{logger("FPT Time Taken img tag",new Date-loggerTimer);var e=document.getElementById("fibr-async-img-style");logger("FPT asynImgStyle",e),e&&document.head.removeChild(e)},300),hasHiddenElementsForAsync=!0,logger("FPT Time Taken hiding end",new Date-loggerTimer)}function isInViewport(e){if(e)return logger("FPT isInViewport",e=e.getBoundingClientRect()),0<=e.top&&0<=e.left&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function unhideChangeSelectorEntriesFunction(){try{hiddenElementsMap&&0!==hiddenElementsMap.size?hiddenElementsMap.forEach((e,t)=>{try{var i;e&&e.attributeValue?"hidden"===(i=document.querySelector(`[${FIBR_HIDE_ID_ATTRIBUTE}="${e.attributeValue}"]`))?.style?.visibility&&(i.style.visibility="visible",logger("FPT: Successfully restored visibility for element with hide ID: "+e.attributeValue)):logger("FPT: Invalid map entry for key: "+t)}catch(e){logger(`FPT: Error processing hidden element with key ${t}:`,e)}}):logger("FPT: No hidden elements to restore")}catch(e){logger("FPT: Error in unhideChangeSelectorEntriesFunction:",e)}}function unhideElementsForAsync(e){logger("FPT unhideElementsForAsync selectors",e);let n=getDeviceType();e?.forEach(t=>{try{if(("all"===t?.d?.toLowerCase()||t?.d?.toLowerCase()===n)&&!ignoreInvisbleElements.includes(t.p)){let e=null;var i,r=attributeElementMap?.get(t.p);r&&(i=r.attributeValue,i)&&(e=document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${i}"]`),logger("FPT element found by data attribute for unhide")),e||(e=getElementByXpath(t?.p),logger("FPT element found by xpath for unhide")),e&&("A"===e.tagName?config&&"678fd37effb4d5a6b22f9c0c"===config?.clientId?setTimeout(()=>{e.style.setProperty("display","inline-block","important")},100):setTimeout(()=>{e.style.visibility="visible"},100):e.style.visibility="visible")}}catch(e){logger("FPT error in unhideElements",e)}}),unhideChangeSelectorEntriesFunction(),logger("FPT Time Taken unhiding end",new Date-loggerTimer)}function getCampaignUrl(){return(currentUrl=resetAndGetCurrentUrl()).split(/[?#]/)[0].replace(/\/$/,"")}function byPassResolver(){var e=getCampaignUrl();return logger("FPT current and search url",currentUrl,e),"undefined"==typeof config?(logger("FPT cant byPassResolver as config undefined."),!1):!1===config?.urlCheck?(logger("FPT byPassing Resolver as urlCheck is false."),!0):config?.campaignUrls&&0===config?.campaignUrls?.length?(logger("FPT byPassing Resolver as config.campaignUrls is empty."),!0):config?.campaignUrls?.includes(e)?(logger("FPT cant byPass Resolver as config.campaignUrls contains urlToSearch.",config?.campaignUrls,e),!1):(logger("FPT byPassing Resolver as config.campaignUrls doesnt contain urlToSearch.",config?.campaignUrls,e),!0)}function getDeviceTypeForEditor(){var e;return isRequestFromFibrEditor&&window.location.href?.includes("deviceType=mobile")?(logger("FPT getDeviceTypeForEditor",window.location.href),"mobile"):(logger("FPT device type info",e=visitorDetails?.device??getDeviceType()),e)}async function getRequestParameters(e){var t=getCookies();logger("Fpt sdk myCookies"+JSON.stringify(t)),visitorDetails.visitorId=t._fibrId,null==visitorDetails?.visitorId&&(visitorDetails.visitorId=generateFibrId(),setCookie("_fibrId="+visitorDetails?.visitorId+";",20)),visitCount.domainVisitCount=t["_fibr_"+currentDomain]??0,logger("Fpt sdk domainVisitCount 3333",visitCount?.domainVisitCount),visitCount.domainVisitCount=parseInt(visitCount?.domainVisitCount)+1,setCookie("_fibr_"+currentDomain+"="+visitCount?.domainVisitCount+";",20),visitCount.pageVisitCount=t["_fibr_"+currentUrl]??0,logger("Fpt sdk urlVisitCount",visitCount?.pageVisitCount),visitCount.pageVisitCount=parseInt(visitCount?.pageVisitCount)+1,setCookie("_fibr_"+currentUrl+"="+visitCount?.pageVisitCount+";",20),visitCount.baseUrlVisitCount=t["_fibr_"+currentUrlWithoutQuery]??0,logger("Fpt sdk baseUrlVisitCount",visitCount?.baseUrlVisitCount),visitCount.baseUrlVisitCount=parseInt(visitCount?.baseUrlVisitCount)+1,setCookie("_fibr_"+currentUrlWithoutQuery+"="+visitCount?.baseUrlVisitCount+";",20),logger("Fpt sdk visitCount.baseUrlVisitCount",visitCount?.baseUrlVisitCount),visitorDetails.os=getOS(),logger("Fpt sdk visitorDetails.os",visitorDetails?.os),visitorDetails.device=getDeviceType(),visitorDetails.languages=getLanguages(),visitorDetails.browser=getBrowser(),sessionDetails.sessionId=handleSession(),await getPagesFromResolverV2(e),logger("Fpt sdk visitorDetails",visitorDetails),logger("Fpt sdk visitCount",visitCount),logger("Fpt sdk campaignDetails",campaignDetails);try{sendCookieEvent()}catch(e){logger("FPT Error in sendCookieEvent: "+e)}}function seedFibrGTMVariableValuesV2(){function e(){var e=(()=>{try{if(sessionDetails&&visitorDetails&&campaignDetails)return{event:"fibr_track_event",fibr_client_id:campaignDetails?.clientId,fibr_event:"fibr_track_event",fibr_session_id:sessionDetails?.sessionId,fibr_user_id:visitorDetails?.visitorId,fibr_workflow_id:campaignDetails?.workflowId,fibr_variation_id:campaignDetails?.experienceId,fibr_variation_name:campaignDetails?.experienceName,fibr_campaign_id:campaignDetails?.campaignId,fibr_campaign_name:campaignDetails?.campaignName,fibr_campaign_group_type:campaignDetails?.campaignGroupType,fibr_campaign_group_name:campaignDetails?.campaignGroupName,fibr_campaign_group_id:campaignDetails?.campaignGroupId,fibr_is_qualifed:!doNotTrack};throw new Error("FPT GTM Seeding required details are missing")}catch(e){return console.error("FPT Error in getDataLayerValuesObject ",e?.message),null}})();localStorage.setItem("__fibr_data_layer",JSON.stringify(e))}logger("FPT Setting GTM Variable values"),e(),copyDataLayerToWindow()}function seedFibrGTMVariableValues(){function e(){dataLayer=dataLayer||[];var e=localStorage.getItem("__fibr_data_layer"),e=e?JSON.parse(e):null;!areCampaignDetailsValid()||doNotTrack||noRuleSetMatch?e?(dataLayer.push(e),logger(`FPT ${areCampaignDetailsValid()?"Default":"No"} campaign rendered, previous data layer found.`)):logger(`FPT ${areCampaignDetailsValid()?"Default":"No"} campaign rendered, no previous data layer found. Not seeding GTM`):(e=(()=>{try{if(sessionDetails&&visitorDetails&&campaignDetails)return{event:"fibr_track_event",fibr_client_id:campaignDetails?.clientId,fibr_event:"fibr_track_event",fibr_session_id:sessionDetails?.sessionId,fibr_user_id:visitorDetails?.visitorId,fibr_workflow_id:campaignDetails?.workflowId,fibr_variation_id:campaignDetails?.experienceId,fibr_variation_name:campaignDetails?.experienceName,fibr_campaign_id:campaignDetails?.campaignId,fibr_campaign_name:campaignDetails?.campaignName,fibr_campaign_group_type:campaignDetails?.campaignGroupType,fibr_campaign_group_name:campaignDetails?.campaignGroupName,fibr_campaign_group_id:campaignDetails?.campaignGroupId,fibr_is_qualifed:!doNotTrack};throw new Error("FPT GTM Seeding required details are missing")}catch(e){return console.error("FPT Error in getDataLayerValuesObject ",e?.message),null}})())&&(dataLayer.push(e),localStorage.setItem("__fibr_data_layer",JSON.stringify(e))),logger("FPT GTM Variable Values pushed to dataLayer",JSON.stringify(dataLayer))}logger("FPT Setting GTM Variable values"),"undefined"!=typeof dataLayer&&dataLayer?logger("FPT DataLayer already exists"):(logger("FPT creating data layer"),window.dataLayer=[],logger("FPT does window.dataLayer exists",window.dataLayer),dataLayer=window.dataLayer),logger("FPT does dataLayer exists",dataLayer),e()}function hideUnhidePictureTag(e,t=!1){("IMG"===e?.nodeName&&"PICTURE"===e?.parentElement?.nodeName||"IMG"===e?.nodeName)&&(e.style.opacity=!0===t?0:1,logger("POC Hiding img tag or picture tag"))}function applyChangesOnElement(e,t){var i;if(hideUnhidePictureTag(e,!0),"editEle"==t?.type&&(t?.cssProperties?.visibility&&(setStyleImportant(e,"visibility",t.cssProperties.visibility,{important:t?.importantProperties?.visibility||!1,camelCaseProperty:"visibility"}),"hidden"===t.cssProperties.visibility)&&ignoreInvisbleElements.push(t?.selectorPath),t?.cssProperties?.opacity&&setStyleImportant(e,"opacity",t.cssProperties.opacity,{important:t?.importantProperties?.opacity||!1,camelCaseProperty:"opacity"}),t?.cssProperties?.bgImage&&(""===t?.cssProperties?.bgImage?e.style.backgroundImage="none":t?.cssProperties?.bgImage.startsWith("url")?e.style.backgroundImage=t?.cssProperties?.bgImage:e.style.backgroundImage="url("+t.cssProperties.bgImage+")"),t?.cssProperties?.bgColor&&setStyleImportant(e,"background-color",t.cssProperties.bgColor,{important:t?.importantProperties?.bgColor||!1,camelCaseProperty:"backgroundColor"}),t?.properties?.href&&(e.style.href=t.properties.href),t?.cssProperties?.fontSize&&setStyleImportant(e,"font-size",t.cssProperties.fontSize,{important:t?.importantProperties?.fontSize||!1,camelCaseProperty:"fontSize"}),t?.cssProperties?.fontWeight&&setStyleImportant(e,"font-weight",t.cssProperties.fontWeight,{important:t?.importantProperties?.fontWeight||!1,camelCaseProperty:"fontWeight"}),t?.cssProperties?.fontFamily&&setStyleImportant(e,"font-family",t.cssProperties.fontFamily,{important:t?.importantProperties?.fontFamily||!1,camelCaseProperty:"fontFamily"}),t?.cssProperties?.color&&setStyleImportant(e,"color",t.cssProperties.color,{important:t?.importantProperties?.color||!1,camelCaseProperty:"color"}),t?.cssProperties?.textAlign&&setStyleImportant(e,"text-align",t.cssProperties.textAlign,{important:t?.importantProperties?.textAlign||!1,camelCaseProperty:"textAlign"}),!t?.properties?.text&&""!==t?.properties?.text||(updateText(e,t.properties.text),logger("FPT text changes",e.textContent)),(t?.properties?.media||t?.properties?.alt||t?.properties?.width||t?.properties?.height||t?.properties?.fit||t?.properties?.picture||t?.properties?.srcset||t?.properties?.isPicture)&&(updateImage(e,t?.properties?.media,t?.properties?.alt,t?.properties?.width,t?.properties?.height,t?.properties?.fit,t?.properties?.picture,t?.properties?.srcset,t?.properties?.isPicture),logger("FPT image updated",e)),(t?.properties?.video||null!=t?.properties?.autoplay||null!=t?.properties?.muted||null!=t?.properties?.loop||t?.properties?.width||t?.properties?.height)&&(updateVideo(e,{videoUrl:t?.properties?.video,autoplay:t?.properties?.autoplay,muted:t?.properties?.muted,loop:t?.properties?.loop,width:t?.properties?.width,height:t?.properties?.height}),logger("FPT video updated",e)),t?.properties?.href&&(e.href=t?.properties?.href,logger("FPT href changes",e)),t?.properties?.svg)&&(updateSVG(e,{src:t?.properties?.svg,width:t?.properties?.width,height:t?.properties?.height,contains:t?.properties?.fit}),logger("FPT svg updated",e)),"hideEle"==t?.type&&(hideElement(e),logger("FPT hides element",e)),"deleteEle"==t?.type&&(deleteElement(e),logger("FPT deletes element",e)),"appendEle"==t?.type&&(addElement(e,t?.html),logger("FPT ele to be added",t?.html)),"editHtml"==t?.type&&(replaceElement(e,t?.html),logger("FPT ele to be edited",t.html)),"moveEle"==t?.type&&t?.properties&&t?.properties?.movePosition&&((i=t?.properties?.movePosition)?.position&&setStyleImportant(e,"position",i?.position,{important:!0,camelCaseProperty:"position"}),i?.top&&(c=i?.top)&&setStyleImportant(e,"top",c,{important:!0,camelCaseProperty:"top"}),i?.left&&(c=i?.left)&&setStyleImportant(e,"left",c,{important:!0,camelCaseProperty:"left"}),i?.zIndex)&&setStyleImportant(e,"z-index",i?.zIndex,{important:!0,camelCaseProperty:"zIndex"}),"resizeEle"==t?.type&&t?.properties&&t?.properties?.movePosition&&((c=t?.properties?.movePosition)?.height&&(i=c?.height)&&setStyleImportant(e,"height",i,{important:!0,camelCaseProperty:"height"}),c?.width)&&(i=c?.width)&&setStyleImportant(e,"width",i,{important:!0,camelCaseProperty:"width"}),"rearrangeEle"===t?.type)try{if(!t?.properties?.rearrange)return void logger("Missing rearrange data in changelog");var r=t.properties.rearrange,n=t.attributes.elementId,a=document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${n}"]`);if(!a)return void logger("Element to move not found with ID: "+n);var o=Object.values(r.parent)[0],s=document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${o}"]`);if(!s)return void logger("Parent element not found with ID: "+o);var{type:l,nextSiblingID:g}=r.position;let e=null;g&&(e=document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${g}"]`)),"before"===l&&e?s.insertBefore(a,e):s.appendChild(a),logger("Successfully moved element "+n)}catch(e){logger("Error applying rearrange changelog: "+e.message)}if("editEleChild"==t?.type)if(isNaN(t?.properties?.childIndex))logger("FPT Ignoring editEleChild for path, childIndex as Nan",t.selectorPath,t?.properties?.childIndex);else{let e=null;t?.attributes&&t?.attributes?.elementId?e=getElementBySelector(t):t?.selectorPath&&(e=getElementByXpath(t?.selectorPath)),logger("FPT editEleChild for path, childIndex",e?.childNodes,t?.properties?.childIndex,e?.childNodes?.[t?.properties?.childIndex]);var c=e?.childNodes?.[t?.properties?.childIndex];c?c.textContent=t?.properties?.childText:logger("FPT Ignoring editEleChild for path, childIndex, element not found at index",t.selectorPath,t?.properties?.childIndex)}hideUnhidePictureTag(e,!1)}function getAllElementsByWildcardXPath(i){if(!i)return[];try{isFibrApplyingChanges=!0;var r=i?.selectorPath;if(!r.includes("[*]"))return logger("FPT XPath doesn't contain wildcard: "+r),[];var n=[];let t=0;for(let e=1;e<=1e3&&!(0<n?.length&&4<=t)&&!(0===n?.length&&10<=e);e++){var a=r?.replace(/\[\*\]/g,`[${e}]`),o=getElementByXpath(a),s={...i,selectorPath:a,attributes:{elementId:generateFibrId()}};o?(n.push(o),applyWildcardChangesOnElement(o,s),t=0):t++}return n}catch(e){return logger("FPT Error in wildcard XPath function: "+e?.message),[]}finally{isFibrApplyingChanges=!1}}function applyWildcardChangesOnElement(e,t){if(t&&e)try{t?.attributes&&t?.attributes?.elementId&&(e.setAttribute(FIBR_PROCESSING_FLAG,"true"),e.setAttribute(FIBR_DATA_ATTRIBUTE,t?.attributes?.elementId),attributeElementMap.set(t?.selectorPath,{attributeValue:t?.attributes?.elementId,changelog:t}),e.removeAttribute(FIBR_PROCESSING_FLAG)),changeLogsMapForObserver.set(t?.selectorPath,t),e&&t?.properties&&t?.properties?.actionType==FIBR_MULTI_ELEMENT_SUB_TYPE.DISPLAY_BLOCK_ELE?e.style.setProperty("display","block","important"):e&&t?.properties&&t?.properties?.actionType==FIBR_MULTI_ELEMENT_SUB_TYPE.DISPLAY_NONE_ELE&&e.style.setProperty("display","none","important")}catch(e){logger("FPT Error applying changes to element: "+e?.message)}}function applyChanges(e){if(logger("Fpt pages campaignDetails.experienceId",e,isRequestFromFibrEditor?experienceId:campaignDetails?.experienceId),changesApplying=new Date,logger("FPT Time Taken changesApplying : applyChanges start",new Date-loggerTimer),logger("Fpt fibr-timer: hasfibrtimedout - ",hasFibrTimedOut),hasFibrTimedOut)logger("Fpt fibr-timer: hasfibrtimedout - stopping execution");else if(applyingChanges=!0,!e||0==e?.length||isExperienceInIgnoreList(isRequestFromFibrEditor?experienceId:campaignDetails?.experienceId))logger("tansition empty changes",areChangesGotApplied,new Date-loggerTimer),areChangesGotApplied=!0,transitionFibrBlurEffect();else{let i=null,r=null,n=getDeviceTypeForEditor();logger("Fpt pages applying changes currentDevice...",n);try{logger("Fpt pages applying changes...",JSON.stringify(e?.[0]?.changelogs));var t=e?.[0]?.group,a=(t&&0<t.length&&initializeDataAttributesForGroups(t),e?.[0]?.changelogs);0<a?.length&&initializeDataAttributesForChangelogs(a),(e?.[0]?.changelogs??[]).forEach((e,t)=>{if("all"===e?.applicableOnDevice?.toLowerCase()||e?.applicableOnDevice?.toLowerCase()===n?.toLowerCase())if(logger("Fpt changeLog",e),i=e?.selectorPath,r=t,e?.type===FIBR_MULTI_ELEMENT_CHANGE_TYPE)try{multiElementMap&&e?.selectorPath&&(multiElementMap.set(e?.selectorPath,e),getAllElementsByWildcardXPath(e))}catch(e){logger("FPT Error applying wildcard changes: "+e?.message)}else{t=getElementBySelector(e);logger("Fpt element",t,i),changeLogsMapForObserver.set(e?.selectorPath,e),null==t?(changeLogsMapForElementsNotFound.set(e?.selectorPath,e),errorApplyingExperience=!0,logger(`Fpt XPath Element not found...
|
|
`+JSON.stringify(e)),sendChangelogFailureEvent(i,"Element not found for changelog, ",r,e?.attributes&&e?.attributes?.elementId?e?.attributes?.elementId:null).then(()=>{logger("FPT Could not find changelog changelog!")}).catch(e=>logger("FPT Facing error sending fail event!, "+e))):applyChangesOnElement(t,e)}else logger("Fpt Ignoring changelog based on Device and curreentDevice",e?.applicableOnDevice,n)}),logger("tansition applyChanges 2",areChangesGotApplied=!0,new Date-loggerTimer),transitionFibrBlurEffect(),logger("FPT Successfully done FPT Changes!!!"),logger("FPT time taken",(end=new Date)-start)}catch(e){logger("FPT Reverting FPT Changes due to error!!!",JSON.stringify(e)),errorApplyingExperience=!0;try{isRequestFromFibrEditor||addExperienceInIgnoreList(isRequestFromFibrEditor?experienceId:campaignDetails?.experienceId),sendChangelogFailureEvent(i,e?.message??"",r,changeLog?.attributes&&changeLog?.attributes?.elementId?changeLog?.attributes?.elementId:null).then(()=>{logger("FPT Successfully reverted changelog!",e),pageReloadOnFail()}).catch(e=>logger("FPT Facing error sending fail event!, "+e))}catch(e){logger("FPT Facing error in replacing document with original, "+e)}transitionFibrBlurEffect()}logger("FPT Time Taken changesApplying : applyChanges end",new Date-loggerTimer)}}function pageReloadOnFail(){logger("FPT pageReloadOnFail called"),isRequestFromFibrEditor?logger("FPT pageReloadOnFail called but igonring as request from editor"):logger("FPT pageReloadOnFail called"),transitionFibrBlurEffect()}function getElementByXpath(e){try{return document.evaluate(e,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}catch(e){return logger("Fpt res error",e),null}}function getElementBySelector(e){let t=null;try{if(e?.attributes&&e?.attributes?.elementId){var i=e?.attributes?.elementId;if(t=document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${i}"]`))return logger("FPT element found by data attribute",e?.attributes?.elementId),t}e?.selectorPath&&(t=getElementByXpath(e?.selectorPath))&&e?.attributes&&e?.attributes?.elementId&&(t.setAttribute(FIBR_PROCESSING_FLAG,"true"),t.setAttribute(FIBR_DATA_ATTRIBUTE,e?.attributes?.elementId),t.removeAttribute(FIBR_PROCESSING_FLAG),logger("FPT applied data attribute to element found by xpath"))}catch(e){logger("FPT error getting element by selector",e)}return t}function getElementByFibrId(e){try{return document.querySelector(`[${FIBR_DATA_ATTRIBUTE}="${e}"]`)}catch(e){return logger("FPT error getting element by fibr id",e),null}}function getXpath(e){if(e&&e.tagName){for(var t="";e.parentNode;){if(e.id){t="//"+e.tagName.toLowerCase()+'[@id="'+e.id+'"]'+t;break}for(var i=1,r=e;r.previousElementSibling;)(r=r.previousElementSibling).tagName===e.tagName&&i++;t="/"+e.tagName.toLowerCase()+"["+i+"]"+t,e=e.parentNode}return t}return""}function matchesXPath(e,t){try{return document.evaluate(t,e,null,XPathResult.BOOLEAN_TYPE,null).booleanValue}catch(e){return!1}}function htmlToElements(e){var t=document.createElement("template");return t.innerHTML=e,1==t.content.childNodes.length?t.content.firstChild:t.content.childNodes}function updateText(e,t){t&&(e.textContent=t)}function isPicture(e){return logger("FPT ele.nodeName === IMG","IMG"===e.nodeName,e.parentElement.nodeName),"IMG"===e.nodeName&&"PICTURE"===e.parentElement.nodeName}function isVideoElement(e){return"VIDEO"===e.nodeName}function clearPictureElement(t){for(var e=t?.children?.length,i=[],r=0;r<e;r++)logger("FPT picturetag set selectedElement.current reseting [i]",t.children[r],t?.children[r]?.nodeName),"SOURCE"===t?.children[r]?.nodeName&&i.push(t?.children[r]);try{i.map(e=>t.removeChild(e))}catch(e){logger("FPT picturetag remove child failed, ",e)}logger("FPT picturetag set selectedElement.current reseting last",t.children)}function checkLoadSuccess(e,t){logger("POC FPT Time Taken image loaded",new Date-loggerTimer),e.style.opacity=1,logger("POC FPT checkLoadSuccess",e.src,t)}function updateImage(t,i,e,r,n,a,o,s,l){if(i||l||s||o){if(!i||isPicture(t)||s||(t.setAttribute("src",i),logger("FPT Media changes for non-picture, non-srcset Img - case 1")),s&&!isPicture(t)&&(t.setAttribute("srcset",s.join(", ")),i&&t.setAttribute("src",i),logger("FPT Media changes for non-picture, srcset Img - case 2")),isPicture(t)&&l&&o){for(var g=t.parentElement,c=g?.children,d=o?.sources?.length,p=[],u=0,m=0;m<c?.length;m++)"SOURCE"===c?.[m]?.nodeName&&(u<d?(c[m].setAttribute("srcset",o?.sources?.[u]?.srcset),c[m].setAttribute("type",o?.sources?.[u]?.type),c[m].setAttribute("selected",o?.sources?.[u]?.selected),u++):p=[...p,c[m]]);for(m=0;m<p?.length;m++)g.removeChild(p[m]);t.setAttribute("issrcselected",o?.issrcselected),o?.issrcselected?t.setAttribute("src",o?.src):t.setAttribute("src",""),logger("FPT Media changes for picture, non-srcset Img - case 3",g.children,p)}isPicture(t)&&i&&(t.src=i,isPicture(t)&&clearPictureElement(t?.parentElement),t.getAttribute("srcset")&&(logger("FPT ele srcset",t?.srcset),t.removeAttribute("srcset")),logger("FPT Media changes for picture, non-srcset Img Backward compatibility - case 4")),t.onload=function(e){logger("POC FPT ele onload",e),checkLoadSuccess(t,i)}}e&&(t.alt=e),r&&(t.style.width=r+"px"),n&&(t.style.height=n+"px"),a&&(t.style.objectFit=a)}function updateVideo(t,{videoUrl:i,autoplay:e,muted:r,loop:n,width:a,height:o}){i&&(isVideoElement(t)&&i&&t.setAttribute("src",i),t.onload=function(e){logger("FPT vidoe ele onload",e),checkLoadSuccess(t,i)}),null!=e&&(t.autoplay=e,!1===t?.autoplay)&&!1===e&&(t.controls=!0),null!=r&&(t.muted=r),null!=n&&(t.loop=n),a&&(t.width=a),o&&(t.height=o)}function updateSVG(e,{src:t,width:i,height:r,contains:n}){var a;t&&((a=document.createElement("img")).src=t,i&&(a.style.width=i),r&&(a.style.height=r),n&&(a.style.objectFit=n),e.replaceWith(a),logger("FPT replaced element with img",a))}function hideElement(e){e.style.visibility="hidden"}function deleteElement(e){e.style.display="none"}function addElement(e,t){try{if(e)if(t){logger("FPT parentEle where newEle is to be added",e);var i=document.createElement("div"),r=(i.innerHTML=t.trim(),i.firstChild);if(r){let t=r.getAttribute("data-fibr-id");t?Array.from(e?.children||[]).find(e=>e?.getAttribute("data-fibr-id")===t)?logger("FPT Element with fibr-id already exists, skipping addition"):("prepend"===r.getAttribute("data-fibr-position")?e.prepend(r):e.appendChild(r),logger("FPT New element added successfully with id:",t),logger("FPT New element added successfully with id:",t)):logger("FPT Error: No data-fibr-id found in HTML string")}else logger("FPT Error: Could not parse HTML string")}else logger("FPT Error: Invalid HTML string");else logger("FPT Error: Invalid parent element")}catch(e){logger("FPT Critical error in addElement:",e)}}function replaceElement(e,t){try{if(e&&t)if(document.body.contains(e))try{watchMutationObserverOnBody&&!isRequestFromFibrEditor&&(isFibrApplyingChanges=!0);var i=htmlToElements(t);i?(e.replaceWith(i),logger("FPT Element replaced successfully")):logger("FPT Error: Could not create new element from HTML")}catch(e){logger("FPT Error replacing element:",e)}finally{watchMutationObserverOnBody&&!isRequestFromFibrEditor&&requestAnimationFrame(()=>{isFibrApplyingChanges=!1})}else logger("FPT Error: Target element not found in DOM");else logger("FPT Error: Invalid element or HTML string")}catch(e){logger("FPT Critical error in replaceElement:",e)}}function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function generateFibrId(){return"FIBR_"+"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function getOS(){var e=window.navigator.userAgent,t=window.navigator.platform,i=null;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?i="MacOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?i="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?i="Windows":/Android/.test(e)?i="Android":!i&&/Linux/.test(t)&&(i="Linux"),i}function getDeviceType(){var e=navigator.userAgent.toLowerCase(),t=/iPhone|Android/i.test(navigator.userAgent),e=/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(e);return t?(logger("FPT Mobile"),"mobile"):e?"tablet":"desktop"}function getVisitorIp(){return fetch("https://api.ipify.org?format=json").then(e=>e.json()).then(e=>{logger("Fpt sdk",e.ip),visitorDetails.visitorIp=e.ip,getGeoLocation()}),null}function getLanguages(){return navigator.languages}function getBrowser(){return-1!=(navigator.userAgent.indexOf("Opera")||navigator.userAgent.indexOf("OPR"))?"opera":-1!=navigator.userAgent.indexOf("Edg")?"edge":-1!=navigator.userAgent.indexOf("Chrome")?"chrome":-1!=navigator.userAgent.indexOf("Safari")?"safari":-1!=navigator.userAgent.indexOf("Firefox")?"firefox":-1!=navigator.userAgent.indexOf("MSIE")||1==!!document.documentMode?"ie":null}function handleSession(){let e=getCookie("fpt_ssid");return e||setCookieWithTtl("fpt_ssid",e=generateUUID(),24),e}async function sendChangelogFailureEvent(e,t,i,r=null){e={eventType:"FAILED_EVENT",path:campaignDetails.url??currentUrl,timestamp:Date.now(),clientId:campaignDetails?.clientId??"",experienceId:campaignDetails?.experienceId??experienceId,xPath:""+e,fibrElementId:""+r,elemIndex:""+i,errorMsg:""+t,subType:"Experience_XPath"};logger("FPT firing failed event"),await sendEventAsync(e)}async function sendInfraFailureEvent(e,t,i,r,n){logger("FPT sending infra failed event");e={eventType:"INFRA_FAILED_EVENT_v2",path:currentUrl,timestamp:Date.now(),clientId:campaignDetails?.clientId??"",experienceId:campaignDetails?.experienceId??experienceId,errorMsg:""+e,stackTrace:""+n,sdkVersion:""+sdkVersion,isRequestFromEditor:""+isRequestFromFibrEditor,apiPath:t,apiResponse:r,requestBody:i};logger("FPT firing infra failed event"),await sendEventAsync(e)}function addExperienceInIgnoreList(e){var t=getCookie(expIgnoreListCookieName);let i=[];try{i=t?JSON.parse(t):[]}catch(e){i=[]}logger("FPT addExperienceInIgnoreList ",e),i.push(""+e),t=JSON.stringify(i),setCookieWithTtl(expIgnoreListCookieName,t,1)}function isExperienceInIgnoreList(e){var t=getCookie(expIgnoreListCookieName);let i=[];try{i=t?JSON.parse(t):[]}catch(e){i=[]}return logger("FPT isExperienceInIgnoreList ",e,i.includes(""+e)),i.includes(""+e)}async function getGeoLocation(){await getPagesFromResolverV2(applyChanges)}async function sendEventAsync(t){try{logger("Fpt event send",await(await fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:JSON.stringify({campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,event:t}),headers:{"Content-type":"text/plain"}})).json(),t)}catch(e){logger("FPT sendEvent failed for e",t)}}async function sendEvent(t){try{var e=getCookies();fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:JSON.stringify({campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,event:t,cookies:e}),headers:{"Content-type":"text/plain"}}).then(e=>e.json()).then(e=>logger("Fpt event send",e,t))}catch(e){logger("FPT sendEvent failed for e",t)}}function sendEventWithBeacon(e){try{var t=getCookies(),i={campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,event:e,cookies:t};navigator.sendBeacon(ANALYTICS_API_URL+"/event-handler/event",JSON.stringify(i))}catch(e){logger("FPT sendEventWithBeacon failed for e",e)}}async function sendEventWithFetchKeepAlive(t){try{var e=getCookies(),i={campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,event:t,cookies:e};fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:JSON.stringify(i),headers:{"Content-type":"text/plain"},keepalive:!0}).then(e=>e.json()).then(e=>logger("Fpt event send",e,t)).catch(e=>logger("FPT sendEventWithFetchKeepAlive fetch error",e))}catch(e){logger("FPT sendEventWithFetchKeepAlive failed for e",t,e)}}async function sendCookieEvent(){try{var t=getCookies();fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:JSON.stringify({campaignDetails:{...campaignDetails,clientId:campaignDetails?.clientId??config?.clientId},visitCount:visitCount,sessionDetails:{...sessionDetails,sessionId:sessionDetails?.sessionId??handleSession()},visitorDetails:visitorDetails,event:{eventType:"PAGE_VIEW_EVENT",flag:"COOKIE_EVENT",timestamp:Date.now(),doNotTrack:doNotTrack},cookies:t}),headers:{"Content-type":"text/plain"}}).then(e=>e.json()).then(e=>logger("(sendCookieEvent) FPT event send",e))}catch(t){logger("(sendCookieEvent) FPT sendEvent failed for e",e)}}async function sendAuxillaryEvent(t){var e=getDecodedCookie(auxillaryCookieKey);if(e)try{var i=JSON.parse(e||"{}"),r=getCookies(),n=JSON.stringify({...i||{},event:t,cookies:r});fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:n,headers:{"Content-type":"text/plain"}}).then(e=>e.json()).then(e=>logger("Fpt auxillary event send",e,t))}catch(e){logger("FPT auxillary sendEvent failed for e",t,e)}else logger("FPT auxillary cookie not found")}async function getPagesFromResolver(){logger("FPT getPagesFromResolver called");let e=JSON.stringify({url:getCurrentWindowUrl()||currentUrl,domain:currentDomain,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails});fetch(RESOLVER_API_URL+"/experience/page",{method:"POST",body:e,headers:{"Content-type":"text/plain"}}).then(e=>{if(e.ok)return e.json();throw new Error(`received error response from resolver, responseCode: ${e?.status}, responseError: `+JSON.stringify(e?.error??null))}).then(e=>{try{logger("Fpt sdk 1",e);var t=e?.data;enrichLocationDetails(t?.locationDetails),enrichCampaignDetails(t?.campaignDetails),pages=t?.experiencePages,triggers=pages?.[0]?.triggers??[],logger("FPT pages, triggers",pages,triggers),addApplyChangesHandler(),seedFibrGTMVariableValues()}catch(t){logger("FPT exception occurred while applying changelog!!",t);try{sendInfraFailureEvent("SDK error applying experience changelogs: "+t,null,null,JSON.stringify(e),t?.stack??null).then(()=>{logger("FPT infra error!!",t),pageReloadOnFail()})}catch(e){logger("FPT getPagesFromResolver FPT infra error!!, "+t),pageReloadOnFail()}}}).catch(t=>{logger("FPT exception occurred",t);try{logger("FPT getPagesFromResolver FPT infra error!, "+t),sendInfraFailureEvent(t,RESOLVER_API_URL+"/experience/page",e,null,t?.stack??null).then(()=>{logger('FPT infra error", '+t),pageReloadOnFail()})}catch(e){logger("FPT getPagesFromResolver FPT infra error!, "+t),pageReloadOnFail()}})}function enrichLocationDetails(e){config?.privacySettings&&!0===config?.privacySettings?.isLocationDetailsRestricted||(visitorDetails.locationDetails.country=e?.country,visitorDetails.locationDetails.city=e?.city,visitorDetails.locationDetails.province=e?.province,visitorDetails.locationDetails.timezone=e?.timezone,visitorDetails.locationDetails.countryCode=e?.countryCode)}function areCampaignDetailsValid(){return!!(campaignDetails.workflowId&&campaignDetails.campaignId&&campaignDetails.experienceId&&campaignDetails.ruleSetId&&campaignDetails.clientId)}function enrichCampaignDetails(e){campaignDetails.workflowId=e?.workflowId,campaignDetails.campaignId=e?.campaignId,campaignDetails.experienceId=e?.experienceId,campaignDetails.ruleSetId=e?.ruleSetId,campaignDetails.clientId=e?.clientId,campaignDetails.url=e?.url,campaignDetails.campaignName=e?.campaignName,campaignDetails.campaignGroupId=e?.campaignGroupId,campaignDetails.campaignGroupName=e?.campaignGroupName,campaignDetails.campaignGroupType=e?.campaignGroupType,campaignDetails.experienceName=e?.experienceName,isHoldout=e?.holdout??!1,noRuleSetMatch=e?.noRuleMatch??!1,doNotTrack=e?.doNotTrack??!1}async function getWidgetApi(e){if(e)try{var t=await fetch(API_URL+"/client/widgets/changelog/cached",{method:"POST",body:JSON.stringify({experienceId:e}),headers:{"Content-type":"application/json"}}),i=await t.json();t.ok&&applyWidgetChanges(i?.data)}catch(e){return logger("FPT getWidgetApi error",e),null}}async function callResolverPagesAPI(t,i=0){try{if(null==t||""===t)throw new Error("Request Body for resolver cannot be empty!");var e,r=await fetch(RESOLVER_API_URL+"/experience/page",{method:"POST",body:t,headers:{"Content-type":"text/plain"}});if(r.ok)return e=await r.json(),shouldApplyWidgets()&&getWidgetApi(e?.data?.campaignDetails?.experienceId),e;await sendInfraFailureEvent(`Received error response from resolver, responseCode: ${r?.status}, responseError: `+JSON.stringify(r?.error??null),RESOLVER_API_URL+"/experience/page",t,r.toString(),null),logger('FPT infra error", '+r),pageReloadOnFail()}catch(e){if(0===(i=i||0))return callResolverPagesAPI(t,1);try{var n=`FPT exception occurred - err: ${e} - errorMsg: `+e?.message;logger(n),await sendInfraFailureEvent(n,RESOLVER_API_URL+"/experience/page",t,null,e?.stack??null),pageReloadOnFail()}catch(e){logger("FPT failed to send infra failed event!, "+e),pageReloadOnFail()}}}function removeDataLayer(){try{localStorage.removeItem("__fibr_data_layer")}catch(e){logger("(removeDataLayer) FPT removeDataLayer error",e)}}async function getPagesFromResolverV2(){logger("getPagesFromResolverV2 called");var t=await callResolverPagesAPI(JSON.stringify({url:getCurrentWindowUrl()||currentUrl,domain:currentDomain,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,clientId:config?.clientId}),0);try{logger("Fpt sdk v2",t);var e=t?.data;if(enrichLocationDetails(e?.locationDetails),enrichCampaignDetails(e?.campaignDetails),logger("(getPagesFromResolverV2) FPT campaignDetails?.experienceId",campaignDetails?.experienceId),logger("FPT pages, triggers 1 ",pages=e?.experiencePages,triggers),triggers=pages?.[0]?.triggers??[],logger("FPT pages, triggers",pages,triggers),addApplyChangesHandler(),seedFibrGTMVariableValuesV2(),config?.isFibrInlineGATrackingEnabled){logger("(GASCRIPT) Google Analytics Enabled...");try{if(logger("(GASCRIPT) Attempting to trigger Google Analytics tag..."),!sessionDetails||!visitorDetails||!campaignDetails)throw new Error("FPT GTM Seeding required details are missing");var i={event:"fibr_track_event",fibr_client_id:campaignDetails?.clientId,fibr_event:"fibr_track_event",fibr_session_id:sessionDetails?.sessionId,fibr_user_id:visitorDetails?.visitorId,fibr_workflow_id:campaignDetails?.workflowId,fibr_variation_id:campaignDetails?.experienceId,fibr_variation_name:campaignDetails?.experienceName,fibr_campaign_id:campaignDetails?.campaignId,fibr_campaign_name:campaignDetails?.campaignName,fibr_campaign_group_type:campaignDetails?.campaignGroupType,fibr_campaign_group_name:campaignDetails?.campaignGroupName,fibr_campaign_group_id:campaignDetails?.campaignGroupId,fibr_is_qualifed:"boolean"==typeof isHoldout&&!isHoldout},r=config?.measurementId;r?(window.gtag("event","fibr_impression_event",{...i,send_to:r}),logger("(GASCRIPT) GA4 event sent to measurement ID "+r)):(window.gtag("event","fibr_impression_event",i),logger("(GASCRIPT) GA4 event sent to default property")),logger("(GASCRIPT) Attempt successful to trigger Google Analytics tag...")}catch(e){logger("(GASCRIPT) Error Occurred in Google Analytics: "+e)}finally{logger("(GASCRIPT) Ending Google Analytics")}}else logger("(GASCRIPT) Google Analytics not enabled...")}catch(e){logger("FPT exception occurred while applying changelog!!",e);try{await sendInfraFailureEvent("SDK error applying experience changelogs: "+e,null,null,JSON.stringify(t),e?.stack??null),logger("FPT infra error!!",e),pageReloadOnFail()}catch(e){logger("FPT getPagesFromResolverV2 FPT infra error!!, "+e),pageReloadOnFail()}}}function determineRequestSourceIsEditor(){var e=new URLSearchParams(urlObject.search);return logger("Fpt experienceId",experienceId=e.get("expId")),null!=experienceId}function determineRequestSourceIsEditorPreview(){try{var e=new URLSearchParams(urlObject.search),t=(experienceId=e.get("expId"),e.get("editorMode"));return logger("Fpt experienceId",experienceId),"preview"===t&&null!=experienceId}catch(e){return logger("FPT determineRequestSourceIsEditorPreview error",e),!1}}function shouldApplyWidgets(){try{var e=determineRequestSourceIsEditor(),t=determineRequestSourceIsEditorPreview(),i=window.self!==window.top;return e?"true"===new URLSearchParams(urlObject.search).get("isWidgetPreview")?(logger("FPT Widget preview mode detected, skipping API calls"),!1):t&&i:!0}catch(e){return logger("FPT shouldApplyWidgets error",e),!0}}function determineIfReloadOnFailedEvent(){return!!currentUrl.includes("load")}function getCurrentUrl(){let e=localStorage.getItem("__fibr_current_url");return e||(e=getCurrentWindowUrl(),localStorage.setItem("__fibr_current_url",e)),e}function resetAndGetCurrentUrl(){var e=getCurrentWindowUrl();return localStorage.setItem("__fibr_current_url",e),e}function getCurrentWindowUrl(){return window.location.href}async function getExperienceData(){var e=API_URL+"/client/sdk/changelogs/"+experienceId;fetch(e,{method:"GET",headers:{"Content-type":"text/plain"}}).then(e=>e.json()).then(e=>{if(logger("Fpt from workflow",e),shouldApplyWidgets()&&getWidgetApi(experienceId),null!=e.data?.pages)pages=e.data?.pages,addApplyChangesHandler();else try{sendInfraFailureEvent(JSON.stringify(e),API_URL+"/client/sdk/changelogs/"+experienceId,null,JSON.stringify(e),null).then(()=>{logger("FPT infra error",e),pageReloadOnFail()})}catch(e){logger("FPT getExperienceData FPT infra error!, "+e),pageReloadOnFail()}}).catch(e=>{try{logger("FPT getExperienceData FPT infra error!, "+e),sendInfraFailureEvent(e,API_URL+"/client/sdk/changelogs/"+experienceId,null,null,e?.stack??null).then(()=>{pageReloadOnFail()})}catch(e){logger("FPT getExperienceData FPT infra error!, "+ex1),pageReloadOnFail()}})}function invokeApplyChanges(){if(applyChanges(pages),logger("tansition invokeApplyChanges",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect(),logger("Fibr before events ",isRequestFromFibrEditor,doNotTrack),logger("Fibr before events doNotTrack",doNotTrack),!isRequestFromFibrEditor){logger("Fibr after events doNotTrack",doNotTrack);var e={eventType:"PAGE_VIEW_EVENT",path:campaignDetails?.url,timestamp:Date.now(),doNotTrack:doNotTrack};logger("FPT event e1"),sendEvent(e);try{setFibrAuxillaryCookieData(),logger("FPT auxillary cookie set")}catch(e){logger("FPT failed to set auxillary cookie err:"+e)}(triggers??[]).map(t=>{let r=null;t?.attributes&&t?.attributes?.elementId?r=getElementBySelector(t):t?.selectorPath&&(r=getElementByXpath(t?.selectorPath)),r&&t&&"successMetrics"===t?.type&&0<t?.successMetrics?.length&&(t?.successMetrics??[]).forEach(e=>{logger("FPT ele with event listener",r,e);var i={eventType:"SUCCESS_EVENT",path:campaignDetails?.url,timestamp:Date.now(),subType:t?.type??void 0,name:e?.name??void 0,triggerId:t?._id,successMetricId:e?.id,doNotTrack:doNotTrack};r.addEventListener(e?.action,function(e){if(e.timestamp=Date.now(),sendEventWithBeacon({...i,eventDispatchType:"beacon"}),sendEventWithFetchKeepAlive({...i,eventDispatchType:"fetchWithKeepAlive"}),config&&"678fd37effb4d5a6b22f9c0c"===config?.clientId&&"A"===e.target.tagName&&"_blank"!==e.target.target){e.preventDefault();let t=e.target.href;e=getCookies(),e={campaignDetails:campaignDetails,visitCount:visitCount,sessionDetails:sessionDetails,visitorDetails:visitorDetails,event:{...i,eventDispatchType:"navigationFetchRequest",navigationTarget:t,timestamp:Date.now()},cookies:e};fetch(ANALYTICS_API_URL+"/event-handler/event",{method:"POST",body:JSON.stringify(e),headers:{"Content-type":"text/plain"},keepalive:!0}).then(e=>{logger("FPT Navigation analytics sent successfully, navigating to:",t),window.location.href=t}).catch(e=>{logger("FPT Navigation analytics failed, navigating anyway:",e),window.location.href=t})}})})})}}function addFibrTimeout(){logger("Fpt fibr-timer: timer start"),setTimeout(()=>{logger("Fpt fibr-timer: fibr timedout"),applyingChanges||isRequestFromFibrEditor||(logger("Fpt fibr-timer: hasfibrtimedout set true"),hasFibrTimedOut=!0)},2e3)}function addApplyChangesHandler(){if("loading"==document.readyState||"interactive"==document.readyState){logger("Fpt document.readyState 1",document.readyState);var e=function(){logger("Fpt Web Page Completely Loaded"),addFibrTimeout();try{invokeApplyChanges(),initBodyObserver()}catch(e){transitionFibrBlurEffect(),logger("FPT Error in invokeApplyChanges ",e)}logger("tansition addApplyChangesHandler",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect()};window.addEventListener("DOMContentLoaded",e),window.addEventListener("load",e)}else{logger("Fpt document.readyState 2",document.readyState),addFibrTimeout();try{invokeApplyChanges()}catch(e){transitionFibrBlurEffect(),logger("FPT Error in invokeApplyChanges ",e)}logger("tansition not interactive applyChangesHandler",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect()}}function reinitializeVariables(){applyingChanges=!1,hasHiddenElementsForAsync=!1,hasFibrTimedOut=!1,isFibrApplyingChanges=!1,areChangesGotApplied=!1,isBodyMutationObserverActivated=!1,ignoreInvisbleElements=[],attributeElementMap=new Map,changeLogsMapForObserver=new Map,changeLogsMapForElementsNotFound=new Map,currentUrl=getCurrentWindowUrl(),errorApplyingExperience=!1,triggers=pages=null,loggerTimer=new Date}function performReinitialization(){try{fibr_initialHideFunction(),init(),initBodyObserver(),sendEvent({eventName:"fibr_sdk_reinitialized",eventType:"sdk",source:"browser_back_navigation",timestamp:Date.now(),url:getCurrentWindowUrl()})}catch(e){handleReinitializationError(e)}}function handleReinitializationError(e){logger("Error during SDK reinitialization:",e),sendInfraFailureEvent("SDK Reinitialization Error","browser_navigation",null,null,e?.stack),transitionFibrBlurEffect(!0)}document.addEventListener("load",function(){logger("tansition load",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect()}),document.addEventListener("readystatechange",function(){logger("readystatechange fired",document.readyState),"complete"===document.readyState&&(logger("tansition readystatechange complete",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect())}),setTimeout(()=>{logger("tansition endgame",areChangesGotApplied,new Date-loggerTimer),transitionFibrBlurEffect(!0)},5e3);let popstateTimeout=null;window.addEventListener("popstate",function(e){config&&config?.hasOwnProperty("reinitializeSdk")&&null!=config?.reinitializeSdk&&!0===config?.reinitializeSdk&&(console.log("Popstate event detected",e),popstateTimeout&&clearTimeout(popstateTimeout),popstateTimeout=setTimeout(()=>{try{var e,t,i=localStorage.getItem("__fibr_current_url"),r=getCurrentWindowUrl();i&&r?(e=buildCleanUrl(i),t=buildCleanUrl(r),e&&t&&e===t&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{performReinitialization()}):performReinitialization())):logger("Invalid URLs during navigation")}catch(e){logger("Error handling popstate event:",e),handleReinitializationError(e)}},50))});class WidgetValidator{static isValidEmail(e){return!!e&&"string"==typeof e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}static isValidPhoneNumber(e){return!!e&&"string"==typeof e&&(e=e.replace(/\D/g,""),/^\d+$/.test(e))}static containsMaliciousCode(t){return"string"==typeof t&&[/<[^>]*script/i,/<[^>]*on\w+\s*=/i,/<[^>]*javascript:/i,/<[^>]*data:/i,/<[^>]*vbscript:/i,/\(\s*['"]*\s*[+,]\s*['"]*\s*\)/,/\[['"]*\s*[+,]\s*['"]*\]/,/\\x[0-9a-f]{2}/i,/\\u[0-9a-f]{4}/i,/&#x?[0-9a-f]+;?/i,/base64/i,/expression\s*\(.*\)/i,/url\s*\(.*\)/i,/<iframe/i,/<object/i,/<embed/i,/eval\s*\(/i,/setTimeout\s*\(/i,/setInterval\s*\(/i].some(e=>e.test(t))}static validateApiCallBody(e){try{if(!e||"object"!=typeof e)return!1;if(0===Object.keys(e).length)return!1;for(var t in e){var i=e[t];if(null!=i&&("string"==typeof i&&this.containsMaliciousCode(i)))return logger("XSS detected in field:",t,i),!1}return e.email&&!this.isValidEmail(e.email)?!1:!(e.name&&("string"!=typeof e.name||0===e.name.trim().length)||e.phone&&!this.isValidPhoneNumber(e.phone))}catch(e){return logger("Validation error:",e),!1}}}class WidgetEventTracker{static setupSuccessMetricTracking(e,r){try{if(r?.identifier&&r?.successMetrics?.length){var t=document.getElementById("fibr-widget-"+e);if(t){let i=t.shadowRoot?.getElementById(r.identifier);i?r.successMetrics.forEach(e=>{if(e?.action&&e?.name){let t={eventType:"SUCCESS_EVENT",path:campaignDetails?.url,timestamp:Date.now(),subType:r?.type,name:e.name,triggerId:r._id,successMetricId:e.id,doNotTrack:doNotTrack};i.addEventListener("click",e=>{e.timestamp=Date.now(),sendEventWithBeacon({...t,eventDispatchType:"beacon"}),sendEventWithFetchKeepAlive({...t,eventDispatchType:"fetchWithKeepAlive"})}),logger("Success metric tracking setup:",e.name,e.action)}}):logger("Target element not found for success metric:",r.identifier)}else logger("Widget not found for success metric tracking:",e)}}catch(e){logger("Error setting up success metric tracking:",e)}}static async sendWidgetEventWithFetchKeepAlive(e,t,i){try{var r={campaignDetails:campaignDetails,sessionDetails:sessionDetails,visitorDetails:visitorDetails,widgetId:e,type:t,templateId:i};logger("Widget event sent successfully:",await(await fetch(ANALYTICS_API_URL+"/event-handler/fibr-event",{method:"POST",body:JSON.stringify(r),keepalive:!0})).json())}catch(e){logger("Widget fetch event failed:",e)}}static fireWidgetOpenEvent(e){try{document.getElementById("fibr-widget-"+e)?this.sendWidgetEventWithFetchKeepAlive(e,"FIBR_WIDGET_OPEN"):logger("Widget not found for open event:",e)}catch(e){logger("Error firing widget open event:",e)}}static setupWidgetEventTracking(e,t,i){try{var r,n;t?.type&&t?.identifier&&"FIBR_WIDGET_OPEN"!==t?.type&&((r=document.getElementById("fibr-widget-"+e))?(n=r.shadowRoot?.getElementById(t.identifier))?n.addEventListener("click",()=>this.sendWidgetEventWithFetchKeepAlive(e,t?.type,i)):logger("Target element not found for success metric:",t.identifier):logger("Widget not found for event tracking:",e))}catch(e){logger("Error setting up success metric tracking:",e)}}}class WidgetActionHandler{static handleDownloadAction(e){try{var t;e&&"string"==typeof e?((t=document.createElement("a")).href=e,t.download=e.split("/").pop()||"download",t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t),logger("Download initiated:",e)):logger("Invalid download URL provided")}catch(e){logger("Download action failed:",e)}}static handleRedirectAction(t){try{if(t&&"string"==typeof t)try{new URL(t),window.open(t,"_blank"),logger("Redirect initiated:",t)}catch(e){logger("Invalid URL format for redirect:",t,e)}else logger("Invalid redirect URL provided")}catch(e){logger("Redirect action failed:",e)}}static async submitFormAction(e,t,i,r,n,a){try{if(WidgetValidator.validateApiCallBody(e)){var o={data:e,formId:r,externalId:n,metadata:{campaignId:campaignDetails?.campaignId,clientId:campaignDetails?.clientId,experimentId:campaignDetails?.experimentId,templateId:a},campaignDetails:campaignDetails,sessionDetails:sessionDetails,visitorDetails:visitorDetails,submittedAt:Date.now(),isTest:!1},s=await fetch(API_URL+"/client/forms/submit",{method:"POST",body:JSON.stringify(o),headers:{"Content-type":"application/json"}});if(!s.ok)throw new Error("HTTP error! status: "+s.status);await this.handleSuccessfulSubmission(t,i),logger("Form submitted successfully")}else logger("API call body validation failed")}catch(e){logger("Form submission failed:",e)}}static async handleSuccessfulSubmission(e,t){try{var i,r;"NONE"===t?.subAction?.type?WidgetRenderer.hideAndRemoveWidget(e):(t?.hideIdentifier&&(i=this.getElementInWidget(e,t.hideIdentifier))&&(i.style.display="none"),t?.showIdentifier&&(r=this.getElementInWidget(e,t.showIdentifier))&&(r.style.display="block"),"SHOW_CONTENT"!==t?.subAction?.type&&WidgetRenderer.hideAndRemoveWidget(e),setTimeout(()=>{switch(t?.subAction?.type){case"REDIRECT":this.handleRedirectAction(t?.subAction?.value);break;case"DOWNLOAD":this.handleDownloadAction(t?.subAction?.value)}},300))}catch(e){logger("Error handling successful submission:",e)}}static collectFormData(r,e){try{if(!e?.body?.length)return logger("No form body configuration provided"),null;let i={};return e.body.forEach(e=>{var t=this.getElementInWidget(r,e?.identifier);t?"INPUT"===e?.type&&t.value?.trim()&&(i[e.key]=t.value.trim()):logger("Form element not found:",e?.identifier)}),0<Object.keys(i).length?i:null}catch(e){return logger("Error collecting form data:",e),null}}static setupSubmitAction(t,i,r,n,a){try{var e;i?.identifier?(e=this.getElementInWidget(t,i.identifier))?(e.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();e=this.collectFormData(t,i);e&&WidgetValidator.validateApiCallBody(e)?this.submitFormAction(e,t,i,r,n,a):logger("Form validation failed or no data collected")}),logger("Submit action handler attached")):logger("Submit button not found:",i.identifier):logger("No submit button identifier provided")}catch(e){logger("Error setting up submit action:",e)}}static setupCloseAction(t,e){try{var i;e?.identifier?(i=this.getElementInWidget(t,e.identifier))?(i.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),WidgetRenderer.hideAndRemoveWidget(t)}),logger("Close action handler attached")):logger("Close button not found:",e.identifier):logger("No close button identifier provided")}catch(e){logger("Error setting up close action:",e)}}static getElementInWidget(e,t){try{return e&&t?e.shadowRoot?.getElementById(t):null}catch(e){return logger("Error finding element in widget:",e),null}}}class WidgetTriggerHandler{constructor(){}setupScrollPercentTrigger(i,r,n){if(!i||!r)return;let a=!1,o=!1,e=()=>{a?window.removeEventListener("scroll",s):o||(o=!0,requestAnimationFrame(()=>{var e=window.scrollY,t=document.documentElement.scrollHeight-window.innerHeight;o=(t<=0||r<=e/t*100&&(a=!0,window.removeEventListener("scroll",s),WidgetRenderer.showWidget(i,n,"scrollPercent")),!1)}))},s=()=>{a||e()};window.addEventListener("scroll",s,{passive:!0}),e(),logger("Scroll trigger setup:",r+"%")}setupInactivityTrigger(i,r,n){if(i&&r){let e;let t=()=>{"block"!==i.style.display&&(clearTimeout(e),e=setTimeout(()=>{WidgetRenderer.showWidget(i,n,"inactivity")},1e3*r))};["mousedown","mousemove","keypress","scroll","touchstart","click"].forEach(e=>{document.addEventListener(e,t,{passive:!0})}),t(),logger("Inactivity trigger setup:",r+"s")}}setupDelayTrigger(e,t,i){e&&t&&(setTimeout(()=>{WidgetRenderer.showWidget(e,i,"delay")},1e3*t),logger("Delay trigger setup:",t+"s"))}setupExitIntentTrigger(r,n){if(r){let e=!1,t=!1,i=()=>{e||(e=!0,WidgetRenderer.showWidget(r,n,"exitIntent"),logger("Exit intent triggered"))};document.addEventListener("mousemove",e=>{(t=100<e.clientY?!0:t)&&e.clientY<20&&i()},{passive:!0}),document.addEventListener("mouseout",e=>{!e.relatedTarget&&e.clientY<=0&&i()}),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&i()}),logger("Exit intent trigger setup")}}setupClickElementTrigger(e,t,i){e&&t&&(t=this.getElementInWidget(e,t))&&(t.addEventListener("click",()=>{WidgetRenderer.showWidget(e,i,"clickElement")}),logger("Click element trigger setup"))}applyTrigger(e,t,i){try{if(e&&t&&i){var{type:r,triggerValues:n}=t;switch(r){case"ON_LANDING":WidgetRenderer.showWidget(e,i,"onLanding");break;case"SCROLL_PERCENT":this.setupScrollPercentTrigger(e,n?.scrollPercent,i);break;case"SECONDS_OF_INACTIVITY":this.setupInactivityTrigger(e,n?.seconds,i);break;case"AFTER_X_SECONDS":this.setupDelayTrigger(e,n?.seconds,i);break;case"EXIT_INTENT":this.setupExitIntentTrigger(e,i);break;case"CLICK_ELEMENT":this.setupClickElementTrigger(e,n?.element,i);break;default:logger("Unknown trigger type:",r)}}else logger("Invalid trigger parameters")}catch(e){logger("Error applying trigger:",e)}}}class WidgetRenderer{static createWidget(e,t,i,r=!1){try{var n,a;return e&&t?((n=document.createElement("div")).id="fibr-widget-"+e,n.className=r?"fibr-modal-container":"fibr-widget",a=n.attachShadow({mode:"open"}),r?this.createModalWithBlurredBackground(a,t,i):this.createPositionedWidget(a,t,i),n.style.display="none",logger("Widget created with Shadow DOM:",e),n):(logger("Invalid widget parameters for creation"),null)}catch(e){return logger("Error creating widget:",e),null}}static createModalWithBlurredBackground(e,t,i){var r=document.createElement("div"),n=(r.style.cssText=`
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
z-index: 2147483647;
|
|
`,document.createElement("div")),t=(n.innerHTML=t,n.querySelector("#inner-wx-popup-container")),n=this.getPositionStyles(i);t.style.cssText=`
|
|
position: fixed;
|
|
z-index: 2147483648;
|
|
${n}
|
|
`,e.appendChild(r),e.appendChild(t)}static createPositionedWidget(e,t,i){var r=document.createElement("div"),t=(r.innerHTML=t,r.firstElementChild),r=this.getPositionStyles(i);t.style.cssText=`
|
|
position: fixed;
|
|
z-index: 2147483648;
|
|
${r}
|
|
`,e.appendChild(t)}static getPositionStyles(e){if(!e)return this.getCenterPosition();switch(e.toLowerCase()){case"center":return this.getCenterPosition();case"top_left":return"top: 20px; left: 20px;";case"top_right":return"top: 20px; right: 20px;";case"bottom_left":return"bottom: 20px; left: 20px;";case"bottom_right":return"bottom: 20px; right: 20px;";default:return this.getCenterPosition()}}static getCenterPosition(){return`
|
|
inset: 0;
|
|
margin: auto;
|
|
width: fit-content;
|
|
height: fit-content;
|
|
max-width: 90vw;
|
|
max-height: 90vh;
|
|
`}static showWidget(e,t,i){try{e?triggeredWidgetsInSession.has(t)?logger("Widget already triggered:",t):(e.style.display="block",e.style.opacity="0",e.style.transition="opacity 0.3s ease-in",console.log("widgetContainer in showWidget",i),requestAnimationFrame(()=>{WidgetEventTracker.fireWidgetOpenEvent(t),e.style.opacity="1"}),void 0!==triggeredWidgetsInSession&&triggeredWidgetsInSession.add(t),logger("Widget shown:",t)):logger("Widget container not provided for showing")}catch(e){logger("Error showing widget:",e)}}static hideAndRemoveWidget(t){try{t?(t.style.opacity="0",t.style.transition="opacity 0.3s ease-out",setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},300),logger("Widget hidden and removed")):logger("Widget container not provided for hiding")}catch(e){logger("Error hiding widget:",e),t.parentNode&&t.parentNode.removeChild(t)}}}class WidgetManager{constructor(){this.triggerHandler=new WidgetTriggerHandler}async getWidgetHtml(e){if(!e)return logger("No HTML provided for widget"),null;try{return await(await fetch(e)).text()}catch(e){logger("Fetch error:",e)}}async applyWidgetChanges(t){try{var e,i,r,n,a,o,s,l,g,c,d,p,u,m;t&&t.widgetId?({id:e,html:i,widgetTrigger:r,widgetEvents:n,isPublished:a,isActionTaken:o,isBlur:s,position:l,successTriggers:g,actions:c,formId:d,templateId:p}=t,o||!a||!shouldApplyWidgets()||triggeredWidgetsInSession.has(e)?logger("Widget already processed or triggered:",e):i&&(u=await this.getWidgetHtml(i))?(this.removeExistingWidget(e),(m=WidgetRenderer.createWidget(e,u,l,s))?(document.body.appendChild(m),this.applyWidgetTriggers(m,r,e),this.setupWidgetEvents(e,n,g,p),this.setupWidgetActions(m,c,d,e,p),logger("Widget changes applied successfully:",e)):logger("Failed to create widget container:",e)):logger("No HTML provided for widget:",e)):logger("Invalid widget configuration provided")}catch(e){logger("Error applying widget changes:",e),this.removeExistingWidget(t?.widgetId)}}removeExistingWidget(e){try{var t=document.getElementById("fibr-widget-"+e);t&&(WidgetRenderer.hideAndRemoveWidget(t),logger("Existing widget removed:",e))}catch(e){logger("Error removing existing widget:",e)}}applyWidgetTriggers(t,e,i){try{e?.length?e.forEach(e=>{e&&!triggeredWidgets.has(e.type)&&(this.triggerHandler.applyTrigger(t,e,i),triggeredWidgets.add(e.type))}):logger("No triggers configured for widget:",i)}catch(e){logger("Error applying widget triggers:",e)}}setupWidgetEvents(t,e,i,r){try{e?.forEach(e=>{e&&WidgetEventTracker.setupWidgetEventTracking(t,e,r)}),i?.forEach(e=>{e&&WidgetEventTracker.setupSuccessMetricTracking(t,e)})}catch(e){logger("Error setting up widget events:",e)}}setupWidgetActions(t,e,i,r,n){try{e?.length&&e.forEach(e=>{if(e)switch(e.type){case"SUBMIT":WidgetActionHandler.setupSubmitAction(t,e,i,r,n);break;case"CLOSE":WidgetActionHandler.setupCloseAction(t,e);break;default:logger("Unknown action type:",e.type)}})}catch(e){logger("Error setting up widget actions:",e)}}processWidgets(e){try{if(void 0!==hasFibrTimedOut&&hasFibrTimedOut)logger("Fibr has timed out, skipping widget processing");else if(e?.length){let i=getDeviceTypeForEditor();e.forEach((e,t)=>{try{e&&0<Object.keys(e).length&&(e.applicableOnDevice===i||"all"===e.applicableOnDevice)?this.applyWidgetChanges(e):logger("Widget skipped due to device mismatch:",{widgetDevice:e?.applicableOnDevice,currentDevice:i,index:t})}catch(e){logger("Error processing individual widget:",e,t)}})}else logger("No widgets provided for processing"),areWidgetChangesApplied=!0}catch(e){logger("Error processing widgets:",e)}finally{areWidgetChangesApplied=!0}}}function applyWidgetChanges(e){try{(globalWidgetManager=globalWidgetManager||new WidgetManager).processWidgets(e)}catch(e){logger("Error in legacy applyWidgetChanges function:",e)}} |