@temple-wallet/extension-ads 6.3.2 → 7.1.0-dev.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.d.ts CHANGED
@@ -58,7 +58,6 @@ interface RawAdPlacesRule {
58
58
  };
59
59
  stylesOverrides?: AdStylesOverrides[];
60
60
  shouldHideOriginal?: boolean;
61
- isNative?: boolean;
62
61
  }
63
62
  interface RawPermanentAdPlacesRule {
64
63
  urlRegexes: string[];
@@ -76,13 +75,8 @@ interface RawPermanentAdPlacesRule {
76
75
  insertBeforeSelector?: string;
77
76
  insertAfterSelector?: string;
78
77
  insertionsCount?: number;
79
- shouldUseDivWrapper?: boolean;
80
- wrapperType?: 'div' | 'tbody';
81
- colsBefore?: number;
82
- colspan?: number;
83
- colsAfter?: number;
78
+ shouldUseDivWrapper: boolean;
84
79
  divWrapperStyle?: Record<string, string>;
85
- wrapperStyle?: Record<string, string>;
86
80
  elementStyle?: Record<string, string>;
87
81
  elementToMeasureSelector?: string;
88
82
  stylesOverrides?: AdStylesOverrides[];
@@ -116,11 +110,12 @@ declare enum AdActionType {
116
110
  interface AdActionBase {
117
111
  type: AdActionType;
118
112
  }
119
- interface InsertAdActionProps extends Pick<RawPermanentAdPlacesRule, 'wrapperStyle' | 'wrapperType' | 'colsAfter' | 'colsBefore' | 'colspan'> {
113
+ interface InsertAdActionProps {
120
114
  /** A value of 'number' type stands for the value with respective index in `BANNER_ADS_META`. It is done to shorten
121
115
  * ads stack Iframe URL search parameters.
122
116
  */
123
117
  adsMetadata: (number | AdMetadata)[];
118
+ divWrapperStyle?: StringRecord<string>;
124
119
  elementStyle?: StringRecord<string>;
125
120
  stylesOverrides?: AdStylesOverrides[];
126
121
  }
package/dist/index.js CHANGED
@@ -1,23 +1,23 @@
1
1
  'use strict';
2
2
 
3
3
  var nanoid = require('nanoid');
4
- var je = require('webextension-polyfill');
4
+ var Fe = require('webextension-polyfill');
5
5
  var cryptoJs = require('crypto-js');
6
6
  var lodash = require('lodash');
7
- var pt = require('@vespaiach/axios-fetch-adapter');
8
- var ut = require('axios');
7
+ var it = require('@vespaiach/axios-fetch-adapter');
8
+ var ot = require('axios');
9
9
 
10
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
 
12
- var je__default = /*#__PURE__*/_interopDefault(je);
13
- var pt__default = /*#__PURE__*/_interopDefault(pt);
14
- var ut__default = /*#__PURE__*/_interopDefault(ut);
12
+ var Fe__default = /*#__PURE__*/_interopDefault(Fe);
13
+ var it__default = /*#__PURE__*/_interopDefault(it);
14
+ var ot__default = /*#__PURE__*/_interopDefault(ot);
15
15
 
16
- var Fe=Object.defineProperty,Ge=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var j=Object.getOwnPropertySymbols;var Se=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var ge=(e,t,n)=>t in e?Fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))Se.call(t,n)&&ge(e,n,t[n]);if(j)for(var n of j(t))Pe.call(t,n)&&ge(e,n,t[n]);return e},x=(e,t)=>Ge(e,$e(t));var I=(e,t)=>{var n={};for(var i in e)Se.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(e!=null&&j)for(var i of j(e))t.indexOf(i)<0&&Pe.call(e,i)&&(n[i]=e[i]);return n};var g=(e,t,n)=>new Promise((i,r)=>{var o=s=>{try{a(n.next(s));}catch(c){r(c);}},d=s=>{try{a(n.throw(s));}catch(c){r(c);}},a=s=>s.done?i(s.value):Promise.resolve(s.value).then(o,d);a((n=n.apply(e,t)).next());});var Te=e=>!!e;var M=(e=300)=>new Promise(t=>setTimeout(t,e));var h=class{};h.HYPELAB_NATIVE_PLACEMENT_SLUG="",h.HYPELAB_SMALL_PLACEMENT_SLUG="",h.HYPELAB_HIGH_PLACEMENT_SLUG="",h.HYPELAB_WIDE_PLACEMENT_SLUG="",h.HYPELAB_ADS_WINDOW_URL="",h.TKEY_INPAGE_AD_URL="",h.SWAP_TKEY_URL="",h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",h.getPersonaIframeURL=()=>"",h.getAdsStackIframeURL=()=>"";var ze=e=>{let{hypelab:t,hypelabAdsWindowUrl:n,tkeyInpageAdUrl:i,swapTkeyUrl:r,externalAdsActivityMessageType:o,getPersonaIframeURL:d,getAdsStackIframeURL:a,extVersion:s,templePassphrase:c}=e,{native:l,small:m,regular:A,wide:p}=t;h.HYPELAB_NATIVE_PLACEMENT_SLUG=l,h.HYPELAB_SMALL_PLACEMENT_SLUG=m,h.HYPELAB_HIGH_PLACEMENT_SLUG=A,h.HYPELAB_WIDE_PLACEMENT_SLUG=p,h.HYPELAB_ADS_WINDOW_URL=n,h.TKEY_INPAGE_AD_URL=i,h.SWAP_TKEY_URL=r,h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=o,h.getPersonaIframeURL=d,h.getAdsStackIframeURL=a,h.EXTENSION_VERSION=s,h.TEMPLE_PASSPHRASE=c;};var D=[{source:{providerName:"HypeLab",native:!1,size:"wide"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Temple"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Persona",shape:"medium"},dimensions:{width:600,height:160,minContainerWidth:600,minContainerHeight:80,maxContainerWidth:800,maxContainerHeight:300}},{source:{providerName:"HypeLab",native:!1,size:"high"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"Persona",shape:"squarish"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"HypeLab",native:!1,size:"small",shouldNotUseStrictContainerLimits:!0},dimensions:{width:320,height:50,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}},{source:{providerName:"Persona",shape:"regular",shouldNotUseStrictContainerLimits:!0},dimensions:{width:321,height:101,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}}],we=(e,t)=>({source:{providerName:"HypeLab",native:!0,slug:h.HYPELAB_NATIVE_PLACEMENT_SLUG},dimensions:{width:Math.max(160,e),height:Math.max(16,t),minContainerWidth:2,minContainerHeight:2,maxContainerWidth:1/0,maxContainerHeight:1/0}});var N="twa",U="twa-native",J="twa-sibling-replacement";var Z="adRenderStart",ee="resize",O="ready",q="error";var C=/[\d.]+(px)?$/,k=`[${N}]`,xe=`[${N}]:not([${U}])`,_e=`[${U}]`,V=e=>!!e.closest(k),Y=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(J))},te=e=>{let t=getComputedStyle(e),{x:n,right:i,width:r,height:o}=e.getBoundingClientRect(),d={width:r,height:o},a=["width","height"];for(let s of a){let c=t[s],m=e.getAttribute(s)||c;C.test(m)&&(d[s]=Number(m.replace("px",""))),s==="width"&&n<0?d.width+=n:s==="width"&&i>window.innerWidth&&(d.width=window.innerWidth-n);}return d},H=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(i=>!!i):[],W=(e,t)=>{let n=e;for(let i=0;i<t;i++){let r=n.parentElement;if(!r)return null;n=r;}return n},Ie=D.length-2,Le=(e,t,n,i)=>e<2&&t<2?[]:i?[we(e,t)]:D.reduce((r,{dimensions:o},d)=>{let{minContainerWidth:a,maxContainerWidth:s,minContainerHeight:c,maxContainerHeight:l,width:m}=o,A=!1;switch(n){case"permanent":A=d===Ie||e>=m&&(t>=c||t<2);break;case"slot-replacement":A=d===Ie||e>=a&&(t>=c||t<2);break;default:A=e>=a&&t>=c&&e<=s&&t<=l;}return A&&r.push(d),r},[]);var ve=(e,t,n)=>g(void 0,null,function*(){let{isMultiple:i,cssString:r,parentDepth:o}=e.parentSelector,d=H(r,i).map(a=>W(a,o)).filter(a=>!!a);return yield Promise.all(d.map(a=>g(void 0,null,function*(){yield M(0),qe(a,e,t,n);}))),d}),qe=(e,t,n,i)=>{var Ee;let he=t,{shouldUseDivWrapper:r,divWrapperStyle:o,wrapperStyle:d,elementStyle:a,adSelector:s,insertionIndex:c,insertBeforeSelector:l,insertAfterSelector:m,insertionsCount:A=1,elementToMeasureSelector:p,stylesOverrides:u,shouldHideOriginal:E=!1,isNative:R,urlRegexes:y,parentSelector:T}=he,P=I(he,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementToMeasureSelector","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),_=P.wrapperType?d:r?o:{display:"contents"},{isMultiple:w,cssString:L,parentDepth:b}=s,ne=H(R?_e:xe,!0,e).reduce((f,v)=>f.some($=>$.contains(v)||v.contains($))?f:[...f,v],[]).length,Q=A-ne;if(H(L,w,e).map(f=>W(f,b)).filter(f=>Te(f)&&!V(f)).forEach(f=>{var $,fe;let v=window.getComputedStyle(f).display==="none";if(Q<=0)(!E||!v)&&i.push({type:E?"hide-element":"remove-element",element:f});else {let se=(($=f.parentElement)==null?void 0:$.children.length)===1?f.parentElement:f;p&&(se=(fe=document.querySelector(p))!=null?fe:se);let Ve=S({type:"replace-element",element:f,wrapperStyle:_,elementStyle:a,stylesOverrides:u},P),ye={type:"hide-element",element:f},Ye=S({type:"simple-insert-ad",wrapperStyle:_,elementStyle:a,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:u},P),z=[],Re=Y(f);E&&Re&&!v?z=[ye]:E&&!Re?z=[ye,Ye]:E||(z=[Ve]),z.length>0&&n(se,"permanent",R,...z)&&Q--;}}),Q<=0)return;let G=-1,pe=e,re=e,ue=l||m;if(ue){let f=e.querySelector(ue),v=f==null?void 0:f.parentElement;f&&v&&(pe=v,G=Array.from(e.children).indexOf(f)+(l?0:1),re=p&&document.querySelector(p)||f);}else {let f=c!=null?c:0;G=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),re=p&&document.querySelector(p)||((Ee=e.children[G])!=null?Ee:e);}if(G!==-1){let f=S({type:"simple-insert-ad",wrapperStyle:_,elementStyle:a,parent:pe,insertionIndex:G,isSiblingReplacement:!1,stylesOverrides:u},P);n(re,"permanent",R,...Array(Q).fill(f));}};var Xe=["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"],Me=(e,t,n)=>g(void 0,null,function*(){let i=e.map(({selector:r,parentDepth:o})=>H(r,!0).reduce((d,a)=>{var R;let s=(R=W(a,o))!=null?R:a,c=d.findIndex(y=>y.contains(s)),l=s.parentElement&&window.getComputedStyle(s.parentElement),{width:m,height:A}=te(s),p=n.some(y=>{var T;return y.type==="replace-all-children"||y.type==="simple-insert-ad"?y.parent.contains(s)||s.contains(y.parent):((T=y.element.parentElement)==null?void 0:T.contains(s))||s.contains(y.element)}),u=(l==null?void 0:l.display)==="none"||(l==null?void 0:l.visibility)==="hidden",E=c>=0&&d[c]instanceof HTMLAnchorElement;return p||m===0||A===0||u||E||(c>=0?d.splice(c,1,s):d.some(y=>y.contains(s))||d.push(s)),d},[])).flat();yield Promise.all(i.map(r=>g(void 0,null,function*(){var c,l,m,A,p,u,E,R;yield M(0);let o=r.parentElement,{width:d,height:a}=window.getComputedStyle(r),s=C.test(d)&&C.test(a)?r:(l=(c=o==null?void 0:o.closest("div, article, aside, footer, header"))!=null?c:(o==null?void 0:o.tagName.toLowerCase())==="body"?void 0:o)!=null?l:r;if(!V(r)&&!r.querySelector(k)&&!n.some(y=>y.type==="simple-insert-ad"?!1:y.type==="replace-all-children"?y.parent.contains(r):y.element===r)){let y=(m=r.getAttribute("style"))!=null?m:"",T=Object.fromEntries(y.split(";").filter(Boolean).map(F=>F.split(":").map(ne=>ne.trim())));if((A=T.width)!=null&&A.match(/^0[a-z]/)||(p=T.height)!=null&&p.match(/^0[a-z]/))return;let P=window.getComputedStyle(r),_=S(S({},Object.fromEntries(Xe.map(F=>[F,P.getPropertyValue(F)]))),T),w={type:"hide-element",element:r},L={type:"simple-insert-ad",wrapperStyle:_,parent:(u=r.parentElement)!=null?u:document.body,insertionIndex:Array.from((R=(E=r.parentElement)==null?void 0:E.children)!=null?R:[]).indexOf(r),isSiblingReplacement:!0},b=Y(r)?window.getComputedStyle(r).display==="none"?[]:[w]:[w,L];t(s,"provider-replacement",!1,...b);}})));});var be=(e,t,n)=>g(void 0,null,function*(){let{cssString:i,isMultiple:r}=e.selector,o=H(i,r);yield Promise.all(o.map(d=>g(void 0,null,function*(){yield M(0),Ke(d,e,t,n);})));}),Ke=(e,t,n,i)=>{let{selector:{shouldUseDivWrapper:r,parentDepth:o,divWrapperStyle:d},stylesOverrides:a,shouldHideOriginal:s,isNative:c=!1}=t,l=W(e,o);if(!l||n.some(p=>p.contains(l))||V(l)||l.querySelector(k))return;let m={shouldUseDivWrapper:r,wrapperStyle:d},A;if(r&&s){let p=l.parentElement,u=window.getComputedStyle(l).display==="none",E=S({type:"simple-insert-ad",parent:p,insertionIndex:Array.from(p.children).indexOf(l),stylesOverrides:a==null?void 0:a.map(T=>{var P=T,{parentDepth:R}=P,y=I(P,["parentDepth"]);return x(S({},y),{parentDepth:R-1})}),isSiblingReplacement:!0},m);A=[],u||A.push({type:"hide-element",element:l}),Y(l)||A.push(E);}else if(r)A=[S({type:"replace-element",element:l,stylesOverrides:a==null?void 0:a.map(R=>{var y=R,{parentDepth:u}=y,E=I(y,["parentDepth"]);return x(S({},E),{parentDepth:u-1})})},m)];else if(s){let p={type:"simple-insert-ad",parent:l,insertionIndex:0,stylesOverrides:a,isSiblingReplacement:!0,wrapperStyle:{display:"contents"}};A=Array.from(l.children).filter(u=>window.getComputedStyle(u).display!=="none").map(u=>({type:"hide-element",element:u})),l.querySelector(k)||A.push(p);}else A=[{type:"replace-all-children",parent:l,stylesOverrides:a,wrapperStyle:{display:"contents"}}];A.length>0&&i(l,"slot-replacement",c,...A);};var Qe=i=>g(void 0,[i],function*({providersSelectors:e,adPlacesRules:t,permanentAdPlacesRules:n}){let r=[],o=(a,s,c,...l)=>{let{width:m,height:A}=te(a),p=Le(m,A,s,c);return p.length?(r.push(...l.map(u=>u.type==="hide-element"||u.type==="remove-element"?u:x(S({},u),{adsMetadata:p}))),!0):!1},d=[];return yield Promise.all(n.map(a=>g(void 0,null,function*(){yield M(0),d=d.concat(yield ve(a,o,r));}))),yield Promise.all(t.map(a=>g(void 0,null,function*(){yield M(0),yield be(a,d,o);}))),yield Me(e,o,r),r});var oe=(r=>(r.Optimal="Optimal",r.HypeLab="HypeLab",r.Persona="Persona",r.Temple="Temple Wallet",r))(oe||{});var ae=new Set,He=new Set,De=new Set,Ce=e=>g(void 0,null,function*(){let t=e.id;if(!ae.has(t))return ae.add(t),new Promise((n,i)=>{let r=o=>{var d,a,s;if(o.source===e.contentWindow)try{let c=typeof o.data=="string"?JSON.parse(o.data):o.data;if(c.id!==t)return;let l=e.offsetWidth-e.clientWidth,m=e.offsetHeight-e.clientHeight;switch(c.type){case O:n(c.adMetadata.source.providerName);break;case q:window.removeEventListener("message",r),e.style.display="none",i(new Error((d=c.reason)!=null?d:"Unknown error"));break;case Z:let{dimensions:A}=c.adMetadata,{width:p,height:u}=A;p>0&&u>0&&((a=e.style.width)!=null&&a.endsWith("%")||(e.style.width=`${A.width}px`),e.style.height=`${A.height}px`);break;case ee:let{width:E,height:R}=c;(s=e.style.width)!=null&&s.endsWith("%")||(e.style.width=`${E+l}px`),e.style.height=`${R+m}px`;}}catch(c){console.error("Observing error:",c);}};window.addEventListener("message",r);}).then(n=>{if(He.has(t))return;He.add(t),Ze(e)?We(t,n):Je(e,n);}).catch(n=>{throw console.error(n),n}).finally(()=>void ae.delete(t))}),Je=(e,t)=>{let n=new IntersectionObserver(i=>{i.some(r=>r.isIntersecting)&&(We(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},We=(e,t)=>{if(De.has(e))return;De.add(e);let n=window.parent.location.href;je__default.default.runtime.sendMessage({type:h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:oe[t]}).catch(i=>void console.error(i));},Ze=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let i=Math.min(Math.max(0,t.x),n.width),r=Math.min(Math.max(0,t.x+t.width),n.width),o=Math.min(Math.max(0,t.y),n.height),d=Math.min(Math.max(0,t.y+t.height),n.height),a=t.width*t.height;return (r-i)*(d-o)/a>=.5};var le=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var tt=(e,t)=>{["width","height"].forEach(i=>{var o;let r=(o=e.style[i])!=null?o:"";C.test(r)&&parseInt(r,10)<t[i]&&e.style.removeProperty(i);});},Be=e=>e.reduce((t,n)=>{let i=parseInt(n,10);return isNaN(i)&&C.test(n)?t:t+i},0),nt=(e,t,n,i)=>g(void 0,null,function*(){let{elementStyle:r={},stylesOverrides:o=[],adsMetadata:d,wrapperType:a}=e;o.sort((u,E)=>u.parentDepth-E.parentDepth);let s,c=nanoid.nanoid(),l=document.createElement("iframe");l.src=h.getAdsStackIframeURL(c,e.adsMetadata,window.location.href),l.id=c;let m=e.adsMetadata[0],{dimensions:A}=typeof m=="number"?D[m]:m;l.style.width=a==="tbody"?"100%":`${A.width}px`,l.style.height=`${A.height}px`,l.style.border="none";for(let u in r)l.style.setProperty(u,r[u]);switch(l.setAttribute(N,"true"),tt(t,A),n.appendChild(l),e.type){case"replace-all-children":s=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":s=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(J,"true"),s=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}if(a!=="tbody"){let{borderLeftWidth:u,borderRightWidth:E,borderTopWidth:R,borderBottomWidth:y}=window.getComputedStyle(l),{borderLeftWidth:T,borderRightWidth:P,borderTopWidth:_,borderBottomWidth:w}=window.getComputedStyle(t),L=Be([u,E,T,P]),b=Be([R,y,_,w]);l.style.width=`${A.width-L}px`,l.style.height=`${A.height-b}px`;}Ce(l).catch(i);let p=0;o.forEach(({parentDepth:u,style:E})=>{for(;u>p&&s;)s=s.parentElement,p++;s&&le(s,E);});}),Ue=e=>g(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:n,wrapperType:i="div",colsAfter:r=0,colsBefore:o=0,colspan:d=1}=e,a=n.every(m=>typeof m=="object"),s,c;if(i==="div")s=document.createElement("div"),c=s;else {s=document.createElement("tbody");let m=document.createElement("tr");s.appendChild(m);for(let p=0;p<o;p++)m.appendChild(document.createElement("td"));let A=document.createElement("td");A.colSpan=d,m.appendChild(A),c=A;for(let p=0;p<r;p++)m.appendChild(document.createElement("td"));}s.setAttribute(N,"true"),a&&s.setAttribute(U,"true"),le(s,t);let l=()=>{let m=document.createElement("div");m.setAttribute(N,"true"),a&&m.setAttribute(U,"true"),m.style.display="none",s.replaceWith(m);};yield nt(e,s,c,m=>{console.error("Failed to render ads",m),l();}).catch(m=>{throw console.error("Inserting an ad attempt error:",m),l(),m});});var rt=e=>Promise.allSettled(e.map(t=>g(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none"):yield Ue(t);})));var de=(e,t)=>{let n=document.createElement("div");n.style.width=`${e}px`,n.style.height=`${t}px`;let i=document.createElement("div");i.style.width=`${e}px`,i.style.height=`${t}px`,n.appendChild(i);let r=document.createElement("a");r.href=h.SWAP_TKEY_URL,r.target="_blank",r.rel="noopener noreferrer",r.style.width="100%",r.style.height="100%",i.appendChild(r);let o=document.createElement("img");return o.src=h.TKEY_INPAGE_AD_URL,o.style.width="100%",o.style.height="100%",r.appendChild(o),{element:n}};var ce=(e,t,n)=>{let{width:i,height:r}=t,o=document.createElement("iframe");return o.src=it(e,n,i,r,o.id),o.style.width=e.native?"100%":`${i}px`,o.style.height=`${r}px`,o.style.border="none",{element:o}},it=(e,t,n,i,r)=>{let o,d,a;if(e.native)a=h.HYPELAB_NATIVE_PLACEMENT_SLUG,o=360,d=110;else switch(e.size){case"small":o=320,d=50,a=h.HYPELAB_SMALL_PLACEMENT_SLUG;break;case"high":o=300,d=250,a=h.HYPELAB_HIGH_PLACEMENT_SLUG;break;case"wide":o=728,d=90,a=h.HYPELAB_WIDE_PLACEMENT_SLUG;break}let s=new URL(h.HYPELAB_ADS_WINDOW_URL);return e.native?s.searchParams.set("vh",String(i!=null?i:d)):s.searchParams.set("w",String(n!=null?n:o)),s.searchParams.set("h",String(i!=null?i:d)),s.searchParams.set("p",a),s.searchParams.set("o",ot(t)),r&&s.searchParams.set("id",r),s.toString()},ot=e=>cryptoJs.AES.encrypt(e,h.TEMPLE_PASSPHRASE).toString();var me=(e,t,{width:n,height:i})=>{let r=document.createElement("iframe");return r.src=h.getPersonaIframeURL(e,t),r.id=e,r.style.width=`${n}px`,r.style.height=`${i}px`,r.style.border="none",{element:r}};var K=e=>window.parent.postMessage(JSON.stringify(e),"*"),Oe=(e,t,n)=>g(void 0,null,function*(){if(t.length===0){K({id:e,type:q,reason:"No more ads to render"});return}let[i,...r]=t,o=typeof i=="number"?D[i]:i;K({id:e,type:Z,adMetadata:o});let{source:d,dimensions:a}=o,s,c=!0;switch(d.providerName){case"Temple":s=de(a.width,a.height);break;case"HypeLab":s=ce(d,a,n),d.native&&(c=!1);break;default:s=me(e,d.shape,a);}let{element:l}=s,m=document.getElementById("root"),A=document.getElementById("temple-label");if(m.replaceChildren(l),c?A.setAttribute("active",""):A.removeAttribute("active"),l instanceof HTMLIFrameElement)return new Promise((p,u)=>{let E=setTimeout(()=>{window.removeEventListener("message",y),u(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(d)}`));},1e4),R=!1,y=T=>{var P,_;if(T.source===l.contentWindow)try{let w=typeof T.data=="string"?JSON.parse(T.data):T.data;switch(w.type){case O:R||(R=!0,K({id:e,type:O,adMetadata:o}),clearTimeout(E),p());break;case q:window.removeEventListener("message",y),clearTimeout(E),u(new Error((P=w.reason)!=null?P:"Unknown error"));break;case ee:let{width:L,height:b}=w;L>0&&b>0&&((_=l.style.width)!=null&&_.endsWith("%")||(l.style.width=`${L}px`),l.style.height=`${b}px`,K(x(S({},w),{id:e})));}}catch(w){console.error("Observing error:",w);}};window.addEventListener("message",y);}).catch(p=>(console.error(p),Oe(e,r,n)));K({id:e,type:O,adMetadata:o});});var lt=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:i,providersSelectors:r,providersToReplaceAtAllSites:o,permanentAdPlacesRulesForAllDomains:d,permanentNativeAdPlacesRulesForAllDomains:a={},adsReplaceUrlsBlacklist:s=[],timestamp:c}=t,{hostname:l,href:m}=e;if(s.some(u=>new RegExp(u).test(m)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],timestamp:c};let A=m.replace(/#.*$/,""),p=u=>{let E=u.source.includes("#")?m:A;return u.test(E)};return {adPlacesRules:dt(l,p,n),permanentAdPlacesRules:ct(l,p,d,a),providersSelectors:At(l,p,i,r,o),timestamp:c}},dt=(e,t,n)=>{var o;return ((o=n[e])!=null?o:[]).map(s=>{var c=s,{urlRegexes:d}=c,a=I(c,["urlRegexes"]);return x(S({},a),{urlRegexes:d.map(l=>new RegExp(l))})}).reduce((d,l)=>{var m=l,{urlRegexes:a,selector:s}=m,c=I(m,["urlRegexes","selector"]);if(!a.some(t))return d;let E=s,{cssString:A}=E,p=I(E,["cssString"]),u=d.findIndex(T=>{var P=T,{selector:R}=P,y=I(P,["selector"]);let L=R,w=I(L,["cssString"]);return lodash.isEqual(p,w)&&lodash.isEqual(c,y)});return u===-1?d.push(S({selector:s},c)):d[u].selector.cssString+=", ".concat(A),d},[])},ct=(e,t,n,i={})=>{var a,s;let r=(a=n[e])!=null?a:[],o=(s=i[e])!=null?s:[];return r.map(m=>{var A=m,{urlRegexes:c}=A,l=I(A,["urlRegexes"]);return x(S({},l),{urlRegexes:c.map(p=>new RegExp(p)),isNative:!1})}).concat(o.map(m=>{var A=m,{urlRegexes:c}=A,l=I(A,["urlRegexes"]);return x(S({},l),{urlRegexes:c.map(p=>new RegExp(p)),isNative:!0})})).filter(({urlRegexes:c})=>c.some(t))};function mt(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var At=(e,t,n,i,r)=>{var l;let d=((l=n[e])!=null?l:[]).map(p=>{var u=p,{urlRegexes:m}=u,A=I(u,["urlRegexes"]);return x(S({},A),{urlRegexes:m.map(E=>new RegExp(E))})}).filter(({urlRegexes:m})=>m.some(t)),a=new Set,s={},c=m=>{var p;if(a.has(m))return;((p=i[m])!=null?p:[]).forEach(u=>{let{selector:E,parentDepth:R}=typeof u=="string"?{selector:u,parentDepth:0}:u;s[R]||(s[R]=new Set),s[R].add(E);}),a.add(m);};return r.forEach(c),d.forEach(({providers:m})=>m.forEach(c)),Object.entries(s).map(([m,A])=>({parentDepth:Number(m),selector:mt(A)}))};var B=e=>(...t)=>g(void 0,null,function*(){let{data:n}=yield e(...t);return n}),Ae=class{constructor(t){this.getAdPlacesRulesForAllDomains=B(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=B(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=B(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=B(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=B(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=B(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=B(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getAllRules=()=>g(this,null,function*(){let[t,n,i,r,o,d,a]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:i,providersToReplaceAtAllSites:r,permanentAdPlacesRulesForAllDomains:o,permanentNativeAdPlacesRulesForAllDomains:d,adsReplaceUrlsBlacklist:a,timestamp:Date.now()}});this.api=ut__default.default.create({baseURL:new URL("/api",t).href,adapter:pt__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:h.EXTENSION_VERSION}}}};
16
+ var Ce=Object.defineProperty,Ne=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var he=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ue=(e,t,n)=>t in e?Ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,g=(e,t)=>{for(var n in t||(t={}))he.call(t,n)&&ue(e,n,t[n]);if(z)for(var n of z(t))Ee.call(t,n)&&ue(e,n,t[n]);return e},w=(e,t)=>Ne(e,We(t));var I=(e,t)=>{var n={};for(var s in e)he.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&z)for(var s of z(e))t.indexOf(s)<0&&Ee.call(e,s)&&(n[s]=e[s]);return n};var y=(e,t,n)=>new Promise((s,r)=>{var l=a=>{try{o(n.next(a));}catch(d){r(d);}},i=a=>{try{o(n.throw(a));}catch(d){r(d);}},o=a=>a.done?s(a.value):Promise.resolve(a.value).then(l,i);o((n=n.apply(e,t)).next());});var fe=e=>!!e;var _=(e=300)=>new Promise(t=>setTimeout(t,e));var p=class{};p.HYPELAB_NATIVE_PLACEMENT_SLUG="",p.HYPELAB_SMALL_PLACEMENT_SLUG="",p.HYPELAB_HIGH_PLACEMENT_SLUG="",p.HYPELAB_WIDE_PLACEMENT_SLUG="",p.HYPELAB_ADS_WINDOW_URL="",p.TKEY_INPAGE_AD_URL="",p.SWAP_TKEY_URL="",p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",p.getPersonaIframeURL=()=>"",p.getAdsStackIframeURL=()=>"";var Be=e=>{let{hypelab:t,hypelabAdsWindowUrl:n,tkeyInpageAdUrl:s,swapTkeyUrl:r,externalAdsActivityMessageType:l,getPersonaIframeURL:i,getAdsStackIframeURL:o,extVersion:a,templePassphrase:d}=e,{native:c,small:m,regular:A,wide:u}=t;p.HYPELAB_NATIVE_PLACEMENT_SLUG=c,p.HYPELAB_SMALL_PLACEMENT_SLUG=m,p.HYPELAB_HIGH_PLACEMENT_SLUG=A,p.HYPELAB_WIDE_PLACEMENT_SLUG=u,p.HYPELAB_ADS_WINDOW_URL=n,p.TKEY_INPAGE_AD_URL=s,p.SWAP_TKEY_URL=r,p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=l,p.getPersonaIframeURL=i,p.getAdsStackIframeURL=o,p.EXTENSION_VERSION=a,p.TEMPLE_PASSPHRASE=d;};var H=[{source:{providerName:"HypeLab",native:!1,size:"wide"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Temple"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Persona",shape:"medium"},dimensions:{width:600,height:160,minContainerWidth:600,minContainerHeight:80,maxContainerWidth:800,maxContainerHeight:300}},{source:{providerName:"HypeLab",native:!1,size:"high"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"Persona",shape:"squarish"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"HypeLab",native:!1,size:"small",shouldNotUseStrictContainerLimits:!0},dimensions:{width:320,height:50,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}},{source:{providerName:"Persona",shape:"regular",shouldNotUseStrictContainerLimits:!0},dimensions:{width:321,height:101,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}}],Re=(e,t)=>({source:{providerName:"HypeLab",native:!0,slug:p.HYPELAB_NATIVE_PLACEMENT_SLUG},dimensions:{width:Math.max(160,e),height:Math.max(16,t),minContainerWidth:2,minContainerHeight:2,maxContainerWidth:1/0,maxContainerHeight:1/0}});var D="twa",q="twa-sibling-replacement";var K="adRenderStart",Q="resize",B="ready",V="error";var M=`iframe[${D}], div[${D}]`,O=e=>!!e.closest(M),U=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(q))},X=e=>{let t=getComputedStyle(e),{x:n,right:s,width:r,height:l}=e.getBoundingClientRect(),i={width:r,height:l},o=["width","height"];for(let a of o){let d=t[a],m=e.getAttribute(a)||d;/\d+px/.test(m)&&(i[a]=Number(m.replace("px",""))),a==="width"&&n<0?i.width+=n:a==="width"&&s>window.innerWidth&&(i.width=window.innerWidth-n);}return i},b=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(s=>!!s):[],C=(e,t)=>{let n=e;for(let s=0;s<t;s++){let r=n.parentElement;if(!r)return null;n=r;}return n},ye=H.length-2,ge=(e,t,n,s)=>e<2&&t<2?[]:s?[Re(e,t)]:H.reduce((r,{dimensions:l},i)=>{let{minContainerWidth:o,maxContainerWidth:a,minContainerHeight:d,maxContainerHeight:c,width:m}=l,A=!1;switch(n){case"permanent":A=i===ye||e>=m&&(t>=d||t<2);break;case"slot-replacement":A=i===ye||e>=o&&(t>=d||t<2);break;default:A=e>=o&&t>=d&&e<=a&&t<=c;}return A&&r.push(i),r},[]);var Se=(e,t,n)=>y(void 0,null,function*(){let{isMultiple:s,cssString:r,parentDepth:l}=e.parentSelector,i=b(r,s).map(o=>C(o,l)).filter(o=>!!o);return yield Promise.all(i.map(o=>y(void 0,null,function*(){yield _(0),Oe(o,e,t,n);}))),i}),Oe=(e,t,n,s)=>{var me;let{shouldUseDivWrapper:r,divWrapperStyle:l,elementStyle:i,adSelector:o,insertionIndex:a,insertBeforeSelector:d,insertAfterSelector:c,insertionsCount:m=1,elementToMeasureSelector:A,stylesOverrides:u,shouldHideOriginal:h=!1,isNative:R}=t,E=r?l:{display:"contents"},{isMultiple:S,cssString:x,parentDepth:P}=o,L=b(M,!0,e).reduce((f,v)=>f.some(Y=>Y.contains(v)||v.contains(Y))?f:[...f,v],[]).length,T=m-L;if(b(x,S,e).map(f=>C(f,P)).filter(f=>fe(f)&&!O(f)).forEach(f=>{var Y,ce;let v=window.getComputedStyle(f).display==="none";if(T<=0)(!h||!v)&&s.push({type:h?"hide-element":"remove-element",element:f});else {let J=((Y=f.parentElement)==null?void 0:Y.children.length)===1?f.parentElement:f;A&&(J=(ce=document.querySelector(A))!=null?ce:J);let He={type:"replace-element",element:f,divWrapperStyle:E,elementStyle:i,stylesOverrides:u},Ae={type:"hide-element",element:f},De={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:i,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:u},F=[],pe=U(f);h&&pe&&!v?F=[Ae]:h&&!pe?F=[Ae,De]:h||(F=[He]),F.length>0&&n(J,"permanent",R,...F)&&T--;}}),T<=0)return;let k=-1,le=e,j=e,de=d||c;if(de){let f=e.querySelector(de),v=f==null?void 0:f.parentElement;f&&v&&(le=v,k=Array.from(e.children).indexOf(f)+(d?0:1),j=A&&document.querySelector(A)||f);}else {let f=a!=null?a:0;k=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),j=A&&document.querySelector(A)||((me=e.children[k])!=null?me:e);}if(k!==-1){let f={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:i,parent:le,insertionIndex:k,isSiblingReplacement:!1,stylesOverrides:u};n(j,"permanent",R,...Array(T).fill(f));}};var Ue=["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"],Pe=(e,t,n)=>y(void 0,null,function*(){let s=e.map(({selector:r,parentDepth:l})=>b(r,!0).reduce((i,o)=>{var R;let a=(R=C(o,l))!=null?R:o,d=i.findIndex(E=>E.contains(a)),c=a.parentElement&&window.getComputedStyle(a.parentElement),{width:m,height:A}=X(a),u=n.some(E=>{var S;return E.type==="replace-all-children"||E.type==="simple-insert-ad"?E.parent.contains(a)||a.contains(E.parent):((S=E.element.parentElement)==null?void 0:S.contains(a))||a.contains(E.element)}),h=(c==null?void 0:c.display)==="none"||(c==null?void 0:c.visibility)==="hidden";return u||m===0||A===0||h||(d>=0?i.splice(d,1,a):i.some(E=>E.contains(a))||i.push(a)),i},[])).flat();yield Promise.all(s.map(r=>y(void 0,null,function*(){var o,a,d,c,m,A,u,h;yield _(0);let l=r.parentElement,i=(a=(o=l==null?void 0:l.closest("div, article, aside, footer, header"))!=null?o:(l==null?void 0:l.tagName.toLowerCase())==="body"?void 0:l)!=null?a:r;if(!O(r)&&!r.querySelector(M)&&!n.some(R=>R.type==="simple-insert-ad"?!1:R.type==="replace-all-children"?R.parent.contains(r):R.element===r)){let R=(d=r.getAttribute("style"))!=null?d:"",E=Object.fromEntries(R.split(";").filter(Boolean).map(T=>T.split(":").map(ae=>ae.trim())));if((c=E.width)!=null&&c.match(/^0[a-z]/)||(m=E.height)!=null&&m.match(/^0[a-z]/))return;let S=window.getComputedStyle(r),x=g(g({},Object.fromEntries(Ue.map(T=>[T,S.getPropertyValue(T)]))),E),P={type:"hide-element",element:r},W={type:"simple-insert-ad",divWrapperStyle:x,parent:(A=r.parentElement)!=null?A:document.body,insertionIndex:Array.from((h=(u=r.parentElement)==null?void 0:u.children)!=null?h:[]).indexOf(r),isSiblingReplacement:!0},L=U(r)?window.getComputedStyle(r).display==="none"?[]:[P]:[P,W];t(i,"provider-replacement",!1,...L);}})));});var Te=(e,t,n)=>y(void 0,null,function*(){let{cssString:s,isMultiple:r}=e.selector,l=b(s,r);yield Promise.all(l.map(i=>y(void 0,null,function*(){yield _(0),ke(i,e,t,n);})));}),ke=(e,t,n,s)=>{let{selector:{shouldUseDivWrapper:r,parentDepth:l,divWrapperStyle:i},stylesOverrides:o,shouldHideOriginal:a}=t,d=C(e,l);if(!d||n.some(A=>A.contains(d))||O(d)||d.querySelector(M))return;let c={shouldUseDivWrapper:r,divWrapperStyle:i},m;if(r&&a){let A=d.parentElement,u=window.getComputedStyle(d).display==="none",h=g({type:"simple-insert-ad",parent:A,insertionIndex:Array.from(A.children).indexOf(d),stylesOverrides:o==null?void 0:o.map(S=>{var x=S,{parentDepth:R}=x,E=I(x,["parentDepth"]);return w(g({},E),{parentDepth:R-1})}),isSiblingReplacement:!0},c);m=[],u||m.push({type:"hide-element",element:d}),U(d)||m.push(h);}else if(r)m=[g({type:"replace-element",element:d,stylesOverrides:o==null?void 0:o.map(R=>{var E=R,{parentDepth:u}=E,h=I(E,["parentDepth"]);return w(g({},h),{parentDepth:u-1})})},c)];else if(a){let A={type:"simple-insert-ad",parent:d,insertionIndex:0,stylesOverrides:o,isSiblingReplacement:!0,divWrapperStyle:{display:"contents"}};m=Array.from(d.children).filter(u=>window.getComputedStyle(u).display!=="none").map(u=>({type:"hide-element",element:u})),d.querySelector(M)||m.push(A);}else m=[{type:"replace-all-children",parent:d,stylesOverrides:o,divWrapperStyle:{display:"contents"}}];m.length>0&&s(d,"slot-replacement",!1,...m);};var Ye=s=>y(void 0,[s],function*({providersSelectors:e,adPlacesRules:t,permanentAdPlacesRules:n}){let r=[],l=(o,a,d,...c)=>{let{width:m,height:A}=X(o),u=ge(m,A,a,d);return u.length?(r.push(...c.map(h=>h.type==="hide-element"||h.type==="remove-element"?h:w(g({},h),{adsMetadata:u}))),!0):!1},i=[];return yield Promise.all(n.map(o=>y(void 0,null,function*(){yield _(0),i=i.concat(yield Se(o,l,r));}))),yield Promise.all(t.map(o=>y(void 0,null,function*(){yield _(0),yield Te(o,i,l);}))),yield Pe(e,l,r),r});var ee=(r=>(r.Optimal="Optimal",r.HypeLab="HypeLab",r.Persona="Persona",r.Temple="Temple Wallet",r))(ee||{});var te=new Set,we=new Set,Ie=new Set,Ve=3e4,ve=e=>y(void 0,null,function*(){let t=e.id;if(!te.has(t))return te.add(t),new Promise((n,s)=>{setTimeout(()=>{window.removeEventListener("message",r),s(new Error(`Timeout exceeded for ${t}`));},Ve);let r=l=>{var i;if(l.source===e.contentWindow)try{let o=typeof l.data=="string"?JSON.parse(l.data):l.data;if(o.id!==t)return;switch(o.type){case B:n(o.adMetadata.source.providerName);break;case V:window.removeEventListener("message",r),e.style.display="none",s(new Error((i=o.reason)!=null?i:"Unknown error"));break;case K:let{dimensions:a}=o.adMetadata,{width:d,height:c}=a;d>0&&c>0&&(e.style.width=`${a.width}px`,e.style.height=`${a.height}px`);break;case Q:let{width:m,height:A}=o;e.style.width=`${m}px`,e.style.height=`${A}px`;}}catch(o){console.error("Observing error:",o);}};window.addEventListener("message",r);}).then(n=>{if(we.has(t))return;we.add(t),$e(e)?_e(t,n):Ge(e,n);}).catch(console.error).finally(()=>void te.delete(t))}),Ge=(e,t)=>{let n=new IntersectionObserver(s=>{s.some(r=>r.isIntersecting)&&(_e(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},_e=(e,t)=>{if(Ie.has(e))return;Ie.add(e);let n=window.parent.location.href;Fe__default.default.runtime.sendMessage({type:p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:ee[t]}).catch(s=>void console.error(s));},$e=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let s=Math.min(Math.max(0,t.x),n.width),r=Math.min(Math.max(0,t.x+t.width),n.width),l=Math.min(Math.max(0,t.y),n.height),i=Math.min(Math.max(0,t.y+t.height),n.height),o=t.width*t.height;return (r-s)*(i-l)/o>=.5};var ne=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var qe=(e,t)=>{["width","height"].forEach(s=>{var l;let r=(l=e.style[s])!=null?l:"";/^\d+(px)?$/.test(r)&&parseInt(r,10)<t[s]&&e.style.removeProperty(s);});},Ke=(e,t)=>y(void 0,null,function*(){let{elementStyle:n={},stylesOverrides:s=[]}=e;s.sort((c,m)=>c.parentDepth-m.parentDepth);let r,l=nanoid.nanoid(),i=document.createElement("iframe");i.src=p.getAdsStackIframeURL(l,e.adsMetadata,window.location.href),i.id=l;let o=e.adsMetadata[0],{dimensions:a}=typeof o=="number"?H[o]:o;i.style.width=`${a.width}px`,i.style.height=`${a.height}px`,i.style.border="none";for(let c in n)i.style.setProperty(c,n[c]);switch(i.setAttribute(D,"true"),qe(t,a),t.appendChild(i),e.type){case"replace-all-children":r=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":r=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(q,"true"),r=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}ve(i);let d=0;s.forEach(({parentDepth:c,style:m})=>{for(;c>d&&r;)r=r.parentElement,d++;r&&ne(r,m);});}),Le=e=>y(void 0,null,function*(){let{divWrapperStyle:t={}}=e,n=document.createElement("div");n.setAttribute(D,"true"),ne(n,t),yield Ke(e,n).catch(s=>{console.error("Inserting an ad attempt error:",s);let r=document.createElement("div");throw r.setAttribute(D,"true"),r.style.display="none",n.replaceWith(r),s});});var Qe=e=>Promise.allSettled(e.map(t=>y(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none"):yield Le(t);})));var re=(e,t)=>{let n=document.createElement("div");n.style.width=`${e}px`,n.style.height=`${t}px`;let s=document.createElement("div");s.style.width=`${e}px`,s.style.height=`${t}px`,n.appendChild(s);let r=document.createElement("a");r.href=p.SWAP_TKEY_URL,r.target="_blank",r.rel="noopener noreferrer",r.style.width="100%",r.style.height="100%",s.appendChild(r);let l=document.createElement("img");return l.src=p.TKEY_INPAGE_AD_URL,l.style.width="100%",l.style.height="100%",r.appendChild(l),{element:n}};var se=(e,t,n)=>{let{width:s,height:r}=t,l=document.createElement("iframe");return l.src=je(e,n,s,r,l.id),l.style.width=`${s}px`,l.style.height=`${r}px`,l.style.border="none",{element:l}},je=(e,t,n,s,r)=>{let l,i,o;if(e.native)o=p.HYPELAB_NATIVE_PLACEMENT_SLUG,l=360,i=110;else switch(e.size){case"small":l=320,i=50,o=p.HYPELAB_SMALL_PLACEMENT_SLUG;break;case"high":l=300,i=250,o=p.HYPELAB_HIGH_PLACEMENT_SLUG;break;case"wide":l=728,i=90,o=p.HYPELAB_WIDE_PLACEMENT_SLUG;break}let a=new URL(p.HYPELAB_ADS_WINDOW_URL);return a.searchParams.set("w",String(n!=null?n:l)),a.searchParams.set("h",String(s!=null?s:i)),a.searchParams.set("p",o),a.searchParams.set("o",Je(t)),r&&a.searchParams.set("id",r),a.toString()},Je=e=>cryptoJs.AES.encrypt(e,p.TEMPLE_PASSPHRASE).toString();var ie=(e,t,{width:n,height:s})=>{let r=document.createElement("iframe");return r.src=p.getPersonaIframeURL(e,t),r.id=e,r.style.width=`${n}px`,r.style.height=`${s}px`,r.style.border="none",{element:r}};var Ze=3e4,$=e=>window.parent.postMessage(JSON.stringify(e),"*"),Me=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){$({id:e,type:V,reason:"No more ads to render"});return}let[s,...r]=t,l=typeof s=="number"?H[s]:s;$({id:e,type:K,adMetadata:l});let{source:i,dimensions:o}=l,a,d=!0;switch(i.providerName){case"Temple":a=re(o.width,o.height);break;case"HypeLab":a=se(i,o,n),i.native&&(d=!1);break;default:a=ie(e,i.shape,o);}let{element:c}=a,m=document.getElementById("root"),A=document.getElementById("temple-label");if(m.replaceChildren(c),d?A.setAttribute("active",""):A.removeAttribute("active"),c instanceof HTMLIFrameElement)return new Promise((u,h)=>{setTimeout(()=>{window.removeEventListener("message",E),h(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(i)}`));},Ze);let R=!1,E=S=>{var x;if(S.source===c.contentWindow)try{let P=typeof S.data=="string"?JSON.parse(S.data):S.data;switch(P.type){case B:R||(R=!0,$({id:e,type:B,adMetadata:l}),u());break;case V:window.removeEventListener("message",E),h(new Error((x=P.reason)!=null?x:"Unknown error"));break;case Q:let{width:W,height:L}=P;W>0&&L>0&&(c.style.width=`${W}px`,c.style.height=`${L}px`,$(w(g({},P),{id:e})));}}catch(P){console.error("Observing error:",P);}};window.addEventListener("message",E);}).catch(u=>(console.error(u),Me(e,r,n)));$({id:e,type:B,adMetadata:l});});var et=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:s,providersSelectors:r,providersToReplaceAtAllSites:l,permanentAdPlacesRulesForAllDomains:i,permanentNativeAdPlacesRulesForAllDomains:o={},adsReplaceUrlsBlacklist:a=[],timestamp:d}=t,{hostname:c,href:m}=e;if(a.some(h=>new RegExp(h).test(m)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],timestamp:d};let A=m.replace(/#.*$/,""),u=h=>{let R=h.source.includes("#")?m:A;return h.test(R)};return {adPlacesRules:tt(c,u,n),permanentAdPlacesRules:nt(c,u,i,o),providersSelectors:st(c,u,s,r,l),timestamp:d}},tt=(e,t,n)=>{var l;return ((l=n[e])!=null?l:[]).map(a=>{var d=a,{urlRegexes:i}=d,o=I(d,["urlRegexes"]);return w(g({},o),{urlRegexes:i.map(c=>new RegExp(c))})}).reduce((i,c)=>{var m=c,{urlRegexes:o,selector:a}=m,d=I(m,["urlRegexes","selector"]);if(!o.some(t))return i;let R=a,{cssString:A}=R,u=I(R,["cssString"]),h=i.findIndex(x=>{var P=x,{selector:E}=P,S=I(P,["selector"]);let T=E,L=I(T,["cssString"]);return lodash.isEqual(u,L)&&lodash.isEqual(d,S)});return h===-1?i.push(g({selector:a},d)):i[h].selector.cssString+=", ".concat(A),i},[])},nt=(e,t,n,s={})=>{var o,a;let r=(o=n[e])!=null?o:[],l=(a=s[e])!=null?a:[];return r.map(m=>{var A=m,{urlRegexes:d}=A,c=I(A,["urlRegexes"]);return w(g({},c),{urlRegexes:d.map(u=>new RegExp(u)),isNative:!1})}).concat(l.map(m=>{var A=m,{urlRegexes:d}=A,c=I(A,["urlRegexes"]);return w(g({},c),{urlRegexes:d.map(u=>new RegExp(u)),isNative:!0})})).filter(({urlRegexes:d})=>d.some(t))};function rt(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var st=(e,t,n,s,r)=>{var c;let i=((c=n[e])!=null?c:[]).map(u=>{var h=u,{urlRegexes:m}=h,A=I(h,["urlRegexes"]);return w(g({},A),{urlRegexes:m.map(R=>new RegExp(R))})}).filter(({urlRegexes:m})=>m.some(t)),o=new Set,a={},d=m=>{var u;if(o.has(m))return;((u=s[m])!=null?u:[]).forEach(h=>{let{selector:R,parentDepth:E}=typeof h=="string"?{selector:h,parentDepth:0}:h;a[E]||(a[E]=new Set),a[E].add(R);}),o.add(m);};return r.forEach(d),i.forEach(({providers:m})=>m.forEach(d)),Object.entries(a).map(([m,A])=>({parentDepth:Number(m),selector:rt(A)}))};var N=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),oe=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.getProvidersRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers",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.getAllRules=()=>y(this,null,function*(){let[t,n,s,r,l,i,o]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:s,providersToReplaceAtAllSites:r,permanentAdPlacesRulesForAllDomains:l,permanentNativeAdPlacesRulesForAllDomains:i,adsReplaceUrlsBlacklist:o,timestamp:Date.now()}});this.api=ot__default.default.create({baseURL:new URL("/api",t).href,adapter:it__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:p.EXTENSION_VERSION}}}};
17
17
 
18
- exports.TempleWalletApi = Ae;
19
- exports.configureAds = ze;
20
- exports.executeAdsActions = rt;
21
- exports.getAdsActions = Qe;
22
- exports.renderAdsStack = Oe;
23
- exports.transformRawRules = lt;
18
+ exports.TempleWalletApi = oe;
19
+ exports.configureAds = Be;
20
+ exports.executeAdsActions = Qe;
21
+ exports.getAdsActions = Ye;
22
+ exports.renderAdsStack = Me;
23
+ exports.transformRawRules = et;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temple-wallet/extension-ads",
3
- "version": "6.3.2",
3
+ "version": "7.1.0-dev.1",
4
4
  "main": "dist/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,6 +20,7 @@
20
20
  "devDependencies": {
21
21
  "@types/crypto-js": "^4.2.2",
22
22
  "@types/lodash": "^4",
23
+ "@types/semver": "^7",
23
24
  "@types/webextension-polyfill": "^0",
24
25
  "@typescript-eslint/eslint-plugin": "^7.2.0",
25
26
  "@typescript-eslint/parser": "^7.2.0",
@@ -35,11 +36,11 @@
35
36
  },
36
37
  "packageManager": "yarn@4.1.1",
37
38
  "dependencies": {
38
- "@vespaiach/axios-fetch-adapter": "^0.3.1",
39
- "axios": "^1.6.7",
39
+ "axios": "^1.7.4",
40
40
  "crypto-js": "^4.2.0",
41
41
  "lodash": "^4.17.21",
42
42
  "nanoid": "^5.0.6",
43
+ "semver": "^7.6.2",
43
44
  "webextension-polyfill": "^0.10.0"
44
45
  },
45
46
  "types": "./dist/index.d.ts",
@@ -1,4 +1,4 @@
1
- import { BANNER_ADS_META, buildHypeLabNativeMeta } from 'src/ads-meta';
1
+ import { AdsConfiguration } from 'src/ads-configuration';
2
2
  import {
3
3
  SIBLING_REPLACEMENT_ATTRIBUTE_NAME,
4
4
  TEMPLE_WALLET_AD_ATTRIBUTE_NAME,
@@ -13,6 +13,13 @@ export const ourAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]`;
13
13
  export const ourBannerAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]:not([${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}])`;
14
14
  export const ourNativeAdQuerySelector = `[${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}]`;
15
15
 
16
+ export const sumPxValues = (values: string[]) =>
17
+ values.reduce((acc, value) => {
18
+ const parsedValue = parseInt(value, 10);
19
+
20
+ return isNaN(parsedValue) && PX_VALUE_REGEX.test(value) ? acc : acc + parsedValue;
21
+ }, 0);
22
+
16
23
  export const elementIsOurAd = (element: Element) => Boolean(element.closest(ourAdQuerySelector));
17
24
 
18
25
  export const prevBannerSiblingIsReplacement = (banner: Element) =>
@@ -72,8 +79,6 @@ export const getParentOfDepth = (element: HTMLElement, depth: number) => {
72
79
  return parent;
73
80
  };
74
81
 
75
- const smallestBannerAdsMetaIndex = BANNER_ADS_META.length - 2;
76
-
77
82
  export const pickAdsToDisplay = (
78
83
  containerWidth: number,
79
84
  containerHeight: number,
@@ -85,22 +90,23 @@ export const pickAdsToDisplay = (
85
90
  }
86
91
 
87
92
  if (adIsNative) {
88
- return [buildHypeLabNativeMeta(containerWidth, containerHeight)];
93
+ return AdsConfiguration.buildNativeAdsMeta(containerWidth, containerHeight);
89
94
  }
90
95
 
91
- return BANNER_ADS_META.reduce<number[]>((acc, { dimensions }, i) => {
96
+ return AdsConfiguration.bannerAdsMeta.reduce<number[]>((acc, { dimensions, source }, i) => {
97
+ const { shouldNotUseStrictContainerLimits = false } = source;
92
98
  const { minContainerWidth, maxContainerWidth, minContainerHeight, maxContainerHeight, width } = dimensions;
93
99
 
94
100
  let matches = false;
95
101
  switch (adType) {
96
102
  case AdType.Permanent:
97
103
  matches =
98
- i === smallestBannerAdsMetaIndex ||
104
+ shouldNotUseStrictContainerLimits ||
99
105
  (containerWidth >= width && (containerHeight >= minContainerHeight || containerHeight < 2));
100
106
  break;
101
107
  case AdType.SlotReplacement:
102
108
  matches =
103
- i === smallestBannerAdsMetaIndex ||
109
+ shouldNotUseStrictContainerLimits ||
104
110
  (containerWidth >= minContainerWidth && (containerHeight >= minContainerHeight || containerHeight < 2));
105
111
  break;
106
112
  default:
@@ -2,30 +2,54 @@ import {
2
2
  AddActionsIfAdResolutionAvailable,
3
3
  AdAction,
4
4
  AdActionType,
5
- AdType,
6
5
  HideElementAction,
7
- InsertAdActionWithoutMeta,
8
6
  RemoveElementAction
9
7
  } from 'src/types/ads-actions';
10
8
  import type { AdsRules } from 'src/types/ads-rules';
11
9
  import { delay } from 'src/utils';
12
10
 
13
- import { getFinalSize, pickAdsToDisplay } from './helpers';
11
+ import { getFinalSize, pickAdsToDisplay, sumPxValues } from './helpers';
12
+ import { processElementsToHideOrRemoveRule } from './process-elements-to-hide-or-remove-rule';
14
13
  import { processPermanentAdPlacesRule } from './process-permanent-rule';
15
14
  import { processProvidersAds } from './process-providers-ads';
16
15
  import { processAdPlacesRule } from './process-rule';
17
16
 
18
- export const getAdsActions = async ({ providersSelectors, adPlacesRules, permanentAdPlacesRules }: AdsRules) => {
17
+ export const getAdsActions = async ({
18
+ providersSelectors,
19
+ providersNegativeSelectors,
20
+ adPlacesRules,
21
+ permanentAdPlacesRules,
22
+ elementsToHideOrRemoveRules
23
+ }: AdsRules) => {
19
24
  const result: AdAction[] = [];
20
25
 
21
26
  const addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable = (
22
- elementToMeasure: Element,
23
- adType: AdType,
24
- adIsNative: boolean,
25
- ...actionsBases: (InsertAdActionWithoutMeta | HideElementAction | RemoveElementAction)[]
27
+ elementsToMeasure,
28
+ adType,
29
+ adIsNative,
30
+ ...actionsBases
26
31
  ): boolean => {
27
- const { width, height } = getFinalSize(elementToMeasure);
28
- const adsMetadata = pickAdsToDisplay(width, height, adType, adIsNative);
32
+ if (
33
+ actionsBases.length > 0 &&
34
+ actionsBases.every(
35
+ (action): action is HideElementAction | RemoveElementAction =>
36
+ action.type === AdActionType.HideElement || action.type === AdActionType.RemoveElement
37
+ )
38
+ ) {
39
+ result.push(...actionsBases);
40
+
41
+ return true;
42
+ }
43
+
44
+ const { width } = getFinalSize(elementsToMeasure.width);
45
+ const { height } = getFinalSize(elementsToMeasure.height);
46
+ const { paddingLeft, paddingRight } = window.getComputedStyle(elementsToMeasure.width);
47
+ const { paddingTop, paddingBottom } = window.getComputedStyle(elementsToMeasure.height);
48
+ const horizontalPadding = sumPxValues([paddingLeft, paddingRight]);
49
+ const innerWidth = horizontalPadding === width ? width : width - horizontalPadding;
50
+ const verticalPadding = sumPxValues([paddingTop, paddingBottom]);
51
+ const innerHeight = verticalPadding === height ? height : height - verticalPadding;
52
+ const adsMetadata = pickAdsToDisplay(innerWidth, innerHeight, adType, adIsNative);
29
53
 
30
54
  if (!adsMetadata.length) return false;
31
55
 
@@ -48,6 +72,14 @@ export const getAdsActions = async ({ providersSelectors, adPlacesRules, permane
48
72
  Otherwise (with `for` loop), original ads start glitching through more.
49
73
  */
50
74
 
75
+ await Promise.all(
76
+ elementsToHideOrRemoveRules.map(async rule => {
77
+ await delay(0);
78
+
79
+ processElementsToHideOrRemoveRule(rule, result);
80
+ })
81
+ );
82
+
51
83
  await Promise.all(
52
84
  permanentAdPlacesRules.map(async rule => {
53
85
  await delay(0);
@@ -66,7 +98,7 @@ export const getAdsActions = async ({ providersSelectors, adPlacesRules, permane
66
98
  })
67
99
  );
68
100
 
69
- await processProvidersAds(providersSelectors, addActionsIfAdResolutionAvailable, result);
101
+ await processProvidersAds(providersSelectors, providersNegativeSelectors, addActionsIfAdResolutionAvailable, result);
70
102
 
71
103
  return result;
72
104
  };
@@ -0,0 +1,25 @@
1
+ import { AdAction, AdActionType } from 'src/types/ads-actions';
2
+ import { ElementsToHideOrRemoveRule } from 'src/types/ads-rules';
3
+
4
+ import { applyQuerySelector, getParentOfDepth } from './helpers';
5
+
6
+ export const processElementsToHideOrRemoveRule = (rule: ElementsToHideOrRemoveRule, result: AdAction[]) => {
7
+ const { shouldHide, cssString, parentDepth, isMultiple } = rule;
8
+
9
+ applyQuerySelector(cssString, isMultiple).forEach(elem => {
10
+ const element = getParentOfDepth(elem as HTMLElement, parentDepth);
11
+
12
+ if (!element) {
13
+ return;
14
+ }
15
+
16
+ const styles = window.getComputedStyle(element);
17
+
18
+ if (styles.display !== 'none' && styles.visibility !== 'hidden') {
19
+ result.push({
20
+ type: shouldHide ? (AdActionType.HideElement as const) : (AdActionType.RemoveElement as const),
21
+ element
22
+ });
23
+ }
24
+ });
25
+ };
@@ -1,3 +1,5 @@
1
+ import { coerce, satisfies } from 'semver';
2
+
1
3
  import {
2
4
  AdAction,
3
5
  AdActionType,
@@ -27,11 +29,16 @@ export const processPermanentAdPlacesRule = async (
27
29
  addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable,
28
30
  result: AdAction[]
29
31
  ) => {
32
+ const { parentSelector, displayWidth: displayWidthRule } = rule;
30
33
  const {
31
34
  isMultiple: shouldSearchForManyParents,
32
35
  cssString: parentCssString,
33
36
  parentDepth: parentParentDepth
34
- } = rule.parentSelector;
37
+ } = parentSelector;
38
+
39
+ if (displayWidthRule && !satisfies(coerce(window.innerWidth)!, displayWidthRule)) {
40
+ return [];
41
+ }
35
42
 
36
43
  const parents = applyQuerySelector<HTMLElement>(parentCssString, shouldSearchForManyParents)
37
44
  .map(element => getParentOfDepth(element, parentParentDepth))
@@ -48,6 +55,20 @@ export const processPermanentAdPlacesRule = async (
48
55
  return parents;
49
56
  };
50
57
 
58
+ const getElementsToMeasure = (
59
+ selectors: Record<'width' | 'height', string> | undefined,
60
+ fallbackElement: HTMLElement
61
+ ) =>
62
+ selectors
63
+ ? {
64
+ width: (document.querySelector(selectors.width) as HTMLElement | null) ?? fallbackElement,
65
+ height: (document.querySelector(selectors.height) as HTMLElement | null) ?? fallbackElement
66
+ }
67
+ : {
68
+ width: fallbackElement,
69
+ height: fallbackElement
70
+ };
71
+
51
72
  const processPermanentAdsParent = (
52
73
  parent: HTMLElement,
53
74
  rule: PermanentAdPlacesRule,
@@ -64,7 +85,7 @@ const processPermanentAdsParent = (
64
85
  insertBeforeSelector,
65
86
  insertAfterSelector,
66
87
  insertionsCount = 1,
67
- elementToMeasureSelector,
88
+ elementsToMeasureSelectors,
68
89
  stylesOverrides,
69
90
  shouldHideOriginal = false,
70
91
  isNative,
@@ -113,10 +134,10 @@ const processPermanentAdsParent = (
113
134
  });
114
135
  }
115
136
  } else {
116
- let elementToMeasure = banner.parentElement?.children.length === 1 ? banner.parentElement : banner;
117
- if (elementToMeasureSelector) {
118
- elementToMeasure = document.querySelector(elementToMeasureSelector) ?? elementToMeasure;
119
- }
137
+ const elementsToMeasure = getElementsToMeasure(
138
+ elementsToMeasureSelectors,
139
+ banner.parentElement?.children.length === 1 ? banner.parentElement : banner
140
+ );
120
141
  const replaceActionBase: OmitAdInAction<ReplaceElementWithAdAction> = {
121
142
  type: AdActionType.ReplaceElement,
122
143
  element: banner,
@@ -151,7 +172,7 @@ const processPermanentAdsParent = (
151
172
  }
152
173
  if (
153
174
  actionsToInsert.length > 0 &&
154
- addActionsIfAdResolutionAvailable(elementToMeasure, AdType.Permanent, isNative, ...actionsToInsert)
175
+ addActionsIfAdResolutionAvailable(elementsToMeasure, AdType.Permanent, isNative, ...actionsToInsert)
155
176
  ) {
156
177
  insertionsLeft--;
157
178
  }
@@ -164,7 +185,7 @@ const processPermanentAdsParent = (
164
185
 
165
186
  let normalizedInsertionIndex = -1;
166
187
  let insertionParentElement = parent;
167
- let elementToMeasure = parent;
188
+ let elementsToMeasure = { width: parent, height: parent };
168
189
  const insertAnchorSelector = insertBeforeSelector || insertAfterSelector;
169
190
  if (insertAnchorSelector) {
170
191
  const insertAnchorElement = parent.querySelector(insertAnchorSelector);
@@ -174,9 +195,7 @@ const processPermanentAdsParent = (
174
195
  insertionParentElement = newInsertionParentElement;
175
196
  normalizedInsertionIndex =
176
197
  Array.from(parent.children).indexOf(insertAnchorElement) + (insertBeforeSelector ? 0 : 1);
177
- elementToMeasure =
178
- (elementToMeasureSelector && document.querySelector(elementToMeasureSelector)) ||
179
- (insertAnchorElement as HTMLElement);
198
+ elementsToMeasure = getElementsToMeasure(elementsToMeasureSelectors, insertAnchorElement as HTMLElement);
180
199
  }
181
200
  } else {
182
201
  const insertionIndexWithDefault = insertionIndex ?? 0;
@@ -186,9 +205,10 @@ const processPermanentAdsParent = (
186
205
  ? Math.max(parent.children.length + insertionIndexWithDefault, 0)
187
206
  : Math.min(insertionIndexWithDefault, parent.children.length);
188
207
 
189
- elementToMeasure =
190
- (elementToMeasureSelector && document.querySelector(elementToMeasureSelector)) ||
191
- ((parent.children[normalizedInsertionIndex] as HTMLElement | undefined) ?? parent);
208
+ elementsToMeasure = getElementsToMeasure(
209
+ elementsToMeasureSelectors,
210
+ (parent.children[normalizedInsertionIndex] as HTMLElement | undefined) ?? parent
211
+ );
192
212
  }
193
213
 
194
214
  if (normalizedInsertionIndex !== -1) {
@@ -204,7 +224,7 @@ const processPermanentAdsParent = (
204
224
  };
205
225
 
206
226
  addActionsIfAdResolutionAvailable(
207
- elementToMeasure,
227
+ elementsToMeasure,
208
228
  AdType.Permanent,
209
229
  isNative,
210
230
  ...Array<typeof actionBase>(insertionsLeft).fill(actionBase)
@@ -51,12 +51,13 @@ const styleToAdjustProps = [
51
51
 
52
52
  export const processProvidersAds = async (
53
53
  providersSelectors: AdsRules['providersSelectors'],
54
+ providersNegativeSelectors: AdsRules['providersNegativeSelectors'],
54
55
  addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable,
55
56
  result: AdAction[]
56
57
  ) => {
57
- const bannersFromProviders = providersSelectors
58
+ let bannersFromProviders = providersSelectors
58
59
  .map(({ selector: providersSelector, parentDepth }) => {
59
- return applyQuerySelector(providersSelector, true).reduce<Element[]>((acc, foundElement) => {
60
+ return applyQuerySelector(providersSelector, true).reduce<HTMLElement[]>((acc, foundElement) => {
60
61
  const newBanner = getParentOfDepth(foundElement as HTMLElement, parentDepth) ?? foundElement;
61
62
  const parentElementIndex = acc.findIndex(banner => banner.contains(newBanner));
62
63
 
@@ -77,15 +78,23 @@ export const processProvidersAds = async (
77
78
  }
78
79
 
79
80
  if (parentElementIndex >= 0) {
80
- acc.splice(parentElementIndex, 1, newBanner);
81
+ acc.splice(parentElementIndex, 1, newBanner as HTMLElement);
81
82
  } else if (!acc.some(ancestorCandidate => ancestorCandidate.contains(newBanner))) {
82
- acc.push(newBanner);
83
+ acc.push(newBanner as HTMLElement);
83
84
  }
84
85
 
85
86
  return acc;
86
87
  }, []);
87
88
  })
88
89
  .flat();
90
+ const bannersFromProvidersToExclude = providersNegativeSelectors
91
+ .map(({ selector, parentDepth }) =>
92
+ applyQuerySelector(selector, true)
93
+ .map(foundElement => getParentOfDepth(foundElement as HTMLElement, parentDepth))
94
+ .filter((value): value is HTMLElement => Boolean(value))
95
+ )
96
+ .flat();
97
+ bannersFromProviders = bannersFromProviders.filter(banner => !bannersFromProvidersToExclude.includes(banner));
89
98
 
90
99
  await Promise.all(
91
100
  bannersFromProviders.map(async banner => {
@@ -123,7 +132,7 @@ export const processProvidersAds = async (
123
132
  return;
124
133
  }
125
134
 
126
- const bannerStyle = window.getComputedStyle(banner as HTMLElement);
135
+ const bannerStyle = window.getComputedStyle(banner);
127
136
 
128
137
  const wrapperStyle = {
129
138
  ...Object.fromEntries(styleToAdjustProps.map(propName => [propName, bannerStyle.getPropertyValue(propName)])),
@@ -131,7 +140,7 @@ export const processProvidersAds = async (
131
140
  };
132
141
  const hideAction: HideElementAction = {
133
142
  type: AdActionType.HideElement,
134
- element: banner as HTMLElement
143
+ element: banner
135
144
  };
136
145
  const insertAdAction: OmitAdInAction<SimpleInsertAdAction> = {
137
146
  type: AdActionType.SimpleInsertAd,
@@ -145,7 +154,12 @@ export const processProvidersAds = async (
145
154
  ? []
146
155
  : [hideAction]
147
156
  : [hideAction, insertAdAction];
148
- addActionsIfAdResolutionAvailable(elementToMeasure, AdType.ProviderReplacement, false, ...actions);
157
+ addActionsIfAdResolutionAvailable(
158
+ { width: elementToMeasure, height: elementToMeasure },
159
+ AdType.ProviderReplacement,
160
+ false,
161
+ ...actions
162
+ );
149
163
  }
150
164
  })
151
165
  );
@@ -129,6 +129,11 @@ const processSelectedElement = (
129
129
  }
130
130
 
131
131
  if (actionsBases.length > 0) {
132
- addActionsIfAdResolutionAvailable(banner, AdType.SlotReplacement, isNative, ...actionsBases);
132
+ addActionsIfAdResolutionAvailable(
133
+ { width: banner, height: banner },
134
+ AdType.SlotReplacement,
135
+ isNative,
136
+ ...actionsBases
137
+ );
133
138
  }
134
139
  };