@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.
Files changed (102) hide show
  1. package/dist/index.d.ts +9 -3
  2. package/dist/index.js +12 -14
  3. package/dist/referrals/index.d.ts +33 -0
  4. package/dist/referrals/index.js +18 -0
  5. package/package.json +7 -5
  6. package/src/ads-actions/helpers.ts +36 -2
  7. package/src/ads-actions/process-permanent-rule.ts +8 -3
  8. package/src/ads-actions/process-providers-ads.ts +29 -2
  9. package/src/ads-actions/process-rule.ts +4 -0
  10. package/src/ads-configuration.ts +17 -2
  11. package/src/execute-ads-actions/observing.ts +3 -1
  12. package/src/execute-ads-actions/process-insert-ad-action.ts +26 -5
  13. package/src/referrals/index.ts +5 -0
  14. package/src/referrals/replace.ts +129 -0
  15. package/src/referrals/takeads.ts +44 -0
  16. package/src/referrals/utils.ts +14 -0
  17. package/src/render-ads-stack.ts +218 -102
  18. package/src/temple-wallet-api.ts +10 -4
  19. package/src/transform-raw-rules.ts +6 -2
  20. package/src/types/ads-actions.ts +2 -0
  21. package/src/types/ads-rules.ts +1 -0
  22. package/src/types/temple-wallet-api.ts +1 -0
  23. package/src/utils.ts +4 -0
  24. package/dist/ads-actions/helpers.d.ts +0 -17
  25. package/dist/ads-actions/helpers.js +0 -96
  26. package/dist/ads-actions/helpers.js.map +0 -1
  27. package/dist/ads-actions/index.d.ts +0 -3
  28. package/dist/ads-actions/index.js +0 -63
  29. package/dist/ads-actions/index.js.map +0 -1
  30. package/dist/ads-actions/process-elements-to-hide-or-remove-rule.d.ts +0 -3
  31. package/dist/ads-actions/process-elements-to-hide-or-remove-rule.js +0 -19
  32. package/dist/ads-actions/process-elements-to-hide-or-remove-rule.js.map +0 -1
  33. package/dist/ads-actions/process-permanent-rule.d.ts +0 -3
  34. package/dist/ads-actions/process-permanent-rule.js +0 -143
  35. package/dist/ads-actions/process-permanent-rule.js.map +0 -1
  36. package/dist/ads-actions/process-providers-ads.d.ts +0 -3
  37. package/dist/ads-actions/process-providers-ads.js +0 -137
  38. package/dist/ads-actions/process-providers-ads.js.map +0 -1
  39. package/dist/ads-actions/process-rule.d.ts +0 -3
  40. package/dist/ads-actions/process-rule.js +0 -98
  41. package/dist/ads-actions/process-rule.js.map +0 -1
  42. package/dist/ads-configuration.d.ts +0 -31
  43. package/dist/ads-configuration.js +0 -30
  44. package/dist/ads-configuration.js.map +0 -1
  45. package/dist/constants.d.ts +0 -11
  46. package/dist/constants.js +0 -12
  47. package/dist/constants.js.map +0 -1
  48. package/dist/execute-ads-actions/ads-views/index.d.ts +0 -3
  49. package/dist/execute-ads-actions/ads-views/index.js +0 -4
  50. package/dist/execute-ads-actions/ads-views/index.js.map +0 -1
  51. package/dist/execute-ads-actions/ads-views/make-ads-tw-view.d.ts +0 -3
  52. package/dist/execute-ads-actions/ads-views/make-ads-tw-view.js +0 -40
  53. package/dist/execute-ads-actions/ads-views/make-ads-tw-view.js.map +0 -1
  54. package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.d.ts +0 -3
  55. package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.js +0 -22
  56. package/dist/execute-ads-actions/ads-views/make-extension-iframe-view.js.map +0 -1
  57. package/dist/execute-ads-actions/ads-views/make-tkey-ad.d.ts +0 -3
  58. package/dist/execute-ads-actions/ads-views/make-tkey-ad.js +0 -38
  59. package/dist/execute-ads-actions/ads-views/make-tkey-ad.js.map +0 -1
  60. package/dist/execute-ads-actions/index.d.ts +0 -2
  61. package/dist/execute-ads-actions/index.js +0 -23
  62. package/dist/execute-ads-actions/index.js.map +0 -1
  63. package/dist/execute-ads-actions/observing.d.ts +0 -1
  64. package/dist/execute-ads-actions/observing.js +0 -129
  65. package/dist/execute-ads-actions/observing.js.map +0 -1
  66. package/dist/execute-ads-actions/override-element-styles.d.ts +0 -2
  67. package/dist/execute-ads-actions/override-element-styles.js +0 -6
  68. package/dist/execute-ads-actions/override-element-styles.js.map +0 -1
  69. package/dist/execute-ads-actions/process-insert-ad-action.d.ts +0 -2
  70. package/dist/execute-ads-actions/process-insert-ad-action.js +0 -153
  71. package/dist/execute-ads-actions/process-insert-ad-action.js.map +0 -1
  72. package/dist/index.js.map +0 -1
  73. package/dist/render-ads-stack.d.ts +0 -7
  74. package/dist/render-ads-stack.js +0 -156
  75. package/dist/render-ads-stack.js.map +0 -1
  76. package/dist/temple-wallet-api.d.ts +0 -23
  77. package/dist/temple-wallet-api.js +0 -67
  78. package/dist/temple-wallet-api.js.map +0 -1
  79. package/dist/transform-raw-rules.d.ts +0 -3
  80. package/dist/transform-raw-rules.js +0 -137
  81. package/dist/transform-raw-rules.js.map +0 -1
  82. package/dist/types/ad-view.d.ts +0 -7
  83. package/dist/types/ad-view.js +0 -2
  84. package/dist/types/ad-view.js.map +0 -1
  85. package/dist/types/ads-actions.d.ts +0 -56
  86. package/dist/types/ads-actions.js +0 -15
  87. package/dist/types/ads-actions.js.map +0 -1
  88. package/dist/types/ads-meta.d.ts +0 -19
  89. package/dist/types/ads-meta.js +0 -2
  90. package/dist/types/ads-meta.js.map +0 -1
  91. package/dist/types/ads-provider.d.ts +0 -8
  92. package/dist/types/ads-provider.js +0 -9
  93. package/dist/types/ads-provider.js.map +0 -1
  94. package/dist/types/ads-rules.d.ts +0 -26
  95. package/dist/types/ads-rules.js +0 -2
  96. package/dist/types/ads-rules.js.map +0 -1
  97. package/dist/types/temple-wallet-api.d.ts +0 -78
  98. package/dist/types/temple-wallet-api.js +0 -2
  99. package/dist/types/temple-wallet-api.js.map +0 -1
  100. package/dist/utils.d.ts +0 -6
  101. package/dist/utils.js +0 -4
  102. 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) => Promise<void>;
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: (location: Location, rules: RawAllAdsRules) => AdsRules;
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 it = require('webextension-polyfill');
6
+ var ct = require('webextension-polyfill');
6
7
  var cryptoJs = require('crypto-js');
