@temple-wallet/extension-ads 9.1.1-dev.1589.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,20 +3,1651 @@
3
3
  var semver = require('semver');
4
4
  var lodash = require('lodash');
5
5
  var nanoid = require('nanoid');
6
- var mt = require('webextension-polyfill');
6
+ var browser = require('webextension-polyfill');
7
7
  var cryptoJs = require('crypto-js');
8
- var It = require('axios');
8
+ var axios = require('axios');
9
9
 
10
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
 
12
- var mt__default = /*#__PURE__*/_interopDefault(mt);
13
- var It__default = /*#__PURE__*/_interopDefault(It);
12
+ var browser__default = /*#__PURE__*/_interopDefault(browser);
13
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
14
14
 
15
- var je=Object.defineProperty,Je=Object.defineProperties;var Ze=Object.getOwnPropertyDescriptors;var ie=Object.getOwnPropertySymbols;var _e=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?je(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,w=(e,t)=>{for(var r in t||(t={}))_e.call(t,r)&&xe(e,r,t[r]);if(ie)for(var r of ie(t))be.call(t,r)&&xe(e,r,t[r]);return e},C=(e,t)=>Je(e,Ze(t));var b=(e,t)=>{var r={};for(var s in e)_e.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&ie)for(var s of ie(e))t.indexOf(s)<0&&be.call(e,s)&&(r[s]=e[s]);return r};var v=(e,t,r)=>new Promise((s,o)=>{var a=l=>{try{i(r.next(l));}catch(d){o(d);}},n=l=>{try{i(r.throw(l));}catch(d){o(d);}},i=l=>l.done?s(l.value):Promise.resolve(l.value).then(a,n);i((r=r.apply(e,t)).next());});process&&process.env&&process.env.NODE_ENV==="development";navigator.userAgent.includes("Macintosh");var Le=e=>!!e,et=300,B=(e=et)=>new Promise(t=>setTimeout(t,e));var A=class{};A.IS_MISES_BROWSER=!1,A.ADS_TW_WINDOW_URL="",A.TKEY_INPAGE_AD_URL="",A.SMALL_TKEY_INPAGE_AD_URL="",A.SWAP_TKEY_URL="",A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",A.personaIframePath="",A.getAdsStackIframeURL=()=>"",A.buildNativeAdsMeta=()=>[],A.pickNextAdMetadata=()=>{},A.bannerAdsMeta=[];var tt=e=>{let{adsTwWindowUrl:t,tkeyInpageAdUrl:r,smallTkeyInpageAdUrl:s,swapTkeyUrl:o,externalAdsActivityMessageType:a,personaIframePath:n,getAdsStackIframeURL:i,buildNativeAdsMeta:l,bannerAdsMeta:d,extVersion:m,templePassphrase:h,isMisesBrowser:c,pickNextAdMetadata:u}=e;s&&(A.SMALL_TKEY_INPAGE_AD_URL=s),A.ADS_TW_WINDOW_URL=t,A.TKEY_INPAGE_AD_URL=r,A.SWAP_TKEY_URL=o,A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=a,A.personaIframePath=n,A.getAdsStackIframeURL=i,A.buildNativeAdsMeta=l,A.pickNextAdMetadata=u,A.bannerAdsMeta=d,A.EXTENSION_VERSION=m,A.TEMPLE_PASSPHRASE=h,A.IS_MISES_BROWSER=c;};var G="twa",K="twa-native",oe="twa-hidden",$="twa-sibling-replacement";var ae="adRenderStart",le="resize",te="ready",re="error",de="accelerometer; gyroscope",x="crypto",me="background";var q=/[\d.]+(px)?$/,X=`[${G}]`,Ce=`[${G}]:not([${K}])`,He=`[${K}]`,Ae=(e,t)=>{let r=parseInt(e,10);return isNaN(r)||!q.test(e)?t:r},U=(e,t,r)=>{e.style[t]=`${Math.max(Ae(e.style[t],0),r)}px`;},Q=e=>e.reduce((t,r)=>t+Ae(r,0),0),j=e=>!!e.closest(X),ce=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute($))},se=e=>{let t=getComputedStyle(e),{x:r,right:s,width:o,height:a}=e.getBoundingClientRect(),n={width:o,height:a},i=["width","height"];for(let l of i){let d=t[l],m=e.getAttribute(l),h=Math.max(...[d,m].map(c=>Ae(c!=null?c:"",-1)));h!==-1&&(n[l]=h),l==="width"&&r<0?n.width+=r:l==="width"&&s>window.innerWidth&&(n.width=window.innerWidth-r);}return n},H=(e,t,r=document)=>e?t?[...r.querySelectorAll(e)]:[r.querySelector(e)].filter(s=>!!s):[],O=(e,t)=>{let r=e;for(let s=0;s<t;s++){let o=r.parentElement;if(!o)return null;r=o;}return r},Ne=(e,t,r,s,o)=>{if(e<2&&t<2)return [];if(s)return A.buildNativeAdsMeta(e,t);let a=r==="permanent"||r==="slot-replacement"?A.bannerAdsMeta.filter(({source:l})=>l.shouldNotUseStrictContainerLimits):[],n=Math.max(e,...a.map(({dimensions:l})=>l.width)),i=Math.max(t,...a.map(({dimensions:l})=>l.height));return A.bannerAdsMeta.reduce((l,{dimensions:d,source:m},h)=>{let{shouldNotUseStrictContainerLimits:c=!1,categories:u=[x]}=m;if(u.every(S=>!o.includes(S)))return l;let{minContainerWidth:p,minContainerHeight:g,width:y,maxContainerWidth:R,maxContainerHeight:P}=d,E=!1;switch(r){case"permanent":E=c||n>=y&&(i>=g||i<2);break;case"slot-replacement":E=c||n>=p&&(i>=g||i<2);break;default:E=e>=p&&t>=g&&e<=R&&t<=P;}return E&&l.push(h),l},[])},rt=e=>{let{x:t,y:r,width:s,height:o}=e.getBoundingClientRect();return t!==0||r!==0||s!==0||o!==0},ue=e=>{let{display:t}=window.getComputedStyle(e);switch(t){case"none":return !0;case"contents":return Array.from(e.children).every(r=>ue(r));default:return !rt(e)}};var De=(e,t)=>{let{shouldHide:r,cssString:s,parentDepth:o,isMultiple:a}=e;H(s,a).forEach(n=>{let i=O(n,o);if(!i)return;let l=window.getComputedStyle(i);l.display!=="none"&&l.visibility!=="hidden"&&t.push({type:r?"hide-element":"remove-element",element:i});});};var Be=(e,t,r)=>v(void 0,null,function*(){let{parentSelector:s,displayWidth:o}=e,{isMultiple:a,cssString:n,parentDepth:i}=s;if(o&&!semver.satisfies(semver.coerce(window.innerWidth),o))return [];let l=H(n,a).map(d=>O(d,i)).filter(d=>!!d);return yield Promise.all(l.map(d=>v(void 0,null,function*(){yield B(0),it(d,e,t,r);}))),l}),he=(e,t)=>{var r,s;return e?{width:(r=document.querySelector(e.width))!=null?r:t,height:(s=document.querySelector(e.height))!=null?s:t}:{width:t,height:t}},it=(e,t,r,s)=>{var Pe;let we=t,{shouldUseDivWrapper:o,divWrapperStyle:a,wrapperStyle:n,elementStyle:i,adSelector:l,insertionIndex:d,insertBeforeSelector:m,insertAfterSelector:h,insertionsCount:c=1,elementsToMeasureSelectors:u,stylesOverrides:p,shouldHideOriginal:g=!1,isNative:y,urlRegexes:R,parentSelector:P}=we,E=b(we,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),S=E.wrapperType?n:o?a:{display:"contents"},{isMultiple:I,cssString:M,parentDepth:T}=l,_=H(y?He:Ce,!0,e).reduce((f,k)=>f.some(z=>z.contains(k))?f:[...f.filter(z=>!k.contains(z)),k],[]),L=_.filter(f=>ue(f)&&!f.hasAttribute(oe)),F=_.length-L.length,W=c-F;if(H(M,I,e).map(f=>O(f,T)).filter(f=>Le(f)&&!j(f)).forEach(f=>{var z;let k=window.getComputedStyle(f).display==="none";if(W<=0)(!g||!k)&&s.push({type:g?"hide-element":"remove-element",element:f});else {let qe=he(u,((z=f.parentElement)==null?void 0:z.children.length)===1?f.parentElement:f),Xe=w({type:"replace-element",element:f,wrapperStyle:S,elementStyle:i,stylesOverrides:p,adCategories:[x]},E),Me={type:"hide-element",element:f},Qe=w({type:"simple-insert-ad",wrapperStyle:S,elementStyle:i,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:p,adCategories:[x]},E),ee=[],Ie=ce(f);g&&Ie&&!k?ee=[Me]:g&&!Ie?ee=[Me,Qe]:g||(ee=[Xe]),ee.length>0&&r(qe,"permanent",y,[x],...ee)&&W--;}}),W<=0)return;let D=-1,Y=e,Z={width:e,height:e},ve=m||h;if(ve){let f=e.querySelector(ve),k=f==null?void 0:f.parentElement;f&&k&&(Y=k,D=Array.from(e.children).indexOf(f)+(m?0:1),Z=he(u,f));}else {let f=d!=null?d:0;D=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),Z=he(u,(Pe=e.children[D])!=null?Pe:e);}if(D!==-1){let f=w({type:"simple-insert-ad",wrapperStyle:S,elementStyle:i,parent:Y,insertionIndex:D,isSiblingReplacement:!1,stylesOverrides:p,adCategories:[x]},E);r(Z,"permanent",y,[x],...Array(W).fill(f));}};var at=["align-items","align-self","bottom","display","flex","flex-grow","flex-shrink","float","justify-content","justify-self","left","margin","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","padding","position","right","top","vertical-align","z-index"],lt=lodash.memoize(e=>e.reduce((t,{dimensions:r})=>{let s=t.filter(({width:o,height:a})=>o<r.width||a<r.height);return (s.length===0||s.some(({width:o,height:a})=>o>r.width||a>r.height))&&s.push(r),s},[])),Oe=(e,t,r,s)=>v(void 0,null,function*(){let o=lt(A.bannerAdsMeta),a=e.map(({selector:i,parentDepth:l,categories:d})=>H(i,!0).reduce((m,h)=>{var M;let c=(M=O(h,l))!=null?M:h,u=m.findIndex(({element:T})=>T.contains(c)),p=c.parentElement&&window.getComputedStyle(c.parentElement),{width:g,height:y}=se(c),R=s.some(T=>{var _;return T.type==="replace-all-children"||T.type==="simple-insert-ad"?T.parent.contains(c)||c.contains(T.parent):((_=T.element.parentElement)==null?void 0:_.contains(c))||c.contains(T.element)}),P=(p==null?void 0:p.display)==="none"||(p==null?void 0:p.visibility)==="hidden",E=u>=0&&m[u]instanceof HTMLAnchorElement,S=o.some(({width:T,height:_})=>g>=T&&y>=_);if(R||!S||P||E)return m;let I={element:c,categories:d};return u>=0?m.splice(u,1,I):m.some(({element:T})=>T.contains(c))||m.push(I),m},[])).flat(),n=t.map(({selector:i,parentDepth:l})=>H(i,!0).map(d=>O(d,l)).filter(d=>!!d)).flat();a=a.filter(({element:i})=>!n.includes(i)),yield Promise.all(a.map(d=>v(void 0,[d],function*({element:i,categories:l}){var p,g,y,R,P,E,S,I;yield B(0);let m=i.parentElement,{width:h,height:c}=window.getComputedStyle(i),u=q.test(h)&&q.test(c)?i:(g=(p=m==null?void 0:m.closest("div, article, aside, footer, header"))!=null?p:(m==null?void 0:m.tagName.toLowerCase())==="body"?void 0:m)!=null?g:i;if(!j(i)&&!i.querySelector(X)&&!s.some(M=>M.type==="simple-insert-ad"?!1:M.type==="replace-all-children"?M.parent.contains(i):M.element===i)){let M=(y=i.getAttribute("style"))!=null?y:"",T=Object.fromEntries(M.split(";").filter(Boolean).map(Y=>Y.split(":").map(Z=>Z.trim())));if((R=T.width)!=null&&R.match(/^0[a-z]/)||(P=T.height)!=null&&P.match(/^0[a-z]/))return;let _=window.getComputedStyle(i),L=w(w({},Object.fromEntries(at.map(Y=>[Y,_.getPropertyValue(Y)]))),T),F={type:"hide-element",element:i},W={type:"simple-insert-ad",wrapperStyle:L,parent:(E=i.parentElement)!=null?E:document.body,insertionIndex:Array.from((I=(S=i.parentElement)==null?void 0:S.children)!=null?I:[]).indexOf(i),isSiblingReplacement:!0,shouldUseBlurredBackground:!0,adCategories:l},V,D=i.closest(`[${$}] + *`);D&&D!==i?V=[{type:"remove-element",element:D.previousElementSibling},F,W]:D?V=window.getComputedStyle(i).display==="none"?[]:[F]:V=[F,W],r({width:u,height:u},"provider-replacement",!1,l,...V);}})));});var We=(e,t,r)=>v(void 0,null,function*(){let{cssString:s,isMultiple:o}=e.selector,a=H(s,o);yield Promise.all(a.map(n=>v(void 0,null,function*(){yield B(0),dt(n,e,t,r);})));}),dt=(e,t,r,s)=>{let{selector:{shouldUseDivWrapper:o,parentDepth:a,divWrapperStyle:n},stylesOverrides:i,shouldHideOriginal:l,isNative:d=!1}=t,m=O(e,a);if(!m||r.some(u=>u.contains(m))||j(m)||m.querySelector(X))return;let h={shouldUseDivWrapper:o,wrapperStyle:n},c;if(o&&l){let u=m.parentElement,p=window.getComputedStyle(m).display==="none",g=w({type:"simple-insert-ad",parent:u,insertionIndex:Array.from(u.children).indexOf(m),stylesOverrides:i==null?void 0:i.map(P=>{var E=P,{parentDepth:y}=E,R=b(E,["parentDepth"]);return C(w({},R),{parentDepth:y-1})}),isSiblingReplacement:!0,adCategories:[x]},h);c=[],p||c.push({type:"hide-element",element:m}),ce(m)||c.push(g);}else if(o)c=[w({type:"replace-element",element:m,stylesOverrides:i==null?void 0:i.map(y=>{var R=y,{parentDepth:p}=R,g=b(R,["parentDepth"]);return C(w({},g),{parentDepth:p-1})}),adCategories:[x]},h)];else if(l){let u={type:"simple-insert-ad",parent:m,insertionIndex:0,stylesOverrides:i,isSiblingReplacement:!0,adCategories:[x],wrapperStyle:{display:"contents"}};c=Array.from(m.children).filter(p=>window.getComputedStyle(p).display!=="none").map(p=>({type:"hide-element",element:p})),m.querySelector(X)||c.push(u);}else c=[{type:"replace-all-children",parent:m,stylesOverrides:i,adCategories:[x],wrapperStyle:{display:"contents"}}];c.length>0&&s({width:m,height:m},"slot-replacement",d,[x],...c);};var ct=a=>v(void 0,[a],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:r,permanentAdPlacesRules:s,elementsToHideOrRemoveRules:o}){let n=[],i=(d,m,h,c,...u)=>{if(u.length>0&&u.every(L=>L.type==="hide-element"||L.type==="remove-element"))return n.push(...u),!0;let{width:p}=se(d.width),{height:g}=se(d.height),{paddingLeft:y,paddingRight:R}=window.getComputedStyle(d.width),{paddingTop:P,paddingBottom:E}=window.getComputedStyle(d.height),S=Q([y,R]),I=S===p?p:p-S,M=Q([P,E]),T=M===g?g:g-M,_=Ne(I,T,m,h,c);return _.length?(n.push(...u.map(L=>L.type==="hide-element"||L.type==="remove-element"?L:C(w({},L),{adsMetadata:_,originalWidth:I,originalHeight:T}))),!0):!1},l=[];return yield Promise.all(o.map(d=>v(void 0,null,function*(){yield B(0),De(d,n);}))),yield Promise.all(s.map(d=>v(void 0,null,function*(){yield B(0),l=l.concat(yield Be(d,i,n));}))),yield Promise.all(r.map(d=>v(void 0,null,function*(){yield B(0),yield We(d,l,i);}))),yield Oe(e,t,i,n),n});var ge=(a=>(a.Optimal="Optimal",a.SmartyAds="SmartyAds",a.HypeLab="HypeLab",a.Persona="Persona",a.Temple="Temple Wallet",a))(ge||{});var Ee=new Set,ke=new Set,Ue=new Set,Ve=e=>v(void 0,null,function*(){let t=e.id;if(!Ee.has(t))return Ee.add(t),new Promise((r,s)=>{let o=!1,a=n=>{var i,l;if(n.source===e.contentWindow)try{let d=typeof n.data=="string"?JSON.parse(n.data):n.data;if(d.id!==t)return;let m=e.offsetWidth-e.clientWidth,h=e.offsetHeight-e.clientHeight;switch(d.type){case te:r(d.adMetadata.source.providerName);break;case re:window.removeEventListener("message",a),e.style.display="none",s(new Error((i=d.reason)!=null?i:"Unknown error"));break;case ae:let{dimensions:c,source:u}=d.adMetadata;o=(l=u.native)!=null?l:!1;let{width:p,height:g}=c;p>0&&g>0&&(u.native?e.style.height=`${g}px`:(U(e,"width",p),U(e,"height",g)));break;case le:let{width:y,height:R}=d;o?e.style.height=`${R+h}px`:(U(e,"width",y+m),U(e,"height",R+h));}}catch(d){console.error("Observing error:",d);}};window.addEventListener("message",a);}).then(r=>{if(ke.has(t))return;ke.add(t),At(e)?Ye(t,r):pt(e,r);}).catch(r=>{throw console.error(r),r}).finally(()=>void Ee.delete(t))}),pt=(e,t)=>{let r=new IntersectionObserver(s=>{s.some(o=>o.isIntersecting)&&(Ye(e.id,t),r.disconnect());},{threshold:.5});r.observe(e);},Ye=(e,t)=>{if(Ue.has(e))return;Ue.add(e);let r=window.parent.location.href;mt__default.default.runtime.sendMessage({type:A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:r,provider:ge[t]}).catch(s=>void console.error(s));},At=e=>{let t=e.getBoundingClientRect(),r=window.visualViewport;if(!r)return !1;let s=Math.min(Math.max(0,t.x),r.width),o=Math.min(Math.max(0,t.x+t.width),r.width),a=Math.min(Math.max(0,t.y),r.height),n=Math.min(Math.max(0,t.y+t.height),r.height),i=t.width*t.height;return (o-s)*(n-a)/i>=.5};var ne=(e,t)=>{for(let r in t)e.style.setProperty(r,t[r]);};var ht=(e,t)=>{["width","height"].forEach(s=>{var a;let o=(a=e.style[s])!=null?a:"";q.test(o)&&parseInt(o,10)<t[s]&&e.style.removeProperty(s);});},gt=(e,t,r,s)=>v(void 0,null,function*(){let{elementStyle:o={},stylesOverrides:a=[],adsMetadata:n,wrapperType:i,originalHeight:l,originalWidth:d,shouldUseBlurredBackground:m,adCategories:h}=e;a.sort((E,S)=>E.parentDepth-S.parentDepth);let c,u=nanoid.nanoid(),p=document.createElement("iframe");p.loading="lazy",p.src=A.getAdsStackIframeURL(u,n,window.location.href,h),p.id=u,p.allow=de;let g=n[0],{dimensions:y}=typeof g=="number"?A.bannerAdsMeta[g]:g,R={width:m?Math.max(d,y.width):y.width,height:m?Math.max(l,y.height):y.height};p.style.width=i==="tbody"?"100%":`${R.width}px`,p.style.height=`${R.height}px`,p.style.border="none";for(let E in o)p.style.setProperty(E,o[E]);switch(p.setAttribute(G,"true"),ht(t,R),r.appendChild(p),e.type){case"replace-all-children":c=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":c=e.element.parentElement,e.element.replaceWith(t);break;default:let E=e.parent.children[e.insertionIndex];if(e.isSiblingReplacement){t.setAttribute($,"true");let S=new MutationObserver(I=>{I.some(T=>Array.from(T.removedNodes).includes(E))&&(t.remove(),S.disconnect());});S.observe(e.parent,{childList:!0});}c=e.parent,e.parent.insertBefore(t,E);break}if(i!=="tbody"){let{borderLeftWidth:E,borderRightWidth:S,borderTopWidth:I,borderBottomWidth:M}=window.getComputedStyle(p),{borderLeftWidth:T,borderRightWidth:_,borderTopWidth:L,borderBottomWidth:F}=window.getComputedStyle(t),W=Q([E,S,T,_]),V=Q([I,M,L,F]);p.style.width=`${R.width-W}px`,p.style.height=`${R.height-V}px`;}Ve(p).catch(s);let P=0;a.forEach(({parentDepth:E,style:S})=>{for(;E>P&&c;)c=c.parentElement,P++;c&&ne(c,S);});}),Ge=e=>v(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:r,wrapperType:s="div",colsAfter:o=0,colsBefore:a=0,colspan:n=1}=e,i=r.every(h=>typeof h=="object"),l,d;if(s==="div")l=document.createElement("div"),d=l;else {l=document.createElement("tbody");let h=document.createElement("tr");l.appendChild(h);for(let u=0;u<a;u++)h.appendChild(document.createElement("td"));let c=document.createElement("td");c.colSpan=n,h.appendChild(c),d=c;for(let u=0;u<o;u++)h.appendChild(document.createElement("td"));}l.setAttribute(G,"true"),i&&l.setAttribute(K,"true"),ne(l,t);let m=()=>{let h=document.createElement("div");h.setAttribute(G,"true"),h.setAttribute(oe,"true"),i&&h.setAttribute(K,"true"),e.type==="simple-insert-ad"&&e.isSiblingReplacement&&h.setAttribute($,"true"),h.style.display="none",l.replaceWith(h);};yield gt(e,l,d,h=>{console.error("Failed to render ads",h),m();}).catch(h=>{throw console.error("Inserting an ad attempt error:",h),m(),h});});var Et=e=>Promise.allSettled(e.map(t=>v(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none","important"):yield Ge(t);})));var fe=(e,t,r=!1)=>{let s=document.createElement("div");s.style.width=`${e}px`,s.style.height=`${t}px`;let o=document.createElement("div");if(o.style.width=`${e}px`,o.style.height=`${t}px`,s.appendChild(o),r){let i=document.createElement("a");return i.href=A.SWAP_TKEY_URL,i.target="_blank",i.rel="noopener noreferrer",i.style.width=`${e}px`,i.style.height=`${t}px`,i.style.overflow="hidden",i.style.textOverflow="ellipsis",i.appendChild(document.createTextNode("TODO: Native TKEY ad")),o.appendChild(i),{element:s}}let a=document.createElement("a");a.href=A.SWAP_TKEY_URL,a.target="_blank",a.rel="noopener noreferrer",a.style.width="100%",a.style.height="100%",o.appendChild(a);let n=document.createElement("img");return n.src=e<=320?A.SMALL_TKEY_INPAGE_AD_URL:A.TKEY_INPAGE_AD_URL,n.style.width="100%",n.style.height="100%",a.appendChild(n),{element:s,creativeSet:{image:{url:n.src}}}};var Re=(e,t,{width:r,height:s},o)=>{let a=document.createElement("iframe");return a.id=e,a.src=Rt(t,o,r,s,a.id),a.style.width=t.native?"100%":`${r}px`,a.style.height=`${s}px`,a.style.border="none",a.allow=de,{element:a}},Rt=(e,t,r,s,o)=>{let{providerName:a,slug:n,native:i}=e,l=new URL(A.ADS_TW_WINDOW_URL);return l.searchParams.set("ap",a.toLowerCase()),i?l.searchParams.set("vh",String(s)):l.searchParams.set("w",String(r)),l.searchParams.set("h",String(s)),l.searchParams.set("p",n),l.searchParams.set("o",yt(t)),o&&l.searchParams.set("id",o),l.toString()},yt=e=>cryptoJs.AES.encrypt(e,A.TEMPLE_PASSPHRASE).toString();var ye=(e,t,{width:r,height:s})=>{let o=document.createElement("iframe"),a="";switch(t.providerName){case"Persona":a=A.personaIframePath;break;default:throw new Error(`Ads from ${t.providerName} are unavailable via extension iframe`)}let n=new URL(a);return n.searchParams.set("id",e),n.searchParams.set("slug",t.slug),o.src=n.toString(),o.id=e,o.style.width=`${r}px`,o.style.height=`${s}px`,o.style.border="none",{element:o}};var Se=class{constructor(t,r,s,o,a,n){this.id=t;this.origin=s;this.pageHasPlacesRules=o;this.adCategories=a;this.hypelabBlacklistedCampaignsSlugs=n;this.wasReady=!1;this.rootElement=document.getElementById("root");this.validAdsCounter=0;this.adsMetadata=r.map(i=>typeof i=="number"?A.bannerAdsMeta[i]:i);}startRendering(){if(this.adsMetadata.length===0){this.broadcastNoMoreAds();return}this.currentAdMetadata=A.pickNextAdMetadata(this.adsMetadata,this.currentAdMetadata,this.validAdsCounter,this.pageHasPlacesRules,this.adCategories);let t=this.currentAdMetadata;if(!t){this.broadcastNoMoreAds();return}this.broadcastMessage({id:this.id,type:ae,adMetadata:this.currentAdMetadata});let{element:r,creativeSet:s}=this.placeNewAd(t);r instanceof HTMLIFrameElement?this.listenToIframeMessages(r,t):this.handleValidAd({ad:{creative_set:s}});}listenToIframeMessages(t,r){let s=A.pickNextAdMetadata(this.adsMetadata,r,this.validAdsCounter,this.pageHasPlacesRules,this.adCategories);this.responseTimeout=setTimeout(()=>{console.error(`Timeout exceeded for ${this.id}, ad source: ${JSON.stringify(r.source)}`),this.handleInvalidAd();},(s?1e4:2e4)*(A.IS_MISES_BROWSER?2:1)),this.messageListener=o=>{var a;if(o.source===t.contentWindow)try{let n=typeof o.data=="string"?JSON.parse(o.data):o.data;switch(n.type){case te:if(r.source.providerName==="HypeLab"&&this.hypelabBlacklistedCampaignsSlugs.includes((a=n.ad)==null?void 0:a.campaign_slug)&&s){this.handleInvalidAd();break}this.handleValidAd(n);break;case re:this.wasReady||this.handleInvalidAd();break;case le:let{width:i,height:l}=n;i>0&&l>0&&(r.source.native?t.style.height=`${l}px`:(U(t,"width",i),U(t,"height",l)),this.broadcastMessage(C(w({},n),{id:this.id})));}}catch(n){console.error("Message handling error:",n);}},window.addEventListener("message",this.messageListener);}handleInvalidAd(){this.removeMessageListener(),this.clearResponseTimeout(),this.startRendering(),this.validAdsCounter=0;}removeMessageListener(){this.messageListener&&(window.removeEventListener("message",this.messageListener),this.messageListener=void 0);}placeNewAd(t){document.body.style.backgroundColor=t.source.native?"transparent":"#F2F2F2";let{source:r,dimensions:s}=t,o;switch(r.providerName){case"Temple":o=fe(s.width,s.height,r.native);break;case"HypeLab":case"SmartyAds":o=Re(this.id,r,s,this.origin);break;default:o=ye(this.id,r,s);}let{element:a}=o,n=document.getElementById("temple-label");return this.rootElement.replaceChildren(a),r.native?n.removeAttribute("active"):n.setAttribute("active",""),o}updateBackground(t,r={}){let s=document.getElementById(me);if(t.native&&s&&this.rootElement.removeChild(s),!t.native){try{let{image:o,video:a}=r,n;if(o?(n=document.createElement("img"),n.src=o.url,n.alt=""):a&&(n=document.createElement("video"),n.src=a.url,n.autoplay=!0,n.preload="auto",n.playsInline=!0,n.muted=!0,n.loop=!0),!n&&s&&this.rootElement.removeChild(s),!n)return;n.id=me,n.style.zIndex="-1",ne(n,{position:"absolute",top:"0px",left:"0px",right:"0px",bottom:"0px",width:"100%",height:"100%","object-fit":"cover",filter:"blur(12px)"}),s?this.rootElement.replaceChild(n,s):this.rootElement.prepend(n);}catch(o){console.error(o);}document.body.style.backgroundColor="transparent";}}broadcastMessage(t){window.parent.postMessage(JSON.stringify(t),"*");}broadcastNoMoreAds(){this.broadcastMessage({id:this.id,type:re,reason:"No more ads to render"});}clearResponseTimeout(){this.responseTimeout!==void 0&&(clearTimeout(this.responseTimeout),this.responseTimeout=void 0);}handleValidAd(t){var s;let r=this.currentAdMetadata;r&&(this.wasReady||(this.wasReady=!0,this.broadcastMessage({id:this.id,type:te,adMetadata:r})),this.validAdsCounter++,this.clearResponseTimeout(),this.updateBackground(r.source,(s=t.ad)==null?void 0:s.creative_set));}},St=(e,t,r,s=!1,o,a)=>{try{new Se(e,t,r,s,o,a).startRendering();}catch(n){console.error("Error while rendering ads stack:",n);}};var Tt=(e,t)=>{let{adPlacesRulesForAllDomains:r,providersRulesForAllDomains:s,providersSelectors:o,providersNegativeSelectors:a={},providersToReplaceAtAllSites:n,permanentAdPlacesRulesForAllDomains:i,permanentNativeAdPlacesRulesForAllDomains:l={},adsReplaceUrlsBlacklist:d=[],elementsToHideOrRemoveRules:m={},providersCategories:h={},blacklistedHypelabCampaignsSlugs:c=[],timestamp:u}=t,p=typeof e=="string"?e:e.href,{hostname:g}=new URL(p);if(d.some(P=>new RegExp(P).test(p)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],elementsToHideOrRemoveRules:[],blacklistedHypelabCampaignsSlugs:c,timestamp:u};let y=p.replace(/#.*$/,""),R=P=>{let E=P.source.includes("#")?p:y;return P.test(E)};return {adPlacesRules:wt(g,R,r),permanentAdPlacesRules:Pt(g,R,i,l),providersSelectors:Ke(g,R,s,o,n,h),providersNegativeSelectors:Ke(g,R,s,a,n,h),elementsToHideOrRemoveRules:vt(g,R,m),blacklistedHypelabCampaignsSlugs:c,timestamp:u}},vt=(e,t,r)=>{var s;return ((s=r[e])!=null?s:[]).map(n=>{var i=n,{urlRegexes:o}=i,a=b(i,["urlRegexes"]);return C(w({},a),{urlRegexes:o.map(l=>new RegExp(l))})}).filter(({urlRegexes:o})=>o.some(t))},wt=(e,t,r)=>{var a;return ((a=r[e])!=null?a:[]).map(l=>{var d=l,{urlRegexes:n}=d,i=b(d,["urlRegexes"]);return C(w({},i),{urlRegexes:n.map(m=>new RegExp(m))})}).reduce((n,m)=>{var h=m,{urlRegexes:i,selector:l}=h,d=b(h,["urlRegexes","selector"]);if(!i.some(t))return n;let g=l,{cssString:c}=g,u=b(g,["cssString"]),p=n.findIndex(P=>{var E=P,{selector:y}=E,R=b(E,["selector"]);let M=y,I=b(M,["cssString"]);return lodash.isEqual(u,I)&&lodash.isEqual(d,R)});return p===-1?n.push(w({selector:l},d)):n[p].selector.cssString+=", ".concat(c),n},[])},ze=e=>a=>{var n=a,{urlRegexes:t,elementToMeasureSelector:r,elementsToMeasureSelectors:s}=n,o=b(n,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return C(w({},o),{urlRegexes:t.map(i=>new RegExp(i)),isNative:e,elementsToMeasureSelectors:s!=null?s:r?{width:r,height:r}:void 0})},Pt=(e,t,r,s={})=>{var i,l;let o=(i=r[e])!=null?i:[],a=(l=s[e])!=null?l:[];return o.map(ze(!1)).concat(a.map(ze(!0))).filter(({urlRegexes:d})=>d.some(t))};function Mt(e){let t="";return e.forEach(r=>{t+=r+", ";}),t&&(t=t.slice(0,-2)),t}var Ke=(e,t,r,s,o,a)=>{var h;let i=((h=r[e])!=null?h:[]).map(p=>{var g=p,{urlRegexes:c}=g,u=b(g,["urlRegexes"]);return C(w({},u),{urlRegexes:c.map(y=>new RegExp(y))})}).filter(({urlRegexes:c})=>c.some(t)),l=new Set,d={},m=c=>{var g,y;if(l.has(c))return;let u=((g=a[c])!=null?g:[x]).join("|");((y=s[c])!=null?y:[]).forEach(R=>{let{selector:P,parentDepth:E}=typeof R=="string"?{selector:R,parentDepth:0}:R;d[u]||(d[u]={});let S=d[u];S[E]||(S[E]=new Set),S[E].add(P);}),l.add(c);};return o.forEach(m),i.forEach(({providers:c})=>c.forEach(m)),Object.entries(d).map(([c,u])=>Object.entries(u).map(([p,g])=>({parentDepth:Number(p),selector:Mt(g),categories:c.split("|")}))).flat()};var N=e=>(...t)=>v(void 0,null,function*(){let{data:r}=yield e(...t);return r}),Te=class{constructor(t){this.getAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=N(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersCategories=N(()=>this.api.get("/slise-ad-rules/providers/categories"));this.getProvidersRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getNegativeSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=N(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getElementsToHideOrRemoveRules=N(()=>this.api.get("/slise-ad-rules/elements-to-hide-or-remove",this.getAdVersionRequestConfig()));this.getBlacklistedHypelabCampaignsSlugs=N(()=>this.api.get("/temple-wallet-ads/hypelab-campaigns-blacklist"));this.getAllRules=()=>v(this,null,function*(){let[t,r,s,o,a,n,i,l,d,m,h]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders(),this.getElementsToHideOrRemoveRules(),this.getProvidersCategories(),this.getBlacklistedHypelabCampaignsSlugs()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:r,providersSelectors:s,providersToReplaceAtAllSites:o,permanentAdPlacesRulesForAllDomains:a,permanentNativeAdPlacesRulesForAllDomains:n,adsReplaceUrlsBlacklist:i,providersNegativeSelectors:l,elementsToHideOrRemoveRules:d,providersCategories:m,blacklistedHypelabCampaignsSlugs:h,timestamp:Date.now()}});this.api=It__default.default.create({baseURL:new URL("/api",t).href,adapter:"fetch"});}getAdVersionRequestConfig(){return {params:{extVersion:A.EXTENSION_VERSION,isMisesBrowser:A.IS_MISES_BROWSER}}}};
15
+ var __defProp = Object.defineProperty;
16
+ var __defProps = Object.defineProperties;
17
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
18
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
19
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
20
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
21
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
22
+ var __spreadValues = (a, b) => {
23
+ for (var prop in b || (b = {}))
24
+ if (__hasOwnProp.call(b, prop))
25
+ __defNormalProp(a, prop, b[prop]);
26
+ if (__getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(b)) {
28
+ if (__propIsEnum.call(b, prop))
29
+ __defNormalProp(a, prop, b[prop]);
30
+ }
31
+ return a;
32
+ };
33
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
34
+ var __objRest = (source, exclude) => {
35
+ var target = {};
36
+ for (var prop in source)
37
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
38
+ target[prop] = source[prop];
39
+ if (source != null && __getOwnPropSymbols)
40
+ for (var prop of __getOwnPropSymbols(source)) {
41
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
42
+ target[prop] = source[prop];
43
+ }
44
+ return target;
45
+ };
46
+ var __async = (__this, __arguments, generator) => {
47
+ return new Promise((resolve, reject) => {
48
+ var fulfilled = (value) => {
49
+ try {
50
+ step(generator.next(value));
51
+ } catch (e) {
52
+ reject(e);
53
+ }
54
+ };
55
+ var rejected = (value) => {
56
+ try {
57
+ step(generator.throw(value));
58
+ } catch (e) {
59
+ reject(e);
60
+ }
61
+ };
62
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
63
+ step((generator = generator.apply(__this, __arguments)).next());
64
+ });
65
+ };
16
66
 
17
- exports.TempleWalletApi = Te;
18
- exports.configureAds = tt;
19
- exports.executeAdsActions = Et;
20
- exports.getAdsActions = ct;
21
- exports.renderAdsStack = St;
22
- exports.transformRawRules = Tt;
67
+ // src/utils.ts
68
+ process && process.env && process.env.NODE_ENV === "development";
69
+ navigator.userAgent.includes("Macintosh");
70
+ var isTruthy = (value) => Boolean(value);
71
+ var DEFAULT_DELAY = 300;
72
+ var delay = (ms = DEFAULT_DELAY) => new Promise((res) => setTimeout(res, ms));
73
+
74
+ // src/ads-configuration.ts
75
+ var AdsConfiguration = class {
76
+ };
77
+ AdsConfiguration.IS_MISES_BROWSER = false;
78
+ AdsConfiguration.ADS_TW_WINDOW_URL = "";
79
+ AdsConfiguration.TKEY_INPAGE_AD_URL = "";
80
+ AdsConfiguration.SMALL_TKEY_INPAGE_AD_URL = "";
81
+ AdsConfiguration.SWAP_TKEY_URL = "";
82
+ AdsConfiguration.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE = "";
83
+ AdsConfiguration.personaIframePath = "";
84
+ AdsConfiguration.getAdsStackIframeURL = () => "";
85
+ AdsConfiguration.buildNativeAdsMeta = () => [];
86
+ AdsConfiguration.pickNextAdMetadata = () => void 0;
87
+ AdsConfiguration.bannerAdsMeta = [];
88
+ var configureAds = (config) => {
89
+ const {
90
+ adsTwWindowUrl,
91
+ tkeyInpageAdUrl,
92
+ smallTkeyInpageAdUrl,
93
+ swapTkeyUrl,
94
+ externalAdsActivityMessageType,
95
+ personaIframePath,
96
+ getAdsStackIframeURL,
97
+ buildNativeAdsMeta,
98
+ bannerAdsMeta,
99
+ extVersion,
100
+ templePassphrase,
101
+ isMisesBrowser,
102
+ pickNextAdMetadata
103
+ } = config;
104
+ if (smallTkeyInpageAdUrl) {
105
+ AdsConfiguration.SMALL_TKEY_INPAGE_AD_URL = smallTkeyInpageAdUrl;
106
+ }
107
+ AdsConfiguration.ADS_TW_WINDOW_URL = adsTwWindowUrl;
108
+ AdsConfiguration.TKEY_INPAGE_AD_URL = tkeyInpageAdUrl;
109
+ AdsConfiguration.SWAP_TKEY_URL = swapTkeyUrl;
110
+ AdsConfiguration.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE = externalAdsActivityMessageType;
111
+ AdsConfiguration.personaIframePath = personaIframePath;
112
+ AdsConfiguration.getAdsStackIframeURL = getAdsStackIframeURL;
113
+ AdsConfiguration.buildNativeAdsMeta = buildNativeAdsMeta;
114
+ AdsConfiguration.pickNextAdMetadata = pickNextAdMetadata;
115
+ AdsConfiguration.bannerAdsMeta = bannerAdsMeta;
116
+ AdsConfiguration.EXTENSION_VERSION = extVersion;
117
+ AdsConfiguration.TEMPLE_PASSPHRASE = templePassphrase;
118
+ AdsConfiguration.IS_MISES_BROWSER = isMisesBrowser;
119
+ };
120
+
121
+ // src/constants.ts
122
+ var TEMPLE_WALLET_AD_ATTRIBUTE_NAME = "twa";
123
+ var TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME = "twa-native";
124
+ var SIBLING_REPLACEMENT_ATTRIBUTE_NAME = "twa-sibling-replacement";
125
+ var AD_SEEN_THRESHOLD = 0.5;
126
+ var AD_RENDER_START_MESSAGE_TYPE = "adRenderStart";
127
+ var AD_RESIZE_MESSAGE_TYPE = "resize";
128
+ var AD_READY_MESSAGE_TYPE = "ready";
129
+ var AD_ERROR_MESSAGE_TYPE = "error";
130
+ var IFRAME_ALLOWANCE = "accelerometer; gyroscope";
131
+ var CRYPTO_CATEGORY_NAME = "crypto";
132
+ var BACKGROUND_ELEMENT_ID = "background";
133
+
134
+ // src/ads-actions/helpers.ts
135
+ var PX_VALUE_REGEX = /[\d.]+(px)?$/;
136
+ var ourAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]`;
137
+ var ourBannerAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]:not([${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}])`;
138
+ var ourNativeAdQuerySelector = `[${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}]`;
139
+ var parsePxValue = (value, fallback) => {
140
+ const parsedValue = parseInt(value, 10);
141
+ return isNaN(parsedValue) || !PX_VALUE_REGEX.test(value) ? fallback : parsedValue;
142
+ };
143
+ var extendOrKeepDimension = (element, dimension, suggestedValue) => {
144
+ element.style[dimension] = `${Math.max(parsePxValue(element.style[dimension], 0), suggestedValue)}px`;
145
+ };
146
+ var sumPxValues = (values) => values.reduce((acc, value) => acc + parsePxValue(value, 0), 0);
147
+ var elementIsOurAd = (element) => Boolean(element.closest(ourAdQuerySelector));
148
+ var prevBannerSiblingIsReplacement = (banner) => {
149
+ var _a;
150
+ return Boolean((_a = banner.previousElementSibling) == null ? void 0 : _a.getAttribute(SIBLING_REPLACEMENT_ATTRIBUTE_NAME));
151
+ };
152
+ var getFinalSize = (element) => {
153
+ const elementStyle = getComputedStyle(element);
154
+ const { x, right, width: rectWidth, height: rectHeight } = element.getBoundingClientRect();
155
+ const size = { width: rectWidth, height: rectHeight };
156
+ const dimensions = ["width", "height"];
157
+ for (const dimension of dimensions) {
158
+ const rawDimensionFromStyle = elementStyle[dimension];
159
+ const rawDimensionFromAttribute = element.getAttribute(dimension);
160
+ const parsedDimension = Math.max(
161
+ ...[rawDimensionFromStyle, rawDimensionFromAttribute].map((rawValue) => parsePxValue(rawValue != null ? rawValue : "", -1))
162
+ );
163
+ if (parsedDimension !== -1) {
164
+ size[dimension] = parsedDimension;
165
+ }
166
+ if (dimension === "width" && x < 0) {
167
+ size.width += x;
168
+ } else if (dimension === "width" && right > window.innerWidth) {
169
+ size.width = window.innerWidth - x;
170
+ }
171
+ }
172
+ return size;
173
+ };
174
+ var applyQuerySelector = (querySelector, isMultiple, element = document) => {
175
+ if (!querySelector) {
176
+ return [];
177
+ }
178
+ return isMultiple ? [...element.querySelectorAll(querySelector)] : [element.querySelector(querySelector)].filter((el) => Boolean(el));
179
+ };
180
+ var getParentOfDepth = (element, depth) => {
181
+ let parent = element;
182
+ for (let i = 0; i < depth; i++) {
183
+ const nextParent = parent.parentElement;
184
+ if (!nextParent) {
185
+ return null;
186
+ }
187
+ parent = nextParent;
188
+ }
189
+ return parent;
190
+ };
191
+ var pickAdsToDisplay = (containerWidth, containerHeight, adType, adIsNative, expectedCategories) => {
192
+ if (containerWidth < 2 && containerHeight < 2) {
193
+ return [];
194
+ }
195
+ if (adIsNative) {
196
+ return AdsConfiguration.buildNativeAdsMeta(containerWidth, containerHeight);
197
+ }
198
+ const fallbackAdsFullMeta = adType === "permanent" /* Permanent */ || adType === "slot-replacement" /* SlotReplacement */ ? AdsConfiguration.bannerAdsMeta.filter(({ source }) => source.shouldNotUseStrictContainerLimits) : [];
199
+ const containerWithFallbackWidth = Math.max(
200
+ containerWidth,
201
+ ...fallbackAdsFullMeta.map(({ dimensions }) => dimensions.width)
202
+ );
203
+ const containerWithFallbackHeight = Math.max(
204
+ containerHeight,
205
+ ...fallbackAdsFullMeta.map(({ dimensions }) => dimensions.height)
206
+ );
207
+ return AdsConfiguration.bannerAdsMeta.reduce((acc, { dimensions, source }, i) => {
208
+ const { shouldNotUseStrictContainerLimits = false, categories = [CRYPTO_CATEGORY_NAME] } = source;
209
+ if (categories.every((category) => !expectedCategories.includes(category))) {
210
+ return acc;
211
+ }
212
+ const { minContainerWidth, minContainerHeight, width, maxContainerWidth, maxContainerHeight } = dimensions;
213
+ let matches = false;
214
+ switch (adType) {
215
+ case "permanent" /* Permanent */:
216
+ matches = shouldNotUseStrictContainerLimits || containerWithFallbackWidth >= width && (containerWithFallbackHeight >= minContainerHeight || containerWithFallbackHeight < 2);
217
+ break;
218
+ case "slot-replacement" /* SlotReplacement */:
219
+ matches = shouldNotUseStrictContainerLimits || containerWithFallbackWidth >= minContainerWidth && (containerWithFallbackHeight >= minContainerHeight || containerWithFallbackHeight < 2);
220
+ break;
221
+ default:
222
+ matches = containerWidth >= minContainerWidth && containerHeight >= minContainerHeight && containerWidth <= maxContainerWidth && containerHeight <= maxContainerHeight;
223
+ }
224
+ if (matches) {
225
+ acc.push(i);
226
+ }
227
+ return acc;
228
+ }, []);
229
+ };
230
+ var elementHasBox = (element) => {
231
+ const { x, y, width, height } = element.getBoundingClientRect();
232
+ return x !== 0 || y !== 0 || width !== 0 || height !== 0;
233
+ };
234
+ var elementIsHidden = (element) => {
235
+ const { display } = window.getComputedStyle(element);
236
+ switch (display) {
237
+ case "none":
238
+ return true;
239
+ case "contents":
240
+ return Array.from(element.children).every((child) => elementIsHidden(child));
241
+ default:
242
+ return !elementHasBox(element);
243
+ }
244
+ };
245
+
246
+ // src/ads-actions/process-elements-to-hide-or-remove-rule.ts
247
+ var processElementsToHideOrRemoveRule = (rule, result) => {
248
+ const { shouldHide, cssString, parentDepth, isMultiple } = rule;
249
+ applyQuerySelector(cssString, isMultiple).forEach((elem) => {
250
+ const element = getParentOfDepth(elem, parentDepth);
251
+ if (!element) {
252
+ return;
253
+ }
254
+ const styles = window.getComputedStyle(element);
255
+ if (styles.display !== "none" && styles.visibility !== "hidden") {
256
+ result.push({
257
+ type: shouldHide ? "hide-element" /* HideElement */ : "remove-element" /* RemoveElement */,
258
+ element
259
+ });
260
+ }
261
+ });
262
+ };
263
+ var processPermanentAdPlacesRule = (rule, addActionsIfAdResolutionAvailable, result) => __async(void 0, null, function* () {
264
+ const { parentSelector, displayWidth: displayWidthRule } = rule;
265
+ const {
266
+ isMultiple: shouldSearchForManyParents,
267
+ cssString: parentCssString,
268
+ parentDepth: parentParentDepth
269
+ } = parentSelector;
270
+ if (displayWidthRule && !semver.satisfies(semver.coerce(window.innerWidth), displayWidthRule)) {
271
+ return [];
272
+ }
273
+ const parents = applyQuerySelector(parentCssString, shouldSearchForManyParents).map((element) => getParentOfDepth(element, parentParentDepth)).filter((value) => Boolean(value));
274
+ yield Promise.all(
275
+ parents.map((parent) => __async(void 0, null, function* () {
276
+ yield delay(0);
277
+ processPermanentAdsParent(parent, rule, addActionsIfAdResolutionAvailable, result);
278
+ }))
279
+ );
280
+ return parents;
281
+ });
282
+ var getElementsToMeasure = (selectors, fallbackElement) => {
283
+ var _a, _b;
284
+ return selectors ? {
285
+ width: (_a = document.querySelector(selectors.width)) != null ? _a : fallbackElement,
286
+ height: (_b = document.querySelector(selectors.height)) != null ? _b : fallbackElement
287
+ } : {
288
+ width: fallbackElement,
289
+ height: fallbackElement
290
+ };
291
+ };
292
+ var processPermanentAdsParent = (parent, rule, addActionsIfAdResolutionAvailable, result) => {
293
+ var _b;
294
+ const _a = rule, {
295
+ shouldUseDivWrapper,
296
+ divWrapperStyle: originalDivWrapperStyle,
297
+ wrapperStyle: originalWrapperStyle,
298
+ elementStyle,
299
+ adSelector,
300
+ insertionIndex,
301
+ insertBeforeSelector,
302
+ insertAfterSelector,
303
+ insertionsCount = 1,
304
+ elementsToMeasureSelectors,
305
+ stylesOverrides,
306
+ shouldHideOriginal = false,
307
+ isNative,
308
+ urlRegexes,
309
+ parentSelector
310
+ } = _a, restProps = __objRest(_a, [
311
+ "shouldUseDivWrapper",
312
+ "divWrapperStyle",
313
+ "wrapperStyle",
314
+ "elementStyle",
315
+ "adSelector",
316
+ "insertionIndex",
317
+ "insertBeforeSelector",
318
+ "insertAfterSelector",
319
+ "insertionsCount",
320
+ "elementsToMeasureSelectors",
321
+ "stylesOverrides",
322
+ "shouldHideOriginal",
323
+ "isNative",
324
+ "urlRegexes",
325
+ "parentSelector"
326
+ ]);
327
+ const wrapperStyle = restProps.wrapperType ? originalWrapperStyle : shouldUseDivWrapper ? originalDivWrapperStyle : { display: "contents" };
328
+ const {
329
+ isMultiple: shouldSearchForManyBannersInParent,
330
+ cssString: bannerCssString,
331
+ parentDepth: bannerParentDepth
332
+ } = adSelector;
333
+ const ourAds = applyQuerySelector(
334
+ isNative ? ourNativeAdQuerySelector : ourBannerAdQuerySelector,
335
+ true,
336
+ parent
337
+ ).reduce((acc, element) => {
338
+ if (acc.some((prevElement) => prevElement.contains(element))) {
339
+ return acc;
340
+ }
341
+ return [...acc.filter((prevElement) => !element.contains(prevElement)), element];
342
+ }, []);
343
+ const ourHiddenAds = ourAds.filter(elementIsHidden);
344
+ console.log("TW-TZKT-ADS:", 1, isNative, parent, insertionsCount, ourAds, ourHiddenAds);
345
+ const ourAdsCount = ourAds.length - ourHiddenAds.length;
346
+ let insertionsLeft = insertionsCount - ourAdsCount;
347
+ const banners = applyQuerySelector(bannerCssString, shouldSearchForManyBannersInParent, parent).map((element) => getParentOfDepth(element, bannerParentDepth)).filter((value) => isTruthy(value) && !elementIsOurAd(value));
348
+ console.log("TW-TZKT-ADS:", 2, shouldHideOriginal, banners);
349
+ banners.forEach((banner) => {
350
+ var _a2;
351
+ const bannerIsHidden = window.getComputedStyle(banner).display === "none";
352
+ if (insertionsLeft <= 0) {
353
+ if (!shouldHideOriginal || !bannerIsHidden) {
354
+ result.push({
355
+ type: shouldHideOriginal ? "hide-element" /* HideElement */ : "remove-element" /* RemoveElement */,
356
+ element: banner
357
+ });
358
+ }
359
+ } else {
360
+ const elementsToMeasure2 = getElementsToMeasure(
361
+ elementsToMeasureSelectors,
362
+ ((_a2 = banner.parentElement) == null ? void 0 : _a2.children.length) === 1 ? banner.parentElement : banner
363
+ );
364
+ const replaceActionBase = __spreadValues({
365
+ type: "replace-element" /* ReplaceElement */,
366
+ element: banner,
367
+ wrapperStyle,
368
+ elementStyle,
369
+ stylesOverrides,
370
+ adCategories: [CRYPTO_CATEGORY_NAME]
371
+ }, restProps);
372
+ const hideActionBase = {
373
+ type: "hide-element" /* HideElement */,
374
+ element: banner
375
+ };
376
+ const insertActionBase = __spreadValues({
377
+ type: "simple-insert-ad" /* SimpleInsertAd */,
378
+ wrapperStyle,
379
+ elementStyle,
380
+ parent: banner.parentElement,
381
+ insertionIndex: Array.from(banner.parentElement.children).indexOf(banner),
382
+ isSiblingReplacement: true,
383
+ stylesOverrides,
384
+ adCategories: [CRYPTO_CATEGORY_NAME]
385
+ }, restProps);
386
+ let actionsToInsert = [];
387
+ const ourAdAlreadyInserted = prevBannerSiblingIsReplacement(banner);
388
+ if (shouldHideOriginal && ourAdAlreadyInserted && !bannerIsHidden) {
389
+ actionsToInsert = [hideActionBase];
390
+ } else if (shouldHideOriginal && !ourAdAlreadyInserted) {
391
+ actionsToInsert = [hideActionBase, insertActionBase];
392
+ } else if (!shouldHideOriginal) {
393
+ actionsToInsert = [replaceActionBase];
394
+ }
395
+ if (actionsToInsert.length > 0 && addActionsIfAdResolutionAvailable(
396
+ elementsToMeasure2,
397
+ "permanent" /* Permanent */,
398
+ isNative,
399
+ [CRYPTO_CATEGORY_NAME],
400
+ ...actionsToInsert
401
+ )) {
402
+ insertionsLeft--;
403
+ }
404
+ }
405
+ });
406
+ if (insertionsLeft <= 0) {
407
+ return;
408
+ }
409
+ let normalizedInsertionIndex = -1;
410
+ let insertionParentElement = parent;
411
+ let elementsToMeasure = { width: parent, height: parent };
412
+ const insertAnchorSelector = insertBeforeSelector || insertAfterSelector;
413
+ if (insertAnchorSelector) {
414
+ const insertAnchorElement = parent.querySelector(insertAnchorSelector);
415
+ const newInsertionParentElement = insertAnchorElement == null ? void 0 : insertAnchorElement.parentElement;
416
+ if (insertAnchorElement && newInsertionParentElement) {
417
+ insertionParentElement = newInsertionParentElement;
418
+ normalizedInsertionIndex = Array.from(parent.children).indexOf(insertAnchorElement) + (insertBeforeSelector ? 0 : 1);
419
+ elementsToMeasure = getElementsToMeasure(elementsToMeasureSelectors, insertAnchorElement);
420
+ }
421
+ } else {
422
+ const insertionIndexWithDefault = insertionIndex != null ? insertionIndex : 0;
423
+ normalizedInsertionIndex = insertionIndexWithDefault < 0 ? Math.max(parent.children.length + insertionIndexWithDefault, 0) : Math.min(insertionIndexWithDefault, parent.children.length);
424
+ elementsToMeasure = getElementsToMeasure(
425
+ elementsToMeasureSelectors,
426
+ (_b = parent.children[normalizedInsertionIndex]) != null ? _b : parent
427
+ );
428
+ }
429
+ if (normalizedInsertionIndex !== -1) {
430
+ const actionBase = __spreadValues({
431
+ type: "simple-insert-ad" /* SimpleInsertAd */,
432
+ wrapperStyle,
433
+ elementStyle,
434
+ parent: insertionParentElement,
435
+ insertionIndex: normalizedInsertionIndex,
436
+ isSiblingReplacement: false,
437
+ stylesOverrides,
438
+ adCategories: [CRYPTO_CATEGORY_NAME]
439
+ }, restProps);
440
+ addActionsIfAdResolutionAvailable(
441
+ elementsToMeasure,
442
+ "permanent" /* Permanent */,
443
+ isNative,
444
+ [CRYPTO_CATEGORY_NAME],
445
+ ...Array(insertionsLeft).fill(actionBase)
446
+ );
447
+ }
448
+ };
449
+ var styleToAdjustProps = [
450
+ "align-items",
451
+ "align-self",
452
+ "bottom",
453
+ "display",
454
+ "flex",
455
+ "flex-grow",
456
+ "flex-shrink",
457
+ "float",
458
+ "justify-content",
459
+ "justify-self",
460
+ "left",
461
+ "margin",
462
+ "max-block-size",
463
+ "max-height",
464
+ "max-inline-size",
465
+ "max-width",
466
+ "min-block-size",
467
+ "min-height",
468
+ "min-inline-size",
469
+ "min-width",
470
+ "padding",
471
+ "position",
472
+ "right",
473
+ "top",
474
+ "vertical-align",
475
+ "z-index"
476
+ ];
477
+ var getSmallestBannersDimensions = lodash.memoize(
478
+ (bannerAdsMeta) => bannerAdsMeta.reduce((acc, { dimensions }) => {
479
+ const result = acc.filter(({ width, height }) => width < dimensions.width || height < dimensions.height);
480
+ if (result.length === 0 || result.some(({ width, height }) => width > dimensions.width || height > dimensions.height)) {
481
+ result.push(dimensions);
482
+ }
483
+ return result;
484
+ }, [])
485
+ );
486
+ var processProvidersAds = (providersSelectors, providersNegativeSelectors, addActionsIfAdResolutionAvailable, result) => __async(void 0, null, function* () {
487
+ const smallestBannersDimensions = getSmallestBannersDimensions(AdsConfiguration.bannerAdsMeta);
488
+ let bannersFromProviders = providersSelectors.map(
489
+ ({ selector: providersSelector, parentDepth, categories }) => applyQuerySelector(providersSelector, true).reduce((acc, foundElement) => {
490
+ var _a;
491
+ const newBanner = (_a = getParentOfDepth(foundElement, parentDepth)) != null ? _a : foundElement;
492
+ const parentElementIndex = acc.findIndex(({ element }) => element.contains(newBanner));
493
+ const parentStyles = newBanner.parentElement && window.getComputedStyle(newBanner.parentElement);
494
+ const { width, height } = getFinalSize(newBanner);
495
+ const bannerIsTouchedByOtherActions = result.some((action) => {
496
+ var _a2;
497
+ if (action.type === "replace-all-children" /* ReplaceAllChildren */ || action.type === "simple-insert-ad" /* SimpleInsertAd */) {
498
+ return action.parent.contains(newBanner) || newBanner.contains(action.parent);
499
+ }
500
+ return ((_a2 = action.element.parentElement) == null ? void 0 : _a2.contains(newBanner)) || newBanner.contains(action.element);
501
+ });
502
+ const bannerIsHiddenByParent = (parentStyles == null ? void 0 : parentStyles.display) === "none" || (parentStyles == null ? void 0 : parentStyles.visibility) === "hidden";
503
+ const hasAnchorParent = parentElementIndex >= 0 && acc[parentElementIndex] instanceof HTMLAnchorElement;
504
+ const canPlaceAds = smallestBannersDimensions.some(
505
+ ({ width: minWidth, height: minHeight }) => width >= minWidth && height >= minHeight
506
+ );
507
+ if (bannerIsTouchedByOtherActions || !canPlaceAds || bannerIsHiddenByParent || hasAnchorParent) {
508
+ return acc;
509
+ }
510
+ const newEntry = { element: newBanner, categories };
511
+ if (parentElementIndex >= 0) {
512
+ acc.splice(parentElementIndex, 1, newEntry);
513
+ } else if (!acc.some(({ element: ancestorCandidate }) => ancestorCandidate.contains(newBanner))) {
514
+ acc.push(newEntry);
515
+ }
516
+ return acc;
517
+ }, [])
518
+ ).flat();
519
+ const bannersFromProvidersToExclude = providersNegativeSelectors.map(
520
+ ({ selector, parentDepth }) => applyQuerySelector(selector, true).map((foundElement) => getParentOfDepth(foundElement, parentDepth)).filter((value) => Boolean(value))
521
+ ).flat();
522
+ bannersFromProviders = bannersFromProviders.filter(({ element }) => !bannersFromProvidersToExclude.includes(element));
523
+ yield Promise.all(
524
+ bannersFromProviders.map((_0) => __async(void 0, [_0], function* ({ element: banner, categories }) {
525
+ var _a, _b, _c, _d, _e, _f, _g, _h;
526
+ yield delay(0);
527
+ const parent = banner.parentElement;
528
+ const { width: bannerStyleWidth, height: bannerStyleHeight } = window.getComputedStyle(banner);
529
+ const elementToMeasure = PX_VALUE_REGEX.test(bannerStyleWidth) && PX_VALUE_REGEX.test(bannerStyleHeight) ? banner : (_b = (_a = parent == null ? void 0 : parent.closest("div, article, aside, footer, header")) != null ? _a : (parent == null ? void 0 : parent.tagName.toLowerCase()) === "body" ? void 0 : parent) != null ? _b : banner;
530
+ if (!elementIsOurAd(banner) && !banner.querySelector(ourAdQuerySelector) && !result.some(
531
+ (action) => action.type === "simple-insert-ad" /* SimpleInsertAd */ ? false : action.type === "replace-all-children" /* ReplaceAllChildren */ ? action.parent.contains(banner) : action.element === banner
532
+ )) {
533
+ const bannerStyleAttribute = (_c = banner.getAttribute("style")) != null ? _c : "";
534
+ const bannerStyleFromAttribute = Object.fromEntries(
535
+ bannerStyleAttribute.split(";").filter(Boolean).map((style) => style.split(":").map((part) => part.trim()))
536
+ );
537
+ if (((_d = bannerStyleFromAttribute.width) == null ? void 0 : _d.match(/^0[a-z]/)) || ((_e = bannerStyleFromAttribute.height) == null ? void 0 : _e.match(/^0[a-z]/))) {
538
+ return;
539
+ }
540
+ const bannerStyle = window.getComputedStyle(banner);
541
+ const wrapperStyle = __spreadValues(__spreadValues({}, Object.fromEntries(styleToAdjustProps.map((propName) => [propName, bannerStyle.getPropertyValue(propName)]))), bannerStyleFromAttribute);
542
+ const hideAction = {
543
+ type: "hide-element" /* HideElement */,
544
+ element: banner
545
+ };
546
+ const insertAdAction = {
547
+ type: "simple-insert-ad" /* SimpleInsertAd */,
548
+ wrapperStyle,
549
+ parent: (_f = banner.parentElement) != null ? _f : document.body,
550
+ insertionIndex: Array.from((_h = (_g = banner.parentElement) == null ? void 0 : _g.children) != null ? _h : []).indexOf(banner),
551
+ isSiblingReplacement: true,
552
+ shouldUseBlurredBackground: true,
553
+ adCategories: categories
554
+ };
555
+ let actions;
556
+ const closestElementWithSiblingReplacement = banner.closest(`[${SIBLING_REPLACEMENT_ATTRIBUTE_NAME}] + *`);
557
+ if (closestElementWithSiblingReplacement && closestElementWithSiblingReplacement !== banner) {
558
+ actions = [
559
+ {
560
+ type: "remove-element" /* RemoveElement */,
561
+ element: closestElementWithSiblingReplacement.previousElementSibling
562
+ },
563
+ hideAction,
564
+ insertAdAction
565
+ ];
566
+ } else if (closestElementWithSiblingReplacement) {
567
+ actions = window.getComputedStyle(banner).display === "none" ? [] : [hideAction];
568
+ } else {
569
+ actions = [hideAction, insertAdAction];
570
+ }
571
+ addActionsIfAdResolutionAvailable(
572
+ { width: elementToMeasure, height: elementToMeasure },
573
+ "provider-replacement" /* ProviderReplacement */,
574
+ false,
575
+ categories,
576
+ ...actions
577
+ );
578
+ }
579
+ }))
580
+ );
581
+ });
582
+
583
+ // src/ads-actions/process-rule.ts
584
+ var processAdPlacesRule = (rule, permanentAdsParents, addActionsIfAdResolutionAvailable) => __async(void 0, null, function* () {
585
+ const { cssString, isMultiple } = rule.selector;
586
+ const selectedElements = applyQuerySelector(cssString, isMultiple);
587
+ yield Promise.all(
588
+ selectedElements.map((selectedElement) => __async(void 0, null, function* () {
589
+ yield delay(0);
590
+ processSelectedElement(selectedElement, rule, permanentAdsParents, addActionsIfAdResolutionAvailable);
591
+ }))
592
+ );
593
+ });
594
+ var processSelectedElement = (selectedElement, rule, permanentAdsParents, addActionsIfAdResolutionAvailable) => {
595
+ const {
596
+ selector: { shouldUseDivWrapper, parentDepth, divWrapperStyle },
597
+ stylesOverrides,
598
+ shouldHideOriginal,
599
+ isNative = false
600
+ } = rule;
601
+ const banner = getParentOfDepth(selectedElement, parentDepth);
602
+ if (!banner || permanentAdsParents.some((parent) => parent.contains(banner)) || elementIsOurAd(banner) || banner.querySelector(ourAdQuerySelector)) {
603
+ return;
604
+ }
605
+ const actionBaseCommonProps = {
606
+ shouldUseDivWrapper,
607
+ wrapperStyle: divWrapperStyle
608
+ };
609
+ let actionsBases;
610
+ if (shouldUseDivWrapper && shouldHideOriginal) {
611
+ const parent = banner.parentElement;
612
+ const bannerIsHidden = window.getComputedStyle(banner).display === "none";
613
+ const insertAdAction = __spreadValues({
614
+ type: "simple-insert-ad" /* SimpleInsertAd */,
615
+ parent,
616
+ insertionIndex: Array.from(parent.children).indexOf(banner),
617
+ stylesOverrides: stylesOverrides == null ? void 0 : stylesOverrides.map((_a) => {
618
+ var _b = _a, { parentDepth: parentDepth2 } = _b, restProps = __objRest(_b, ["parentDepth"]);
619
+ return __spreadProps(__spreadValues({}, restProps), {
620
+ parentDepth: parentDepth2 - 1
621
+ });
622
+ }),
623
+ isSiblingReplacement: true,
624
+ adCategories: [CRYPTO_CATEGORY_NAME]
625
+ }, actionBaseCommonProps);
626
+ actionsBases = [];
627
+ if (!bannerIsHidden) {
628
+ actionsBases.push({ type: "hide-element" /* HideElement */, element: banner });
629
+ }
630
+ if (!prevBannerSiblingIsReplacement(banner)) {
631
+ actionsBases.push(insertAdAction);
632
+ }
633
+ } else if (shouldUseDivWrapper) {
634
+ const replaceElementActionBase = __spreadValues({
635
+ type: "replace-element" /* ReplaceElement */,
636
+ element: banner,
637
+ stylesOverrides: stylesOverrides == null ? void 0 : stylesOverrides.map((_c) => {
638
+ var _d = _c, { parentDepth: parentDepth2 } = _d, restProps = __objRest(_d, ["parentDepth"]);
639
+ return __spreadProps(__spreadValues({}, restProps), {
640
+ parentDepth: parentDepth2 - 1
641
+ });
642
+ }),
643
+ adCategories: [CRYPTO_CATEGORY_NAME]
644
+ }, actionBaseCommonProps);
645
+ actionsBases = [replaceElementActionBase];
646
+ } else if (shouldHideOriginal) {
647
+ const insertAdAction = {
648
+ type: "simple-insert-ad" /* SimpleInsertAd */,
649
+ parent: banner,
650
+ insertionIndex: 0,
651
+ stylesOverrides,
652
+ isSiblingReplacement: true,
653
+ adCategories: [CRYPTO_CATEGORY_NAME],
654
+ wrapperStyle: { display: "contents" }
655
+ };
656
+ actionsBases = Array.from(banner.children).filter((child) => window.getComputedStyle(child).display !== "none").map((child) => ({ type: "hide-element" /* HideElement */, element: child }));
657
+ if (!banner.querySelector(ourAdQuerySelector)) {
658
+ actionsBases.push(insertAdAction);
659
+ }
660
+ } else {
661
+ const replaceAllChildrenActionBase = {
662
+ type: "replace-all-children" /* ReplaceAllChildren */,
663
+ parent: banner,
664
+ stylesOverrides,
665
+ adCategories: [CRYPTO_CATEGORY_NAME],
666
+ wrapperStyle: { display: "contents" }
667
+ };
668
+ actionsBases = [replaceAllChildrenActionBase];
669
+ }
670
+ if (actionsBases.length > 0) {
671
+ addActionsIfAdResolutionAvailable(
672
+ { width: banner, height: banner },
673
+ "slot-replacement" /* SlotReplacement */,
674
+ isNative,
675
+ [CRYPTO_CATEGORY_NAME],
676
+ ...actionsBases
677
+ );
678
+ }
679
+ };
680
+
681
+ // src/ads-actions/index.ts
682
+ var getAdsActions = (_0) => __async(void 0, [_0], function* ({
683
+ providersSelectors,
684
+ providersNegativeSelectors,
685
+ adPlacesRules,
686
+ permanentAdPlacesRules,
687
+ elementsToHideOrRemoveRules
688
+ }) {
689
+ const result = [];
690
+ const addActionsIfAdResolutionAvailable = (elementsToMeasure, adType, adIsNative, categories, ...actionsBases) => {
691
+ if (actionsBases.length > 0 && actionsBases.every(
692
+ (action) => action.type === "hide-element" /* HideElement */ || action.type === "remove-element" /* RemoveElement */
693
+ )) {
694
+ result.push(...actionsBases);
695
+ return true;
696
+ }
697
+ const { width } = getFinalSize(elementsToMeasure.width);
698
+ const { height } = getFinalSize(elementsToMeasure.height);
699
+ const { paddingLeft, paddingRight } = window.getComputedStyle(elementsToMeasure.width);
700
+ const { paddingTop, paddingBottom } = window.getComputedStyle(elementsToMeasure.height);
701
+ const horizontalPadding = sumPxValues([paddingLeft, paddingRight]);
702
+ const innerWidth = horizontalPadding === width ? width : width - horizontalPadding;
703
+ const verticalPadding = sumPxValues([paddingTop, paddingBottom]);
704
+ const innerHeight = verticalPadding === height ? height : height - verticalPadding;
705
+ const adsMetadata = pickAdsToDisplay(innerWidth, innerHeight, adType, adIsNative, categories);
706
+ if (!adsMetadata.length) {
707
+ return false;
708
+ }
709
+ result.push(
710
+ ...actionsBases.map(
711
+ (actionBase) => actionBase.type === "hide-element" /* HideElement */ || actionBase.type === "remove-element" /* RemoveElement */ ? actionBase : __spreadProps(__spreadValues({}, actionBase), { adsMetadata, originalWidth: innerWidth, originalHeight: innerHeight })
712
+ )
713
+ );
714
+ return true;
715
+ };
716
+ let permanentAdsParents = [];
717
+ yield Promise.all(
718
+ elementsToHideOrRemoveRules.map((rule) => __async(void 0, null, function* () {
719
+ yield delay(0);
720
+ processElementsToHideOrRemoveRule(rule, result);
721
+ }))
722
+ );
723
+ yield Promise.all(
724
+ permanentAdPlacesRules.map((rule) => __async(void 0, null, function* () {
725
+ yield delay(0);
726
+ permanentAdsParents = permanentAdsParents.concat(
727
+ yield processPermanentAdPlacesRule(rule, addActionsIfAdResolutionAvailable, result)
728
+ );
729
+ }))
730
+ );
731
+ yield Promise.all(
732
+ adPlacesRules.map((rule) => __async(void 0, null, function* () {
733
+ yield delay(0);
734
+ yield processAdPlacesRule(rule, permanentAdsParents, addActionsIfAdResolutionAvailable);
735
+ }))
736
+ );
737
+ yield processProvidersAds(providersSelectors, providersNegativeSelectors, addActionsIfAdResolutionAvailable, result);
738
+ return result;
739
+ });
740
+
741
+ // src/types/ads-provider.ts
742
+ var AdsProviderTitle = /* @__PURE__ */ ((AdsProviderTitle2) => {
743
+ AdsProviderTitle2["Optimal"] = "Optimal";
744
+ AdsProviderTitle2["SmartyAds"] = "SmartyAds";
745
+ AdsProviderTitle2["HypeLab"] = "HypeLab";
746
+ AdsProviderTitle2["Persona"] = "Persona";
747
+ AdsProviderTitle2["Temple"] = "Temple Wallet";
748
+ return AdsProviderTitle2;
749
+ })(AdsProviderTitle || {});
750
+
751
+ // src/execute-ads-actions/observing.ts
752
+ var loadingAdsIds = /* @__PURE__ */ new Set();
753
+ var loadedAdsIds = /* @__PURE__ */ new Set();
754
+ var alreadySentAnalyticsAdsIds = /* @__PURE__ */ new Set();
755
+ var subscribeToAdsStackIframeLoadIfNecessary = (element) => __async(void 0, null, function* () {
756
+ const adId = element.id;
757
+ if (loadingAdsIds.has(adId)) {
758
+ return;
759
+ }
760
+ loadingAdsIds.add(adId);
761
+ return new Promise((resolve, reject) => {
762
+ let adIsNative = false;
763
+ const messageListener = (event) => {
764
+ var _a, _b;
765
+ if (event.source !== element.contentWindow)
766
+ return;
767
+ try {
768
+ const data = typeof event.data === "string" ? JSON.parse(event.data) : event.data;
769
+ if (data.id !== adId)
770
+ return;
771
+ const horizontalBordersWidth = element.offsetWidth - element.clientWidth;
772
+ const verticalBordersWidth = element.offsetHeight - element.clientHeight;
773
+ switch (data.type) {
774
+ case AD_READY_MESSAGE_TYPE:
775
+ resolve(data.adMetadata.source.providerName);
776
+ break;
777
+ case AD_ERROR_MESSAGE_TYPE:
778
+ console.log("YAY!", data.reason);
779
+ window.removeEventListener("message", messageListener);
780
+ element.style.display = "none";
781
+ reject(new Error((_a = data.reason) != null ? _a : "Unknown error"));
782
+ break;
783
+ case AD_RENDER_START_MESSAGE_TYPE:
784
+ const { dimensions, source } = data.adMetadata;
785
+ adIsNative = (_b = source.native) != null ? _b : false;
786
+ const { width, height } = dimensions;
787
+ if (width > 0 && height > 0) {
788
+ if (source.native) {
789
+ element.style.height = `${height}px`;
790
+ } else {
791
+ extendOrKeepDimension(element, "width", width);
792
+ extendOrKeepDimension(element, "height", height);
793
+ }
794
+ }
795
+ break;
796
+ case AD_RESIZE_MESSAGE_TYPE:
797
+ const { width: newWidth, height: newHeight } = data;
798
+ if (adIsNative) {
799
+ element.style.height = `${newHeight + verticalBordersWidth}px`;
800
+ } else {
801
+ extendOrKeepDimension(element, "width", newWidth + horizontalBordersWidth);
802
+ extendOrKeepDimension(element, "height", newHeight + verticalBordersWidth);
803
+ }
804
+ }
805
+ } catch (error) {
806
+ console.error("Observing error:", error);
807
+ }
808
+ };
809
+ window.addEventListener("message", messageListener);
810
+ }).then((providerName) => {
811
+ if (loadedAdsIds.has(adId))
812
+ return;
813
+ loadedAdsIds.add(adId);
814
+ const adIsSeen = adRectIsSeen(element);
815
+ if (adIsSeen) {
816
+ sendExternalAdsActivity(adId, providerName);
817
+ } else {
818
+ observeIntersection(element, providerName);
819
+ }
820
+ }).catch((e) => {
821
+ console.error(e);
822
+ throw e;
823
+ }).finally(() => void loadingAdsIds.delete(adId));
824
+ });
825
+ var observeIntersection = (element, providerName) => {
826
+ const observer = new IntersectionObserver(
827
+ (entries) => {
828
+ if (entries.some((entry) => entry.isIntersecting)) {
829
+ sendExternalAdsActivity(element.id, providerName);
830
+ observer.disconnect();
831
+ }
832
+ },
833
+ { threshold: AD_SEEN_THRESHOLD }
834
+ );
835
+ observer.observe(element);
836
+ };
837
+ var sendExternalAdsActivity = (adId, providerName) => {
838
+ if (alreadySentAnalyticsAdsIds.has(adId)) {
839
+ return;
840
+ }
841
+ alreadySentAnalyticsAdsIds.add(adId);
842
+ const url = window.parent.location.href;
843
+ browser__default.default.runtime.sendMessage({
844
+ type: AdsConfiguration.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,
845
+ url,
846
+ provider: AdsProviderTitle[providerName]
847
+ }).catch((err) => void console.error(err));
848
+ };
849
+ var adRectIsSeen = (element) => {
850
+ const elementRect = element.getBoundingClientRect();
851
+ const viewport = window.visualViewport;
852
+ if (!viewport) {
853
+ return false;
854
+ }
855
+ const intersectionX0 = Math.min(Math.max(0, elementRect.x), viewport.width);
856
+ const intersectionX1 = Math.min(Math.max(0, elementRect.x + elementRect.width), viewport.width);
857
+ const intersectionY0 = Math.min(Math.max(0, elementRect.y), viewport.height);
858
+ const intersectionY1 = Math.min(Math.max(0, elementRect.y + elementRect.height), viewport.height);
859
+ const elementArea = elementRect.width * elementRect.height;
860
+ const intersectionArea = (intersectionX1 - intersectionX0) * (intersectionY1 - intersectionY0);
861
+ return intersectionArea / elementArea >= AD_SEEN_THRESHOLD;
862
+ };
863
+
864
+ // src/execute-ads-actions/override-element-styles.ts
865
+ var overrideElementStyles = (element, overrides) => {
866
+ for (const stylePropName in overrides) {
867
+ element.style.setProperty(stylePropName, overrides[stylePropName]);
868
+ }
869
+ };
870
+
871
+ // src/execute-ads-actions/process-insert-ad-action.ts
872
+ var adjustToAd = (wrapperElement, adDimensions) => {
873
+ const predefinedStylesKeyToOverride = ["width", "height"];
874
+ predefinedStylesKeyToOverride.forEach((dimensionName) => {
875
+ var _a;
876
+ const predefinedStyleValue = (_a = wrapperElement.style[dimensionName]) != null ? _a : "";
877
+ if (PX_VALUE_REGEX.test(predefinedStyleValue)) {
878
+ const predefinedSize = parseInt(predefinedStyleValue, 10);
879
+ if (predefinedSize < adDimensions[dimensionName]) {
880
+ wrapperElement.style.removeProperty(dimensionName);
881
+ }
882
+ }
883
+ });
884
+ };
885
+ var processInsertAdActionOnce = (action, wrapperElement, insertionPoint, onAdsStackError) => __async(void 0, null, function* () {
886
+ const {
887
+ elementStyle = {},
888
+ stylesOverrides = [],
889
+ adsMetadata,
890
+ wrapperType,
891
+ originalHeight,
892
+ originalWidth,
893
+ shouldUseBlurredBackground,
894
+ adCategories
895
+ } = action;
896
+ stylesOverrides.sort((a, b) => a.parentDepth - b.parentDepth);
897
+ let stylesOverridesCurrentElement;
898
+ const adId = nanoid.nanoid();
899
+ const adElement = document.createElement("iframe");
900
+ adElement.loading = "lazy";
901
+ adElement.src = AdsConfiguration.getAdsStackIframeURL(adId, adsMetadata, window.location.href, adCategories);
902
+ adElement.id = adId;
903
+ adElement.allow = IFRAME_ALLOWANCE;
904
+ const firstAdMetadataOrId = adsMetadata[0];
905
+ const { dimensions: minDimensions } = typeof firstAdMetadataOrId === "number" ? AdsConfiguration.bannerAdsMeta[firstAdMetadataOrId] : firstAdMetadataOrId;
906
+ const dimensions = {
907
+ width: shouldUseBlurredBackground ? Math.max(originalWidth, minDimensions.width) : minDimensions.width,
908
+ height: shouldUseBlurredBackground ? Math.max(originalHeight, minDimensions.height) : minDimensions.height
909
+ };
910
+ adElement.style.width = wrapperType === "tbody" ? "100%" : `${dimensions.width}px`;
911
+ adElement.style.height = `${dimensions.height}px`;
912
+ adElement.style.border = "none";
913
+ for (const styleProp in elementStyle) {
914
+ adElement.style.setProperty(styleProp, elementStyle[styleProp]);
915
+ }
916
+ adElement.setAttribute(TEMPLE_WALLET_AD_ATTRIBUTE_NAME, "true");
917
+ adjustToAd(wrapperElement, dimensions);
918
+ insertionPoint.appendChild(adElement);
919
+ switch (action.type) {
920
+ case "replace-all-children" /* ReplaceAllChildren */:
921
+ stylesOverridesCurrentElement = action.parent;
922
+ action.parent.innerHTML = "";
923
+ action.parent.appendChild(wrapperElement);
924
+ break;
925
+ case "replace-element" /* ReplaceElement */:
926
+ stylesOverridesCurrentElement = action.element.parentElement;
927
+ action.element.replaceWith(wrapperElement);
928
+ break;
929
+ default:
930
+ const nextSibling = action.parent.children[action.insertionIndex];
931
+ if (action.isSiblingReplacement) {
932
+ wrapperElement.setAttribute(SIBLING_REPLACEMENT_ATTRIBUTE_NAME, "true");
933
+ const observer = new MutationObserver((mutations) => {
934
+ const hasRemoveSiblingMutation = mutations.some(
935
+ (mutation) => Array.from(mutation.removedNodes).includes(nextSibling)
936
+ );
937
+ if (hasRemoveSiblingMutation) {
938
+ wrapperElement.remove();
939
+ observer.disconnect();
940
+ }
941
+ });
942
+ observer.observe(action.parent, { childList: true });
943
+ }
944
+ stylesOverridesCurrentElement = action.parent;
945
+ action.parent.insertBefore(wrapperElement, nextSibling);
946
+ break;
947
+ }
948
+ if (wrapperType !== "tbody") {
949
+ const {
950
+ borderLeftWidth: adElementBLWidth,
951
+ borderRightWidth: adElementBRWidth,
952
+ borderTopWidth: adElementBTWidth,
953
+ borderBottomWidth: adElementBBWidth
954
+ } = window.getComputedStyle(adElement);
955
+ const {
956
+ borderLeftWidth: wrapperElementBLWidth,
957
+ borderRightWidth: wrapperElementBRWidth,
958
+ borderTopWidth: wrapperElementBTWidth,
959
+ borderBottomWidth: wrapperElementBBWidth
960
+ } = window.getComputedStyle(wrapperElement);
961
+ const horizontalBordersWidth = sumPxValues([
962
+ adElementBLWidth,
963
+ adElementBRWidth,
964
+ wrapperElementBLWidth,
965
+ wrapperElementBRWidth
966
+ ]);
967
+ const verticalBordersWidth = sumPxValues([
968
+ adElementBTWidth,
969
+ adElementBBWidth,
970
+ wrapperElementBTWidth,
971
+ wrapperElementBBWidth
972
+ ]);
973
+ adElement.style.width = `${dimensions.width - horizontalBordersWidth}px`;
974
+ adElement.style.height = `${dimensions.height - verticalBordersWidth}px`;
975
+ }
976
+ subscribeToAdsStackIframeLoadIfNecessary(adElement).catch(onAdsStackError);
977
+ let currentParentDepth = 0;
978
+ stylesOverrides.forEach(({ parentDepth, style }) => {
979
+ while (parentDepth > currentParentDepth && stylesOverridesCurrentElement) {
980
+ stylesOverridesCurrentElement = stylesOverridesCurrentElement.parentElement;
981
+ currentParentDepth++;
982
+ }
983
+ if (stylesOverridesCurrentElement) {
984
+ overrideElementStyles(stylesOverridesCurrentElement, style);
985
+ }
986
+ });
987
+ });
988
+ var processInsertAdAction = (action) => __async(void 0, null, function* () {
989
+ const { wrapperStyle = {}, adsMetadata, wrapperType = "div", colsAfter = 0, colsBefore = 0, colspan = 1 } = action;
990
+ const isNativeAd = adsMetadata.every((adMetadata) => typeof adMetadata === "object");
991
+ let wrapperElement;
992
+ let insertionPoint;
993
+ if (wrapperType === "div") {
994
+ wrapperElement = document.createElement("div");
995
+ insertionPoint = wrapperElement;
996
+ } else {
997
+ wrapperElement = document.createElement("tbody");
998
+ const row = document.createElement("tr");
999
+ wrapperElement.appendChild(row);
1000
+ for (let i = 0; i < colsBefore; i++) {
1001
+ row.appendChild(document.createElement("td"));
1002
+ }
1003
+ const cell = document.createElement("td");
1004
+ cell.colSpan = colspan;
1005
+ row.appendChild(cell);
1006
+ insertionPoint = cell;
1007
+ for (let i = 0; i < colsAfter; i++) {
1008
+ row.appendChild(document.createElement("td"));
1009
+ }
1010
+ }
1011
+ wrapperElement.setAttribute(TEMPLE_WALLET_AD_ATTRIBUTE_NAME, "true");
1012
+ if (isNativeAd) {
1013
+ wrapperElement.setAttribute(TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME, "true");
1014
+ }
1015
+ overrideElementStyles(wrapperElement, wrapperStyle);
1016
+ const hideFailedAd = () => {
1017
+ const emptyAdElement = document.createElement("div");
1018
+ emptyAdElement.setAttribute(TEMPLE_WALLET_AD_ATTRIBUTE_NAME, "true");
1019
+ if (isNativeAd) {
1020
+ emptyAdElement.setAttribute(TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME, "true");
1021
+ }
1022
+ console.log("HIDE:", action);
1023
+ if (action.type === "simple-insert-ad" /* SimpleInsertAd */ && action.isSiblingReplacement) {
1024
+ emptyAdElement.setAttribute(SIBLING_REPLACEMENT_ATTRIBUTE_NAME, "true");
1025
+ }
1026
+ emptyAdElement.style.display = "none";
1027
+ wrapperElement.replaceWith(emptyAdElement);
1028
+ };
1029
+ yield processInsertAdActionOnce(action, wrapperElement, insertionPoint, (error) => {
1030
+ console.error("Failed to render ads", error);
1031
+ hideFailedAd();
1032
+ }).catch((error) => {
1033
+ console.error("Inserting an ad attempt error:", error);
1034
+ hideFailedAd();
1035
+ throw error;
1036
+ });
1037
+ });
1038
+
1039
+ // src/execute-ads-actions/index.ts
1040
+ var executeAdsActions = (adsActions) => Promise.allSettled(
1041
+ adsActions.map((action) => __async(void 0, null, function* () {
1042
+ if (action.type === "remove-element" /* RemoveElement */) {
1043
+ action.element.remove();
1044
+ } else if (action.type === "hide-element" /* HideElement */) {
1045
+ action.element.style.setProperty("display", "none", "important");
1046
+ } else {
1047
+ yield processInsertAdAction(action);
1048
+ }
1049
+ }))
1050
+ );
1051
+
1052
+ // src/execute-ads-actions/ads-views/make-tkey-ad.ts
1053
+ var makeTKeyAdView = (width, height, isNative = false) => {
1054
+ const element = document.createElement("div");
1055
+ element.style.width = `${width}px`;
1056
+ element.style.height = `${height}px`;
1057
+ const div = document.createElement("div");
1058
+ div.style.width = `${width}px`;
1059
+ div.style.height = `${height}px`;
1060
+ element.appendChild(div);
1061
+ if (isNative) {
1062
+ const anchor2 = document.createElement("a");
1063
+ anchor2.href = AdsConfiguration.SWAP_TKEY_URL;
1064
+ anchor2.target = "_blank";
1065
+ anchor2.rel = "noopener noreferrer";
1066
+ anchor2.style.width = `${width}px`;
1067
+ anchor2.style.height = `${height}px`;
1068
+ anchor2.style.overflow = "hidden";
1069
+ anchor2.style.textOverflow = "ellipsis";
1070
+ anchor2.appendChild(document.createTextNode("TODO: Native TKEY ad"));
1071
+ div.appendChild(anchor2);
1072
+ return { element };
1073
+ }
1074
+ const anchor = document.createElement("a");
1075
+ anchor.href = AdsConfiguration.SWAP_TKEY_URL;
1076
+ anchor.target = "_blank";
1077
+ anchor.rel = "noopener noreferrer";
1078
+ anchor.style.width = "100%";
1079
+ anchor.style.height = "100%";
1080
+ div.appendChild(anchor);
1081
+ const img = document.createElement("img");
1082
+ img.src = width <= 320 ? AdsConfiguration.SMALL_TKEY_INPAGE_AD_URL : AdsConfiguration.TKEY_INPAGE_AD_URL;
1083
+ img.style.width = "100%";
1084
+ img.style.height = "100%";
1085
+ anchor.appendChild(img);
1086
+ return { element, creativeSet: { image: { url: img.src } } };
1087
+ };
1088
+ var makeAdsTwView = (id, source, { width, height }, origin) => {
1089
+ const iframe = document.createElement("iframe");
1090
+ iframe.id = id;
1091
+ iframe.src = getAdsTwUrl(source, origin, width, height, iframe.id);
1092
+ iframe.style.width = source.native ? "100%" : `${width}px`;
1093
+ iframe.style.height = `${height}px`;
1094
+ iframe.style.border = "none";
1095
+ iframe.allow = IFRAME_ALLOWANCE;
1096
+ return { element: iframe };
1097
+ };
1098
+ var getAdsTwUrl = (source, origin, width, height, id) => {
1099
+ const { providerName, slug, native } = source;
1100
+ const url = new URL(AdsConfiguration.ADS_TW_WINDOW_URL);
1101
+ url.searchParams.set("ap", providerName.toLowerCase());
1102
+ if (native) {
1103
+ url.searchParams.set("vh", String(height));
1104
+ } else {
1105
+ url.searchParams.set("w", String(width));
1106
+ }
1107
+ url.searchParams.set("h", String(height));
1108
+ url.searchParams.set("p", slug);
1109
+ url.searchParams.set("o", encryptWithAES(origin));
1110
+ if (id) {
1111
+ url.searchParams.set("id", id);
1112
+ }
1113
+ return url.toString();
1114
+ };
1115
+ var encryptWithAES = (text) => cryptoJs.AES.encrypt(text, AdsConfiguration.TEMPLE_PASSPHRASE).toString();
1116
+
1117
+ // src/execute-ads-actions/ads-views/make-extension-iframe-view.ts
1118
+ var makeExtensionIframeView = (id, source, { width, height }) => {
1119
+ const element = document.createElement("iframe");
1120
+ let iframePath = "";
1121
+ switch (source.providerName) {
1122
+ case "Persona":
1123
+ iframePath = AdsConfiguration.personaIframePath;
1124
+ break;
1125
+ default:
1126
+ throw new Error(`Ads from ${source.providerName} are unavailable via extension iframe`);
1127
+ }
1128
+ const iframeUrl = new URL(iframePath);
1129
+ iframeUrl.searchParams.set("id", id);
1130
+ iframeUrl.searchParams.set("slug", source.slug);
1131
+ element.src = iframeUrl.toString();
1132
+ element.id = id;
1133
+ element.style.width = `${width}px`;
1134
+ element.style.height = `${height}px`;
1135
+ element.style.border = "none";
1136
+ return { element };
1137
+ };
1138
+
1139
+ // src/render-ads-stack.ts
1140
+ var AdsStack = class {
1141
+ constructor(id, initialAdsMetadata, origin, pageHasPlacesRules, adCategories, hypelabBlacklistedCampaignsSlugs) {
1142
+ this.id = id;
1143
+ this.origin = origin;
1144
+ this.pageHasPlacesRules = pageHasPlacesRules;
1145
+ this.adCategories = adCategories;
1146
+ this.hypelabBlacklistedCampaignsSlugs = hypelabBlacklistedCampaignsSlugs;
1147
+ this.wasReady = false;
1148
+ this.rootElement = document.getElementById("root");
1149
+ this.validAdsCounter = 0;
1150
+ this.adsMetadata = initialAdsMetadata.map(
1151
+ (adMetadataOrId) => typeof adMetadataOrId === "number" ? AdsConfiguration.bannerAdsMeta[adMetadataOrId] : adMetadataOrId
1152
+ );
1153
+ }
1154
+ startRendering() {
1155
+ if (this.adsMetadata.length === 0) {
1156
+ this.broadcastNoMoreAds();
1157
+ return;
1158
+ }
1159
+ this.currentAdMetadata = AdsConfiguration.pickNextAdMetadata(
1160
+ this.adsMetadata,
1161
+ this.currentAdMetadata,
1162
+ this.validAdsCounter,
1163
+ this.pageHasPlacesRules,
1164
+ this.adCategories
1165
+ );
1166
+ const adMetadata = this.currentAdMetadata;
1167
+ if (!adMetadata) {
1168
+ this.broadcastNoMoreAds();
1169
+ return;
1170
+ }
1171
+ this.broadcastMessage({ id: this.id, type: AD_RENDER_START_MESSAGE_TYPE, adMetadata: this.currentAdMetadata });
1172
+ const { element, creativeSet: initialCreativeSet } = this.placeNewAd(adMetadata);
1173
+ if (element instanceof HTMLIFrameElement) {
1174
+ this.listenToIframeMessages(element, adMetadata);
1175
+ } else {
1176
+ this.handleValidAd({ ad: { creative_set: initialCreativeSet } });
1177
+ }
1178
+ }
1179
+ listenToIframeMessages(element, adMetadata) {
1180
+ const nextAdMetadata = AdsConfiguration.pickNextAdMetadata(
1181
+ this.adsMetadata,
1182
+ adMetadata,
1183
+ this.validAdsCounter,
1184
+ this.pageHasPlacesRules,
1185
+ this.adCategories
1186
+ );
1187
+ this.responseTimeout = setTimeout(
1188
+ () => {
1189
+ console.error(`Timeout exceeded for ${this.id}, ad source: ${JSON.stringify(adMetadata.source)}`);
1190
+ this.handleInvalidAd();
1191
+ },
1192
+ (nextAdMetadata ? 1e4 : 2e4) * (AdsConfiguration.IS_MISES_BROWSER ? 2 : 1)
1193
+ );
1194
+ this.messageListener = (event) => {
1195
+ var _a;
1196
+ if (event.source !== element.contentWindow) {
1197
+ return;
1198
+ }
1199
+ try {
1200
+ const data = typeof event.data === "string" ? JSON.parse(event.data) : event.data;
1201
+ switch (data.type) {
1202
+ case AD_READY_MESSAGE_TYPE:
1203
+ if (adMetadata.source.providerName === "HypeLab" && this.hypelabBlacklistedCampaignsSlugs.includes((_a = data.ad) == null ? void 0 : _a.campaign_slug) && nextAdMetadata) {
1204
+ this.handleInvalidAd();
1205
+ break;
1206
+ }
1207
+ this.handleValidAd(data);
1208
+ break;
1209
+ case AD_ERROR_MESSAGE_TYPE:
1210
+ if (!this.wasReady) {
1211
+ this.handleInvalidAd();
1212
+ }
1213
+ break;
1214
+ case AD_RESIZE_MESSAGE_TYPE:
1215
+ const { width, height } = data;
1216
+ if (width > 0 && height > 0) {
1217
+ if (adMetadata.source.native) {
1218
+ element.style.height = `${height}px`;
1219
+ } else {
1220
+ extendOrKeepDimension(element, "width", width);
1221
+ extendOrKeepDimension(element, "height", height);
1222
+ }
1223
+ this.broadcastMessage(__spreadProps(__spreadValues({}, data), { id: this.id }));
1224
+ }
1225
+ }
1226
+ } catch (error) {
1227
+ console.error("Message handling error:", error);
1228
+ }
1229
+ };
1230
+ window.addEventListener("message", this.messageListener);
1231
+ }
1232
+ handleInvalidAd() {
1233
+ this.removeMessageListener();
1234
+ this.clearResponseTimeout();
1235
+ this.startRendering();
1236
+ this.validAdsCounter = 0;
1237
+ }
1238
+ removeMessageListener() {
1239
+ if (!this.messageListener)
1240
+ return;
1241
+ window.removeEventListener("message", this.messageListener);
1242
+ this.messageListener = void 0;
1243
+ }
1244
+ placeNewAd(adMetadata) {
1245
+ document.body.style.backgroundColor = adMetadata.source.native ? "transparent" : "#F2F2F2";
1246
+ const { source, dimensions } = adMetadata;
1247
+ let adView;
1248
+ switch (source.providerName) {
1249
+ case "Temple":
1250
+ adView = makeTKeyAdView(dimensions.width, dimensions.height, source.native);
1251
+ break;
1252
+ case "HypeLab":
1253
+ case "SmartyAds":
1254
+ adView = makeAdsTwView(this.id, source, dimensions, this.origin);
1255
+ break;
1256
+ default:
1257
+ adView = makeExtensionIframeView(this.id, source, dimensions);
1258
+ }
1259
+ const { element } = adView;
1260
+ const templeLabelElement = document.getElementById("temple-label");
1261
+ this.rootElement.replaceChildren(element);
1262
+ if (!source.native)
1263
+ templeLabelElement.setAttribute("active", "");
1264
+ else
1265
+ templeLabelElement.removeAttribute("active");
1266
+ return adView;
1267
+ }
1268
+ updateBackground(source, creativeSet = {}) {
1269
+ const prevBackgroundElement = document.getElementById(BACKGROUND_ELEMENT_ID);
1270
+ if (source.native && prevBackgroundElement) {
1271
+ this.rootElement.removeChild(prevBackgroundElement);
1272
+ }
1273
+ if (source.native) {
1274
+ return;
1275
+ }
1276
+ try {
1277
+ const { image, video } = creativeSet;
1278
+ let backgroundElement;
1279
+ if (image) {
1280
+ backgroundElement = document.createElement("img");
1281
+ backgroundElement.src = image.url;
1282
+ backgroundElement.alt = "";
1283
+ } else if (video) {
1284
+ backgroundElement = document.createElement("video");
1285
+ backgroundElement.src = video.url;
1286
+ backgroundElement.autoplay = true;
1287
+ backgroundElement.preload = "auto";
1288
+ backgroundElement.playsInline = true;
1289
+ backgroundElement.muted = true;
1290
+ backgroundElement.loop = true;
1291
+ }
1292
+ if (!backgroundElement && prevBackgroundElement) {
1293
+ this.rootElement.removeChild(prevBackgroundElement);
1294
+ }
1295
+ if (!backgroundElement)
1296
+ return;
1297
+ backgroundElement.id = BACKGROUND_ELEMENT_ID;
1298
+ backgroundElement.style.zIndex = "-1";
1299
+ overrideElementStyles(backgroundElement, {
1300
+ position: "absolute",
1301
+ top: "0px",
1302
+ left: "0px",
1303
+ right: "0px",
1304
+ bottom: "0px",
1305
+ width: "100%",
1306
+ height: "100%",
1307
+ "object-fit": "cover",
1308
+ filter: "blur(12px)"
1309
+ });
1310
+ if (prevBackgroundElement) {
1311
+ this.rootElement.replaceChild(backgroundElement, prevBackgroundElement);
1312
+ } else {
1313
+ this.rootElement.prepend(backgroundElement);
1314
+ }
1315
+ } catch (e) {
1316
+ console.error(e);
1317
+ }
1318
+ document.body.style.backgroundColor = "transparent";
1319
+ }
1320
+ broadcastMessage(content) {
1321
+ window.parent.postMessage(JSON.stringify(content), "*");
1322
+ }
1323
+ broadcastNoMoreAds() {
1324
+ this.broadcastMessage({ id: this.id, type: AD_ERROR_MESSAGE_TYPE, reason: "No more ads to render" });
1325
+ }
1326
+ clearResponseTimeout() {
1327
+ if (this.responseTimeout !== void 0) {
1328
+ clearTimeout(this.responseTimeout);
1329
+ this.responseTimeout = void 0;
1330
+ }
1331
+ }
1332
+ handleValidAd(data) {
1333
+ var _a;
1334
+ const adMetadata = this.currentAdMetadata;
1335
+ if (!adMetadata) {
1336
+ return;
1337
+ }
1338
+ if (!this.wasReady) {
1339
+ this.wasReady = true;
1340
+ this.broadcastMessage({ id: this.id, type: AD_READY_MESSAGE_TYPE, adMetadata });
1341
+ }
1342
+ this.validAdsCounter++;
1343
+ this.clearResponseTimeout();
1344
+ this.updateBackground(adMetadata.source, (_a = data.ad) == null ? void 0 : _a.creative_set);
1345
+ }
1346
+ };
1347
+ var renderAdsStack = (adId, adsMetadata, origin, pageHasPlacesRules = false, adCategories, hypelabBlacklistedCampaignsSlugs) => {
1348
+ try {
1349
+ const adsStack = new AdsStack(
1350
+ adId,
1351
+ adsMetadata,
1352
+ origin,
1353
+ pageHasPlacesRules,
1354
+ adCategories,
1355
+ hypelabBlacklistedCampaignsSlugs
1356
+ );
1357
+ adsStack.startRendering();
1358
+ } catch (error) {
1359
+ console.error("Error while rendering ads stack:", error);
1360
+ }
1361
+ };
1362
+ var transformRawRules = (locationOrHref, rules) => {
1363
+ const {
1364
+ adPlacesRulesForAllDomains,
1365
+ providersRulesForAllDomains,
1366
+ providersSelectors,
1367
+ providersNegativeSelectors = {},
1368
+ providersToReplaceAtAllSites,
1369
+ permanentAdPlacesRulesForAllDomains,
1370
+ permanentNativeAdPlacesRulesForAllDomains = {},
1371
+ adsReplaceUrlsBlacklist = [],
1372
+ elementsToHideOrRemoveRules = {},
1373
+ providersCategories = {},
1374
+ blacklistedHypelabCampaignsSlugs = [],
1375
+ timestamp
1376
+ } = rules;
1377
+ const href = typeof locationOrHref === "string" ? locationOrHref : locationOrHref.href;
1378
+ const { hostname } = new URL(href);
1379
+ if (adsReplaceUrlsBlacklist.some((regex) => new RegExp(regex).test(href))) {
1380
+ return {
1381
+ adPlacesRules: [],
1382
+ permanentAdPlacesRules: [],
1383
+ providersSelectors: [],
1384
+ providersNegativeSelectors: [],
1385
+ elementsToHideOrRemoveRules: [],
1386
+ blacklistedHypelabCampaignsSlugs,
1387
+ timestamp
1388
+ };
1389
+ }
1390
+ const hrefWithoutHash = href.replace(/#.*$/, "");
1391
+ const hrefMatchPredicate = (regex) => {
1392
+ const hrefToTest = regex.source.includes("#") ? href : hrefWithoutHash;
1393
+ return regex.test(hrefToTest);
1394
+ };
1395
+ return {
1396
+ adPlacesRules: buildAdPlacesRules(hostname, hrefMatchPredicate, adPlacesRulesForAllDomains),
1397
+ permanentAdPlacesRules: buildPermanentAdPlacesRules(
1398
+ hostname,
1399
+ hrefMatchPredicate,
1400
+ permanentAdPlacesRulesForAllDomains,
1401
+ permanentNativeAdPlacesRulesForAllDomains
1402
+ ),
1403
+ providersSelectors: buildProvidersSelectors(
1404
+ hostname,
1405
+ hrefMatchPredicate,
1406
+ providersRulesForAllDomains,
1407
+ providersSelectors,
1408
+ providersToReplaceAtAllSites,
1409
+ providersCategories
1410
+ ),
1411
+ providersNegativeSelectors: buildProvidersSelectors(
1412
+ hostname,
1413
+ hrefMatchPredicate,
1414
+ providersRulesForAllDomains,
1415
+ providersNegativeSelectors,
1416
+ providersToReplaceAtAllSites,
1417
+ providersCategories
1418
+ ),
1419
+ elementsToHideOrRemoveRules: buildElementsToHideOrRemoveRules(
1420
+ hostname,
1421
+ hrefMatchPredicate,
1422
+ elementsToHideOrRemoveRules
1423
+ ),
1424
+ blacklistedHypelabCampaignsSlugs,
1425
+ timestamp
1426
+ };
1427
+ };
1428
+ var buildElementsToHideOrRemoveRules = (hostname, hrefMatchPredicate, elementsToHideOrRemoveRules) => {
1429
+ var _a;
1430
+ return ((_a = elementsToHideOrRemoveRules[hostname]) != null ? _a : []).map((_b) => {
1431
+ var _c = _b, { urlRegexes } = _c, restRuleProps = __objRest(_c, ["urlRegexes"]);
1432
+ return __spreadProps(__spreadValues({}, restRuleProps), {
1433
+ urlRegexes: urlRegexes.map((regex) => new RegExp(regex))
1434
+ });
1435
+ }).filter(({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate));
1436
+ };
1437
+ var buildAdPlacesRules = (hostname, hrefMatchPredicate, adPlacesRulesForAllDomains) => {
1438
+ var _a;
1439
+ const adPlacesRules = ((_a = adPlacesRulesForAllDomains[hostname]) != null ? _a : []).map((_b) => {
1440
+ var _c = _b, { urlRegexes } = _c, restRuleProps = __objRest(_c, ["urlRegexes"]);
1441
+ return __spreadProps(__spreadValues({}, restRuleProps), {
1442
+ urlRegexes: urlRegexes.map((regex) => new RegExp(regex))
1443
+ });
1444
+ });
1445
+ const aggregatedRelatedAdPlacesRules = adPlacesRules.reduce(
1446
+ (acc, _d) => {
1447
+ var _e = _d, { urlRegexes, selector } = _e, restProps = __objRest(_e, ["urlRegexes", "selector"]);
1448
+ if (!urlRegexes.some(hrefMatchPredicate))
1449
+ return acc;
1450
+ const _a2 = selector, { cssString } = _a2, restSelectorProps = __objRest(_a2, ["cssString"]);
1451
+ const ruleToComplementIndex = acc.findIndex((_b) => {
1452
+ var _c = _b, { selector: candidateSelector } = _c, candidateRestProps = __objRest(_c, ["selector"]);
1453
+ const _a3 = candidateSelector, restCandidateSelectorProps = __objRest(_a3, ["cssString"]);
1454
+ return lodash.isEqual(restSelectorProps, restCandidateSelectorProps) && lodash.isEqual(restProps, candidateRestProps);
1455
+ });
1456
+ if (ruleToComplementIndex === -1) {
1457
+ acc.push(__spreadValues({ selector }, restProps));
1458
+ } else {
1459
+ acc[ruleToComplementIndex].selector.cssString += ", ".concat(cssString);
1460
+ }
1461
+ return acc;
1462
+ },
1463
+ []
1464
+ );
1465
+ return aggregatedRelatedAdPlacesRules;
1466
+ };
1467
+ var makePermanentAdRuleTransformationFn = (isNative) => (_a) => {
1468
+ var _b = _a, {
1469
+ urlRegexes,
1470
+ elementToMeasureSelector,
1471
+ elementsToMeasureSelectors
1472
+ } = _b, restRuleProps = __objRest(_b, [
1473
+ "urlRegexes",
1474
+ "elementToMeasureSelector",
1475
+ "elementsToMeasureSelectors"
1476
+ ]);
1477
+ return __spreadProps(__spreadValues({}, restRuleProps), {
1478
+ urlRegexes: urlRegexes.map((regex) => new RegExp(regex)),
1479
+ isNative,
1480
+ elementsToMeasureSelectors: elementsToMeasureSelectors != null ? elementsToMeasureSelectors : elementToMeasureSelector ? { width: elementToMeasureSelector, height: elementToMeasureSelector } : void 0
1481
+ });
1482
+ };
1483
+ var buildPermanentAdPlacesRules = (hostname, hrefMatchPredicate, permanentAdPlacesRulesForAllDomains, permanentNativeAdPlacesRulesForAllDomains = {}) => {
1484
+ var _a, _b;
1485
+ const rawPermanentAdPlacesRules = (_a = permanentAdPlacesRulesForAllDomains[hostname]) != null ? _a : [];
1486
+ const rawPermanentNativeAdPlacesRules = (_b = permanentNativeAdPlacesRulesForAllDomains[hostname]) != null ? _b : [];
1487
+ const permanentAdPlacesRules = rawPermanentAdPlacesRules.map(makePermanentAdRuleTransformationFn(false)).concat(rawPermanentNativeAdPlacesRules.map(makePermanentAdRuleTransformationFn(true)));
1488
+ return permanentAdPlacesRules.filter(({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate));
1489
+ };
1490
+ function quickJoinSelectors(selectors) {
1491
+ let result = "";
1492
+ selectors.forEach((selector) => {
1493
+ result += selector + ", ";
1494
+ });
1495
+ if (result) {
1496
+ result = result.slice(0, -2);
1497
+ }
1498
+ return result;
1499
+ }
1500
+ var buildProvidersSelectors = (hostname, hrefMatchPredicate, providersRulesForAllDomains, providersSelectors, providersToReplaceAtAllSites, providersCategories) => {
1501
+ var _a;
1502
+ const providersRulesByHostname = ((_a = providersRulesForAllDomains[hostname]) != null ? _a : []).map(
1503
+ (_b) => {
1504
+ var _c = _b, { urlRegexes } = _c, restRuleProps = __objRest(_c, ["urlRegexes"]);
1505
+ return __spreadProps(__spreadValues({}, restRuleProps), {
1506
+ urlRegexes: urlRegexes.map((regex) => new RegExp(regex))
1507
+ });
1508
+ }
1509
+ );
1510
+ const relatedProvidersRulesByUrl = providersRulesByHostname.filter(
1511
+ ({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate)
1512
+ );
1513
+ const alreadyProcessedProviders = /* @__PURE__ */ new Set();
1514
+ const adsSelectors = {};
1515
+ const handleProvider = (provider) => {
1516
+ var _a2, _b;
1517
+ if (alreadyProcessedProviders.has(provider))
1518
+ return;
1519
+ const categoriesSlug = ((_a2 = providersCategories[provider]) != null ? _a2 : [CRYPTO_CATEGORY_NAME]).join("|");
1520
+ const newSelectors = (_b = providersSelectors[provider]) != null ? _b : [];
1521
+ newSelectors.forEach((selector) => {
1522
+ const { selector: cssString, parentDepth } = typeof selector === "string" ? { selector, parentDepth: 0 } : selector;
1523
+ if (!adsSelectors[categoriesSlug]) {
1524
+ adsSelectors[categoriesSlug] = {};
1525
+ }
1526
+ const sameCategoriesAdsSelectors = adsSelectors[categoriesSlug];
1527
+ if (!sameCategoriesAdsSelectors[parentDepth]) {
1528
+ sameCategoriesAdsSelectors[parentDepth] = /* @__PURE__ */ new Set();
1529
+ }
1530
+ sameCategoriesAdsSelectors[parentDepth].add(cssString);
1531
+ });
1532
+ alreadyProcessedProviders.add(provider);
1533
+ };
1534
+ providersToReplaceAtAllSites.forEach(handleProvider);
1535
+ relatedProvidersRulesByUrl.forEach(({ providers }) => providers.forEach(handleProvider));
1536
+ return Object.entries(adsSelectors).map(
1537
+ ([categoriesSlug, sameCategoriesSelectors]) => Object.entries(sameCategoriesSelectors).map(([parentDepth, selectors]) => ({
1538
+ parentDepth: Number(parentDepth),
1539
+ selector: quickJoinSelectors(selectors),
1540
+ categories: categoriesSlug.split("|")
1541
+ }))
1542
+ ).flat();
1543
+ };
1544
+ var withFetchDataExtraction = (fetchFn) => (...args) => __async(void 0, null, function* () {
1545
+ const { data } = yield fetchFn(...args);
1546
+ return data;
1547
+ });
1548
+ var TempleWalletApi = class {
1549
+ constructor(baseUrl) {
1550
+ this.getAdPlacesRulesForAllDomains = withFetchDataExtraction(
1551
+ () => this.api.get("/slise-ad-rules/ad-places", this.getAdVersionRequestConfig())
1552
+ );
1553
+ this.getProvidersToReplaceAtAllSites = withFetchDataExtraction(
1554
+ () => this.api.get("/slise-ad-rules/providers/all-sites")
1555
+ );
1556
+ this.getProvidersCategories = withFetchDataExtraction(
1557
+ () => this.api.get("/slise-ad-rules/providers/categories")
1558
+ );
1559
+ this.getProvidersRulesForAllDomains = withFetchDataExtraction(
1560
+ () => this.api.get("/slise-ad-rules/providers/by-sites")
1561
+ );
1562
+ this.getSelectorsForAllProviders = withFetchDataExtraction(
1563
+ () => this.api.get("/slise-ad-rules/providers", this.getAdVersionRequestConfig())
1564
+ );
1565
+ this.getNegativeSelectorsForAllProviders = withFetchDataExtraction(
1566
+ () => this.api.get(
1567
+ "/slise-ad-rules/providers/negative-selectors",
1568
+ this.getAdVersionRequestConfig()
1569
+ )
1570
+ );
1571
+ this.getPermanentAdPlacesRulesForAllDomains = withFetchDataExtraction(
1572
+ () => this.api.get(
1573
+ "/slise-ad-rules/ad-places/permanent",
1574
+ this.getAdVersionRequestConfig()
1575
+ )
1576
+ );
1577
+ this.getPermanentNativeAdPlacesRulesForAllDomains = withFetchDataExtraction(
1578
+ () => this.api.get(
1579
+ "/slise-ad-rules/ad-places/permanent-native",
1580
+ this.getAdVersionRequestConfig()
1581
+ )
1582
+ );
1583
+ this.getAdsReplaceUrlsBlacklist = withFetchDataExtraction(
1584
+ () => this.api.get("/slise-ad-rules/replace-urls-blacklist", this.getAdVersionRequestConfig())
1585
+ );
1586
+ this.getElementsToHideOrRemoveRules = withFetchDataExtraction(
1587
+ () => this.api.get(
1588
+ "/slise-ad-rules/elements-to-hide-or-remove",
1589
+ this.getAdVersionRequestConfig()
1590
+ )
1591
+ );
1592
+ this.getBlacklistedHypelabCampaignsSlugs = withFetchDataExtraction(
1593
+ () => this.api.get("/temple-wallet-ads/hypelab-campaigns-blacklist")
1594
+ );
1595
+ this.getAllRules = () => __async(this, null, function* () {
1596
+ const [
1597
+ adPlacesRulesForAllDomains,
1598
+ providersRulesForAllDomains,
1599
+ providersSelectors,
1600
+ providersToReplaceAtAllSites,
1601
+ permanentAdPlacesRulesForAllDomains,
1602
+ permanentNativeAdPlacesRulesForAllDomains,
1603
+ adsReplaceUrlsBlacklist,
1604
+ providersNegativeSelectors,
1605
+ elementsToHideOrRemoveRules,
1606
+ providersCategories,
1607
+ blacklistedHypelabCampaignsSlugs
1608
+ ] = yield Promise.all([
1609
+ this.getAdPlacesRulesForAllDomains(),
1610
+ this.getProvidersRulesForAllDomains(),
1611
+ this.getSelectorsForAllProviders(),
1612
+ this.getProvidersToReplaceAtAllSites(),
1613
+ this.getPermanentAdPlacesRulesForAllDomains(),
1614
+ this.getPermanentNativeAdPlacesRulesForAllDomains(),
1615
+ this.getAdsReplaceUrlsBlacklist(),
1616
+ this.getNegativeSelectorsForAllProviders(),
1617
+ this.getElementsToHideOrRemoveRules(),
1618
+ this.getProvidersCategories(),
1619
+ this.getBlacklistedHypelabCampaignsSlugs()
1620
+ ]);
1621
+ return {
1622
+ adPlacesRulesForAllDomains,
1623
+ providersRulesForAllDomains,
1624
+ providersSelectors,
1625
+ providersToReplaceAtAllSites,
1626
+ permanentAdPlacesRulesForAllDomains,
1627
+ permanentNativeAdPlacesRulesForAllDomains,
1628
+ adsReplaceUrlsBlacklist,
1629
+ providersNegativeSelectors,
1630
+ elementsToHideOrRemoveRules,
1631
+ providersCategories,
1632
+ blacklistedHypelabCampaignsSlugs,
1633
+ timestamp: Date.now()
1634
+ };
1635
+ });
1636
+ this.api = axios__default.default.create({
1637
+ baseURL: new URL("/api", baseUrl).href,
1638
+ adapter: "fetch"
1639
+ });
1640
+ }
1641
+ getAdVersionRequestConfig() {
1642
+ return {
1643
+ params: { extVersion: AdsConfiguration.EXTENSION_VERSION, isMisesBrowser: AdsConfiguration.IS_MISES_BROWSER }
1644
+ };
1645
+ }
1646
+ };
1647
+
1648
+ exports.TempleWalletApi = TempleWalletApi;
1649
+ exports.configureAds = configureAds;
1650
+ exports.executeAdsActions = executeAdsActions;
1651
+ exports.getAdsActions = getAdsActions;
1652
+ exports.renderAdsStack = renderAdsStack;
1653
+ exports.transformRawRules = transformRawRules;