@temple-wallet/extension-ads 8.1.0 → 9.0.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -3
- package/dist/index.js +12 -14
- package/dist/referrals/index.d.ts +33 -0
- package/dist/referrals/index.js +18 -0
- package/package.json +7 -5
- package/src/ads-actions/helpers.ts +36 -2
- package/src/ads-actions/process-permanent-rule.ts +8 -3
- package/src/ads-actions/process-providers-ads.ts +29 -2
- package/src/ads-actions/process-rule.ts +4 -0
- package/src/ads-configuration.ts +17 -2
- package/src/execute-ads-actions/observing.ts +3 -1
- package/src/execute-ads-actions/process-insert-ad-action.ts +26 -5
- package/src/referrals/index.ts +5 -0
- package/src/referrals/replace.ts +129 -0
- package/src/referrals/takeads.ts +44 -0
- package/src/referrals/utils.ts +14 -0
- package/src/render-ads-stack.ts +218 -102
- package/src/temple-wallet-api.ts +10 -4
- package/src/transform-raw-rules.ts +6 -2
- package/src/types/ads-actions.ts +2 -0
- package/src/types/ads-rules.ts +1 -0
- package/src/types/temple-wallet-api.ts +1 -0
- package/src/utils.ts +4 -0
- package/dist/ads-actions/helpers.d.ts +0 -17
- package/dist/ads-actions/helpers.js +0 -96
- package/dist/ads-actions/helpers.js.map +0 -1
- package/dist/ads-actions/index.d.ts +0 -3
- package/dist/ads-actions/index.js +0 -63
- package/dist/ads-actions/index.js.map +0 -1
- package/dist/ads-actions/process-elements-to-hide-or-remove-rule.d.ts +0 -3
- package/dist/ads-actions/process-elements-to-hide-or-remove-rule.js +0 -19
- package/dist/ads-actions/process-elements-to-hide-or-remove-rule.js.map +0 -1
- package/dist/ads-actions/process-permanent-rule.d.ts +0 -3
- package/dist/ads-actions/process-permanent-rule.js +0 -143
- package/dist/ads-actions/process-permanent-rule.js.map +0 -1
- package/dist/ads-actions/process-providers-ads.d.ts +0 -3
- package/dist/ads-actions/process-providers-ads.js +0 -137
- package/dist/ads-actions/process-providers-ads.js.map +0 -1
- package/dist/ads-actions/process-rule.d.ts +0 -3
- package/dist/ads-actions/process-rule.js +0 -98
- package/dist/ads-actions/process-rule.js.map +0 -1
- package/dist/ads-configuration.d.ts +0 -31
- package/dist/ads-configuration.js +0 -30
- package/dist/ads-configuration.js.map +0 -1
- package/dist/constants.d.ts +0 -11
- package/dist/constants.js +0 -12
- package/dist/constants.js.map +0 -1
- package/dist/execute-ads-actions/ads-views/index.d.ts +0 -3
- package/dist/execute-ads-actions/ads-views/index.js +0 -4
- package/dist/execute-ads-actions/ads-views/index.js.map +0 -1
- package/dist/execute-ads-actions/ads-views/make-ads-tw-view.d.ts +0 -3
- package/dist/execute-ads-actions/ads-views/make-ads-tw-view.js +0 -40
- package/dist/execute-ads-actions/ads-views/make-ads-tw-view.js.map +0 -1
- package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.d.ts +0 -3
- package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.js +0 -22
- package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.js.map +0 -1
- package/dist/execute-ads-actions/ads-views/make-tkey-ad.d.ts +0 -3
- package/dist/execute-ads-actions/ads-views/make-tkey-ad.js +0 -38
- package/dist/execute-ads-actions/ads-views/make-tkey-ad.js.map +0 -1
- package/dist/execute-ads-actions/index.d.ts +0 -2
- package/dist/execute-ads-actions/index.js +0 -23
- package/dist/execute-ads-actions/index.js.map +0 -1
- package/dist/execute-ads-actions/observing.d.ts +0 -1
- package/dist/execute-ads-actions/observing.js +0 -129
- package/dist/execute-ads-actions/observing.js.map +0 -1
- package/dist/execute-ads-actions/override-element-styles.d.ts +0 -2
- package/dist/execute-ads-actions/override-element-styles.js +0 -6
- package/dist/execute-ads-actions/override-element-styles.js.map +0 -1
- package/dist/execute-ads-actions/process-insert-ad-action.d.ts +0 -2
- package/dist/execute-ads-actions/process-insert-ad-action.js +0 -153
- package/dist/execute-ads-actions/process-insert-ad-action.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/render-ads-stack.d.ts +0 -7
- package/dist/render-ads-stack.js +0 -156
- package/dist/render-ads-stack.js.map +0 -1
- package/dist/temple-wallet-api.d.ts +0 -23
- package/dist/temple-wallet-api.js +0 -67
- package/dist/temple-wallet-api.js.map +0 -1
- package/dist/transform-raw-rules.d.ts +0 -3
- package/dist/transform-raw-rules.js +0 -137
- package/dist/transform-raw-rules.js.map +0 -1
- package/dist/types/ad-view.d.ts +0 -7
- package/dist/types/ad-view.js +0 -2
- package/dist/types/ad-view.js.map +0 -1
- package/dist/types/ads-actions.d.ts +0 -56
- package/dist/types/ads-actions.js +0 -15
- package/dist/types/ads-actions.js.map +0 -1
- package/dist/types/ads-meta.d.ts +0 -19
- package/dist/types/ads-meta.js +0 -2
- package/dist/types/ads-meta.js.map +0 -1
- package/dist/types/ads-provider.d.ts +0 -8
- package/dist/types/ads-provider.js +0 -9
- package/dist/types/ads-provider.js.map +0 -1
- package/dist/types/ads-rules.d.ts +0 -26
- package/dist/types/ads-rules.js +0 -2
- package/dist/types/ads-rules.js.map +0 -1
- package/dist/types/temple-wallet-api.d.ts +0 -78
- package/dist/types/temple-wallet-api.js +0 -2
- package/dist/types/temple-wallet-api.js.map +0 -1
- package/dist/utils.d.ts +0 -6
- package/dist/utils.js +0 -4
- package/dist/utils.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -96,6 +96,7 @@ interface RawAllAdsRules {
|
|
|
96
96
|
permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
|
|
97
97
|
adsReplaceUrlsBlacklist: string[];
|
|
98
98
|
elementsToHideOrRemoveRules: Record<string, RawElementsToHideOrRemoveEntry[]>;
|
|
99
|
+
blacklistedHypelabCampaignsSlugs: string[];
|
|
99
100
|
timestamp: number;
|
|
100
101
|
}
|
|
101
102
|
|
|
@@ -118,6 +119,8 @@ interface InsertAdActionProps extends Pick<RawPermanentAdPlacesRule, 'wrapperSty
|
|
|
118
119
|
stylesOverrides?: AdStylesOverrides[];
|
|
119
120
|
originalWidth: number;
|
|
120
121
|
originalHeight: number;
|
|
122
|
+
shouldUseBlurredBackground?: boolean;
|
|
123
|
+
adCategories: string[];
|
|
121
124
|
}
|
|
122
125
|
interface ReplaceAllChildrenWithAdAction extends AdActionBase, InsertAdActionProps {
|
|
123
126
|
type: AdActionType.ReplaceAllChildren;
|
|
@@ -176,6 +179,7 @@ interface AdsRules {
|
|
|
176
179
|
parentDepth: number;
|
|
177
180
|
}>;
|
|
178
181
|
elementsToHideOrRemoveRules: ElementsToHideOrRemoveRule[];
|
|
182
|
+
blacklistedHypelabCampaignsSlugs: string[];
|
|
179
183
|
timestamp: number;
|
|
180
184
|
}
|
|
181
185
|
|
|
@@ -188,12 +192,13 @@ interface IAdsConfiguration {
|
|
|
188
192
|
swapTkeyUrl: string;
|
|
189
193
|
externalAdsActivityMessageType: string;
|
|
190
194
|
personaIframePath: string;
|
|
191
|
-
getAdsStackIframeURL: (id: string, adsMetadataIds: (number | AdMetadata)[], origin: string) => string;
|
|
195
|
+
getAdsStackIframeURL: (id: string, adsMetadataIds: (number | AdMetadata)[], origin: string, adCategories: string[]) => string;
|
|
192
196
|
buildNativeAdsMeta: (containerWidth: number, containerHeight: number) => AdMetadata[];
|
|
193
197
|
bannerAdsMeta: AdMetadata[];
|
|
194
198
|
extVersion: string;
|
|
195
199
|
templePassphrase: string;
|
|
196
200
|
isMisesBrowser: boolean;
|
|
201
|
+
pickNextAdMetadata: (allAdsMetadata: AdMetadata[], currentAdMetadata: AdMetadata | undefined, validAdsCounter: number, pageHasPlacesRules: boolean, adCategories: string[]) => AdMetadata | undefined;
|
|
197
202
|
}
|
|
198
203
|
declare const configureAds: (config: IAdsConfiguration) => void;
|
|
199
204
|
|
|
@@ -204,9 +209,9 @@ declare const executeAdsActions: (adsActions: AdAction[]) => Promise<PromiseSett
|
|
|
204
209
|
* in a dedicated iframe. Sends messages to the parent window on an attempt to render an ad, on successful rendering,
|
|
205
210
|
* on ad resize, and on error.
|
|
206
211
|
*/
|
|
207
|
-
declare const renderAdsStack: (adId: string, adsMetadata: (number | AdMetadata)[], origin: string) =>
|
|
212
|
+
declare const renderAdsStack: (adId: string, adsMetadata: (number | AdMetadata)[], origin: string, pageHasPlacesRules: boolean | undefined, adCategories: string[], hypelabBlacklistedCampaignsSlugs: string[]) => void;
|
|
208
213
|
|
|
209
|
-
declare const transformRawRules: (
|
|
214
|
+
declare const transformRawRules: (locationOrHref: Location | string, rules: RawAllAdsRules) => AdsRules;
|
|
210
215
|
|
|
211
216
|
declare class TempleWalletApi {
|
|
212
217
|
private api;
|
|
@@ -228,6 +233,7 @@ declare class TempleWalletApi {
|
|
|
228
233
|
getPermanentNativeAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
|
|
229
234
|
getAdsReplaceUrlsBlacklist: () => Promise<string[]>;
|
|
230
235
|
getElementsToHideOrRemoveRules: () => Promise<Record<string, RawElementsToHideOrRemoveEntry[]>>;
|
|
236
|
+
getBlacklistedHypelabCampaignsSlugs: () => Promise<string[]>;
|
|
231
237
|
getAllRules: () => Promise<RawAllAdsRules>;
|
|
232
238
|
}
|
|
233
239
|
|
package/dist/index.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var semver = require('semver');
|
|
4
|
+
var lodash = require('lodash');
|
|
4
5
|
var nanoid = require('nanoid');
|
|
5
|
-
var
|
|
6
|
+
var ct = require('webextension-polyfill');
|
|
6
7
|
var cryptoJs = require('crypto-js');
|
|
7
|
-
var
|
|
8
|
-
var yt = require('@vespaiach/axios-fetch-adapter');
|
|
9
|
-
var St = require('axios');
|
|
8
|
+
var Mt = require('axios');
|
|
10
9
|
|
|
11
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
11
|
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var St__default = /*#__PURE__*/_interopDefault(St);
|
|
12
|
+
var ct__default = /*#__PURE__*/_interopDefault(ct);
|
|
13
|
+
var Mt__default = /*#__PURE__*/_interopDefault(Mt);
|
|
16
14
|
|
|
17
|
-
var Xe=Object.defineProperty,Qe=Object.defineProperties;var je=Object.getOwnPropertyDescriptors;var ie=Object.getOwnPropertySymbols;var Ie=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var ve=(e,t,r)=>t in e?Xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,v=(e,t)=>{for(var r in t||(t={}))Ie.call(t,r)&&ve(e,r,t[r]);if(ie)for(var r of ie(t))xe.call(t,r)&&ve(e,r,t[r]);return e},b=(e,t)=>Qe(e,je(t));var M=(e,t)=>{var r={};for(var s in e)Ie.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&ie)for(var s of ie(e))t.indexOf(s)<0&&xe.call(e,s)&&(r[s]=e[s]);return r};var T=(e,t,r)=>new Promise((s,a)=>{var o=i=>{try{l(r.next(i));}catch(d){a(d);}},n=i=>{try{l(r.throw(i));}catch(d){a(d);}},l=i=>i.done?s(i.value):Promise.resolve(i.value).then(o,n);l((r=r.apply(e,t)).next());});var Me=e=>!!e;var H=(e=300)=>new Promise(t=>setTimeout(t,e));var E=class{};E.IS_MISES_BROWSER=!1,E.ADS_TW_WINDOW_URL="",E.TKEY_INPAGE_AD_URL="",E.SMALL_TKEY_INPAGE_AD_URL="",E.SWAP_TKEY_URL="",E.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",E.personaIframePath="",E.getAdsStackIframeURL=()=>"",E.buildNativeAdsMeta=()=>[],E.bannerAdsMeta=[];var Je=e=>{let{adsTwWindowUrl:t,tkeyInpageAdUrl:r,smallTkeyInpageAdUrl:s,swapTkeyUrl:a,externalAdsActivityMessageType:o,personaIframePath:n,getAdsStackIframeURL:l,buildNativeAdsMeta:i,bannerAdsMeta:d,extVersion:p,templePassphrase:A,isMisesBrowser:c}=e;s&&(E.SMALL_TKEY_INPAGE_AD_URL=s),E.ADS_TW_WINDOW_URL=t,E.TKEY_INPAGE_AD_URL=r,E.SWAP_TKEY_URL=a,E.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=o,E.personaIframePath=n,E.getAdsStackIframeURL=l,E.buildNativeAdsMeta=i,E.bannerAdsMeta=d,E.EXTENSION_VERSION=p,E.TEMPLE_PASSPHRASE=A,E.IS_MISES_BROWSER=c;};var V="twa",G="twa-native",Y="twa-sibling-replacement";var oe="adRenderStart",le="resize",$="ready",te="error",ae="accelerometer; gyroscope",B="crypto",ce="background";var K=/[\d.]+(px)?$/,z=`[${V}]`,_e=`[${V}]:not([${G}])`,be=`[${G}]`,pe=(e,t)=>{let r=parseInt(e,10);return isNaN(r)||!K.test(e)?t:r},k=(e,t,r)=>{e.style[t]=`${Math.max(pe(e.style[t],0),r)}px`;},q=e=>e.reduce((t,r)=>t+pe(r,0),0),X=e=>!!e.closest(z),de=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(Y))},re=e=>{let t=getComputedStyle(e),{x:r,right:s,width:a,height:o}=e.getBoundingClientRect(),n={width:a,height:o},l=["width","height"];for(let i of l){let d=t[i],p=e.getAttribute(i),A=Math.max(...[d,p].map(c=>pe(c!=null?c:"",-1)));A!==-1&&(n[i]=A),i==="width"&&r<0?n.width+=r:i==="width"&&s>window.innerWidth&&(n.width=window.innerWidth-r);}return n},L=(e,t,r=document)=>e?t?[...r.querySelectorAll(e)]:[r.querySelector(e)].filter(s=>!!s):[],O=(e,t)=>{let r=e;for(let s=0;s<t;s++){let a=r.parentElement;if(!a)return null;r=a;}return r},Le=(e,t,r,s,a)=>e<2&&t<2?[]:s?E.buildNativeAdsMeta(e,t):E.bannerAdsMeta.reduce((o,{dimensions:n,source:l},i)=>{let{shouldNotUseStrictContainerLimits:d=!1,categories:p=[B]}=l;if(p.every(u=>!a.includes(u)))return o;let{minContainerWidth:A,minContainerHeight:c,width:m,maxContainerWidth:h,maxContainerHeight:R}=n,f=!1;switch(r){case"permanent":f=d||e>=m&&(t>=c||t<2);break;case"slot-replacement":f=d||e>=A&&(t>=c||t<2);break;default:f=e>=A&&t>=c&&e<=h&&t<=R;}return f&&o.push(i),o},[]);var De=(e,t)=>{let{shouldHide:r,cssString:s,parentDepth:a,isMultiple:o}=e;L(s,o).forEach(n=>{let l=O(n,a);if(!l)return;let i=window.getComputedStyle(l);i.display!=="none"&&i.visibility!=="hidden"&&t.push({type:r?"hide-element":"remove-element",element:l});});};var He=(e,t,r)=>T(void 0,null,function*(){let{parentSelector:s,displayWidth:a}=e,{isMultiple:o,cssString:n,parentDepth:l}=s;if(a&&!semver.satisfies(semver.coerce(window.innerWidth),a))return [];let i=L(n,o).map(d=>O(d,l)).filter(d=>!!d);return yield Promise.all(i.map(d=>T(void 0,null,function*(){yield H(0),tt(d,e,t,r);}))),i}),Ae=(e,t)=>{var r,s;return e?{width:(r=document.querySelector(e.width))!=null?r:t,height:(s=document.querySelector(e.height))!=null?s:t}:{width:t,height:t}},tt=(e,t,r,s)=>{var Te;let Se=t,{shouldUseDivWrapper:a,divWrapperStyle:o,wrapperStyle:n,elementStyle:l,adSelector:i,insertionIndex:d,insertBeforeSelector:p,insertAfterSelector:A,insertionsCount:c=1,elementsToMeasureSelectors:m,stylesOverrides:h,shouldHideOriginal:R=!1,isNative:f,urlRegexes:u,parentSelector:w}=Se,S=M(Se,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),P=S.wrapperType?n:a?o:{display:"contents"},{isMultiple:g,cssString:I,parentDepth:_}=i,x=L(f?be:_e,!0,e).reduce((y,W)=>y.some(Z=>Z.contains(W)||W.contains(Z))?y:[...y,W],[]).length,C=c-x;if(L(I,g,e).map(y=>O(y,_)).filter(y=>Me(y)&&!X(y)).forEach(y=>{var Z;let W=window.getComputedStyle(y).display==="none";if(C<=0)(!R||!W)&&s.push({type:R?"hide-element":"remove-element",element:y});else {let Ke=Ae(m,((Z=y.parentElement)==null?void 0:Z.children.length)===1?y.parentElement:y),ze=v({type:"replace-element",element:y,wrapperStyle:P,elementStyle:l,stylesOverrides:h},S),we={type:"hide-element",element:y},qe=v({type:"simple-insert-ad",wrapperStyle:P,elementStyle:l,parent:y.parentElement,insertionIndex:Array.from(y.parentElement.children).indexOf(y),isSiblingReplacement:!0,stylesOverrides:h},S),ee=[],Pe=de(y);R&&Pe&&!W?ee=[we]:R&&!Pe?ee=[we,qe]:R||(ee=[ze]),ee.length>0&&r(Ke,"permanent",f,[B],...ee)&&C--;}}),C<=0)return;let D=-1,F=e,J={width:e,height:e},ye=p||A;if(ye){let y=e.querySelector(ye),W=y==null?void 0:y.parentElement;y&&W&&(F=W,D=Array.from(e.children).indexOf(y)+(p?0:1),J=Ae(m,y));}else {let y=d!=null?d:0;D=y<0?Math.max(e.children.length+y,0):Math.min(y,e.children.length),J=Ae(m,(Te=e.children[D])!=null?Te:e);}if(D!==-1){let y=v({type:"simple-insert-ad",wrapperStyle:P,elementStyle:l,parent:F,insertionIndex:D,isSiblingReplacement:!1,stylesOverrides:h},S);r(J,"permanent",f,[B],...Array(C).fill(y));}};var rt=["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"],Oe=(e,t,r,s)=>T(void 0,null,function*(){let a=e.map(({selector:n,parentDepth:l,categories:i})=>L(n,!0).reduce((d,p)=>{var P;let A=(P=O(p,l))!=null?P:p,c=d.findIndex(({element:g})=>g.contains(A)),m=A.parentElement&&window.getComputedStyle(A.parentElement),{width:h,height:R}=re(A),f=s.some(g=>{var I;return g.type==="replace-all-children"||g.type==="simple-insert-ad"?g.parent.contains(A)||A.contains(g.parent):((I=g.element.parentElement)==null?void 0:I.contains(A))||A.contains(g.element)}),u=(m==null?void 0:m.display)==="none"||(m==null?void 0:m.visibility)==="hidden",w=c>=0&&d[c]instanceof HTMLAnchorElement;if(f||h===0||R===0||u||w)return d;let S={element:A,categories:i};return c>=0?d.splice(c,1,S):d.some(({element:g})=>g.contains(A))||d.push(S),d},[])).flat(),o=t.map(({selector:n,parentDepth:l})=>L(n,!0).map(i=>O(i,l)).filter(i=>!!i)).flat();a=a.filter(({element:n})=>!o.includes(n)),yield Promise.all(a.map(i=>T(void 0,[i],function*({element:n,categories:l}){var m,h,R,f,u,w,S,P;yield H(0);let d=n.parentElement,{width:p,height:A}=window.getComputedStyle(n),c=K.test(p)&&K.test(A)?n:(h=(m=d==null?void 0:d.closest("div, article, aside, footer, header"))!=null?m:(d==null?void 0:d.tagName.toLowerCase())==="body"?void 0:d)!=null?h:n;if(!X(n)&&!n.querySelector(z)&&!s.some(g=>g.type==="simple-insert-ad"?!1:g.type==="replace-all-children"?g.parent.contains(n):g.element===n)){let g=(R=n.getAttribute("style"))!=null?R:"",I=Object.fromEntries(g.split(";").filter(Boolean).map(F=>F.split(":").map(J=>J.trim())));if((f=I.width)!=null&&f.match(/^0[a-z]/)||(u=I.height)!=null&&u.match(/^0[a-z]/))return;let _=window.getComputedStyle(n),U=v(v({},Object.fromEntries(rt.map(F=>[F,_.getPropertyValue(F)]))),I),x={type:"hide-element",element:n},C={type:"simple-insert-ad",wrapperStyle:U,parent:(w=n.parentElement)!=null?w:document.body,insertionIndex:Array.from((P=(S=n.parentElement)==null?void 0:S.children)!=null?P:[]).indexOf(n),isSiblingReplacement:!0},j,D=n.closest(`[${Y}] + *`);D&&D!==n?j=[{type:"remove-element",element:D.previousElementSibling},x,C]:D?j=window.getComputedStyle(n).display==="none"?[]:[x]:j=[x,C],r({width:c,height:c},"provider-replacement",!1,l,...j);}})));});var Ne=(e,t,r)=>T(void 0,null,function*(){let{cssString:s,isMultiple:a}=e.selector,o=L(s,a);yield Promise.all(o.map(n=>T(void 0,null,function*(){yield H(0),nt(n,e,t,r);})));}),nt=(e,t,r,s)=>{let{selector:{shouldUseDivWrapper:a,parentDepth:o,divWrapperStyle:n},stylesOverrides:l,shouldHideOriginal:i,isNative:d=!1}=t,p=O(e,o);if(!p||r.some(m=>m.contains(p))||X(p)||p.querySelector(z))return;let A={shouldUseDivWrapper:a,wrapperStyle:n},c;if(a&&i){let m=p.parentElement,h=window.getComputedStyle(p).display==="none",R=v({type:"simple-insert-ad",parent:m,insertionIndex:Array.from(m.children).indexOf(p),stylesOverrides:l==null?void 0:l.map(w=>{var S=w,{parentDepth:f}=S,u=M(S,["parentDepth"]);return b(v({},u),{parentDepth:f-1})}),isSiblingReplacement:!0},A);c=[],h||c.push({type:"hide-element",element:p}),de(p)||c.push(R);}else if(a)c=[v({type:"replace-element",element:p,stylesOverrides:l==null?void 0:l.map(f=>{var u=f,{parentDepth:h}=u,R=M(u,["parentDepth"]);return b(v({},R),{parentDepth:h-1})})},A)];else if(i){let m={type:"simple-insert-ad",parent:p,insertionIndex:0,stylesOverrides:l,isSiblingReplacement:!0,wrapperStyle:{display:"contents"}};c=Array.from(p.children).filter(h=>window.getComputedStyle(h).display!=="none").map(h=>({type:"hide-element",element:h})),p.querySelector(z)||c.push(m);}else c=[{type:"replace-all-children",parent:p,stylesOverrides:l,wrapperStyle:{display:"contents"}}];c.length>0&&s({width:p,height:p},"slot-replacement",d,[B],...c);};var st=o=>T(void 0,[o],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:r,permanentAdPlacesRules:s,elementsToHideOrRemoveRules:a}){let n=[],l=(d,p,A,c,...m)=>{if(m.length>0&&m.every(x=>x.type==="hide-element"||x.type==="remove-element"))return n.push(...m),!0;let{width:h}=re(d.width),{height:R}=re(d.height),{paddingLeft:f,paddingRight:u}=window.getComputedStyle(d.width),{paddingTop:w,paddingBottom:S}=window.getComputedStyle(d.height),P=q([f,u]),g=P===h?h:h-P,I=q([w,S]),_=I===R?R:R-I,U=Le(g,_,p,A,c);return U.length?(n.push(...m.map(x=>x.type==="hide-element"||x.type==="remove-element"?x:b(v({},x),{adsMetadata:U,originalWidth:g,originalHeight:_}))),!0):!1},i=[];return yield Promise.all(a.map(d=>T(void 0,null,function*(){yield H(0),De(d,n);}))),yield Promise.all(s.map(d=>T(void 0,null,function*(){yield H(0),i=i.concat(yield He(d,l,n));}))),yield Promise.all(r.map(d=>T(void 0,null,function*(){yield H(0),yield Ne(d,i,l);}))),yield Oe(e,t,l,n),n});var ue=(o=>(o.Optimal="Optimal",o.SmartyAds="SmartyAds",o.HypeLab="HypeLab",o.Persona="Persona",o.Temple="Temple Wallet",o))(ue||{});var he=new Set,Ce=new Set,We=new Set,ke=e=>T(void 0,null,function*(){let t=e.id;if(!he.has(t))return he.add(t),new Promise((r,s)=>{let a=o=>{var n,l;if(o.source===e.contentWindow)try{let i=typeof o.data=="string"?JSON.parse(o.data):o.data;if(i.id!==t)return;let d=e.offsetWidth-e.clientWidth,p=e.offsetHeight-e.clientHeight;switch(i.type){case $:r(i.adMetadata.source.providerName);break;case te:window.removeEventListener("message",a),e.style.display="none",s(new Error((n=i.reason)!=null?n:"Unknown error"));break;case oe:let{dimensions:A,source:c}=i.adMetadata,{width:m,height:h}=A;m>0&&h>0&&(c.native?e.style.height=`${h}px`:(k(e,"width",m),k(e,"height",h)));break;case le:let{width:R,height:f}=i;(l=e.style.width)!=null&&l.endsWith("%")?e.style.height=`${f+p}px`:(k(e,"width",R+d),k(e,"height",f+p));}}catch(i){console.error("Observing error:",i);}};window.addEventListener("message",a);}).then(r=>{if(Ce.has(t))return;Ce.add(t),lt(e)?Ue(t,r):ot(e,r);}).catch(r=>{throw console.error(r),r}).finally(()=>void he.delete(t))}),ot=(e,t)=>{let r=new IntersectionObserver(s=>{s.some(a=>a.isIntersecting)&&(Ue(e.id,t),r.disconnect());},{threshold:.5});r.observe(e);},Ue=(e,t)=>{if(We.has(e))return;We.add(e);let r=window.parent.location.href;it__default.default.runtime.sendMessage({type:E.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:r,provider:ue[t]}).catch(s=>void console.error(s));},lt=e=>{let t=e.getBoundingClientRect(),r=window.visualViewport;if(!r)return !1;let s=Math.min(Math.max(0,t.x),r.width),a=Math.min(Math.max(0,t.x+t.width),r.width),o=Math.min(Math.max(0,t.y),r.height),n=Math.min(Math.max(0,t.y+t.height),r.height),l=t.width*t.height;return (a-s)*(n-o)/l>=.5};var ne=(e,t)=>{for(let r in t)e.style.setProperty(r,t[r]);};var dt=(e,t)=>{["width","height"].forEach(s=>{var o;let a=(o=e.style[s])!=null?o:"";K.test(a)&&parseInt(a,10)<t[s]&&e.style.removeProperty(s);});},ct=(e,t,r,s)=>T(void 0,null,function*(){let{elementStyle:a={},stylesOverrides:o=[],adsMetadata:n,wrapperType:l,originalHeight:i,originalWidth:d}=e;o.sort((u,w)=>u.parentDepth-w.parentDepth);let p,A=nanoid.nanoid(),c=document.createElement("iframe");c.loading="lazy",c.src=E.getAdsStackIframeURL(A,n,window.location.href),c.id=A,c.allow=ae;let m=n[0],{dimensions:h}=typeof m=="number"?E.bannerAdsMeta[m]:m,R={width:Math.max(d,h.width),height:Math.max(i,h.height)};c.style.width=l==="tbody"?"100%":`${R.width}px`,c.style.height=`${R.height}px`,c.style.border="none";for(let u in a)c.style.setProperty(u,a[u]);switch(c.setAttribute(V,"true"),dt(t,R),r.appendChild(c),e.type){case"replace-all-children":p=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":p=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(Y,"true"),p=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}if(l!=="tbody"){let{borderLeftWidth:u,borderRightWidth:w,borderTopWidth:S,borderBottomWidth:P}=window.getComputedStyle(c),{borderLeftWidth:g,borderRightWidth:I,borderTopWidth:_,borderBottomWidth:U}=window.getComputedStyle(t),x=q([u,w,g,I]),C=q([S,P,_,U]);c.style.width=`${R.width-x}px`,c.style.height=`${R.height-C}px`;}ke(c).catch(s);let f=0;o.forEach(({parentDepth:u,style:w})=>{for(;u>f&&p;)p=p.parentElement,f++;p&&ne(p,w);});}),Fe=e=>T(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:r,wrapperType:s="div",colsAfter:a=0,colsBefore:o=0,colspan:n=1}=e,l=r.every(A=>typeof A=="object"),i,d;if(s==="div")i=document.createElement("div"),d=i;else {i=document.createElement("tbody");let A=document.createElement("tr");i.appendChild(A);for(let m=0;m<o;m++)A.appendChild(document.createElement("td"));let c=document.createElement("td");c.colSpan=n,A.appendChild(c),d=c;for(let m=0;m<a;m++)A.appendChild(document.createElement("td"));}i.setAttribute(V,"true"),l&&i.setAttribute(G,"true"),ne(i,t);let p=()=>{let A=document.createElement("div");A.setAttribute(V,"true"),l&&A.setAttribute(G,"true"),e.type==="simple-insert-ad"&&e.isSiblingReplacement&&A.setAttribute(Y,"true"),A.style.display="none",i.replaceWith(A);};yield ct(e,i,d,A=>{console.error("Failed to render ads",A),p();}).catch(A=>{throw console.error("Inserting an ad attempt error:",A),p(),A});});var mt=e=>Promise.allSettled(e.map(t=>T(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none","important"):yield Fe(t);})));var Ee=(e,t,r=!1)=>{let s=document.createElement("div");s.style.width=`${e}px`,s.style.height=`${t}px`;let a=document.createElement("div");if(a.style.width=`${e}px`,a.style.height=`${t}px`,s.appendChild(a),r){let l=document.createElement("a");return l.href=E.SWAP_TKEY_URL,l.target="_blank",l.rel="noopener noreferrer",l.style.width=`${e}px`,l.style.height=`${t}px`,l.style.overflow="hidden",l.style.textOverflow="ellipsis",l.appendChild(document.createTextNode("TODO: Native TKEY ad")),a.appendChild(l),{element:s}}let o=document.createElement("a");o.href=E.SWAP_TKEY_URL,o.target="_blank",o.rel="noopener noreferrer",o.style.width="100%",o.style.height="100%",a.appendChild(o);let n=document.createElement("img");return n.src=e<=320?E.SMALL_TKEY_INPAGE_AD_URL:E.TKEY_INPAGE_AD_URL,n.style.width="100%",n.style.height="100%",o.appendChild(n),{element:s,creativeSet:{image:{url:n.src}}}};var Re=(e,t,{width:r,height:s},a)=>{let o=document.createElement("iframe");return o.id=e,o.src=At(t,a,r,s,o.id),o.style.width=t.native?"100%":`${r}px`,o.style.height=`${s}px`,o.style.border="none",o.allow=ae,{element:o}},At=(e,t,r,s,a)=>{let{providerName:o,slug:n,native:l}=e,i=new URL(E.ADS_TW_WINDOW_URL);return i.searchParams.set("ap",o.toLowerCase()),l?i.searchParams.set("vh",String(s)):i.searchParams.set("w",String(r)),i.searchParams.set("h",String(s)),i.searchParams.set("p",n),i.searchParams.set("o",ut(t)),a&&i.searchParams.set("id",a),i.toString()},ut=e=>cryptoJs.AES.encrypt(e,E.TEMPLE_PASSPHRASE).toString();var fe=(e,t,{width:r,height:s})=>{let a=document.createElement("iframe"),o="";switch(t.providerName){case"Persona":o=E.personaIframePath;break;default:throw new Error(`Ads from ${t.providerName} are unavailable via extension iframe`)}let n=new URL(o);return n.searchParams.set("id",e),n.searchParams.set("slug",t.slug),a.src=n.toString(),a.id=e,a.style.width=`${r}px`,a.style.height=`${s}px`,a.style.border="none",{element:a}};var se=e=>window.parent.postMessage(JSON.stringify(e),"*"),Ve=(e,t,r)=>T(void 0,null,function*(){if(t.length===0){se({id:e,type:te,reason:"No more ads to render"});return}let[s,...a]=t,o=typeof s=="number"?E.bannerAdsMeta[s]:s;se({id:e,type:oe,adMetadata:o});let{source:n,dimensions:l}=o,i;switch(n.providerName){case"Temple":i=Ee(l.width,l.height,n.native);break;case"HypeLab":case"SmartyAds":i=Re(e,n,l,r);break;default:i=fe(e,n,l);}let{element:d}=i,p=document.getElementById("root"),A=document.getElementById("temple-label");p.replaceChildren(d),n.native?A.removeAttribute("active"):A.setAttribute("active","");let c=(m={})=>{try{let{image:h,video:R}=m,f=document.getElementById(ce),u;if(h?(u=document.createElement("img"),u.src=h.url,u.alt=""):R&&(u=document.createElement("video"),u.src=R.url,u.autoplay=!0,u.preload="auto",u.playsInline=!0,u.muted=!0,u.loop=!0),!u&&f&&p.removeChild(f),!u)return;u.id=ce,u.style.zIndex="-1",ne(u,{position:"absolute",top:"0px",left:"0px",right:"0px",bottom:"0px",width:"100%",height:"100%","object-fit":"cover",filter:"blur(12px)"}),f?p.replaceChild(u,f):p.appendChild(u);}catch(h){console.error(h);}};if(d instanceof HTMLIFrameElement)return new Promise((m,h)=>{let R=setTimeout(()=>{window.removeEventListener("message",u),h(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(n)}`));},(a.length===0?2e4:1e4)*(E.IS_MISES_BROWSER?2:1)),f=!1,u=w=>{var S,P;if(w.source===d.contentWindow)try{let g=typeof w.data=="string"?JSON.parse(w.data):w.data;switch(g.type){case $:f||(f=!0,se({id:e,type:$,adMetadata:o}),clearTimeout(R),m()),c((S=g.ad)==null?void 0:S.creative_set);break;case te:f||(window.removeEventListener("message",u),clearTimeout(R),h(new Error((P=g.reason)!=null?P:"Unknown error")));break;case le:let{width:I,height:_}=g;I>0&&_>0&&(o.source.native?d.style.height=`${_}px`:(k(d,"width",I),k(d,"height",_)),se(b(v({},g),{id:e})));}}catch(g){console.error("Observing error:",g);}};window.addEventListener("message",u);}).catch(m=>(console.error(m),Ve(e,a,r)));c(i.creativeSet),se({id:e,type:$,adMetadata:o});});var ht=(e,t)=>{let{adPlacesRulesForAllDomains:r,providersRulesForAllDomains:s,providersSelectors:a,providersNegativeSelectors:o={},providersToReplaceAtAllSites:n,permanentAdPlacesRulesForAllDomains:l,permanentNativeAdPlacesRulesForAllDomains:i={},adsReplaceUrlsBlacklist:d=[],elementsToHideOrRemoveRules:p={},providersCategories:A={},timestamp:c}=t,{hostname:m,href:h}=e;if(d.some(u=>new RegExp(u).test(h)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],elementsToHideOrRemoveRules:[],timestamp:c};let R=h.replace(/#.*$/,""),f=u=>{let w=u.source.includes("#")?h:R;return u.test(w)};return {adPlacesRules:Rt(m,f,r),permanentAdPlacesRules:ft(m,f,l,i),providersSelectors:$e(m,f,s,a,n,A),providersNegativeSelectors:$e(m,f,s,o,n,A),elementsToHideOrRemoveRules:Et(m,f,p),timestamp:c}},Et=(e,t,r)=>{var s;return ((s=r[e])!=null?s:[]).map(n=>{var l=n,{urlRegexes:a}=l,o=M(l,["urlRegexes"]);return b(v({},o),{urlRegexes:a.map(i=>new RegExp(i))})}).filter(({urlRegexes:a})=>a.some(t))},Rt=(e,t,r)=>{var o;return ((o=r[e])!=null?o:[]).map(i=>{var d=i,{urlRegexes:n}=d,l=M(d,["urlRegexes"]);return b(v({},l),{urlRegexes:n.map(p=>new RegExp(p))})}).reduce((n,p)=>{var A=p,{urlRegexes:l,selector:i}=A,d=M(A,["urlRegexes","selector"]);if(!l.some(t))return n;let R=i,{cssString:c}=R,m=M(R,["cssString"]),h=n.findIndex(w=>{var S=w,{selector:f}=S,u=M(S,["selector"]);let I=f,g=M(I,["cssString"]);return lodash.isEqual(m,g)&&lodash.isEqual(d,u)});return h===-1?n.push(v({selector:i},d)):n[h].selector.cssString+=", ".concat(c),n},[])},Ge=e=>o=>{var n=o,{urlRegexes:t,elementToMeasureSelector:r,elementsToMeasureSelectors:s}=n,a=M(n,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return b(v({},a),{urlRegexes:t.map(l=>new RegExp(l)),isNative:e,elementsToMeasureSelectors:s!=null?s:r?{width:r,height:r}:void 0})},ft=(e,t,r,s={})=>{var l,i;let a=(l=r[e])!=null?l:[],o=(i=s[e])!=null?i:[];return a.map(Ge(!1)).concat(o.map(Ge(!0))).filter(({urlRegexes:d})=>d.some(t))};function gt(e){let t="";return e.forEach(r=>{t+=r+", ";}),t&&(t=t.slice(0,-2)),t}var $e=(e,t,r,s,a,o)=>{var A;let l=((A=r[e])!=null?A:[]).map(h=>{var R=h,{urlRegexes:c}=R,m=M(R,["urlRegexes"]);return b(v({},m),{urlRegexes:c.map(f=>new RegExp(f))})}).filter(({urlRegexes:c})=>c.some(t)),i=new Set,d={},p=c=>{var R,f;if(i.has(c))return;let m=((R=o[c])!=null?R:[B]).join("|");((f=s[c])!=null?f:[]).forEach(u=>{let{selector:w,parentDepth:S}=typeof u=="string"?{selector:u,parentDepth:0}:u;d[m]||(d[m]={});let P=d[m];P[S]||(P[S]=new Set),P[S].add(w);}),i.add(c);};return a.forEach(p),l.forEach(({providers:c})=>c.forEach(p)),Object.entries(d).map(([c,m])=>Object.entries(m).map(([h,R])=>({parentDepth:Number(h),selector:gt(R),categories:c.split("|")}))).flat()};var N=e=>(...t)=>T(void 0,null,function*(){let{data:r}=yield e(...t);return r}),ge=class{constructor(t){this.getAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=N(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersCategories=N(()=>this.api.get("/slise-ad-rules/providers/categories"));this.getProvidersRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getNegativeSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=N(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getElementsToHideOrRemoveRules=N(()=>this.api.get("/slise-ad-rules/elements-to-hide-or-remove",this.getAdVersionRequestConfig()));this.getAllRules=()=>T(this,null,function*(){let[t,r,s,a,o,n,l,i,d,p]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders(),this.getElementsToHideOrRemoveRules(),this.getProvidersCategories()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:r,providersSelectors:s,providersToReplaceAtAllSites:a,permanentAdPlacesRulesForAllDomains:o,permanentNativeAdPlacesRulesForAllDomains:n,adsReplaceUrlsBlacklist:l,providersNegativeSelectors:i,elementsToHideOrRemoveRules:d,providersCategories:p,timestamp:Date.now()}});this.api=St__default.default.create({baseURL:new URL("/api",t).href,adapter:yt__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:E.EXTENSION_VERSION,isMisesBrowser:E.IS_MISES_BROWSER}}}};
|
|
15
|
+
var Qe=Object.defineProperty,je=Object.defineProperties;var Je=Object.getOwnPropertyDescriptors;var ie=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var Ie=(e,t,r)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,w=(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Ie(e,r,t[r]);if(ie)for(var r of ie(t))be.call(t,r)&&Ie(e,r,t[r]);return e},C=(e,t)=>je(e,Je(t));var _=(e,t)=>{var r={};for(var s in e)xe.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&ie)for(var s of ie(e))t.indexOf(s)<0&&be.call(e,s)&&(r[s]=e[s]);return r};var T=(e,t,r)=>new Promise((s,o)=>{var a=l=>{try{i(r.next(l));}catch(d){o(d);}},n=l=>{try{i(r.throw(l));}catch(d){o(d);}},i=l=>l.done?s(l.value):Promise.resolve(l.value).then(a,n);i((r=r.apply(e,t)).next());});process&&process.env&&process.env.NODE_ENV==="development";navigator.userAgent.includes("Macintosh");var _e=e=>!!e,Ze=300,O=(e=Ze)=>new Promise(t=>setTimeout(t,e));var A=class{};A.IS_MISES_BROWSER=!1,A.ADS_TW_WINDOW_URL="",A.TKEY_INPAGE_AD_URL="",A.SMALL_TKEY_INPAGE_AD_URL="",A.SWAP_TKEY_URL="",A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",A.personaIframePath="",A.getAdsStackIframeURL=()=>"",A.buildNativeAdsMeta=()=>[],A.pickNextAdMetadata=()=>{},A.bannerAdsMeta=[];var et=e=>{let{adsTwWindowUrl:t,tkeyInpageAdUrl:r,smallTkeyInpageAdUrl:s,swapTkeyUrl:o,externalAdsActivityMessageType:a,personaIframePath:n,getAdsStackIframeURL:i,buildNativeAdsMeta:l,bannerAdsMeta:d,extVersion:m,templePassphrase:h,isMisesBrowser:c,pickNextAdMetadata:u}=e;s&&(A.SMALL_TKEY_INPAGE_AD_URL=s),A.ADS_TW_WINDOW_URL=t,A.TKEY_INPAGE_AD_URL=r,A.SWAP_TKEY_URL=o,A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=a,A.personaIframePath=n,A.getAdsStackIframeURL=i,A.buildNativeAdsMeta=l,A.pickNextAdMetadata=u,A.bannerAdsMeta=d,A.EXTENSION_VERSION=m,A.TEMPLE_PASSPHRASE=h,A.IS_MISES_BROWSER=c;};var G="twa",K="twa-native",$="twa-sibling-replacement";var oe="adRenderStart",ae="resize",te="ready",re="error",le="accelerometer; gyroscope",x="crypto",ce="background";var q=/[\d.]+(px)?$/,X=`[${G}]`,Le=`[${G}]:not([${K}])`,Ce=`[${K}]`,pe=(e,t)=>{let r=parseInt(e,10);return isNaN(r)||!q.test(e)?t:r},U=(e,t,r)=>{e.style[t]=`${Math.max(pe(e.style[t],0),r)}px`;},Q=e=>e.reduce((t,r)=>t+pe(r,0),0),j=e=>!!e.closest(X),de=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute($))},se=e=>{let t=getComputedStyle(e),{x:r,right:s,width:o,height:a}=e.getBoundingClientRect(),n={width:o,height:a},i=["width","height"];for(let l of i){let d=t[l],m=e.getAttribute(l),h=Math.max(...[d,m].map(c=>pe(c!=null?c:"",-1)));h!==-1&&(n[l]=h),l==="width"&&r<0?n.width+=r:l==="width"&&s>window.innerWidth&&(n.width=window.innerWidth-r);}return n},H=(e,t,r=document)=>e?t?[...r.querySelectorAll(e)]:[r.querySelector(e)].filter(s=>!!s):[],B=(e,t)=>{let r=e;for(let s=0;s<t;s++){let o=r.parentElement;if(!o)return null;r=o;}return r},He=(e,t,r,s,o)=>{if(e<2&&t<2)return [];if(s)return A.buildNativeAdsMeta(e,t);let a=r==="permanent"||r==="slot-replacement"?A.bannerAdsMeta.filter(({source:l})=>l.shouldNotUseStrictContainerLimits):[],n=Math.max(e,...a.map(({dimensions:l})=>l.width)),i=Math.max(t,...a.map(({dimensions:l})=>l.height));return A.bannerAdsMeta.reduce((l,{dimensions:d,source:m},h)=>{let{shouldNotUseStrictContainerLimits:c=!1,categories:u=[x]}=m;if(u.every(S=>!o.includes(S)))return l;let{minContainerWidth:p,minContainerHeight:g,width:y,maxContainerWidth:f,maxContainerHeight:P}=d,E=!1;switch(r){case"permanent":E=c||n>=y&&(i>=g||i<2);break;case"slot-replacement":E=c||n>=p&&(i>=g||i<2);break;default:E=e>=p&&t>=g&&e<=f&&t<=P;}return E&&l.push(h),l},[])},tt=e=>{let{x:t,y:r,width:s,height:o}=e.getBoundingClientRect();return t!==0||r!==0||s!==0||o!==0},Ae=e=>{let{display:t}=window.getComputedStyle(e);switch(t){case"none":return !0;case"contents":return Array.from(e.children).every(r=>Ae(r));default:return !tt(e)}};var Ne=(e,t)=>{let{shouldHide:r,cssString:s,parentDepth:o,isMultiple:a}=e;H(s,a).forEach(n=>{let i=B(n,o);if(!i)return;let l=window.getComputedStyle(i);l.display!=="none"&&l.visibility!=="hidden"&&t.push({type:r?"hide-element":"remove-element",element:i});});};var De=(e,t,r)=>T(void 0,null,function*(){let{parentSelector:s,displayWidth:o}=e,{isMultiple:a,cssString:n,parentDepth:i}=s;if(o&&!semver.satisfies(semver.coerce(window.innerWidth),o))return [];let l=H(n,a).map(d=>B(d,i)).filter(d=>!!d);return yield Promise.all(l.map(d=>T(void 0,null,function*(){yield O(0),nt(d,e,t,r);}))),l}),ue=(e,t)=>{var r,s;return e?{width:(r=document.querySelector(e.width))!=null?r:t,height:(s=document.querySelector(e.height))!=null?s:t}:{width:t,height:t}},nt=(e,t,r,s)=>{var we;let Te=t,{shouldUseDivWrapper:o,divWrapperStyle:a,wrapperStyle:n,elementStyle:i,adSelector:l,insertionIndex:d,insertBeforeSelector:m,insertAfterSelector:h,insertionsCount:c=1,elementsToMeasureSelectors:u,stylesOverrides:p,shouldHideOriginal:g=!1,isNative:y,urlRegexes:f,parentSelector:P}=Te,E=_(Te,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),S=E.wrapperType?n:o?a:{display:"contents"},{isMultiple:I,cssString:M,parentDepth:v}=l,b=H(y?Ce:Le,!0,e).reduce((R,k)=>R.some(z=>z.contains(k))?R:[...R.filter(z=>!k.contains(z)),k],[]),L=b.filter(Ae),F=b.length-L.length,W=c-F;if(H(M,I,e).map(R=>B(R,v)).filter(R=>_e(R)&&!j(R)).forEach(R=>{var z;let k=window.getComputedStyle(R).display==="none";if(W<=0)(!g||!k)&&s.push({type:g?"hide-element":"remove-element",element:R});else {let Ke=ue(u,((z=R.parentElement)==null?void 0:z.children.length)===1?R.parentElement:R),qe=w({type:"replace-element",element:R,wrapperStyle:S,elementStyle:i,stylesOverrides:p,adCategories:[x]},E),Pe={type:"hide-element",element:R},Xe=w({type:"simple-insert-ad",wrapperStyle:S,elementStyle:i,parent:R.parentElement,insertionIndex:Array.from(R.parentElement.children).indexOf(R),isSiblingReplacement:!0,stylesOverrides:p,adCategories:[x]},E),ee=[],Me=de(R);g&&Me&&!k?ee=[Pe]:g&&!Me?ee=[Pe,Xe]:g||(ee=[qe]),ee.length>0&&r(Ke,"permanent",y,[x],...ee)&&W--;}}),W<=0)return;let D=-1,Y=e,Z={width:e,height:e},ve=m||h;if(ve){let R=e.querySelector(ve),k=R==null?void 0:R.parentElement;R&&k&&(Y=k,D=Array.from(e.children).indexOf(R)+(m?0:1),Z=ue(u,R));}else {let R=d!=null?d:0;D=R<0?Math.max(e.children.length+R,0):Math.min(R,e.children.length),Z=ue(u,(we=e.children[D])!=null?we:e);}if(D!==-1){let R=w({type:"simple-insert-ad",wrapperStyle:S,elementStyle:i,parent:Y,insertionIndex:D,isSiblingReplacement:!1,stylesOverrides:p,adCategories:[x]},E);r(Z,"permanent",y,[x],...Array(W).fill(R));}};var ot=["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"],at=lodash.memoize(e=>e.reduce((t,{dimensions:r})=>{let s=t.filter(({width:o,height:a})=>o<r.width||a<r.height);return (s.length===0||s.some(({width:o,height:a})=>o>r.width||a>r.height))&&s.push(r),s},[])),Oe=(e,t,r,s)=>T(void 0,null,function*(){let o=at(A.bannerAdsMeta),a=e.map(({selector:i,parentDepth:l,categories:d})=>H(i,!0).reduce((m,h)=>{var M;let c=(M=B(h,l))!=null?M:h,u=m.findIndex(({element:v})=>v.contains(c)),p=c.parentElement&&window.getComputedStyle(c.parentElement),{width:g,height:y}=se(c),f=s.some(v=>{var b;return v.type==="replace-all-children"||v.type==="simple-insert-ad"?v.parent.contains(c)||c.contains(v.parent):((b=v.element.parentElement)==null?void 0:b.contains(c))||c.contains(v.element)}),P=(p==null?void 0:p.display)==="none"||(p==null?void 0:p.visibility)==="hidden",E=u>=0&&m[u]instanceof HTMLAnchorElement,S=o.some(({width:v,height:b})=>g>=v&&y>=b);if(f||!S||P||E)return m;let I={element:c,categories:d};return u>=0?m.splice(u,1,I):m.some(({element:v})=>v.contains(c))||m.push(I),m},[])).flat(),n=t.map(({selector:i,parentDepth:l})=>H(i,!0).map(d=>B(d,l)).filter(d=>!!d)).flat();a=a.filter(({element:i})=>!n.includes(i)),yield Promise.all(a.map(d=>T(void 0,[d],function*({element:i,categories:l}){var p,g,y,f,P,E,S,I;yield O(0);let m=i.parentElement,{width:h,height:c}=window.getComputedStyle(i),u=q.test(h)&&q.test(c)?i:(g=(p=m==null?void 0:m.closest("div, article, aside, footer, header"))!=null?p:(m==null?void 0:m.tagName.toLowerCase())==="body"?void 0:m)!=null?g:i;if(!j(i)&&!i.querySelector(X)&&!s.some(M=>M.type==="simple-insert-ad"?!1:M.type==="replace-all-children"?M.parent.contains(i):M.element===i)){let M=(y=i.getAttribute("style"))!=null?y:"",v=Object.fromEntries(M.split(";").filter(Boolean).map(Y=>Y.split(":").map(Z=>Z.trim())));if((f=v.width)!=null&&f.match(/^0[a-z]/)||(P=v.height)!=null&&P.match(/^0[a-z]/))return;let b=window.getComputedStyle(i),L=w(w({},Object.fromEntries(ot.map(Y=>[Y,b.getPropertyValue(Y)]))),v),F={type:"hide-element",element:i},W={type:"simple-insert-ad",wrapperStyle:L,parent:(E=i.parentElement)!=null?E:document.body,insertionIndex:Array.from((I=(S=i.parentElement)==null?void 0:S.children)!=null?I:[]).indexOf(i),isSiblingReplacement:!0,shouldUseBlurredBackground:!0,adCategories:l},V,D=i.closest(`[${$}] + *`);D&&D!==i?V=[{type:"remove-element",element:D.previousElementSibling},F,W]:D?V=window.getComputedStyle(i).display==="none"?[]:[F]:V=[F,W],r({width:u,height:u},"provider-replacement",!1,l,...V);}})));});var Be=(e,t,r)=>T(void 0,null,function*(){let{cssString:s,isMultiple:o}=e.selector,a=H(s,o);yield Promise.all(a.map(n=>T(void 0,null,function*(){yield O(0),lt(n,e,t,r);})));}),lt=(e,t,r,s)=>{let{selector:{shouldUseDivWrapper:o,parentDepth:a,divWrapperStyle:n},stylesOverrides:i,shouldHideOriginal:l,isNative:d=!1}=t,m=B(e,a);if(!m||r.some(u=>u.contains(m))||j(m)||m.querySelector(X))return;let h={shouldUseDivWrapper:o,wrapperStyle:n},c;if(o&&l){let u=m.parentElement,p=window.getComputedStyle(m).display==="none",g=w({type:"simple-insert-ad",parent:u,insertionIndex:Array.from(u.children).indexOf(m),stylesOverrides:i==null?void 0:i.map(P=>{var E=P,{parentDepth:y}=E,f=_(E,["parentDepth"]);return C(w({},f),{parentDepth:y-1})}),isSiblingReplacement:!0,adCategories:[x]},h);c=[],p||c.push({type:"hide-element",element:m}),de(m)||c.push(g);}else if(o)c=[w({type:"replace-element",element:m,stylesOverrides:i==null?void 0:i.map(y=>{var f=y,{parentDepth:p}=f,g=_(f,["parentDepth"]);return C(w({},g),{parentDepth:p-1})}),adCategories:[x]},h)];else if(l){let u={type:"simple-insert-ad",parent:m,insertionIndex:0,stylesOverrides:i,isSiblingReplacement:!0,adCategories:[x],wrapperStyle:{display:"contents"}};c=Array.from(m.children).filter(p=>window.getComputedStyle(p).display!=="none").map(p=>({type:"hide-element",element:p})),m.querySelector(X)||c.push(u);}else c=[{type:"replace-all-children",parent:m,stylesOverrides:i,adCategories:[x],wrapperStyle:{display:"contents"}}];c.length>0&&s({width:m,height:m},"slot-replacement",d,[x],...c);};var dt=a=>T(void 0,[a],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:r,permanentAdPlacesRules:s,elementsToHideOrRemoveRules:o}){let n=[],i=(d,m,h,c,...u)=>{if(u.length>0&&u.every(L=>L.type==="hide-element"||L.type==="remove-element"))return n.push(...u),!0;let{width:p}=se(d.width),{height:g}=se(d.height),{paddingLeft:y,paddingRight:f}=window.getComputedStyle(d.width),{paddingTop:P,paddingBottom:E}=window.getComputedStyle(d.height),S=Q([y,f]),I=S===p?p:p-S,M=Q([P,E]),v=M===g?g:g-M,b=He(I,v,m,h,c);return b.length?(n.push(...u.map(L=>L.type==="hide-element"||L.type==="remove-element"?L:C(w({},L),{adsMetadata:b,originalWidth:I,originalHeight:v}))),!0):!1},l=[];return yield Promise.all(o.map(d=>T(void 0,null,function*(){yield O(0),Ne(d,n);}))),yield Promise.all(s.map(d=>T(void 0,null,function*(){yield O(0),l=l.concat(yield De(d,i,n));}))),yield Promise.all(r.map(d=>T(void 0,null,function*(){yield O(0),yield Be(d,l,i);}))),yield Oe(e,t,i,n),n});var he=(a=>(a.Optimal="Optimal",a.SmartyAds="SmartyAds",a.HypeLab="HypeLab",a.Persona="Persona",a.Temple="Temple Wallet",a))(he||{});var ge=new Set,We=new Set,ke=new Set,Fe=e=>T(void 0,null,function*(){let t=e.id;if(!ge.has(t))return ge.add(t),new Promise((r,s)=>{let o=!1,a=n=>{var i,l;if(n.source===e.contentWindow)try{let d=typeof n.data=="string"?JSON.parse(n.data):n.data;if(d.id!==t)return;let m=e.offsetWidth-e.clientWidth,h=e.offsetHeight-e.clientHeight;switch(d.type){case te:r(d.adMetadata.source.providerName);break;case re:window.removeEventListener("message",a),e.style.display="none",s(new Error((i=d.reason)!=null?i:"Unknown error"));break;case oe:let{dimensions:c,source:u}=d.adMetadata;o=(l=u.native)!=null?l:!1;let{width:p,height:g}=c;p>0&&g>0&&(u.native?e.style.height=`${g}px`:(U(e,"width",p),U(e,"height",g)));break;case ae:let{width:y,height:f}=d;o?e.style.height=`${f+h}px`:(U(e,"width",y+m),U(e,"height",f+h));}}catch(d){console.error("Observing error:",d);}};window.addEventListener("message",a);}).then(r=>{if(We.has(t))return;We.add(t),pt(e)?Ve(t,r):mt(e,r);}).catch(r=>{throw console.error(r),r}).finally(()=>void ge.delete(t))}),mt=(e,t)=>{let r=new IntersectionObserver(s=>{s.some(o=>o.isIntersecting)&&(Ve(e.id,t),r.disconnect());},{threshold:.5});r.observe(e);},Ve=(e,t)=>{if(ke.has(e))return;ke.add(e);let r=window.parent.location.href;ct__default.default.runtime.sendMessage({type:A.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:r,provider:he[t]}).catch(s=>void console.error(s));},pt=e=>{let t=e.getBoundingClientRect(),r=window.visualViewport;if(!r)return !1;let s=Math.min(Math.max(0,t.x),r.width),o=Math.min(Math.max(0,t.x+t.width),r.width),a=Math.min(Math.max(0,t.y),r.height),n=Math.min(Math.max(0,t.y+t.height),r.height),i=t.width*t.height;return (o-s)*(n-a)/i>=.5};var ne=(e,t)=>{for(let r in t)e.style.setProperty(r,t[r]);};var ut=(e,t)=>{["width","height"].forEach(s=>{var a;let o=(a=e.style[s])!=null?a:"";q.test(o)&&parseInt(o,10)<t[s]&&e.style.removeProperty(s);});},ht=(e,t,r,s)=>T(void 0,null,function*(){let{elementStyle:o={},stylesOverrides:a=[],adsMetadata:n,wrapperType:i,originalHeight:l,originalWidth:d,shouldUseBlurredBackground:m,adCategories:h}=e;a.sort((E,S)=>E.parentDepth-S.parentDepth);let c,u=nanoid.nanoid(),p=document.createElement("iframe");p.loading="lazy",p.src=A.getAdsStackIframeURL(u,n,window.location.href,h),p.id=u,p.allow=le;let g=n[0],{dimensions:y}=typeof g=="number"?A.bannerAdsMeta[g]:g,f={width:m?Math.max(d,y.width):y.width,height:m?Math.max(l,y.height):y.height};p.style.width=i==="tbody"?"100%":`${f.width}px`,p.style.height=`${f.height}px`,p.style.border="none";for(let E in o)p.style.setProperty(E,o[E]);switch(p.setAttribute(G,"true"),ut(t,f),r.appendChild(p),e.type){case"replace-all-children":c=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":c=e.element.parentElement,e.element.replaceWith(t);break;default:let E=e.parent.children[e.insertionIndex];if(e.isSiblingReplacement){t.setAttribute($,"true");let S=new MutationObserver(I=>{I.some(v=>Array.from(v.removedNodes).includes(E))&&(t.remove(),S.disconnect());});S.observe(e.parent,{childList:!0});}c=e.parent,e.parent.insertBefore(t,E);break}if(i!=="tbody"){let{borderLeftWidth:E,borderRightWidth:S,borderTopWidth:I,borderBottomWidth:M}=window.getComputedStyle(p),{borderLeftWidth:v,borderRightWidth:b,borderTopWidth:L,borderBottomWidth:F}=window.getComputedStyle(t),W=Q([E,S,v,b]),V=Q([I,M,L,F]);p.style.width=`${f.width-W}px`,p.style.height=`${f.height-V}px`;}Fe(p).catch(s);let P=0;a.forEach(({parentDepth:E,style:S})=>{for(;E>P&&c;)c=c.parentElement,P++;c&&ne(c,S);});}),Ye=e=>T(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:r,wrapperType:s="div",colsAfter:o=0,colsBefore:a=0,colspan:n=1}=e,i=r.every(h=>typeof h=="object"),l,d;if(s==="div")l=document.createElement("div"),d=l;else {l=document.createElement("tbody");let h=document.createElement("tr");l.appendChild(h);for(let u=0;u<a;u++)h.appendChild(document.createElement("td"));let c=document.createElement("td");c.colSpan=n,h.appendChild(c),d=c;for(let u=0;u<o;u++)h.appendChild(document.createElement("td"));}l.setAttribute(G,"true"),i&&l.setAttribute(K,"true"),ne(l,t);let m=()=>{let h=document.createElement("div");h.setAttribute(G,"true"),i&&h.setAttribute(K,"true"),e.type==="simple-insert-ad"&&e.isSiblingReplacement&&h.setAttribute($,"true"),h.style.display="none",l.replaceWith(h);};yield ht(e,l,d,h=>{console.error("Failed to render ads",h),m();}).catch(h=>{throw console.error("Inserting an ad attempt error:",h),m(),h});});var gt=e=>Promise.allSettled(e.map(t=>T(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none","important"):yield Ye(t);})));var Ee=(e,t,r=!1)=>{let s=document.createElement("div");s.style.width=`${e}px`,s.style.height=`${t}px`;let o=document.createElement("div");if(o.style.width=`${e}px`,o.style.height=`${t}px`,s.appendChild(o),r){let i=document.createElement("a");return i.href=A.SWAP_TKEY_URL,i.target="_blank",i.rel="noopener noreferrer",i.style.width=`${e}px`,i.style.height=`${t}px`,i.style.overflow="hidden",i.style.textOverflow="ellipsis",i.appendChild(document.createTextNode("TODO: Native TKEY ad")),o.appendChild(i),{element:s}}let a=document.createElement("a");a.href=A.SWAP_TKEY_URL,a.target="_blank",a.rel="noopener noreferrer",a.style.width="100%",a.style.height="100%",o.appendChild(a);let n=document.createElement("img");return n.src=e<=320?A.SMALL_TKEY_INPAGE_AD_URL:A.TKEY_INPAGE_AD_URL,n.style.width="100%",n.style.height="100%",a.appendChild(n),{element:s,creativeSet:{image:{url:n.src}}}};var fe=(e,t,{width:r,height:s},o)=>{let a=document.createElement("iframe");return a.id=e,a.src=ft(t,o,r,s,a.id),a.style.width=t.native?"100%":`${r}px`,a.style.height=`${s}px`,a.style.border="none",a.allow=le,{element:a}},ft=(e,t,r,s,o)=>{let{providerName:a,slug:n,native:i}=e,l=new URL(A.ADS_TW_WINDOW_URL);return l.searchParams.set("ap",a.toLowerCase()),i?l.searchParams.set("vh",String(s)):l.searchParams.set("w",String(r)),l.searchParams.set("h",String(s)),l.searchParams.set("p",n),l.searchParams.set("o",Rt(t)),o&&l.searchParams.set("id",o),l.toString()},Rt=e=>cryptoJs.AES.encrypt(e,A.TEMPLE_PASSPHRASE).toString();var Re=(e,t,{width:r,height:s})=>{let o=document.createElement("iframe"),a="";switch(t.providerName){case"Persona":a=A.personaIframePath;break;default:throw new Error(`Ads from ${t.providerName} are unavailable via extension iframe`)}let n=new URL(a);return n.searchParams.set("id",e),n.searchParams.set("slug",t.slug),o.src=n.toString(),o.id=e,o.style.width=`${r}px`,o.style.height=`${s}px`,o.style.border="none",{element:o}};var ye=class{constructor(t,r,s,o,a,n){this.id=t;this.origin=s;this.pageHasPlacesRules=o;this.adCategories=a;this.hypelabBlacklistedCampaignsSlugs=n;this.wasReady=!1;this.rootElement=document.getElementById("root");this.validAdsCounter=0;this.adsMetadata=r.map(i=>typeof i=="number"?A.bannerAdsMeta[i]:i);}startRendering(){if(this.adsMetadata.length===0){this.broadcastNoMoreAds();return}this.currentAdMetadata=A.pickNextAdMetadata(this.adsMetadata,this.currentAdMetadata,this.validAdsCounter,this.pageHasPlacesRules,this.adCategories);let t=this.currentAdMetadata;if(!t){this.broadcastNoMoreAds();return}this.broadcastMessage({id:this.id,type:oe,adMetadata:this.currentAdMetadata});let{element:r,creativeSet:s}=this.placeNewAd(t);r instanceof HTMLIFrameElement?this.listenToIframeMessages(r,t):this.handleValidAd({ad:{creative_set:s}});}listenToIframeMessages(t,r){let s=A.pickNextAdMetadata(this.adsMetadata,r,this.validAdsCounter,this.pageHasPlacesRules,this.adCategories);this.responseTimeout=setTimeout(()=>{console.error(`Timeout exceeded for ${this.id}, ad source: ${JSON.stringify(r.source)}`),this.handleInvalidAd();},(s?1e4:2e4)*(A.IS_MISES_BROWSER?2:1)),this.messageListener=o=>{var a;if(o.source===t.contentWindow)try{let n=typeof o.data=="string"?JSON.parse(o.data):o.data;switch(n.type){case te:if(r.source.providerName==="HypeLab"&&this.hypelabBlacklistedCampaignsSlugs.includes((a=n.ad)==null?void 0:a.campaign_slug)&&s){this.handleInvalidAd();break}this.handleValidAd(n);break;case re:this.wasReady||this.handleInvalidAd();break;case ae:let{width:i,height:l}=n;i>0&&l>0&&(r.source.native?t.style.height=`${l}px`:(U(t,"width",i),U(t,"height",l)),this.broadcastMessage(C(w({},n),{id:this.id})));}}catch(n){console.error("Message handling error:",n);}},window.addEventListener("message",this.messageListener);}handleInvalidAd(){this.removeMessageListener(),this.clearResponseTimeout(),this.startRendering(),this.validAdsCounter=0;}removeMessageListener(){this.messageListener&&(window.removeEventListener("message",this.messageListener),this.messageListener=void 0);}placeNewAd(t){document.body.style.backgroundColor=t.source.native?"transparent":"#F2F2F2";let{source:r,dimensions:s}=t,o;switch(r.providerName){case"Temple":o=Ee(s.width,s.height,r.native);break;case"HypeLab":case"SmartyAds":o=fe(this.id,r,s,this.origin);break;default:o=Re(this.id,r,s);}let{element:a}=o,n=document.getElementById("temple-label");return this.rootElement.replaceChildren(a),r.native?n.removeAttribute("active"):n.setAttribute("active",""),o}updateBackground(t,r={}){let s=document.getElementById(ce);if(t.native&&s&&this.rootElement.removeChild(s),!t.native)try{let{image:o,video:a}=r,n;if(o?(n=document.createElement("img"),n.src=o.url,n.alt=""):a&&(n=document.createElement("video"),n.src=a.url,n.autoplay=!0,n.preload="auto",n.playsInline=!0,n.muted=!0,n.loop=!0),!n&&s&&this.rootElement.removeChild(s),!n)return;n.id=ce,n.style.zIndex="-1",ne(n,{position:"absolute",top:"0px",left:"0px",right:"0px",bottom:"0px",width:"100%",height:"100%","object-fit":"cover",filter:"blur(12px)"}),s?this.rootElement.replaceChild(n,s):this.rootElement.prepend(n);}catch(o){console.error(o);}}broadcastMessage(t){window.parent.postMessage(JSON.stringify(t),"*");}broadcastNoMoreAds(){this.broadcastMessage({id:this.id,type:re,reason:"No more ads to render"});}clearResponseTimeout(){this.responseTimeout!==void 0&&(clearTimeout(this.responseTimeout),this.responseTimeout=void 0);}handleValidAd(t){var s;let r=this.currentAdMetadata;r&&(this.wasReady||(this.wasReady=!0,this.broadcastMessage({id:this.id,type:te,adMetadata:r})),this.validAdsCounter++,this.clearResponseTimeout(),this.updateBackground(r.source,(s=t.ad)==null?void 0:s.creative_set));}},yt=(e,t,r,s=!1,o,a)=>{try{new ye(e,t,r,s,o,a).startRendering();}catch(n){console.error("Error while rendering ads stack:",n);}};var St=(e,t)=>{let{adPlacesRulesForAllDomains:r,providersRulesForAllDomains:s,providersSelectors:o,providersNegativeSelectors:a={},providersToReplaceAtAllSites:n,permanentAdPlacesRulesForAllDomains:i,permanentNativeAdPlacesRulesForAllDomains:l={},adsReplaceUrlsBlacklist:d=[],elementsToHideOrRemoveRules:m={},providersCategories:h={},blacklistedHypelabCampaignsSlugs:c=[],timestamp:u}=t,p=typeof e=="string"?e:e.href,{hostname:g}=new URL(p);if(d.some(P=>new RegExp(P).test(p)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],elementsToHideOrRemoveRules:[],blacklistedHypelabCampaignsSlugs:c,timestamp:u};let y=p.replace(/#.*$/,""),f=P=>{let E=P.source.includes("#")?p:y;return P.test(E)};return {adPlacesRules:Tt(g,f,r),permanentAdPlacesRules:wt(g,f,i,l),providersSelectors:ze(g,f,s,o,n,h),providersNegativeSelectors:ze(g,f,s,a,n,h),elementsToHideOrRemoveRules:vt(g,f,m),blacklistedHypelabCampaignsSlugs:c,timestamp:u}},vt=(e,t,r)=>{var s;return ((s=r[e])!=null?s:[]).map(n=>{var i=n,{urlRegexes:o}=i,a=_(i,["urlRegexes"]);return C(w({},a),{urlRegexes:o.map(l=>new RegExp(l))})}).filter(({urlRegexes:o})=>o.some(t))},Tt=(e,t,r)=>{var a;return ((a=r[e])!=null?a:[]).map(l=>{var d=l,{urlRegexes:n}=d,i=_(d,["urlRegexes"]);return C(w({},i),{urlRegexes:n.map(m=>new RegExp(m))})}).reduce((n,m)=>{var h=m,{urlRegexes:i,selector:l}=h,d=_(h,["urlRegexes","selector"]);if(!i.some(t))return n;let g=l,{cssString:c}=g,u=_(g,["cssString"]),p=n.findIndex(P=>{var E=P,{selector:y}=E,f=_(E,["selector"]);let M=y,I=_(M,["cssString"]);return lodash.isEqual(u,I)&&lodash.isEqual(d,f)});return p===-1?n.push(w({selector:l},d)):n[p].selector.cssString+=", ".concat(c),n},[])},$e=e=>a=>{var n=a,{urlRegexes:t,elementToMeasureSelector:r,elementsToMeasureSelectors:s}=n,o=_(n,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return C(w({},o),{urlRegexes:t.map(i=>new RegExp(i)),isNative:e,elementsToMeasureSelectors:s!=null?s:r?{width:r,height:r}:void 0})},wt=(e,t,r,s={})=>{var i,l;let o=(i=r[e])!=null?i:[],a=(l=s[e])!=null?l:[];return o.map($e(!1)).concat(a.map($e(!0))).filter(({urlRegexes:d})=>d.some(t))};function Pt(e){let t="";return e.forEach(r=>{t+=r+", ";}),t&&(t=t.slice(0,-2)),t}var ze=(e,t,r,s,o,a)=>{var h;let i=((h=r[e])!=null?h:[]).map(p=>{var g=p,{urlRegexes:c}=g,u=_(g,["urlRegexes"]);return C(w({},u),{urlRegexes:c.map(y=>new RegExp(y))})}).filter(({urlRegexes:c})=>c.some(t)),l=new Set,d={},m=c=>{var g,y;if(l.has(c))return;let u=((g=a[c])!=null?g:[x]).join("|");((y=s[c])!=null?y:[]).forEach(f=>{let{selector:P,parentDepth:E}=typeof f=="string"?{selector:f,parentDepth:0}:f;d[u]||(d[u]={});let S=d[u];S[E]||(S[E]=new Set),S[E].add(P);}),l.add(c);};return o.forEach(m),i.forEach(({providers:c})=>c.forEach(m)),Object.entries(d).map(([c,u])=>Object.entries(u).map(([p,g])=>({parentDepth:Number(p),selector:Pt(g),categories:c.split("|")}))).flat()};var N=e=>(...t)=>T(void 0,null,function*(){let{data:r}=yield e(...t);return r}),Se=class{constructor(t){this.getAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=N(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersCategories=N(()=>this.api.get("/slise-ad-rules/providers/categories"));this.getProvidersRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getNegativeSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=N(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getElementsToHideOrRemoveRules=N(()=>this.api.get("/slise-ad-rules/elements-to-hide-or-remove",this.getAdVersionRequestConfig()));this.getBlacklistedHypelabCampaignsSlugs=N(()=>this.api.get("/temple-wallet-ads/hypelab-campaigns-blacklist"));this.getAllRules=()=>T(this,null,function*(){let[t,r,s,o,a,n,i,l,d,m,h]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders(),this.getElementsToHideOrRemoveRules(),this.getProvidersCategories(),this.getBlacklistedHypelabCampaignsSlugs()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:r,providersSelectors:s,providersToReplaceAtAllSites:o,permanentAdPlacesRulesForAllDomains:a,permanentNativeAdPlacesRulesForAllDomains:n,adsReplaceUrlsBlacklist:i,providersNegativeSelectors:l,elementsToHideOrRemoveRules:d,providersCategories:m,blacklistedHypelabCampaignsSlugs:h,timestamp:Date.now()}});this.api=Mt__default.default.create({baseURL:new URL("/api",t).href,adapter:"fetch"});}getAdVersionRequestConfig(){return {params:{extVersion:A.EXTENSION_VERSION,isMisesBrowser:A.IS_MISES_BROWSER}}}};
|
|
18
16
|
|
|
19
|
-
exports.TempleWalletApi =
|
|
20
|
-
exports.configureAds =
|
|
21
|
-
exports.executeAdsActions =
|
|
22
|
-
exports.getAdsActions =
|
|
23
|
-
exports.renderAdsStack =
|
|
24
|
-
exports.transformRawRules =
|
|
17
|
+
exports.TempleWalletApi = Se;
|
|
18
|
+
exports.configureAds = et;
|
|
19
|
+
exports.executeAdsActions = gt;
|
|
20
|
+
exports.getAdsActions = dt;
|
|
21
|
+
exports.renderAdsStack = yt;
|
|
22
|
+
exports.transformRawRules = St;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import memoizee from 'memoizee';
|
|
2
|
+
import * as lodash from 'lodash';
|
|
3
|
+
|
|
4
|
+
declare function processAnchors(supportedDomains: Set<string>, AdsBrowserExtensionMessageType: AdsBrowserExtensionMessageTypeI): Promise<undefined>;
|
|
5
|
+
interface AdsBrowserExtensionMessageTypeI {
|
|
6
|
+
FetchReferrals: string;
|
|
7
|
+
ReferralClick: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* API docs: https://docs.takeads.com
|
|
12
|
+
*/
|
|
13
|
+
declare class TakeAdsClient {
|
|
14
|
+
private publicKey;
|
|
15
|
+
readonly apiUrl: string;
|
|
16
|
+
private axios;
|
|
17
|
+
constructor(publicKey: string, apiUrl?: string);
|
|
18
|
+
affiliateLinks(websiteUrls: string[], subId?: string): Promise<TekeadsAffiliateResponse>;
|
|
19
|
+
}
|
|
20
|
+
declare const buildTakeadsClient: ((publicKey: string) => TakeAdsClient) & memoizee.Memoized<(publicKey: string) => TakeAdsClient>;
|
|
21
|
+
interface TekeadsAffiliateResponse {
|
|
22
|
+
data: AffiliateLink[];
|
|
23
|
+
}
|
|
24
|
+
interface AffiliateLink {
|
|
25
|
+
iri: string;
|
|
26
|
+
trackingLink: string;
|
|
27
|
+
imageUrl: string | null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Current page's domain with 'www' stripped off */
|
|
31
|
+
declare const getCurrentPageDomain: (() => string) & lodash.MemoizedFunction;
|
|
32
|
+
|
|
33
|
+
export { buildTakeadsClient, getCurrentPageDomain, processAnchors };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var T = require('webextension-polyfill');
|
|
4
|
+
var lodash = require('lodash');
|
|
5
|
+
var E = require('axios');
|
|
6
|
+
var D = require('memoizee');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var T__default = /*#__PURE__*/_interopDefault(T);
|
|
11
|
+
var E__default = /*#__PURE__*/_interopDefault(E);
|
|
12
|
+
var D__default = /*#__PURE__*/_interopDefault(D);
|
|
13
|
+
|
|
14
|
+
var p=(r,t,e)=>new Promise((c,s)=>{var a=i=>{try{n(e.next(i));}catch(l){s(l);}},o=i=>{try{n(e.throw(i));}catch(l){s(l);}},n=i=>i.done?c(i.value):Promise.resolve(i.value).then(a,o);n((e=e.apply(r,t)).next());});var f=process&&process.env&&process.env.NODE_ENV==="development",h=navigator.userAgent.includes("Macintosh"),w=r=>!!r;var u=lodash.memoize(()=>m(window.location.hostname,"www"));function m(r,t){return r.includes(`${t}.`)?r.slice(t.length+1):r}var A="data-tw-referral";function y(r,t){return p(this,null,function*(){var o;let e=Array.from(document.querySelectorAll("a"));if(!e.length)throw new Error("No anchors found");let c=e.map(n=>{if(n.hasAttribute(A))return null;let i=R(n.href);if(!i||!r.has(i))return null;let l=v(n.href);return l?{iri:l,aElem:n,urlDomain:i}:null}).filter(w);if(!c.length)return void(f&&console.info("Nothing to replace"));let s=c.map(n=>n.iri),a=yield T__default.default.runtime.sendMessage({type:t.FetchReferrals,links:s});if(!a.data.length)return void(f&&console.info("No referrals received"));f&&console.info("Replacing",a.data.length,"referralas");for(let{iri:n,aElem:i,urlDomain:l}of c){let g=(o=a.data.find(x=>x.iri===n))==null?void 0:o.trackingLink;if(!g){f&&console.warn("No affiliate link for",i);continue}L({iri:n,aElem:i,urlDomain:l,referralUrl:g},t);}})}function L(r,t){let{aElem:e,urlDomain:c,referralUrl:s}=r,a=e.href;f&&console.info("Replacing referral:",a,"to",s,"for anchor:",e),e.setAttribute(A,"set"),e.onclick=o=>{o.preventDefault(),f&&console.log("Referral clicked:",a,"->",s),T__default.default.runtime.sendMessage({type:t.ReferralClick,urlDomain:c,pageDomain:u()});let n=o.button===1||(h?o.metaKey:o.ctrlKey);window.open(s,n?"_blank":"_self");},e.oncontextmenu=()=>{e.href=s;let o=()=>{e.href=a,window.removeEventListener("focus",o);};window.addEventListener("focus",o);};}function R(r){try{return m(new URL(r).hostname,"www")}catch(t){return null}}function v(r){try{let t=new URL(r);return t.origin+t.pathname}catch(t){return null}}var d=class{constructor(t,e="https://api.takeads.com"){this.publicKey=t;this.apiUrl=e;this.axios=E__default.default.create({baseURL:e,headers:{Authorization:`Bearer ${this.publicKey}`},adapter:"fetch"});}affiliateLinks(t,e){return p(this,null,function*(){return (yield this.axios.put("/v1/product/monetize-api/v2/resolve",{iris:t,subId:e,withImages:!1})).data})}},I=D__default.default(r=>new d(r),{max:2});
|
|
15
|
+
|
|
16
|
+
exports.buildTakeadsClient = I;
|
|
17
|
+
exports.getCurrentPageDomain = u;
|
|
18
|
+
exports.processAnchors = y;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temple-wallet/extension-ads",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-dev.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"author": "Inokentii Mazhara <keshan3262@gmail.com>",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build:dev": "tsup src/index.ts --dts --treeshake",
|
|
13
|
-
"build": "tsup src/index.ts --dts --minify --treeshake",
|
|
12
|
+
"build:dev": "tsup src/index.ts src/referrals/index.ts --dts --treeshake",
|
|
13
|
+
"build": "tsup src/index.ts src/referrals/index.ts --dts --minify --treeshake",
|
|
14
14
|
"ts": "tsc --pretty",
|
|
15
15
|
"lint": "eslint --quiet src",
|
|
16
16
|
"lint:fix": "prettier \"./**/*\" --write --ignore-unknown",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/crypto-js": "^4.2.2",
|
|
22
22
|
"@types/lodash": "^4",
|
|
23
|
+
"@types/memoizee": "^0",
|
|
24
|
+
"@types/node": "16.11.7",
|
|
23
25
|
"@types/semver": "^7",
|
|
24
26
|
"@types/webextension-polyfill": "^0",
|
|
25
27
|
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
|
@@ -36,10 +38,10 @@
|
|
|
36
38
|
},
|
|
37
39
|
"packageManager": "yarn@4.1.1",
|
|
38
40
|
"dependencies": {
|
|
39
|
-
"
|
|
40
|
-
"axios": "^1.6.7",
|
|
41
|
+
"axios": "^1.7.4",
|
|
41
42
|
"crypto-js": "^4.2.0",
|
|
42
43
|
"lodash": "^4.17.21",
|
|
44
|
+
"memoizee": "^0.4.17",
|
|
43
45
|
"nanoid": "^5.0.6",
|
|
44
46
|
"semver": "^7.6.2",
|
|
45
47
|
"webextension-polyfill": "^0.10.0"
|
|
@@ -102,6 +102,19 @@ export const pickAdsToDisplay = (
|
|
|
102
102
|
return AdsConfiguration.buildNativeAdsMeta(containerWidth, containerHeight);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
const fallbackAdsFullMeta =
|
|
106
|
+
adType === AdType.Permanent || adType === AdType.SlotReplacement
|
|
107
|
+
? AdsConfiguration.bannerAdsMeta.filter(({ source }) => source.shouldNotUseStrictContainerLimits)
|
|
108
|
+
: [];
|
|
109
|
+
const containerWithFallbackWidth = Math.max(
|
|
110
|
+
containerWidth,
|
|
111
|
+
...fallbackAdsFullMeta.map(({ dimensions }) => dimensions.width)
|
|
112
|
+
);
|
|
113
|
+
const containerWithFallbackHeight = Math.max(
|
|
114
|
+
containerHeight,
|
|
115
|
+
...fallbackAdsFullMeta.map(({ dimensions }) => dimensions.height)
|
|
116
|
+
);
|
|
117
|
+
|
|
105
118
|
return AdsConfiguration.bannerAdsMeta.reduce<number[]>((acc, { dimensions, source }, i) => {
|
|
106
119
|
const { shouldNotUseStrictContainerLimits = false, categories = [CRYPTO_CATEGORY_NAME] } = source;
|
|
107
120
|
|
|
@@ -116,12 +129,14 @@ export const pickAdsToDisplay = (
|
|
|
116
129
|
case AdType.Permanent:
|
|
117
130
|
matches =
|
|
118
131
|
shouldNotUseStrictContainerLimits ||
|
|
119
|
-
(
|
|
132
|
+
(containerWithFallbackWidth >= width &&
|
|
133
|
+
(containerWithFallbackHeight >= minContainerHeight || containerWithFallbackHeight < 2));
|
|
120
134
|
break;
|
|
121
135
|
case AdType.SlotReplacement:
|
|
122
136
|
matches =
|
|
123
137
|
shouldNotUseStrictContainerLimits ||
|
|
124
|
-
(
|
|
138
|
+
(containerWithFallbackWidth >= minContainerWidth &&
|
|
139
|
+
(containerWithFallbackHeight >= minContainerHeight || containerWithFallbackHeight < 2));
|
|
125
140
|
break;
|
|
126
141
|
default:
|
|
127
142
|
matches =
|
|
@@ -138,3 +153,22 @@ export const pickAdsToDisplay = (
|
|
|
138
153
|
return acc;
|
|
139
154
|
}, []);
|
|
140
155
|
};
|
|
156
|
+
|
|
157
|
+
const elementHasBox = (element: Element) => {
|
|
158
|
+
const { x, y, width, height } = element.getBoundingClientRect();
|
|
159
|
+
|
|
160
|
+
return x !== 0 || y !== 0 || width !== 0 || height !== 0;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
export const elementIsHidden = (element: Element): boolean => {
|
|
164
|
+
const { display } = window.getComputedStyle(element);
|
|
165
|
+
|
|
166
|
+
switch (display) {
|
|
167
|
+
case 'none':
|
|
168
|
+
return true;
|
|
169
|
+
case 'contents':
|
|
170
|
+
return Array.from(element.children).every(child => elementIsHidden(child));
|
|
171
|
+
default:
|
|
172
|
+
return !elementHasBox(element);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
@@ -18,6 +18,7 @@ import { delay, isTruthy } from 'src/utils';
|
|
|
18
18
|
|
|
19
19
|
import {
|
|
20
20
|
applyQuerySelector,
|
|
21
|
+
elementIsHidden,
|
|
21
22
|
elementIsOurAd,
|
|
22
23
|
getParentOfDepth,
|
|
23
24
|
ourBannerAdQuerySelector,
|
|
@@ -111,14 +112,15 @@ const processPermanentAdsParent = (
|
|
|
111
112
|
true,
|
|
112
113
|
parent
|
|
113
114
|
).reduce<Element[]>((acc, element) => {
|
|
114
|
-
if (acc.some(prevElement => prevElement.contains(element)
|
|
115
|
+
if (acc.some(prevElement => prevElement.contains(element))) {
|
|
115
116
|
return acc;
|
|
116
117
|
}
|
|
117
118
|
|
|
118
|
-
return [...acc, element];
|
|
119
|
+
return [...acc.filter(prevElement => !element.contains(prevElement)), element];
|
|
119
120
|
}, []);
|
|
121
|
+
const ourHiddenAds = ourAds.filter(elementIsHidden);
|
|
120
122
|
|
|
121
|
-
const ourAdsCount = ourAds.length;
|
|
123
|
+
const ourAdsCount = ourAds.length - ourHiddenAds.length;
|
|
122
124
|
let insertionsLeft = insertionsCount - ourAdsCount;
|
|
123
125
|
|
|
124
126
|
const banners = applyQuerySelector<HTMLElement>(bannerCssString, shouldSearchForManyBannersInParent, parent)
|
|
@@ -145,6 +147,7 @@ const processPermanentAdsParent = (
|
|
|
145
147
|
wrapperStyle,
|
|
146
148
|
elementStyle,
|
|
147
149
|
stylesOverrides,
|
|
150
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
148
151
|
...restProps
|
|
149
152
|
};
|
|
150
153
|
const hideActionBase: HideElementAction = {
|
|
@@ -159,6 +162,7 @@ const processPermanentAdsParent = (
|
|
|
159
162
|
insertionIndex: Array.from(banner.parentElement!.children).indexOf(banner),
|
|
160
163
|
isSiblingReplacement: true,
|
|
161
164
|
stylesOverrides,
|
|
165
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
162
166
|
...restProps
|
|
163
167
|
};
|
|
164
168
|
|
|
@@ -227,6 +231,7 @@ const processPermanentAdsParent = (
|
|
|
227
231
|
insertionIndex: normalizedInsertionIndex,
|
|
228
232
|
isSiblingReplacement: false,
|
|
229
233
|
stylesOverrides,
|
|
234
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
230
235
|
...restProps
|
|
231
236
|
};
|
|
232
237
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { memoize } from 'lodash';
|
|
2
|
+
|
|
3
|
+
import { AdsConfiguration } from 'src/ads-configuration';
|
|
1
4
|
import { SIBLING_REPLACEMENT_ATTRIBUTE_NAME } from 'src/constants';
|
|
2
5
|
import {
|
|
3
6
|
AdAction,
|
|
@@ -10,6 +13,7 @@ import {
|
|
|
10
13
|
RemoveElementAction,
|
|
11
14
|
SimpleInsertAdAction
|
|
12
15
|
} from 'src/types/ads-actions';
|
|
16
|
+
import { AdDimensions, AdMetadata } from 'src/types/ads-meta';
|
|
13
17
|
import { AdsRules } from 'src/types/ads-rules';
|
|
14
18
|
import { delay } from 'src/utils';
|
|
15
19
|
|
|
@@ -56,12 +60,30 @@ interface BannerFromProviderEntry {
|
|
|
56
60
|
categories: string[];
|
|
57
61
|
}
|
|
58
62
|
|
|
63
|
+
/** Returns such a minimal subset of ads dimensions that we can use to filter containers that cannot place any of our ads */
|
|
64
|
+
const getSmallestBannersDimensions = memoize((bannerAdsMeta: AdMetadata[]) =>
|
|
65
|
+
bannerAdsMeta.reduce<AdDimensions[]>((acc, { dimensions }) => {
|
|
66
|
+
const result = acc.filter(({ width, height }) => width < dimensions.width || height < dimensions.height);
|
|
67
|
+
|
|
68
|
+
if (
|
|
69
|
+
result.length === 0 ||
|
|
70
|
+
result.some(({ width, height }) => width > dimensions.width || height > dimensions.height)
|
|
71
|
+
) {
|
|
72
|
+
result.push(dimensions);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return result;
|
|
76
|
+
}, [])
|
|
77
|
+
);
|
|
78
|
+
|
|
59
79
|
export const processProvidersAds = async (
|
|
60
80
|
providersSelectors: AdsRules['providersSelectors'],
|
|
61
81
|
providersNegativeSelectors: AdsRules['providersNegativeSelectors'],
|
|
62
82
|
addActionsIfAdResolutionAvailable: AddActionsIfAdResolutionAvailable,
|
|
63
83
|
result: AdAction[]
|
|
64
84
|
) => {
|
|
85
|
+
const smallestBannersDimensions = getSmallestBannersDimensions(AdsConfiguration.bannerAdsMeta);
|
|
86
|
+
|
|
65
87
|
let bannersFromProviders = providersSelectors
|
|
66
88
|
.map(({ selector: providersSelector, parentDepth, categories }) =>
|
|
67
89
|
applyQuerySelector(providersSelector, true).reduce<BannerFromProviderEntry[]>((acc, foundElement) => {
|
|
@@ -79,8 +101,11 @@ export const processProvidersAds = async (
|
|
|
79
101
|
});
|
|
80
102
|
const bannerIsHiddenByParent = parentStyles?.display === 'none' || parentStyles?.visibility === 'hidden';
|
|
81
103
|
const hasAnchorParent = parentElementIndex >= 0 && acc[parentElementIndex] instanceof HTMLAnchorElement;
|
|
104
|
+
const canPlaceAds = smallestBannersDimensions.some(
|
|
105
|
+
({ width: minWidth, height: minHeight }) => width >= minWidth && height >= minHeight
|
|
106
|
+
);
|
|
82
107
|
|
|
83
|
-
if (bannerIsTouchedByOtherActions ||
|
|
108
|
+
if (bannerIsTouchedByOtherActions || !canPlaceAds || bannerIsHiddenByParent || hasAnchorParent) {
|
|
84
109
|
return acc;
|
|
85
110
|
}
|
|
86
111
|
|
|
@@ -155,7 +180,9 @@ export const processProvidersAds = async (
|
|
|
155
180
|
wrapperStyle,
|
|
156
181
|
parent: banner.parentElement ?? document.body,
|
|
157
182
|
insertionIndex: Array.from(banner.parentElement?.children ?? []).indexOf(banner),
|
|
158
|
-
isSiblingReplacement: true
|
|
183
|
+
isSiblingReplacement: true,
|
|
184
|
+
shouldUseBlurredBackground: true,
|
|
185
|
+
adCategories: categories
|
|
159
186
|
};
|
|
160
187
|
|
|
161
188
|
let actions: (InsertAdActionWithoutMeta | HideElementAction | RemoveElementAction)[];
|
|
@@ -82,6 +82,7 @@ const processSelectedElement = (
|
|
|
82
82
|
parentDepth: parentDepth - 1
|
|
83
83
|
})),
|
|
84
84
|
isSiblingReplacement: true,
|
|
85
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
85
86
|
...actionBaseCommonProps
|
|
86
87
|
};
|
|
87
88
|
|
|
@@ -100,6 +101,7 @@ const processSelectedElement = (
|
|
|
100
101
|
...restProps,
|
|
101
102
|
parentDepth: parentDepth - 1
|
|
102
103
|
})),
|
|
104
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
103
105
|
...actionBaseCommonProps
|
|
104
106
|
};
|
|
105
107
|
actionsBases = [replaceElementActionBase];
|
|
@@ -110,6 +112,7 @@ const processSelectedElement = (
|
|
|
110
112
|
insertionIndex: 0,
|
|
111
113
|
stylesOverrides,
|
|
112
114
|
isSiblingReplacement: true,
|
|
115
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
113
116
|
wrapperStyle: { display: 'contents' }
|
|
114
117
|
};
|
|
115
118
|
|
|
@@ -124,6 +127,7 @@ const processSelectedElement = (
|
|
|
124
127
|
type: AdActionType.ReplaceAllChildren,
|
|
125
128
|
parent: banner,
|
|
126
129
|
stylesOverrides,
|
|
130
|
+
adCategories: [CRYPTO_CATEGORY_NAME],
|
|
127
131
|
wrapperStyle: { display: 'contents' }
|
|
128
132
|
};
|
|
129
133
|
actionsBases = [replaceAllChildrenActionBase];
|
package/src/ads-configuration.ts
CHANGED
|
@@ -7,12 +7,24 @@ interface IAdsConfiguration {
|
|
|
7
7
|
swapTkeyUrl: string;
|
|
8
8
|
externalAdsActivityMessageType: string;
|
|
9
9
|
personaIframePath: string;
|
|
10
|
-
getAdsStackIframeURL: (
|
|
10
|
+
getAdsStackIframeURL: (
|
|
11
|
+
id: string,
|
|
12
|
+
adsMetadataIds: (number | AdMetadata)[],
|
|
13
|
+
origin: string,
|
|
14
|
+
adCategories: string[]
|
|
15
|
+
) => string;
|
|
11
16
|
buildNativeAdsMeta: (containerWidth: number, containerHeight: number) => AdMetadata[];
|
|
12
17
|
bannerAdsMeta: AdMetadata[];
|
|
13
18
|
extVersion: string;
|
|
14
19
|
templePassphrase: string;
|
|
15
20
|
isMisesBrowser: boolean;
|
|
21
|
+
pickNextAdMetadata: (
|
|
22
|
+
allAdsMetadata: AdMetadata[],
|
|
23
|
+
currentAdMetadata: AdMetadata | undefined,
|
|
24
|
+
validAdsCounter: number,
|
|
25
|
+
pageHasPlacesRules: boolean,
|
|
26
|
+
adCategories: string[]
|
|
27
|
+
) => AdMetadata | undefined;
|
|
16
28
|
}
|
|
17
29
|
|
|
18
30
|
export class AdsConfiguration {
|
|
@@ -25,6 +37,7 @@ export class AdsConfiguration {
|
|
|
25
37
|
static personaIframePath: IAdsConfiguration['personaIframePath'] = '';
|
|
26
38
|
static getAdsStackIframeURL: IAdsConfiguration['getAdsStackIframeURL'] = () => '';
|
|
27
39
|
static buildNativeAdsMeta: IAdsConfiguration['buildNativeAdsMeta'] = () => [];
|
|
40
|
+
static pickNextAdMetadata: IAdsConfiguration['pickNextAdMetadata'] = () => undefined;
|
|
28
41
|
static bannerAdsMeta: AdMetadata[] = [];
|
|
29
42
|
static EXTENSION_VERSION: string | undefined;
|
|
30
43
|
static TEMPLE_PASSPHRASE: string;
|
|
@@ -43,7 +56,8 @@ export const configureAds = (config: IAdsConfiguration) => {
|
|
|
43
56
|
bannerAdsMeta,
|
|
44
57
|
extVersion,
|
|
45
58
|
templePassphrase,
|
|
46
|
-
isMisesBrowser
|
|
59
|
+
isMisesBrowser,
|
|
60
|
+
pickNextAdMetadata
|
|
47
61
|
} = config;
|
|
48
62
|
|
|
49
63
|
if (smallTkeyInpageAdUrl) {
|
|
@@ -57,6 +71,7 @@ export const configureAds = (config: IAdsConfiguration) => {
|
|
|
57
71
|
AdsConfiguration.personaIframePath = personaIframePath;
|
|
58
72
|
AdsConfiguration.getAdsStackIframeURL = getAdsStackIframeURL;
|
|
59
73
|
AdsConfiguration.buildNativeAdsMeta = buildNativeAdsMeta;
|
|
74
|
+
AdsConfiguration.pickNextAdMetadata = pickNextAdMetadata;
|
|
60
75
|
AdsConfiguration.bannerAdsMeta = bannerAdsMeta;
|
|
61
76
|
AdsConfiguration.EXTENSION_VERSION = extVersion;
|
|
62
77
|
AdsConfiguration.TEMPLE_PASSPHRASE = templePassphrase;
|
|
@@ -26,6 +26,7 @@ export const subscribeToAdsStackIframeLoadIfNecessary = async (element: HTMLIFra
|
|
|
26
26
|
loadingAdsIds.add(adId);
|
|
27
27
|
|
|
28
28
|
return new Promise<AdMetadata['source']['providerName']>((resolve, reject) => {
|
|
29
|
+
let adIsNative = false;
|
|
29
30
|
const messageListener = (event: MessageEvent<any>) => {
|
|
30
31
|
if (event.source !== element.contentWindow) return;
|
|
31
32
|
|
|
@@ -48,6 +49,7 @@ export const subscribeToAdsStackIframeLoadIfNecessary = async (element: HTMLIFra
|
|
|
48
49
|
break;
|
|
49
50
|
case AD_RENDER_START_MESSAGE_TYPE:
|
|
50
51
|
const { dimensions, source }: AdMetadata = data.adMetadata;
|
|
52
|
+
adIsNative = source.native ?? false;
|
|
51
53
|
const { width, height } = dimensions;
|
|
52
54
|
if (width > 0 && height > 0) {
|
|
53
55
|
if (source.native) {
|
|
@@ -61,7 +63,7 @@ export const subscribeToAdsStackIframeLoadIfNecessary = async (element: HTMLIFra
|
|
|
61
63
|
case AD_RESIZE_MESSAGE_TYPE:
|
|
62
64
|
const { width: newWidth, height: newHeight } = data;
|
|
63
65
|
|
|
64
|
-
if (
|
|
66
|
+
if (adIsNative) {
|
|
65
67
|
element.style.height = `${newHeight + verticalBordersWidth}px`;
|
|
66
68
|
} else {
|
|
67
69
|
extendOrKeepDimension(element, 'width', newWidth + horizontalBordersWidth);
|