@froomle/frontend-sdk 0.0.9 → 0.0.49-TEMPLATE

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.

Potentially problematic release.


This version of @froomle/frontend-sdk might be problematic. Click here for more details.

@@ -1,5 +1,5 @@
1
- "use strict";var FroomleFrontendSdk=(()=>{var we=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var st=(u,e)=>{for(var t in e)we(u,t,{get:e[t],enumerable:!0})},nt=(u,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of tt(e))!rt.call(u,n)&&n!==t&&we(u,n,{get:()=>e[n],enumerable:!(r=et(e,n))||r.enumerable});return u};var it=u=>nt(we({},"__esModule",{value:!0}),u);var ct={};st(ct,{RecommendationItem:()=>W,RecommendationList:()=>Q,Recommendations:()=>z,setConsent:()=>at,setDeviceId:()=>Qe,setEnvironment:()=>Ke,setPageVisit:()=>Xe,setRequestDomain:()=>We,setUserId:()=>ze});var s=class u{static global(e){return u.globals[e]?u.globals[e]:u.globals[e]={}}static createStatic(e,t,r){let n=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(n=r(),r=null),n},set:function(i){r!=null&&(n=r(),r=null),n=i}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return u.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?u.mkIter(e):e.iterator()}static mkIter(e){return new xe(e)}static extend(e){function t(){this[u.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[u.init]&&r[u.init](),this[u.new].apply(this,arguments)}return t?r[u.init]=()=>{let n=e();n[u.init]&&n[u.init](),Object.setPrototypeOf(r.prototype,n.prototype),r[u.init]=void 0}:e&&e[u.init]?(t=!0,r[u.init]=()=>{e[u.init]&&e[u.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[u.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=u.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return u}};s.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;s.globals={};s.new=Symbol();s.init=Symbol();s.fid=0;var xe=s.global("$hxClasses")["genes._Register.ArrayIterator"]=class Pe extends s.inherits(){[s.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return Pe}};xe.prototype.array=null;xe.prototype.current=null;var pt=s.$global,z=function(){};z.__isInterface__=!0;var Q=function(){};Q.__isInterface__=!0;var W=function(){};W.__isInterface__=!0;var yt=s.$global,me=s.global("$hxClasses")["haxe.ValueException"]=class Se extends s.inherits(()=>k,!0){[s.new](e,t,r){super[s.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return k}get __class__(){return Se}};me.prototype.value=null;var vt=s.$global,k=s.global("$hxClasses")["haxe.Exception"]=class ne extends s.inherits(()=>Error,!0){[s.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof ne?e:e instanceof Error?new ne(e.message,null,e):new me(e,null,e)}static thrown(e){return e instanceof ne?e.get_native():e instanceof Error?e:new me(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return ne}};k.prototype.native=null;k.prototype.__skipStack=null;k.prototype.__nativeException=null;k.prototype.__previousException=null;var Dt=s.$global,ve=s.global("$hxClasses")["js.Browser"]=class $e{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw k.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return $e}};var Pt=s.$global,F=s.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(u=>({_hx_index:3,__enum__:"haxe.io.Error",e:u}),{_hx_name:"Custom",__params__:["e"]})};F.__constructs__=[F.Blocked,F.Overflow,F.OutsideBounds,F.Custom];F.__empty_constructs__=[F.Blocked,F.Overflow,F.OutsideBounds];var qt=s.$global,H=s.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};H.__constructs__=[H.UTF8,H.RawNative];H.__empty_constructs__=[H.UTF8,H.RawNative];var Tt=s.$global,G=s.global("$hxClasses")["haxe.io.Bytes"]=class Re extends s.inherits(){[s.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw k.thrown(F.OutsideBounds);r==null&&(r=H.UTF8);let n="",i=this.b,o=e,a=e+t;switch(r._hx_index){case 0:let y=e>0;for(;o<a;){let d=i[o++];if(d<128){if(d==0)break;n+=String.fromCodePoint(d)}else if(d<224){let c=(d&63)<<6|i[o++]&127;n+=String.fromCodePoint(c)}else if(d<240){let c=i[o++],g=(d&31)<<12|(c&127)<<6|i[o++]&127;n+=String.fromCodePoint(g)}else{let c=i[o++],g=i[o++],m=(d&15)<<18|(c&127)<<12|(g&127)<<6|i[o++]&127;n+=String.fromCodePoint(m)}}break;case 1:for(;o<a;){let d=i[o++]|i[o++]<<8;n+=String.fromCodePoint(d)}break}return n}static ofData(e){let t=e.hxBytes;return t!=null?t:new Re(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return Re}};G.prototype.length=null;G.prototype.b=null;var jt=s.$global,T=s.global("$hxClasses")["haxe.http.HttpBase"]=class qe extends s.inherits(){[s.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=s.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,n=this.headers.length;for(;r<n;){let i=r++;if(this.headers[i].name==e){this.headers[i]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return s.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,H.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return qe}};T.prototype.url=null;T.prototype.responseBytes=null;T.prototype.responseAsString=null;T.prototype.postData=null;T.prototype.postBytes=null;T.prototype.headers=null;T.prototype.params=null;T.prototype.emptyOnData=null;var Jt=s.$global,pe=s.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Be extends s.inherits(){[s.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Be}};pe.prototype.map=null;pe.prototype.keys=null;var zt=s.$global,Ie=function(){};Ie.__isInterface__=!0;var Gt=s.$global,Ee=s.global("$hxClasses")["js.Boot"]=class ie{static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let d=s.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],c=d._hx_name;return d.__params__?(t=t+" ",c+"("+(function(g){var m;let E=[];{let _=0,p=d.__params__;for(;_<p.length;){let v=p[_];_=_+1,E.push(ie.__string_rec(e[v],t))}}return m=E,m})(this).join(",")+")"):c}if(e instanceof Array){let y="[";t+=" ";let d=0,c=e.length;for(;d<c;){let g=d++;y+=(g>0?",":"")+ie.__string_rec(e[g],t)}return y+="]",y}let n;try{n=e.toString}catch{return"???"}if(n!=null&&n!=Object.toString&&typeof n=="function"){let y=e.toString();if(y!="[object Object]")return y}let i=`{
2
- `;t+=" ";let o=e.hasOwnProperty!=null,a=null;for(a in e)o&&!e.hasOwnProperty(a)||a=="prototype"||a=="__class__"||a=="__super__"||a=="__interfaces__"||a=="__properties__"||(i.length!=2&&(i+=`,
3
- `),i+=t+a+" : "+ie.__string_rec(e[a],t));return t=t.substring(1),i+=`
4
- `+t+"}",i;break;case"string":return e;default:return String(e)}}static get __name__(){return"js.Boot"}get __class__(){return ie}};Ee.__toStr={}.toString;var tr=s.$global,$=s.global("$hxClasses").Std=class Ve{static string(e){return Ee.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static get __name__(){return"Std"}get __class__(){return Ve}};String.__name__=!0,Array.__name__=!0;var ir=s.$global,de=s.global("$hxClasses")["genes.util.EsMap"]=class le extends s.inherits(){[s.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return le.adaptIterator(this.inst.keys())}iterator(){return le.adaptIterator(this.inst.values())}toString(){let e=[],t=le.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+$.string(r)+" => "+$.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,n=function(){let i=e.next();t=i.value,r=i.done};return{hasNext:function(){return r==null&&n(),!r},next:function(){r==null&&n();let i=t;return n(),i}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return le}};de.prototype.inst=null;var gr=s.$global,Ae=s.global("$hxClasses")["haxe.ds.StringMap"]=class De extends s.inherits(de){[s.new](){super[s.new]()}copy(){let e=new De;return e.inst=new Map(this.inst),e}keyValueIterator(){return new pe(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Ie]}static get __super__(){return de}get __class__(){return De}};var pr=s.$global,B=s.global("$hxClasses").HxOverrides=class Oe{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return Oe}};typeof performance!="undefined"&&typeof performance.now=="function"&&(B.now=performance.now.bind(performance));var yr=s.$global,J=s.global("$hxClasses").StringTools=class he{static isSpace(e,t){let r=B.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&he.isSpace(e,r);)++r;return r>0?B.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&he.isSpace(e,t-r-1);)++r;return r>0?B.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return he}};var xr=s.$global,Fe=s.global("$hxClasses").Lambda=class Te{static exists(e,t){let r=s.getIterator(e);for(;r.hasNext();){let n=r.next();if(t(n))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return Te}};var kr=s.$global,oe=s.global("$hxClasses").EReg=class He extends s.inherits(){[s.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw k.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw k.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:B.substr(e,0,t+r));let n=this.r.m!=null;return n&&(this.r.s=e),n}else{let n=this.match(r<0?B.substr(e,t,null):B.substr(e,t,r));return n&&(this.r.s=e,this.r.m.index+=t),n}}map(e,t){let r=0,n="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){n+=$.string(B.substr(e,r,null));break}let i=this.matchedPos();n+=$.string(B.substr(e,r,i.pos-r)),n+=$.string(t(this)),i.len==0?(n+=$.string(B.substr(e,i.pos,1)),r=i.pos+1):r=i.pos+i.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(n+=$.string(B.substr(e,r,null))),n}static get __name__(){return"EReg"}get __class__(){return He}};oe.prototype.r=null;var Hr=s.$global,Y=s.global("$hxClasses")["haxe.http.HttpJs"]=class Le extends s.inherits(T){[s.new](e){this.async=!0,this.withCredentials=!1,super[s.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=ve.createXMLHttpRequest(),r=this,n=function(c){if(t.readyState!=4)return;let g;try{g=t.status}catch{g=null}if(g==0&&ve.get_supported()&&s.$global.location!=null){let m=s.$global.location.protocol.toLowerCase();new oe("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(m)&&(g=t.response!=null?200:404)}if(g==null&&(g=null),g!=null&&r.onStatus(g),g!=null&&g>=200&&g<400){r.req=null;let m=t.getAllResponseHeaders().split(`\r
5
- `),E=[],_=0,p=m;for(;_<p.length;){let w=p[_];++_,w!=""&&E.push(w)}m=E;let v=new Ae;r.responseHeaders=v;let b=0;for(;b<m.length;){let w=m[b];++b;let q=w.split(": "),O=q.shift(),x=q.length==1?q[0]:q.join(": ");x=J.ltrim(J.rtrim(x)),r.responseHeaders.inst.set(O,x)}r.success(G.ofData(t.response))}else if(g==null||g==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(g==null){r.req=null;let m=t.response!=null?G.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}else switch(g){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let m=t.response!=null?G.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=n);let i,o=this.postData,a=this.postBytes;if(o==null)if(a==null)i=null;else{let c=a;i=new Blob([c.b.bufferValue])}else a==null?i=o:i=null;if(i!=null)e=!0;else{let c=0,g=this.params;for(;c<g.length;){let m=g[c];++c,i==null?i="":i=(i==null?"null":$.string(i))+"&";let E=m.name,_=(i==null?"null":$.string(i))+encodeURIComponent(E)+"=",p=m.value;i=_+encodeURIComponent(p)}}try{if(e)t.open("POST",this.url,this.async);else if(i!=null){let c=this.url.split("?").length<=1;t.open("GET",this.url+(c?"?":"&")+(i==null?"null":$.string(i)),this.async),i=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(c){let g=k.caught(c).unwrap();this.req=null,this.onError(g.toString());return}t.withCredentials=this.withCredentials,!Fe.exists(this.headers,function(c){return c.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let y=0,d=this.headers;for(;y<d.length;){let c=d[y];++y,t.setRequestHeader(c.name,c.value)}t.send(i),this.async||n(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return T}get __class__(){return Le}};Y.prototype.async=null;Y.prototype.withCredentials=null;Y.prototype.responseHeaders=null;Y.prototype.req=null;var jr=s.$global,j=s.global("$hxClasses").SimpleFuture=class Ue extends s.inherits(){[s.new](){this._isFinished=!1}trigger(e){this._result=e,this._isFinished=!0,this._callback!=null&&this._callback(this._result)}then(e){this._callback=e,this._isFinished&&e(this._result)}static get __name__(){return"SimpleFuture"}get __class__(){return Ue}};j.prototype._callback=null;j.prototype._result=null;j.prototype._isFinished=null;var Jr=s.$global,I=s.global("$hxClasses").Reflect=class je{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let n;return e.__properties__?(r=e.__properties__["get_"+t],n=r):n=!1,n?e[r]():e[t]}}static setProperty(e,t,r){let n,i;e.__properties__?(n=e.__properties__["set_"+t],i=n):i=!1,i?e[n](r):e[t]=r}static fields(e){let t=[];if(e!=null){let n=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&n.call(e,r)&&t.push(r)}return t}static get __name__(){return"Reflect"}get __class__(){return je}};var es=s.$global,l=s.global("$hxClasses")["internal.RecoBackendV2"]=class f extends s.inherits(){[s.new](){}static _requestUri(){return"https://"+f._req_domain+"/api/"+f._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:f._page_visit!=null?f._page_visit:f._page_view,channel:"www-desktop"};if(f._consent==0){let r=f.noConsentBody(),n=0,i=I.fields(r);for(;n<i.length;){let o=i[n];++n,t[o]=I.field(r,o)}}else f._user_id!=null?t.user_id=f._user_id:t.device_id=f._device_id;return t}static _requestRecos(e){let t=new j,r=null,n=new Y(f._requestUri());n.setHeader("Content-Type","application/json"),n.setPostData(JSON.stringify(f.buildRequestBody(e))),n.onError=function(a){throw k.thrown("HTTP Request Error: "+a)},n.onStatus=function(a){if(a<200||a>=300)throw k.thrown("HTTP Status Error: "+a)};try{n.request(!1)}catch(a){let y=k.caught(a).unwrap();throw k.thrown("Failed to execute synchronous request: "+$.string(y))}let i=function(a){let y=JSON.parse(a),d=Z.fromRequestData(y);t.trigger(d)},o=n.get_responseData();return o!=null?i(o):n.onData=i,t}static getRawRecommendations(e){return f._requestRecos(e)}static setConsent(e){e>2&&(e=2),f._consent=e}static setChannel(e){f._channel=e}static setPageVisit(e){f._page_visit=e}static setEnvironment(e){f._environment=e}static setDeviceId(e){f._device_id=e}static setUserId(e){f._user_id=e}static setRequestDomain(e){f._req_domain=e}static setPageView(e){f._page_view=e}static getRequestDomain(){return f._req_domain}static getEnvironment(){return f._environment}static getPageVisit(){return f._page_visit}static getUserId(){return f._user_id}static getDeviceId(){return f._device_id}static getPageView(){return f._page_view}static getConsent(){return f._consent}static getChannel(){return f._channel}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return f}};l._environment=null;l._device_id="no-consent";l._user_id=null;l._consent=0;l._req_domain="europe-west1.froomle.com";l._page_visit=null;l._page_view=null;l._channel="www-desktop";var lt=function(){};lt.__isInterface__=!0;var ot=function(){};ot.__isInterface__=!0;var Z=s.global("$hxClasses")["internal._RecommendationsInternal"]=class ke extends s.inherits(){[s.new](e,t,r,n,i){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=n,this._lists=i}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let n=r[t];++t;let i=0,o=n.items;for(;i<o.length;){let a=o[i];++i,e.push(a)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let n=r[t];if(++t,n.list_name==e)return n}return null}static fromRequestData(e){let t=I.getProperty(e,"lists"),r=[],n=0;for(;n<t.length;){let i=t[n];++n;let o=I.getProperty(i,"items"),a=[],y=0;for(;y<o.length;){let c=o[y];++y,a.push(new ae(c))}let d=new ee({limit:I.getProperty(i,"limit"),list_key:I.getProperty(i,"list_key"),list_name:I.getProperty(i,"list_name"),list_size:I.getProperty(i,"list_size"),items:a});r.push(d)}return new ke(I.getProperty(e,"device_id"),I.getProperty(e,"request_id"),I.getProperty(e,"user_group"),I.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[z]}get __class__(){return ke}};Z.prototype.request_id=null;Z.prototype.user_group=null;Z.prototype.user_id=null;Z.prototype.device_id=null;Z.prototype._lists=null;var ee=s.global("$hxClasses")["internal._RecommendationsListInternal"]=class Ne extends s.inherits(){[s.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[Q]}get __class__(){return Ne}};ee.prototype.limit=null;ee.prototype.list_key=null;ee.prototype.list_name=null;ee.prototype.list_size=null;ee.prototype.items=null;var ae=s.global("$hxClasses")["internal._RecommendationItemInternal"]=class Me extends s.inherits(){[s.new](e){this._data={},this.Id=I.getProperty(e,"item_id"),this.RequestId=I.getProperty(e,"request_id"),this.UserGroup=I.getProperty(e,"user_group");let t=0,r=I.fields(e);for(;t<r.length;){let n=r[t];++t,this._data[n]=I.field(e,n)}}get(e){return this._data[e]}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[W]}get __class__(){return Me}};ae.prototype.Id=null;ae.prototype.RequestId=null;ae.prototype.UserGroup=null;ae.prototype._data=null;var C=s.global("$hxClasses")["internal._RecoBackendV2.RecoBackendV2_Fields_"]=class Je{static getRawRecommendations(e){return l.getRawRecommendations(e)}static setConsent(e){l.setConsent(e)}static setPageVisit(e){l.setPageVisit(e)}static setEnvironment(e){l.setEnvironment(e)}static setDeviceId(e){l.setDeviceId(e)}static setUserId(e){l.setUserId(e)}static setRequestDomain(e){l.setRequestDomain(e)}static setPageView(e){l.setPageView(e)}static setChannel(e){l.setChannel(e)}static getRequestDomain(){l.getRequestDomain()}static getConsent(){l.getConsent()}static getPageVisit(){l.getPageVisit()}static getEnvironment(){l.getEnvironment()}static getDeviceId(){l.getDeviceId()}static getUserId(){l.getUserId()}static getPageView(){l.getPageView()}static getChannel(){l.getChannel()}static get __name__(){return"internal._RecoBackendV2.RecoBackendV2_Fields_"}get __class__(){return Je}},ts=C.getRawRecommendations,rs=C.setConsent,ss=C.setPageVisit,ns=C.setEnvironment,is=C.setDeviceId,ls=C.setUserId,os=C.setRequestDomain,as=C.setPageView,us=C.setChannel,cs=C.getRequestDomain,gs=C.getConsent,_s=C.getPageVisit,ms=C.getEnvironment,ps=C.getDeviceId,ds=C.getUserId,hs=C.getPageView,fs=C.getChannel;var xs=s.$global,A=s.global("$hxClasses").FroomleSdk=class V{static register(){V.registered||V._env_set&&(!V._page_visit_set&&!V._page_view_set||(V.registered=!0))}static buildScriptTag(){let e='<script src="https://cdn.froomle.com/reco-backend-v2/0.0.9/reco-backend-v2.min.js" data-froomle-env="'+l.getEnvironment()+'" ';return l.getPageVisit()!=null&&(e+='data-froomle-page-visit="'+l.getPageVisit()+'" '),l.getPageView()!=null&&(e+='data-froomle-page-view="'+l.getPageView()+'" '),l.getDeviceId()!=null&&(e+='data-froomle-device-id="'+l.getDeviceId()+'" '),l.getUserId()!=null&&(e+='data-froomle-user-id="'+l.getUserId()+'" '),l.getConsent()>0&&(e+='data-froomle-consent="'+l.getConsent()+'" '),l.getRequestDomain()!=null&&(e+='data-froomle-request-domain="'+l.getRequestDomain()+'" '),e+="><\/script>",e}static setEnvironment(e){l.setEnvironment(e),V._env_set=!0,V.register()}static setDeviceId(e){l.setDeviceId(e)}static setUserId(e){l.setUserId(e)}static setConsent(e){l.setConsent(e)}static setPageView(e){l.setPageView(e),V._page_view_set=!0,V.register()}static setPageVisit(e){l.setPageVisit(e),V._page_visit_set=!0,V.register()}static setRequestDomain(e){l.setRequestDomain(e)}static getRawRecommendations(e){return l.getRawRecommendations(e)}static getVersion(){return"0.0.9"}static get __name__(){return"FroomleSdk"}get __class__(){return V}};A._env_set=!1;A._page_visit_set=!1;A._page_view_set=!1;A.registered=!1;var Is=s.$global,te=s.global("$hxClasses")["internal.domHandler.FroomleDomTree"]=class fe extends s.inherits(){[s.new](){}createElement(e){return window.document.createElement(e)}querySelectorAll(e){let t=this.root,r=[],n=t.querySelectorAll(e),i=0,o=n.length;for(;i<o;){let a=i++;r.push(n.item(a))}return r}getRoot(){return this.root}toString(){return this.root.outerHTML}static run(){}static fromHtml(e){return new fe}static fromDocument(){let e=new fe;return e.root=window.document,e}static get __name__(){return"internal.domHandler.FroomleDomTree"}get __class__(){return fe}};te.prototype.root=null;var ks=s.$global,L=s.global("$hxClasses")["internal._ADomNode.ADomNode"]=class Ce{static _new(e){return e}static fromElement(e){return e}static create(e,t){return window.document.createElement(t)}static replaceChild(e,t,r){e.replaceChild(t,r)}static get attributes(){return this.get_attributes()}static get_attributes(e){let t=e,r=[],n=0,i=t.attributes.length;for(;n<i;){let o=n++,a=t.attributes.item(o);r.push({name:a.name,value:a.value})}return r}static addChild(e,t){e.appendChild(t)}static removeChild(e,t){e.removeChild(t)}static getAttribute(e,t){return e.getAttribute(t)}static setAttribute(e,t,r){e.setAttribute(t,r)}static getText(e){return e.textContent}static setText(e,t){e.textContent=t}static get children(){return this.get_children()}static get_children(e){let t=[],n=e.children,i=0,o=n.length;for(;i<o;){let a=i++;t.push(n[a])}return t}static querySelectorAll(e,t){let r=e,n=[],i=r.querySelectorAll(t),o=0,a=i.length;for(;o<a;){let y=o++;n.push(i.item(y))}return n}static getFilterKeyValue(e){let t=0,r=Ce.get_attributes(e);for(;t<r.length;){let n=r[t];if(++t,n.name.startsWith("data-froomle-reco-filter-"))return{key:n.name.substring(25),value:n.value}}return{key:null,value:null}}static get __name__(){return"internal._ADomNode.ADomNode_Impl_"}get __class__(){return Ce}};var Hs=s.$global,ue=s.global("$hxClasses")["internal.domHandler.DomDomDom"]=class K extends s.inherits(){[s.new](){}static _fillRecoTargets(e){let t=new j;if(e==null)return t.trigger(!1),t;let r=[],n=e,i=[],o=n.querySelectorAll("*"),a=0,y=o.length;for(;a<y;){let h=a++;i.push(o.item(h))}let d=i,c=0;for(;c<d.length;){let h=d[c];++c;let D=0,R=L.get_attributes(h);for(;D<R.length;){let M=R[D];++D,M.name=="data-froomle-reco"&&r.push(h)}}let g=[],m=0;for(;m<r.length;){let h=r[m];++m,h.getAttribute("data-froomle-request-id")==null&&(h.getAttribute("data-froomle-id")==null||h.getAttribute("data-froomle-id")=="")&&g.push(h)}if(g.length<1)return new j;let E=[],_=[],p="",v="",b="",w=[],q=function(){let h={list_name:p,list_size:w.length,limit:w.length};v!=null&&I.setProperty(h,v,b),E.push(h),_.push(w)},O=function(h,D,R,M){p=h,v=D,b=R,w=[M]},x=0;for(;x<g.length;){let h=g[x];++x;let D=h.getAttribute("data-froomle-reco"),R=L.getFilterKeyValue(h);if(p==""){O(D,R.key,R.value,h);continue}else if(D==p&&R.key==v&&R.value==b){w.push(h);continue}else{q(),O(D,R.key,R.value,h);continue}}return p!=""&&q(),C.getRawRecommendations(E).then(function(h){let D=0,R=h.lists();for(;D<R.length;){let M=R[D],N=D++,U=M,X=U.items.length!=_[N].length,se=0,ye=U.items;for(;se<ye.length;){let be=ye[se],Ye=se++,Ze=be;K._fillParameters(_[N][Ye],Ze,h.request_id)}}t.trigger(!0)}),t}static _fillParameters(e,t,r){let n=function(m,E,_,p){p==null&&(p="");let v=function(b,w,q){q==null&&(q="fgh");try{w=new oe("\\\\[(\\\\w+)\\\\]","g").map(w,function(R){return"."+R.matched(1)}),w=J.replace(w,"[","."),w=J.replace(w,"]",""),B.cca(w,0)==46&&(w=B.substr(w,1,null));let x=w.split("."),S=b.get(x[0]),h=1,D=x.length;for(;h<D;){let R=h++;if(S==null)return null;S instanceof Array&&$.parseInt(x[R])!=null?S=S[$.parseInt(x[R])]:S=I.field(S,x[R])}return S}catch{return q}};try{let b=v(t,_,p);E=="inner"?m.textContent=b:m.setAttribute(E,b)}catch{}};e.setAttribute("data-froomle-id",t.Id),e.setAttribute("data-froomle-request-id",r);let i=e,o=[],a=i.querySelectorAll("*"),y=0,d=a.length;for(;y<d;){let m=y++;o.push(a.item(m))}let c=o,g=0;for(;g<c.length;){let m=c[g];++g;let E=0,_=L.get_attributes(m);for(;E<_.length;){let p=_[E];if(++E,p.name.startsWith("data-froomle-param-")){let v=J.replace(p.name,"data-froomle-param-",""),b=p.value;n(m,v,b)}}}}static _orderElements(e){let t=function(_,p,v){let b=[],w=L.get_children(_),q=0;for(;q<w.length;){let S=w[q];if(++q,S.getAttribute("data-froomle-ordervalue")!=null){b.push(S);let D=L.create(e,"span");D.setAttribute("data-froomle-tmp-node",""),L.replaceChild(_,D,S)}}let O=[],x=0;for(;x<b.length;){let S=b[x];++x,O.push(S.getAttribute("data-froomle-ordervalue"))}return{el:_,key:p,values:O,orderChildren:b,list_name:v}},r=new j,n=e.getRoot(),i=[],o=n.querySelectorAll("*"),a=0,y=o.length;for(;a<y;){let _=a++;i.push(o.item(_))}let d=i,c=[],g=0;for(;g<d.length;){let _=d[g];++g;let p=0,v=L.get_attributes(_);for(;p<v.length;){let b=v[p];++p,b.name.startsWith("data-froomle-order-")&&c.push(t(_,b.name.substring(19),b.value))}}if(c.length<1)return r.trigger(!1),r;let m=[],E=0;for(;E<c.length;){let _=c[E];++E;let p={list_name:_.list_name,limit:_.values.length,list_size:_.values.length},v={};I.setProperty(v,_.key,_.values),I.setProperty(p,"order",v),m.push(p)}return C.getRawRecommendations(m).then(function(_){let p=0,v=_.lists();for(;p<v.length;){let b=v[p],q=p++,O=b,x=c[q];x.el.setAttribute("data-froomle-request-id",_.request_id);let S=[],h=0,D=O.items;for(;h<D.length;){let _e=D[h];++h;let N=_e.get(x.key),U=0,X=x.values;for(;U<X.length;){let se=X[U],be=U++;if(N==se){S.push(x.orderChildren[be]);break}}}let R=0,M=S.length;for(;R<M;){let _e=R++,N=0,U=L.get_children(x.el);for(;N<U.length;){let X=U[N];if(++N,X.getAttribute("data-froomle-tmp-node")==""){L.replaceChild(x.el,S[_e],X);break}}}}r.trigger(!0)}),r}static domInit(e){K._orderElements(e).then(function(t){K._fillRecoTargets(e.getRoot())})}static fillElementRecos(e){K._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t=te.fromHtml(e);return K.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return K}};var js=s.$global;var P=class P{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e=[];for(let t of P.impressionQueue){let r={event_type:"impression",page_type:l.getPageVisit(),action_item:t.getAttribute("data-froomle-id"),action_item_type:"article",channel:"www-desktop"};l.getUserId()?r.user_id=l.getUserId():r.device_id=l.getDeviceId();let n=t.getAttribute("data-froomle-reco");if(n){r.list_name=n;let i=t.getAttribute("data-froomle-request-id");if(!i)throw console.error("element need reco but doesnt have request id registered yet"),new Error("element need reco but doesnt have request id registered");r.request_id=i}}return P.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){P.impressionQueue.length!==0&&fetch(P.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:P.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=P.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){P.observer.observe(e)}static processDocument(){if(l.getDeviceId()!="no-consent"){for(let e of document.querySelectorAll("[data-froomle-id]"))P.intersectsWithViewPortRect(e)?P.impressionQueue.push(e):P.addIntersectionImpressionListener(e);P.sendImpressions()}}};P.impressionQueue=[],P.observer=new IntersectionObserver((e,t)=>{e.forEach(r=>{r.isIntersecting&&(P.impressionQueue.push(r.target),P.observer.unobserve(r.target))}),P.impressionQueue.length>0&&P.sendImpressions()});var re=P;var ce=class u{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e={event_type:"page_visit",page_type:l.getPageVisit(),channel:"www-desktop"};return l.getUserId()?e.user_id=l.getUserId():e.device_id=l.getDeviceId(),JSON.stringify(e)}static sendPageVisit(){l.getPageVisit()&&l.getDeviceId()!="no-consent"&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()})}};var ge=class u{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e={event_type:"detail_pageview",page_type:"article_detail",action_item:l.getPageView(),action_item_type:"article",channel:"www-desktop"};return l.getUserId()?e.user_id=l.getUserId():e.device_id=l.getDeviceId(),JSON.stringify(e)}static sendPageView(){l.getPageView()&&l.getDeviceId()!="no-consent"&&fetch(u.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:u.generateBody()})}};var Ke=A.setEnvironment,Xe=A.setPageVisit,at=A.setConsent,ze=A.setUserId,Qe=A.setDeviceId,We=A.setRequestDomain,ut=A.setPageView;if(typeof document!="undefined"){let u=document.currentScript;if(u){let e=u.getAttribute("data-froomle-device-id"),t=u.getAttribute("data-froomle-user-id"),r=u.getAttribute("data-froomle-env"),n=u.getAttribute("data-froomle-page-visit"),i=u.getAttribute("data-froomle-request-domain"),o=u.getAttribute("data-froomle-page-view");Ke(r),o&&ut(o),n&&Xe(n),e&&Qe(e),t&&ze(t),i&&We(i)}else console.error("Froomle SDK: could not find the script tag where the sdk is included.");document.addEventListener("DOMContentLoaded",()=>{ue.domInit(te.fromDocument()),re.processDocument(),ce.sendPageVisit(),ge.sendPageView(),new MutationObserver(t=>{for(let r of t)if(r.type==="childList"&&re.processElement(r.target),r.type==="attributes")if(r.attributeName==="data-froomle-reco"){let n=r.target.getAttribute("data-froomle-request-id");(!n||n==="")&&ue.fillElementRecos(r.target)}else r.attributeName==="data-froomle-request-id"&&ue.fillElementRecos(r.target)}).observe(document,{childList:!0,subtree:!0})})}return it(ct);})();
1
+ "use strict";var FroomleFrontendSdk=(()=>{var ke=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var ht=Object.prototype.hasOwnProperty;var ft=(f,e)=>{for(var t in e)ke(f,t,{get:e[t],enumerable:!0})},dt=(f,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of pt(e))!ht.call(f,n)&&n!==t&&ke(f,n,{get:()=>e[n],enumerable:!(r=mt(e,n))||r.enumerable});return f};var yt=f=>dt(ke({},"__esModule",{value:!0}),f);var Dt={};ft(Dt,{FroomleDomTree:()=>nt,RecoBackendV2:()=>o,RecommendationItem:()=>pe,RecommendationList:()=>me,Recommendations:()=>ge,_RecommendationItemInternal:()=>se,addHistories:()=>Pt,getRecommendations:()=>$t,sendEvent:()=>st,setConsent:()=>ot,setContextItem:()=>It,setContextItemType:()=>Ct,setCustomVariable:()=>St,setDeviceId:()=>ut,setEnvironment:()=>it,setPageVisit:()=>lt,setRequestDomain:()=>_t,setSafeRequest:()=>ct,setUserId:()=>at});var i=class f{static global(e){return f.globals[e]?f.globals[e]:f.globals[e]={}}static createStatic(e,t,r){let n=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(n=r(),r=null),n},set:function(s){r!=null&&(n=r(),r=null),n=s}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return f.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?f.mkIter(e):e.iterator()}static mkIter(e){return new $e(e)}static extend(e){function t(){this[f.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[f.init]&&r[f.init](),this[f.new].apply(this,arguments)}return t?r[f.init]=()=>{let n=e();n[f.init]&&n[f.init](),Object.setPrototypeOf(r.prototype,n.prototype),r[f.init]=void 0}:e&&e[f.init]?(t=!0,r[f.init]=()=>{e[f.init]&&e[f.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[f.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=f.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return f}};i.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;i.globals={};i.new=Symbol();i.init=Symbol();i.fid=0;var $e=i.global("$hxClasses")["genes._Register.ArrayIterator"]=class He extends i.inherits(){[i.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return He}};$e.prototype.array=null;$e.prototype.current=null;var Tt=i.$global,Ee=i.global("$hxClasses")["haxe.ValueException"]=class Le extends i.inherits(()=>C,!0){[i.new](e,t,r){super[i.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return C}get __class__(){return Le}};Ee.prototype.value=null;var jt=i.$global,C=i.global("$hxClasses")["haxe.Exception"]=class de extends i.inherits(()=>Error,!0){[i.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof de?e:e instanceof Error?new de(e.message,null,e):new Ee(e,null,e)}static thrown(e){return e instanceof de?e.get_native():e instanceof Error?e:new Ee(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return de}};C.prototype.native=null;C.prototype.__skipStack=null;C.prototype.__nativeException=null;C.prototype.__previousException=null;var Jt=i.$global,S=i.global("$hxClasses").Std=class je{static string(e){return ye.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static get __name__(){return"Std"}get __class__(){return je}};Object.defineProperty(String.prototype,"__class__",{value:String,enumerable:!1,writable:!0}),String.__name__=!0,Array.__name__=!0,bt={},wt={},vt=Number,xt=Boolean,Rt={},Et={};var bt,wt,vt,xt,Rt,Et;var Kt=i.$global,ye=i.global("$hxClasses")["js.Boot"]=class j{static getClass(e){if(e==null)return null;if(e instanceof Array)return Array;{let t=e.__class__;if(t!=null)return t;let r=j.__nativeClassName(e);return r!=null?j.__resolveNativeClass(r):null}}static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let u=i.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],c=u._hx_name;return u.__params__?(t=t+" ",c+"("+(function(g){var _;let y=[];{let v=0,b=u.__params__;for(;v<b.length;){let I=b[v];v=v+1,y.push(j.__string_rec(e[I],t))}}return _=y,_})(this).join(",")+")"):c}if(e instanceof Array){let h="[";t+=" ";let u=0,c=e.length;for(;u<c;){let g=u++;h+=(g>0?",":"")+j.__string_rec(e[g],t)}return h+="]",h}let n;try{n=e.toString}catch{return"???"}if(n!=null&&n!=Object.toString&&typeof n=="function"){let h=e.toString();if(h!="[object Object]")return h}let s=`{
2
+ `;t+=" ";let l=e.hasOwnProperty!=null,a=null;for(a in e)l&&!e.hasOwnProperty(a)||a=="prototype"||a=="__class__"||a=="__super__"||a=="__interfaces__"||a=="__properties__"||(s.length!=2&&(s+=`,
3
+ `),s+=t+a+" : "+j.__string_rec(e[a],t));return t=t.substring(1),s+=`
4
+ `+t+"}",s;break;case"string":return e;default:return String(e)}}static __interfLoop(e,t){if(e==null)return!1;if(e==t)return!0;let r=e.__interfaces__;if(r!=null&&(e.__super__==null||e.__super__.__interfaces__!=r)){let n=0,s=r.length;for(;n<s;){let l=n++,a=r[l];if(a==t||j.__interfLoop(a,t))return!0}}return j.__interfLoop(e.__super__,t)}static __instanceof(e,t){if(t==null)return!1;switch(t){case Array:return e instanceof Array;case"$hxCoreType__Bool":return typeof e=="boolean";case"$hxCoreType__Dynamic":return e!=null;case"$hxCoreType__Float":return typeof e=="number";case"$hxCoreType__Int":return typeof e=="number"?(e|0)===e:!1;case String:return typeof e=="string";default:if(e!=null){if(typeof t=="function"){if(j.__downcastCheck(e,t))return!0}else if(typeof t=="object"&&j.__isNativeObj(t)&&e instanceof t)return!0}else return!1;return t=="$hxCoreType__Class"&&e.__name__!=null||t=="$hxCoreType__Enum"&&e.__ename__!=null?!0:e.__enum__!=null?i.global("$hxEnums")[e.__enum__]==t:!1}}static __downcastCheck(e,t){return e instanceof t?!0:t.__isInterface__?j.__interfLoop(j.getClass(e),t):!1}static __cast(e,t){if(e==null||j.__instanceof(e,t))return e;throw C.thrown("Cannot cast "+S.string(e)+" to "+S.string(t))}static __nativeClassName(e){let t=j.__toStr.call(e).slice(8,-1);return t=="Object"||t=="Function"||t=="Math"||t=="JSON"?null:t}static __isNativeObj(e){return j.__nativeClassName(e)!=null}static __resolveNativeClass(e){return i.$global[e]}static get __name__(){return"js.Boot"}get __class__(){return j}};ye.__toStr={}.toString;var er=i.$global,De=i.global("$hxClasses")["js.Browser"]=class Ne{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw C.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Ne}};var sr=i.$global,Y=i.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(f=>({_hx_index:3,__enum__:"haxe.io.Error",e:f}),{_hx_name:"Custom",__params__:["e"]})};Y.__constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds,Y.Custom];Y.__empty_constructs__=[Y.Blocked,Y.Overflow,Y.OutsideBounds];var lr=i.$global,te=i.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};te.__constructs__=[te.UTF8,te.RawNative];te.__empty_constructs__=[te.UTF8,te.RawNative];var gr=i.$global,ce=i.global("$hxClasses")["haxe.io.Bytes"]=class qe extends i.inherits(){[i.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw C.thrown(Y.OutsideBounds);r==null&&(r=te.UTF8);let n="",s=this.b,l=e,a=e+t;switch(r._hx_index){case 0:let h=e>0;for(;l<a;){let u=s[l++];if(u<128){if(u==0)break;n+=String.fromCodePoint(u)}else if(u<224){let c=(u&63)<<6|s[l++]&127;n+=String.fromCodePoint(c)}else if(u<240){let c=s[l++],g=(u&31)<<12|(c&127)<<6|s[l++]&127;n+=String.fromCodePoint(g)}else{let c=s[l++],g=s[l++],_=(u&15)<<18|(c&127)<<12|(g&127)<<6|s[l++]&127;n+=String.fromCodePoint(_)}}break;case 1:for(;l<a;){let u=s[l++]|s[l++]<<8;n+=String.fromCodePoint(u)}break}return n}static ofData(e){let t=e.hxBytes;return t!=null?t:new qe(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return qe}};ce.prototype.length=null;ce.prototype.b=null;var fr=i.$global,Z=i.global("$hxClasses")["haxe.http.HttpBase"]=class Me extends i.inherits(){[i.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=i.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,n=this.headers.length;for(;r<n;){let s=r++;if(this.headers[s].name==e){this.headers[s]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return i.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,te.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return Me}};Z.prototype.url=null;Z.prototype.responseBytes=null;Z.prototype.responseAsString=null;Z.prototype.postData=null;Z.prototype.postBytes=null;Z.prototype.headers=null;Z.prototype.params=null;Z.prototype.emptyOnData=null;var br=i.$global,Ie=i.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class Ue extends i.inherits(){[i.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return Ue}};Ie.prototype.map=null;Ie.prototype.keys=null;var xr=i.$global,Fe=function(){};Fe.__isInterface__=!0;var Cr=i.$global,Ce=i.global("$hxClasses")["genes.util.EsMap"]=class be extends i.inherits(){[i.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return be.adaptIterator(this.inst.keys())}iterator(){return be.adaptIterator(this.inst.values())}toString(){let e=[],t=be.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+S.string(r)+" => "+S.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,n=function(){let s=e.next();t=s.value,r=s.done};return{hasNext:function(){return r==null&&n(),!r},next:function(){r==null&&n();let s=t;return n(),s}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return be}};Ce.prototype.inst=null;var qr=i.$global,Je=i.global("$hxClasses")["haxe.ds.StringMap"]=class Ae extends i.inherits(Ce){[i.new](){super[i.new]()}copy(){let e=new Ae;return e.inst=new Map(this.inst),e}keyValueIterator(){return new Ie(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Fe]}static get __super__(){return Ce}get __class__(){return Ae}};var Or=i.$global,T=i.global("$hxClasses").HxOverrides=class ze{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return ze}};typeof performance!="undefined"&&typeof performance.now=="function"&&(T.now=performance.now.bind(performance));var Hr=i.$global,oe=i.global("$hxClasses").StringTools=class Se{static isSpace(e,t){let r=T.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&Se.isSpace(e,r);)++r;return r>0?T.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&Se.isSpace(e,t-r-1);)++r;return r>0?T.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return Se}};var Nr=i.$global,We=i.global("$hxClasses").Lambda=class Xe{static exists(e,t){let r=i.getIterator(e);for(;r.hasNext();){let n=r.next();if(t(n))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return Xe}};var Xr=i.$global,we=i.global("$hxClasses").EReg=class Qe extends i.inherits(){[i.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw C.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw C.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:T.substr(e,0,t+r));let n=this.r.m!=null;return n&&(this.r.s=e),n}else{let n=this.match(r<0?T.substr(e,t,null):T.substr(e,t,r));return n&&(this.r.s=e,this.r.m.index+=t),n}}map(e,t){let r=0,n="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){n+=S.string(T.substr(e,r,null));break}let s=this.matchedPos();n+=S.string(T.substr(e,r,s.pos-r)),n+=S.string(t(this)),s.len==0?(n+=S.string(T.substr(e,s.pos,1)),r=s.pos+1):r=s.pos+s.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(n+=S.string(T.substr(e,r,null))),n}static get __name__(){return"EReg"}get __class__(){return Qe}};we.prototype.r=null;var ls=i.$global,ae=i.global("$hxClasses")["haxe.http.HttpJs"]=class Ke extends i.inherits(Z){[i.new](e){this.async=!0,this.withCredentials=!1,super[i.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=De.createXMLHttpRequest(),r=this,n=function(c){if(t.readyState!=4)return;let g;try{g=t.status}catch{g=null}if(g==0&&De.get_supported()&&i.$global.location!=null){let _=i.$global.location.protocol.toLowerCase();new we("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(_)&&(g=t.response!=null?200:404)}if(g==null&&(g=null),g!=null&&r.onStatus(g),g!=null&&g>=200&&g<400){r.req=null;let _=t.getAllResponseHeaders().split(`\r
5
+ `),y=[],v=0,b=_;for(;v<b.length;){let x=b[v];++v,x!=""&&y.push(x)}_=y;let I=new Je;r.responseHeaders=I;let p=0;for(;p<_.length;){let x=_[p];++p;let D=x.split(": "),q=D.shift(),H=D.length==1?D[0]:D.join(": ");H=oe.ltrim(oe.rtrim(H)),r.responseHeaders.inst.set(q,H)}r.success(ce.ofData(t.response))}else if(g==null||g==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(g==null){r.req=null;let _=t.response!=null?ce.ofData(t.response):null;r.responseBytes=_,r.onError("Http Error #"+t.status)}else switch(g){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let _=t.response!=null?ce.ofData(t.response):null;r.responseBytes=_,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=n);let s,l=this.postData,a=this.postBytes;if(l==null)if(a==null)s=null;else{let c=a;s=new Blob([c.b.bufferValue])}else a==null?s=l:s=null;if(s!=null)e=!0;else{let c=0,g=this.params;for(;c<g.length;){let _=g[c];++c,s==null?s="":s=(s==null?"null":S.string(s))+"&";let y=_.name,v=(s==null?"null":S.string(s))+encodeURIComponent(y)+"=",b=_.value;s=v+encodeURIComponent(b)}}try{if(e)t.open("POST",this.url,this.async);else if(s!=null){let c=this.url.split("?").length<=1;t.open("GET",this.url+(c?"?":"&")+(s==null?"null":S.string(s)),this.async),s=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(c){let g=C.caught(c).unwrap();this.req=null,this.onError(g.toString());return}t.withCredentials=this.withCredentials,!We.exists(this.headers,function(c){return c.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let h=0,u=this.headers;for(;h<u.length;){let c=u[h];++h,t.setRequestHeader(c.name,c.value)}t.send(s),this.async||n(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return Z}get __class__(){return Ke}};ae.prototype.async=null;ae.prototype.withCredentials=null;ae.prototype.responseHeaders=null;ae.prototype.req=null;var us=i.$global,Oe=i.global("$hxClasses").Type=class Ge{static createInstance(e,t){let r=Function.prototype.bind.apply(e,[null].concat(t));return new r}static get __name__(){return"Type"}get __class__(){return Ge}};var gs=i.$global,R=i.global("$hxClasses").Reflect=class Ye{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let n;return e.__properties__?(r=e.__properties__["get_"+t],n=r):n=!1,n?e[r]():e[t]}}static setProperty(e,t,r){let n,s;e.__properties__?(n=e.__properties__["set_"+t],s=n):s=!1,s?e[n](r):e[t]=r}static fields(e){let t=[];if(e!=null){let n=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&n.call(e,r)&&t.push(r)}return t}static compare(e,t){return e==t?0:e>t?1:-1}static get __name__(){return"Reflect"}get __class__(){return Ye}};var ws=i.$global,Be=i.global("$hxClasses")["internal.http.FetchHttp"]=class Ze extends i.inherits(ae){[i.new](e){this.responseStatus=0,super[i.new](e)}request(e){let t=i.$global,r=t.fetch,n=t.Headers,s=t.URLSearchParams;if(r==null){this.onError("Fetch API not found.");return}let l=Oe.createInstance(n,[]),a=0,h=this.headers;for(;a<h.length;){let b=h[a];++a,l.append(b.name,b.value)}let u=e?"POST":"GET",c=null;if(e)if(this.postData!=null)c=this.postData;else{c=Oe.createInstance(s,[]);let b=0,I=this.params;for(;b<I.length;){let p=I[b];++b,c.append(p.name,p.value)}}let g={method:u,headers:l,body:c},_=this,y=r(this.url,g).then(function(b){if(_.responseStatus=b.status,_.onStatus(b.status),b.ok)return b.text();throw C.thrown("HTTP Error: "+S.string(b.status))}).then(function(b){_.onData(b)}),v=R.field(y,"catch");v!=null&&v.apply(y,[function(b){_.onError(S.string(b))}])}static get __name__(){return"internal.http.FetchHttp"}static get __super__(){return ae}get __class__(){return Ze}};Be.prototype.responseStatus=null;var Rs=i.$global,ge=function(){};ge.__isInterface__=!0;var me=function(){};me.__isInterface__=!0;var pe=function(){};pe.__isInterface__=!0;var qs=i.$global,o=i.global("$hxClasses")["internal.RecoBackendV2"]=class d extends i.inherits(){[i.new](){}static _requestUri(){return(d._safe_request?"https://":"http://")+d._req_domain+"/api/"+d._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:d._page_visit!=null?d._page_visit:d._page_view,channel:"www-desktop"};if(d._history.length>0&&(t.histories=d._buildHistories()),d._consent==0){let s=d.noConsentBody(),l=0,a=R.fields(s);for(;l<a.length;){let h=a[l];++l,t[h]=R.field(s,h)}}else d._user_id!=null?t.user_id=d._user_id:t.device_id=d._device_id;let r=0,n=d._others;for(;r<n.length;){let s=n[r];++r,t[s.key]=s.value}return t}static _buildHistories(){let e=[],t=0,r=d._history;for(;t<r.length;){let n=r[t];++t,e.push({id:n})}return{pageviews:e}}static requestsToLists(e){let t=[],r="",n="",s="",l=0,a=function(u,c,g){r=u,n=c,s=g,l=0},h=0;for(;h<e.length;){let u=e[h];if(++h,r==""){let c;if(u.filters.length>0){let _=u.filters[0];c=_!=null?_.key:null}else c="";let g;if(u.filters.length>0){let _=u.filters[0];g=_!=null?_.value:null}else g="";a(u.list,c,g),l+=1;continue}else{let c,g;if(r==u.list){let _=u.filters[0],y=_!=null?_.key:null;g=n!=(y!=null?y:"")}else g=!0;if(g)c=!0;else{let _=u.filters[0],y=_!=null?_.value:null;c=s!=(y!=null?y:"")}if(c){let _={limit:l,list_name:r,list_size:l};n!=""&&(s instanceof Array||(s=[s]),_[n]=s),t.push(_);let y=u.filters[0],v=u.filters[0];a(u.list,y!=null?y.key:null,v!=null?v.value:null)}}l+=1}if(l!=0){let u={limit:l,list_name:r,list_size:l};n!=""&&(s instanceof Array||(s=[s]),u[n]=s),t.push(u)}return t}static _requestRecos(e){let t=null,r=new Promise(function(_,y){t=_}),n=r;n._resolve=t,n._isFinished=!1,n._result=null;let s=r,l=null,a=new Be(d._requestUri());a.setHeader("Content-Type","application/json");let h=d.buildRequestBody(e),u=JSON.stringify(h);a.setPostData(u),a.onError=function(_){throw C.thrown("HTTP Request Error: "+_)};try{a.request(!0)}catch(_){let y=C.caught(_).unwrap();throw C.thrown("Failed to execute synchronous request: "+S.string(y)+u)}let c=function(_){let y=JSON.parse(_),v=he.fromRequestData(y),b=s;b._isFinished||(b._result=v,b._isFinished=!0,b._resolve(v))},g=a.get_responseData();return g!=null?c(g):a.onData=c,s}static getOrder(e,t,r){let n={list_name:e,limit:r.length,list_size:r.length},s={};R.setProperty(s,t,r),R.setProperty(n,"order",s);let l=null,a=new Promise(function(g,_){l=g}),h=a;h._resolve=l,h._isFinished=!1,h._result=null;let u=a,c;return d.getRawRecommendations([n]).then(function(g){let _=[],y=g.lists()[0].items;if(y instanceof Array){let b=0,I=y;for(;b<I.length;){let p=I[b];++b;let x=p.get("categories");x!=null&&_.push(x)}}let v=u;v._isFinished||(v._result=_,v._isFinished=!0,v._resolve(_))}),u}static getRawRecommendations(e){return d._requestRecos(e)}static addHistories(e){d._history=d._history.concat(e)}static setOthers(e,t){let r=0,n=d._others;for(;r<n.length;){let s=n[r];if(++r,s.key==e){s.value=t;return}}d._others.push({key:e,value:t})}static setConsent(e){e>2&&(e=2),d._consent=e}static setChannel(e){d._channel=e}static setPageVisit(e){d._page_visit=e}static setEnvironment(e){d._environment=e}static setDeviceId(e){d._device_id=e}static setUserId(e){d._user_id=e}static setRequestDomain(e){d._req_domain=e}static setPageView(e){d._page_view=e}static setSafeRequest(e){d._safe_request=e}static setContextItem(e){d.setOthers("context_item",e)}static setContextItemType(e){d.setOthers("context_item_type",e)}static getRequestDomain(){return d._req_domain}static getEnvironment(){return d._environment}static getPageVisit(){return d._page_visit}static getUserId(){return d._user_id}static getDeviceId(){return d._device_id}static getPageView(){return d._page_view}static getConsent(){return d._consent}static getChannel(){return d._channel}static getOthers(e){let t=0,r=d._others;for(;t<r.length;){let n=r[t];if(++t,e==n.key)return n.value}return null}static getContextItem(){return d.getOthers("context_item")}static getContextItemType(){return d.getOthers("context_item_type")}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return d}};o._environment=null;o._device_id="no-consent";o._user_id=null;o._consent=2;o._req_domain="europe-west1.froomle.com";o._page_visit=null;o._page_view=null;o._channel="www-desktop";o._safe_request=!0;o._history=[];o._others=[];var he=i.global("$hxClasses")["internal._RecommendationsInternal"]=class Te extends i.inherits(){[i.new](e,t,r,n,s){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=n,this._lists=s}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let n=r[t];++t;let s=0,l=n.items;for(;s<l.length;){let a=l[s];++s,e.push(a)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let n=r[t];if(++t,n.list_name==e)return n}return null}toJson(){let e={request_id:this.request_id,user_group:this.user_group,user_id:this.user_id,device_id:this.device_id,lists:[]},t=0,r=this._lists;for(;t<r.length;){let n=r[t];++t;let s={limit:n.limit,list_key:n.list_key,list_name:n.list_name,list_size:n.list_size,items:[]},l=0,a=n.items;for(;l<a.length;){let h=a[l];++l,s.items.push(ye.__cast(h,se).getData())}e.lists.push(s)}return JSON.stringify(e)}static fromRequestData(e){let t=R.getProperty(e,"lists"),r=[],n=0;for(;n<t.length;){let s=t[n];++n;let l=R.getProperty(s,"items"),a=[],h=0;for(;h<l.length;){let c=l[h];++h,R.setProperty(c,"request_id",R.getProperty(e,"request_id")),a.push(new se(c))}let u=new ue({limit:R.getProperty(s,"limit"),list_key:R.getProperty(s,"list_key"),list_name:R.getProperty(s,"list_name"),list_size:R.getProperty(s,"list_size"),items:a,request_id:R.getProperty(e,"request_id")});r.push(u)}return new Te(R.getProperty(e,"device_id"),R.getProperty(e,"request_id"),R.getProperty(e,"user_group"),R.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[ge]}get __class__(){return Te}};he.prototype.request_id=null;he.prototype.user_group=null;he.prototype.user_id=null;he.prototype.device_id=null;he.prototype._lists=null;var ue=i.global("$hxClasses")["internal._RecommendationsListInternal"]=class et extends i.inherits(){[i.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size,this.request_id=e.request_id}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[me]}get __class__(){return et}};ue.prototype.limit=null;ue.prototype.list_key=null;ue.prototype.list_name=null;ue.prototype.list_size=null;ue.prototype.items=null;ue.prototype.request_id=null;var se=i.global("$hxClasses")["internal._RecommendationItemInternal"]=class tt extends i.inherits(){[i.new](e){this.Id=R.getProperty(e,"item_id"),this.RequestId=R.getProperty(e,"request_id"),this.UserGroup=R.getProperty(e,"user_group"),this._data=e}getData(){return this._data}get(e){return this._data[e]}toJson(){return JSON.stringify(this._data)}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[pe]}get __class__(){return tt}};se.prototype.Id=null;se.prototype.RequestId=null;se.prototype.UserGroup=null;se.prototype._data=null;var Os=i.$global,Ve=function(){};Ve.__isInterface__=!0;var Hs=i.$global,ve=i.global("$hxClasses")["internal.js.JSFroomleDomTree"]=class Pe extends i.inherits(){[i.new](){}getRoot(){return this.root}createElement(e){return this.root.ownerDocument.createElement(e)}toString(){return this.root.ownerDocument.documentElement.outerHTML}static fromHTML(e){let r=new DOMParser().parseFromString(e,"text/html"),n=new Pe;return n.root=r.documentElement,n}static fromDocument(e){let t=new Pe;return t.root=e.documentElement,t}static get __name__(){return"internal.js.JSFroomleDomTree"}static get __interfaces__(){return[Ve]}get __class__(){return Pe}};ve.prototype.root=null;var Qs=i.$global,_e=i.global("$hxClasses")["internal.domHandler.DomDomDom"]=class re extends i.inherits(){[i.new](){}static _fillRecoTargets(e){let t=null,r=new Promise(function(m,w){t=m}),n=r;n._resolve=t,n._isFinished=!1,n._result=null;let s=r;if(e==null){let m=s;return m._isFinished||(m._result=!1,m._isFinished=!0,m._resolve(!1)),s}let l=[],a=new Array,h=e.querySelectorAll("*"),u=0,c=h.length;for(;u<c;){let m=u++,w=h.item(m);w instanceof HTMLElement&&a.push(w)}let g=a,_=0;for(;_<g.length;){let m=g[_];++_;let w=0,P=new Array,k=0,F=m.attributes;for(;k<F.length;){let B=F[k];++k,P.push({name:B.name,value:B.value})}let A=P;for(;w<A.length;){let B=A[w];++w,B.name=="data-froomle-reco"&&l.push(m)}}let y=[],v=0;for(;v<l.length;){let m=l[v];++v,m.getAttribute("data-froomle-request-id")==null&&(m.getAttribute("data-froomle-id")==null||m.getAttribute("data-froomle-id")=="")&&y.push(m)}if(y.length<1){let m=null,w=new Promise(function(k,F){m=k}),P=w;return P._resolve=m,P._isFinished=!1,P._result=null,w}let b=[],I=[],p="",x="",D="",q=[],H=[],J=function(m,w){if(m.length!=w.length)return!1;let P=new Array(m.length),k=0,F=m.length;for(;k<F;){let E=k++;P[E]=JSON.stringify(m[E])}let A=P,B=new Array(w.length),M=0,K=w.length;for(;M<K;){let E=M++;B[E]=JSON.stringify(w[E])}let z=B;A.sort(R.compare),z.sort(R.compare);let O=0,W=A.length;for(;O<W;){let E=O++;if(A[E]!=z[E])return!1}return!0},N=function(){let m={list_name:p,list_size:q.length,limit:q.length};x!=null&&R.setProperty(m,x,[D]);let w=0;for(;w<H.length;){let P=H[w];++w,R.setProperty(m,P.key,P.value)}b.push(m),I.push(q)},ie=function(m,w,P,k,F){p=m,x=w,D=P,q=[F],H=k},$=0;for(;$<y.length;){let m=y[$];++$;let w=function(B){let M=0,K=new Array,z=0,O=B.attributes;for(;z<O.length;){let E=O[z];++z,K.push({name:E.name,value:E.value})}let W=K;for(;M<W.length;){let E=W[M];if(++M,E.name.startsWith("data-froomle-reco-filter-")){let L=T.substr(E.name,25,null),G=E.value;return{key:L,value:G}}}return{key:null,value:null}},P=function(B){let M=[],K=0,z=new Array,O=0,W=B.attributes;for(;O<W.length;){let L=W[O];++O,z.push({name:L.name,value:L.value})}let E=z;for(;K<E.length;){let L=E[K];if(++K,L.name.startsWith("data-froomle-variable-")){let G=T.substr(L.name,22,null),le=L.value;M.push({key:G,value:le})}}return M},k=m.getAttribute("data-froomle-reco"),F=w(m),A=P(m);if(p==""){ie(k,F.key,F.value,A,m);continue}else if(k==p&&F.key==x&&F.value==D&&J(H,A)){q.push(m);continue}else{N(),ie(k,F.key,F.value,A,m);continue}}p!=""&&N();let Q;if(o.getPageVisit()==null){let m=s;return m._isFinished||(m._result=!1,m._isFinished=!0,m._resolve(!1)),s}else if(o.getEnvironment()==null){let m=s;return m._isFinished||(m._result=!1,m._isFinished=!0,m._resolve(!1)),s}else try{Q=o.getRawRecommendations(b)}catch{let w=s;return w._isFinished||(w._result=!1,w._isFinished=!0,w._resolve(!1)),s}return Q.then(function(m){let w=m.lists(),P=w.length,k=0,F=P;for(;k<F;){let B=k++,M=w[B],K=M.items.length!=I[B].length,z=M.items.length,O=0,W=z;for(;O<W;){let E=O++,L=M.items[E],G=I[B][E];re._fillParameters(G,L,m.request_id)}}let A=s;A._isFinished||(A._result=!0,A._isFinished=!0,A._resolve(!0))}),s}static getAttrByPath(e,t,r){r==null&&(r="fgh");try{t=new we("\\\\[(\\\\w+)\\\\]","g").map(t,function(u){return"."+u.matched(1)}),t=oe.replace(t,"[","."),t=oe.replace(t,"]",""),T.cca(t,0)==46&&(t=T.substr(t,1,null));let s=t.split("."),l=e.get(s[0]),a=1,h=s.length;for(;a<h;){let u=a++;if(l==null)return null;l instanceof Array&&S.parseInt(s[u])!=null?l=l[S.parseInt(s[u])]:l=R.field(l,s[u])}return l}catch{return r}}static _buildHistories(e){let t=[],r=new Array,n=e.querySelectorAll("[data-froomle-id]"),s=0,l=n.length;for(;s<l;){let u=s++,c=n.item(u);c instanceof HTMLElement&&r.push(c)}let a=r,h=0;for(;h<a.length;){let u=a[h];++h,t.push(u.getAttribute("data-froomle-id"))}o.addHistories(t)}static fillParam(e,t,r,n,s){s==null&&(s="");try{let l=re.getAttrByPath(n,r,s);if(t=="inner"){e.textContent=l;let a=e.textContent}else e.setAttribute(t,l)}catch{}}static _fillParameters(e,t,r){e.setAttribute("data-froomle-id",t.get("item_id")),e.setAttribute("data-froomle-request-id",r);let n=new Array,s=e.querySelectorAll("*"),l=0,a=s.length;for(;l<a;){let c=l++,g=s.item(c);g instanceof HTMLElement&&n.push(g)}let h=n,u=0;for(;u<h.length;){let c=h[u];++u;let g=0,_=new Array,y=0,v=c.attributes;for(;y<v.length;){let I=v[y];++y,_.push({name:I.name,value:I.value})}let b=_;for(;g<b.length;){let I=b[g];if(++g,I.name.startsWith("data-froomle-param-")){let p=oe.replace(I.name,"data-froomle-param-",""),x=I.value;re.fillParam(c,p,x,t)}}}}static _orderElements(e){let t=function(p,x,D){let q=[],H=new Array,J=0,N=p.childNodes;for(;J<N.length;){let w=N[J];++J,H.push(w)}let ie=H,$=0;for(;$<ie.length;){let w=ie[$];++$;try{if(w.getAttribute("data-froomle-ordervalue")!=null){q.push(w);let k=e.createElement("span");k.setAttribute("data-froomle-tmp-node","tmp"),p.replaceChild(k,w)}}catch{}}let Q=[],m=0;for(;m<q.length;){let w=q[m];++m,Q.push(w.getAttribute("data-froomle-ordervalue"))}return{el:p,key:x,values:Q,orderChildren:q,list_name:D}},r=null,n=new Promise(function(p,x){r=p}),s=n;s._resolve=r,s._isFinished=!1,s._result=null;let l=n,a=e.getRoot(),h=new Array,u=a.querySelectorAll("*"),c=0,g=u.length;for(;c<g;){let p=c++,x=u.item(p);x instanceof HTMLElement&&h.push(x)}let _=h,y=[],v=0;for(;v<_.length;){let p=_[v];++v;let x=0,D=new Array,q=0,H=p.attributes;for(;q<H.length;){let N=H[q];++q,D.push({name:N.name,value:N.value})}let J=D;for(;x<J.length;){let N=J[x];++x,N.name.startsWith("data-froomle-order-")&&y.push(t(p,N.name.substring(19),N.value))}}if(y.length<1){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}let b=[],I=0;for(;I<y.length;){let p=y[I];++I;let x={list_name:p.list_name,limit:p.values.length,list_size:p.values.length},D={};R.setProperty(D,p.key,p.values),R.setProperty(x,"order",D),b.push(x)}if(o.getPageVisit()==null){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}else if(o.getEnvironment()==null){let p=l;return p._isFinished||(p._result=!1,p._isFinished=!0,p._resolve(!1)),l}try{o.getRawRecommendations(b).then(function(p){let x=p.lists(),D=x.length,q=0,H=D;for(;q<H;){let N=q++,ie=x[N],$=y[N];$.el.setAttribute("data-froomle-request-id",p.request_id);let Q=new Array,m=0,w=ie.items;for(;m<w.length;){let O=w[m];++m;let W=O.get($.key),E=O.get($.key),L=$.values.length,G=0,le=L;for(;G<le;){let ne=G++,fe=$.values[ne];if(W==fe){let qt=$.orderChildren.length,gt=$.orderChildren[ne];Q.push(gt),$.orderChildren.splice(ne,1),$.values.splice(ne,1);break}}}let P=Q.length,k=$.el,F=new Array,A=0,B=k.childNodes;for(;A<B.length;){let O=B[A];++A,F.push(O)}let M=F.length,K=0,z=M;for(;K<z;){let O=K++,W=$.el,E=new Array,L=0,G=W.childNodes;for(;L<G.length;){let fe=G[L];++L,E.push(fe)}let le=E[O],ne;if(le instanceof HTMLElement?ne=le.hasAttribute("data-froomle-tmp-node"):ne=!1,ne){$.el.replaceChild(Q[0],le),Q.splice(0,1);let fe=Q.length;if(Q.length==0)break}}}let J=l;J._isFinished||(J._result=!0,J._isFinished=!0,J._resolve(!0))})}catch{let x=l;x._isFinished||(x._result=!1,x._isFinished=!0,x._resolve(!1))}return l}static domInit(e){re._orderElements(e).then(function(t){re._buildHistories(e.getRoot()),re._fillRecoTargets(e.getRoot())})}static fillElementRecos(e){re._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t;try{let n=new DOMParser().parseFromString(e,"text/html"),s=new ve;s.root=n.documentElement,t=s}catch{return e}return re.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return re}};var en=i.$global,V=i.global("$hxClasses").FroomleSdk=class X{static register(){X.registered||X._env_set&&(!X._page_visit_set&&!X._page_view_set||(X.registered=!0))}static buildScriptTag(){let e='<script src="https://cdn.jsdelivr.net/npm/@froomle/frontend-sdk@0.0.1/dist/froomle.global.js" data-froomle-env="'+o.getEnvironment()+'" ',t=o.getPageVisit();t!=null&&(e+='data-froomle-page-visit="'+t+'" ');let r=o.getPageView();r!=null&&(e+='data-froomle-page-view="'+r+'" ');let n=o.getDeviceId();n!=null&&(e+='data-froomle-device-id="'+n+'" ');let s=o.getUserId();s!=null&&(e+='data-froomle-user-id="'+s+'" ');let l=o.getConsent();l>0&&(e+='data-froomle-consent="'+l+'" ');let a=o.getRequestDomain();return a!=null&&(e+='data-froomle-request-domain="'+a+'" '),e+="><\/script>",e}static setEnvironment(e){o.setEnvironment(e),X._env_set=!0,X.register()}static setDeviceId(e){o.setDeviceId(e)}static setUserId(e){o.setUserId(e)}static setConsent(e){o.setConsent(e)}static setPageView(e){o.setPageView(e),X._page_view_set=!0,X.register()}static setPageVisit(e){o.setPageVisit(e),X._page_visit_set=!0,X.register()}static setRequestDomain(e){o.setRequestDomain(e)}static setSafeRequest(e){o.setSafeRequest(e)}static setContextItem(e){o.setContextItem(e)}static setContextItemType(e){o.setContextItemType(e)}static setCustomVariable(e,t){o.setOthers(e,t)}static getUserId(){return o.getUserId()}static getDeviceId(){return o.getDeviceId()}static getEnvironment(){return o.getEnvironment()}static getPageView(){return o.getPageView()}static getPageVisit(){return o.getPageVisit()}static getConsent(){return o.getConsent()}static getRecommendations(e){return o.getRawRecommendations(e)}static getChannel(){return o.getChannel()}static getVersion(){return"0.0.1"}static runFromHtml(e){return _e.runFromHtml(e)}static get __name__(){return"FroomleSdk"}get __class__(){return X}};V._env_set=!1;V._page_visit_set=!1;V._page_view_set=!1;V.registered=!1;var sn=i.$global;function rt(){return"https://"+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}function st(f,e,t="article",r){let n={event_type:t,page_type:o.getPageVisit(),action_item:f,action_item_type:e,channel:"www-desktop"};for(let s in r)n[s]=r[s];try{fetch(rt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({events:[n]})})}catch{}}var U=class U{static generateBody(){let e=[];for(let t of U.impressionQueue){let r={event_type:"impression",page_type:o.getPageVisit(),action_item:t.getAttribute("data-froomle-id"),action_item_type:"article",channel:"www-desktop"};o.getUserId()?r.user_id=o.getUserId():r.device_id=o.getDeviceId();let n=t.getAttribute("data-froomle-reco");if(n){r.list_name=n;let s=t.getAttribute("data-froomle-request-id");if(!s)throw console.error("element need reco but doesnt have request id registered yet"),new Error("element need reco but doesnt have request id registered");r.request_id=s}e.push(r)}return U.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){U.impressionQueue.length!==0&&fetch(rt(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:U.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=U.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){U.observer.observe(e)}static processDocument(){if(o.getConsent()!=0){for(let e of document.querySelectorAll("[data-froomle-id]"))U.intersectsWithViewPortRect(e)?U.impressionQueue.push(e):U.addIntersectionImpressionListener(e);U.sendImpressions()}}};U.impressionQueue=[],U.observer=null;var ee=U;typeof document!="undefined"&&(ee.observer=new IntersectionObserver((f,e)=>{f.forEach(t=>{t.isIntersecting&&(ee.impressionQueue.push(t.target),ee.observer.unobserve(t.target))}),ee.impressionQueue.length>0&&ee.sendImpressions()}));var xe=class f{static uri(){return"https://"+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e={event_type:"page_visit",page_type:o.getPageVisit(),channel:"www-desktop"};return o.getUserId()?e.user_id=o.getUserId():e.device_id=o.getDeviceId(),JSON.stringify(e)}static sendPageVisit(){o.getPageVisit()&&o.getDeviceId()!="no-consent"&&fetch(f.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:f.generateBody()})}};var Re=class f{static uri(){return"https://"+o.getRequestDomain()+"/api/"+o.getEnvironment()+"/events"}static generateBody(){let e={event_type:"detail_pageview",page_type:"article_detail",action_item:o.getPageView(),action_item_type:"article",channel:"www-desktop"};return o.getUserId()?e.user_id=o.getUserId():e.device_id=o.getDeviceId(),JSON.stringify(e)}static sendPageView(){o.getPageView()&&o.getDeviceId()!="no-consent"&&fetch(f.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:f.generateBody()})}};var nt=ve,it=V.setEnvironment,lt=V.setPageVisit,ot=V.setConsent,at=V.setUserId,ut=V.setDeviceId,_t=V.setRequestDomain,ct=V.setSafeRequest,It=V.setContextItem,Ct=V.setContextItemType,St=V.setCustomVariable,Pt=o.addHistories,kt=V.setPageView;typeof window!="undefined"&&(window.setFroomleConsent=ot);var $t=V.getRecommendations;if(!globalThis.froomleInitialized&&(globalThis.froomleInitialized=!0,typeof document!="undefined")){let f=document.currentScript;if(f){let e=f.getAttribute("data-froomle-device-id"),t=f.getAttribute("data-froomle-user-id"),r=f.getAttribute("data-froomle-env"),n=f.getAttribute("data-froomle-page-visit"),s=f.getAttribute("data-froomle-requestdomain"),l=f.getAttribute("data-froomle-page-view"),a=f.getAttribute("data-froomle-safe-request");it(r),l&&kt(l),n&&lt(n),e&&ut(e),t&&at(t),s&&_t(s),a&&ct(a!=="false")}document.addEventListener("DOMContentLoaded",()=>{console.log("froomle loads dom"),_e.domInit(nt.fromDocument(document)),ee.processDocument(),xe.sendPageVisit(),Re.sendPageView();let e=new MutationObserver(t=>{for(let r of t)if(r.type==="childList"&&ee.processElement(r.target),r.type==="attributes")if(r.attributeName==="data-froomle-reco"){let n=r.target.getAttribute("data-froomle-request-id");(!n||n==="")&&_e.fillElementRecos(r.target)}else r.attributeName==="data-froomle-request-id"&&_e.fillElementRecos(r.target)})})}return yt(Dt);})();
package/dist/index.d.ts CHANGED
@@ -1,33 +1,84 @@
1
- declare interface Recommendations {
2
- request_id: string
3
- user_group: string
4
- user_id: string
5
- device_id: string
6
- lists(): RecommendationList[]
7
- }
1
+ import { R as Recommendations, a as RecommendationItem } from './Recommendations.d-HGeAMYU5.js';
2
+ export { b as RecommendationList } from './Recommendations.d-HGeAMYU5.js';
8
3
 
