@temple-wallet/extension-ads 7.1.1 → 8.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.d.ts +33 -52
  2. package/dist/index.js +13 -12
  3. package/package.json +3 -6
  4. package/src/ads-actions/helpers.ts +25 -11
  5. package/src/ads-actions/index.ts +6 -3
  6. package/src/ads-actions/process-permanent-rule.ts +9 -1
  7. package/src/ads-actions/process-providers-ads.ts +39 -16
  8. package/src/ads-actions/process-rule.ts +2 -0
  9. package/src/ads-configuration.ts +8 -8
  10. package/src/constants.ts +2 -0
  11. package/src/execute-ads-actions/ads-views/index.ts +2 -2
  12. package/src/execute-ads-actions/ads-views/{make-hypelab-ad.ts → make-ads-tw-view.ts} +11 -9
  13. package/src/execute-ads-actions/ads-views/make-extension-iframe-view.ts +26 -0
  14. package/src/execute-ads-actions/ads-views/make-tkey-ad.ts +1 -1
  15. package/src/execute-ads-actions/observing.ts +13 -7
  16. package/src/execute-ads-actions/process-insert-ad-action.ts +11 -3
  17. package/src/render-ads-stack.ts +70 -14
  18. package/src/temple-wallet-api.ts +9 -2
  19. package/src/transform-raw-rules.ts +27 -11
  20. package/src/types/ad-view.ts +3 -0
  21. package/src/types/ads-actions.ts +4 -1
  22. package/src/types/ads-meta.ts +3 -18
  23. package/src/types/ads-provider.ts +1 -0
  24. package/src/types/ads-rules.ts +1 -1
  25. package/src/types/temple-wallet-api.ts +1 -0
  26. package/src/utils.ts +0 -4
  27. package/dist/referrals/index.d.ts +0 -33
  28. package/dist/referrals/index.js +0 -18
  29. package/src/execute-ads-actions/ads-views/make-persona-ad.ts +0 -15
  30. package/src/referrals/index.ts +0 -5
  31. package/src/referrals/replace.ts +0 -129
  32. package/src/referrals/takeads.ts +0 -44
  33. package/src/referrals/utils.ts +0 -14
package/dist/index.d.ts CHANGED
@@ -3,21 +3,33 @@ type StringRecord<T = string> = Record<string, T>;
3
3
  interface AdSourceBase {
4
4
  shouldNotUseStrictContainerLimits?: boolean;
5
5
  }
6
+ interface HypeLabBannerAdSource extends AdSourceBase {
7
+ providerName: 'HypeLab';
8
+ native: false;
9
+ size: 'small' | 'high' | 'wide';
10
+ }
11
+ interface HypeLabNativeAdSource extends AdSourceBase {
12
+ providerName: 'HypeLab';
13
+ native: true;
14
+ slug: string;
15
+ }
6
16
  /** Only covers TKEY ads for now */
7
17
  interface TempleAdSource extends AdSourceBase {
8
18
  providerName: 'Temple';
9
- native?: boolean;
10
19
  }
20
+ /** See: https://pub.persona3.io/docs
21
+ * `regular` - 321x101
22
+ * `medium` - 600x160
23
+ * `wide` - 970x90
24
+ * `squarish` - 300x250
25
+ */
26
+ type PersonaAdShape = 'regular' | 'medium' | 'wide' | 'squarish';
11
27
  interface PersonaAdSource extends AdSourceBase {
12
28
  providerName: 'Persona';
13
- slug: string;
29
+ shape: PersonaAdShape;
14
30
  }
15
- interface HypeLabAdSource extends AdSourceBase {
16
- providerName: 'HypeLab';
17
- native: boolean;
18
- slug: string;
19
- }
20
- type AdSource = HypeLabAdSource | TempleAdSource | PersonaAdSource;
31
+ type HypeLabAdSources = HypeLabBannerAdSource | HypeLabNativeAdSource;
32
+ type AdSource = HypeLabAdSources | TempleAdSource | PersonaAdSource;
21
33
  interface AdDimensions {
22
34
  width: number;
23
35
  height: number;
@@ -46,9 +58,7 @@ interface RawAdPlacesRule {
46
58
  };
47
59
  stylesOverrides?: AdStylesOverrides[];
48
60
  shouldHideOriginal?: boolean;
49
- isNative?: boolean;
50
61
  }
