@temple-wallet/extension-ads 5.0.3 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -89,7 +89,10 @@ interface RawAdProvidersRule {
89
89
  interface RawAllAdsRules {
90
90
  adPlacesRulesForAllDomains: Record<string, RawAdPlacesRule[]>;
91
91
  providersRulesForAllDomains: Record<string, RawAdProvidersRule[]>;
92
- providersSelectors: Record<string, string[]>;
92
+ providersSelectors: Record<string, (string | {
93
+ selector: string;
94
+ parentDepth: number;
95
+ })[]>;
93
96
  providersToReplaceAtAllSites: string[];
94
97
  permanentAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
95
98
  permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
@@ -159,11 +162,14 @@ interface PermanentAdPlacesRule extends Omit<RawPermanentAdPlacesRule, 'urlRegex
159
162
  interface AdsRules {
160
163
  adPlacesRules: Array<Omit<AdPlacesRule, 'urlRegexes'>>;
161
164
  permanentAdPlacesRules: PermanentAdPlacesRule[];
162
- providersSelector: string;
165
+ providersSelectors: Array<{
166
+ selector: string;
167
+ parentDepth: number;
168
+ }>;
163
169
  timestamp: number;
164
170
  }
165
171
 
166
- declare const getAdsActions: ({ providersSelector, adPlacesRules, permanentAdPlacesRules }: AdsRules) => Promise<AdAction[]>;
172
+ declare const getAdsActions: ({ providersSelectors, adPlacesRules, permanentAdPlacesRules }: AdsRules) => Promise<AdAction[]>;
167
173
 
168
174
  interface IAdsConfiguration {
169
175
  hypelab: {
@@ -201,7 +207,10 @@ declare class TempleWalletApi {
201
207
  getAdPlacesRulesForAllDomains: () => Promise<Record<string, RawAdPlacesRule[]>>;
202
208
  getProvidersToReplaceAtAllSites: () => Promise<string[]>;
203
209
  getProvidersRulesForAllDomains: () => Promise<Record<string, RawAdProvidersRule[]>>;
204
- getSelectorsForAllProviders: () => Promise<Record<string, string[]>>;
210
+ getSelectorsForAllProviders: () => Promise<Record<string, (string | {
211
+ selector: string;
212
+ parentDepth: number;
213
+ })[]>>;
205
214
  getPermanentAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
206
215
  getPermanentNativeAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
207
216
  getAdsReplaceUrlsBlacklist: () => Promise<string[]>;
package/dist/index.js CHANGED
@@ -4,19 +4,19 @@ var nanoid = require('nanoid');
4
4
  var Fe = require('webextension-polyfill');
5
5
  var cryptoJs = require('crypto-js');
6
6
  var lodash = require('lodash');
7
- var st = require('@vespaiach/axios-fetch-adapter');
8
- var it = 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
12
  var Fe__default = /*#__PURE__*/_interopDefault(Fe);
13
- var st__default = /*#__PURE__*/_interopDefault(st);
14
13
  var it__default = /*#__PURE__*/_interopDefault(it);
14
+ var ot__default = /*#__PURE__*/_interopDefault(ot);
15
15
 
16
- var Ce=Object.defineProperty,Ne=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var Ee=Object.prototype.hasOwnProperty,he=Object.prototype.propertyIsEnumerable;var ue=(e,t,r)=>t in e?Ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))Ee.call(t,r)&&ue(e,r,t[r]);if($)for(var r of $(t))he.call(t,r)&&ue(e,r,t[r]);return e},P=(e,t)=>Ne(e,We(t));var T=(e,t)=>{var r={};for(var o in e)Ee.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&$)for(var o of $(e))t.indexOf(o)<0&&he.call(e,o)&&(r[o]=e[o]);return r};var R=(e,t,r)=>new Promise((o,n)=>{var s=m=>{try{i(r.next(m));}catch(l){n(l);}},a=m=>{try{i(r.throw(m));}catch(l){n(l);}},i=m=>m.done?o(m.value):Promise.resolve(m.value).then(s,a);i((r=r.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 Oe=e=>{let{hypelab:t,hypelabAdsWindowUrl:r,tkeyInpageAdUrl:o,swapTkeyUrl:n,externalAdsActivityMessageType:s,getPersonaIframeURL:a,getAdsStackIframeURL:i,extVersion:m,templePassphrase:l}=e,{native:c,small:A,regular:d,wide:u}=t;p.HYPELAB_NATIVE_PLACEMENT_SLUG=c,p.HYPELAB_SMALL_PLACEMENT_SLUG=A,p.HYPELAB_HIGH_PLACEMENT_SLUG=d,p.HYPELAB_WIDE_PLACEMENT_SLUG=u,p.HYPELAB_ADS_WINDOW_URL=r,p.TKEY_INPAGE_AD_URL=o,p.SWAP_TKEY_URL=n,p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=s,p.getPersonaIframeURL=a,p.getAdsStackIframeURL=i,p.EXTENSION_VERSION=m,p.TEMPLE_PASSPHRASE=l;};var b=[{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:110}},{source:{providerName:"Persona",shape:"regular",shouldNotUseStrictContainerLimits:!0},dimensions:{width:321,height:101,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:110}}],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 H="twa",z="twa-sibling-replacement";var q="adRenderStart",K="resize",C="ready",Y="error";var v=`iframe[${H}], div[${H}]`,N=e=>!!e.closest(v),W=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(z))},Q=e=>{let t=getComputedStyle(e),{x:r,right:o,width:n,height:s}=e.getBoundingClientRect(),a={width:n,height:s},i=["width","height"];for(let m of i){let l=t[m],A=e.getAttribute(m)||l;/\d+px/.test(A)&&(a[m]=Number(A.replace("px",""))),m==="width"&&r<0?a.width+=r:m==="width"&&o>window.innerWidth&&(a.width=window.innerWidth-r);}return a},L=(e,t,r=document)=>e?t?[...r.querySelectorAll(e)]:[r.querySelector(e)].filter(o=>!!o):[],F=(e,t)=>{let r=e;for(let o=0;o<t;o++){let n=r.parentElement;if(!n)return null;r=n;}return r},ge=b.length-2,ye=(e,t,r,o)=>e<2&&t<2?[]:o?[Re(e,t)]:b.reduce((n,{dimensions:s},a)=>{let{minContainerWidth:i,maxContainerWidth:m,minContainerHeight:l,maxContainerHeight:c,width:A}=s,d=!1;switch(r){case"permanent":d=a===ge||e>=A&&(t>=l||t<2);break;case"slot-replacement":d=a===ge||e>=i&&(t>=l||t<2);break;default:d=e>=i&&t>=l&&e<=m&&t<=c;}return d&&n.push(a),n},[]);var Se=(e,t,r)=>R(void 0,null,function*(){let{isMultiple:o,cssString:n,parentDepth:s}=e.parentSelector,a=L(n,o).map(i=>F(i,s)).filter(i=>!!i);return yield Promise.all(a.map(i=>R(void 0,null,function*(){yield _(0),Ue(i,e,t,r);}))),a}),Ue=(e,t,r,o)=>{var me;let{shouldUseDivWrapper:n,divWrapperStyle:s,elementStyle:a,adSelector:i,insertionIndex:m,insertBeforeSelector:l,insertAfterSelector:c,insertionsCount:A=1,elementToMeasureSelector:d,stylesOverrides:u,shouldHideOriginal:E=!1,isNative:f}=t,g=n?s:{display:"contents"},{isMultiple:w,cssString:I,parentDepth:M}=i,O=L(v,!0,e).reduce((h,x)=>h.some(B=>B.contains(x)||x.contains(B))?h:[...h,x],[]).length,S=A-O;if(L(I,w,e).map(h=>F(h,M)).filter(h=>fe(h)&&!N(h)).forEach(h=>{var B,ce;let x=window.getComputedStyle(h).display==="none";if(S<=0)(!E||!x)&&o.push({type:E?"hide-element":"remove-element",element:h});else {let J=((B=h.parentElement)==null?void 0:B.children.length)===1?h.parentElement:h;d&&(J=(ce=document.querySelector(d))!=null?ce:J);let He={type:"replace-element",element:h,divWrapperStyle:g,elementStyle:a,stylesOverrides:u},Ae={type:"hide-element",element:h},De={type:"simple-insert-ad",divWrapperStyle:g,elementStyle:a,parent:h.parentElement,insertionIndex:Array.from(h.parentElement.children).indexOf(h),isSiblingReplacement:!0,stylesOverrides:u},k=[],pe=W(h);E&&pe&&!x?k=[Ae]:E&&!pe?k=[Ae,De]:E||(k=[He]),k.length>0&&r(J,"permanent",f,...k)&&S--;}}),S<=0)return;let U=-1,le=e,j=e,de=l||c;if(de){let h=e.querySelector(de),x=h==null?void 0:h.parentElement;h&&x&&(le=x,U=Array.from(e.children).indexOf(h)+(l?0:1),j=d&&document.querySelector(d)||h);}else {let h=m!=null?m:0;U=h<0?Math.max(e.children.length+h,0):Math.min(h,e.children.length),j=d&&document.querySelector(d)||((me=e.children[U])!=null?me:e);}if(U!==-1){let h={type:"simple-insert-ad",divWrapperStyle:g,elementStyle:a,parent:le,insertionIndex:U,isSiblingReplacement:!1,stylesOverrides:u};r(j,"permanent",f,...Array(S).fill(h));}};var Be=["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,r)=>R(void 0,null,function*(){let o=L(e,!0).reduce((n,s)=>{let a=n.findIndex(d=>d.contains(s)),i=s.parentElement&&window.getComputedStyle(s.parentElement),{width:m,height:l}=Q(s),c=r.some(d=>{var u;return d.type==="replace-all-children"||d.type==="simple-insert-ad"?d.parent.contains(s)||s.contains(d.parent):((u=d.element.parentElement)==null?void 0:u.contains(s))||s.contains(d.element)}),A=(i==null?void 0:i.display)==="none"||(i==null?void 0:i.visibility)==="hidden";return c||m===0||l===0||A||(a>=0?n.splice(a,1,s):n.some(d=>d.contains(s))||n.push(s)),n},[]);yield Promise.all(o.map(n=>R(void 0,null,function*(){var i,m,l,c,A,d,u,E;yield _(0);let s=n.parentElement,a=(m=(i=s==null?void 0:s.closest("div, article, aside, footer, header"))!=null?i:(s==null?void 0:s.tagName.toLowerCase())==="body"?void 0:s)!=null?m:n;if(!N(n)&&!n.querySelector(v)&&!r.some(f=>f.type==="simple-insert-ad"?!1:f.type==="replace-all-children"?f.parent.contains(n):f.element===n)){let f=(l=n.getAttribute("style"))!=null?l:"",g=Object.fromEntries(f.split(";").filter(Boolean).map(S=>S.split(":").map(ae=>ae.trim())));if((c=g.width)!=null&&c.match(/^0[a-z]/)||(A=g.height)!=null&&A.match(/^0[a-z]/))return;let w=window.getComputedStyle(n),I=y(y({},Object.fromEntries(Be.map(S=>[S,w.getPropertyValue(S)]))),g),M={type:"hide-element",element:n},X={type:"simple-insert-ad",divWrapperStyle:I,parent:(d=n.parentElement)!=null?d:document.body,insertionIndex:Array.from((E=(u=n.parentElement)==null?void 0:u.children)!=null?E:[]).indexOf(n),isSiblingReplacement:!0},O=W(n)?window.getComputedStyle(n).display==="none"?[]:[M]:[M,X];t(a,"provider-replacement",!1,...O);}})));});var Te=(e,t,r)=>R(void 0,null,function*(){let{cssString:o,isMultiple:n}=e.selector,s=L(o,n);yield Promise.all(s.map(a=>R(void 0,null,function*(){yield _(0),ke(a,e,t,r);})));}),ke=(e,t,r,o)=>{let{selector:{shouldUseDivWrapper:n,parentDepth:s,divWrapperStyle:a},stylesOverrides:i,shouldHideOriginal:m}=t,l=F(e,s);if(!l||r.some(d=>d.contains(l))||N(l)||l.querySelector(v))return;let c={shouldUseDivWrapper:n,divWrapperStyle:a},A;if(n&&m){let d=l.parentElement,u=window.getComputedStyle(l).display==="none",E=y({type:"simple-insert-ad",parent:d,insertionIndex:Array.from(d.children).indexOf(l),stylesOverrides:i==null?void 0:i.map(w=>{var I=w,{parentDepth:f}=I,g=T(I,["parentDepth"]);return P(y({},g),{parentDepth:f-1})}),isSiblingReplacement:!0},c);A=[],u||A.push({type:"hide-element",element:l}),W(l)||A.push(E);}else if(n)A=[y({type:"replace-element",element:l,stylesOverrides:i==null?void 0:i.map(f=>{var g=f,{parentDepth:u}=g,E=T(g,["parentDepth"]);return P(y({},E),{parentDepth:u-1})})},c)];else if(m){let d={type:"simple-insert-ad",parent:l,insertionIndex:0,stylesOverrides:i,isSiblingReplacement:!0,divWrapperStyle:{display:"contents"}};A=Array.from(l.children).filter(u=>window.getComputedStyle(u).display!=="none").map(u=>({type:"hide-element",element:u})),l.querySelector(v)||A.push(d);}else A=[{type:"replace-all-children",parent:l,stylesOverrides:i,divWrapperStyle:{display:"contents"}}];A.length>0&&o(l,"slot-replacement",!1,...A);};var Ye=o=>R(void 0,[o],function*({providersSelector:e,adPlacesRules:t,permanentAdPlacesRules:r}){let n=[],s=(i,m,l,...c)=>{let{width:A,height:d}=Q(i),u=ye(A,d,m,l);return u.length?(n.push(...c.map(E=>E.type==="hide-element"||E.type==="remove-element"?E:P(y({},E),{adsMetadata:u}))),!0):!1},a=[];return yield Promise.all(r.map(i=>R(void 0,null,function*(){yield _(0),a=a.concat(yield Se(i,s,n));}))),yield Promise.all(t.map(i=>R(void 0,null,function*(){yield _(0),yield Te(i,a,s);}))),yield Pe(e,s,n),n});var ee=(n=>(n.Optimal="Optimal",n.HypeLab="HypeLab",n.Persona="Persona",n.Temple="Temple Wallet",n))(ee||{});var te=new Set,Ie=new Set,we=new Set,Ve=3e4,_e=e=>R(void 0,null,function*(){let t=e.id;if(!te.has(t))return te.add(t),new Promise((r,o)=>{setTimeout(()=>{window.removeEventListener("message",n),o(new Error(`Timeout exceeded for ${t}`));},Ve);let n=s=>{var a;if(s.source===e.contentWindow)try{let i=typeof s.data=="string"?JSON.parse(s.data):s.data;if(i.id!==t)return;switch(i.type){case C:r(i.adMetadata.source.providerName);break;case Y:window.removeEventListener("message",n),e.style.display="none",o(new Error((a=i.reason)!=null?a:"Unknown error"));break;case q:let{dimensions:m}=i.adMetadata,{width:l,height:c}=m;l>0&&c>0&&(e.style.width=`${m.width}px`,e.style.height=`${m.height}px`);break;case K:let{width:A,height:d}=i;e.style.width=`${A}px`,e.style.height=`${d}px`;}}catch(i){console.error("Observing error:",i);}};window.addEventListener("message",n);}).then(r=>{if(Ie.has(t))return;Ie.add(t),$e(e)?ve(t,r):Ge(e,r);}).catch(console.error).finally(()=>void te.delete(t))}),Ge=(e,t)=>{let r=new IntersectionObserver(o=>{o.some(n=>n.isIntersecting)&&(ve(e.id,t),r.disconnect());},{threshold:.5});r.observe(e);},ve=(e,t)=>{if(we.has(e))return;we.add(e);let r=window.parent.location.href;Fe__default.default.runtime.sendMessage({type:p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:r,provider:ee[t]}).catch(o=>void console.error(o));},$e=e=>{let t=e.getBoundingClientRect(),r=window.visualViewport;if(!r)return !1;let o=Math.min(Math.max(0,t.x),r.width),n=Math.min(Math.max(0,t.x+t.width),r.width),s=Math.min(Math.max(0,t.y),r.height),a=Math.min(Math.max(0,t.y+t.height),r.height),i=t.width*t.height;return (n-o)*(a-s)/i>=.5};var ne=(e,t)=>{for(let r in t)e.style.setProperty(r,t[r]);};var qe=(e,t)=>{["width","height"].forEach(o=>{var s;let n=(s=e.style[o])!=null?s:"";/^\d+(px)?$/.test(n)&&parseInt(n,10)<t[o]&&e.style.removeProperty(o);});},Ke=(e,t)=>R(void 0,null,function*(){let{elementStyle:r={},stylesOverrides:o=[]}=e;o.sort((c,A)=>c.parentDepth-A.parentDepth);let n,s=nanoid.nanoid(),a=document.createElement("iframe");a.src=p.getAdsStackIframeURL(s,e.adsMetadata,window.location.href),a.id=s;let i=e.adsMetadata[0],{dimensions:m}=typeof i=="number"?b[i]:i;a.style.width=`${m.width}px`,a.style.height=`${m.height}px`,a.style.border="none";for(let c in r)a.style.setProperty(c,r[c]);switch(a.setAttribute(H,"true"),qe(t,m),t.appendChild(a),e.type){case"replace-all-children":n=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":n=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(z,"true"),n=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}_e(a);let l=0;o.forEach(({parentDepth:c,style:A})=>{for(;c>l&&n;)n=n.parentElement,l++;n&&ne(n,A);});}),Le=e=>R(void 0,null,function*(){let{divWrapperStyle:t={}}=e,r=document.createElement("div");r.setAttribute(H,"true"),ne(r,t),yield Ke(e,r).catch(o=>{console.error("Inserting an ad attempt error:",o);let n=document.createElement("div");throw n.setAttribute(H,"true"),n.style.display="none",r.replaceWith(n),o});});var Qe=e=>Promise.allSettled(e.map(t=>R(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 r=document.createElement("div");r.style.width=`${e}px`,r.style.height=`${t}px`;let o=document.createElement("div");o.style.width=`${e}px`,o.style.height=`${t}px`,r.appendChild(o);let n=document.createElement("a");n.href=p.SWAP_TKEY_URL,n.target="_blank",n.rel="noopener noreferrer",n.style.width="100%",n.style.height="100%",o.appendChild(n);let s=document.createElement("img");return s.src=p.TKEY_INPAGE_AD_URL,s.style.width="100%",s.style.height="100%",n.appendChild(s),{element:r}};var se=(e,t,r)=>{let{width:o,height:n}=t,s=document.createElement("iframe");return s.src=je(e,r,o,n,s.id),s.style.width=`${o}px`,s.style.height=`${n}px`,s.style.border="none",{element:s}},je=(e,t,r,o,n)=>{let s,a,i;if(e.native)i=p.HYPELAB_NATIVE_PLACEMENT_SLUG,s=360,a=110;else switch(e.size){case"small":s=320,a=50,i=p.HYPELAB_SMALL_PLACEMENT_SLUG;break;case"high":s=300,a=250,i=p.HYPELAB_HIGH_PLACEMENT_SLUG;break;case"wide":s=728,a=90,i=p.HYPELAB_WIDE_PLACEMENT_SLUG;break}let m=new URL(p.HYPELAB_ADS_WINDOW_URL);return m.searchParams.set("w",String(r!=null?r:s)),m.searchParams.set("h",String(o!=null?o:a)),m.searchParams.set("p",i),m.searchParams.set("o",Je(t)),n&&m.searchParams.set("id",n),m.toString()},Je=e=>cryptoJs.AES.encrypt(e,p.TEMPLE_PASSPHRASE).toString();var ie=(e,t,{width:r,height:o})=>{let n=document.createElement("iframe");return n.src=p.getPersonaIframeURL(e,t),n.id=e,n.style.width=`${r}px`,n.style.height=`${o}px`,n.style.border="none",{element:n}};var Ze=3e4,G=e=>window.parent.postMessage(JSON.stringify(e),"*"),Me=(e,t,r)=>R(void 0,null,function*(){if(t.length===0){G({id:e,type:Y,reason:"No more ads to render"});return}let[o,...n]=t,s=typeof o=="number"?b[o]:o;G({id:e,type:q,adMetadata:s});let{source:a,dimensions:i}=s,m;switch(a.providerName){case"Temple":m=re(i.width,i.height);break;case"HypeLab":m=se(a,i,r);break;default:m=ie(e,a.shape,i);}let{element:l}=m;if(document.body.replaceChildren(l),l instanceof HTMLIFrameElement)return new Promise((c,A)=>{setTimeout(()=>{window.removeEventListener("message",u),A(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(a)}`));},Ze);let d=!1,u=E=>{var f;if(E.source===l.contentWindow)try{let g=typeof E.data=="string"?JSON.parse(E.data):E.data;switch(g.type){case C:d||(d=!0,G({id:e,type:C,adMetadata:s}),c());break;case Y:window.removeEventListener("message",u),A(new Error((f=g.reason)!=null?f:"Unknown error"));break;case K:let{width:w,height:I}=g;w>0&&I>0&&(l.style.width=`${w}px`,l.style.height=`${I}px`,G(P(y({},g),{id:e})));}}catch(g){console.error("Observing error:",g);}};window.addEventListener("message",u);}).catch(c=>(console.error(c),Me(e,n,r)));G({id:e,type:C,adMetadata:s});});var et=(e,t)=>{let{adPlacesRulesForAllDomains:r,providersRulesForAllDomains:o,providersSelectors:n,providersToReplaceAtAllSites:s,permanentAdPlacesRulesForAllDomains:a,permanentNativeAdPlacesRulesForAllDomains:i={},adsReplaceUrlsBlacklist:m=[],timestamp:l}=t,{hostname:c,href:A}=e;if(m.some(E=>new RegExp(E).test(A)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelector:"",timestamp:l};let d=A.replace(/#.*$/,""),u=E=>{let f=E.source.includes("#")?A:d;return E.test(f)};return {adPlacesRules:tt(c,u,r),permanentAdPlacesRules:nt(c,u,a,i),providersSelector:rt(c,u,o,n,s),timestamp:l}},tt=(e,t,r)=>{var s;return ((s=r[e])!=null?s:[]).map(m=>{var l=m,{urlRegexes:a}=l,i=T(l,["urlRegexes"]);return P(y({},i),{urlRegexes:a.map(c=>new RegExp(c))})}).reduce((a,c)=>{var A=c,{urlRegexes:i,selector:m}=A,l=T(A,["urlRegexes","selector"]);if(!i.some(t))return a;let f=m,{cssString:d}=f,u=T(f,["cssString"]),E=a.findIndex(I=>{var M=I,{selector:g}=M,w=T(M,["selector"]);let S=g,O=T(S,["cssString"]);return lodash.isEqual(u,O)&&lodash.isEqual(l,w)});return E===-1?a.push(y({selector:m},l)):a[E].selector.cssString+=", ".concat(d),a},[])},nt=(e,t,r,o={})=>{var i,m;let n=(i=r[e])!=null?i:[],s=(m=o[e])!=null?m:[];return n.map(A=>{var d=A,{urlRegexes:l}=d,c=T(d,["urlRegexes"]);return P(y({},c),{urlRegexes:l.map(u=>new RegExp(u)),isNative:!1})}).concat(s.map(A=>{var d=A,{urlRegexes:l}=d,c=T(d,["urlRegexes"]);return P(y({},c),{urlRegexes:l.map(u=>new RegExp(u)),isNative:!0})})).filter(({urlRegexes:l})=>l.some(t))},rt=(e,t,r,o,n)=>{var A;let a=((A=r[e])!=null?A:[]).map(E=>{var f=E,{urlRegexes:d}=f,u=T(f,["urlRegexes"]);return P(y({},u),{urlRegexes:d.map(g=>new RegExp(g))})}).filter(({urlRegexes:d})=>d.some(t)),i=new Set,m=new Set,l=d=>{var E;if(i.has(d))return;((E=o[d])!=null?E:[]).forEach(f=>m.add(f)),i.add(d);};n.forEach(l),a.forEach(({providers:d})=>d.forEach(l));let c="";return m.forEach(d=>{c+=d+", ";}),c&&(c=c.slice(0,-2)),c};var D=e=>(...t)=>R(void 0,null,function*(){let{data:r}=yield e(...t);return r}),oe=class{constructor(t){this.getAdPlacesRulesForAllDomains=D(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=D(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=D(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=D(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=D(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=D(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=D(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getAllRules=()=>R(this,null,function*(){let[t,r,o,n,s,a,i]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:r,providersSelectors:o,providersToReplaceAtAllSites:n,permanentAdPlacesRulesForAllDomains:s,permanentNativeAdPlacesRulesForAllDomains:a,adsReplaceUrlsBlacklist:i,timestamp:Date.now()}});this.api=it__default.default.create({baseURL:new URL("/api",t).href,adapter:st__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:p.EXTENSION_VERSION}}}};
16
+ var Ce=Object.defineProperty,Ne=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var $=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($)for(var n of $(t))Ee.call(t,n)&&ue(e,n,t[n]);return e},T=(e,t)=>Ne(e,We(t));var w=(e,t)=>{var n={};for(var s in e)he.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&$)for(var s of $(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{i(n.next(a));}catch(d){r(d);}},o=a=>{try{i(n.throw(a));}catch(d){r(d);}},i=a=>a.done?s(a.value):Promise.resolve(a.value).then(l,o);i((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:o,getAdsStackIframeURL:i,extVersion:a,templePassphrase:d}=e,{native:A,small:m,regular:c,wide:u}=t;p.HYPELAB_NATIVE_PLACEMENT_SLUG=A,p.HYPELAB_SMALL_PLACEMENT_SLUG=m,p.HYPELAB_HIGH_PLACEMENT_SLUG=c,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=o,p.getAdsStackIframeURL=i,p.EXTENSION_VERSION=a,p.TEMPLE_PASSPHRASE=d;};var b=[{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 H="twa",z="twa-sibling-replacement";var q="adRenderStart",K="resize",N="ready",F="error";var v=`iframe[${H}], div[${H}]`,W=e=>!!e.closest(v),B=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(z))},Q=e=>{let t=getComputedStyle(e),{x:n,right:s,width:r,height:l}=e.getBoundingClientRect(),o={width:r,height:l},i=["width","height"];for(let a of i){let d=t[a],m=e.getAttribute(a)||d;/\d+px/.test(m)&&(o[a]=Number(m.replace("px",""))),a==="width"&&n<0?o.width+=n:a==="width"&&s>window.innerWidth&&(o.width=window.innerWidth-n);}return o},L=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(s=>!!s):[],D=(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=b.length-2,ge=(e,t,n,s)=>e<2&&t<2?[]:s?[Re(e,t)]:b.reduce((r,{dimensions:l},o)=>{let{minContainerWidth:i,maxContainerWidth:a,minContainerHeight:d,maxContainerHeight:A,width:m}=l,c=!1;switch(n){case"permanent":c=o===ye||e>=m&&(t>=d||t<2);break;case"slot-replacement":c=o===ye||e>=i&&(t>=d||t<2);break;default:c=e>=i&&t>=d&&e<=a&&t<=A;}return c&&r.push(o),r},[]);var Se=(e,t,n)=>y(void 0,null,function*(){let{isMultiple:s,cssString:r,parentDepth:l}=e.parentSelector,o=L(r,s).map(i=>D(i,l)).filter(i=>!!i);return yield Promise.all(o.map(i=>y(void 0,null,function*(){yield _(0),Oe(i,e,t,n);}))),o}),Oe=(e,t,n,s)=>{var me;let{shouldUseDivWrapper:r,divWrapperStyle:l,elementStyle:o,adSelector:i,insertionIndex:a,insertBeforeSelector:d,insertAfterSelector:A,insertionsCount:m=1,elementToMeasureSelector:c,stylesOverrides:u,shouldHideOriginal:h=!1,isNative:R}=t,E=r?l:{display:"contents"},{isMultiple:S,cssString:I,parentDepth:M}=i,O=L(v,!0,e).reduce((f,x)=>f.some(k=>k.contains(x)||x.contains(k))?f:[...f,x],[]).length,P=m-O;if(L(I,S,e).map(f=>D(f,M)).filter(f=>fe(f)&&!W(f)).forEach(f=>{var k,ce;let x=window.getComputedStyle(f).display==="none";if(P<=0)(!h||!x)&&s.push({type:h?"hide-element":"remove-element",element:f});else {let J=((k=f.parentElement)==null?void 0:k.children.length)===1?f.parentElement:f;c&&(J=(ce=document.querySelector(c))!=null?ce:J);let He={type:"replace-element",element:f,divWrapperStyle:E,elementStyle:o,stylesOverrides:u},Ae={type:"hide-element",element:f},De={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:o,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:u},Y=[],pe=B(f);h&&pe&&!x?Y=[Ae]:h&&!pe?Y=[Ae,De]:h||(Y=[He]),Y.length>0&&n(J,"permanent",R,...Y)&&P--;}}),P<=0)return;let U=-1,le=e,j=e,de=d||A;if(de){let f=e.querySelector(de),x=f==null?void 0:f.parentElement;f&&x&&(le=x,U=Array.from(e.children).indexOf(f)+(d?0:1),j=c&&document.querySelector(c)||f);}else {let f=a!=null?a:0;U=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),j=c&&document.querySelector(c)||((me=e.children[U])!=null?me:e);}if(U!==-1){let f={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:o,parent:le,insertionIndex:U,isSiblingReplacement:!1,stylesOverrides:u};n(j,"permanent",R,...Array(P).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})=>L(r,!0).reduce((o,i)=>{var R;let a=(R=D(i,l))!=null?R:i,d=o.findIndex(E=>E.contains(a)),A=a.parentElement&&window.getComputedStyle(a.parentElement),{width:m,height:c}=Q(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=(A==null?void 0:A.display)==="none"||(A==null?void 0:A.visibility)==="hidden";return u||m===0||c===0||h||(d>=0?o.splice(d,1,a):o.some(E=>E.contains(a))||o.push(a)),o},[])).flat();yield Promise.all(s.map(r=>y(void 0,null,function*(){var i,a,d,A,m,c,u,h;yield _(0);let l=r.parentElement,o=(a=(i=l==null?void 0:l.closest("div, article, aside, footer, header"))!=null?i:(l==null?void 0:l.tagName.toLowerCase())==="body"?void 0:l)!=null?a:r;if(!W(r)&&!r.querySelector(v)&&!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(P=>P.split(":").map(ae=>ae.trim())));if((A=E.width)!=null&&A.match(/^0[a-z]/)||(m=E.height)!=null&&m.match(/^0[a-z]/))return;let S=window.getComputedStyle(r),I=g(g({},Object.fromEntries(Ue.map(P=>[P,S.getPropertyValue(P)]))),E),M={type:"hide-element",element:r},X={type:"simple-insert-ad",divWrapperStyle:I,parent:(c=r.parentElement)!=null?c:document.body,insertionIndex:Array.from((h=(u=r.parentElement)==null?void 0:u.children)!=null?h:[]).indexOf(r),isSiblingReplacement:!0},O=B(r)?window.getComputedStyle(r).display==="none"?[]:[M]:[M,X];t(o,"provider-replacement",!1,...O);}})));});var Te=(e,t,n)=>y(void 0,null,function*(){let{cssString:s,isMultiple:r}=e.selector,l=L(s,r);yield Promise.all(l.map(o=>y(void 0,null,function*(){yield _(0),ke(o,e,t,n);})));}),ke=(e,t,n,s)=>{let{selector:{shouldUseDivWrapper:r,parentDepth:l,divWrapperStyle:o},stylesOverrides:i,shouldHideOriginal:a}=t,d=D(e,l);if(!d||n.some(c=>c.contains(d))||W(d)||d.querySelector(v))return;let A={shouldUseDivWrapper:r,divWrapperStyle:o},m;if(r&&a){let c=d.parentElement,u=window.getComputedStyle(d).display==="none",h=g({type:"simple-insert-ad",parent:c,insertionIndex:Array.from(c.children).indexOf(d),stylesOverrides:i==null?void 0:i.map(S=>{var I=S,{parentDepth:R}=I,E=w(I,["parentDepth"]);return T(g({},E),{parentDepth:R-1})}),isSiblingReplacement:!0},A);m=[],u||m.push({type:"hide-element",element:d}),B(d)||m.push(h);}else if(r)m=[g({type:"replace-element",element:d,stylesOverrides:i==null?void 0:i.map(R=>{var E=R,{parentDepth:u}=E,h=w(E,["parentDepth"]);return T(g({},h),{parentDepth:u-1})})},A)];else if(a){let c={type:"simple-insert-ad",parent:d,insertionIndex:0,stylesOverrides:i,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(v)||m.push(c);}else m=[{type:"replace-all-children",parent:d,stylesOverrides:i,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=(i,a,d,...A)=>{let{width:m,height:c}=Q(i),u=ge(m,c,a,d);return u.length?(r.push(...A.map(h=>h.type==="hide-element"||h.type==="remove-element"?h:T(g({},h),{adsMetadata:u}))),!0):!1},o=[];return yield Promise.all(n.map(i=>y(void 0,null,function*(){yield _(0),o=o.concat(yield Se(i,l,r));}))),yield Promise.all(t.map(i=>y(void 0,null,function*(){yield _(0),yield Te(i,o,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,_e=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 o;if(l.source===e.contentWindow)try{let i=typeof l.data=="string"?JSON.parse(l.data):l.data;if(i.id!==t)return;switch(i.type){case N:n(i.adMetadata.source.providerName);break;case F:window.removeEventListener("message",r),e.style.display="none",s(new Error((o=i.reason)!=null?o:"Unknown error"));break;case q:let{dimensions:a}=i.adMetadata,{width:d,height:A}=a;d>0&&A>0&&(e.style.width=`${a.width}px`,e.style.height=`${a.height}px`);break;case K:let{width:m,height:c}=i;e.style.width=`${m}px`,e.style.height=`${c}px`;}}catch(i){console.error("Observing error:",i);}};window.addEventListener("message",r);}).then(n=>{if(we.has(t))return;we.add(t),$e(e)?ve(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)&&(ve(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},ve=(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),o=Math.min(Math.max(0,t.y+t.height),n.height),i=t.width*t.height;return (r-s)*(o-l)/i>=.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((A,m)=>A.parentDepth-m.parentDepth);let r,l=nanoid.nanoid(),o=document.createElement("iframe");o.src=p.getAdsStackIframeURL(l,e.adsMetadata,window.location.href),o.id=l;let i=e.adsMetadata[0],{dimensions:a}=typeof i=="number"?b[i]:i;o.style.width=`${a.width}px`,o.style.height=`${a.height}px`,o.style.border="none";for(let A in n)o.style.setProperty(A,n[A]);switch(o.setAttribute(H,"true"),qe(t,a),t.appendChild(o),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(z,"true"),r=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}_e(o);let d=0;s.forEach(({parentDepth:A,style:m})=>{for(;A>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(H,"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(H,"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,o,i;if(e.native)i=p.HYPELAB_NATIVE_PLACEMENT_SLUG,l=360,o=110;else switch(e.size){case"small":l=320,o=50,i=p.HYPELAB_SMALL_PLACEMENT_SLUG;break;case"high":l=300,o=250,i=p.HYPELAB_HIGH_PLACEMENT_SLUG;break;case"wide":l=728,o=90,i=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:o)),a.searchParams.set("p",i),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,G=e=>window.parent.postMessage(JSON.stringify(e),"*"),Me=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){G({id:e,type:F,reason:"No more ads to render"});return}let[s,...r]=t,l=typeof s=="number"?b[s]:s;G({id:e,type:q,adMetadata:l});let{source:o,dimensions:i}=l,a;switch(o.providerName){case"Temple":a=re(i.width,i.height);break;case"HypeLab":a=se(o,i,n);break;default:a=ie(e,o.shape,i);}let{element:d}=a;if(document.body.replaceChildren(d),d instanceof HTMLIFrameElement)return new Promise((A,m)=>{setTimeout(()=>{window.removeEventListener("message",u),m(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(o)}`));},Ze);let c=!1,u=h=>{var R;if(h.source===d.contentWindow)try{let E=typeof h.data=="string"?JSON.parse(h.data):h.data;switch(E.type){case N:c||(c=!0,G({id:e,type:N,adMetadata:l}),A());break;case F:window.removeEventListener("message",u),m(new Error((R=E.reason)!=null?R:"Unknown error"));break;case K:let{width:S,height:I}=E;S>0&&I>0&&(d.style.width=`${S}px`,d.style.height=`${I}px`,G(T(g({},E),{id:e})));}}catch(E){console.error("Observing error:",E);}};window.addEventListener("message",u);}).catch(A=>(console.error(A),Me(e,r,n)));G({id:e,type:N,adMetadata:l});});var et=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:s,providersSelectors:r,providersToReplaceAtAllSites:l,permanentAdPlacesRulesForAllDomains:o,permanentNativeAdPlacesRulesForAllDomains:i={},adsReplaceUrlsBlacklist:a=[],timestamp:d}=t,{hostname:A,href:m}=e;if(a.some(h=>new RegExp(h).test(m)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],timestamp:d};let c=m.replace(/#.*$/,""),u=h=>{let R=h.source.includes("#")?m:c;return h.test(R)};return {adPlacesRules:tt(A,u,n),permanentAdPlacesRules:nt(A,u,o,i),providersSelectors:st(A,u,s,r,l),timestamp:d}},tt=(e,t,n)=>{var l;return ((l=n[e])!=null?l:[]).map(a=>{var d=a,{urlRegexes:o}=d,i=w(d,["urlRegexes"]);return T(g({},i),{urlRegexes:o.map(A=>new RegExp(A))})}).reduce((o,A)=>{var m=A,{urlRegexes:i,selector:a}=m,d=w(m,["urlRegexes","selector"]);if(!i.some(t))return o;let R=a,{cssString:c}=R,u=w(R,["cssString"]),h=o.findIndex(I=>{var M=I,{selector:E}=M,S=w(M,["selector"]);let P=E,O=w(P,["cssString"]);return lodash.isEqual(u,O)&&lodash.isEqual(d,S)});return h===-1?o.push(g({selector:a},d)):o[h].selector.cssString+=", ".concat(c),o},[])},nt=(e,t,n,s={})=>{var i,a;let r=(i=n[e])!=null?i:[],l=(a=s[e])!=null?a:[];return r.map(m=>{var c=m,{urlRegexes:d}=c,A=w(c,["urlRegexes"]);return T(g({},A),{urlRegexes:d.map(u=>new RegExp(u)),isNative:!1})}).concat(l.map(m=>{var c=m,{urlRegexes:d}=c,A=w(c,["urlRegexes"]);return T(g({},A),{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 A;let o=((A=n[e])!=null?A:[]).map(u=>{var h=u,{urlRegexes:m}=h,c=w(h,["urlRegexes"]);return T(g({},c),{urlRegexes:m.map(R=>new RegExp(R))})}).filter(({urlRegexes:m})=>m.some(t)),i=new Set,a={},d=m=>{var u;if(i.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);}),i.add(m);};return r.forEach(d),o.forEach(({providers:m})=>m.forEach(d)),Object.entries(a).map(([m,c])=>({parentDepth:Number(m),selector:rt(c)}))};var C=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),oe=class{constructor(t){this.getAdPlacesRulesForAllDomains=C(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=C(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=C(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=C(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=C(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=C(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=C(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getAllRules=()=>y(this,null,function*(){let[t,n,s,r,l,o,i]=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:o,adsReplaceUrlsBlacklist:i,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
18
  exports.TempleWalletApi = oe;
19
- exports.configureAds = Oe;
19
+ exports.configureAds = Be;
20
20
  exports.executeAdsActions = Qe;
21
21
  exports.getAdsActions = Ye;
22
22
  exports.renderAdsStack = Me;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temple-wallet/extension-ads",
3
- "version": "5.0.3",
3
+ "version": "6.0.0",
4
4
  "main": "dist/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,7 +15,7 @@ import { processPermanentAdPlacesRule } from './process-permanent-rule';
15
15
  import { processProvidersAds } from './process-providers-ads';
16
16
  import { processAdPlacesRule } from './process-rule';
17
17
 
18
- export const getAdsActions = async ({ providersSelector, adPlacesRules, permanentAdPlacesRules }: AdsRules) => {
18
+ export const getAdsActions = async ({ providersSelectors, adPlacesRules, permanentAdPlacesRules }: AdsRules) => {
19
19
  const result: AdAction[] = [];
20
20
 
21
21
  const addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable = (
@@ -66,7 +66,7 @@ export const getAdsActions = async ({ providersSelector, adPlacesRules, permanen
66
66
  })
67
67
  );
68
68
 
69
- await processProvidersAds(providersSelector, addActionsIfAdResolutionAvailable, result);
69
+ await processProvidersAds(providersSelectors, addActionsIfAdResolutionAvailable, result);
70
70
 
71
71
  return result;
72
72
  };
@@ -7,6 +7,7 @@ import {
7
7
  OmitAdInAction,
8
8
  SimpleInsertAdAction
9
9
  } from 'src/types/ads-actions';
10
+ import { AdsRules } from 'src/types/ads-rules';
10
11
  import { delay } from 'src/utils';
11
12
 
12
13
  import {
@@ -14,7 +15,8 @@ import {
14
15
  elementIsOurAd,
15
16
  prevBannerSiblingIsReplacement,
16
17
  getFinalSize,
17
- ourAdQuerySelector
18
+ ourAdQuerySelector,
19
+ getParentOfDepth
18
20
  } from './helpers';
19
21
 
20
22
  const styleToAdjustProps = [
@@ -47,36 +49,41 @@ const styleToAdjustProps = [
47
49
  ] as const;
48
50
 
49
51
  export const processProvidersAds = async (
50
- providersSelector: string,
52
+ providersSelectors: AdsRules['providersSelectors'],
51
53
  addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable,
52
54
  result: AdAction[]
53
55
  ) => {
54
- const bannersFromProviders = applyQuerySelector(providersSelector, true).reduce<Element[]>((acc, newBanner) => {
55
- const parentElementIndex = acc.findIndex(banner => banner.contains(newBanner));
56
+ const bannersFromProviders = providersSelectors
57
+ .map(({ selector: providersSelector, parentDepth }) => {
58
+ return applyQuerySelector(providersSelector, true).reduce<Element[]>((acc, foundElement) => {
59
+ const newBanner = getParentOfDepth(foundElement as HTMLElement, parentDepth) ?? foundElement;
60
+ const parentElementIndex = acc.findIndex(banner => banner.contains(newBanner));
56
61
 
57
- const parentStyles = newBanner.parentElement && window.getComputedStyle(newBanner.parentElement);
58
- const { width, height } = getFinalSize(newBanner);
59
- const bannerIsTouchedByOtherActions = result.some(action => {
60
- if (action.type === AdActionType.ReplaceAllChildren || action.type === AdActionType.SimpleInsertAd) {
61
- return action.parent.contains(newBanner) || newBanner.contains(action.parent);
62
- }
62
+ const parentStyles = newBanner.parentElement && window.getComputedStyle(newBanner.parentElement);
63
+ const { width, height } = getFinalSize(newBanner);
64
+ const bannerIsTouchedByOtherActions = result.some(action => {
65
+ if (action.type === AdActionType.ReplaceAllChildren || action.type === AdActionType.SimpleInsertAd) {
66
+ return action.parent.contains(newBanner) || newBanner.contains(action.parent);
67
+ }
63
68
 
64
- return action.element.parentElement?.contains(newBanner) || newBanner.contains(action.element);
65
- });
66
- const bannerIsHiddenByParent = parentStyles?.display === 'none' || parentStyles?.visibility === 'hidden';
69
+ return action.element.parentElement?.contains(newBanner) || newBanner.contains(action.element);
70
+ });
71
+ const bannerIsHiddenByParent = parentStyles?.display === 'none' || parentStyles?.visibility === 'hidden';
67
72
 
68
- if (bannerIsTouchedByOtherActions || width === 0 || height === 0 || bannerIsHiddenByParent) {
69
- return acc;
70
- }
73
+ if (bannerIsTouchedByOtherActions || width === 0 || height === 0 || bannerIsHiddenByParent) {
74
+ return acc;
75
+ }
71
76
 
72
- if (parentElementIndex >= 0) {
73
- acc.splice(parentElementIndex, 1, newBanner);
74
- } else if (!acc.some(ancestorCandidate => ancestorCandidate.contains(newBanner))) {
75
- acc.push(newBanner);
76
- }
77
+ if (parentElementIndex >= 0) {
78
+ acc.splice(parentElementIndex, 1, newBanner);
79
+ } else if (!acc.some(ancestorCandidate => ancestorCandidate.contains(newBanner))) {
80
+ acc.push(newBanner);
81
+ }
77
82
 
78
- return acc;
79
- }, []);
83
+ return acc;
84
+ }, []);
85
+ })
86
+ .flat();
80
87
 
81
88
  await Promise.all(
82
89
  bannersFromProviders.map(async banner => {
package/src/ads-meta.ts CHANGED
@@ -100,7 +100,7 @@ export const BANNER_ADS_META: AdMetadata[] = [
100
100
  minContainerWidth: 230,
101
101
  minContainerHeight: 32,
102
102
  maxContainerWidth: 420,
103
- maxContainerHeight: 110
103
+ maxContainerHeight: 130
104
104
  }
105
105
  },
106
106
  {
@@ -115,7 +115,7 @@ export const BANNER_ADS_META: AdMetadata[] = [
115
115
  minContainerWidth: 230,
116
116
  minContainerHeight: 32,
117
117
  maxContainerWidth: 420,
118
- maxContainerHeight: 110
118
+ maxContainerHeight: 130
119
119
  }
120
120
  }
121
121
  ];
@@ -45,7 +45,7 @@ export class TempleWalletApi {
45
45
  );
46
46
 
47
47
  getSelectorsForAllProviders = withFetchDataExtraction(() =>
48
- this.api.get<Record<string, string[]>>('/slise-ad-rules/providers', this.getAdVersionRequestConfig())
48
+ this.api.get<RawAllAdsRules['providersSelectors']>('/slise-ad-rules/providers', this.getAdVersionRequestConfig())
49
49
  );
50
50
 
51
51
  getPermanentAdPlacesRulesForAllDomains = withFetchDataExtraction(() =>
@@ -20,7 +20,7 @@ export const transformRawRules = (location: Location, rules: RawAllAdsRules): Ad
20
20
  return {
21
21
  adPlacesRules: [],
22
22
  permanentAdPlacesRules: [],
23
- providersSelector: '',
23
+ providersSelectors: [],
24
24
  timestamp
25
25
  };
26
26
  }
@@ -41,7 +41,7 @@ export const transformRawRules = (location: Location, rules: RawAllAdsRules): Ad
41
41
  permanentAdPlacesRulesForAllDomains,
42
42
  permanentNativeAdPlacesRulesForAllDomains
43
43
  ),
44
- providersSelector: buildProvidersSelector(
44
+ providersSelectors: buildProvidersSelectors(
45
45
  hostname,
46
46
  hrefMatchPredicate,
47
47
  providersRulesForAllDomains,
@@ -112,39 +112,58 @@ const buildPermanentAdPlacesRules = (
112
112
  return permanentAdPlacesRules.filter(({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate));
113
113
  };
114
114
 
115
- const buildProvidersSelector = (
115
+ function quickJoinSelectors(selectors: Set<string>): string {
116
+ let result = '';
117
+ selectors.forEach(selector => {
118
+ result += selector + ', ';
119
+ });
120
+ if (result) {
121
+ result = result.slice(0, -2);
122
+ }
123
+
124
+ return result;
125
+ }
126
+
127
+ const buildProvidersSelectors = (
116
128
  hostname: string,
117
129
  hrefMatchPredicate: (regex: RegExp) => boolean,
118
130
  providersRulesForAllDomains: RawAllAdsRules['providersRulesForAllDomains'],
119
131
  providersSelectors: RawAllAdsRules['providersSelectors'],
120
132
  providersToReplaceAtAllSites: RawAllAdsRules['providersToReplaceAtAllSites']
121
- ): string => {
122
- const providersRules = (providersRulesForAllDomains[hostname] ?? []).map(({ urlRegexes, ...restRuleProps }) => ({
123
- ...restRuleProps,
124
- urlRegexes: urlRegexes.map(regex => new RegExp(regex))
125
- }));
133
+ ): AdsRules['providersSelectors'] => {
134
+ const providersRulesByHostname = (providersRulesForAllDomains[hostname] ?? []).map(
135
+ ({ urlRegexes, ...restRuleProps }) => ({
136
+ ...restRuleProps,
137
+ urlRegexes: urlRegexes.map(regex => new RegExp(regex))
138
+ })
139
+ );
126
140
 
127
- const relatedProvidersRules = providersRules.filter(({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate));
141
+ const relatedProvidersRulesByUrl = providersRulesByHostname.filter(({ urlRegexes }) =>
142
+ urlRegexes.some(hrefMatchPredicate)
143
+ );
128
144
  const alreadyProcessedProviders = new Set<string>();
129
- const selectorsForProvidersToReplace = new Set<string>();
145
+ const selectorsForProvidersToReplace: Record<number, Set<string>> = {};
130
146
  const handleProvider = (provider: string) => {
131
147
  if (alreadyProcessedProviders.has(provider)) return;
132
148
 
133
149
  const newSelectors = providersSelectors[provider] ?? [];
134
- newSelectors.forEach(selector => selectorsForProvidersToReplace.add(selector));
150
+ newSelectors.forEach(selector => {
151
+ const { selector: cssString, parentDepth } =
152
+ typeof selector === 'string' ? { selector, parentDepth: 0 } : selector;
153
+
154
+ if (!selectorsForProvidersToReplace[parentDepth]) {
155
+ selectorsForProvidersToReplace[parentDepth] = new Set();
156
+ }
157
+ selectorsForProvidersToReplace[parentDepth].add(cssString);
158
+ });
135
159
  alreadyProcessedProviders.add(provider);
136
160
  };
137
161
 
138
162
  providersToReplaceAtAllSites.forEach(handleProvider);
139
- relatedProvidersRules.forEach(({ providers }) => providers.forEach(handleProvider));
163
+ relatedProvidersRulesByUrl.forEach(({ providers }) => providers.forEach(handleProvider));
140
164
 
141
- let providersSelector = '';
142
- selectorsForProvidersToReplace.forEach(selector => {
143
- providersSelector += selector + ', ';
144
- });
145
- if (providersSelector) {
146
- providersSelector = providersSelector.slice(0, -2);
147
- }
148
-
149
- return providersSelector;
165
+ return Object.entries(selectorsForProvidersToReplace).map(([parentDepth, selectors]) => ({
166
+ parentDepth: Number(parentDepth),
167
+ selector: quickJoinSelectors(selectors)
168
+ }));
150
169
  };
@@ -12,6 +12,6 @@ export interface PermanentAdPlacesRule extends Omit<RawPermanentAdPlacesRule, 'u
12
12
  export interface AdsRules {
13
13
  adPlacesRules: Array<Omit<AdPlacesRule, 'urlRegexes'>>;
14
14
  permanentAdPlacesRules: PermanentAdPlacesRule[];
15
- providersSelector: string;
15
+ providersSelectors: Array<{ selector: string; parentDepth: number }>;
16
16
  timestamp: number;
17
17
  }
@@ -48,7 +48,7 @@ export interface RawAdProvidersRule {
48
48
  export interface RawAllAdsRules {
49
49
  adPlacesRulesForAllDomains: Record<string, RawAdPlacesRule[]>;
50
50
  providersRulesForAllDomains: Record<string, RawAdProvidersRule[]>;
51
- providersSelectors: Record<string, string[]>;
51
+ providersSelectors: Record<string, (string | { selector: string; parentDepth: number })[]>;
52
52
  providersToReplaceAtAllSites: string[];
53
53
  permanentAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
54
54
  permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;