9
- declare interface RecommendationList {
10
- limit: number
11
- list_key: string
12
- list_name: string
13
- list_size: number
14
- items: RecommendationItem[]
4
+ type RecoRequest = {
5
+ filters: {
6
+ key: string,
7
+ value: string
8
+ }[],
9
+ list: string
15
10
  }
16
11
 
17
- declare interface RecommendationItem {
18
- get(key: string): any
19
- Id: string
20
- RequestId: string
21
- UserGroup: string
12
+ type FroomleTuple = {
13
+ key: string,
14
+ value: any
22
15
  }
23
16
 
24
- declare class SimpleFuture<T> {
17
+ declare class RecoBackendV2 {
25
18
  constructor()
26
- protected _callback: (arg0: T) => void
27
- protected _result: null | T
28
- protected _isFinished: boolean
29
- trigger(data: T): void
30
- then(callback: ((arg0: T) => void)): void
19
+ protected static _environment: string
20
+ protected static _device_id: string
21
+ protected static _user_id: string
22
+ protected static _consent: number
23
+ protected static _req_domain: string
24
+ protected static _page_visit: string
25
+ protected static _page_view: string
26
+ protected static _channel: string
27
+ protected static _safe_request: boolean
28
+ protected static _history: string[]
29
+ protected static _others: FroomleTuple[]
30
+ protected static _requestUri(): string
31
+ protected static noConsentBody(): any
32
+ protected static buildRequestBody(lists: {
33
+ limit: number,
34
+ list_name: string,
35
+ list_size: number
36
+ }[]): any
37
+ protected static _buildHistories(): {
38
+ pageviews: {
39
+ id: string
40
+ }[]
41
+ }
42
+ static requestsToLists(requests: RecoRequest[]): {
43
+ limit: number,
44
+ list_name: string,
45
+ list_size: number
46
+ }[]
47
+ protected static _requestRecos(lists: {
48
+ limit: number,
49
+ list_name: string,
50
+ list_size: number
51
+ }[]): Promise<Recommendations>
52
+ static getOrder(list: string, category: string, values: string[]): Promise<string[]>
53
+ static getRawRecommendations(lists: {
54
+ limit: number,
55
+ list_name: string,
56
+ list_size: number
57
+ }[]): Promise<Recommendations>
58
+ static addHistories(hists: string[]): void
59
+ static setOthers(key: string, value: any): void
60
+ static setConsent(consent: number): void
61
+ static setChannel(channel: string): void
62
+ static setPageVisit(page: string): void
63
+ static setEnvironment(env: string): void
64
+ static setDeviceId(id: string): void
65
+ static setUserId(id: string): void
66
+ static setRequestDomain(domain: string): void
67
+ static setPageView(page: string): void
68
+ static setSafeRequest(safe: boolean): void
69
+ static setContextItem(id: string): void
70
+ static setContextItemType(type: string): void
71
+ static getRequestDomain(): string
72
+ static getEnvironment(): string
73
+ static getPageVisit(): string
74
+ static getUserId(): string
75
+ static getDeviceId(): string
76
+ static getPageView(): string
77
+ static getConsent(): number
78
+ static getChannel(): string
79
+ static getOthers(key: string): any
80
+ static getContextItem(): string
81
+ static getContextItemType(): string
31
82
  }
32
83
 
33
84
  declare class FroomleSdk {
@@ -35,7 +86,15 @@ declare class FroomleSdk {
35
86
  protected static _page_visit_set: boolean
36
87
  protected static _page_view_set: boolean
37
88
  protected static registered: boolean
89
+
90
+ /**
91
+ Internal registration logic
92
+ */
38
93
  protected static register(): void
94
+
95
+ /**
96
+ Build <script> tag
97
+ */
39
98
  static buildScriptTag(): string
40
99
  static setEnvironment(env: string): void
41
100
  static setDeviceId(id: string): void
@@ -44,19 +103,46 @@ declare class FroomleSdk {
44
103
  static setPageView(page: string): void
45
104
  static setPageVisit(page: string): void
46
105
  static setRequestDomain(domain: string): void
47
- static getRawRecommendations(lists: {
106
+ static setSafeRequest(safe: boolean): void
107
+ static setContextItem(id: string): void
108
+ static setContextItemType(type: string): void
109
+ static setCustomVariable(key: string, value: any): void
110
+ static getUserId(): string
111
+ static getDeviceId(): string
112
+ static getEnvironment(): string
113
+ static getPageView(): string
114
+ static getPageVisit(): string
115
+ static getConsent(): number
116
+ static getRecommendations(lists: {
48
117
  limit: number,
49
118
  list_name: string,
50
119
  list_size: number
51
- }[]): SimpleFuture<Recommendations>
120
+ }[]): Promise<Recommendations>
121
+ static getChannel(): string
52
122
  static getVersion(): string
123
+ static runFromHtml(input: string): string
53
124
  }
54
125
 
126
+ declare function sendEvent(action_item: string, action_item_type: string, event_type?: string, extras?: {
127
+ [key: string]: string | number | object;
128
+ }): void;
129
+
55
130
  declare const setPageVisit: typeof FroomleSdk.setPageVisit;
56
131
  declare const setEnvironment: typeof FroomleSdk.setEnvironment;
57
132
  declare const setConsent: typeof FroomleSdk.setConsent;
58
133
  declare const setUserId: typeof FroomleSdk.setUserId;
59
134
  declare const setDeviceId: typeof FroomleSdk.setDeviceId;
60
135
  declare const setRequestDomain: typeof FroomleSdk.setRequestDomain;
136
+ declare const setSafeRequest: typeof FroomleSdk.setSafeRequest;
137
+ declare const setContextItem: typeof FroomleSdk.setContextItem;
138
+ declare const setContextItemType: typeof FroomleSdk.setContextItemType;
139
+ declare const setCustomVariable: typeof FroomleSdk.setCustomVariable;
140
+
141
+ declare const getRecommendations: typeof FroomleSdk.getRecommendations;
142
+
143
+ declare const addHistories: typeof RecoBackendV2.addHistories;
144
+
145
+ declare function fulfillRecommendations(): Promise<void>;
146
+ declare function proxyReco(req: RecoRequest): RecommendationItem & PromiseLike<RecommendationItem>;
61
147
 
62
- export { type RecommendationItem, type RecommendationList, type Recommendations, setConsent, setDeviceId, setEnvironment, setPageVisit, setRequestDomain, setUserId };
148
+ export { RecommendationItem, Recommendations, addHistories, fulfillRecommendations, getRecommendations, proxyReco, sendEvent, setConsent, setContextItem, setContextItemType, setCustomVariable, setDeviceId, setEnvironment, setPageVisit, setRequestDomain, setSafeRequest, setUserId };
package/dist/index.js CHANGED
@@ -1,5 +1 @@
1
- var s=class _{static global(e){return _.globals[e]?_.globals[e]:_.globals[e]={}}static createStatic(e,t,r){let n=null;Object.defineProperty(e,t,{enumerable:!0,get:function(){return r!=null&&(n=r(),r=null),n},set:function(i){r!=null&&(n=r(),r=null),n=i}})}static iterator(e){if(Array.isArray(e)){let t=e;return function(){return _.mkIter(t)}}else return typeof e.iterator=="function"?e.iterator.bind(e):e.iterator}static getIterator(e){return Array.isArray(e)?_.mkIter(e):e.iterator()}static mkIter(e){return new we(e)}static extend(e){function t(){this[_.new].apply(this,arguments)}return Object.setPrototypeOf(t.prototype,e.prototype),t}static inherits(e,t){t==null&&(t=!1);function r(){t&&e&&r[_.init]&&r[_.init](),this[_.new].apply(this,arguments)}return t?r[_.init]=()=>{let n=e();n[_.init]&&n[_.init](),Object.setPrototypeOf(r.prototype,n.prototype),r[_.init]=void 0}:e&&e[_.init]?(t=!0,r[_.init]=()=>{e[_.init]&&e[_.init](),Object.setPrototypeOf(r.prototype,e.prototype),r[_.init]=void 0}):e&&Object.setPrototypeOf(r.prototype,e.prototype),r}static bind(e,t){if(t==null)return null;t.__id__==null&&(t.__id__=_.fid++);let r=null;return e.hx__closures__==null?e.hx__closures__={}:r=e.hx__closures__[t.__id__],r==null&&(r=t.bind(e),e.hx__closures__[t.__id__]=r),r}static get __name__(){return"genes.Register"}get __class__(){return _}};s.$global=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:void 0;s.globals={};s.new=Symbol();s.init=Symbol();s.fid=0;var we=s.global("$hxClasses")["genes._Register.ArrayIterator"]=class Ce extends s.inherits(){[s.new](e){this.current=0,this.array=e}hasNext(){return this.current<this.array.length}next(){return this.array[this.current++]}static get __name__(){return"genes._Register.ArrayIterator"}get __class__(){return Ce}};we.prototype.array=null;we.prototype.current=null;var nt=s.$global,te=function(){};te.__isInterface__=!0;var re=function(){};re.__isInterface__=!0;var se=function(){};se.__isInterface__=!0;var at=s.$global,me=s.global("$hxClasses")["haxe.ValueException"]=class Pe extends s.inherits(()=>k,!0){[s.new](e,t,r){super[s.new](String(e),t,r),this.value=e}unwrap(){return this.value}static get __name__(){return"haxe.ValueException"}static get __super__(){return k}get __class__(){return Pe}};me.prototype.value=null;var _t=s.$global,k=s.global("$hxClasses")["haxe.Exception"]=class ne extends s.inherits(()=>Error,!0){[s.new](e,t,r){Error.call(this,e),this.message=e,this.__previousException=t,this.__nativeException=r!=null?r:this}unwrap(){return this.__nativeException}get_native(){return this.__nativeException}static caught(e){return e instanceof ne?e:e instanceof Error?new ne(e.message,null,e):new me(e,null,e)}static thrown(e){return e instanceof ne?e.get_native():e instanceof Error?e:new me(e)}static get __name__(){return"haxe.Exception"}static get __super__(){return Error}get __class__(){return ne}};k.prototype.native=null;k.prototype.__skipStack=null;k.prototype.__nativeException=null;k.prototype.__previousException=null;var ht=s.$global,xe=s.global("$hxClasses")["js.Browser"]=class Se{static get supported(){return this.get_supported()}static get_supported(){return typeof window!="undefined"&&typeof window.location!="undefined"?typeof window.location.protocol=="string":!1}static createXMLHttpRequest(){if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")return new"ActiveXObject"("Microsoft.XMLHTTP");throw k.thrown("Unable to create XMLHttpRequest object.")}static get __name__(){return"js.Browser"}get __class__(){return Se}};var bt=s.$global,F=s.global("$hxEnums")["haxe.io.Error"]={__ename__:"haxe.io.Error",Blocked:{_hx_name:"Blocked",_hx_index:0,__enum__:"haxe.io.Error"},Overflow:{_hx_name:"Overflow",_hx_index:1,__enum__:"haxe.io.Error"},OutsideBounds:{_hx_name:"OutsideBounds",_hx_index:2,__enum__:"haxe.io.Error"},Custom:Object.assign(_=>({_hx_index:3,__enum__:"haxe.io.Error",e:_}),{_hx_name:"Custom",__params__:["e"]})};F.__constructs__=[F.Blocked,F.Overflow,F.OutsideBounds,F.Custom];F.__empty_constructs__=[F.Blocked,F.Overflow,F.OutsideBounds];var vt=s.$global,H=s.global("$hxEnums")["haxe.io.Encoding"]={__ename__:"haxe.io.Encoding",UTF8:{_hx_name:"UTF8",_hx_index:0,__enum__:"haxe.io.Encoding"},RawNative:{_hx_name:"RawNative",_hx_index:1,__enum__:"haxe.io.Encoding"}};H.__constructs__=[H.UTF8,H.RawNative];H.__empty_constructs__=[H.UTF8,H.RawNative];var Ct=s.$global,z=s.global("$hxClasses")["haxe.io.Bytes"]=class ve extends s.inherits(){[s.new](e){this.length=e.byteLength,this.b=new Uint8Array(e),this.b.bufferValue=e,e.hxBytes=this,e.bytes=this.b}getString(e,t,r){if(e<0||t<0||e+t>this.length)throw k.thrown(F.OutsideBounds);r==null&&(r=H.UTF8);let n="",i=this.b,o=e,a=e+t;switch(r._hx_index){case 0:let y=e>0;for(;o<a;){let d=i[o++];if(d<128){if(d==0)break;n+=String.fromCodePoint(d)}else if(d<224){let u=(d&63)<<6|i[o++]&127;n+=String.fromCodePoint(u)}else if(d<240){let u=i[o++],c=(d&31)<<12|(u&127)<<6|i[o++]&127;n+=String.fromCodePoint(c)}else{let u=i[o++],c=i[o++],m=(d&15)<<18|(u&127)<<12|(c&127)<<6|i[o++]&127;n+=String.fromCodePoint(m)}}break;case 1:for(;o<a;){let d=i[o++]|i[o++]<<8;n+=String.fromCodePoint(d)}break}return n}static ofData(e){let t=e.hxBytes;return t!=null?t:new ve(e)}static get __name__(){return"haxe.io.Bytes"}get __class__(){return ve}};z.prototype.length=null;z.prototype.b=null;var qt=s.$global,T=s.global("$hxClasses")["haxe.http.HttpBase"]=class $e extends s.inherits(){[s.new](e){this.url=e,this.headers=[],this.params=[],this.emptyOnData=s.bind(this,this.onData)}get responseData(){return this.get_responseData()}setHeader(e,t){let r=0,n=this.headers.length;for(;r<n;){let i=r++;if(this.headers[i].name==e){this.headers[i]={name:e,value:t};return}}this.headers.push({name:e,value:t})}setPostData(e){this.postData=e,this.postBytes=null}onData(e){}onBytes(e){}onError(e){}onStatus(e){}hasOnData(){return s.bind(this,this.onData)!=this.emptyOnData}success(e){this.responseBytes=e,this.responseAsString=null,this.hasOnData()&&this.onData(this.get_responseData()),this.onBytes(this.responseBytes)}get_responseData(){return this.responseAsString==null&&this.responseBytes!=null&&(this.responseAsString=this.responseBytes.getString(0,this.responseBytes.length,H.UTF8)),this.responseAsString}static get __name__(){return"haxe.http.HttpBase"}get __class__(){return $e}};T.prototype.url=null;T.prototype.responseBytes=null;T.prototype.responseAsString=null;T.prototype.postData=null;T.prototype.postBytes=null;T.prototype.headers=null;T.prototype.params=null;T.prototype.emptyOnData=null;var At=s.$global,pe=s.global("$hxClasses")["haxe.iterators.MapKeyValueIterator"]=class qe extends s.inherits(){[s.new](e){this.map=e,this.keys=e.keys()}hasNext(){return this.keys.hasNext()}next(){let e=this.keys.next();return{value:this.map.get(e),key:e}}static get __name__(){return"haxe.iterators.MapKeyValueIterator"}get __class__(){return qe}};pe.prototype.map=null;pe.prototype.keys=null;var Tt=s.$global,Re=function(){};Re.__isInterface__=!0;var Ut=s.$global,Ie=s.global("$hxClasses")["js.Boot"]=class ie{static __string_rec(e,t){if(e==null)return"null";if(t.length>=5)return"<...>";let r=typeof e;switch(r=="function"&&(e.__name__||e.__ename__)&&(r="object"),r){case"function":return"<function>";case"object":if(e.__enum__){let d=s.global("$hxEnums")[e.__enum__].__constructs__[e._hx_index],u=d._hx_name;return d.__params__?(t=t+" ",u+"("+(function(c){var m;let E=[];{let g=0,p=d.__params__;for(;g<p.length;){let v=p[g];g=g+1,E.push(ie.__string_rec(e[v],t))}}return m=E,m})(this).join(",")+")"):u}if(e instanceof Array){let y="[";t+=" ";let d=0,u=e.length;for(;d<u;){let c=d++;y+=(c>0?",":"")+ie.__string_rec(e[c],t)}return y+="]",y}let n;try{n=e.toString}catch{return"???"}if(n!=null&&n!=Object.toString&&typeof n=="function"){let y=e.toString();if(y!="[object Object]")return y}let i=`{
2
- `;t+=" ";let o=e.hasOwnProperty!=null,a=null;for(a in e)o&&!e.hasOwnProperty(a)||a=="prototype"||a=="__class__"||a=="__super__"||a=="__interfaces__"||a=="__properties__"||(i.length!=2&&(i+=`,
3
- `),i+=t+a+" : "+ie.__string_rec(e[a],t));return t=t.substring(1),i+=`
4
- `+t+"}",i;break;case"string":return e;default:return String(e)}}static get __name__(){return"js.Boot"}get __class__(){return ie}};Ie.__toStr={}.toString;var Jt=s.$global,$=s.global("$hxClasses").Std=class Be{static string(e){return Ie.__string_rec(e,"")}static parseInt(e){let t=parseInt(e);return isNaN(t)?null:t}static get __name__(){return"Std"}get __class__(){return Be}};String.__name__=!0,Array.__name__=!0;var Qt=s.$global,de=s.global("$hxClasses")["genes.util.EsMap"]=class le extends s.inherits(){[s.new](){this.inst=new Map}set(e,t){this.inst.set(e,t)}get(e){return this.inst.get(e)}remove(e){return this.inst.delete(e)}exists(e){return this.inst.has(e)}keys(){return le.adaptIterator(this.inst.keys())}iterator(){return le.adaptIterator(this.inst.values())}toString(){let e=[],t=le.adaptIterator(this.inst.keys());for(;t.hasNext();){let r=t.next();e.push(""+$.string(r)+" => "+$.string(this.inst.get(r)))}return"{"+e.join(", ")+"}"}clear(){this.inst.clear()}static adaptIterator(e){let t,r,n=function(){let i=e.next();t=i.value,r=i.done};return{hasNext:function(){return r==null&&n(),!r},next:function(){r==null&&n();let i=t;return n(),i}}}static get __name__(){return"genes.util.EsMap"}get __class__(){return le}};de.prototype.inst=null;var tr=s.$global,Ve=s.global("$hxClasses")["haxe.ds.StringMap"]=class Ee extends s.inherits(de){[s.new](){super[s.new]()}copy(){let e=new Ee;return e.inst=new Map(this.inst),e}keyValueIterator(){return new pe(this)}static get __name__(){return"haxe.ds.StringMap"}static get __interfaces__(){return[Re]}static get __super__(){return de}get __class__(){return Ee}};var nr=s.$global,B=s.global("$hxClasses").HxOverrides=class Ae{static cca(e,t){let r=e.charCodeAt(t);if(r==r)return r}static substr(e,t,r){if(r==null)r=e.length;else if(r<0)if(t==0)r=e.length+r;else return"";return e.substr(t,r)}static now(){return Date.now()}static get __name__(){return"HxOverrides"}get __class__(){return Ae}};typeof performance!="undefined"&&typeof performance.now=="function"&&(B.now=performance.now.bind(performance));var ar=s.$global,J=s.global("$hxClasses").StringTools=class he{static isSpace(e,t){let r=B.cca(e,t);return r>8&&r<14?!0:r==32}static ltrim(e){let t=e.length,r=0;for(;r<t&&he.isSpace(e,r);)++r;return r>0?B.substr(e,r,t-r):e}static rtrim(e){let t=e.length,r=0;for(;r<t&&he.isSpace(e,t-r-1);)++r;return r>0?B.substr(e,0,t-r):e}static replace(e,t,r){return e.split(t).join(r)}static get __name__(){return"StringTools"}get __class__(){return he}};var gr=s.$global,Oe=s.global("$hxClasses").Lambda=class Fe{static exists(e,t){let r=s.getIterator(e);for(;r.hasNext();){let n=r.next();if(t(n))return!0}return!1}static get __name__(){return"Lambda"}get __class__(){return Fe}};var fr=s.$global,oe=s.global("$hxClasses").EReg=class Te extends s.inherits(){[s.new](e,t){this.r=new RegExp(e,t.split("u").join(""))}match(e){return this.r.global&&(this.r.lastIndex=0),this.r.m=this.r.exec(e),this.r.s=e,this.r.m!=null}matched(e){if(this.r.m!=null&&e>=0&&e<this.r.m.length)return this.r.m[e];throw k.thrown("EReg::matched")}matchedPos(){if(this.r.m==null)throw k.thrown("No string matched");return{pos:this.r.m.index,len:this.r.m[0].length}}matchSub(e,t,r){if(r==null&&(r=-1),this.r.global){this.r.lastIndex=t,this.r.m=this.r.exec(r<0?e:B.substr(e,0,t+r));let n=this.r.m!=null;return n&&(this.r.s=e),n}else{let n=this.match(r<0?B.substr(e,t,null):B.substr(e,t,r));return n&&(this.r.s=e,this.r.m.index+=t),n}}map(e,t){let r=0,n="";do{if(r>=e.length)break;if(!this.matchSub(e,r)){n+=$.string(B.substr(e,r,null));break}let i=this.matchedPos();n+=$.string(B.substr(e,r,i.pos-r)),n+=$.string(t(this)),i.len==0?(n+=$.string(B.substr(e,i.pos,1)),r=i.pos+1):r=i.pos+i.len}while(this.r.global);return!this.r.global&&r>0&&r<e.length&&(n+=$.string(B.substr(e,r,null))),n}static get __name__(){return"EReg"}get __class__(){return Te}};oe.prototype.r=null;var Pr=s.$global,Q=s.global("$hxClasses")["haxe.http.HttpJs"]=class He extends s.inherits(T){[s.new](e){this.async=!0,this.withCredentials=!1,super[s.new](e)}request(e){this.responseAsString=null,this.responseBytes=null,this.responseHeaders=null;let t=this.req=xe.createXMLHttpRequest(),r=this,n=function(u){if(t.readyState!=4)return;let c;try{c=t.status}catch{c=null}if(c==0&&xe.get_supported()&&s.$global.location!=null){let m=s.$global.location.protocol.toLowerCase();new oe("^(?:about|app|app-storage|.+-extension|file|res|widget):$","").match(m)&&(c=t.response!=null?200:404)}if(c==null&&(c=null),c!=null&&r.onStatus(c),c!=null&&c>=200&&c<400){r.req=null;let m=t.getAllResponseHeaders().split(`\r
5
- `),E=[],g=0,p=m;for(;g<p.length;){let w=p[g];++g,w!=""&&E.push(w)}m=E;let v=new Ve;r.responseHeaders=v;let b=0;for(;b<m.length;){let w=m[b];++b;let q=w.split(": "),O=q.shift(),x=q.length==1?q[0]:q.join(": ");x=J.ltrim(J.rtrim(x)),r.responseHeaders.inst.set(O,x)}r.success(z.ofData(t.response))}else if(c==null||c==0&&t.response==null)r.req=null,r.onError("Failed to connect or resolve host");else if(c==null){r.req=null;let m=t.response!=null?z.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}else switch(c){case 12007:r.req=null,r.onError("Unknown host");break;case 12029:r.req=null,r.onError("Failed to connect to host");break;default:r.req=null;let m=t.response!=null?z.ofData(t.response):null;r.responseBytes=m,r.onError("Http Error #"+t.status)}};this.async&&(t.onreadystatechange=n);let i,o=this.postData,a=this.postBytes;if(o==null)if(a==null)i=null;else{let u=a;i=new Blob([u.b.bufferValue])}else a==null?i=o:i=null;if(i!=null)e=!0;else{let u=0,c=this.params;for(;u<c.length;){let m=c[u];++u,i==null?i="":i=(i==null?"null":$.string(i))+"&";let E=m.name,g=(i==null?"null":$.string(i))+encodeURIComponent(E)+"=",p=m.value;i=g+encodeURIComponent(p)}}try{if(e)t.open("POST",this.url,this.async);else if(i!=null){let u=this.url.split("?").length<=1;t.open("GET",this.url+(u?"?":"&")+(i==null?"null":$.string(i)),this.async),i=null}else t.open("GET",this.url,this.async);t.responseType="arraybuffer"}catch(u){let c=k.caught(u).unwrap();this.req=null,this.onError(c.toString());return}t.withCredentials=this.withCredentials,!Oe.exists(this.headers,function(u){return u.name=="Content-Type"})&&e&&this.postData==null&&t.setRequestHeader("Content-Type","application/x-www-form-urlencoded");let y=0,d=this.headers;for(;y<d.length;){let u=d[y];++y,t.setRequestHeader(u.name,u.value)}t.send(i),this.async||n(null)}static get __name__(){return"haxe.http.HttpJs"}static get __super__(){return T}get __class__(){return He}};Q.prototype.async=null;Q.prototype.withCredentials=null;Q.prototype.responseHeaders=null;Q.prototype.req=null;var qr=s.$global,j=s.global("$hxClasses").SimpleFuture=class Le extends s.inherits(){[s.new](){this._isFinished=!1}trigger(e){this._result=e,this._isFinished=!0,this._callback!=null&&this._callback(this._result)}then(e){this._callback=e,this._isFinished&&e(this._result)}static get __name__(){return"SimpleFuture"}get __class__(){return Le}};j.prototype._callback=null;j.prototype._result=null;j.prototype._isFinished=null;var Ar=s.$global,I=s.global("$hxClasses").Reflect=class Ue{static field(e,t){try{return e[t]}catch{return null}}static getProperty(e,t){let r;if(e==null)return null;{let n;return e.__properties__?(r=e.__properties__["get_"+t],n=r):n=!1,n?e[r]():e[t]}}static setProperty(e,t,r){let n,i;e.__properties__?(n=e.__properties__["set_"+t],i=n):i=!1,i?e[n](r):e[t]=r}static fields(e){let t=[];if(e!=null){let n=Object.prototype.hasOwnProperty;for(var r in e)r!="__id__"&&r!="hx__closures__"&&n.call(e,r)&&t.push(r)}return t}static get __name__(){return"Reflect"}get __class__(){return Ue}};var Mr=s.$global,l=s.global("$hxClasses")["internal.RecoBackendV2"]=class f extends s.inherits(){[s.new](){}static _requestUri(){return"https://"+f._req_domain+"/api/"+f._environment+"/recommendations/requests"}static noConsentBody(){return{device_id:"no-consent",user_group:"no-consent",version:"no-consent"}}static buildRequestBody(e){let t={lists:e,page_type:f._page_visit!=null?f._page_visit:f._page_view,channel:"www-desktop"};if(f._consent==0){let r=f.noConsentBody(),n=0,i=I.fields(r);for(;n<i.length;){let o=i[n];++n,t[o]=I.field(r,o)}}else f._user_id!=null?t.user_id=f._user_id:t.device_id=f._device_id;return t}static _requestRecos(e){let t=new j,r=null,n=new Q(f._requestUri());n.setHeader("Content-Type","application/json"),n.setPostData(JSON.stringify(f.buildRequestBody(e))),n.onError=function(a){throw k.thrown("HTTP Request Error: "+a)},n.onStatus=function(a){if(a<200||a>=300)throw k.thrown("HTTP Status Error: "+a)};try{n.request(!1)}catch(a){let y=k.caught(a).unwrap();throw k.thrown("Failed to execute synchronous request: "+$.string(y))}let i=function(a){let y=JSON.parse(a),d=W.fromRequestData(y);t.trigger(d)},o=n.get_responseData();return o!=null?i(o):n.onData=i,t}static getRawRecommendations(e){return f._requestRecos(e)}static setConsent(e){e>2&&(e=2),f._consent=e}static setChannel(e){f._channel=e}static setPageVisit(e){f._page_visit=e}static setEnvironment(e){f._environment=e}static setDeviceId(e){f._device_id=e}static setUserId(e){f._user_id=e}static setRequestDomain(e){f._req_domain=e}static setPageView(e){f._page_view=e}static getRequestDomain(){return f._req_domain}static getEnvironment(){return f._environment}static getPageVisit(){return f._page_visit}static getUserId(){return f._user_id}static getDeviceId(){return f._device_id}static getPageView(){return f._page_view}static getConsent(){return f._consent}static getChannel(){return f._channel}static get __name__(){return"internal.RecoBackendV2"}get __class__(){return f}};l._environment=null;l._device_id="no-consent";l._user_id=null;l._consent=0;l._req_domain="europe-west1.froomle.com";l._page_visit=null;l._page_view=null;l._channel="www-desktop";var ze=function(){};ze.__isInterface__=!0;var Qe=function(){};Qe.__isInterface__=!0;var W=s.global("$hxClasses")["internal._RecommendationsInternal"]=class De extends s.inherits(){[s.new](e,t,r,n,i){this.request_id=t,this.user_group=r,this.device_id=e,this.user_id=n,this._lists=i}items(){let e=[],t=0,r=this._lists;for(;t<r.length;){let n=r[t];++t;let i=0,o=n.items;for(;i<o.length;){let a=o[i];++i,e.push(a)}}return e}lists(){return this._lists}getItemsByListName(e){let t=0,r=this._lists;for(;t<r.length;){let n=r[t];if(++t,n.list_name==e)return n}return null}static fromRequestData(e){let t=I.getProperty(e,"lists"),r=[],n=0;for(;n<t.length;){let i=t[n];++n;let o=I.getProperty(i,"items"),a=[],y=0;for(;y<o.length;){let u=o[y];++y,a.push(new ae(u))}let d=new G({limit:I.getProperty(i,"limit"),list_key:I.getProperty(i,"list_key"),list_name:I.getProperty(i,"list_name"),list_size:I.getProperty(i,"list_size"),items:a});r.push(d)}return new De(I.getProperty(e,"device_id"),I.getProperty(e,"request_id"),I.getProperty(e,"user_group"),I.getProperty(e,"user_id"),r)}static get __name__(){return"internal._RecommendationsInternal"}static get __interfaces__(){return[te]}get __class__(){return De}};W.prototype.request_id=null;W.prototype.user_group=null;W.prototype.user_id=null;W.prototype.device_id=null;W.prototype._lists=null;var G=s.global("$hxClasses")["internal._RecommendationsListInternal"]=class je extends s.inherits(){[s.new](e){this.items=e.items,this.limit=e.limit,this.list_key=e.list_key,this.list_name=e.list_name,this.list_size=e.list_size}static get __name__(){return"internal._RecommendationsListInternal"}static get __interfaces__(){return[re]}get __class__(){return je}};G.prototype.limit=null;G.prototype.list_key=null;G.prototype.list_name=null;G.prototype.list_size=null;G.prototype.items=null;var ae=s.global("$hxClasses")["internal._RecommendationItemInternal"]=class Ne extends s.inherits(){[s.new](e){this._data={},this.Id=I.getProperty(e,"item_id"),this.RequestId=I.getProperty(e,"request_id"),this.UserGroup=I.getProperty(e,"user_group");let t=0,r=I.fields(e);for(;t<r.length;){let n=r[t];++t,this._data[n]=I.field(e,n)}}get(e){return this._data[e]}static get __name__(){return"internal._RecommendationItemInternal"}static get __interfaces__(){return[se]}get __class__(){return Ne}};ae.prototype.Id=null;ae.prototype.RequestId=null;ae.prototype.UserGroup=null;ae.prototype._data=null;var C=s.global("$hxClasses")["internal._RecoBackendV2.RecoBackendV2_Fields_"]=class Me{static getRawRecommendations(e){return l.getRawRecommendations(e)}static setConsent(e){l.setConsent(e)}static setPageVisit(e){l.setPageVisit(e)}static setEnvironment(e){l.setEnvironment(e)}static setDeviceId(e){l.setDeviceId(e)}static setUserId(e){l.setUserId(e)}static setRequestDomain(e){l.setRequestDomain(e)}static setPageView(e){l.setPageView(e)}static setChannel(e){l.setChannel(e)}static getRequestDomain(){l.getRequestDomain()}static getConsent(){l.getConsent()}static getPageVisit(){l.getPageVisit()}static getEnvironment(){l.getEnvironment()}static getDeviceId(){l.getDeviceId()}static getUserId(){l.getUserId()}static getPageView(){l.getPageView()}static getChannel(){l.getChannel()}static get __name__(){return"internal._RecoBackendV2.RecoBackendV2_Fields_"}get __class__(){return Me}},Jr=C.getRawRecommendations,Kr=C.setConsent,Xr=C.setPageVisit,zr=C.setEnvironment,Qr=C.setDeviceId,Wr=C.setUserId,Gr=C.setRequestDomain,Yr=C.setPageView,Zr=C.setChannel,es=C.getRequestDomain,ts=C.getConsent,rs=C.getPageVisit,ss=C.getEnvironment,ns=C.getDeviceId,is=C.getUserId,ls=C.getPageView,os=C.getChannel;var gs=s.$global,A=s.global("$hxClasses").FroomleSdk=class V{static register(){V.registered||V._env_set&&(!V._page_visit_set&&!V._page_view_set||(V.registered=!0))}static buildScriptTag(){let e='<script src="https://cdn.froomle.com/reco-backend-v2/0.0.9/reco-backend-v2.min.js" data-froomle-env="'+l.getEnvironment()+'" ';return l.getPageVisit()!=null&&(e+='data-froomle-page-visit="'+l.getPageVisit()+'" '),l.getPageView()!=null&&(e+='data-froomle-page-view="'+l.getPageView()+'" '),l.getDeviceId()!=null&&(e+='data-froomle-device-id="'+l.getDeviceId()+'" '),l.getUserId()!=null&&(e+='data-froomle-user-id="'+l.getUserId()+'" '),l.getConsent()>0&&(e+='data-froomle-consent="'+l.getConsent()+'" '),l.getRequestDomain()!=null&&(e+='data-froomle-request-domain="'+l.getRequestDomain()+'" '),e+="><\/script>",e}static setEnvironment(e){l.setEnvironment(e),V._env_set=!0,V.register()}static setDeviceId(e){l.setDeviceId(e)}static setUserId(e){l.setUserId(e)}static setConsent(e){l.setConsent(e)}static setPageView(e){l.setPageView(e),V._page_view_set=!0,V.register()}static setPageVisit(e){l.setPageVisit(e),V._page_visit_set=!0,V.register()}static setRequestDomain(e){l.setRequestDomain(e)}static getRawRecommendations(e){return l.getRawRecommendations(e)}static getVersion(){return"0.0.9"}static get __name__(){return"FroomleSdk"}get __class__(){return V}};A._env_set=!1;A._page_visit_set=!1;A._page_view_set=!1;A.registered=!1;var ps=s.$global,Y=s.global("$hxClasses")["internal.domHandler.FroomleDomTree"]=class fe extends s.inherits(){[s.new](){}createElement(e){return window.document.createElement(e)}querySelectorAll(e){let t=this.root,r=[],n=t.querySelectorAll(e),i=0,o=n.length;for(;i<o;){let a=i++;r.push(n.item(a))}return r}getRoot(){return this.root}toString(){return this.root.outerHTML}static run(){}static fromHtml(e){return new fe}static fromDocument(){let e=new fe;return e.root=window.document,e}static get __name__(){return"internal.domHandler.FroomleDomTree"}get __class__(){return fe}};Y.prototype.root=null;var fs=s.$global,L=s.global("$hxClasses")["internal._ADomNode.ADomNode"]=class ke{static _new(e){return e}static fromElement(e){return e}static create(e,t){return window.document.createElement(t)}static replaceChild(e,t,r){e.replaceChild(t,r)}static get attributes(){return this.get_attributes()}static get_attributes(e){let t=e,r=[],n=0,i=t.attributes.length;for(;n<i;){let o=n++,a=t.attributes.item(o);r.push({name:a.name,value:a.value})}return r}static addChild(e,t){e.appendChild(t)}static removeChild(e,t){e.removeChild(t)}static getAttribute(e,t){return e.getAttribute(t)}static setAttribute(e,t,r){e.setAttribute(t,r)}static getText(e){return e.textContent}static setText(e,t){e.textContent=t}static get children(){return this.get_children()}static get_children(e){let t=[],n=e.children,i=0,o=n.length;for(;i<o;){let a=i++;t.push(n[a])}return t}static querySelectorAll(e,t){let r=e,n=[],i=r.querySelectorAll(t),o=0,a=i.length;for(;o<a;){let y=o++;n.push(i.item(y))}return n}static getFilterKeyValue(e){let t=0,r=ke.get_attributes(e);for(;t<r.length;){let n=r[t];if(++t,n.name.startsWith("data-froomle-reco-filter-"))return{key:n.name.substring(25),value:n.value}}return{key:null,value:null}}static get __name__(){return"internal._ADomNode.ADomNode_Impl_"}get __class__(){return ke}};var Ps=s.$global,ue=s.global("$hxClasses")["internal.domHandler.DomDomDom"]=class K extends s.inherits(){[s.new](){}static _fillRecoTargets(e){let t=new j;if(e==null)return t.trigger(!1),t;let r=[],n=e,i=[],o=n.querySelectorAll("*"),a=0,y=o.length;for(;a<y;){let h=a++;i.push(o.item(h))}let d=i,u=0;for(;u<d.length;){let h=d[u];++u;let D=0,R=L.get_attributes(h);for(;D<R.length;){let M=R[D];++D,M.name=="data-froomle-reco"&&r.push(h)}}let c=[],m=0;for(;m<r.length;){let h=r[m];++m,h.getAttribute("data-froomle-request-id")==null&&(h.getAttribute("data-froomle-id")==null||h.getAttribute("data-froomle-id")=="")&&c.push(h)}if(c.length<1)return new j;let E=[],g=[],p="",v="",b="",w=[],q=function(){let h={list_name:p,list_size:w.length,limit:w.length};v!=null&&I.setProperty(h,v,b),E.push(h),g.push(w)},O=function(h,D,R,M){p=h,v=D,b=R,w=[M]},x=0;for(;x<c.length;){let h=c[x];++x;let D=h.getAttribute("data-froomle-reco"),R=L.getFilterKeyValue(h);if(p==""){O(D,R.key,R.value,h);continue}else if(D==p&&R.key==v&&R.value==b){w.push(h);continue}else{q(),O(D,R.key,R.value,h);continue}}return p!=""&&q(),C.getRawRecommendations(E).then(function(h){let D=0,R=h.lists();for(;D<R.length;){let M=R[D],N=D++,U=M,X=U.items.length!=g[N].length,ee=0,ye=U.items;for(;ee<ye.length;){let be=ye[ee],Ke=ee++,Xe=be;K._fillParameters(g[N][Ke],Xe,h.request_id)}}t.trigger(!0)}),t}static _fillParameters(e,t,r){let n=function(m,E,g,p){p==null&&(p="");let v=function(b,w,q){q==null&&(q="fgh");try{w=new oe("\\\\[(\\\\w+)\\\\]","g").map(w,function(R){return"."+R.matched(1)}),w=J.replace(w,"[","."),w=J.replace(w,"]",""),B.cca(w,0)==46&&(w=B.substr(w,1,null));let x=w.split("."),S=b.get(x[0]),h=1,D=x.length;for(;h<D;){let R=h++;if(S==null)return null;S instanceof Array&&$.parseInt(x[R])!=null?S=S[$.parseInt(x[R])]:S=I.field(S,x[R])}return S}catch{return q}};try{let b=v(t,g,p);E=="inner"?m.textContent=b:m.setAttribute(E,b)}catch{}};e.setAttribute("data-froomle-id",t.Id),e.setAttribute("data-froomle-request-id",r);let i=e,o=[],a=i.querySelectorAll("*"),y=0,d=a.length;for(;y<d;){let m=y++;o.push(a.item(m))}let u=o,c=0;for(;c<u.length;){let m=u[c];++c;let E=0,g=L.get_attributes(m);for(;E<g.length;){let p=g[E];if(++E,p.name.startsWith("data-froomle-param-")){let v=J.replace(p.name,"data-froomle-param-",""),b=p.value;n(m,v,b)}}}}static _orderElements(e){let t=function(g,p,v){let b=[],w=L.get_children(g),q=0;for(;q<w.length;){let S=w[q];if(++q,S.getAttribute("data-froomle-ordervalue")!=null){b.push(S);let D=L.create(e,"span");D.setAttribute("data-froomle-tmp-node",""),L.replaceChild(g,D,S)}}let O=[],x=0;for(;x<b.length;){let S=b[x];++x,O.push(S.getAttribute("data-froomle-ordervalue"))}return{el:g,key:p,values:O,orderChildren:b,list_name:v}},r=new j,n=e.getRoot(),i=[],o=n.querySelectorAll("*"),a=0,y=o.length;for(;a<y;){let g=a++;i.push(o.item(g))}let d=i,u=[],c=0;for(;c<d.length;){let g=d[c];++c;let p=0,v=L.get_attributes(g);for(;p<v.length;){let b=v[p];++p,b.name.startsWith("data-froomle-order-")&&u.push(t(g,b.name.substring(19),b.value))}}if(u.length<1)return r.trigger(!1),r;let m=[],E=0;for(;E<u.length;){let g=u[E];++E;let p={list_name:g.list_name,limit:g.values.length,list_size:g.values.length},v={};I.setProperty(v,g.key,g.values),I.setProperty(p,"order",v),m.push(p)}return C.getRawRecommendations(m).then(function(g){let p=0,v=g.lists();for(;p<v.length;){let b=v[p],q=p++,O=b,x=u[q];x.el.setAttribute("data-froomle-request-id",g.request_id);let S=[],h=0,D=O.items;for(;h<D.length;){let _e=D[h];++h;let N=_e.get(x.key),U=0,X=x.values;for(;U<X.length;){let ee=X[U],be=U++;if(N==ee){S.push(x.orderChildren[be]);break}}}let R=0,M=S.length;for(;R<M;){let _e=R++,N=0,U=L.get_children(x.el);for(;N<U.length;){let X=U[N];if(++N,X.getAttribute("data-froomle-tmp-node")==""){L.replaceChild(x.el,S[_e],X);break}}}}r.trigger(!0)}),r}static domInit(e){K._orderElements(e).then(function(t){K._fillRecoTargets(e.getRoot())})}static fillElementRecos(e){K._fillRecoTargets(e)}static runFromHtml(e){if(e=="")return"";let t=Y.fromHtml(e);return K.domInit(t),t.toString()}static get __name__(){return"internal.domHandler.DomDomDom"}get __class__(){return K}};var qs=s.$global;var P=class P{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e=[];for(let t of P.impressionQueue){let r={event_type:"impression",page_type:l.getPageVisit(),action_item:t.getAttribute("data-froomle-id"),action_item_type:"article",channel:"www-desktop"};l.getUserId()?r.user_id=l.getUserId():r.device_id=l.getDeviceId();let n=t.getAttribute("data-froomle-reco");if(n){r.list_name=n;let i=t.getAttribute("data-froomle-request-id");if(!i)throw console.error("element need reco but doesnt have request id registered yet"),new Error("element need reco but doesnt have request id registered");r.request_id=i}}return P.impressionQueue=[],JSON.stringify({events:e})}static sendImpressions(){P.impressionQueue.length!==0&&fetch(P.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:P.generateBody()})}static getViewPortRect(){let e=window.innerWidth||document.documentElement.clientWidth,t=window.innerHeight||document.documentElement.clientHeight;return{left:0,top:0,x:0,y:0,toJSON(){},right:e,bottom:t,width:e,height:t}}static intersectsWithViewPortRect(e){let t=e.getBoundingClientRect(),r=P.getViewPortRect();return t.right>r.left&&t.left<r.right&&t.bottom>r.top&&t.top<r.bottom}static addIntersectionImpressionListener(e){P.observer.observe(e)}static processDocument(){if(l.getDeviceId()!="no-consent"){for(let e of document.querySelectorAll("[data-froomle-id]"))P.intersectsWithViewPortRect(e)?P.impressionQueue.push(e):P.addIntersectionImpressionListener(e);P.sendImpressions()}}};P.impressionQueue=[],P.observer=new IntersectionObserver((e,t)=>{e.forEach(r=>{r.isIntersecting&&(P.impressionQueue.push(r.target),P.observer.unobserve(r.target))}),P.impressionQueue.length>0&&P.sendImpressions()});var Z=P;var ce=class _{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e={event_type:"page_visit",page_type:l.getPageVisit(),channel:"www-desktop"};return l.getUserId()?e.user_id=l.getUserId():e.device_id=l.getDeviceId(),JSON.stringify(e)}static sendPageVisit(){l.getPageVisit()&&l.getDeviceId()!="no-consent"&&fetch(_.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:_.generateBody()})}};var ge=class _{static uri(){return"https://"+l.getRequestDomain()+"/api/"+l.getEnvironment()+"/events"}static generateBody(){let e={event_type:"detail_pageview",page_type:"article_detail",action_item:l.getPageView(),action_item_type:"article",channel:"www-desktop"};return l.getUserId()?e.user_id=l.getUserId():e.device_id=l.getDeviceId(),JSON.stringify(e)}static sendPageView(){l.getPageView()&&l.getDeviceId()!="no-consent"&&fetch(_.uri(),{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:_.generateBody()})}};var We=A.setEnvironment,Ge=A.setPageVisit,Zs=A.setConsent,Ye=A.setUserId,Ze=A.setDeviceId,et=A.setRequestDomain,tt=A.setPageView;if(typeof document!="undefined"){let _=document.currentScript;if(_){let e=_.getAttribute("data-froomle-device-id"),t=_.getAttribute("data-froomle-user-id"),r=_.getAttribute("data-froomle-env"),n=_.getAttribute("data-froomle-page-visit"),i=_.getAttribute("data-froomle-request-domain"),o=_.getAttribute("data-froomle-page-view");We(r),o&&tt(o),n&&Ge(n),e&&Ze(e),t&&Ye(t),i&&et(i)}else console.error("Froomle SDK: could not find the script tag where the sdk is included.");document.addEventListener("DOMContentLoaded",()=>{ue.domInit(Y.fromDocument()),Z.processDocument(),ce.sendPageVisit(),ge.sendPageView(),new MutationObserver(t=>{for(let r of t)if(r.type==="childList"&&Z.processElement(r.target),r.type==="attributes")if(r.attributeName==="data-froomle-reco"){let n=r.target.getAttribute("data-froomle-request-id");(!n||n==="")&&ue.fillElementRecos(r.target)}else r.attributeName==="data-froomle-request-id"&&ue.fillElementRecos(r.target)}).observe(document,{childList:!0,subtree:!0})})}export{se as RecommendationItem,re as RecommendationList,te as Recommendations,Zs as setConsent,Ze as setDeviceId,We as setEnvironment,Ge as setPageVisit,et as setRequestDomain,Ye as setUserId};
1
+ import{a,b,c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r}from"./chunk-72IYS3TH.js";export{c as RecommendationItem,b as RecommendationList,a as Recommendations,o as addHistories,q as fulfillRecommendations,p as getRecommendations,r as proxyReco,d as sendEvent,g as setConsent,l as setContextItem,m as setContextItemType,n as setCustomVariable,i as setDeviceId,e as setEnvironment,f as setPageVisit,j as setRequestDomain,k as setSafeRequest,h as setUserId};
@@ -0,0 +1,40 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { a as RecommendationItem } from './Recommendations.d-HGeAMYU5.js';
3
+
4
+ declare function FroomleCustomItem({ children, id }: {
5
+ children: React.ReactNode;
6
+ id: string;
7
+ }): React.ReactNode;
8
+
9
+ declare function FroomleOrderItem({ children, value }: {
10
+ children: React.ReactNode;
11
+ value: string;
12
+ }): React.JSX.Element;
13
+ declare namespace FroomleOrderItem {
14
+ var displayName: string;
15
+ }
16
+ declare function FroomleOrder({ children, list, category }: {
17
+ children: React.ReactNode;
18
+ list: string;
19
+ category: string;
20
+ }): React.JSX.Element;
21
+
22
+ type RecoRequest = {
23
+ filters: {
24
+ key: string;
25
+ value: string;
26
+ }[];
27
+ list: string;
28
+ };
29
+ declare function FroomleSdkInit(props: {
30
+ children: any;
31
+ }): React.JSX.Element;
32
+ interface FroomleRecoProps {
33
+ reco: RecommendationItem & PromiseLike<RecommendationItem>;
34
+ children: ReactNode;
35
+ }
36
+ declare function FroomleReco({ reco, children, ...props }: FroomleRecoProps): React.JSX.Element;
37
+ declare const useReco: () => RecommendationItem;
38
+ declare function useCreateReco(req: RecoRequest): RecommendationItem & PromiseLike<RecommendationItem>;
39
+
40
+ export { FroomleCustomItem, FroomleOrder, FroomleOrderItem, FroomleReco, FroomleSdkInit, useCreateReco, useReco };
package/dist/react.js ADDED
@@ -0,0 +1 @@
1
+ import{d as m,r as x,s as I}from"./chunk-72IYS3TH.js";import c,{createContext as P,useContext as O,useEffect as F,useRef as y,useState as k}from"react";import R from"react";function v({children:e,id:r}){let[l,o]=R.useState(!1);return l||(m.addHistories([r]),o(!0)),R.createElement(R.Fragment,null,e)}import i from"react";function p({children:e,value:r}){return i.createElement(i.Fragment,null,e)}p.displayName="FroomleOrderItem";function N({children:e,list:r,category:l}){let[o,n]=i.useState(null);return i.createElement(i.Fragment,null,(()=>{let h=i.Children.toArray(e),d=[],g=[],u=[[]];for(let t of h)if(console.log(t.type.displayName),i.isValidElement(t)&&t.type===p){let a=t.props.value;d.push(a),g.push(t),u.push([])}else u[u.length-1].push(t);if(o){let t=[];for(let a of o){let f=d.indexOf(a);f!==-1&&(t.push(g[f]),t.push(...u[f+1]))}return t}else return m.getOrder(r,l,d).then(t=>{n(t)}),h})())}function M(e){return F(()=>{x()},[]),c.createElement(c.Fragment,null,e.children)}var C=P(null);function T({reco:e,children:r,...l}){let o=y(null);return c.useEffect(()=>{let n=!1;return Promise.resolve(e).then(s=>{n||o.current&&(o.current.setAttribute("data-froomle-id",s.Id),o.current.setAttribute("data-froomle-request-id",s.RequestId))}),()=>{n=!0}},[e]),c.createElement(C.Provider,{value:e},c.createElement("div",{ref:o,...l},r))}var U=()=>{let e=O(C);if(e===null)throw new Error("useFroomleReco must be used within a FroomleRecoProvider");return e};function j(e){let r=y(null),[l,o]=k(0);return r.current||(r.current=I(e)),F(()=>{let n=!0;return r.current.then(()=>{n&&o(1)}),()=>{n=!1}},[]),r.current}export{v as FroomleCustomItem,N as FroomleOrder,p as FroomleOrderItem,T as FroomleReco,M as FroomleSdkInit,j as useCreateReco,U as useReco};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@froomle/frontend-sdk",
3
- "version": "0.0.9",
3
+ "version": "0.0.49-TEMPLATE",
4
4
  "description": "Froomle frontend SDK",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -14,6 +14,11 @@
14
14
  "import": "./dist/index.js",
15
15
  "require": "./dist/index.cjs",
16
16
  "default": "./dist/index.js"
17
+ },
18
+ "./react": {
19
+ "types": "./dist/react.d.ts",
20
+ "import": "./dist/react.js",
21
+ "require": "./dist/react.cjs"
17
22
  }
18
23
  },
19
24
  "types": "dist/index.d.ts",
@@ -27,19 +32,26 @@
27
32
  ],
28
33
  "scripts": {
29
34
  "prepublishOnly": "npm run build",
30
- "test": "npx playwright test",
31
35
  "type-check": "tsc --noEmit",
32
- "buildn": "node build.js",
33
36
  "build": "tsup"
34
37
  },
35
38
  "engines": {
36
39
  "node": ">=16.0.0"
37
40
  },
38
41
  "devDependencies": {
42
+ "@playwright/test": "^1.57.0",
39
43
  "shx": "^0.4.0",
40
44
  "tsup": "^8.5.0",
41
- "typescript": "^5.9.3",
42
- "@playwright/test": "^1.57.0"
45
+ "typescript": "^5.9.3"
46
+ },
47
+ "peerDependencies": {
48
+ "react": "^18.0.0",
49
+ "@types/react": "^19.2.10"
50
+ },
51
+ "peerDependenciesMeta": {
52
+ "react": {
53
+ "optional": true
54
+ }
43
55
  },
44
56
  "keywords": [
45
57
  "sdk",