51
- type ElementsToMeasure = Record<'width' | 'height', string>;
52
62
  interface RawPermanentAdPlacesRule {
53
63
  urlRegexes: string[];
54
64
  adSelector: {
@@ -65,31 +75,17 @@ interface RawPermanentAdPlacesRule {
65
75
  insertBeforeSelector?: string;
66
76
  insertAfterSelector?: string;
67
77
  insertionsCount?: number;
68
- shouldUseDivWrapper?: boolean;
69
- wrapperType?: 'div' | 'tbody';
70
- colsBefore?: number;
71
- colspan?: number;
72
- colsAfter?: number;
78
+ shouldUseDivWrapper: boolean;
73
79
  divWrapperStyle?: Record<string, string>;
74
- wrapperStyle?: Record<string, string>;
75
80
  elementStyle?: Record<string, string>;
76
81
  elementToMeasureSelector?: string;
77
- elementsToMeasureSelectors?: ElementsToMeasure;
78
82
  stylesOverrides?: AdStylesOverrides[];
79
83
  shouldHideOriginal?: boolean;
80
- displayWidth?: string;
81
84
  }
82
85
  interface RawAdProvidersRule {
83
86
  urlRegexes: string[];
84
87
  providers: string[];
85
88
  }
86
- interface RawElementsToHideOrRemoveEntry {
87
- cssString: string;
88
- parentDepth: number;
89
- isMultiple: boolean;
90
- urlRegexes: string[];
91
- shouldHide: boolean;
92
- }
93
89
  interface RawAllAdsRules {
94
90
  adPlacesRulesForAllDomains: Record<string, RawAdPlacesRule[]>;
95
91
  providersRulesForAllDomains: Record<string, RawAdProvidersRule[]>;
@@ -97,15 +93,10 @@ interface RawAllAdsRules {
97
93
  selector: string;
98
94
  parentDepth: number;
99
95
  })[]>;
100
- providersNegativeSelectors: Record<string, (string | {
101
- selector: string;
102
- parentDepth: number;
103
- })[]>;
104
96
  providersToReplaceAtAllSites: string[];
105
97
  permanentAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
106
98
  permanentNativeAdPlacesRulesForAllDomains: Record<string, RawPermanentAdPlacesRule[]>;
107
99
  adsReplaceUrlsBlacklist: string[];
108
- elementsToHideOrRemoveRules: Record<string, RawElementsToHideOrRemoveEntry[]>;
109
100
  timestamp: number;
110
101
  }
111
102
 
@@ -119,11 +110,12 @@ declare enum AdActionType {
119
110
  interface AdActionBase {
120
111
  type: AdActionType;
121
112
  }
122
- interface InsertAdActionProps extends Pick<RawPermanentAdPlacesRule, 'wrapperStyle' | 'wrapperType' | 'colsAfter' | 'colsBefore' | 'colspan'> {
113
+ interface InsertAdActionProps {
123
114
  /** A value of 'number' type stands for the value with respective index in `BANNER_ADS_META`. It is done to shorten
124
115
  * ads stack Iframe URL search parameters.
125
116
  */
126
117
  adsMetadata: (number | AdMetadata)[];
118
+ divWrapperStyle?: StringRecord<string>;
127
119
  elementStyle?: StringRecord<string>;
128
120
  stylesOverrides?: AdStylesOverrides[];
129
121
  }
@@ -163,13 +155,10 @@ type AdsProviderName = keyof typeof AdsProviderTitle;
163
155
  interface AdPlacesRule extends Omit<RawAdPlacesRule, 'urlRegexes'> {
164
156
  urlRegexes: RegExp[];
165
157
  }
166
- interface PermanentAdPlacesRule extends Omit<RawPermanentAdPlacesRule, 'urlRegexes' | 'elementToMeasureSelector'> {
158
+ interface PermanentAdPlacesRule extends Omit<RawPermanentAdPlacesRule, 'urlRegexes'> {
167
159
  urlRegexes: RegExp[];
168
160
  isNative: boolean;
169
161
  }
170
- interface ElementsToHideOrRemoveRule extends Omit<RawElementsToHideOrRemoveEntry, 'urlRegexes'> {
171
- urlRegexes: RegExp[];
172
- }
173
162
  interface AdsRules {
174
163
  adPlacesRules: Array<Omit<AdPlacesRule, 'urlRegexes'>>;
175
164
  permanentAdPlacesRules: PermanentAdPlacesRule[];
@@ -177,29 +166,26 @@ interface AdsRules {
177
166
  selector: string;
178
167
  parentDepth: number;
179
168
  }>;
180
- providersNegativeSelectors: Array<{
181
- selector: string;
182
- parentDepth: number;
183
- }>;
184
- elementsToHideOrRemoveRules: ElementsToHideOrRemoveRule[];
185
169
  timestamp: number;
186
170
  }
187
171
 
188
- declare const getAdsActions: ({ providersSelectors, providersNegativeSelectors, adPlacesRules, permanentAdPlacesRules, elementsToHideOrRemoveRules }: AdsRules) => Promise<AdAction[]>;
172
+ declare const getAdsActions: ({ providersSelectors, adPlacesRules, permanentAdPlacesRules }: AdsRules) => Promise<AdAction[]>;
189
173
 
190
174
  interface IAdsConfiguration {
175
+ hypelab: {
176
+ regular: string;
177
+ small: string;
178
+ wide: string;
179
+ native: string;
180
+ };
191
181
  hypelabAdsWindowUrl: string;
192
182
  tkeyInpageAdUrl: string;
193
- smallTkeyInpageAdUrl?: string;
194
183
  swapTkeyUrl: string;
195
184
  externalAdsActivityMessageType: string;
196
- getPersonaIframeURL: (id: string, slug: string) => string;
185
+ getPersonaIframeURL: (id: string, shape: PersonaAdShape) => string;
197
186
  getAdsStackIframeURL: (id: string, adsMetadataIds: (number | AdMetadata)[], origin: string) => string;
198
- buildNativeAdsMeta: (containerWidth: number, containerHeight: number) => AdMetadata[];
199
- bannerAdsMeta: AdMetadata[];
200
187
  extVersion: string;
201
188
  templePassphrase: string;
202
- isMisesBrowser: boolean;
203
189
  }
204
190
  declare const configureAds: (config: IAdsConfiguration) => void;
205
191
 
@@ -225,15 +211,10 @@ declare class TempleWalletApi {
225
211
  selector: string;
226
212
  parentDepth: number;
227
213
  })[]>>;
228
- getNegativeSelectorsForAllProviders: () => Promise<Record<string, (string | {
229
- selector: string;
230
- parentDepth: number;
231
- })[]>>;
232
214
  getPermanentAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
233
215
  getPermanentNativeAdPlacesRulesForAllDomains: () => Promise<Record<string, RawPermanentAdPlacesRule[]>>;
234
216
  getAdsReplaceUrlsBlacklist: () => Promise<string[]>;
235
- getElementsToHideOrRemoveRules: () => Promise<Record<string, RawElementsToHideOrRemoveEntry[]>>;
236
217
  getAllRules: () => Promise<RawAllAdsRules>;
237
218
  }
238
219
 
239
- export { type AdAction, AdActionType, type AdMetadata, type AdsProviderName, AdsProviderTitle, type AdsRules, type RawAllAdsRules, TempleWalletApi, configureAds, executeAdsActions, getAdsActions, renderAdsStack, transformRawRules };
220
+ export { type AdAction, AdActionType, type AdsProviderName, AdsProviderTitle, type AdsRules, type PersonaAdShape, type RawAllAdsRules, TempleWalletApi, configureAds, executeAdsActions, getAdsActions, renderAdsStack, transformRawRules };
package/dist/index.js CHANGED
@@ -1,22 +1,23 @@
1
1
  'use strict';
2
2
 
3
- var semver = require('semver');
4
3
  var nanoid = require('nanoid');
5
- var nt = require('webextension-polyfill');
4
+ var Fe = require('webextension-polyfill');
6
5
  var cryptoJs = require('crypto-js');
7
6
  var lodash = require('lodash');
8
- var Rt = require('axios');
7
+ var it = require('@vespaiach/axios-fetch-adapter');
8
+ var ot = require('axios');
9
9
 
10
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
 
12
- var nt__default = /*#__PURE__*/_interopDefault(nt);
13
- var Rt__default = /*#__PURE__*/_interopDefault(Rt);
12
+ var Fe__default = /*#__PURE__*/_interopDefault(Fe);
13
+ var it__default = /*#__PURE__*/_interopDefault(it);
14
+ var ot__default = /*#__PURE__*/_interopDefault(ot);
14
15
 
15
- var Ge=Object.defineProperty,ze=Object.defineProperties;var qe=Object.getOwnPropertyDescriptors;var J=Object.getOwnPropertySymbols;var we=Object.prototype.hasOwnProperty,Te=Object.prototype.propertyIsEnumerable;var Se=(e,t,n)=>t in e?Ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,w=(e,t)=>{for(var n in t||(t={}))we.call(t,n)&&Se(e,n,t[n]);if(J)for(var n of J(t))Te.call(t,n)&&Se(e,n,t[n]);return e},_=(e,t)=>ze(e,qe(t));var I=(e,t)=>{var n={};for(var r in e)we.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&J)for(var r of J(e))t.indexOf(r)<0&&Te.call(e,r)&&(n[r]=e[r]);return n};var y=(e,t,n)=>new Promise((r,l)=>{var a=i=>{try{o(n.next(i));}catch(c){l(c);}},s=i=>{try{o(n.throw(i));}catch(c){l(c);}},o=i=>i.done?r(i.value):Promise.resolve(i.value).then(a,s);o((n=n.apply(e,t)).next());});process&&process.env&&process.env.NODE_ENV==="development";navigator.userAgent.includes("Macintosh");var Pe=e=>!!e,Ke=300,H=(e=Ke)=>new Promise(t=>setTimeout(t,e));var h=class{};h.IS_MISES_BROWSER=!1,h.HYPELAB_ADS_WINDOW_URL="",h.TKEY_INPAGE_AD_URL="",h.SMALL_TKEY_INPAGE_AD_URL="",h.SWAP_TKEY_URL="",h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",h.getPersonaIframeURL=()=>"",h.getAdsStackIframeURL=()=>"",h.buildNativeAdsMeta=()=>[],h.bannerAdsMeta=[];var Xe=e=>{let{hypelabAdsWindowUrl:t,tkeyInpageAdUrl:n,smallTkeyInpageAdUrl:r,swapTkeyUrl:l,externalAdsActivityMessageType:a,getPersonaIframeURL:s,getAdsStackIframeURL:o,buildNativeAdsMeta:i,bannerAdsMeta:c,extVersion:d,templePassphrase:m,isMisesBrowser:p}=e;r&&(h.SMALL_TKEY_INPAGE_AD_URL=r),h.HYPELAB_ADS_WINDOW_URL=t,h.TKEY_INPAGE_AD_URL=n,h.SWAP_TKEY_URL=l,h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=a,h.getPersonaIframeURL=s,h.getAdsStackIframeURL=o,h.buildNativeAdsMeta=i,h.bannerAdsMeta=c,h.EXTENSION_VERSION=d,h.TEMPLE_PASSPHRASE=m,h.IS_MISES_BROWSER=p;};var B="twa",U="twa-native",Z="twa-sibling-replacement";var ee="adRenderStart",te="resize",k="ready",X="error",ne="accelerometer; gyroscope";var C=/[\d.]+(px)?$/,V=`[${B}]`,ve=`[${B}]:not([${U}])`,Ie=`[${U}]`,F=e=>e.reduce((t,n)=>{let r=parseInt(n,10);return isNaN(r)&&C.test(n)?t:t+r},0),Y=e=>!!e.closest(V),$=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(Z))},Q=e=>{let t=getComputedStyle(e),{x:n,right:r,width:l,height:a}=e.getBoundingClientRect(),s={width:l,height:a},o=["width","height"];for(let i of o){let c=t[i],m=e.getAttribute(i)||c;C.test(m)&&(s[i]=Number(m.replace("px",""))),i==="width"&&n<0?s.width+=n:i==="width"&&r>window.innerWidth&&(s.width=window.innerWidth-n);}return s},L=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(r=>!!r):[],D=(e,t)=>{let n=e;for(let r=0;r<t;r++){let l=n.parentElement;if(!l)return null;n=l;}return n},xe=(e,t,n,r)=>e<2&&t<2?[]:r?h.buildNativeAdsMeta(e,t):h.bannerAdsMeta.reduce((l,{dimensions:a,source:s},o)=>{let{shouldNotUseStrictContainerLimits:i=!1}=s,{minContainerWidth:c,maxContainerWidth:d,minContainerHeight:m,maxContainerHeight:p,width:u}=a,A=!1;switch(n){case"permanent":A=i||e>=u&&(t>=m||t<2);break;case"slot-replacement":A=i||e>=c&&(t>=m||t<2);break;default:A=e>=c&&t>=m&&e<=d&&t<=p;}return A&&l.push(o),l},[]);var Me=(e,t)=>{let{shouldHide:n,cssString:r,parentDepth:l,isMultiple:a}=e;L(r,a).forEach(s=>{let o=D(s,l);if(!o)return;let i=window.getComputedStyle(o);i.display!=="none"&&i.visibility!=="hidden"&&t.push({type:n?"hide-element":"remove-element",element:o});});};var _e=(e,t,n)=>y(void 0,null,function*(){let{parentSelector:r,displayWidth:l}=e,{isMultiple:a,cssString:s,parentDepth:o}=r;if(l&&!semver.satisfies(semver.coerce(window.innerWidth),l))return [];let i=L(s,a).map(c=>D(c,o)).filter(c=>!!c);return yield Promise.all(i.map(c=>y(void 0,null,function*(){yield H(0),Je(c,e,t,n);}))),i}),oe=(e,t)=>{var n,r;return e?{width:(n=document.querySelector(e.width))!=null?n:t,height:(r=document.querySelector(e.height))!=null?r:t}:{width:t,height:t}},Je=(e,t,n,r)=>{var fe;let Re=t,{shouldUseDivWrapper:l,divWrapperStyle:a,wrapperStyle:s,elementStyle:o,adSelector:i,insertionIndex:c,insertBeforeSelector:d,insertAfterSelector:m,insertionsCount:p=1,elementsToMeasureSelectors:u,stylesOverrides:A,shouldHideOriginal:E=!1,isNative:g,urlRegexes:S,parentSelector:P}=Re,R=I(Re,["shouldUseDivWrapper","divWrapperStyle","wrapperStyle","elementStyle","adSelector","insertionIndex","insertBeforeSelector","insertAfterSelector","insertionsCount","elementsToMeasureSelectors","stylesOverrides","shouldHideOriginal","isNative","urlRegexes","parentSelector"]),T=R.wrapperType?s:l?a:{display:"contents"},{isMultiple:v,cssString:x,parentDepth:M}=i,re=L(g?Ie:ve,!0,e).reduce((f,O)=>f.some(q=>q.contains(O)||O.contains(q))?f:[...f,O],[]).length,N=p-re;if(L(x,v,e).map(f=>D(f,M)).filter(f=>Pe(f)&&!Y(f)).forEach(f=>{var q;let O=window.getComputedStyle(f).display==="none";if(N<=0)(!E||!O)&&r.push({type:E?"hide-element":"remove-element",element:f});else {let Fe=oe(u,((q=f.parentElement)==null?void 0:q.children.length)===1?f.parentElement:f),Ye=w({type:"replace-element",element:f,wrapperStyle:T,elementStyle:o,stylesOverrides:A},R),ge={type:"hide-element",element:f},$e=w({type:"simple-insert-ad",wrapperStyle:T,elementStyle:o,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:A},R),K=[],ye=$(f);E&&ye&&!O?K=[ge]:E&&!ye?K=[ge,$e]:E||(K=[Ye]),K.length>0&&n(Fe,"permanent",g,...K)&&N--;}}),N<=0)return;let z=-1,he=e,se={width:e,height:e},Ee=d||m;if(Ee){let f=e.querySelector(Ee),O=f==null?void 0:f.parentElement;f&&O&&(he=O,z=Array.from(e.children).indexOf(f)+(d?0:1),se=oe(u,f));}else {let f=c!=null?c:0;z=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),se=oe(u,(fe=e.children[z])!=null?fe:e);}if(z!==-1){let f=w({type:"simple-insert-ad",wrapperStyle:T,elementStyle:o,parent:he,insertionIndex:z,isSiblingReplacement:!1,stylesOverrides:A},R);n(se,"permanent",g,...Array(N).fill(f));}};var Ze=["align-items","align-self","bottom","display","flex","flex-grow","flex-shrink","float","justify-content","justify-self","left","margin","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","padding","position","right","top","vertical-align","z-index"],Le=(e,t,n,r)=>y(void 0,null,function*(){let l=e.map(({selector:s,parentDepth:o})=>L(s,!0).reduce((i,c)=>{var P;let d=(P=D(c,o))!=null?P:c,m=i.findIndex(R=>R.contains(d)),p=d.parentElement&&window.getComputedStyle(d.parentElement),{width:u,height:A}=Q(d),E=r.some(R=>{var T;return R.type==="replace-all-children"||R.type==="simple-insert-ad"?R.parent.contains(d)||d.contains(R.parent):((T=R.element.parentElement)==null?void 0:T.contains(d))||d.contains(R.element)}),g=(p==null?void 0:p.display)==="none"||(p==null?void 0:p.visibility)==="hidden",S=m>=0&&i[m]instanceof HTMLAnchorElement;return E||u===0||A===0||g||S||(m>=0?i.splice(m,1,d):i.some(R=>R.contains(d))||i.push(d)),i},[])).flat(),a=t.map(({selector:s,parentDepth:o})=>L(s,!0).map(i=>D(i,o)).filter(i=>!!i)).flat();l=l.filter(s=>!a.includes(s)),yield Promise.all(l.map(s=>y(void 0,null,function*(){var m,p,u,A,E,g,S,P;yield H(0);let o=s.parentElement,{width:i,height:c}=window.getComputedStyle(s),d=C.test(i)&&C.test(c)?s:(p=(m=o==null?void 0:o.closest("div, article, aside, footer, header"))!=null?m:(o==null?void 0:o.tagName.toLowerCase())==="body"?void 0:o)!=null?p:s;if(!Y(s)&&!s.querySelector(V)&&!r.some(R=>R.type==="simple-insert-ad"?!1:R.type==="replace-all-children"?R.parent.contains(s):R.element===s)){let R=(u=s.getAttribute("style"))!=null?u:"",T=Object.fromEntries(R.split(";").filter(Boolean).map(N=>N.split(":").map(ue=>ue.trim())));if((A=T.width)!=null&&A.match(/^0[a-z]/)||(E=T.height)!=null&&E.match(/^0[a-z]/))return;let v=window.getComputedStyle(s),x=w(w({},Object.fromEntries(Ze.map(N=>[N,v.getPropertyValue(N)]))),T),M={type:"hide-element",element:s},b={type:"simple-insert-ad",wrapperStyle:x,parent:(g=s.parentElement)!=null?g:document.body,insertionIndex:Array.from((P=(S=s.parentElement)==null?void 0:S.children)!=null?P:[]).indexOf(s),isSiblingReplacement:!0},re=$(s)?window.getComputedStyle(s).display==="none"?[]:[M]:[M,b];n({width:d,height:d},"provider-replacement",!1,...re);}})));});var be=(e,t,n)=>y(void 0,null,function*(){let{cssString:r,isMultiple:l}=e.selector,a=L(r,l);yield Promise.all(a.map(s=>y(void 0,null,function*(){yield H(0),et(s,e,t,n);})));}),et=(e,t,n,r)=>{let{selector:{shouldUseDivWrapper:l,parentDepth:a,divWrapperStyle:s},stylesOverrides:o,shouldHideOriginal:i,isNative:c=!1}=t,d=D(e,a);if(!d||n.some(u=>u.contains(d))||Y(d)||d.querySelector(V))return;let m={shouldUseDivWrapper:l,wrapperStyle:s},p;if(l&&i){let u=d.parentElement,A=window.getComputedStyle(d).display==="none",E=w({type:"simple-insert-ad",parent:u,insertionIndex:Array.from(u.children).indexOf(d),stylesOverrides:o==null?void 0:o.map(P=>{var R=P,{parentDepth:g}=R,S=I(R,["parentDepth"]);return _(w({},S),{parentDepth:g-1})}),isSiblingReplacement:!0},m);p=[],A||p.push({type:"hide-element",element:d}),$(d)||p.push(E);}else if(l)p=[w({type:"replace-element",element:d,stylesOverrides:o==null?void 0:o.map(g=>{var S=g,{parentDepth:A}=S,E=I(S,["parentDepth"]);return _(w({},E),{parentDepth:A-1})})},m)];else if(i){let u={type:"simple-insert-ad",parent:d,insertionIndex:0,stylesOverrides:o,isSiblingReplacement:!0,wrapperStyle:{display:"contents"}};p=Array.from(d.children).filter(A=>window.getComputedStyle(A).display!=="none").map(A=>({type:"hide-element",element:A})),d.querySelector(V)||p.push(u);}else p=[{type:"replace-all-children",parent:d,stylesOverrides:o,wrapperStyle:{display:"contents"}}];p.length>0&&r({width:d,height:d},"slot-replacement",c,...p);};var tt=a=>y(void 0,[a],function*({providersSelectors:e,providersNegativeSelectors:t,adPlacesRules:n,permanentAdPlacesRules:r,elementsToHideOrRemoveRules:l}){let s=[],o=(c,d,m,...p)=>{if(p.length>0&&p.every(b=>b.type==="hide-element"||b.type==="remove-element"))return s.push(...p),!0;let{width:u}=Q(c.width),{height:A}=Q(c.height),{paddingLeft:E,paddingRight:g}=window.getComputedStyle(c.width),{paddingTop:S,paddingBottom:P}=window.getComputedStyle(c.height),R=F([E,g]),T=R===u?u:u-R,v=F([S,P]),x=v===A?A:A-v,M=xe(T,x,d,m);return M.length?(s.push(...p.map(b=>b.type==="hide-element"||b.type==="remove-element"?b:_(w({},b),{adsMetadata:M}))),!0):!1},i=[];return yield Promise.all(l.map(c=>y(void 0,null,function*(){yield H(0),Me(c,s);}))),yield Promise.all(r.map(c=>y(void 0,null,function*(){yield H(0),i=i.concat(yield _e(c,o,s));}))),yield Promise.all(n.map(c=>y(void 0,null,function*(){yield H(0),yield be(c,i,o);}))),yield Le(e,t,o,s),s});var le=(l=>(l.Optimal="Optimal",l.HypeLab="HypeLab",l.Persona="Persona",l.Temple="Temple Wallet",l))(le||{});var ae=new Set,He=new Set,De=new Set,Oe=e=>y(void 0,null,function*(){let t=e.id;if(!ae.has(t))return ae.add(t),new Promise((n,r)=>{let l=a=>{var s,o,i;if(a.source===e.contentWindow)try{let c=typeof a.data=="string"?JSON.parse(a.data):a.data;if(c.id!==t)return;let d=e.offsetWidth-e.clientWidth,m=e.offsetHeight-e.clientHeight;switch(c.type){case k:n(c.adMetadata.source.providerName);break;case X:window.removeEventListener("message",l),e.style.display="none",r(new Error((s=c.reason)!=null?s:"Unknown error"));break;case ee:let{dimensions:p}=c.adMetadata,{width:u,height:A}=p;u>0&&A>0&&((o=e.style.width)!=null&&o.endsWith("%")||(e.style.width=`${p.width}px`),e.style.height=`${p.height}px`);break;case te:let{width:E,height:g}=c;(i=e.style.width)!=null&&i.endsWith("%")||(e.style.width=`${E+d}px`),e.style.height=`${g+m}px`;}}catch(c){console.error("Observing error:",c);}};window.addEventListener("message",l);}).then(n=>{if(He.has(t))return;He.add(t),st(e)?We(t,n):rt(e,n);}).catch(n=>{throw console.error(n),n}).finally(()=>void ae.delete(t))}),rt=(e,t)=>{let n=new IntersectionObserver(r=>{r.some(l=>l.isIntersecting)&&(We(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},We=(e,t)=>{if(De.has(e))return;De.add(e);let n=window.parent.location.href;nt__default.default.runtime.sendMessage({type:h.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:le[t]}).catch(r=>void console.error(r));},st=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let r=Math.min(Math.max(0,t.x),n.width),l=Math.min(Math.max(0,t.x+t.width),n.width),a=Math.min(Math.max(0,t.y),n.height),s=Math.min(Math.max(0,t.y+t.height),n.height),o=t.width*t.height;return (l-r)*(s-a)/o>=.5};var de=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var ot=(e,t)=>{["width","height"].forEach(r=>{var a;let l=(a=e.style[r])!=null?a:"";C.test(l)&&parseInt(l,10)<t[r]&&e.style.removeProperty(r);});},lt=(e,t,n,r)=>y(void 0,null,function*(){let{elementStyle:l={},stylesOverrides:a=[],adsMetadata:s,wrapperType:o}=e;a.sort((A,E)=>A.parentDepth-E.parentDepth);let i,c=nanoid.nanoid(),d=document.createElement("iframe");d.src=h.getAdsStackIframeURL(c,s,window.location.href),d.id=c,d.allow=ne;let m=s[0],{dimensions:p}=typeof m=="number"?h.bannerAdsMeta[m]:m;d.style.width=o==="tbody"?"100%":`${p.width}px`,d.style.height=`${p.height}px`,d.style.border="none";for(let A in l)d.style.setProperty(A,l[A]);switch(d.setAttribute(B,"true"),ot(t,p),n.appendChild(d),e.type){case"replace-all-children":i=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":i=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(Z,"true"),i=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}if(o!=="tbody"){let{borderLeftWidth:A,borderRightWidth:E,borderTopWidth:g,borderBottomWidth:S}=window.getComputedStyle(d),{borderLeftWidth:P,borderRightWidth:R,borderTopWidth:T,borderBottomWidth:v}=window.getComputedStyle(t),x=F([A,E,P,R]),M=F([g,S,T,v]);d.style.width=`${p.width-x}px`,d.style.height=`${p.height-M}px`;}Oe(d).catch(r);let u=0;a.forEach(({parentDepth:A,style:E})=>{for(;A>u&&i;)i=i.parentElement,u++;i&&de(i,E);});}),Be=e=>y(void 0,null,function*(){let{wrapperStyle:t={},adsMetadata:n,wrapperType:r="div",colsAfter:l=0,colsBefore:a=0,colspan:s=1}=e,o=n.every(m=>typeof m=="object"),i,c;if(r==="div")i=document.createElement("div"),c=i;else {i=document.createElement("tbody");let m=document.createElement("tr");i.appendChild(m);for(let u=0;u<a;u++)m.appendChild(document.createElement("td"));let p=document.createElement("td");p.colSpan=s,m.appendChild(p),c=p;for(let u=0;u<l;u++)m.appendChild(document.createElement("td"));}i.setAttribute(B,"true"),o&&i.setAttribute(U,"true"),de(i,t);let d=()=>{let m=document.createElement("div");m.setAttribute(B,"true"),o&&m.setAttribute(U,"true"),m.style.display="none",i.replaceWith(m);};yield lt(e,i,c,m=>{console.error("Failed to render ads",m),d();}).catch(m=>{throw console.error("Inserting an ad attempt error:",m),d(),m});});var at=e=>Promise.allSettled(e.map(t=>y(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none","important"):yield Be(t);})));var ce=(e,t,n=!1)=>{let r=document.createElement("div");r.style.width=`${e}px`,r.style.height=`${t}px`;let l=document.createElement("div");if(l.style.width=`${e}px`,l.style.height=`${t}px`,r.appendChild(l),n){let o=document.createElement("a");return o.href=h.SWAP_TKEY_URL,o.target="_blank",o.rel="noopener noreferrer",o.style.width=`${e}px`,o.style.height=`${t}px`,o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.appendChild(document.createTextNode("TODO: Native TKEY ad")),l.appendChild(o),{element:r}}let a=document.createElement("a");a.href=h.SWAP_TKEY_URL,a.target="_blank",a.rel="noopener noreferrer",a.style.width="100%",a.style.height="100%",l.appendChild(a);let s=document.createElement("img");return s.src=e<=320?h.SMALL_TKEY_INPAGE_AD_URL:h.TKEY_INPAGE_AD_URL,s.style.width="100%",s.style.height="100%",a.appendChild(s),{element:r}};var me=(e,t,{width:n,height:r},l)=>{let a=document.createElement("iframe");return a.id=e,a.src=ct(t,l,n,r,a.id),a.style.width=t.native?"100%":`${n}px`,a.style.height=`${r}px`,a.style.border="none",a.allow=ne,{element:a}},ct=(e,t,n,r,l)=>{let a=new URL(h.HYPELAB_ADS_WINDOW_URL);return e.native?a.searchParams.set("vh",String(r)):a.searchParams.set("w",String(n)),a.searchParams.set("h",String(r)),a.searchParams.set("p",e.slug),a.searchParams.set("o",mt(t)),l&&a.searchParams.set("id",l),a.toString()},mt=e=>cryptoJs.AES.encrypt(e,h.TEMPLE_PASSPHRASE).toString();var pe=(e,t,{width:n,height:r})=>{let l=document.createElement("iframe");return l.src=h.getPersonaIframeURL(e,t.slug),l.id=e,l.style.width=`${n}px`,l.style.height=`${r}px`,l.style.border="none",{element:l}};var j=e=>window.parent.postMessage(JSON.stringify(e),"*"),Ce=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){j({id:e,type:X,reason:"No more ads to render"});return}let[r,...l]=t,a=typeof r=="number"?h.bannerAdsMeta[r]:r;j({id:e,type:ee,adMetadata:a});let{source:s,dimensions:o}=a,i,c=!0;switch(s.providerName){case"Temple":i=ce(o.width,o.height,s.native);break;case"HypeLab":i=me(e,s,o,n),s.native&&(c=!1);break;default:i=pe(e,s,o);}let{element:d}=i,m=document.getElementById("root"),p=document.getElementById("temple-label");if(m.replaceChildren(d),c?p.setAttribute("active",""):p.removeAttribute("active"),d instanceof HTMLIFrameElement)return new Promise((u,A)=>{let E=setTimeout(()=>{window.removeEventListener("message",S),A(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(s)}`));},(l.length===0?2e4:1e4)*(h.IS_MISES_BROWSER?2:1)),g=!1,S=P=>{var R,T;if(P.source===d.contentWindow)try{let v=typeof P.data=="string"?JSON.parse(P.data):P.data;switch(v.type){case k:g||(g=!0,j({id:e,type:k,adMetadata:a}),clearTimeout(E),u());break;case X:window.removeEventListener("message",S),clearTimeout(E),A(new Error((R=v.reason)!=null?R:"Unknown error"));break;case te:let{width:x,height:M}=v;x>0&&M>0&&((T=d.style.width)!=null&&T.endsWith("%")||(d.style.width=`${x}px`),d.style.height=`${M}px`,j(_(w({},v),{id:e})));}}catch(v){console.error("Observing error:",v);}};window.addEventListener("message",S);}).catch(u=>(console.error(u),Ce(e,l,n)));j({id:e,type:k,adMetadata:a});});var pt=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:r,providersSelectors:l,providersNegativeSelectors:a={},providersToReplaceAtAllSites:s,permanentAdPlacesRulesForAllDomains:o,permanentNativeAdPlacesRulesForAllDomains:i={},adsReplaceUrlsBlacklist:c=[],elementsToHideOrRemoveRules:d={},timestamp:m}=t,{hostname:p,href:u}=e;if(c.some(g=>new RegExp(g).test(u)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],providersNegativeSelectors:[],elementsToHideOrRemoveRules:[],timestamp:m};let A=u.replace(/#.*$/,""),E=g=>{let S=g.source.includes("#")?u:A;return g.test(S)};return {adPlacesRules:ut(p,E,n),permanentAdPlacesRules:ht(p,E,o,i),providersSelectors:Ve(p,E,r,l,s),providersNegativeSelectors:Ve(p,E,r,a,s),elementsToHideOrRemoveRules:At(p,E,d),timestamp:m}},At=(e,t,n)=>{var r;return ((r=n[e])!=null?r:[]).map(s=>{var o=s,{urlRegexes:l}=o,a=I(o,["urlRegexes"]);return _(w({},a),{urlRegexes:l.map(i=>new RegExp(i))})}).filter(({urlRegexes:l})=>l.some(t))},ut=(e,t,n)=>{var a;return ((a=n[e])!=null?a:[]).map(i=>{var c=i,{urlRegexes:s}=c,o=I(c,["urlRegexes"]);return _(w({},o),{urlRegexes:s.map(d=>new RegExp(d))})}).reduce((s,d)=>{var m=d,{urlRegexes:o,selector:i}=m,c=I(m,["urlRegexes","selector"]);if(!o.some(t))return s;let E=i,{cssString:p}=E,u=I(E,["cssString"]),A=s.findIndex(P=>{var R=P,{selector:g}=R,S=I(R,["selector"]);let x=g,v=I(x,["cssString"]);return lodash.isEqual(u,v)&&lodash.isEqual(c,S)});return A===-1?s.push(w({selector:i},c)):s[A].selector.cssString+=", ".concat(p),s},[])},ke=e=>a=>{var s=a,{urlRegexes:t,elementToMeasureSelector:n,elementsToMeasureSelectors:r}=s,l=I(s,["urlRegexes","elementToMeasureSelector","elementsToMeasureSelectors"]);return _(w({},l),{urlRegexes:t.map(o=>new RegExp(o)),isNative:e,elementsToMeasureSelectors:r!=null?r:n?{width:n,height:n}:void 0})},ht=(e,t,n,r={})=>{var o,i;let l=(o=n[e])!=null?o:[],a=(i=r[e])!=null?i:[];return l.map(ke(!1)).concat(a.map(ke(!0))).filter(({urlRegexes:c})=>c.some(t))};function Et(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var Ve=(e,t,n,r,l)=>{var d;let s=((d=n[e])!=null?d:[]).map(u=>{var A=u,{urlRegexes:m}=A,p=I(A,["urlRegexes"]);return _(w({},p),{urlRegexes:m.map(E=>new RegExp(E))})}).filter(({urlRegexes:m})=>m.some(t)),o=new Set,i={},c=m=>{var u;if(o.has(m))return;((u=r[m])!=null?u:[]).forEach(A=>{let{selector:E,parentDepth:g}=typeof A=="string"?{selector:A,parentDepth:0}:A;i[g]||(i[g]=new Set),i[g].add(E);}),o.add(m);};return l.forEach(c),s.forEach(({providers:m})=>m.forEach(c)),Object.entries(i).map(([m,p])=>({parentDepth:Number(m),selector:Et(p)}))};var W=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),Ae=class{constructor(t){this.getAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=W(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=W(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getNegativeSelectorsForAllProviders=W(()=>this.api.get("/slise-ad-rules/providers/negative-selectors",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=W(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=W(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getElementsToHideOrRemoveRules=W(()=>this.api.get("/slise-ad-rules/elements-to-hide-or-remove",this.getAdVersionRequestConfig()));this.getAllRules=()=>y(this,null,function*(){let[t,n,r,l,a,s,o,i,c]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist(),this.getNegativeSelectorsForAllProviders(),this.getElementsToHideOrRemoveRules()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:r,providersToReplaceAtAllSites:l,permanentAdPlacesRulesForAllDomains:a,permanentNativeAdPlacesRulesForAllDomains:s,adsReplaceUrlsBlacklist:o,providersNegativeSelectors:i,elementsToHideOrRemoveRules:c,timestamp:Date.now()}});this.api=Rt__default.default.create({baseURL:new URL("/api",t).href,adapter:"fetch"});}getAdVersionRequestConfig(){return {params:{extVersion:h.EXTENSION_VERSION,isMisesBrowser:h.IS_MISES_BROWSER}}}};
16
+ var Ce=Object.defineProperty,Ne=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var he=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ue=(e,t,n)=>t in e?Ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,g=(e,t)=>{for(var n in t||(t={}))he.call(t,n)&&ue(e,n,t[n]);if(z)for(var n of z(t))Ee.call(t,n)&&ue(e,n,t[n]);return e},w=(e,t)=>Ne(e,We(t));var I=(e,t)=>{var n={};for(var s in e)he.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&z)for(var s of z(e))t.indexOf(s)<0&&Ee.call(e,s)&&(n[s]=e[s]);return n};var y=(e,t,n)=>new Promise((s,r)=>{var l=a=>{try{o(n.next(a));}catch(d){r(d);}},i=a=>{try{o(n.throw(a));}catch(d){r(d);}},o=a=>a.done?s(a.value):Promise.resolve(a.value).then(l,i);o((n=n.apply(e,t)).next());});var fe=e=>!!e;var _=(e=300)=>new Promise(t=>setTimeout(t,e));var p=class{};p.HYPELAB_NATIVE_PLACEMENT_SLUG="",p.HYPELAB_SMALL_PLACEMENT_SLUG="",p.HYPELAB_HIGH_PLACEMENT_SLUG="",p.HYPELAB_WIDE_PLACEMENT_SLUG="",p.HYPELAB_ADS_WINDOW_URL="",p.TKEY_INPAGE_AD_URL="",p.SWAP_TKEY_URL="",p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE="",p.getPersonaIframeURL=()=>"",p.getAdsStackIframeURL=()=>"";var Be=e=>{let{hypelab:t,hypelabAdsWindowUrl:n,tkeyInpageAdUrl:s,swapTkeyUrl:r,externalAdsActivityMessageType:l,getPersonaIframeURL:i,getAdsStackIframeURL:o,extVersion:a,templePassphrase:d}=e,{native:c,small:m,regular:A,wide:u}=t;p.HYPELAB_NATIVE_PLACEMENT_SLUG=c,p.HYPELAB_SMALL_PLACEMENT_SLUG=m,p.HYPELAB_HIGH_PLACEMENT_SLUG=A,p.HYPELAB_WIDE_PLACEMENT_SLUG=u,p.HYPELAB_ADS_WINDOW_URL=n,p.TKEY_INPAGE_AD_URL=s,p.SWAP_TKEY_URL=r,p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE=l,p.getPersonaIframeURL=i,p.getAdsStackIframeURL=o,p.EXTENSION_VERSION=a,p.TEMPLE_PASSPHRASE=d;};var H=[{source:{providerName:"HypeLab",native:!1,size:"wide"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Temple"},dimensions:{width:728,height:90,minContainerWidth:701,minContainerHeight:60,maxContainerWidth:1/0,maxContainerHeight:300}},{source:{providerName:"Persona",shape:"medium"},dimensions:{width:600,height:160,minContainerWidth:600,minContainerHeight:80,maxContainerWidth:800,maxContainerHeight:300}},{source:{providerName:"HypeLab",native:!1,size:"high"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"Persona",shape:"squarish"},dimensions:{width:300,height:250,minContainerWidth:300,minContainerHeight:170,maxContainerWidth:700,maxContainerHeight:1/0}},{source:{providerName:"HypeLab",native:!1,size:"small",shouldNotUseStrictContainerLimits:!0},dimensions:{width:320,height:50,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}},{source:{providerName:"Persona",shape:"regular",shouldNotUseStrictContainerLimits:!0},dimensions:{width:321,height:101,minContainerWidth:230,minContainerHeight:32,maxContainerWidth:420,maxContainerHeight:130}}],Re=(e,t)=>({source:{providerName:"HypeLab",native:!0,slug:p.HYPELAB_NATIVE_PLACEMENT_SLUG},dimensions:{width:Math.max(160,e),height:Math.max(16,t),minContainerWidth:2,minContainerHeight:2,maxContainerWidth:1/0,maxContainerHeight:1/0}});var D="twa",q="twa-sibling-replacement";var K="adRenderStart",Q="resize",B="ready",V="error";var M=`iframe[${D}], div[${D}]`,O=e=>!!e.closest(M),U=e=>{var t;return !!((t=e.previousElementSibling)!=null&&t.getAttribute(q))},X=e=>{let t=getComputedStyle(e),{x:n,right:s,width:r,height:l}=e.getBoundingClientRect(),i={width:r,height:l},o=["width","height"];for(let a of o){let d=t[a],m=e.getAttribute(a)||d;/\d+px/.test(m)&&(i[a]=Number(m.replace("px",""))),a==="width"&&n<0?i.width+=n:a==="width"&&s>window.innerWidth&&(i.width=window.innerWidth-n);}return i},b=(e,t,n=document)=>e?t?[...n.querySelectorAll(e)]:[n.querySelector(e)].filter(s=>!!s):[],C=(e,t)=>{let n=e;for(let s=0;s<t;s++){let r=n.parentElement;if(!r)return null;n=r;}return n},ye=H.length-2,ge=(e,t,n,s)=>e<2&&t<2?[]:s?[Re(e,t)]:H.reduce((r,{dimensions:l},i)=>{let{minContainerWidth:o,maxContainerWidth:a,minContainerHeight:d,maxContainerHeight:c,width:m}=l,A=!1;switch(n){case"permanent":A=i===ye||e>=m&&(t>=d||t<2);break;case"slot-replacement":A=i===ye||e>=o&&(t>=d||t<2);break;default:A=e>=o&&t>=d&&e<=a&&t<=c;}return A&&r.push(i),r},[]);var Se=(e,t,n)=>y(void 0,null,function*(){let{isMultiple:s,cssString:r,parentDepth:l}=e.parentSelector,i=b(r,s).map(o=>C(o,l)).filter(o=>!!o);return yield Promise.all(i.map(o=>y(void 0,null,function*(){yield _(0),Oe(o,e,t,n);}))),i}),Oe=(e,t,n,s)=>{var me;let{shouldUseDivWrapper:r,divWrapperStyle:l,elementStyle:i,adSelector:o,insertionIndex:a,insertBeforeSelector:d,insertAfterSelector:c,insertionsCount:m=1,elementToMeasureSelector:A,stylesOverrides:u,shouldHideOriginal:h=!1,isNative:R}=t,E=r?l:{display:"contents"},{isMultiple:S,cssString:x,parentDepth:P}=o,L=b(M,!0,e).reduce((f,v)=>f.some(Y=>Y.contains(v)||v.contains(Y))?f:[...f,v],[]).length,T=m-L;if(b(x,S,e).map(f=>C(f,P)).filter(f=>fe(f)&&!O(f)).forEach(f=>{var Y,ce;let v=window.getComputedStyle(f).display==="none";if(T<=0)(!h||!v)&&s.push({type:h?"hide-element":"remove-element",element:f});else {let J=((Y=f.parentElement)==null?void 0:Y.children.length)===1?f.parentElement:f;A&&(J=(ce=document.querySelector(A))!=null?ce:J);let He={type:"replace-element",element:f,divWrapperStyle:E,elementStyle:i,stylesOverrides:u},Ae={type:"hide-element",element:f},De={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:i,parent:f.parentElement,insertionIndex:Array.from(f.parentElement.children).indexOf(f),isSiblingReplacement:!0,stylesOverrides:u},F=[],pe=U(f);h&&pe&&!v?F=[Ae]:h&&!pe?F=[Ae,De]:h||(F=[He]),F.length>0&&n(J,"permanent",R,...F)&&T--;}}),T<=0)return;let k=-1,le=e,j=e,de=d||c;if(de){let f=e.querySelector(de),v=f==null?void 0:f.parentElement;f&&v&&(le=v,k=Array.from(e.children).indexOf(f)+(d?0:1),j=A&&document.querySelector(A)||f);}else {let f=a!=null?a:0;k=f<0?Math.max(e.children.length+f,0):Math.min(f,e.children.length),j=A&&document.querySelector(A)||((me=e.children[k])!=null?me:e);}if(k!==-1){let f={type:"simple-insert-ad",divWrapperStyle:E,elementStyle:i,parent:le,insertionIndex:k,isSiblingReplacement:!1,stylesOverrides:u};n(j,"permanent",R,...Array(T).fill(f));}};var Ue=["align-items","align-self","bottom","display","flex","flex-grow","flex-shrink","float","justify-content","justify-self","left","margin","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","padding","position","right","top","vertical-align","z-index"],Pe=(e,t,n)=>y(void 0,null,function*(){let s=e.map(({selector:r,parentDepth:l})=>b(r,!0).reduce((i,o)=>{var R;let a=(R=C(o,l))!=null?R:o,d=i.findIndex(E=>E.contains(a)),c=a.parentElement&&window.getComputedStyle(a.parentElement),{width:m,height:A}=X(a),u=n.some(E=>{var S;return E.type==="replace-all-children"||E.type==="simple-insert-ad"?E.parent.contains(a)||a.contains(E.parent):((S=E.element.parentElement)==null?void 0:S.contains(a))||a.contains(E.element)}),h=(c==null?void 0:c.display)==="none"||(c==null?void 0:c.visibility)==="hidden";return u||m===0||A===0||h||(d>=0?i.splice(d,1,a):i.some(E=>E.contains(a))||i.push(a)),i},[])).flat();yield Promise.all(s.map(r=>y(void 0,null,function*(){var o,a,d,c,m,A,u,h;yield _(0);let l=r.parentElement,i=(a=(o=l==null?void 0:l.closest("div, article, aside, footer, header"))!=null?o:(l==null?void 0:l.tagName.toLowerCase())==="body"?void 0:l)!=null?a:r;if(!O(r)&&!r.querySelector(M)&&!n.some(R=>R.type==="simple-insert-ad"?!1:R.type==="replace-all-children"?R.parent.contains(r):R.element===r)){let R=(d=r.getAttribute("style"))!=null?d:"",E=Object.fromEntries(R.split(";").filter(Boolean).map(T=>T.split(":").map(ae=>ae.trim())));if((c=E.width)!=null&&c.match(/^0[a-z]/)||(m=E.height)!=null&&m.match(/^0[a-z]/))return;let S=window.getComputedStyle(r),x=g(g({},Object.fromEntries(Ue.map(T=>[T,S.getPropertyValue(T)]))),E),P={type:"hide-element",element:r},W={type:"simple-insert-ad",divWrapperStyle:x,parent:(A=r.parentElement)!=null?A:document.body,insertionIndex:Array.from((h=(u=r.parentElement)==null?void 0:u.children)!=null?h:[]).indexOf(r),isSiblingReplacement:!0},L=U(r)?window.getComputedStyle(r).display==="none"?[]:[P]:[P,W];t(i,"provider-replacement",!1,...L);}})));});var Te=(e,t,n)=>y(void 0,null,function*(){let{cssString:s,isMultiple:r}=e.selector,l=b(s,r);yield Promise.all(l.map(i=>y(void 0,null,function*(){yield _(0),ke(i,e,t,n);})));}),ke=(e,t,n,s)=>{let{selector:{shouldUseDivWrapper:r,parentDepth:l,divWrapperStyle:i},stylesOverrides:o,shouldHideOriginal:a}=t,d=C(e,l);if(!d||n.some(A=>A.contains(d))||O(d)||d.querySelector(M))return;let c={shouldUseDivWrapper:r,divWrapperStyle:i},m;if(r&&a){let A=d.parentElement,u=window.getComputedStyle(d).display==="none",h=g({type:"simple-insert-ad",parent:A,insertionIndex:Array.from(A.children).indexOf(d),stylesOverrides:o==null?void 0:o.map(S=>{var x=S,{parentDepth:R}=x,E=I(x,["parentDepth"]);return w(g({},E),{parentDepth:R-1})}),isSiblingReplacement:!0},c);m=[],u||m.push({type:"hide-element",element:d}),U(d)||m.push(h);}else if(r)m=[g({type:"replace-element",element:d,stylesOverrides:o==null?void 0:o.map(R=>{var E=R,{parentDepth:u}=E,h=I(E,["parentDepth"]);return w(g({},h),{parentDepth:u-1})})},c)];else if(a){let A={type:"simple-insert-ad",parent:d,insertionIndex:0,stylesOverrides:o,isSiblingReplacement:!0,divWrapperStyle:{display:"contents"}};m=Array.from(d.children).filter(u=>window.getComputedStyle(u).display!=="none").map(u=>({type:"hide-element",element:u})),d.querySelector(M)||m.push(A);}else m=[{type:"replace-all-children",parent:d,stylesOverrides:o,divWrapperStyle:{display:"contents"}}];m.length>0&&s(d,"slot-replacement",!1,...m);};var Ye=s=>y(void 0,[s],function*({providersSelectors:e,adPlacesRules:t,permanentAdPlacesRules:n}){let r=[],l=(o,a,d,...c)=>{let{width:m,height:A}=X(o),u=ge(m,A,a,d);return u.length?(r.push(...c.map(h=>h.type==="hide-element"||h.type==="remove-element"?h:w(g({},h),{adsMetadata:u}))),!0):!1},i=[];return yield Promise.all(n.map(o=>y(void 0,null,function*(){yield _(0),i=i.concat(yield Se(o,l,r));}))),yield Promise.all(t.map(o=>y(void 0,null,function*(){yield _(0),yield Te(o,i,l);}))),yield Pe(e,l,r),r});var ee=(r=>(r.Optimal="Optimal",r.HypeLab="HypeLab",r.Persona="Persona",r.Temple="Temple Wallet",r))(ee||{});var te=new Set,we=new Set,Ie=new Set,Ve=3e4,ve=e=>y(void 0,null,function*(){let t=e.id;if(!te.has(t))return te.add(t),new Promise((n,s)=>{setTimeout(()=>{window.removeEventListener("message",r),s(new Error(`Timeout exceeded for ${t}`));},Ve);let r=l=>{var i;if(l.source===e.contentWindow)try{let o=typeof l.data=="string"?JSON.parse(l.data):l.data;if(o.id!==t)return;switch(o.type){case B:n(o.adMetadata.source.providerName);break;case V:window.removeEventListener("message",r),e.style.display="none",s(new Error((i=o.reason)!=null?i:"Unknown error"));break;case K:let{dimensions:a}=o.adMetadata,{width:d,height:c}=a;d>0&&c>0&&(e.style.width=`${a.width}px`,e.style.height=`${a.height}px`);break;case Q:let{width:m,height:A}=o;e.style.width=`${m}px`,e.style.height=`${A}px`;}}catch(o){console.error("Observing error:",o);}};window.addEventListener("message",r);}).then(n=>{if(we.has(t))return;we.add(t),$e(e)?_e(t,n):Ge(e,n);}).catch(console.error).finally(()=>void te.delete(t))}),Ge=(e,t)=>{let n=new IntersectionObserver(s=>{s.some(r=>r.isIntersecting)&&(_e(e.id,t),n.disconnect());},{threshold:.5});n.observe(e);},_e=(e,t)=>{if(Ie.has(e))return;Ie.add(e);let n=window.parent.location.href;Fe__default.default.runtime.sendMessage({type:p.EXTERNAL_ADS_ACTIVITY_MESSAGE_TYPE,url:n,provider:ee[t]}).catch(s=>void console.error(s));},$e=e=>{let t=e.getBoundingClientRect(),n=window.visualViewport;if(!n)return !1;let s=Math.min(Math.max(0,t.x),n.width),r=Math.min(Math.max(0,t.x+t.width),n.width),l=Math.min(Math.max(0,t.y),n.height),i=Math.min(Math.max(0,t.y+t.height),n.height),o=t.width*t.height;return (r-s)*(i-l)/o>=.5};var ne=(e,t)=>{for(let n in t)e.style.setProperty(n,t[n]);};var qe=(e,t)=>{["width","height"].forEach(s=>{var l;let r=(l=e.style[s])!=null?l:"";/^\d+(px)?$/.test(r)&&parseInt(r,10)<t[s]&&e.style.removeProperty(s);});},Ke=(e,t)=>y(void 0,null,function*(){let{elementStyle:n={},stylesOverrides:s=[]}=e;s.sort((c,m)=>c.parentDepth-m.parentDepth);let r,l=nanoid.nanoid(),i=document.createElement("iframe");i.src=p.getAdsStackIframeURL(l,e.adsMetadata,window.location.href),i.id=l;let o=e.adsMetadata[0],{dimensions:a}=typeof o=="number"?H[o]:o;i.style.width=`${a.width}px`,i.style.height=`${a.height}px`,i.style.border="none";for(let c in n)i.style.setProperty(c,n[c]);switch(i.setAttribute(D,"true"),qe(t,a),t.appendChild(i),e.type){case"replace-all-children":r=e.parent,e.parent.innerHTML="",e.parent.appendChild(t);break;case"replace-element":r=e.element.parentElement,e.element.replaceWith(t);break;default:e.isSiblingReplacement&&t.setAttribute(q,"true"),r=e.parent,e.parent.insertBefore(t,e.parent.children[e.insertionIndex]);break}ve(i);let d=0;s.forEach(({parentDepth:c,style:m})=>{for(;c>d&&r;)r=r.parentElement,d++;r&&ne(r,m);});}),Le=e=>y(void 0,null,function*(){let{divWrapperStyle:t={}}=e,n=document.createElement("div");n.setAttribute(D,"true"),ne(n,t),yield Ke(e,n).catch(s=>{console.error("Inserting an ad attempt error:",s);let r=document.createElement("div");throw r.setAttribute(D,"true"),r.style.display="none",n.replaceWith(r),s});});var Qe=e=>Promise.allSettled(e.map(t=>y(void 0,null,function*(){t.type==="remove-element"?t.element.remove():t.type==="hide-element"?t.element.style.setProperty("display","none"):yield Le(t);})));var re=(e,t)=>{let n=document.createElement("div");n.style.width=`${e}px`,n.style.height=`${t}px`;let s=document.createElement("div");s.style.width=`${e}px`,s.style.height=`${t}px`,n.appendChild(s);let r=document.createElement("a");r.href=p.SWAP_TKEY_URL,r.target="_blank",r.rel="noopener noreferrer",r.style.width="100%",r.style.height="100%",s.appendChild(r);let l=document.createElement("img");return l.src=p.TKEY_INPAGE_AD_URL,l.style.width="100%",l.style.height="100%",r.appendChild(l),{element:n}};var se=(e,t,n)=>{let{width:s,height:r}=t,l=document.createElement("iframe");return l.src=je(e,n,s,r,l.id),l.style.width=`${s}px`,l.style.height=`${r}px`,l.style.border="none",{element:l}},je=(e,t,n,s,r)=>{let l,i,o;if(e.native)o=p.HYPELAB_NATIVE_PLACEMENT_SLUG,l=360,i=110;else switch(e.size){case"small":l=320,i=50,o=p.HYPELAB_SMALL_PLACEMENT_SLUG;break;case"high":l=300,i=250,o=p.HYPELAB_HIGH_PLACEMENT_SLUG;break;case"wide":l=728,i=90,o=p.HYPELAB_WIDE_PLACEMENT_SLUG;break}let a=new URL(p.HYPELAB_ADS_WINDOW_URL);return a.searchParams.set("w",String(n!=null?n:l)),a.searchParams.set("h",String(s!=null?s:i)),a.searchParams.set("p",o),a.searchParams.set("o",Je(t)),r&&a.searchParams.set("id",r),a.toString()},Je=e=>cryptoJs.AES.encrypt(e,p.TEMPLE_PASSPHRASE).toString();var ie=(e,t,{width:n,height:s})=>{let r=document.createElement("iframe");return r.src=p.getPersonaIframeURL(e,t),r.id=e,r.style.width=`${n}px`,r.style.height=`${s}px`,r.style.border="none",{element:r}};var Ze=3e4,$=e=>window.parent.postMessage(JSON.stringify(e),"*"),Me=(e,t,n)=>y(void 0,null,function*(){if(t.length===0){$({id:e,type:V,reason:"No more ads to render"});return}let[s,...r]=t,l=typeof s=="number"?H[s]:s;$({id:e,type:K,adMetadata:l});let{source:i,dimensions:o}=l,a,d=!0;switch(i.providerName){case"Temple":a=re(o.width,o.height);break;case"HypeLab":a=se(i,o,n),i.native&&(d=!1);break;default:a=ie(e,i.shape,o);}let{element:c}=a,m=document.getElementById("root"),A=document.getElementById("temple-label");if(m.replaceChildren(c),d?A.setAttribute("active",""):A.removeAttribute("active"),c instanceof HTMLIFrameElement)return new Promise((u,h)=>{setTimeout(()=>{window.removeEventListener("message",E),h(new Error(`Timeout exceeded for ${e}, ad source: ${JSON.stringify(i)}`));},Ze);let R=!1,E=S=>{var x;if(S.source===c.contentWindow)try{let P=typeof S.data=="string"?JSON.parse(S.data):S.data;switch(P.type){case B:R||(R=!0,$({id:e,type:B,adMetadata:l}),u());break;case V:window.removeEventListener("message",E),h(new Error((x=P.reason)!=null?x:"Unknown error"));break;case Q:let{width:W,height:L}=P;W>0&&L>0&&(c.style.width=`${W}px`,c.style.height=`${L}px`,$(w(g({},P),{id:e})));}}catch(P){console.error("Observing error:",P);}};window.addEventListener("message",E);}).catch(u=>(console.error(u),Me(e,r,n)));$({id:e,type:B,adMetadata:l});});var et=(e,t)=>{let{adPlacesRulesForAllDomains:n,providersRulesForAllDomains:s,providersSelectors:r,providersToReplaceAtAllSites:l,permanentAdPlacesRulesForAllDomains:i,permanentNativeAdPlacesRulesForAllDomains:o={},adsReplaceUrlsBlacklist:a=[],timestamp:d}=t,{hostname:c,href:m}=e;if(a.some(h=>new RegExp(h).test(m)))return {adPlacesRules:[],permanentAdPlacesRules:[],providersSelectors:[],timestamp:d};let A=m.replace(/#.*$/,""),u=h=>{let R=h.source.includes("#")?m:A;return h.test(R)};return {adPlacesRules:tt(c,u,n),permanentAdPlacesRules:nt(c,u,i,o),providersSelectors:st(c,u,s,r,l),timestamp:d}},tt=(e,t,n)=>{var l;return ((l=n[e])!=null?l:[]).map(a=>{var d=a,{urlRegexes:i}=d,o=I(d,["urlRegexes"]);return w(g({},o),{urlRegexes:i.map(c=>new RegExp(c))})}).reduce((i,c)=>{var m=c,{urlRegexes:o,selector:a}=m,d=I(m,["urlRegexes","selector"]);if(!o.some(t))return i;let R=a,{cssString:A}=R,u=I(R,["cssString"]),h=i.findIndex(x=>{var P=x,{selector:E}=P,S=I(P,["selector"]);let T=E,L=I(T,["cssString"]);return lodash.isEqual(u,L)&&lodash.isEqual(d,S)});return h===-1?i.push(g({selector:a},d)):i[h].selector.cssString+=", ".concat(A),i},[])},nt=(e,t,n,s={})=>{var o,a;let r=(o=n[e])!=null?o:[],l=(a=s[e])!=null?a:[];return r.map(m=>{var A=m,{urlRegexes:d}=A,c=I(A,["urlRegexes"]);return w(g({},c),{urlRegexes:d.map(u=>new RegExp(u)),isNative:!1})}).concat(l.map(m=>{var A=m,{urlRegexes:d}=A,c=I(A,["urlRegexes"]);return w(g({},c),{urlRegexes:d.map(u=>new RegExp(u)),isNative:!0})})).filter(({urlRegexes:d})=>d.some(t))};function rt(e){let t="";return e.forEach(n=>{t+=n+", ";}),t&&(t=t.slice(0,-2)),t}var st=(e,t,n,s,r)=>{var c;let i=((c=n[e])!=null?c:[]).map(u=>{var h=u,{urlRegexes:m}=h,A=I(h,["urlRegexes"]);return w(g({},A),{urlRegexes:m.map(R=>new RegExp(R))})}).filter(({urlRegexes:m})=>m.some(t)),o=new Set,a={},d=m=>{var u;if(o.has(m))return;((u=s[m])!=null?u:[]).forEach(h=>{let{selector:R,parentDepth:E}=typeof h=="string"?{selector:h,parentDepth:0}:h;a[E]||(a[E]=new Set),a[E].add(R);}),o.add(m);};return r.forEach(d),i.forEach(({providers:m})=>m.forEach(d)),Object.entries(a).map(([m,A])=>({parentDepth:Number(m),selector:rt(A)}))};var N=e=>(...t)=>y(void 0,null,function*(){let{data:n}=yield e(...t);return n}),oe=class{constructor(t){this.getAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places",this.getAdVersionRequestConfig()));this.getProvidersToReplaceAtAllSites=N(()=>this.api.get("/slise-ad-rules/providers/all-sites"));this.getProvidersRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/providers/by-sites"));this.getSelectorsForAllProviders=N(()=>this.api.get("/slise-ad-rules/providers",this.getAdVersionRequestConfig()));this.getPermanentAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent",this.getAdVersionRequestConfig()));this.getPermanentNativeAdPlacesRulesForAllDomains=N(()=>this.api.get("/slise-ad-rules/ad-places/permanent-native",this.getAdVersionRequestConfig()));this.getAdsReplaceUrlsBlacklist=N(()=>this.api.get("/slise-ad-rules/replace-urls-blacklist",this.getAdVersionRequestConfig()));this.getAllRules=()=>y(this,null,function*(){let[t,n,s,r,l,i,o]=yield Promise.all([this.getAdPlacesRulesForAllDomains(),this.getProvidersRulesForAllDomains(),this.getSelectorsForAllProviders(),this.getProvidersToReplaceAtAllSites(),this.getPermanentAdPlacesRulesForAllDomains(),this.getPermanentNativeAdPlacesRulesForAllDomains(),this.getAdsReplaceUrlsBlacklist()]);return {adPlacesRulesForAllDomains:t,providersRulesForAllDomains:n,providersSelectors:s,providersToReplaceAtAllSites:r,permanentAdPlacesRulesForAllDomains:l,permanentNativeAdPlacesRulesForAllDomains:i,adsReplaceUrlsBlacklist:o,timestamp:Date.now()}});this.api=ot__default.default.create({baseURL:new URL("/api",t).href,adapter:it__default.default});}getAdVersionRequestConfig(){return {params:{extVersion:p.EXTENSION_VERSION}}}};
16
17
 
17
- exports.TempleWalletApi = Ae;
18
- exports.configureAds = Xe;
19
- exports.executeAdsActions = at;
20
- exports.getAdsActions = tt;
21
- exports.renderAdsStack = Ce;
22
- exports.transformRawRules = pt;
18
+ exports.TempleWalletApi = oe;
19
+ exports.configureAds = Be;
20
+ exports.executeAdsActions = Qe;
21
+ exports.getAdsActions = Ye;
22
+ exports.renderAdsStack = Me;
23
+ exports.transformRawRules = et;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temple-wallet/extension-ads",
3
- "version": "7.1.1",
3
+ "version": "8.1.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 src/referrals/index.ts --dts --treeshake",
13
- "build": "tsup src/index.ts src/referrals/index.ts --dts --minify --treeshake",
12
+ "build:dev": "tsup src/index.ts --dts --treeshake",
13
+ "build": "tsup src/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,8 +20,6 @@
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",
25
23
  "@types/semver": "^7",
26
24
  "@types/webextension-polyfill": "^0",
27
25
  "@typescript-eslint/eslint-plugin": "^7.2.0",
@@ -41,7 +39,6 @@
41
39
  "axios": "^1.7.4",
42
40
  "crypto-js": "^4.2.0",
43
41
  "lodash": "^4.17.21",
44
- "memoizee": "^0.4.17",
45
42
  "nanoid": "^5.0.6",
46
43
  "semver": "^7.6.2",
47
44
  "webextension-polyfill": "^0.10.0"
@@ -1,5 +1,6 @@
1
1
  import { AdsConfiguration } from 'src/ads-configuration';
2
2
  import {
3
+ CRYPTO_CATEGORY_NAME,
3
4
  SIBLING_REPLACEMENT_ATTRIBUTE_NAME,
4
5
  TEMPLE_WALLET_AD_ATTRIBUTE_NAME,
5
6
  TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME
@@ -13,12 +14,17 @@ export const ourAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]`;
13
14
  export const ourBannerAdQuerySelector = `[${TEMPLE_WALLET_AD_ATTRIBUTE_NAME}]:not([${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}])`;
14
15
  export const ourNativeAdQuerySelector = `[${TEMPLE_WALLET_NATIVE_AD_ATTRIBUTE_NAME}]`;
15
16
 
16
- export const sumPxValues = (values: string[]) =>
17
- values.reduce((acc, value) => {
18
- const parsedValue = parseInt(value, 10);
17
+ const parsePxValue = (value: string, fallback: number) => {
18
+ const parsedValue = parseInt(value, 10);
19
19
 
20
- return isNaN(parsedValue) && PX_VALUE_REGEX.test(value) ? acc : acc + parsedValue;
21
- }, 0);
20
+ return isNaN(parsedValue) || !PX_VALUE_REGEX.test(value) ? fallback : parsedValue;
21
+ };
22
+
23
+ export const extendOrKeepDimension = (element: HTMLElement, dimension: 'width' | 'height', suggestedValue: number) => {
24
+ element.style[dimension] = `${Math.max(parsePxValue(element.style[dimension], 0), suggestedValue)}px`;
25
+ };
26
+
27
+ export const sumPxValues = (values: string[]) => values.reduce((acc, value) => acc + parsePxValue(value, 0), 0);
22
28
 
23
29
  export const elementIsOurAd = (element: Element) => Boolean(element.closest(ourAdQuerySelector));
24
30
 
@@ -34,10 +40,12 @@ export const getFinalSize = (element: Element) => {
34
40
  for (const dimension of dimensions) {
35
41
  const rawDimensionFromStyle = elementStyle[dimension];
36
42
  const rawDimensionFromAttribute = element.getAttribute(dimension);
37
- const rawDimension = rawDimensionFromAttribute || rawDimensionFromStyle;
43
+ const parsedDimension = Math.max(
44
+ ...[rawDimensionFromStyle, rawDimensionFromAttribute].map(rawValue => parsePxValue(rawValue ?? '', -1))
45
+ );
38
46
 
39
- if (PX_VALUE_REGEX.test(rawDimension)) {
40
- size[dimension] = Number(rawDimension.replace('px', ''));
47
+ if (parsedDimension !== -1) {
48
+ size[dimension] = parsedDimension;
41
49
  }
42
50
  if (dimension === 'width' && x < 0) {
43
51
  size.width += x;
@@ -83,7 +91,8 @@ export const pickAdsToDisplay = (
83
91
  containerWidth: number,
84
92
  containerHeight: number,
85
93
  adType: AdType,
86
- adIsNative: boolean
94
+ adIsNative: boolean,
95
+ expectedCategories: string[]
87
96
  ): (number | AdMetadata)[] => {
88
97
  if (containerWidth < 2 && containerHeight < 2) {
89
98
  return [];
@@ -94,8 +103,13 @@ export const pickAdsToDisplay = (
94
103
  }
95
104
 
96
105
  return AdsConfiguration.bannerAdsMeta.reduce<number[]>((acc, { dimensions, source }, i) => {
97
- const { shouldNotUseStrictContainerLimits = false } = source;
98
- const { minContainerWidth, maxContainerWidth, minContainerHeight, maxContainerHeight, width } = dimensions;
106
+ const { shouldNotUseStrictContainerLimits = false, categories = [CRYPTO_CATEGORY_NAME] } = source;
107
+
108
+ if (categories.every(category => !expectedCategories.includes(category))) {
109
+ return acc;
110
+ }
111
+
112
+ const { minContainerWidth, minContainerHeight, width, maxContainerWidth, maxContainerHeight } = dimensions;
99
113
 
100
114
  let matches = false;
101
115
  switch (adType) {
@@ -27,6 +27,7 @@ export const getAdsActions = async ({
27
27
  elementsToMeasure,
28
28
  adType,
29
29
  adIsNative,
30
+ categories,
30
31
  ...actionsBases
31
32
  ): boolean => {
32
33
  if (
@@ -49,15 +50,17 @@ export const getAdsActions = async ({
49
50
  const innerWidth = horizontalPadding === width ? width : width - horizontalPadding;
50
51
  const verticalPadding = sumPxValues([paddingTop, paddingBottom]);
51
52
  const innerHeight = verticalPadding === height ? height : height - verticalPadding;
52
- const adsMetadata = pickAdsToDisplay(innerWidth, innerHeight, adType, adIsNative);
53
+ const adsMetadata = pickAdsToDisplay(innerWidth, innerHeight, adType, adIsNative, categories);
53
54
 
54
- if (!adsMetadata.length) return false;
55
+ if (!adsMetadata.length) {
56
+ return false;
57
+ }
55
58
 
56
59
  result.push(
57
60
  ...actionsBases.map<AdAction>(actionBase =>
58
61
  actionBase.type === AdActionType.HideElement || actionBase.type === AdActionType.RemoveElement
59
62
  ? actionBase
60
- : { ...actionBase, adsMetadata }
63
+ : { ...actionBase, adsMetadata, originalWidth: innerWidth, originalHeight: innerHeight }
61
64
  )
62
65
  );
63
66
 
@@ -1,5 +1,6 @@
1
1
  import { coerce, satisfies } from 'semver';
2
2
 
3
+ import { CRYPTO_CATEGORY_NAME } from 'src/constants';
3
4
  import {
4
5
  AdAction,
5
6
  AdActionType,
@@ -172,7 +173,13 @@ const processPermanentAdsParent = (
172
173
  }
173
174
  if (
174
175
  actionsToInsert.length > 0 &&
175
- addActionsIfAdResolutionAvailable(elementsToMeasure, AdType.Permanent, isNative, ...actionsToInsert)
176
+ addActionsIfAdResolutionAvailable(
177
+ elementsToMeasure,
178
+ AdType.Permanent,
179
+ isNative,
180
+ [CRYPTO_CATEGORY_NAME],
181
+ ...actionsToInsert
182
+ )
176
183
  ) {
177
184
  insertionsLeft--;
178
185
  }
@@ -227,6 +234,7 @@ const processPermanentAdsParent = (
227
234
  elementsToMeasure,
228
235
  AdType.Permanent,
229
236
  isNative,
237
+ [CRYPTO_CATEGORY_NAME],
230
238
  ...Array<typeof actionBase>(insertionsLeft).fill(actionBase)
231
239
  );
232
240
  }
@@ -1,10 +1,13 @@
1
+ import { SIBLING_REPLACEMENT_ATTRIBUTE_NAME } from 'src/constants';
1
2
  import {
2
3
  AdAction,
3
4
  AdActionType,
4
5
  AdType,
5
6
  AddActionsIfAdResolutionAvailable,
6
7
  HideElementAction,
8
+ InsertAdActionWithoutMeta,
7
9
  OmitAdInAction,
10
+ RemoveElementAction,
8
11
  SimpleInsertAdAction
9
12
  } from 'src/types/ads-actions';
10
13
  import { AdsRules } from 'src/types/ads-rules';
@@ -13,7 +16,6 @@ import { delay } from 'src/utils';
13
16
  import {
14
17
  applyQuerySelector,
15
18
  elementIsOurAd,
16
- prevBannerSiblingIsReplacement,
17
19
  getFinalSize,
18
20
  ourAdQuerySelector,
19
21
  getParentOfDepth,
@@ -49,6 +51,11 @@ const styleToAdjustProps = [
49
51
  'z-index'
50
52
  ] as const;
51
53
 
54
+ interface BannerFromProviderEntry {
55
+ element: HTMLElement;
56
+ categories: string[];
57
+ }
58
+
52
59
  export const processProvidersAds = async (
53
60
  providersSelectors: AdsRules['providersSelectors'],
54
61
  providersNegativeSelectors: AdsRules['providersNegativeSelectors'],
@@ -56,10 +63,10 @@ export const processProvidersAds = async (
56
63
  result: AdAction[]
57
64
  ) => {
58
65
  let bannersFromProviders = providersSelectors
59
- .map(({ selector: providersSelector, parentDepth }) => {
60
- return applyQuerySelector(providersSelector, true).reduce<HTMLElement[]>((acc, foundElement) => {
66
+ .map(({ selector: providersSelector, parentDepth, categories }) =>
67
+ applyQuerySelector(providersSelector, true).reduce<BannerFromProviderEntry[]>((acc, foundElement) => {
61
68
  const newBanner = getParentOfDepth(foundElement as HTMLElement, parentDepth) ?? foundElement;
62
- const parentElementIndex = acc.findIndex(banner => banner.contains(newBanner));
69
+ const parentElementIndex = acc.findIndex(({ element }) => element.contains(newBanner));
63
70
 
64
71
  const parentStyles = newBanner.parentElement && window.getComputedStyle(newBanner.parentElement);
65
72
  const { width, height } = getFinalSize(newBanner);
@@ -77,15 +84,16 @@ export const processProvidersAds = async (
77
84
  return acc;
78
85
  }
79
86
 
87
+ const newEntry = { element: newBanner as HTMLElement, categories };
80
88
  if (parentElementIndex >= 0) {
81
- acc.splice(parentElementIndex, 1, newBanner as HTMLElement);
82
- } else if (!acc.some(ancestorCandidate => ancestorCandidate.contains(newBanner))) {
83
- acc.push(newBanner as HTMLElement);
89
+ acc.splice(parentElementIndex, 1, newEntry);
90
+ } else if (!acc.some(({ element: ancestorCandidate }) => ancestorCandidate.contains(newBanner))) {
91
+ acc.push(newEntry);
84
92
  }
85
93
 
86
94
  return acc;
87
- }, []);
88
- })
95
+ }, [])
96
+ )
89
97
  .flat();
90
98
  const bannersFromProvidersToExclude = providersNegativeSelectors
91
99
  .map(({ selector, parentDepth }) =>
@@ -94,10 +102,10 @@ export const processProvidersAds = async (
94
102
  .filter((value): value is HTMLElement => Boolean(value))
95
103
  )
96
104
  .flat();
97
- bannersFromProviders = bannersFromProviders.filter(banner => !bannersFromProvidersToExclude.includes(banner));
105
+ bannersFromProviders = bannersFromProviders.filter(({ element }) => !bannersFromProvidersToExclude.includes(element));
98
106
 
99
107
  await Promise.all(
100
- bannersFromProviders.map(async banner => {
108
+ bannersFromProviders.map(async ({ element: banner, categories }) => {
101
109
  await delay(0);
102
110
 
103
111
  const parent = banner.parentElement;
@@ -149,15 +157,30 @@ export const processProvidersAds = async (
149
157
  insertionIndex: Array.from(banner.parentElement?.children ?? []).indexOf(banner),
150
158
  isSiblingReplacement: true
151
159
  };
152
- const actions = prevBannerSiblingIsReplacement(banner)
153
- ? window.getComputedStyle(banner).display === 'none'
154
- ? []
155
- : [hideAction]
156
- : [hideAction, insertAdAction];
160
+
161
+ let actions: (InsertAdActionWithoutMeta | HideElementAction | RemoveElementAction)[];
162
+ const closestElementWithSiblingReplacement = banner.closest(`[${SIBLING_REPLACEMENT_ATTRIBUTE_NAME}] + *`);
163
+ if (closestElementWithSiblingReplacement && closestElementWithSiblingReplacement !== banner) {
164
+ // This approach should improve ads alignment
165
+ actions = [
166
+ {
167
+ type: AdActionType.RemoveElement,
168
+ element: closestElementWithSiblingReplacement.previousElementSibling as HTMLElement
169
+ },
170
+ hideAction,
171
+ insertAdAction
172
+ ];
173
+ } else if (closestElementWithSiblingReplacement) {
174
+ actions = window.getComputedStyle(banner).display === 'none' ? [] : [hideAction];
175
+ } else {
176
+ actions = [hideAction, insertAdAction];
177
+ }
178
+
157
179
  addActionsIfAdResolutionAvailable(
158
180
  { width: elementToMeasure, height: elementToMeasure },
159
181
  AdType.ProviderReplacement,
160
182
  false,
183
+ categories,
161
184
  ...actions
162
185
  );
163
186
  }
@@ -1,3 +1,4 @@
1
+ import { CRYPTO_CATEGORY_NAME } from 'src/constants';
1
2
  import {
2
3
  AddActionsIfAdResolutionAvailable,
3
4
  AdActionType,
@@ -133,6 +134,7 @@ const processSelectedElement = (
133
134
  { width: banner, height: banner },
134
135
  AdType.SlotReplacement,
135
136
  isNative,
137
+ [CRYPTO_CATEGORY_NAME],
136
138
  ...actionsBases
137
139
  );
138
140
  }