7
- var lodash = require('lodash');
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 it__default = /*#__PURE__*/_interopDefault(it);
14
- var yt__default = /*#__PURE__*/_interopDefault(yt);
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 = ge;
20
- exports.configureAds = Je;
21
- exports.executeAdsActions = mt;
22
- exports.getAdsActions = st;
23
- exports.renderAdsStack = Ve;
24
- exports.transformRawRules = ht;
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": "8.1.0",
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
- "@vespaiach/axios-fetch-adapter": "^0.3.1",
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
- (containerWidth >= width && (containerHeight >= minContainerHeight || containerHeight < 2));
132
+ (containerWithFallbackWidth >= width &&
133
+ (containerWithFallbackHeight >= minContainerHeight || containerWithFallbackHeight < 2));
120
134
  break;
121
135
  case AdType.SlotReplacement:
122
136
  matches =
123
137
  shouldNotUseStrictContainerLimits ||
124
- (containerWidth >= minContainerWidth && (containerHeight >= minContainerHeight || containerHeight < 2));
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) || element.contains(prevElement))) {
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 || width === 0 || height === 0 || bannerIsHiddenByParent || hasAnchorParent) {
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];
@@ -7,12 +7,24 @@ interface IAdsConfiguration {
7
7
  swapTkeyUrl: string;
8
8
  externalAdsActivityMessageType: string;
9
9
  personaIframePath: string;
10
- getAdsStackIframeURL: (id: string, adsMetadataIds: (number | AdMetadata)[], origin: string) => string;
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 (element.style.width?.endsWith('%')) {
66
+ if (adIsNative) {
65
67
  element.style.height = `${newHeight + verticalBordersWidth}px`;
66
68
  } else {
67
69
  extendOrKeepDimension(element, 'width', newWidth + horizontalBordersWidth);