@temple-wallet/extension-ads 10.0.0-dev.1563.1 → 10.0.1

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