@temple-wallet/extension-ads 7.0.0 → 7.1.0-dev.2
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 +17 -2
- package/dist/index.js +10 -12
- package/package.json +2 -3
- package/src/ads-actions/helpers.ts +4 -11
- package/src/ads-actions/index.ts +11 -1
- package/src/ads-actions/process-elements-to-hide-or-remove-rule.ts +25 -0
- package/src/ads-configuration.ts +7 -0
- package/src/execute-ads-actions/ads-views/make-tkey-ad.ts +18 -2
- package/src/execute-ads-actions/utils.ts +24 -0
- package/src/index.ts +2 -0
- package/src/render-ads-stack.ts +1 -1
- package/src/temple-wallet-api.ts +15 -5
- package/src/transform-raw-rules.ts +19 -0
- package/src/types/ads-meta.ts +1 -0
- package/src/types/ads-rules.ts +6 -1
- package/src/types/temple-wallet-api.ts +9 -0
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ interface AdSourceBase {
|
|
|
6
6
|
/** Only covers TKEY ads for now */
|
|
7
7
|
interface TempleAdSource extends AdSourceBase {
|
|
8
8
|
providerName: 'Temple';
|
|
9
|
+
native?: boolean;
|
|
9
10
|
}
|
|
10
11
|
interface PersonaAdSource extends AdSourceBase {
|
|
11
12
|
providerName: 'Persona';
|
|
@@ -82,6 +83,13 @@ interface RawAdProvidersRule {
|
|
|
82
83
|
urlRegexes: string[];
|
|
83
84
|
providers: string[];
|
|
84
85
|
}
|
|
86
|
+
interface RawElementsToHideOrRemoveEntry {
|
|
87
|
+
cssString: string;
|
|
88
|
+
parentDepth: number;
|
|
89
|
+
isMultiple: boolean;
|
|
90
|
+
urlRegexes: string[];
|
|
91
|
+
shouldHide: boolean;
|
|
92
|
+
}
|
|
85
93
|
interface RawAllAdsRules {
|
|
86
94
|
adPlacesRulesForAllDomains: Record<string, RawAdPlacesRule[]>;
|
|
87
95
|
providersRulesForAllDomains: Record<string, RawAdProvidersRule[]>;
|
|
@@ -97,6 +105,7 @@ interface RawAllAdsRules {
|
|
|
97
105
|
permanentAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
|
|
98
106
|
permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
|
|
99
107
|
adsReplaceUrlsBlacklist: string[];
|
|
108
|
+
elementsToHideOrRemoveRules: Record<string, RawElementsToHideOrRemoveEntry[]>;
|
|
100
109
|
timestamp: number;
|
|
101
110
|
}
|
|
102
111
|
|
|
@@ -158,6 +167,9 @@ interface PermanentAdPlacesRule extends Omit<RawPermanentAdPlacesRule, 'urlRegex
|
|
|
158
167
|
urlRegexes: RegExp[];
|
|
159
168
|
isNative: boolean;
|
|
160
169
|
}
|
|
170
|
+
interface ElementsToHideOrRemoveRule extends Omit<RawElementsToHideOrRemoveEntry, 'urlRegexes'> {
|
|
171
|
+
urlRegexes: RegExp[];
|
|
172
|
+
}
|
|
161
173
|
interface AdsRules {
|
|
162
174
|
adPlacesRules: Array<Omit<AdPlacesRule, 'urlRegexes'>>;
|
|
163
175
|
permanentAdPlacesRules: PermanentAdPlacesRule[];
|
|
@@ -169,14 +181,16 @@ interface AdsRules {
|
|
|
169
181
|
selector: string;
|
|
170
182
|
parentDepth: number;
|
|
171
183
|
}>;
|
|
184
|
+
elementsToHideOrRemoveRules: ElementsToHideOrRemoveRule[];
|
|
172
185
|
timestamp: number;
|
|
173
186
|
}
|
|
174
187
|
|
|
175
|
-
declare const getAdsActions: ({ providersSelectors, providersNegativeSelectors, adPlacesRules, permanentAdPlacesRules }: AdsRules) => Promise<AdAction[]>;
|
|
188
|
+
declare const getAdsActions: ({ providersSelectors, providersNegativeSelectors, adPlacesRules, permanentAdPlacesRules, elementsToHideOrRemoveRules }: AdsRules) => Promise<AdAction[]>;
|
|
176
189
|
|
|
177
190
|
interface IAdsConfiguration {
|
|
178
191
|
hypelabAdsWindowUrl: string;
|
|
179
192
|
tkeyInpageAdUrl: string;
|
|
193
|
+
smallTkeyInpageAdUrl?: string;
|
|
180
194
|
swapTkeyUrl: string;
|
|
181
195
|
externalAdsActivityMessageType: string;
|
|
182
196
|
getPersonaIframeURL: (id: string, slug: string) => string;
|
|
@@ -218,7 +232,8 @@ declare class TempleWalletApi {
|
|
|
218
232
|
getPermanentAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
|
|
219
233
|
getPermanentNativeAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
|
|
220
234
|
getAdsReplaceUrlsBlacklist: () => Promise<string[]>;
|
|
235
|
+
getElementsToHideOrRemoveRules: () => Promise<Record<string, RawElementsToHideOrRemoveEntry[]>>;
|
|
221
236
|
getAllRules: () => Promise<RawAllAdsRules>;
|
|
222
237
|
}
|
|
223
238
|
|
|
224
|
-
export { type AdAction, AdActionType, type AdsProviderName, AdsProviderTitle, type AdsRules, type RawAllAdsRules, TempleWalletApi, configureAds, executeAdsActions, getAdsActions, renderAdsStack, transformRawRules };
|
|
239
|
+
export { type AdAction, AdActionType, type AdMetadata, type AdsProviderName, AdsProviderTitle, type AdsRules, type RawAllAdsRules, TempleWalletApi, configureAds, executeAdsActions, getAdsActions, renderAdsStack, transformRawRules };
|
package/dist/index.js
CHANGED
|
@@ -2,23 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
var semver = require('semver');
|
|
4
4
|
var nanoid = require('nanoid');
|
|
5
|
-
var
|
|
5
|
+
var tt = require('webextension-polyfill');
|
|
6
6
|
var cryptoJs = require('crypto-js');
|
|
7
7
|
var lodash = require('lodash');
|
|
8
|
-
var
|
|
9
|
-
var ht = require('axios');
|
|
8
|
+
var Et = require('axios');
|
|
10
9
|
|
|
11
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
11
|
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var ht__default = /*#__PURE__*/_interopDefault(ht);
|
|
12
|
+
var tt__default = /*#__PURE__*/_interopDefault(tt);
|
|
13
|
+
var Et__default = /*#__PURE__*/_interopDefault(Et);
|
|
16
14
|
|
|
17
|
-
var $e=Object.defineProperty,Ge=Object.defineProperties;var ze=Object.getOwnPropertyDescriptors;var j=Object.getOwnPropertySymbols;var we=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var Se=(e,t,n)=>t in e?$e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))we.call(t,n)&&Se(e,n,t[n]);if(j)for(var n of j(t))Pe.call(t,n)&&Se(e,n,t[n]);return e},b=(e,t)=>Ge(e,ze(t));var M=(e,t)=>{var n={};for(var s in e)we.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&j)for(var s of j(e))t.indexOf(s)<0&&Pe.call(e,s)&&(n[s]=e[s]);return n};var y=(e,t,n)=>new Promise((s,o)=>{var l=r=>{try{d(n.next(r));}catch(m){o(m);}},i=r=>{try{d(n.throw(r));}catch(m){o(m);}},d=r=>r.done?s(r.value):Promise.resolve(r.value).then(l,i);d((n=n.apply(e,t)).next());});var Te=e=>!!e;var D=(e=300)=>new Promise(t=>setTimeout(t,e));var h=class{};h.IS_MISES_BROWSER=!1,h.HYPELAB_ADS_WINDOW_URL="",h.TKEY_INPAGE_AD_URL="",h.SWAP_TKEY_URL="",h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",h.getPersonaIframeURL=()=>"",h.getAdsStackIframeURL=()=>"",h.buildNativeAdsMeta=()=>[],h.bannerAdsMeta=[];var qe=e=>{let{hypelabAdsWindowUrl:t,tkeyInpageAdUrl:n,swapTkeyUrl:s,externalAdsActivityMessageType:o,getPersonaIframeURL:l,getAdsStackIframeURL:i,buildNativeAdsMeta:d,bannerAdsMeta:r,extVersion:m,templePassphrase:a,isMisesBrowser:c}=e;h.HYPELAB_ADS_WINDOW_URL=t,h.TKEY_INPAGE_AD_URL=n,h.SWAP_TKEY_URL=s,h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=o,h.getPersonaIframeURL=l,h.getAdsStackIframeURL=i,h.buildNativeAdsMeta=d,h.bannerAdsMeta=r,h.EXTENSION_VERSION=m,h.TEMPLE_PASSPHRASE=a,h.IS_MISES_BROWSER=c;};var B="twa",C="twa-native",J="twa-sibling-replacement";var Z="adRenderStart",ee="resize",U="ready",q="error",te="accelerometer; gyroscope";var O=/[\d.]+(px)?$/,k=`[${B}]`,Ie=`[${B}]:not([${C}])`,ve=`[${C}]`,F=e=>e.reduce((t,n)=>{let s=parseInt(n,10);return isNaN(s)&&O.test(n)?t:t+s},0),V=e=>!!e.closest(k),Y=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(J))},X=e=>{let t=getComputedStyle(e),{x:n,right:s,width:o,height:l}=e.getBoundingClientRect(),i={width:o,height:l},d=["width","height"];for(let r of d){let m=t[r],c=e.getAttribute(r)||m;O.test(c)&&(i[r]=Number(c.replace("px",""))),r==="width"&&n<0?i.width+=n:r==="width"&&s>window.innerWidth&&(i.width=window.innerWidth-n);}return i},H=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(s=>!!s):[],W=(e,t)=>{let n=e;for(let s=0;s<t;s++){let o=n.parentElement;if(!o)return null;n=o;}return n},xe=(e,t,n,s)=>{if(e<2&&t<2)return [];if(s)return h.buildNativeAdsMeta(e,t);let o=h.bannerAdsMeta.reduce((l,{dimensions:i},d)=>{let{width:r,height:m}=i,{width:a,height:c}=h.bannerAdsMeta[l].dimensions;return r*m<a*c?d:l},0);return h.bannerAdsMeta.reduce((l,{dimensions:i},d)=>{let{minContainerWidth:r,maxContainerWidth:m,minContainerHeight:a,maxContainerHeight:c,width:A}=i,p=!1;switch(n){case"permanent":p=d===o||e>=A&&(t>=a||t<2);break;case"slot-replacement":p=d===o||e>=r&&(t>=a||t<2);break;default:p=e>=r&&t>=a&&e<=m&&t<=c;}return p&&l.push(d),l},[])};var Me=(e,t,n)=>y(void 0,null,function*(){let{parentSelector:s,displayWidth:o}=e,{isMultiple:l,cssString:i,parentDepth:d}=s;if(o&&!semver.satisfies(semver.coerce(window.innerWidth),o))return [];let r=H(i,l).map(m=>W(m,d)).filter(m=>!!m);return yield Promise.all(r.map(m=>y(void 0,null,function*(){yield D(0),Qe(m,e,t,n);}))),r}),ie=(e,t)=>{var n,s;return e?{width:(n=document.querySelector(e.width))!=null?n:t,height:(s=document.querySelector(e.height))!=null?s:t}:{width:t,height:t}},Qe=(e,t,n,s)=>{var Re;let fe=t,{shouldUseDivWrapper:o,divWrapperStyle:l,wrapperStyle:i,elementStyle:d,adSelector:r,insertionIndex:m,insertBeforeSelector:a,insertAfterSelector:c,insertionsCount:A=1,elementsToMeasureSelectors:p,stylesOverrides:u,shouldHideOriginal:E=!1,isNative:g,urlRegexes:w,parentSelector:T}=fe,f=M(fe,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),P=f.wrapperType?i:o?l:{display:"contents"},{isMultiple:v,cssString:x,parentDepth:I}=r,ne=H(g?ve:Ie,!0,e).reduce((R,L)=>R.some(G=>G.contains(L)||L.contains(G))?R:[...R,L],[]).length,_=A-ne;if(H(x,v,e).map(R=>W(R,I)).filter(R=>Te(R)&&!V(R)).forEach(R=>{var G;let L=window.getComputedStyle(R).display==="none";if(_<=0)(!E||!L)&&s.push({type:E?"hide-element":"remove-element",element:R});else {let Fe=ie(p,((G=R.parentElement)==null?void 0:G.children.length)===1?R.parentElement:R),Ve=S({type:"replace-element",element:R,wrapperStyle:P,elementStyle:d,stylesOverrides:u},f),ge={type:"hide-element",element:R},Ye=S({type:"simple-insert-ad",wrapperStyle:P,elementStyle:d,parent:R.parentElement,insertionIndex:Array.from(R.parentElement.children).indexOf(R),isSiblingReplacement:!0,stylesOverrides:u},f),z=[],ye=Y(R);E&&ye&&!L?z=[ge]:E&&!ye?z=[ge,Ye]:E||(z=[Ve]),z.length>0&&n(Fe,"permanent",g,...z)&&_--;}}),_<=0)return;let $=-1,he=e,re={width:e,height:e},Ee=a||c;if(Ee){let R=e.querySelector(Ee),L=R==null?void 0:R.parentElement;R&&L&&(he=L,$=Array.from(e.children).indexOf(R)+(a?0:1),re=ie(p,R));}else {let R=m!=null?m:0;$=R<0?Math.max(e.children.length+R,0):Math.min(R,e.children.length),re=ie(p,(Re=e.children[$])!=null?Re:e);}if($!==-1){let R=S({type:"simple-insert-ad",wrapperStyle:P,elementStyle:d,parent:he,insertionIndex:$,isSiblingReplacement:!1,stylesOverrides:u},f);n(re,"permanent",g,...Array(_).fill(R));}};var je=["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"],be=(e,t,n,s)=>y(void 0,null,function*(){let o=e.map(({selector:i,parentDepth:d})=>H(i,!0).reduce((r,m)=>{var T;let a=(T=W(m,d))!=null?T:m,c=r.findIndex(f=>f.contains(a)),A=a.parentElement&&window.getComputedStyle(a.parentElement),{width:p,height:u}=X(a),E=s.some(f=>{var P;return f.type==="replace-all-children"||f.type==="simple-insert-ad"?f.parent.contains(a)||a.contains(f.parent):((P=f.element.parentElement)==null?void 0:P.contains(a))||a.contains(f.element)}),g=(A==null?void 0:A.display)==="none"||(A==null?void 0:A.visibility)==="hidden",w=c>=0&&r[c]instanceof HTMLAnchorElement;return E||p===0||u===0||g||w||(c>=0?r.splice(c,1,a):r.some(f=>f.contains(a))||r.push(a)),r},[])).flat(),l=t.map(({selector:i,parentDepth:d})=>H(i,!0).map(r=>W(r,d)).filter(r=>!!r)).flat();o=o.filter(i=>!l.includes(i)),yield Promise.all(o.map(i=>y(void 0,null,function*(){var c,A,p,u,E,g,w,T;yield D(0);let d=i.parentElement,{width:r,height:m}=window.getComputedStyle(i),a=O.test(r)&&O.test(m)?i:(A=(c=d==null?void 0:d.closest("div, article, aside, footer, header"))!=null?c:(d==null?void 0:d.tagName.toLowerCase())==="body"?void 0:d)!=null?A:i;if(!V(i)&&!i.querySelector(k)&&!s.some(f=>f.type==="simple-insert-ad"?!1:f.type==="replace-all-children"?f.parent.contains(i):f.element===i)){let f=(p=i.getAttribute("style"))!=null?p:"",P=Object.fromEntries(f.split(";").filter(Boolean).map(_=>_.split(":").map(ue=>ue.trim())));if((u=P.width)!=null&&u.match(/^0[a-z]/)||(E=P.height)!=null&&E.match(/^0[a-z]/))return;let v=window.getComputedStyle(i),x=S(S({},Object.fromEntries(je.map(_=>[_,v.getPropertyValue(_)]))),P),I={type:"hide-element",element:i},pe={type:"simple-insert-ad",wrapperStyle:x,parent:(g=i.parentElement)!=null?g:document.body,insertionIndex:Array.from((T=(w=i.parentElement)==null?void 0:w.children)!=null?T:[]).indexOf(i),isSiblingReplacement:!0},ne=Y(i)?window.getComputedStyle(i).display==="none"?[]:[I]:[I,pe];n({width:a,height:a},"provider-replacement",!1,...ne);}})));});var _e=(e,t,n)=>y(void 0,null,function*(){let{cssString:s,isMultiple:o}=e.selector,l=H(s,o);yield Promise.all(l.map(i=>y(void 0,null,function*(){yield D(0),Je(i,e,t,n);})));}),Je=(e,t,n,s)=>{let{selector:{shouldUseDivWrapper:o,parentDepth:l,divWrapperStyle:i},stylesOverrides:d,shouldHideOriginal:r,isNative:m=!1}=t,a=W(e,l);if(!a||n.some(p=>p.contains(a))||V(a)||a.querySelector(k))return;let c={shouldUseDivWrapper:o,wrapperStyle:i},A;if(o&&r){let p=a.parentElement,u=window.getComputedStyle(a).display==="none",E=S({type:"simple-insert-ad",parent:p,insertionIndex:Array.from(p.children).indexOf(a),stylesOverrides:d==null?void 0:d.map(T=>{var f=T,{parentDepth:g}=f,w=M(f,["parentDepth"]);return b(S({},w),{parentDepth:g-1})}),isSiblingReplacement:!0},c);A=[],u||A.push({type:"hide-element",element:a}),Y(a)||A.push(E);}else if(o)A=[S({type:"replace-element",element:a,stylesOverrides:d==null?void 0:d.map(g=>{var w=g,{parentDepth:u}=w,E=M(w,["parentDepth"]);return b(S({},E),{parentDepth:u-1})})},c)];else if(r){let p={type:"simple-insert-ad",parent:a,insertionIndex:0,stylesOverrides:d,isSiblingReplacement:!0,wrapperStyle:{display:"contents"}};A=Array.from(a.children).filter(u=>window.getComputedStyle(u).display!=="none").map(u=>({type:"hide-element",element:u})),a.querySelector(k)||A.push(p);}else A=[{type:"replace-all-children",parent:a,stylesOverrides:d,wrapperStyle:{display:"contents"}}];A.length>0&&s({width:a,height:a},"slot-replacement",m,...A);};var Ze=o=>y(void 0,[o],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:n,permanentAdPlacesRules:s}){let l=[],i=(r,m,a,...c)=>{if(c.length>0&&c.every(I=>I.type==="hide-element"||I.type==="remove-element"))return l.push(...c),!0;let{width:A}=X(r.width),{height:p}=X(r.height),{paddingLeft:u,paddingRight:E}=window.getComputedStyle(r.width),{paddingTop:g,paddingBottom:w}=window.getComputedStyle(r.height),T=F([u,E]),f=T===A?A:A-T,P=F([g,w]),v=P===p?p:p-P,x=xe(f,v,m,a);return x.length?(l.push(...c.map(I=>I.type==="hide-element"||I.type==="remove-element"?I:b(S({},I),{adsMetadata:x}))),!0):!1},d=[];return yield Promise.all(s.map(r=>y(void 0,null,function*(){yield D(0),d=d.concat(yield Me(r,i,l));}))),yield Promise.all(n.map(r=>y(void 0,null,function*(){yield D(0),yield _e(r,d,i);}))),yield be(e,t,i,l),l});var oe=(o=>(o.Optimal="Optimal",o.HypeLab="HypeLab",o.Persona="Persona",o.Temple="Temple Wallet",o))(oe||{});var le=new Set,Le=new Set,De=new Set,We=e=>y(void 0,null,function*(){let t=e.id;if(!le.has(t))return le.add(t),new Promise((n,s)=>{let o=l=>{var i,d,r;if(l.source===e.contentWindow)try{let m=typeof l.data=="string"?JSON.parse(l.data):l.data;if(m.id!==t)return;let a=e.offsetWidth-e.clientWidth,c=e.offsetHeight-e.clientHeight;switch(m.type){case U:n(m.adMetadata.source.providerName);break;case q:window.removeEventListener("message",o),e.style.display="none",s(new Error((i=m.reason)!=null?i:"Unknown error"));break;case Z:let{dimensions:A}=m.adMetadata,{width:p,height:u}=A;p>0&&u>0&&((d=e.style.width)!=null&&d.endsWith("%")||(e.style.width=`${A.width}px`),e.style.height=`${A.height}px`);break;case ee:let{width:E,height:g}=m;(r=e.style.width)!=null&&r.endsWith("%")||(e.style.width=`${E+a}px`),e.style.height=`${g+c}px`;}}catch(m){console.error("Observing error:",m);}};window.addEventListener("message",o);}).then(n=>{if(Le.has(t))return;Le.add(t),nt(e)?Ne(t,n):tt(e,n);}).catch(n=>{throw console.error(n),n}).finally(()=>void le.delete(t))}),tt=(e,t)=>{let n=new IntersectionObserver(s=>{s.some(o=>o.isIntersecting)&&(Ne(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},Ne=(e,t)=>{if(De.has(e))return;De.add(e);let n=window.parent.location.href;et__default.default.runtime.sendMessage({type:h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:oe[t]}).catch(s=>void console.error(s));},nt=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let s=Math.min(Math.max(0,t.x),n.width),o=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),d=t.width*t.height;return (o-s)*(i-l)/d>=.5};var ae=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var st=(e,t)=>{["width","height"].forEach(s=>{var l;let o=(l=e.style[s])!=null?l:"";O.test(o)&&parseInt(o,10)<t[s]&&e.style.removeProperty(s);});},it=(e,t,n,s)=>y(void 0,null,function*(){let{elementStyle:o={},stylesOverrides:l=[],adsMetadata:i,wrapperType:d}=e;l.sort((u,E)=>u.parentDepth-E.parentDepth);let r,m=nanoid.nanoid(),a=document.createElement("iframe");a.src=h.getAdsStackIframeURL(m,i,window.location.href),a.id=m,a.allow=te;let c=i[0],{dimensions:A}=typeof c=="number"?h.bannerAdsMeta[c]:c;a.style.width=d==="tbody"?"100%":`${A.width}px`,a.style.height=`${A.height}px`,a.style.border="none";for(let u in o)a.style.setProperty(u,o[u]);switch(a.setAttribute(B,"true"),st(t,A),n.appendChild(a),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(J,"true"),r=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}if(d!=="tbody"){let{borderLeftWidth:u,borderRightWidth:E,borderTopWidth:g,borderBottomWidth:w}=window.getComputedStyle(a),{borderLeftWidth:T,borderRightWidth:f,borderTopWidth:P,borderBottomWidth:v}=window.getComputedStyle(t),x=F([u,E,T,f]),I=F([g,w,P,v]);a.style.width=`${A.width-x}px`,a.style.height=`${A.height-I}px`;}We(a).catch(s);let p=0;l.forEach(({parentDepth:u,style:E})=>{for(;u>p&&r;)r=r.parentElement,p++;r&&ae(r,E);});}),Be=e=>y(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:n,wrapperType:s="div",colsAfter:o=0,colsBefore:l=0,colspan:i=1}=e,d=n.every(c=>typeof c=="object"),r,m;if(s==="div")r=document.createElement("div"),m=r;else {r=document.createElement("tbody");let c=document.createElement("tr");r.appendChild(c);for(let p=0;p<l;p++)c.appendChild(document.createElement("td"));let A=document.createElement("td");A.colSpan=i,c.appendChild(A),m=A;for(let p=0;p<o;p++)c.appendChild(document.createElement("td"));}r.setAttribute(B,"true"),d&&r.setAttribute(C,"true"),ae(r,t);let a=()=>{let c=document.createElement("div");c.setAttribute(B,"true"),d&&c.setAttribute(C,"true"),c.style.display="none",r.replaceWith(c);};yield it(e,r,m,c=>{console.error("Failed to render ads",c),a();}).catch(c=>{throw console.error("Inserting an ad attempt error:",c),a(),c});});var ot=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","important"):yield Be(t);})));var de=(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 o=document.createElement("a");o.href=h.SWAP_TKEY_URL,o.target="_blank",o.rel="noopener noreferrer",o.style.width="100%",o.style.height="100%",s.appendChild(o);let l=document.createElement("img");return l.src=h.TKEY_INPAGE_AD_URL,l.style.width="100%",l.style.height="100%",o.appendChild(l),{element:n}};var ce=(e,t,{width:n,height:s},o)=>{let l=document.createElement("iframe");return l.id=e,l.src=at(t,o,n,s,l.id),l.style.width=t.native?"100%":`${n}px`,l.style.height=`${s}px`,l.style.border="none",l.allow=te,{element:l}},at=(e,t,n,s,o)=>{let l=new URL(h.HYPELAB_ADS_WINDOW_URL);return e.native?l.searchParams.set("vh",String(s)):l.searchParams.set("w",String(n)),l.searchParams.set("h",String(s)),l.searchParams.set("p",e.slug),l.searchParams.set("o",dt(t)),o&&l.searchParams.set("id",o),l.toString()},dt=e=>cryptoJs.AES.encrypt(e,h.TEMPLE_PASSPHRASE).toString();var me=(e,t,{width:n,height:s})=>{let o=document.createElement("iframe");return o.src=h.getPersonaIframeURL(e,t.slug),o.id=e,o.style.width=`${n}px`,o.style.height=`${s}px`,o.style.border="none",{element:o}};var Q=e=>window.parent.postMessage(JSON.stringify(e),"*"),Oe=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){Q({id:e,type:q,reason:"No more ads to render"});return}let[s,...o]=t,l=typeof s=="number"?h.bannerAdsMeta[s]:s;Q({id:e,type:Z,adMetadata:l});let{source:i,dimensions:d}=l,r,m=!0;switch(i.providerName){case"Temple":r=de(d.width,d.height);break;case"HypeLab":r=ce(e,i,d,n),i.native&&(m=!1);break;default:r=me(e,i,d);}let{element:a}=r,c=document.getElementById("root"),A=document.getElementById("temple-label");if(c.replaceChildren(a),m?A.setAttribute("active",""):A.removeAttribute("active"),a instanceof HTMLIFrameElement)return new Promise((p,u)=>{let E=setTimeout(()=>{window.removeEventListener("message",w),u(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(i)}`));},(o.length===0?2e4:1e4)*(h.IS_MISES_BROWSER?2:1)),g=!1,w=T=>{var f,P;if(T.source===a.contentWindow)try{let v=typeof T.data=="string"?JSON.parse(T.data):T.data;switch(v.type){case U:g||(g=!0,Q({id:e,type:U,adMetadata:l}),clearTimeout(E),p());break;case q:window.removeEventListener("message",w),clearTimeout(E),u(new Error((f=v.reason)!=null?f:"Unknown error"));break;case ee:let{width:x,height:I}=v;x>0&&I>0&&((P=a.style.width)!=null&&P.endsWith("%")||(a.style.width=`${x}px`),a.style.height=`${I}px`,Q(b(S({},v),{id:e})));}}catch(v){console.error("Observing error:",v);}};window.addEventListener("message",w);}).catch(p=>(console.error(p),Oe(e,o,n)));Q({id:e,type:U,adMetadata:l});});var ct=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:s,providersSelectors:o,providersNegativeSelectors:l={},providersToReplaceAtAllSites:i,permanentAdPlacesRulesForAllDomains:d,permanentNativeAdPlacesRulesForAllDomains:r={},adsReplaceUrlsBlacklist:m=[],timestamp:a}=t,{hostname:c,href:A}=e;if(m.some(E=>new RegExp(E).test(A)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],timestamp:a};let p=A.replace(/#.*$/,""),u=E=>{let g=E.source.includes("#")?A:p;return E.test(g)};return {adPlacesRules:mt(c,u,n),permanentAdPlacesRules:At(c,u,d,r),providersSelectors:ke(c,u,s,o,i),providersNegativeSelectors:ke(c,u,s,l,i),timestamp:a}},mt=(e,t,n)=>{var l;return ((l=n[e])!=null?l:[]).map(r=>{var m=r,{urlRegexes:i}=m,d=M(m,["urlRegexes"]);return b(S({},d),{urlRegexes:i.map(a=>new RegExp(a))})}).reduce((i,a)=>{var c=a,{urlRegexes:d,selector:r}=c,m=M(c,["urlRegexes","selector"]);if(!d.some(t))return i;let E=r,{cssString:A}=E,p=M(E,["cssString"]),u=i.findIndex(T=>{var f=T,{selector:g}=f,w=M(f,["selector"]);let x=g,v=M(x,["cssString"]);return lodash.isEqual(p,v)&&lodash.isEqual(m,w)});return u===-1?i.push(S({selector:r},m)):i[u].selector.cssString+=", ".concat(A),i},[])},Ue=e=>l=>{var i=l,{urlRegexes:t,elementToMeasureSelector:n,elementsToMeasureSelectors:s}=i,o=M(i,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return b(S({},o),{urlRegexes:t.map(d=>new RegExp(d)),isNative:e,elementsToMeasureSelectors:s!=null?s:n?{width:n,height:n}:void 0})},At=(e,t,n,s={})=>{var d,r;let o=(d=n[e])!=null?d:[],l=(r=s[e])!=null?r:[];return o.map(Ue(!1)).concat(l.map(Ue(!0))).filter(({urlRegexes:m})=>m.some(t))};function pt(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var ke=(e,t,n,s,o)=>{var a;let i=((a=n[e])!=null?a:[]).map(p=>{var u=p,{urlRegexes:c}=u,A=M(u,["urlRegexes"]);return b(S({},A),{urlRegexes:c.map(E=>new RegExp(E))})}).filter(({urlRegexes:c})=>c.some(t)),d=new Set,r={},m=c=>{var p;if(d.has(c))return;((p=s[c])!=null?p:[]).forEach(u=>{let{selector:E,parentDepth:g}=typeof u=="string"?{selector:u,parentDepth:0}:u;r[g]||(r[g]=new Set),r[g].add(E);}),d.add(c);};return o.forEach(m),i.forEach(({providers:c})=>c.forEach(m)),Object.entries(r).map(([c,A])=>({parentDepth:Number(c),selector:pt(A)}))};var N=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),Ae=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.getNegativeSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=N(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getAllRules=()=>y(this,null,function*(){let[t,n,s,o,l,i,d,r]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:s,providersToReplaceAtAllSites:o,permanentAdPlacesRulesForAllDomains:l,permanentNativeAdPlacesRulesForAllDomains:i,adsReplaceUrlsBlacklist:d,providersNegativeSelectors:r,timestamp:Date.now()}});this.api=ht__default.default.create({baseURL:new URL("/api",t).href,adapter:ut__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:h.EXTENSION_VERSION,isMisesBrowser:h.IS_MISES_BROWSER}}}};
|
|
15
|
+
var Ge=Object.defineProperty,ze=Object.defineProperties;var qe=Object.getOwnPropertyDescriptors;var J=Object.getOwnPropertySymbols;var we=Object.prototype.hasOwnProperty,Te=Object.prototype.propertyIsEnumerable;var Se=(e,t,n)=>t in e?Ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,w=(e,t)=>{for(var n in t||(t={}))we.call(t,n)&&Se(e,n,t[n]);if(J)for(var n of J(t))Te.call(t,n)&&Se(e,n,t[n]);return e},_=(e,t)=>ze(e,qe(t));var I=(e,t)=>{var n={};for(var r in e)we.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&J)for(var r of J(e))t.indexOf(r)<0&&Te.call(e,r)&&(n[r]=e[r]);return n};var y=(e,t,n)=>new Promise((r,l)=>{var a=i=>{try{o(n.next(i));}catch(c){l(c);}},s=i=>{try{o(n.throw(i));}catch(c){l(c);}},o=i=>i.done?r(i.value):Promise.resolve(i.value).then(a,s);o((n=n.apply(e,t)).next());});var Pe=e=>!!e;var H=(e=300)=>new Promise(t=>setTimeout(t,e));var h=class{};h.IS_MISES_BROWSER=!1,h.HYPELAB_ADS_WINDOW_URL="",h.TKEY_INPAGE_AD_URL="",h.SMALL_TKEY_INPAGE_AD_URL="",h.SWAP_TKEY_URL="",h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",h.getPersonaIframeURL=()=>"",h.getAdsStackIframeURL=()=>"",h.buildNativeAdsMeta=()=>[],h.bannerAdsMeta=[];var Ke=e=>{let{hypelabAdsWindowUrl:t,tkeyInpageAdUrl:n,smallTkeyInpageAdUrl:r,swapTkeyUrl:l,externalAdsActivityMessageType:a,getPersonaIframeURL:s,getAdsStackIframeURL:o,buildNativeAdsMeta:i,bannerAdsMeta:c,extVersion:d,templePassphrase:m,isMisesBrowser:p}=e;r&&(h.SMALL_TKEY_INPAGE_AD_URL=r),h.HYPELAB_ADS_WINDOW_URL=t,h.TKEY_INPAGE_AD_URL=n,h.SWAP_TKEY_URL=l,h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=a,h.getPersonaIframeURL=s,h.getAdsStackIframeURL=o,h.buildNativeAdsMeta=i,h.bannerAdsMeta=c,h.EXTENSION_VERSION=d,h.TEMPLE_PASSPHRASE=m,h.IS_MISES_BROWSER=p;};var B="twa",U="twa-native",Z="twa-sibling-replacement";var ee="adRenderStart",te="resize",k="ready",X="error",ne="accelerometer; gyroscope";var C=/[\d.]+(px)?$/,V=`[${B}]`,ve=`[${B}]:not([${U}])`,Ie=`[${U}]`,F=e=>e.reduce((t,n)=>{let r=parseInt(n,10);return isNaN(r)&&C.test(n)?t:t+r},0),Y=e=>!!e.closest(V),$=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(Z))},Q=e=>{let t=getComputedStyle(e),{x:n,right:r,width:l,height:a}=e.getBoundingClientRect(),s={width:l,height:a},o=["width","height"];for(let i of o){let c=t[i],m=e.getAttribute(i)||c;C.test(m)&&(s[i]=Number(m.replace("px",""))),i==="width"&&n<0?s.width+=n:i==="width"&&r>window.innerWidth&&(s.width=window.innerWidth-n);}return s},L=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(r=>!!r):[],D=(e,t)=>{let n=e;for(let r=0;r<t;r++){let l=n.parentElement;if(!l)return null;n=l;}return n},xe=(e,t,n,r)=>e<2&&t<2?[]:r?h.buildNativeAdsMeta(e,t):h.bannerAdsMeta.reduce((l,{dimensions:a,source:s},o)=>{let{shouldNotUseStrictContainerLimits:i=!1}=s,{minContainerWidth:c,maxContainerWidth:d,minContainerHeight:m,maxContainerHeight:p,width:u}=a,A=!1;switch(n){case"permanent":A=i||e>=u&&(t>=m||t<2);break;case"slot-replacement":A=i||e>=c&&(t>=m||t<2);break;default:A=e>=c&&t>=m&&e<=d&&t<=p;}return A&&l.push(o),l},[]);var Me=(e,t)=>{let{shouldHide:n,cssString:r,parentDepth:l,isMultiple:a}=e;L(r,a).forEach(s=>{let o=D(s,l);if(!o)return;let i=window.getComputedStyle(o);i.display!=="none"&&i.visibility!=="hidden"&&t.push({type:n?"hide-element":"remove-element",element:o});});};var _e=(e,t,n)=>y(void 0,null,function*(){let{parentSelector:r,displayWidth:l}=e,{isMultiple:a,cssString:s,parentDepth:o}=r;if(l&&!semver.satisfies(semver.coerce(window.innerWidth),l))return [];let i=L(s,a).map(c=>D(c,o)).filter(c=>!!c);return yield Promise.all(i.map(c=>y(void 0,null,function*(){yield H(0),je(c,e,t,n);}))),i}),oe=(e,t)=>{var n,r;return e?{width:(n=document.querySelector(e.width))!=null?n:t,height:(r=document.querySelector(e.height))!=null?r:t}:{width:t,height:t}},je=(e,t,n,r)=>{var fe;let Re=t,{shouldUseDivWrapper:l,divWrapperStyle:a,wrapperStyle:s,elementStyle:o,adSelector:i,insertionIndex:c,insertBeforeSelector:d,insertAfterSelector:m,insertionsCount:p=1,elementsToMeasureSelectors:u,stylesOverrides:A,shouldHideOriginal:E=!1,isNative:g,urlRegexes:S,parentSelector:P}=Re,R=I(Re,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),T=R.wrapperType?s:l?a:{display:"contents"},{isMultiple:v,cssString:x,parentDepth:M}=i,re=L(g?Ie:ve,!0,e).reduce((f,O)=>f.some(q=>q.contains(O)||O.contains(q))?f:[...f,O],[]).length,N=p-re;if(L(x,v,e).map(f=>D(f,M)).filter(f=>Pe(f)&&!Y(f)).forEach(f=>{var q;let O=window.getComputedStyle(f).display==="none";if(N<=0)(!E||!O)&&r.push({type:E?"hide-element":"remove-element",element:f});else {let Fe=oe(u,((q=f.parentElement)==null?void 0:q.children.length)===1?f.parentElement:f),Ye=w({type:"replace-element",element:f,wrapperStyle:T,elementStyle:o,stylesOverrides:A},R),ge={type:"hide-element",element:f},$e=w({type:"simple-insert-ad",wrapperStyle:T,elementStyle:o,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:A},R),K=[],ye=$(f);E&&ye&&!O?K=[ge]:E&&!ye?K=[ge,$e]:E||(K=[Ye]),K.length>0&&n(Fe,"permanent",g,...K)&&N--;}}),N<=0)return;let z=-1,he=e,se={width:e,height:e},Ee=d||m;if(Ee){let f=e.querySelector(Ee),O=f==null?void 0:f.parentElement;f&&O&&(he=O,z=Array.from(e.children).indexOf(f)+(d?0:1),se=oe(u,f));}else {let f=c!=null?c:0;z=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),se=oe(u,(fe=e.children[z])!=null?fe:e);}if(z!==-1){let f=w({type:"simple-insert-ad",wrapperStyle:T,elementStyle:o,parent:he,insertionIndex:z,isSiblingReplacement:!1,stylesOverrides:A},R);n(se,"permanent",g,...Array(N).fill(f));}};var Je=["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"],Le=(e,t,n,r)=>y(void 0,null,function*(){let l=e.map(({selector:s,parentDepth:o})=>L(s,!0).reduce((i,c)=>{var P;let d=(P=D(c,o))!=null?P:c,m=i.findIndex(R=>R.contains(d)),p=d.parentElement&&window.getComputedStyle(d.parentElement),{width:u,height:A}=Q(d),E=r.some(R=>{var T;return R.type==="replace-all-children"||R.type==="simple-insert-ad"?R.parent.contains(d)||d.contains(R.parent):((T=R.element.parentElement)==null?void 0:T.contains(d))||d.contains(R.element)}),g=(p==null?void 0:p.display)==="none"||(p==null?void 0:p.visibility)==="hidden",S=m>=0&&i[m]instanceof HTMLAnchorElement;return E||u===0||A===0||g||S||(m>=0?i.splice(m,1,d):i.some(R=>R.contains(d))||i.push(d)),i},[])).flat(),a=t.map(({selector:s,parentDepth:o})=>L(s,!0).map(i=>D(i,o)).filter(i=>!!i)).flat();l=l.filter(s=>!a.includes(s)),yield Promise.all(l.map(s=>y(void 0,null,function*(){var m,p,u,A,E,g,S,P;yield H(0);let o=s.parentElement,{width:i,height:c}=window.getComputedStyle(s),d=C.test(i)&&C.test(c)?s:(p=(m=o==null?void 0:o.closest("div, article, aside, footer, header"))!=null?m:(o==null?void 0:o.tagName.toLowerCase())==="body"?void 0:o)!=null?p:s;if(!Y(s)&&!s.querySelector(V)&&!r.some(R=>R.type==="simple-insert-ad"?!1:R.type==="replace-all-children"?R.parent.contains(s):R.element===s)){let R=(u=s.getAttribute("style"))!=null?u:"",T=Object.fromEntries(R.split(";").filter(Boolean).map(N=>N.split(":").map(ue=>ue.trim())));if((A=T.width)!=null&&A.match(/^0[a-z]/)||(E=T.height)!=null&&E.match(/^0[a-z]/))return;let v=window.getComputedStyle(s),x=w(w({},Object.fromEntries(Je.map(N=>[N,v.getPropertyValue(N)]))),T),M={type:"hide-element",element:s},b={type:"simple-insert-ad",wrapperStyle:x,parent:(g=s.parentElement)!=null?g:document.body,insertionIndex:Array.from((P=(S=s.parentElement)==null?void 0:S.children)!=null?P:[]).indexOf(s),isSiblingReplacement:!0},re=$(s)?window.getComputedStyle(s).display==="none"?[]:[M]:[M,b];n({width:d,height:d},"provider-replacement",!1,...re);}})));});var be=(e,t,n)=>y(void 0,null,function*(){let{cssString:r,isMultiple:l}=e.selector,a=L(r,l);yield Promise.all(a.map(s=>y(void 0,null,function*(){yield H(0),Ze(s,e,t,n);})));}),Ze=(e,t,n,r)=>{let{selector:{shouldUseDivWrapper:l,parentDepth:a,divWrapperStyle:s},stylesOverrides:o,shouldHideOriginal:i,isNative:c=!1}=t,d=D(e,a);if(!d||n.some(u=>u.contains(d))||Y(d)||d.querySelector(V))return;let m={shouldUseDivWrapper:l,wrapperStyle:s},p;if(l&&i){let u=d.parentElement,A=window.getComputedStyle(d).display==="none",E=w({type:"simple-insert-ad",parent:u,insertionIndex:Array.from(u.children).indexOf(d),stylesOverrides:o==null?void 0:o.map(P=>{var R=P,{parentDepth:g}=R,S=I(R,["parentDepth"]);return _(w({},S),{parentDepth:g-1})}),isSiblingReplacement:!0},m);p=[],A||p.push({type:"hide-element",element:d}),$(d)||p.push(E);}else if(l)p=[w({type:"replace-element",element:d,stylesOverrides:o==null?void 0:o.map(g=>{var S=g,{parentDepth:A}=S,E=I(S,["parentDepth"]);return _(w({},E),{parentDepth:A-1})})},m)];else if(i){let u={type:"simple-insert-ad",parent:d,insertionIndex:0,stylesOverrides:o,isSiblingReplacement:!0,wrapperStyle:{display:"contents"}};p=Array.from(d.children).filter(A=>window.getComputedStyle(A).display!=="none").map(A=>({type:"hide-element",element:A})),d.querySelector(V)||p.push(u);}else p=[{type:"replace-all-children",parent:d,stylesOverrides:o,wrapperStyle:{display:"contents"}}];p.length>0&&r({width:d,height:d},"slot-replacement",c,...p);};var et=a=>y(void 0,[a],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:n,permanentAdPlacesRules:r,elementsToHideOrRemoveRules:l}){let s=[],o=(c,d,m,...p)=>{if(p.length>0&&p.every(b=>b.type==="hide-element"||b.type==="remove-element"))return s.push(...p),!0;let{width:u}=Q(c.width),{height:A}=Q(c.height),{paddingLeft:E,paddingRight:g}=window.getComputedStyle(c.width),{paddingTop:S,paddingBottom:P}=window.getComputedStyle(c.height),R=F([E,g]),T=R===u?u:u-R,v=F([S,P]),x=v===A?A:A-v,M=xe(T,x,d,m);return M.length?(s.push(...p.map(b=>b.type==="hide-element"||b.type==="remove-element"?b:_(w({},b),{adsMetadata:M}))),!0):!1},i=[];return yield Promise.all(l.map(c=>y(void 0,null,function*(){yield H(0),Me(c,s);}))),yield Promise.all(r.map(c=>y(void 0,null,function*(){yield H(0),i=i.concat(yield _e(c,o,s));}))),yield Promise.all(n.map(c=>y(void 0,null,function*(){yield H(0),yield be(c,i,o);}))),yield Le(e,t,o,s),s});var le=(l=>(l.Optimal="Optimal",l.HypeLab="HypeLab",l.Persona="Persona",l.Temple="Temple Wallet",l))(le||{});var ae=new Set,He=new Set,De=new Set,Oe=e=>y(void 0,null,function*(){let t=e.id;if(!ae.has(t))return ae.add(t),new Promise((n,r)=>{let l=a=>{var s,o,i;if(a.source===e.contentWindow)try{let c=typeof a.data=="string"?JSON.parse(a.data):a.data;if(c.id!==t)return;let d=e.offsetWidth-e.clientWidth,m=e.offsetHeight-e.clientHeight;switch(c.type){case k:n(c.adMetadata.source.providerName);break;case X:window.removeEventListener("message",l),e.style.display="none",r(new Error((s=c.reason)!=null?s:"Unknown error"));break;case ee:let{dimensions:p}=c.adMetadata,{width:u,height:A}=p;u>0&&A>0&&((o=e.style.width)!=null&&o.endsWith("%")||(e.style.width=`${p.width}px`),e.style.height=`${p.height}px`);break;case te:let{width:E,height:g}=c;(i=e.style.width)!=null&&i.endsWith("%")||(e.style.width=`${E+d}px`),e.style.height=`${g+m}px`;}}catch(c){console.error("Observing error:",c);}};window.addEventListener("message",l);}).then(n=>{if(He.has(t))return;He.add(t),rt(e)?We(t,n):nt(e,n);}).catch(n=>{throw console.error(n),n}).finally(()=>void ae.delete(t))}),nt=(e,t)=>{let n=new IntersectionObserver(r=>{r.some(l=>l.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;tt__default.default.runtime.sendMessage({type:h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:le[t]}).catch(r=>void console.error(r));},rt=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let r=Math.min(Math.max(0,t.x),n.width),l=Math.min(Math.max(0,t.x+t.width),n.width),a=Math.min(Math.max(0,t.y),n.height),s=Math.min(Math.max(0,t.y+t.height),n.height),o=t.width*t.height;return (l-r)*(s-a)/o>=.5};var de=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var it=(e,t)=>{["width","height"].forEach(r=>{var a;let l=(a=e.style[r])!=null?a:"";C.test(l)&&parseInt(l,10)<t[r]&&e.style.removeProperty(r);});},ot=(e,t,n,r)=>y(void 0,null,function*(){let{elementStyle:l={},stylesOverrides:a=[],adsMetadata:s,wrapperType:o}=e;a.sort((A,E)=>A.parentDepth-E.parentDepth);let i,c=nanoid.nanoid(),d=document.createElement("iframe");d.src=h.getAdsStackIframeURL(c,s,window.location.href),d.id=c,d.allow=ne;let m=s[0],{dimensions:p}=typeof m=="number"?h.bannerAdsMeta[m]:m;d.style.width=o==="tbody"?"100%":`${p.width}px`,d.style.height=`${p.height}px`,d.style.border="none";for(let A in l)d.style.setProperty(A,l[A]);switch(d.setAttribute(B,"true"),it(t,p),n.appendChild(d),e.type){case"replace-all-children":i=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":i=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(Z,"true"),i=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}if(o!=="tbody"){let{borderLeftWidth:A,borderRightWidth:E,borderTopWidth:g,borderBottomWidth:S}=window.getComputedStyle(d),{borderLeftWidth:P,borderRightWidth:R,borderTopWidth:T,borderBottomWidth:v}=window.getComputedStyle(t),x=F([A,E,P,R]),M=F([g,S,T,v]);d.style.width=`${p.width-x}px`,d.style.height=`${p.height-M}px`;}Oe(d).catch(r);let u=0;a.forEach(({parentDepth:A,style:E})=>{for(;A>u&&i;)i=i.parentElement,u++;i&&de(i,E);});}),Be=e=>y(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:n,wrapperType:r="div",colsAfter:l=0,colsBefore:a=0,colspan:s=1}=e,o=n.every(m=>typeof m=="object"),i,c;if(r==="div")i=document.createElement("div"),c=i;else {i=document.createElement("tbody");let m=document.createElement("tr");i.appendChild(m);for(let u=0;u<a;u++)m.appendChild(document.createElement("td"));let p=document.createElement("td");p.colSpan=s,m.appendChild(p),c=p;for(let u=0;u<l;u++)m.appendChild(document.createElement("td"));}i.setAttribute(B,"true"),o&&i.setAttribute(U,"true"),de(i,t);let d=()=>{let m=document.createElement("div");m.setAttribute(B,"true"),o&&m.setAttribute(U,"true"),m.style.display="none",i.replaceWith(m);};yield ot(e,i,c,m=>{console.error("Failed to render ads",m),d();}).catch(m=>{throw console.error("Inserting an ad attempt error:",m),d(),m});});var lt=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","important"):yield Be(t);})));var ce=(e,t,n=!1)=>{let r=document.createElement("div");r.style.width=`${e}px`,r.style.height=`${t}px`;let l=document.createElement("div");if(l.style.width=`${e}px`,l.style.height=`${t}px`,r.appendChild(l),n){let o=document.createElement("a");return o.href=h.SWAP_TKEY_URL,o.target="_blank",o.rel="noopener noreferrer",o.style.width=`${e}px`,o.style.height=`${t}px`,o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.appendChild(document.createTextNode("TODO: Native TKEY ad")),l.appendChild(o),{element:r}}let a=document.createElement("a");a.href=h.SWAP_TKEY_URL,a.target="_blank",a.rel="noopener noreferrer",a.style.width="100%",a.style.height="100%",l.appendChild(a);let s=document.createElement("img");return s.src=e<=320?h.SMALL_TKEY_INPAGE_AD_URL:h.TKEY_INPAGE_AD_URL,s.style.width="100%",s.style.height="100%",a.appendChild(s),{element:r}};var me=(e,t,{width:n,height:r},l)=>{let a=document.createElement("iframe");return a.id=e,a.src=dt(t,l,n,r,a.id),a.style.width=t.native?"100%":`${n}px`,a.style.height=`${r}px`,a.style.border="none",a.allow=ne,{element:a}},dt=(e,t,n,r,l)=>{let a=new URL(h.HYPELAB_ADS_WINDOW_URL);return e.native?a.searchParams.set("vh",String(r)):a.searchParams.set("w",String(n)),a.searchParams.set("h",String(r)),a.searchParams.set("p",e.slug),a.searchParams.set("o",ct(t)),l&&a.searchParams.set("id",l),a.toString()},ct=e=>cryptoJs.AES.encrypt(e,h.TEMPLE_PASSPHRASE).toString();var pe=(e,t,{width:n,height:r})=>{let l=document.createElement("iframe");return l.src=h.getPersonaIframeURL(e,t.slug),l.id=e,l.style.width=`${n}px`,l.style.height=`${r}px`,l.style.border="none",{element:l}};var j=e=>window.parent.postMessage(JSON.stringify(e),"*"),Ce=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){j({id:e,type:X,reason:"No more ads to render"});return}let[r,...l]=t,a=typeof r=="number"?h.bannerAdsMeta[r]:r;j({id:e,type:ee,adMetadata:a});let{source:s,dimensions:o}=a,i,c=!0;switch(s.providerName){case"Temple":i=ce(o.width,o.height,s.native);break;case"HypeLab":i=me(e,s,o,n),s.native&&(c=!1);break;default:i=pe(e,s,o);}let{element:d}=i,m=document.getElementById("root"),p=document.getElementById("temple-label");if(m.replaceChildren(d),c?p.setAttribute("active",""):p.removeAttribute("active"),d instanceof HTMLIFrameElement)return new Promise((u,A)=>{let E=setTimeout(()=>{window.removeEventListener("message",S),A(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(s)}`));},(l.length===0?2e4:1e4)*(h.IS_MISES_BROWSER?2:1)),g=!1,S=P=>{var R,T;if(P.source===d.contentWindow)try{let v=typeof P.data=="string"?JSON.parse(P.data):P.data;switch(v.type){case k:g||(g=!0,j({id:e,type:k,adMetadata:a}),clearTimeout(E),u());break;case X:window.removeEventListener("message",S),clearTimeout(E),A(new Error((R=v.reason)!=null?R:"Unknown error"));break;case te:let{width:x,height:M}=v;x>0&&M>0&&((T=d.style.width)!=null&&T.endsWith("%")||(d.style.width=`${x}px`),d.style.height=`${M}px`,j(_(w({},v),{id:e})));}}catch(v){console.error("Observing error:",v);}};window.addEventListener("message",S);}).catch(u=>(console.error(u),Ce(e,l,n)));j({id:e,type:k,adMetadata:a});});var mt=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:r,providersSelectors:l,providersNegativeSelectors:a={},providersToReplaceAtAllSites:s,permanentAdPlacesRulesForAllDomains:o,permanentNativeAdPlacesRulesForAllDomains:i={},adsReplaceUrlsBlacklist:c=[],elementsToHideOrRemoveRules:d={},timestamp:m}=t,{hostname:p,href:u}=e;if(c.some(g=>new RegExp(g).test(u)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],elementsToHideOrRemoveRules:[],timestamp:m};let A=u.replace(/#.*$/,""),E=g=>{let S=g.source.includes("#")?u:A;return g.test(S)};return {adPlacesRules:At(p,E,n),permanentAdPlacesRules:ut(p,E,o,i),providersSelectors:Ve(p,E,r,l,s),providersNegativeSelectors:Ve(p,E,r,a,s),elementsToHideOrRemoveRules:pt(p,E,d),timestamp:m}},pt=(e,t,n)=>{var r;return ((r=n[e])!=null?r:[]).map(s=>{var o=s,{urlRegexes:l}=o,a=I(o,["urlRegexes"]);return _(w({},a),{urlRegexes:l.map(i=>new RegExp(i))})}).filter(({urlRegexes:l})=>l.some(t))},At=(e,t,n)=>{var a;return ((a=n[e])!=null?a:[]).map(i=>{var c=i,{urlRegexes:s}=c,o=I(c,["urlRegexes"]);return _(w({},o),{urlRegexes:s.map(d=>new RegExp(d))})}).reduce((s,d)=>{var m=d,{urlRegexes:o,selector:i}=m,c=I(m,["urlRegexes","selector"]);if(!o.some(t))return s;let E=i,{cssString:p}=E,u=I(E,["cssString"]),A=s.findIndex(P=>{var R=P,{selector:g}=R,S=I(R,["selector"]);let x=g,v=I(x,["cssString"]);return lodash.isEqual(u,v)&&lodash.isEqual(c,S)});return A===-1?s.push(w({selector:i},c)):s[A].selector.cssString+=", ".concat(p),s},[])},ke=e=>a=>{var s=a,{urlRegexes:t,elementToMeasureSelector:n,elementsToMeasureSelectors:r}=s,l=I(s,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return _(w({},l),{urlRegexes:t.map(o=>new RegExp(o)),isNative:e,elementsToMeasureSelectors:r!=null?r:n?{width:n,height:n}:void 0})},ut=(e,t,n,r={})=>{var o,i;let l=(o=n[e])!=null?o:[],a=(i=r[e])!=null?i:[];return l.map(ke(!1)).concat(a.map(ke(!0))).filter(({urlRegexes:c})=>c.some(t))};function ht(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var Ve=(e,t,n,r,l)=>{var d;let s=((d=n[e])!=null?d:[]).map(u=>{var A=u,{urlRegexes:m}=A,p=I(A,["urlRegexes"]);return _(w({},p),{urlRegexes:m.map(E=>new RegExp(E))})}).filter(({urlRegexes:m})=>m.some(t)),o=new Set,i={},c=m=>{var u;if(o.has(m))return;((u=r[m])!=null?u:[]).forEach(A=>{let{selector:E,parentDepth:g}=typeof A=="string"?{selector:A,parentDepth:0}:A;i[g]||(i[g]=new Set),i[g].add(E);}),o.add(m);};return l.forEach(c),s.forEach(({providers:m})=>m.forEach(c)),Object.entries(i).map(([m,p])=>({parentDepth:Number(m),selector:ht(p)}))};var W=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),Ae=class{constructor(t){this.getAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=W(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=W(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getNegativeSelectorsForAllProviders=W(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=W(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getElementsToHideOrRemoveRules=W(()=>this.api.get("/slise-ad-rules/elements-to-hide-or-remove",this.getAdVersionRequestConfig()));this.getAllRules=()=>y(this,null,function*(){let[t,n,r,l,a,s,o,i,c]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders(),this.getElementsToHideOrRemoveRules()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:r,providersToReplaceAtAllSites:l,permanentAdPlacesRulesForAllDomains:a,permanentNativeAdPlacesRulesForAllDomains:s,adsReplaceUrlsBlacklist:o,providersNegativeSelectors:i,elementsToHideOrRemoveRules:c,timestamp:Date.now()}});this.api=Et__default.default.create({baseURL:new URL("/api",t).href,adapter:"fetch"});}getAdVersionRequestConfig(){return {params:{extVersion:h.EXTENSION_VERSION,isMisesBrowser:h.IS_MISES_BROWSER}}}};
|
|
18
16
|
|
|
19
17
|
exports.TempleWalletApi = Ae;
|
|
20
|
-
exports.configureAds =
|
|
21
|
-
exports.executeAdsActions =
|
|
22
|
-
exports.getAdsActions =
|
|
23
|
-
exports.renderAdsStack =
|
|
24
|
-
exports.transformRawRules =
|
|
18
|
+
exports.configureAds = Ke;
|
|
19
|
+
exports.executeAdsActions = lt;
|
|
20
|
+
exports.getAdsActions = et;
|
|
21
|
+
exports.renderAdsStack = Ce;
|
|
22
|
+
exports.transformRawRules = mt;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temple-wallet/extension-ads",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.1.0-dev.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,8 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"packageManager": "yarn@4.1.1",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"
|
|
40
|
-
"axios": "^1.6.7",
|
|
39
|
+
"axios": "^1.7.4",
|
|
41
40
|
"crypto-js": "^4.2.0",
|
|
42
41
|
"lodash": "^4.17.21",
|
|
43
42
|
"nanoid": "^5.0.6",
|
|
@@ -93,27 +93,20 @@ export const pickAdsToDisplay = (
|
|
|
93
93
|
return AdsConfiguration.buildNativeAdsMeta(containerWidth, containerHeight);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
const {
|
|
98
|
-
const { width: bestMatchWidth, height: bestMatchHeight } =
|
|
99
|
-
AdsConfiguration.bannerAdsMeta[bestMatchIndex].dimensions;
|
|
100
|
-
|
|
101
|
-
return width * height < bestMatchWidth * bestMatchHeight ? index : bestMatchIndex;
|
|
102
|
-
}, 0);
|
|
103
|
-
|
|
104
|
-
return AdsConfiguration.bannerAdsMeta.reduce<number[]>((acc, { dimensions }, i) => {
|
|
96
|
+
return AdsConfiguration.bannerAdsMeta.reduce<number[]>((acc, { dimensions, source }, i) => {
|
|
97
|
+
const { shouldNotUseStrictContainerLimits = false } = source;
|
|
105
98
|
const { minContainerWidth, maxContainerWidth, minContainerHeight, maxContainerHeight, width } = dimensions;
|
|
106
99
|
|
|
107
100
|
let matches = false;
|
|
108
101
|
switch (adType) {
|
|
109
102
|
case AdType.Permanent:
|
|
110
103
|
matches =
|
|
111
|
-
|
|
104
|
+
shouldNotUseStrictContainerLimits ||
|
|
112
105
|
(containerWidth >= width && (containerHeight >= minContainerHeight || containerHeight < 2));
|
|
113
106
|
break;
|
|
114
107
|
case AdType.SlotReplacement:
|
|
115
108
|
matches =
|
|
116
|
-
|
|
109
|
+
shouldNotUseStrictContainerLimits ||
|
|
117
110
|
(containerWidth >= minContainerWidth && (containerHeight >= minContainerHeight || containerHeight < 2));
|
|
118
111
|
break;
|
|
119
112
|
default:
|
package/src/ads-actions/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { AdsRules } from 'src/types/ads-rules';
|
|
|
9
9
|
import { delay } from 'src/utils';
|
|
10
10
|
|
|
11
11
|
import { getFinalSize, pickAdsToDisplay, sumPxValues } from './helpers';
|
|
12
|
+
import { processElementsToHideOrRemoveRule } from './process-elements-to-hide-or-remove-rule';
|
|
12
13
|
import { processPermanentAdPlacesRule } from './process-permanent-rule';
|
|
13
14
|
import { processProvidersAds } from './process-providers-ads';
|
|
14
15
|
import { processAdPlacesRule } from './process-rule';
|
|
@@ -17,7 +18,8 @@ export const getAdsActions = async ({
|
|
|
17
18
|
providersSelectors,
|
|
18
19
|
providersNegativeSelectors,
|
|
19
20
|
adPlacesRules,
|
|
20
|
-
permanentAdPlacesRules
|
|
21
|
+
permanentAdPlacesRules,
|
|
22
|
+
elementsToHideOrRemoveRules
|
|
21
23
|
}: AdsRules) => {
|
|
22
24
|
const result: AdAction[] = [];
|
|
23
25
|
|
|
@@ -70,6 +72,14 @@ export const getAdsActions = async ({
|
|
|
70
72
|
Otherwise (with `for` loop), original ads start glitching through more.
|
|
71
73
|
*/
|
|
72
74
|
|
|
75
|
+
await Promise.all(
|
|
76
|
+
elementsToHideOrRemoveRules.map(async rule => {
|
|
77
|
+
await delay(0);
|
|
78
|
+
|
|
79
|
+
processElementsToHideOrRemoveRule(rule, result);
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
|
|
73
83
|
await Promise.all(
|
|
74
84
|
permanentAdPlacesRules.map(async rule => {
|
|
75
85
|
await delay(0);
|
|
@@ -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
|
+
};
|
package/src/ads-configuration.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { AdMetadata } from './types/ads-meta';
|
|
|
3
3
|
interface IAdsConfiguration {
|
|
4
4
|
hypelabAdsWindowUrl: string;
|
|
5
5
|
tkeyInpageAdUrl: string;
|
|
6
|
+
smallTkeyInpageAdUrl?: string;
|
|
6
7
|
swapTkeyUrl: string;
|
|
7
8
|
externalAdsActivityMessageType: string;
|
|
8
9
|
getPersonaIframeURL: (id: string, slug: string) => string;
|
|
@@ -18,6 +19,7 @@ export class AdsConfiguration {
|
|
|
18
19
|
static IS_MISES_BROWSER = false;
|
|
19
20
|
static HYPELAB_ADS_WINDOW_URL = '';
|
|
20
21
|
static TKEY_INPAGE_AD_URL = '';
|
|
22
|
+
static SMALL_TKEY_INPAGE_AD_URL = '';
|
|
21
23
|
static SWAP_TKEY_URL = '';
|
|
22
24
|
static EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE = '';
|
|
23
25
|
static getPersonaIframeURL: IAdsConfiguration['getPersonaIframeURL'] = () => '';
|
|
@@ -32,6 +34,7 @@ export const configureAds = (config: IAdsConfiguration) => {
|
|
|
32
34
|
const {
|
|
33
35
|
hypelabAdsWindowUrl,
|
|
34
36
|
tkeyInpageAdUrl,
|
|
37
|
+
smallTkeyInpageAdUrl,
|
|
35
38
|
swapTkeyUrl,
|
|
36
39
|
externalAdsActivityMessageType,
|
|
37
40
|
getPersonaIframeURL,
|
|
@@ -43,6 +46,10 @@ export const configureAds = (config: IAdsConfiguration) => {
|
|
|
43
46
|
isMisesBrowser
|
|
44
47
|
} = config;
|
|
45
48
|
|
|
49
|
+
if (smallTkeyInpageAdUrl) {
|
|
50
|
+
AdsConfiguration.SMALL_TKEY_INPAGE_AD_URL = smallTkeyInpageAdUrl;
|
|
51
|
+
}
|
|
52
|
+
|
|
46
53
|
AdsConfiguration.HYPELAB_ADS_WINDOW_URL = hypelabAdsWindowUrl;
|
|
47
54
|
AdsConfiguration.TKEY_INPAGE_AD_URL = tkeyInpageAdUrl;
|
|
48
55
|
AdsConfiguration.SWAP_TKEY_URL = swapTkeyUrl;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AdsConfiguration } from 'src/ads-configuration';
|
|
2
2
|
import { AdView } from 'src/types/ad-view';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** Native variant and small variant should be used only for testing */
|
|
5
|
+
export const makeTKeyAdView = (width: number, height: number, isNative = false): AdView => {
|
|
5
6
|
const element = document.createElement('div');
|
|
6
7
|
element.style.width = `${width}px`;
|
|
7
8
|
element.style.height = `${height}px`;
|
|
@@ -12,6 +13,21 @@ export const makeTKeyAdView = (width: number, height: number): AdView => {
|
|
|
12
13
|
|
|
13
14
|
element.appendChild(div);
|
|
14
15
|
|
|
16
|
+
if (isNative) {
|
|
17
|
+
const anchor = document.createElement('a');
|
|
18
|
+
anchor.href = AdsConfiguration.SWAP_TKEY_URL;
|
|
19
|
+
anchor.target = '_blank';
|
|
20
|
+
anchor.rel = 'noopener noreferrer';
|
|
21
|
+
anchor.style.width = `${width}px`;
|
|
22
|
+
anchor.style.height = `${height}px`;
|
|
23
|
+
anchor.style.overflow = 'hidden';
|
|
24
|
+
anchor.style.textOverflow = 'ellipsis';
|
|
25
|
+
anchor.appendChild(document.createTextNode('TODO: Native TKEY ad'));
|
|
26
|
+
div.appendChild(anchor);
|
|
27
|
+
|
|
28
|
+
return { element };
|
|
29
|
+
}
|
|
30
|
+
|
|
15
31
|
const anchor = document.createElement('a');
|
|
16
32
|
anchor.href = AdsConfiguration.SWAP_TKEY_URL;
|
|
17
33
|
anchor.target = '_blank';
|
|
@@ -21,7 +37,7 @@ export const makeTKeyAdView = (width: number, height: number): AdView => {
|
|
|
21
37
|
div.appendChild(anchor);
|
|
22
38
|
|
|
23
39
|
const img = document.createElement('img');
|
|
24
|
-
img.src = AdsConfiguration.TKEY_INPAGE_AD_URL;
|
|
40
|
+
img.src = width <= 320 ? AdsConfiguration.SMALL_TKEY_INPAGE_AD_URL : AdsConfiguration.TKEY_INPAGE_AD_URL;
|
|
25
41
|
img.style.width = '100%';
|
|
26
42
|
img.style.height = '100%';
|
|
27
43
|
anchor.appendChild(img);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const stripDimentionsLimits = (wrapperElement: HTMLDivElement, width: number, height: number) => {
|
|
2
|
+
const predefinedStyles = wrapperElement.style;
|
|
3
|
+
// If needed in future, try `getComputedStyle(wrapperElement)` - though would have to not remove but override
|
|
4
|
+
|
|
5
|
+
stripOneDimensionLimit(predefinedStyles, width, ['width']);
|
|
6
|
+
stripOneDimensionLimit(predefinedStyles, height, ['height', 'maxHeight']);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const stripOneDimensionLimit = (
|
|
10
|
+
predefinedStyles: CSSStyleDeclaration,
|
|
11
|
+
value: number,
|
|
12
|
+
dimensionNames: ('width' | 'height' | 'maxWidth' | 'maxHeight')[]
|
|
13
|
+
) => {
|
|
14
|
+
for (const dimensionName of dimensionNames) {
|
|
15
|
+
const predefinedStyleValue = predefinedStyles[dimensionName] ?? '';
|
|
16
|
+
|
|
17
|
+
if (/^\d+(px)?$/.test(predefinedStyleValue)) {
|
|
18
|
+
const predefinedSize = parseInt(predefinedStyleValue, 10);
|
|
19
|
+
if (predefinedSize < value) {
|
|
20
|
+
predefinedStyles.removeProperty(dimensionName);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
package/src/index.ts
CHANGED
package/src/render-ads-stack.ts
CHANGED
|
@@ -37,7 +37,7 @@ export const renderAdsStack = async (
|
|
|
37
37
|
let withTempleLabel = true;
|
|
38
38
|
switch (source.providerName) {
|
|
39
39
|
case 'Temple':
|
|
40
|
-
adView = makeTKeyAdView(dimensions.width, dimensions.height);
|
|
40
|
+
adView = makeTKeyAdView(dimensions.width, dimensions.height, source.native);
|
|
41
41
|
break;
|
|
42
42
|
case 'HypeLab':
|
|
43
43
|
adView = makeHypelabAdView(adId, source, dimensions, origin);
|
package/src/temple-wallet-api.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import axiosFetchAdapter from '@vespaiach/axios-fetch-adapter';
|
|
2
1
|
import axios, { AxiosInstance, AxiosResponse } from 'axios';
|
|
3
2
|
|
|
4
3
|
import {
|
|
5
4
|
RawAllAdsRules,
|
|
6
5
|
RawAdPlacesRule,
|
|
7
6
|
RawAdProvidersRule,
|
|
8
|
-
RawPermanentAdPlacesRule
|
|
7
|
+
RawPermanentAdPlacesRule,
|
|
8
|
+
RawElementsToHideOrRemoveEntry
|
|
9
9
|
} from 'src/types/temple-wallet-api';
|
|
10
10
|
|
|
11
11
|
import { AdsConfiguration } from './ads-configuration';
|
|
@@ -24,7 +24,7 @@ export class TempleWalletApi {
|
|
|
24
24
|
constructor(baseUrl: string) {
|
|
25
25
|
this.api = axios.create({
|
|
26
26
|
baseURL: new URL('/api', baseUrl).href,
|
|
27
|
-
adapter:
|
|
27
|
+
adapter: 'fetch'
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -75,6 +75,13 @@ export class TempleWalletApi {
|
|
|
75
75
|
this.api.get<string[]>('/slise-ad-rules/replace-urls-blacklist', this.getAdVersionRequestConfig())
|
|
76
76
|
);
|
|
77
77
|
|
|
78
|
+
getElementsToHideOrRemoveRules = withFetchDataExtraction(() =>
|
|
79
|
+
this.api.get<Record<string, RawElementsToHideOrRemoveEntry[]>>(
|
|
80
|
+
'/slise-ad-rules/elements-to-hide-or-remove',
|
|
81
|
+
this.getAdVersionRequestConfig()
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
|
|
78
85
|
getAllRules = async (): Promise<RawAllAdsRules> => {
|
|
79
86
|
const [
|
|
80
87
|
adPlacesRulesForAllDomains,
|
|
@@ -84,7 +91,8 @@ export class TempleWalletApi {
|
|
|
84
91
|
permanentAdPlacesRulesForAllDomains,
|
|
85
92
|
permanentNativeAdPlacesRulesForAllDomains,
|
|
86
93
|
adsReplaceUrlsBlacklist,
|
|
87
|
-
providersNegativeSelectors
|
|
94
|
+
providersNegativeSelectors,
|
|
95
|
+
elementsToHideOrRemoveRules
|
|
88
96
|
] = await Promise.all([
|
|
89
97
|
this.getAdPlacesRulesForAllDomains(),
|
|
90
98
|
this.getProvidersRulesForAllDomains(),
|
|
@@ -93,7 +101,8 @@ export class TempleWalletApi {
|
|
|
93
101
|
this.getPermanentAdPlacesRulesForAllDomains(),
|
|
94
102
|
this.getPermanentNativeAdPlacesRulesForAllDomains(),
|
|
95
103
|
this.getAdsReplaceUrlsBlacklist(),
|
|
96
|
-
this.getNegativeSelectorsForAllProviders()
|
|
104
|
+
this.getNegativeSelectorsForAllProviders(),
|
|
105
|
+
this.getElementsToHideOrRemoveRules()
|
|
97
106
|
]);
|
|
98
107
|
|
|
99
108
|
return {
|
|
@@ -105,6 +114,7 @@ export class TempleWalletApi {
|
|
|
105
114
|
permanentNativeAdPlacesRulesForAllDomains,
|
|
106
115
|
adsReplaceUrlsBlacklist,
|
|
107
116
|
providersNegativeSelectors,
|
|
117
|
+
elementsToHideOrRemoveRules,
|
|
108
118
|
timestamp: Date.now()
|
|
109
119
|
};
|
|
110
120
|
};
|
|
@@ -13,6 +13,7 @@ export const transformRawRules = (location: Location, rules: RawAllAdsRules): Ad
|
|
|
13
13
|
permanentAdPlacesRulesForAllDomains,
|
|
14
14
|
permanentNativeAdPlacesRulesForAllDomains = {},
|
|
15
15
|
adsReplaceUrlsBlacklist = [],
|
|
16
|
+
elementsToHideOrRemoveRules = {},
|
|
16
17
|
timestamp
|
|
17
18
|
} = rules;
|
|
18
19
|
const { hostname, href } = location;
|
|
@@ -23,6 +24,7 @@ export const transformRawRules = (location: Location, rules: RawAllAdsRules): Ad
|
|
|
23
24
|
permanentAdPlacesRules: [],
|
|
24
25
|
providersSelectors: [],
|
|
25
26
|
providersNegativeSelectors: [],
|
|
27
|
+
elementsToHideOrRemoveRules: [],
|
|
26
28
|
timestamp
|
|
27
29
|
};
|
|
28
30
|
}
|
|
@@ -57,10 +59,27 @@ export const transformRawRules = (location: Location, rules: RawAllAdsRules): Ad
|
|
|
57
59
|
providersNegativeSelectors,
|
|
58
60
|
providersToReplaceAtAllSites
|
|
59
61
|
),
|
|
62
|
+
elementsToHideOrRemoveRules: buildElementsToHideOrRemoveRules(
|
|
63
|
+
hostname,
|
|
64
|
+
hrefMatchPredicate,
|
|
65
|
+
elementsToHideOrRemoveRules
|
|
66
|
+
),
|
|
60
67
|
timestamp
|
|
61
68
|
};
|
|
62
69
|
};
|
|
63
70
|
|
|
71
|
+
const buildElementsToHideOrRemoveRules = (
|
|
72
|
+
hostname: string,
|
|
73
|
+
hrefMatchPredicate: (regex: RegExp) => boolean,
|
|
74
|
+
elementsToHideOrRemoveRules: RawAllAdsRules['elementsToHideOrRemoveRules']
|
|
75
|
+
) =>
|
|
76
|
+
(elementsToHideOrRemoveRules[hostname] ?? [])
|
|
77
|
+
.map(({ urlRegexes, ...restRuleProps }) => ({
|
|
78
|
+
...restRuleProps,
|
|
79
|
+
urlRegexes: urlRegexes.map(regex => new RegExp(regex))
|
|
80
|
+
}))
|
|
81
|
+
.filter(({ urlRegexes }) => urlRegexes.some(hrefMatchPredicate));
|
|
82
|
+
|
|
64
83
|
const buildAdPlacesRules = (
|
|
65
84
|
hostname: string,
|
|
66
85
|
hrefMatchPredicate: (regex: RegExp) => boolean,
|
package/src/types/ads-meta.ts
CHANGED
package/src/types/ads-rules.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RawAdPlacesRule, RawPermanentAdPlacesRule } from './temple-wallet-api';
|
|
1
|
+
import { RawAdPlacesRule, RawElementsToHideOrRemoveEntry, RawPermanentAdPlacesRule } from './temple-wallet-api';
|
|
2
2
|
|
|
3
3
|
export interface AdPlacesRule extends Omit<RawAdPlacesRule, 'urlRegexes'> {
|
|
4
4
|
urlRegexes: RegExp[];
|
|
@@ -10,10 +10,15 @@ export interface PermanentAdPlacesRule
|
|
|
10
10
|
isNative: boolean;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
export interface ElementsToHideOrRemoveRule extends Omit<RawElementsToHideOrRemoveEntry, 'urlRegexes'> {
|
|
14
|
+
urlRegexes: RegExp[];
|
|
15
|
+
}
|
|
16
|
+
|
|
13
17
|
export interface AdsRules {
|
|
14
18
|
adPlacesRules: Array<Omit<AdPlacesRule, 'urlRegexes'>>;
|
|
15
19
|
permanentAdPlacesRules: PermanentAdPlacesRule[];
|
|
16
20
|
providersSelectors: Array<{ selector: string; parentDepth: number }>;
|
|
17
21
|
providersNegativeSelectors: Array<{ selector: string; parentDepth: number }>;
|
|
22
|
+
elementsToHideOrRemoveRules: ElementsToHideOrRemoveRule[];
|
|
18
23
|
timestamp: number;
|
|
19
24
|
}
|
|
@@ -55,6 +55,14 @@ export interface RawAdProvidersRule {
|
|
|
55
55
|
providers: string[];
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
export interface RawElementsToHideOrRemoveEntry {
|
|
59
|
+
cssString: string;
|
|
60
|
+
parentDepth: number;
|
|
61
|
+
isMultiple: boolean;
|
|
62
|
+
urlRegexes: string[];
|
|
63
|
+
shouldHide: boolean;
|
|
64
|
+
}
|
|
65
|
+
|
|
58
66
|
export interface RawAllAdsRules {
|
|
59
67
|
adPlacesRulesForAllDomains: Record<string, RawAdPlacesRule[]>;
|
|
60
68
|
providersRulesForAllDomains: Record<string, RawAdProvidersRule[]>;
|
|
@@ -64,5 +72,6 @@ export interface RawAllAdsRules {
|
|
|
64
72
|
permanentAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
|
|
65
73
|
permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
|
|
66
74
|
adsReplaceUrlsBlacklist: string[];
|
|
75
|
+
elementsToHideOrRemoveRules: Record<string, RawElementsToHideOrRemoveEntry[]>;
|
|
67
76
|
timestamp: number;
|
|
68
77
|
}
|