@uniformdev/optimize-tracker
Advanced tools
Comparing version 12.2.1-alpha.143 to 12.2.1-alpha.170
@@ -1,1 +0,1 @@ | ||
import{IntentTagStrength as M,Scope as k,SignalFrequency as ie,SignalType as we}from"@uniformdev/optimize-common";var ye={maxDecay:.95,daysInMonth:30},be=(i,t)=>Math.round((i-t)/(1e3*60*60*24)),Te=(i,t,e)=>{if(!t)return console.warn("[DecayByDay]: daysInMonth is not populated."),null;let r;return e?r=Math.min(e,i/t):r=i/t,1-r},Y=i=>{let t={...ye,...i};return r=>{if(!(r==null?void 0:r.updated)||!r.values)return Promise.resolve(void 0);let{updated:n,values:a}=r,s=t.today||new Date().valueOf(),o=be(s,n!=null?n:0),c=Te(o,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(a).forEach(u=>{var f,S;let g=a[u];typeof g=="number"&&(g=a[u]={str:g});let d=Number((S=(f=a[u])==null?void 0:f.str)!=null?S:0);c&&(l.values[u].str=d*c)}),Promise.resolve(l))}};import{IntentTagStrength as ke}from"@uniformdev/optimize-common";var Z=()=>{let i="cumulative";return({previousValue:e,valueToAdd:r})=>{let n={...e};return Object.keys(r).forEach(s=>{var c,l,u;let o=(c=r[s])==null?void 0:c.str;if(o===ke.Antimatter)delete n[s];else{let g=Number((u=(l=n[s])==null?void 0:l.str)!=null?u:0),d=Number(o!=null?o:0),f=g+d;f>0?n[s]={str:f}:delete n[s]}}),{values:n,strategy:i,updated:new Date().valueOf()}}};var O={error:3,warn:2,info:1,verbose:0},ee=(i,t)=>!(!i||i==="none"||O[i]!==void 0&&O[t]!==void 0&&O[t]<O[i]),I=">",F=(i,t)=>{if(i.includes(I)||t.includes(I))throw`"${I}" is a reserved enrichment character`;return`${i}${I}${t}`},te=i=>{let t=i.split(I);if(t.length===2)return{type:t[0],value:t[1]}},L=(i,t)=>{let e=te(t);if(!!e&&e.type===i)return e.value},re=()=>{if(!(typeof window=="undefined"||typeof document=="undefined"))return{cookies:document.cookie,url:window.location.href,userAgent:navigator.userAgent}};var C=(...i)=>{let t={};return i.forEach(e=>{Object.keys(e).forEach(r=>{t[r]||(t[r]={str:0});let n=e[r];n.str&&(t[r].str=Number(t[r].str)+Number(n.str))})}),t};var ne=(i,t)=>{let e=i!=null?i:{str:0},r=t!=null?t:{str:0};return{str:Number(e.str)-Number(r.str)}},x=(i,t)=>{let e={};return i||(i={}),t||(t={}),Object.keys(i).forEach(r=>{e[r]=ne(i[r],t[r])}),Object.keys(t).forEach(r=>{e[r]||(e[r]=ne(i[r],t[r]))}),Object.keys(e).forEach(r=>{e[r].str===0&&delete e[r]}),e};var D=(i,t)=>{let e=x(i,t);return!(Object.keys(e).length>0)};var j=i=>!i||Object.keys(i).length===0;var Ee=class{constructor(t){this._intentMappings=[];this._behaviorQueue=[];this._behaviorKeys={};this._events=[];this._listeners=[];this._testSettings=[];this._signalEvaluators={};this._initialized=!1;this._lastBroadcastScoring=void 0;var e,r;if(this._intentManifest=t.intentManifest,t.intentManifest&&this.addIntents(t.intentManifest.site.intents),this._plugins=t.plugins,this._storage=t.storage,this._scopeStrategies=t.scopes,this._scoringStrategy=(e=t.scoring)!=null?e:Z(),this._decayStrategy=(r=t.decay)!=null?r:Y(),this._serverState=this.getServerState(),t.testing){let n=Array.isArray(t.testing)?t.testing:[t.testing];this._testSettings.push(...n)}}async initialize(){var t,e;this.log({level:"info",message:"Received intent manifest",region:"initialize",intents:this._intentManifest}),await this.initializeScopes(),await this.loadPlugins(),this._signalEvaluators=this.loadSignalEvaluators(),(e=(t=this._storage.scopes).setScoringValueExternallyUpdatedCallback)==null||e.call(t,async()=>{await this.broadcastScoring()}),this._lastBroadcastScoring=void 0,this._initialized=!0}isInitialized(){return this._initialized}async getIntentStrength(t){let e=this.getScopeNames(t),r={};return await Promise.all(e.map(async a=>{let s=await this.readScoring(a);r[a]=s})),this.combineScoring(r)}async getIntentStrengthSingle(t,e){let r=await this.getIntentStrength(e);return r==null?void 0:r[t]}async addIntentStrength(t,e){let r=await this.readScoring(t);await this.applyScoringStrategy(t,r,e,1),await this.broadcastScoring()}async setIntentStrength(t,e){await this.applyScoringStrategy(t,void 0,e,1),await this.broadcastScoring()}async removeIntent(t,e){let r=this.getScopeNames(e==null?void 0:e.scope),n=typeof t=="string"?[t]:t,a=!1;return await Promise.all(r.map(async s=>{let o=await this._storage.scopes.getScoring(s);if(o){let c={},l=!1;Object.keys(o.values).map(u=>{t&&(n==null?void 0:n.indexOf(u))===-1?c[u]=o.values[u]:(l=!0,a=!0)}),l&&(await this.writeScoring(s,{...o,values:c},o),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),a}addScoringChangeListener(t){this._listeners.push(t)}removeScoringChangeListener(t){let e=this._listeners.indexOf(t);e>-1&&this._listeners.splice(e,1)}async reevaluateSignals(t){let e="reevaluateSignals";if(this.log({level:"verbose",message:"Signals reevaluating...",region:e}),!this._intentMappings||!this._intentMappings.length)return this.log({level:"warn",message:"Intents list is empty",region:e}),{signalMatches:{}};let r={};await Promise.all(this.getAllScopeStrategies().map(g=>g.get().then(d=>{d&&(r[d==null?void 0:d.type]=d)})));let n=Object.keys(this._behaviorKeys),a=n.length===0?this._behaviorQueue:[...this._behaviorQueue,...n.map(g=>this._behaviorKeys[g])],o=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:a})))).flatMap(g=>g),c=o.reduce((g,d)=>{var h;if(!d.statsScope||!d.statistics||!d.signal)return g;let f=d.statsScope.type,S=g[f]=(h=g[f])!=null?h:{};return S[d.signal.id]=d.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var d;return(d=this.getScopeStrategy(g))==null?void 0:d.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(o),u=await this.applySignalEvaluationSummary(l);return await this.broadcastScoring(u),this.clearBehaviorQueue(),this.clearEventQueue(),this.log({level:"info",message:"Reevaluated signals",region:e,...u}),{scoring:u,signalMatches:Object.keys(l).reduce((g,d)=>(g[d]=l[d].matches,g),{})}}addBehaviorActivity(t,e){this.log({level:"verbose",region:"addBehaviorActivity",message:"Behavior activity added to queue",...t,sourceKey:e}),e?this._behaviorKeys[e]=t:this._behaviorQueue.push(t)}async addEvent(t,e){this._events.push(t),e&&e.quiet!==void 0&&e.quiet||await this.reevaluateSignals()}async getEnrichmentValues(t,e){if(!this.isKnownEnrichment(t))return;let n=await this.getIntentStrength(e==null?void 0:e.scope)||{};return Object.keys(n||{}).reduce((s,o)=>{let c=L(t,o);return c&&n[o].str&&(s[c]=Number(n[o].str||0)),s},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||k.Visitor,n=Array.isArray(t)?t:[t],a={},s={};for(let l of n)if(this.isKnownEnrichment(l.name)){let g=F(l.name,l.value);(e==null?void 0:e.clearValues)&&(s[l.name]=!0);let d=Number(((c=a[g])==null?void 0:c.str)||0);a[g]={str:d+(l.str||M.Normal)}}for(let l of Object.keys(s))await this.removeEnrichment(l,{scope:r,quiet:!0});let o=await this.readScoring(r);await this.applyScoringStrategy(r,o,a,n.length),(e==null?void 0:e.quiet)||await this.reevaluateSignals()}async removeEnrichment(t,e){let r=(e==null?void 0:e.scope)||k.Visitor,n=await this.getIntentStrength(r)||{},a=Object.keys(n||{}).filter(s=>{if(L(t,s))return s},{});await this.removeIntent(a,{scope:r,quiet:e==null?void 0:e.quiet})}trackPersonalization(t,e){var r;t&&((r=this._plugins)==null||r.track(n=>n(t,e)))}async isInPersonalizationControlGroup(t){var l;let{scope:e,sampleSize:r}=t||{},n=new Date,a=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>n));if(!a)return!1;let s=e!=null?e:k.Visitor,o=await((l=this.getScopeStrategy(s))==null?void 0:l.get());return a.strategy.isInPersonalizationControlGroup(o,r)}getTestValue(t){var r,n,a,s,o,c;let e=(n=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:n.find(l=>l.name===t);return(e==null?void 0:e.winning_variation_id)?Promise.resolve(e.winning_variation_id):((s=(a=this._serverState)==null?void 0:a.tests)==null?void 0:s[t])?Promise.resolve((c=(o=this._serverState)==null?void 0:o.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var n,a;let r=(a=(n=this._intentManifest)==null?void 0:n.site.tests)==null?void 0:a.find(s=>s.name===t);return(r==null?void 0:r.winning_variation_id)?Promise.resolve():this._storage.tests.setTestSelection(t,e)}isTestEnabled(t){var r,n;return!!((n=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:n.find(a=>a.name===t))}async identify(t){var a;let e=(a=this._storage)==null?void 0:a.scopes.identify;if(!e){this.log({region:"identify",level:"warn",message:"Visitor was identified, but storage did not implement identification"});return}let r=await this._storage.scopes.getScoring(k.Visitor),n=await e(t);n&&(await this.writeScoring(k.Visitor,n,r),await this.broadcastScoring())}async forgetMe(t){await Promise.all([this._storage.scopes.delete(t),this._storage.tests.delete()]),this.log({level:"info",region:"forgetMe",message:`Visitor has been forgotten (allDevices: ${t})`}),await this.broadcastScoring()}log(t){var e;(e=this._plugins)==null||e.log(r=>r(t))}async reevaluateSignal({intent:t,scopes:e,signal:r,requestContext:n,behaviorQueue:a}){var P,y,V;let s="reevaluateSignal",o=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,o)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:s});return}let l=this._signalEvaluators[r.type];if(!l){this.log({level:"warn",message:`Signal ${r.type} not handled by any plugin. It will be ignored.`,region:s});return}!r.str&&r.str!==M.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${M.Normal}`,region:s}),r.str=M.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),d={intent:t,signal:r,scope:u,statsScope:o},f={signal:r,intent:t,behaviors:a,state:g,requestContext:n||re(),events:this._events,log:this.log.bind(this)},{requestContext:S,log:h,...b}=f,_=l(f),v=await Promise.resolve(_);if(this.log({level:"verbose",message:`${r.type} Signal evaluation result: ${(v==null?void 0:v.strength)?v.strength:"no match"}`,region:s,signal:r,intent:t,result:v}),d.result=v,typeof v=="undefined")return d;if(r.id){let T=await this.resolveFrequencyScope(r,e);return T&&(d.statistics={...(P=T.statistics)==null?void 0:P[r.id],evaluations:(((V=(y=T.statistics)==null?void 0:y[r.id])==null?void 0:V.evaluations)||0)+1}),u&&r.id&&v.state&&(u.state.signals=u.state.signals||{},u.state.signals[r.id]=v.state),d}}async resolveFrequencyScope(t,e){let r=t.freq===ie.OncePerVisit?k.Visit:k.Visitor;return this.resolveScope(r,e)}determineIfSignalShouldEvaluate(t,e){var r,n;return t.id?!t.freq||t.freq===ie.Always||t.type===we.PageViewCount?!0:!((n=(r=e==null?void 0:e.statistics)==null?void 0:r[t.id])==null?void 0:n.evaluations):(this.log({level:"info",region:"determineIfSignalShouldEvaluate",message:"Signal ID is not populated"}),!1)}combineScoring(t){let e=Object.keys(t).map(r=>t[r]).filter(r=>r&&r.values).map(r=>r.values);return C(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:n,scope:a,result:s,intent:o}=r,{id:c}=o;if(a&&s&&(s.strength||s.strength===M.Antimatter)){let{score:l,matches:u}=e[a.type]=e[a.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(s.strength),u.push({intentId:c,signalStrength:s.strength,signalType:n.type})}}),this.log({level:"verbose",message:"Signal evaluation matches",region:"processSignalEvaluations",summary:e}),e}async reevaluateIntent({intent:t,scopes:e,requestContext:r,behaviorQueue:n}){let a="Reevaluate Intent",s=[],{id:o,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${o} does not define any signals.`,region:a}):await Promise.all(t.signals.map(async l=>{let u=await this.reevaluateSignal({intent:t,scopes:e,signal:l,requestContext:r,behaviorQueue:n});(u==null?void 0:u.result)&&s.push(u)})),s}clearBehaviorQueue(){let t=this._behaviorQueue.length,e=Object.keys(this._behaviorKeys).length;if(t||e){let r=this._behaviorQueue.splice(0,t),n=this._behaviorKeys;this._behaviorKeys={},this.log({level:"verbose",message:"Queue cleared",region:"clearBehaviorQueue",count:t+e,cleared:r,clearedKeys:n})}}clearEventQueue(){if(this._events.length){let t=this._events.splice(0,this._events.length);this.log({level:"verbose",message:"Clearing event queue",region:"clearEventQueue",count:t.length,cleared:t})}}async applySignalEvaluationSummary(t){let e="applySignalEvaluationSummary",r=this.getScopeNames(),n={};await Promise.all(r.map(async s=>{let{score:o,matches:c}=t[s]||{matches:[],score:{}},l=await this.readScoring(s);n[s]=await this.applyScoringStrategy(s,l,o,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...n});let a=this.combineScoring(n);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...a}),a}getServerState(){if(this._serverState)return this._serverState;if(typeof document=="undefined")return;let t=document.getElementById("__UNIFORM_DATA__");return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}resolveSignalStorage(t,e){var a,s;let r="resolveSignalStorage",n=e.id?(a=t==null?void 0:t.state.signals)==null?void 0:a[e.id]:{};return e.id&&!((s=t==null?void 0:t.state.signals)==null?void 0:s[e.id])?this.log({level:"verbose",message:`Signal "${e.id}" is using default state`,region:r}):this.log({level:"verbose",message:`Signal "${e.id}" is using stored state`,region:r,...n}),n}async loadPlugins(){if(!this._plugins)return;let t=this._plugins.findPlugins("initialize");await Promise.all(t.map(e=>e.initialize({setIntentStrength:this.setIntentStrength.bind(this),log:this.log.bind(this),manifest:this._intentManifest})))}loadSignalEvaluators(){var e;return(((e=this._plugins)==null?void 0:e.find("signalEvaluatorMapping"))||[]).reduce((r,n)=>{let a=n();return Object.keys(a).forEach(s=>{r[s]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${s}`}),r[s]=a[s]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:n}=r;return{...r,signals:n.map(a=>{let{id:s}=a;return{...a,id:s!=null?s:`${r.id}:${JSON.stringify(a)}`}})}});this._intentMappings.push(...e)}async readScoring(t){let e=await this._storage.scopes.getScoring(t);if(e&&this._decayStrategy){let r={...e},n=await this._decayStrategy(e);typeof n!="undefined"&&(e=n),n&&this.log({level:"verbose",message:"Score decay has been applied",region:"readScoring",pre:r,post:e})}return e}getScopeStrategy(t){if(this._scopeStrategies)return this._scopeStrategies[t]}getAllScopeStrategies(){return this._scopeStrategies?Object.keys(this._scopeStrategies).map(t=>this._scopeStrategies[t]):[]}getScopeNames(t){return this._scopeStrategies?t&&this._scopeStrategies[t]?[t]:Object.keys(this._scopeStrategies):[]}async resolveScope(t,e){var s;let r="Resolve Scope",n=t||k.Visitor,a=e&&t?e[t]:await((s=this.getScopeStrategy(n))==null?void 0:s.get());return a||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(a==null?void 0:a.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${a==null?void 0:a.type}" was resolved`,region:r}),a}async initializeScopes(){let t=this.getAllScopeStrategies();await Promise.all(t.map(e=>e.initialize({log:this.log.bind(this),storage:this._storage.scopes})))}applyScoringStrategy(t,e,r,n){let a=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:n});return this.writeScoring(t,a,e)}async writeScoring(t,e,r){var o,c;let n="writeScoring",a;if(r&&(a=x(e.values,r.values),Object.keys(a).length===0))return this.log({level:"verbose",region:n,message:`Scoring update skipped for scope ${t}; values unchanged`}),e;this.log({level:"verbose",message:`${t} scoring has been updated`,region:n,...j(e.values)?{cleared:!0}:e.values});let s=(c=(o=this._scopeStrategies)==null?void 0:o[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,s,r,a),e}async broadcastScoring(t){var r;let e=t||await this.getIntentStrength();if(!j(e)&&this._lastBroadcastScoring&&D(this._lastBroadcastScoring,e)){this.log({level:"verbose",region:"broadcastScoring",message:"Skipped broadcasting unchanged scoring",value:e});return}this._lastBroadcastScoring=e,(r=this._plugins)==null||r.scoringChange(n=>n(e||null)),this._listeners.forEach(n=>n(e||null))}isKnownEnrichment(t){var r,n;return!!((n=(r=this._intentManifest)==null?void 0:r.site.enrichments)==null?void 0:n.find(a=>a.name===t))}};import{MatchFilter as U}from"@uniformdev/optimize-tracker-common";import{getPersonalizationIntents as Pe}from"@uniformdev/optimize-common";function B(i){return Math.sqrt(Object.keys(i).reduce((t,e)=>{var r;return t+=Math.pow(Number((r=i[e].str)!=null?r:0),2)},0))}function ae(i){let t=i.reduce((r,n)=>{var a;return Math.max(r,(a=n.relevancy)!=null?a:0)},0);if(t===0)return;let e=1/t;i.forEach(r=>{typeof r.relevancy!="undefined"&&(r.relevancy=r.relevancy*e)})}var xe=({intentTag:i,intentScores:t})=>{if(!t||!i)return{isDefault:!0,score:0,tagStrength:0};let e=Pe(i);if(!e||Object.keys(e).length===0)return{isDefault:!0,score:0,tagStrength:0};let r={},n={};return Object.keys(i.intents).forEach(a=>{t[a]&&(r[a]=t[a],n[a]=i.intents[a])}),{score:B(r),isDefault:!1,tagStrength:B(n),matches:Object.keys(r)}},Re=(i,t)=>{var n,a,s,o,c,l;let e=Object.keys((s=(a=(n=i.item)==null?void 0:n.intentTag)==null?void 0:a.intents)!=null?s:{}).some(u=>{var g,d,f;return((g=i.matches)==null?void 0:g.includes(u))&&((f=(d=i.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)}),r=Object.keys((l=(c=(o=t.item)==null?void 0:o.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,d,f;return((g=t.matches)==null?void 0:g.includes(u))&&((f=(d=t.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)});return e&&!r?-1:!e&&r?1:0},_e=(i,t)=>{var s,o;let e=t.relevancy-i.relevancy;if(e!==0)return e;let r=t.tagStrength-i.tagStrength;if(r!==0)return r;let n=Number(t.isDefault)-Number(i.isDefault);return n!==0?n:(((s=t.matches)==null?void 0:s.length)||0)-(((o=i.matches)==null?void 0:o.length)||0)},Ve=({list:i,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:n,isInPersonalizationControlGroup:a,count:s,matchFilter:o="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:xe,u=[],g={};i.forEach(f=>{var P;if((P=f.intentTag)==null?void 0:P.intents){let y=!0,V=f.intentTag.intents;if(Object.keys(V).forEach(T=>{var H,G,W,X;let $=V[T];if($.threshold){let he=(G=(H=t[T])==null?void 0:H.str)!=null?G:0;$.threshold>he&&(y=!1)}let J=g[T]=(W=g[T])!=null?W:{count:0,max:0};J.count++,y&&(J.max=Math.max((X=$.threshold)!=null?X:0,0))}),!y)return}let{score:S,tagStrength:h,isDefault:b,matches:_}=l({intentTag:f.intentTag,intentScores:t});S>0&&(c=!0);let v={item:f,matches:_,relevancy:S,tagStrength:h,isDefault:b};(o===U.PersonalizedOnly||o==="personalizedOnly")&&v.isDefault||(o===U.PersonalizedOnly||o==="personalizedOnly"||o===U.PersonalizedOrDefault||o==="personalizedOrDefault")&&v.relevancy===0&&!v.isDefault||u.push(v)}),ae(u),u=u.filter(f=>{var h;let S=(h=f.item.intentTag)==null?void 0:h.intents;return S?Object.keys(S).every(b=>{var y;let _=S[b],v=g[b];return v.count===1||v.max===0?!0:((y=_.threshold)!=null?y:0)===v.max}):!0}),c&&!a?u.sort((f,S)=>{let h=Re(f,S);if(h!==0)return h;let b=_e(f,S);return b===0&&r?r(f.item,S.item):b}):u.sort((f,S)=>f.isDefault===S.isDefault?r?r(f.item,S.item):0:Number(S.isDefault)>Number(f.isDefault)?1:-1);let d=u;if(typeof s=="number"&&s>0&&(d=d.slice(0,s)),n){let f=new Set(d.flatMap(S=>{var h;return(h=S.matches)!=null?h:[]}));n==null||n.personalization({matches:Array.from(f),isInPersonalizationControlGroup:a!=null?a:!1,intentScores:t})}return{result:d,personalized:!a&&c,intentScores:t}};var jt=(i="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!ee(i,t))return;let a="",s=console.log;t==="error"?(s=console.error,a=""):t==="warn"?(s=console.warn,a=""):t==="verbose"&&(a="font-size: 0.8em;");let o=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(o=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?s(o,a,l):s(o,a)}else s(o,a)}});var se=i=>Object.keys(i).reduce((t,e)=>(t[e]={str:i[e].str},t),{});import{isBehaviorSignal as Ie,SignalType as oe}from"@uniformdev/optimize-common";var Me=({signal:i,behaviors:t,intent:e,log:r})=>{let n="behaviorSignalEvaluator";if(!Ie(i)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:n});return}let{id:a}=e,s=i.str,o=0;if(t.forEach((c,l)=>{var g;let u=(g=c[a])==null?void 0:g.str;if(u&&s){let d=(Number(u)+Number(s))/2,f=d/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${f} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:n,baseFromSignal:s,baseFromTag:u,baseTotal:d,behQueueCount:t.length,final:f}),o+=f}}),o===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${a}'`,region:n,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:n,resultStrength:o})),{strength:o}},Qt=()=>({name:`${oe.Behavior}-signal`,signalEvaluatorMapping:()=>({[oe.Behavior]:Me})});import{isCookieSignal as Oe,isStringMatch as Le,SignalType as ce}from"@uniformdev/optimize-common";var Ce=(i,t)=>{if(!t||!t.cookies)return;let r=`; ${t.cookies}`.split(`; ${i}=`);if(r.length===2)return r.pop().split(";").shift()},De=({signal:i,requestContext:t,log:e})=>{let r="cookieSignalEvaluator";if(!Oe(i)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let n=Ce(i.parameter,t);if(!n){e==null||e({level:"verbose",message:`Cookie '${i.parameter}' value is not defined`,region:r});return}if(!Le(n,i.value)){e==null||e({level:"verbose",message:"Cookie value does not match signal",region:r});return}return e==null||e({level:"verbose",message:"Cookie signal is a match",name:i.parameter,strength:i.str,region:r}),{strength:Number(i.str)}},Ht=()=>({name:`${ce.Cookie}-signal`,signalEvaluatorMapping:()=>({[ce.Cookie]:De})});import{isEventSignal as ze,isStringMatch as Ne,SignalType as le}from"@uniformdev/optimize-common";var q=(i,t)=>!t||!t.expr?!0:i?Ne(i,t):!1,Ae=({signal:i,events:t,log:e})=>{let r="eventSignalEvaluator";if(!ze(i)){e==null||e({level:"warn",message:"Signal is not an event signal",region:r});return}if(!t||!t.length){e==null||e({level:"verbose",message:"No events to process",region:r});return}let n=0,a=!1;if(t.forEach(s=>{let o=q(s.label,i.label),c=q(s.category,i.category),l=q(s.value,i.value);o&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:s,signal:i}),n+=Number(i.str),a=!0)}),!a){e==null||e({level:"verbose",message:"No event matches",region:r,signal:i});return}return{strength:n}},Yt=()=>({name:`${le.Event}-signal`,signalEvaluatorMapping:()=>({[le.Event]:Ae})});import{isLandingPageSignal as $e,isStringMatch as Fe,SignalType as ue}from"@uniformdev/optimize-common";var je=async({signal:i,requestContext:t,log:e})=>{let r="landingPageSignalEvaluator";if(!$e(i)){e==null||e({level:"warn",message:"Signal is not an landing page signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:n.toString(),criteria:i.path});let a;return Fe(n.pathname,i.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),a=Number(i.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path}),{strength:a}},tr=()=>({name:`${ue.LandingPage}-signal`,signalEvaluatorMapping:()=>({[ue.LandingPage]:je})});import{isPageViewCountSignal as Be,SignalType as ge}from"@uniformdev/optimize-common";var Ue=({signal:i,state:t,log:e})=>{var c,l,u,g;let r="pageViewCountSignalEvaluator";if(!Be(i)){e==null||e({level:"warn",message:"Signal is not a page view count signal",region:r});return}let n=(c=t==null?void 0:t.pageCount)!=null?c:0;e==null||e({level:"warn",message:"Starting page count",region:r,pageCount:n});let a={state:{pageCount:n+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=a.state)==null?void 0:l.pageCount});let s=(u=i==null?void 0:i.min)!=null?u:0,o=(g=i==null?void 0:i.max)!=null?g:Number.MAX_VALUE;return(o===0||isNaN(o))&&(o=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:s,max:o}),n>=s&&n<=o?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:i.str}),a.strength=Number(i.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:i.str}),a},ir=()=>({name:`${ge.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[ge.PageViewCount]:Ue})});import{isPageVisitedSignal as qe,isStringMatch as Qe,SignalType as de}from"@uniformdev/optimize-common";var Ke=({signal:i,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!qe(i)){e==null||e({level:"warn",message:"Signal is not a page visited signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:n.toString(),criteria:i.path});let a;if(Qe(n.pathname,i.path))e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),a=Number(i.str);else{e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path});return}return{strength:a}},or=()=>({name:`${de.PageVisited}-signal`,signalEvaluatorMapping:()=>({[de.PageVisited]:Ke})});import{isQueryStringSignal as Je,isStringMatch as He,SignalType as fe}from"@uniformdev/optimize-common";var pe=({signal:i,requestContext:t,log:e})=>{let r="queryStringSignalEvaluator";if(!Je(i)){e==null||e({level:"warn",message:"Signal is not a query string signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url),a=n.searchParams.get(i.parameter);if(!a){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' not defined`,region:r,url:n.toString()});return}if(!He(a,i.value)){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' is not a match`,region:r,parameterValue:a,criteria:i.value});return}return e==null||e({level:"verbose",message:`Query string value '${i.parameter}' matches`,region:r,url:n.toString(),parameter:i.parameter}),{strength:Number(i.str)}},ur=()=>({name:`${fe.QueryString}-signal`,signalEvaluatorMapping:()=>({[fe.QueryString]:pe,UTM:pe})});var dr=({active:i,options:t})=>!i||typeof window=="undefined"?Ge():We(t),Ge=()=>({personalization:()=>!1,test:()=>!1}),We=({tracker:i,name:t})=>({personalization:({matches:e,isInPersonalizationControlGroup:r,intentScores:n})=>{if(!i||!i.isInitialized())return!1;let a=e&&e.length?e.join(", "):"Default";return i.trackPersonalization(t,{category:"Uniform Personalization",label:a,value:r?1:0,intentScores:n}),!0},test:({testName:e,testSelection:r})=>{if(!i||!i.isInitialized())return!1;let n=typeof document!="undefined"?document.title:"";return i.trackPersonalization(`${e} | ${n}`,{category:"Uniform AB Testing",label:r||"No Variant"}),!0}});var Xe=class{constructor(t){this._pluginMap=this.mapPlugins(t)}log(t){this.find("onLogMessage").forEach(r=>t(r))}track(t){this.find("track").forEach(r=>t(r))}async initialize(t){let r=this.find("initialize").map(n=>t(n));await Promise.all(r)}scoringChange(t){this.find("onScoringChange").forEach(r=>t(r))}mapPlugins(t){let e={};return t.forEach(r=>{Object.keys(r).forEach(n=>{e[n]=e[n]||[],e[n].push({plugin:r,function:r[n]})})}),e}findPlugins(t){return(this._pluginMap[t]||[]).map(r=>r.plugin)}find(t){return(this._pluginMap[t]||[]).map(r=>r.function)}};import{v4 as Ye}from"uuid";var me="scopeStrategy",z=i=>{let t=()=>({id:Ye(),created:new Date().valueOf(),state:{},type:i.type,random:Math.random()}),e=s=>{if(typeof i.expirationMinutes=="undefined")return!1;let o=i.expirationMinutes*60*1e3,c=new Date().valueOf(),l=s.updated||s.created;return c-l>=o},{type:r}=i,n,a=()=>{};return{type:r,initialize:async({log:s,storage:o})=>{a=s,n=o},get:async()=>{if(!n)throw new Error("call initialize first");let s=await n.getScope(r);if(s&&e(s)&&(a({level:"info",region:me,message:`Scope ${r} is expired, data cleared.`}),s=void 0),!s){a({level:"verbose",region:me,message:`Creating scope ${r}`});let c=((i==null?void 0:i.createScope)||t)();return await n.setScope(c),c}return s},save:async s=>{if(!n)throw new Error("call initialize first");await n.setScope(s)},getExpiration:()=>i.expirationMinutes}};import{Scope as Ze}from"@uniformdev/optimize-common";var yr=i=>z({type:Ze.Visit,expirationMinutes:(i==null?void 0:i.expirationMinutes)||20});import{Scope as et}from"@uniformdev/optimize-common";var wr=()=>z({type:et.Visitor});var Pr=i=>{let t={},e={};return{id:"In-memory Scope Storage",delete:()=>(Object.keys(t).forEach(r=>{delete t[r]}),Object.keys(e).forEach(r=>{delete e[r]}),Promise.resolve()),getScope:r=>Promise.resolve(t[r]),setScope:r=>(t[r.type]=r,Promise.resolve()),getScoring:r=>(i==null?void 0:i.scoringStorage)?i.scoringStorage.getScoring(r):Promise.resolve(e[r]),setScoring:(r,n)=>((i==null?void 0:i.scoringStorage)&&i.scoringStorage.setScoring(r,n),e[n]=r,Promise.resolve())}};var Rr=()=>{let i={};return{id:"In-memory Test Storage",getTestSelection:t=>{let e=i[t];return Promise.resolve(e)},setTestSelection:(t,e)=>(typeof e=="undefined"?delete i[t]:i[t]=e,Promise.resolve()),delete:()=>(Object.keys(i).forEach(t=>{delete i[t]}),Promise.resolve())}};var E=async(i,t)=>{for(let e of i)try{let r=await t(e);if(r)return r}catch(r){console.error(r)}},w=async(i,t)=>{for(let e=0;e<i.length;e++){let r=i[e];try{e===0?await t(r):t(r).catch(n=>{console.error(n)})}catch(n){console.error(n)}}},R=async(i,t)=>{await Promise.all(i.map(e=>t(e)))};var Dr=({tiers:i})=>{let t=i,e=[],r;function n(a){return async(s,o)=>{let c=se(o.values),l=o.updated;e.forEach(g=>{g.time<=o.updated||(g.time>l&&(l=g.time),c=C(c,g.diff))});let u={...o,updated:l,values:c};await Promise.all(a.map(g=>g.storage.setScoring(u,s))),await(r==null?void 0:r(s,u))}}return t.forEach((a,s)=>{var l,u;let o=i.slice(0,s),c=n(o);a.__callback=c,(u=(l=a.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${i.map(a=>{var s,o;return(o=(s=a.storage)==null?void 0:s.id)!=null?o:"unknown"}).join(", ")})`,delete:async()=>{e=[],await R(i,a=>a.storage.delete())},getScope:async(...a)=>await E(i,s=>s.storage.getScope(...a)),setScope:async(...a)=>{await w(i,s=>s.storage.setScope(...a))},getScoring:async(...a)=>{let s;for(let o=0;o<i.length;o++){let c=t[o];if(s&&!c.loading)return s;if(!s||c.loading==="await"){let u=await c.storage.getScoring(...a);u&&(s=u);continue}let l=s;c.storage.getScoring(a[0]).then(u=>{if(u&&!D(l.values,u.values))return c.__callback(a[0],u)})}return s},setScoring:async(a,s,o,c,l)=>{var d;let u=x(a==null?void 0:a.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(d=a==null?void 0:a.updated)!=null?d:new Date().getTime(),diff:u}),await w(i,f=>f.storage.setScoring(a,s,o,c,l))},identify:async a=>{var c;let s=i.filter(l=>l.storage.identify);return s.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(s.map(l=>l.storage.identify(a)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:a=>r=a}};import{Scope as N}from"@uniformdev/optimize-common";var Ar=({getCookie:i,setCookie:t})=>{let e=s=>JSON.parse(s),r=s=>JSON.stringify(s),n=s=>`uniform_trk_${s.toLocaleLowerCase()}_score`,a={[N.Visit]:n(N.Visit),[N.Visitor]:n(N.Visitor)};return{getScoring:s=>{let o,c=a[s];if(!c)throw new Error(`Unsupported cookie scope ${s}`);let l=i(c);return l&&(o=e(l)),Promise.resolve(o)},setScoring:(s,o,c)=>{let l=s?r(s):"",u=c?c*60:30*24*60*60,g=a[o];if(!g)throw new Error(`Unsupported cookie scope ${o}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(a).forEach(s=>{t(a[s],"",-1)}),Promise.resolve())}};var Q="uniform_trk_tests",Se=30*24*60*60,Fr=({getCookie:i,setCookie:t})=>{let e=n=>n?JSON.parse(n):void 0,r=()=>{let n,a=i(Q);return a&&(n=e(a)),n};return{id:"Cookie Test Storage",getTestSelection:n=>{let a=r(),s=a==null?void 0:a[n];return Promise.resolve(s)},setTestSelection:(n,a)=>{let o={...r(),[n]:a},c=JSON.stringify(o);return t(Q,c,Se),Promise.resolve()},delete:()=>(t(Q,"",Se),Promise.resolve())}};var Ur=({storage:i})=>{let t;function e(r){return async(n,a,...s)=>{await Promise.all(r.map(o=>o.setScoring(a,n))),await(t==null?void 0:t(n,a,...s))}}return i.forEach((r,n)=>{var o;let a=i.slice(0,n),s=e(a);(o=r.setScoringValueExternallyUpdatedCallback)==null||o.call(r,s)}),{id:`Composite (${i.map(r=>{var n;return(n=r==null?void 0:r.id)!=null?n:"unknown"}).join(", ")})`,delete:async()=>{await R(i,r=>r.delete())},getScope:async(...r)=>await E(i,n=>n.getScope(...r)),setScope:async(...r)=>{await w(i,n=>n.setScope(...r))},getScoring:async(...r)=>await E(i,n=>n.getScoring(...r)),setScoring:async(...r)=>{await w(i,n=>n.setScoring(...r))},identify:async r=>{var s;let n=i.filter(o=>o.identify);return n.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(s=(await Promise.all(n.map(o=>o.identify(r)))).filter(o=>o))==null?void 0:s[0]},setScoringValueExternallyUpdatedCallback:r=>t=r}};var Kr=({storage:i})=>({id:`Composite (${i.map(t=>t.id).join(", ")})`,getTestSelection:async(...t)=>await E(i,e=>e.getTestSelection(...t)),setTestSelection:async(...t)=>{await w(i,e=>e.setTestSelection(...t))},delete:async()=>{await R(i,t=>t.delete())}});var Hr=i=>{let t=(i==null?void 0:i.sampleSize)||0;return{isInPersonalizationControlGroup:(e,r)=>e?(typeof r!="undefined"?r:t)>e.random:!1}};import{Scope as ve}from"@uniformdev/optimize-common";import{ExtensionEvents as K,isExtensionSetScoreMessage as tt}from"@uniformdev/optimize-tracker-common";var A=typeof top!="undefined",an=i=>{let t,{disableEventListeners:e}=i||{};return e||A&&window.addEventListener("message",async r=>{if(!!r.data&&tt(r.data)){let n=r.data.score;n&&(console.warn("[Uniform] browser extension has set intent scores. Note that this sets all scores to the visit scope and clears any existing visitor values.",n),await(t==null?void 0:t.setIntentStrength(ve.Visitor,{})),await(t==null?void 0:t.setIntentStrength(ve.Visit,n)))}}),{name:"browser-extension",initialize:r=>{t=r,A&&(top==null||top.postMessage({type:K.Hello,manifest:r.manifest},window.location.origin))},onLogMessage:r=>{A&&(top==null||top.postMessage({type:K.Log,message:r},window.location.origin))},onScoringChange:r=>{!r||A&&(top==null||top.postMessage({type:K.Score,score:r},window.location.origin))}}};var rt=i=>{let{values:t,total:e,missingDistribution:r}=i.reduce((n,a)=>(a.distribution?n.total+=a.distribution:++n.missingDistribution,n.values.push(a.distribution),n),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let a=(100-e)/r;t.forEach((s,o)=>{typeof s=="undefined"&&(t[o]=a)})}return t},on=({testName:i,variations:t,random:e,selectedVariantId:r,analyticsEmitter:n})=>{if(e>100||e<0)throw"Random must be between 0 and 100";let a;if(r&&(a=t.find(o=>o.id===r),a||console.warn("Previously selected variant is no longer present.")),!a){let o=rt(t),c=0;a=t.find((l,u)=>{let g=o[u];if(e>c&&e<=c+g)return l;c+=g})}let s=!1;return n==null||n.test({testName:i,testSelection:a==null?void 0:a.id}),{result:a,tracked:s}},cn=()=>Math.floor(Math.random()*100);export{We as AnalyticsEmitter,Ge as NoopAnalyticsEmitter,Xe as OptimizePluginLoader,Ee as OptimizeTracker,Q as TestCookieName,Se as TestExpiration,Qt as addBehaviorSignalPlugin,an as addBrowserExtension,jt as addConsoleLoggerPlugin,Ht as addCookieSignalPlugin,Yt as addEventSignalPlugin,tr as addLandingPageSignalPlugin,ir as addPageViewCountSignalPlugin,or as addPageVisitedSignalPlugin,ur as addQueryStringSignalPlugin,Me as behaviorSignalEvaluator,F as calculateEnrichmentIntentName,se as cloneScore,C as combineScores,Ur as compositeScopeStorage,Kr as compositeTestStorage,Ar as cookieScoringStorage,Fr as cookieTestStorage,Hr as createPercentageTestStrategy,yr as createVisitScopeStrategy,wr as createVisitorScopeStrategy,Z as cumulativeScoringStrategy,Y as decayByDayStrategy,x as diffScores,q as doesValueMatchEventProperty,Ae as eventSignalEvaluator,cn as generateRandom,L as getEnrichmentValue,Pr as inMemoryScopeStorage,Rr as inMemoryTestStorage,rt as normalizeVariationDistributions,te as parseEnrichment,Ve as personalizeList,dr as resolveAnalyticsEmitter,z as scopeStrategy,j as scoreIsEmpty,D as scoresAreEqual,on as testList,Dr as tieredScopeStorage}; | ||
import{IntentTagStrength as M,Scope as k,SignalFrequency as ie,SignalType as we}from"@uniformdev/optimize-common";var ye={maxDecay:.95,daysInMonth:30},be=(i,t)=>Math.round((i-t)/864e5),Te=(i,t,e)=>{if(!t)return console.warn("[DecayByDay]: daysInMonth is not populated."),null;let r;return e?r=Math.min(e,i/t):r=i/t,1-r},Y=i=>{let t={...ye,...i};return r=>{if(!(r==null?void 0:r.updated)||!r.values)return Promise.resolve(void 0);let{updated:n,values:a}=r,s=t.today||new Date().valueOf(),o=be(s,n!=null?n:0),c=Te(o,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(a).forEach(u=>{var f,S;let g=a[u];typeof g=="number"&&(g=a[u]={str:g});let d=Number((S=(f=a[u])==null?void 0:f.str)!=null?S:0);c&&(l.values[u].str=d*c)}),Promise.resolve(l))}};import{IntentTagStrength as ke}from"@uniformdev/optimize-common";var Z=()=>{let i="cumulative";return({previousValue:e,valueToAdd:r})=>{let n={...e};return Object.keys(r).forEach(s=>{var c,l,u;let o=(c=r[s])==null?void 0:c.str;if(o===ke.Antimatter)delete n[s];else{let g=Number((u=(l=n[s])==null?void 0:l.str)!=null?u:0),d=Number(o!=null?o:0),f=g+d;f>0?n[s]={str:f}:delete n[s]}}),{values:n,strategy:i,updated:new Date().valueOf()}}};var O={error:3,warn:2,info:1,verbose:0},ee=(i,t)=>!(!i||i==="none"||O[i]!==void 0&&O[t]!==void 0&&O[t]<O[i]),I=">",F=(i,t)=>{if(i.includes(I)||t.includes(I))throw`"${I}" is a reserved enrichment character`;return`${i}${I}${t}`},te=i=>{let t=i.split(I);if(t.length===2)return{type:t[0],value:t[1]}},L=(i,t)=>{let e=te(t);if(!!e&&e.type===i)return e.value},re=()=>{if(!(typeof window=="undefined"||typeof document=="undefined"))return{cookies:document.cookie,url:window.location.href,userAgent:navigator.userAgent}};var C=(...i)=>{let t={};return i.forEach(e=>{Object.keys(e).forEach(r=>{t[r]||(t[r]={str:0});let n=e[r];n.str&&(t[r].str=Number(t[r].str)+Number(n.str))})}),t};var ne=(i,t)=>{let e=i!=null?i:{str:0},r=t!=null?t:{str:0};return{str:Number(e.str)-Number(r.str)}},x=(i,t)=>{let e={};return i||(i={}),t||(t={}),Object.keys(i).forEach(r=>{e[r]=ne(i[r],t[r])}),Object.keys(t).forEach(r=>{e[r]||(e[r]=ne(i[r],t[r]))}),Object.keys(e).forEach(r=>{e[r].str===0&&delete e[r]}),e};var D=(i,t)=>{let e=x(i,t);return!(Object.keys(e).length>0)};var j=i=>!i||Object.keys(i).length===0;var Ee=class{constructor(t){this._intentMappings=[];this._behaviorQueue=[];this._behaviorKeys={};this._events=[];this._listeners=[];this._testSettings=[];this._signalEvaluators={};this._initialized=!1;this._lastBroadcastScoring=void 0;var e,r;if(this._intentManifest=t.intentManifest,t.intentManifest&&this.addIntents(t.intentManifest.site.intents),this._plugins=t.plugins,this._storage=t.storage,this._scopeStrategies=t.scopes,this._scoringStrategy=(e=t.scoring)!=null?e:Z(),this._decayStrategy=(r=t.decay)!=null?r:Y(),this._serverState=this.getServerState(),t.testing){let n=Array.isArray(t.testing)?t.testing:[t.testing];this._testSettings.push(...n)}}async initialize(){var t,e;this.log({level:"info",message:"Received intent manifest",region:"initialize",intents:this._intentManifest}),await this.initializeScopes(),await this.loadPlugins(),this._signalEvaluators=this.loadSignalEvaluators(),(e=(t=this._storage.scopes).setScoringValueExternallyUpdatedCallback)==null||e.call(t,async()=>{await this.broadcastScoring()}),this._lastBroadcastScoring=void 0,this._initialized=!0}isInitialized(){return this._initialized}async getIntentStrength(t){let e=this.getScopeNames(t),r={};return await Promise.all(e.map(async a=>{let s=await this.readScoring(a);r[a]=s})),this.combineScoring(r)}async getIntentStrengthSingle(t,e){let r=await this.getIntentStrength(e);return r==null?void 0:r[t]}async addIntentStrength(t,e){let r=await this.readScoring(t);await this.applyScoringStrategy(t,r,e,1),await this.broadcastScoring()}async setIntentStrength(t,e){await this.applyScoringStrategy(t,void 0,e,1),await this.broadcastScoring()}async removeIntent(t,e){let r=this.getScopeNames(e==null?void 0:e.scope),n=typeof t=="string"?[t]:t,a=!1;return await Promise.all(r.map(async s=>{let o=await this._storage.scopes.getScoring(s);if(o){let c={},l=!1;Object.keys(o.values).map(u=>{t&&(n==null?void 0:n.indexOf(u))===-1?c[u]=o.values[u]:(l=!0,a=!0)}),l&&(await this.writeScoring(s,{...o,values:c},o),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),a}addScoringChangeListener(t){this._listeners.push(t)}removeScoringChangeListener(t){let e=this._listeners.indexOf(t);e>-1&&this._listeners.splice(e,1)}async reevaluateSignals(t){let e="reevaluateSignals";if(this.log({level:"verbose",message:"Signals reevaluating...",region:e}),!this._intentMappings||!this._intentMappings.length)return this.log({level:"warn",message:"Intents list is empty",region:e}),{signalMatches:{}};let r={};await Promise.all(this.getAllScopeStrategies().map(g=>g.get().then(d=>{d&&(r[d==null?void 0:d.type]=d)})));let n=Object.keys(this._behaviorKeys),a=n.length===0?this._behaviorQueue:[...this._behaviorQueue,...n.map(g=>this._behaviorKeys[g])],o=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:a})))).flatMap(g=>g),c=o.reduce((g,d)=>{var h;if(!d.statsScope||!d.statistics||!d.signal)return g;let f=d.statsScope.type,S=g[f]=(h=g[f])!=null?h:{};return S[d.signal.id]=d.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var d;return(d=this.getScopeStrategy(g))==null?void 0:d.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(o),u=await this.applySignalEvaluationSummary(l);return await this.broadcastScoring(u),this.clearBehaviorQueue(),this.clearEventQueue(),this.log({level:"info",message:"Reevaluated signals",region:e,...u}),{scoring:u,signalMatches:Object.keys(l).reduce((g,d)=>(g[d]=l[d].matches,g),{})}}addBehaviorActivity(t,e){this.log({level:"verbose",region:"addBehaviorActivity",message:"Behavior activity added to queue",...t,sourceKey:e}),e?this._behaviorKeys[e]=t:this._behaviorQueue.push(t)}async addEvent(t,e){this._events.push(t),e&&e.quiet!==void 0&&e.quiet||await this.reevaluateSignals()}async getEnrichmentValues(t,e){if(!this.isKnownEnrichment(t))return;let n=await this.getIntentStrength(e==null?void 0:e.scope)||{};return Object.keys(n||{}).reduce((s,o)=>{let c=L(t,o);return c&&n[o].str&&(s[c]=Number(n[o].str||0)),s},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||k.Visitor,n=Array.isArray(t)?t:[t],a={},s={};for(let l of n)if(this.isKnownEnrichment(l.name)){let g=F(l.name,l.value);(e==null?void 0:e.clearValues)&&(s[l.name]=!0);let d=Number(((c=a[g])==null?void 0:c.str)||0);a[g]={str:d+(l.str||M.Normal)}}for(let l of Object.keys(s))await this.removeEnrichment(l,{scope:r,quiet:!0});let o=await this.readScoring(r);await this.applyScoringStrategy(r,o,a,n.length),(e==null?void 0:e.quiet)||await this.reevaluateSignals()}async removeEnrichment(t,e){let r=(e==null?void 0:e.scope)||k.Visitor,n=await this.getIntentStrength(r)||{},a=Object.keys(n||{}).filter(s=>{if(L(t,s))return s},{});await this.removeIntent(a,{scope:r,quiet:e==null?void 0:e.quiet})}trackPersonalization(t,e){var r;t&&((r=this._plugins)==null||r.track(n=>n(t,e)))}async isInPersonalizationControlGroup(t){var l;let{scope:e,sampleSize:r}=t||{},n=new Date,a=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>n));if(!a)return!1;let s=e!=null?e:k.Visitor,o=await((l=this.getScopeStrategy(s))==null?void 0:l.get());return a.strategy.isInPersonalizationControlGroup(o,r)}getTestValue(t){var r,n,a,s,o,c;let e=(n=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:n.find(l=>l.name===t);return(e==null?void 0:e.winning_variation_id)?Promise.resolve(e.winning_variation_id):((s=(a=this._serverState)==null?void 0:a.tests)==null?void 0:s[t])?Promise.resolve((c=(o=this._serverState)==null?void 0:o.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var n,a;let r=(a=(n=this._intentManifest)==null?void 0:n.site.tests)==null?void 0:a.find(s=>s.name===t);return(r==null?void 0:r.winning_variation_id)?Promise.resolve():this._storage.tests.setTestSelection(t,e)}isTestEnabled(t){var r,n;return!!((n=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:n.find(a=>a.name===t))}async identify(t){var a;let e=(a=this._storage)==null?void 0:a.scopes.identify;if(!e){this.log({region:"identify",level:"warn",message:"Visitor was identified, but storage did not implement identification"});return}let r=await this._storage.scopes.getScoring(k.Visitor),n=await e(t);n&&(await this.writeScoring(k.Visitor,n,r),await this.broadcastScoring())}async forgetMe(t){await Promise.all([this._storage.scopes.delete(t),this._storage.tests.delete()]),this.log({level:"info",region:"forgetMe",message:`Visitor has been forgotten (allDevices: ${t})`}),await this.broadcastScoring()}log(t){var e;(e=this._plugins)==null||e.log(r=>r(t))}async reevaluateSignal({intent:t,scopes:e,signal:r,requestContext:n,behaviorQueue:a}){var P,y,V;let s="reevaluateSignal",o=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,o)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:s});return}let l=this._signalEvaluators[r.type];if(!l){this.log({level:"warn",message:`Signal ${r.type} not handled by any plugin. It will be ignored.`,region:s});return}!r.str&&r.str!==M.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${M.Normal}`,region:s}),r.str=M.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),d={intent:t,signal:r,scope:u,statsScope:o},f={signal:r,intent:t,behaviors:a,state:g,requestContext:n||re(),events:this._events,log:this.log.bind(this)},{requestContext:S,log:h,...b}=f,_=l(f),v=await Promise.resolve(_);if(this.log({level:"verbose",message:`${r.type} Signal evaluation result: ${(v==null?void 0:v.strength)?v.strength:"no match"}`,region:s,signal:r,intent:t,result:v}),d.result=v,typeof v=="undefined")return d;if(r.id){let T=await this.resolveFrequencyScope(r,e);return T&&(d.statistics={...(P=T.statistics)==null?void 0:P[r.id],evaluations:(((V=(y=T.statistics)==null?void 0:y[r.id])==null?void 0:V.evaluations)||0)+1}),u&&r.id&&v.state&&(u.state.signals=u.state.signals||{},u.state.signals[r.id]=v.state),d}}async resolveFrequencyScope(t,e){let r=t.freq===ie.OncePerVisit?k.Visit:k.Visitor;return this.resolveScope(r,e)}determineIfSignalShouldEvaluate(t,e){var r,n;return t.id?!t.freq||t.freq===ie.Always||t.type===we.PageViewCount?!0:!((n=(r=e==null?void 0:e.statistics)==null?void 0:r[t.id])==null?void 0:n.evaluations):(this.log({level:"info",region:"determineIfSignalShouldEvaluate",message:"Signal ID is not populated"}),!1)}combineScoring(t){let e=Object.keys(t).map(r=>t[r]).filter(r=>r&&r.values).map(r=>r.values);return C(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:n,scope:a,result:s,intent:o}=r,{id:c}=o;if(a&&s&&(s.strength||s.strength===M.Antimatter)){let{score:l,matches:u}=e[a.type]=e[a.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(s.strength),u.push({intentId:c,signalStrength:s.strength,signalType:n.type})}}),this.log({level:"verbose",message:"Signal evaluation matches",region:"processSignalEvaluations",summary:e}),e}async reevaluateIntent({intent:t,scopes:e,requestContext:r,behaviorQueue:n}){let a="Reevaluate Intent",s=[],{id:o,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${o} does not define any signals.`,region:a}):await Promise.all(t.signals.map(async l=>{let u=await this.reevaluateSignal({intent:t,scopes:e,signal:l,requestContext:r,behaviorQueue:n});(u==null?void 0:u.result)&&s.push(u)})),s}clearBehaviorQueue(){let t=this._behaviorQueue.length,e=Object.keys(this._behaviorKeys).length;if(t||e){let r=this._behaviorQueue.splice(0,t),n=this._behaviorKeys;this._behaviorKeys={},this.log({level:"verbose",message:"Queue cleared",region:"clearBehaviorQueue",count:t+e,cleared:r,clearedKeys:n})}}clearEventQueue(){if(this._events.length){let t=this._events.splice(0,this._events.length);this.log({level:"verbose",message:"Clearing event queue",region:"clearEventQueue",count:t.length,cleared:t})}}async applySignalEvaluationSummary(t){let e="applySignalEvaluationSummary",r=this.getScopeNames(),n={};await Promise.all(r.map(async s=>{let{score:o,matches:c}=t[s]||{matches:[],score:{}},l=await this.readScoring(s);n[s]=await this.applyScoringStrategy(s,l,o,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...n});let a=this.combineScoring(n);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...a}),a}getServerState(){if(this._serverState)return this._serverState;if(typeof document=="undefined")return;let t=document.getElementById("__UNIFORM_DATA__");return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}resolveSignalStorage(t,e){var a,s;let r="resolveSignalStorage",n=e.id?(a=t==null?void 0:t.state.signals)==null?void 0:a[e.id]:{};return e.id&&!((s=t==null?void 0:t.state.signals)==null?void 0:s[e.id])?this.log({level:"verbose",message:`Signal "${e.id}" is using default state`,region:r}):this.log({level:"verbose",message:`Signal "${e.id}" is using stored state`,region:r,...n}),n}async loadPlugins(){if(!this._plugins)return;let t=this._plugins.findPlugins("initialize");await Promise.all(t.map(e=>e.initialize({setIntentStrength:this.setIntentStrength.bind(this),log:this.log.bind(this),manifest:this._intentManifest})))}loadSignalEvaluators(){var e;return(((e=this._plugins)==null?void 0:e.find("signalEvaluatorMapping"))||[]).reduce((r,n)=>{let a=n();return Object.keys(a).forEach(s=>{r[s]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${s}`}),r[s]=a[s]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:n}=r;return{...r,signals:n.map(a=>{let{id:s}=a;return{...a,id:s!=null?s:`${r.id}:${JSON.stringify(a)}`}})}});this._intentMappings.push(...e)}async readScoring(t){let e=await this._storage.scopes.getScoring(t);if(e&&this._decayStrategy){let r={...e},n=await this._decayStrategy(e);typeof n!="undefined"&&(e=n),n&&this.log({level:"verbose",message:"Score decay has been applied",region:"readScoring",pre:r,post:e})}return e}getScopeStrategy(t){if(this._scopeStrategies)return this._scopeStrategies[t]}getAllScopeStrategies(){return this._scopeStrategies?Object.keys(this._scopeStrategies).map(t=>this._scopeStrategies[t]):[]}getScopeNames(t){return this._scopeStrategies?t&&this._scopeStrategies[t]?[t]:Object.keys(this._scopeStrategies):[]}async resolveScope(t,e){var s;let r="Resolve Scope",n=t||k.Visitor,a=e&&t?e[t]:await((s=this.getScopeStrategy(n))==null?void 0:s.get());return a||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(a==null?void 0:a.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${a==null?void 0:a.type}" was resolved`,region:r}),a}async initializeScopes(){let t=this.getAllScopeStrategies();await Promise.all(t.map(e=>e.initialize({log:this.log.bind(this),storage:this._storage.scopes})))}applyScoringStrategy(t,e,r,n){let a=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:n});return this.writeScoring(t,a,e)}async writeScoring(t,e,r){var o,c;let n="writeScoring",a;if(r&&(a=x(e.values,r.values),Object.keys(a).length===0))return this.log({level:"verbose",region:n,message:`Scoring update skipped for scope ${t}; values unchanged`}),e;this.log({level:"verbose",message:`${t} scoring has been updated`,region:n,...j(e.values)?{cleared:!0}:e.values});let s=(c=(o=this._scopeStrategies)==null?void 0:o[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,s,r,a),e}async broadcastScoring(t){var r;let e=t||await this.getIntentStrength();if(!j(e)&&this._lastBroadcastScoring&&D(this._lastBroadcastScoring,e)){this.log({level:"verbose",region:"broadcastScoring",message:"Skipped broadcasting unchanged scoring",value:e});return}this._lastBroadcastScoring=e,(r=this._plugins)==null||r.scoringChange(n=>n(e||null)),this._listeners.forEach(n=>n(e||null))}isKnownEnrichment(t){var r,n;return!!((n=(r=this._intentManifest)==null?void 0:r.site.enrichments)==null?void 0:n.find(a=>a.name===t))}};import{MatchFilter as U}from"@uniformdev/optimize-tracker-common";import{getPersonalizationIntents as Pe}from"@uniformdev/optimize-common";function B(i){return Math.sqrt(Object.keys(i).reduce((t,e)=>{var r;return t+=Math.pow(Number((r=i[e].str)!=null?r:0),2)},0))}function ae(i){let t=i.reduce((r,n)=>{var a;return Math.max(r,(a=n.relevancy)!=null?a:0)},0);if(t===0)return;let e=1/t;i.forEach(r=>{typeof r.relevancy!="undefined"&&(r.relevancy=r.relevancy*e)})}var xe=({intentTag:i,intentScores:t})=>{if(!t||!i)return{isDefault:!0,score:0,tagStrength:0};let e=Pe(i);if(!e||Object.keys(e).length===0)return{isDefault:!0,score:0,tagStrength:0};let r={},n={};return Object.keys(i.intents).forEach(a=>{t[a]&&(r[a]=t[a],n[a]=i.intents[a])}),{score:B(r),isDefault:!1,tagStrength:B(n),matches:Object.keys(r)}},Re=(i,t)=>{var n,a,s,o,c,l;let e=Object.keys((s=(a=(n=i.item)==null?void 0:n.intentTag)==null?void 0:a.intents)!=null?s:{}).some(u=>{var g,d,f;return((g=i.matches)==null?void 0:g.includes(u))&&((f=(d=i.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)}),r=Object.keys((l=(c=(o=t.item)==null?void 0:o.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,d,f;return((g=t.matches)==null?void 0:g.includes(u))&&((f=(d=t.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)});return e&&!r?-1:!e&&r?1:0},_e=(i,t)=>{var s,o;let e=t.relevancy-i.relevancy;if(e!==0)return e;let r=t.tagStrength-i.tagStrength;if(r!==0)return r;let n=Number(t.isDefault)-Number(i.isDefault);return n!==0?n:(((s=t.matches)==null?void 0:s.length)||0)-(((o=i.matches)==null?void 0:o.length)||0)},Ve=({list:i,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:n,isInPersonalizationControlGroup:a,count:s,matchFilter:o="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:xe,u=[],g={};i.forEach(f=>{var P;if((P=f.intentTag)==null?void 0:P.intents){let y=!0,V=f.intentTag.intents;if(Object.keys(V).forEach(T=>{var H,G,W,X;let $=V[T];if($.threshold){let he=(G=(H=t[T])==null?void 0:H.str)!=null?G:0;$.threshold>he&&(y=!1)}let J=g[T]=(W=g[T])!=null?W:{count:0,max:0};J.count++,y&&(J.max=Math.max((X=$.threshold)!=null?X:0,0))}),!y)return}let{score:S,tagStrength:h,isDefault:b,matches:_}=l({intentTag:f.intentTag,intentScores:t});S>0&&(c=!0);let v={item:f,matches:_,relevancy:S,tagStrength:h,isDefault:b};(o===U.PersonalizedOnly||o==="personalizedOnly")&&v.isDefault||(o===U.PersonalizedOnly||o==="personalizedOnly"||o===U.PersonalizedOrDefault||o==="personalizedOrDefault")&&v.relevancy===0&&!v.isDefault||u.push(v)}),ae(u),u=u.filter(f=>{var h;let S=(h=f.item.intentTag)==null?void 0:h.intents;return S?Object.keys(S).every(b=>{var y;let _=S[b],v=g[b];return v.count===1||v.max===0?!0:((y=_.threshold)!=null?y:0)===v.max}):!0}),c&&!a?u.sort((f,S)=>{let h=Re(f,S);if(h!==0)return h;let b=_e(f,S);return b===0&&r?r(f.item,S.item):b}):u.sort((f,S)=>f.isDefault===S.isDefault?r?r(f.item,S.item):0:Number(S.isDefault)>Number(f.isDefault)?1:-1);let d=u;if(typeof s=="number"&&s>0&&(d=d.slice(0,s)),n){let f=new Set(d.flatMap(S=>{var h;return(h=S.matches)!=null?h:[]}));n==null||n.personalization({matches:Array.from(f),isInPersonalizationControlGroup:a!=null?a:!1,intentScores:t})}return{result:d,personalized:!a&&c,intentScores:t}};var jt=(i="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!ee(i,t))return;let a="",s=console.log;t==="error"?(s=console.error,a=""):t==="warn"?(s=console.warn,a=""):t==="verbose"&&(a="font-size: 0.8em;");let o=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(o=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?s(o,a,l):s(o,a)}else s(o,a)}});var se=i=>Object.keys(i).reduce((t,e)=>(t[e]={str:i[e].str},t),{});import{isBehaviorSignal as Ie,SignalType as oe}from"@uniformdev/optimize-common";var Me=({signal:i,behaviors:t,intent:e,log:r})=>{let n="behaviorSignalEvaluator";if(!Ie(i)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:n});return}let{id:a}=e,s=i.str,o=0;if(t.forEach((c,l)=>{var g;let u=(g=c[a])==null?void 0:g.str;if(u&&s){let d=(Number(u)+Number(s))/2,f=d/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${f} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:n,baseFromSignal:s,baseFromTag:u,baseTotal:d,behQueueCount:t.length,final:f}),o+=f}}),o===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${a}'`,region:n,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:n,resultStrength:o})),{strength:o}},Qt=()=>({name:`${oe.Behavior}-signal`,signalEvaluatorMapping:()=>({[oe.Behavior]:Me})});import{isCookieSignal as Oe,isStringMatch as Le,SignalType as ce}from"@uniformdev/optimize-common";var Ce=(i,t)=>{if(!t||!t.cookies)return;let r=`; ${t.cookies}`.split(`; ${i}=`);if(r.length===2)return r.pop().split(";").shift()},De=({signal:i,requestContext:t,log:e})=>{let r="cookieSignalEvaluator";if(!Oe(i)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let n=Ce(i.parameter,t);if(!n){e==null||e({level:"verbose",message:`Cookie '${i.parameter}' value is not defined`,region:r});return}if(!Le(n,i.value)){e==null||e({level:"verbose",message:"Cookie value does not match signal",region:r});return}return e==null||e({level:"verbose",message:"Cookie signal is a match",name:i.parameter,strength:i.str,region:r}),{strength:Number(i.str)}},Ht=()=>({name:`${ce.Cookie}-signal`,signalEvaluatorMapping:()=>({[ce.Cookie]:De})});import{isEventSignal as ze,isStringMatch as Ne,SignalType as le}from"@uniformdev/optimize-common";var q=(i,t)=>!t||!t.expr?!0:i?Ne(i,t):!1,Ae=({signal:i,events:t,log:e})=>{let r="eventSignalEvaluator";if(!ze(i)){e==null||e({level:"warn",message:"Signal is not an event signal",region:r});return}if(!t||!t.length){e==null||e({level:"verbose",message:"No events to process",region:r});return}let n=0,a=!1;if(t.forEach(s=>{let o=q(s.label,i.label),c=q(s.category,i.category),l=q(s.value,i.value);o&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:s,signal:i}),n+=Number(i.str),a=!0)}),!a){e==null||e({level:"verbose",message:"No event matches",region:r,signal:i});return}return{strength:n}},Yt=()=>({name:`${le.Event}-signal`,signalEvaluatorMapping:()=>({[le.Event]:Ae})});import{isLandingPageSignal as $e,isStringMatch as Fe,SignalType as ue}from"@uniformdev/optimize-common";var je=async({signal:i,requestContext:t,log:e})=>{let r="landingPageSignalEvaluator";if(!$e(i)){e==null||e({level:"warn",message:"Signal is not an landing page signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:n.toString(),criteria:i.path});let a;return Fe(n.pathname,i.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),a=Number(i.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path}),{strength:a}},tr=()=>({name:`${ue.LandingPage}-signal`,signalEvaluatorMapping:()=>({[ue.LandingPage]:je})});import{isPageViewCountSignal as Be,SignalType as ge}from"@uniformdev/optimize-common";var Ue=({signal:i,state:t,log:e})=>{var c,l,u,g;let r="pageViewCountSignalEvaluator";if(!Be(i)){e==null||e({level:"warn",message:"Signal is not a page view count signal",region:r});return}let n=(c=t==null?void 0:t.pageCount)!=null?c:0;e==null||e({level:"warn",message:"Starting page count",region:r,pageCount:n});let a={state:{pageCount:n+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=a.state)==null?void 0:l.pageCount});let s=(u=i==null?void 0:i.min)!=null?u:0,o=(g=i==null?void 0:i.max)!=null?g:Number.MAX_VALUE;return(o===0||isNaN(o))&&(o=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:s,max:o}),n>=s&&n<=o?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:i.str}),a.strength=Number(i.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:i.str}),a},ir=()=>({name:`${ge.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[ge.PageViewCount]:Ue})});import{isPageVisitedSignal as qe,isStringMatch as Qe,SignalType as de}from"@uniformdev/optimize-common";var Ke=({signal:i,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!qe(i)){e==null||e({level:"warn",message:"Signal is not a page visited signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:n.toString(),criteria:i.path});let a;if(Qe(n.pathname,i.path))e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),a=Number(i.str);else{e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path});return}return{strength:a}},or=()=>({name:`${de.PageVisited}-signal`,signalEvaluatorMapping:()=>({[de.PageVisited]:Ke})});import{isQueryStringSignal as Je,isStringMatch as He,SignalType as fe}from"@uniformdev/optimize-common";var pe=({signal:i,requestContext:t,log:e})=>{let r="queryStringSignalEvaluator";if(!Je(i)){e==null||e({level:"warn",message:"Signal is not a query string signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let n=new URL(t.url),a=n.searchParams.get(i.parameter);if(!a){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' not defined`,region:r,url:n.toString()});return}if(!He(a,i.value)){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' is not a match`,region:r,parameterValue:a,criteria:i.value});return}return e==null||e({level:"verbose",message:`Query string value '${i.parameter}' matches`,region:r,url:n.toString(),parameter:i.parameter}),{strength:Number(i.str)}},ur=()=>({name:`${fe.QueryString}-signal`,signalEvaluatorMapping:()=>({[fe.QueryString]:pe,UTM:pe})});var dr=({active:i,options:t})=>!i||typeof window=="undefined"?Ge():We(t),Ge=()=>({personalization:()=>!1,test:()=>!1}),We=({tracker:i,name:t})=>({personalization:({matches:e,isInPersonalizationControlGroup:r,intentScores:n})=>{if(!i||!i.isInitialized())return!1;let a=e&&e.length?e.join(", "):"Default";return i.trackPersonalization(t,{category:"Uniform Personalization",label:a,value:r?1:0,intentScores:n}),!0},test:({testName:e,testSelection:r})=>{if(!i||!i.isInitialized())return!1;let n=typeof document!="undefined"?document.title:"";return i.trackPersonalization(`${e} | ${n}`,{category:"Uniform AB Testing",label:r||"No Variant"}),!0}});var Xe=class{constructor(t){this._pluginMap=this.mapPlugins(t)}log(t){this.find("onLogMessage").forEach(r=>t(r))}track(t){this.find("track").forEach(r=>t(r))}async initialize(t){let r=this.find("initialize").map(n=>t(n));await Promise.all(r)}scoringChange(t){this.find("onScoringChange").forEach(r=>t(r))}mapPlugins(t){let e={};return t.forEach(r=>{Object.keys(r).forEach(n=>{e[n]=e[n]||[],e[n].push({plugin:r,function:r[n]})})}),e}findPlugins(t){return(this._pluginMap[t]||[]).map(r=>r.plugin)}find(t){return(this._pluginMap[t]||[]).map(r=>r.function)}};import{v4 as Ye}from"uuid";var me="scopeStrategy",z=i=>{let t=()=>({id:Ye(),created:new Date().valueOf(),state:{},type:i.type,random:Math.random()}),e=s=>{if(typeof i.expirationMinutes=="undefined")return!1;let o=i.expirationMinutes*60*1e3,c=new Date().valueOf(),l=s.updated||s.created;return c-l>=o},{type:r}=i,n,a=()=>{};return{type:r,initialize:async({log:s,storage:o})=>{a=s,n=o},get:async()=>{if(!n)throw new Error("call initialize first");let s=await n.getScope(r);if(s&&e(s)&&(a({level:"info",region:me,message:`Scope ${r} is expired, data cleared.`}),s=void 0),!s){a({level:"verbose",region:me,message:`Creating scope ${r}`});let c=((i==null?void 0:i.createScope)||t)();return await n.setScope(c),c}return s},save:async s=>{if(!n)throw new Error("call initialize first");await n.setScope(s)},getExpiration:()=>i.expirationMinutes}};import{Scope as Ze}from"@uniformdev/optimize-common";var yr=i=>z({type:Ze.Visit,expirationMinutes:(i==null?void 0:i.expirationMinutes)||20});import{Scope as et}from"@uniformdev/optimize-common";var wr=()=>z({type:et.Visitor});var Pr=i=>{let t={},e={};return{id:"In-memory Scope Storage",delete:()=>(Object.keys(t).forEach(r=>{delete t[r]}),Object.keys(e).forEach(r=>{delete e[r]}),Promise.resolve()),getScope:r=>Promise.resolve(t[r]),setScope:r=>(t[r.type]=r,Promise.resolve()),getScoring:r=>(i==null?void 0:i.scoringStorage)?i.scoringStorage.getScoring(r):Promise.resolve(e[r]),setScoring:(r,n)=>((i==null?void 0:i.scoringStorage)&&i.scoringStorage.setScoring(r,n),e[n]=r,Promise.resolve())}};var Rr=()=>{let i={};return{id:"In-memory Test Storage",getTestSelection:t=>{let e=i[t];return Promise.resolve(e)},setTestSelection:(t,e)=>(typeof e=="undefined"?delete i[t]:i[t]=e,Promise.resolve()),delete:()=>(Object.keys(i).forEach(t=>{delete i[t]}),Promise.resolve())}};var E=async(i,t)=>{for(let e of i)try{let r=await t(e);if(r)return r}catch(r){console.error(r)}},w=async(i,t)=>{for(let e=0;e<i.length;e++){let r=i[e];try{e===0?await t(r):t(r).catch(n=>{console.error(n)})}catch(n){console.error(n)}}},R=async(i,t)=>{await Promise.all(i.map(e=>t(e)))};var Dr=({tiers:i})=>{let t=i,e=[],r;function n(a){return async(s,o)=>{let c=se(o.values),l=o.updated;e.forEach(g=>{g.time<=o.updated||(g.time>l&&(l=g.time),c=C(c,g.diff))});let u={...o,updated:l,values:c};await Promise.all(a.map(g=>g.storage.setScoring(u,s))),await(r==null?void 0:r(s,u))}}return t.forEach((a,s)=>{var l,u;let o=i.slice(0,s),c=n(o);a.__callback=c,(u=(l=a.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${i.map(a=>{var s,o;return(o=(s=a.storage)==null?void 0:s.id)!=null?o:"unknown"}).join(", ")})`,delete:async()=>{e=[],await R(i,a=>a.storage.delete())},getScope:async(...a)=>await E(i,s=>s.storage.getScope(...a)),setScope:async(...a)=>{await w(i,s=>s.storage.setScope(...a))},getScoring:async(...a)=>{let s;for(let o=0;o<i.length;o++){let c=t[o];if(s&&!c.loading)return s;if(!s||c.loading==="await"){let u=await c.storage.getScoring(...a);u&&(s=u);continue}let l=s;c.storage.getScoring(a[0]).then(u=>{if(u&&!D(l.values,u.values))return c.__callback(a[0],u)})}return s},setScoring:async(a,s,o,c,l)=>{var d;let u=x(a==null?void 0:a.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(d=a==null?void 0:a.updated)!=null?d:new Date().getTime(),diff:u}),await w(i,f=>f.storage.setScoring(a,s,o,c,l))},identify:async a=>{var c;let s=i.filter(l=>l.storage.identify);return s.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(s.map(l=>l.storage.identify(a)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:a=>r=a}};import{Scope as N}from"@uniformdev/optimize-common";var Ar=({getCookie:i,setCookie:t})=>{let e=s=>JSON.parse(s),r=s=>JSON.stringify(s),n=s=>`uniform_trk_${s.toLocaleLowerCase()}_score`,a={[N.Visit]:n(N.Visit),[N.Visitor]:n(N.Visitor)};return{getScoring:s=>{let o,c=a[s];if(!c)throw new Error(`Unsupported cookie scope ${s}`);let l=i(c);return l&&(o=e(l)),Promise.resolve(o)},setScoring:(s,o,c)=>{let l=s?r(s):"",u=c?c*60:30*24*60*60,g=a[o];if(!g)throw new Error(`Unsupported cookie scope ${o}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(a).forEach(s=>{t(a[s],"",-1)}),Promise.resolve())}};var Q="uniform_trk_tests",Se=30*24*60*60,Fr=({getCookie:i,setCookie:t})=>{let e=n=>n?JSON.parse(n):void 0,r=()=>{let n,a=i(Q);return a&&(n=e(a)),n};return{id:"Cookie Test Storage",getTestSelection:n=>{let a=r(),s=a==null?void 0:a[n];return Promise.resolve(s)},setTestSelection:(n,a)=>{let o={...r(),[n]:a},c=JSON.stringify(o);return t(Q,c,Se),Promise.resolve()},delete:()=>(t(Q,"",Se),Promise.resolve())}};var Ur=({storage:i})=>{let t;function e(r){return async(n,a,...s)=>{await Promise.all(r.map(o=>o.setScoring(a,n))),await(t==null?void 0:t(n,a,...s))}}return i.forEach((r,n)=>{var o;let a=i.slice(0,n),s=e(a);(o=r.setScoringValueExternallyUpdatedCallback)==null||o.call(r,s)}),{id:`Composite (${i.map(r=>{var n;return(n=r==null?void 0:r.id)!=null?n:"unknown"}).join(", ")})`,delete:async()=>{await R(i,r=>r.delete())},getScope:async(...r)=>await E(i,n=>n.getScope(...r)),setScope:async(...r)=>{await w(i,n=>n.setScope(...r))},getScoring:async(...r)=>await E(i,n=>n.getScoring(...r)),setScoring:async(...r)=>{await w(i,n=>n.setScoring(...r))},identify:async r=>{var s;let n=i.filter(o=>o.identify);return n.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(s=(await Promise.all(n.map(o=>o.identify(r)))).filter(o=>o))==null?void 0:s[0]},setScoringValueExternallyUpdatedCallback:r=>t=r}};var Kr=({storage:i})=>({id:`Composite (${i.map(t=>t.id).join(", ")})`,getTestSelection:async(...t)=>await E(i,e=>e.getTestSelection(...t)),setTestSelection:async(...t)=>{await w(i,e=>e.setTestSelection(...t))},delete:async()=>{await R(i,t=>t.delete())}});var Hr=i=>{let t=(i==null?void 0:i.sampleSize)||0;return{isInPersonalizationControlGroup:(e,r)=>e?(typeof r!="undefined"?r:t)>e.random:!1}};import{Scope as ve}from"@uniformdev/optimize-common";import{ExtensionEvents as K,isExtensionSetScoreMessage as tt}from"@uniformdev/optimize-tracker-common";var A=typeof top!="undefined",an=i=>{let t,{disableEventListeners:e}=i||{};return e||A&&window.addEventListener("message",async r=>{if(!!r.data&&tt(r.data)){let n=r.data.score;n&&(console.warn("[Uniform] browser extension has set intent scores. Note that this sets all scores to the visit scope and clears any existing visitor values.",n),await(t==null?void 0:t.setIntentStrength(ve.Visitor,{})),await(t==null?void 0:t.setIntentStrength(ve.Visit,n)))}}),{name:"browser-extension",initialize:r=>{t=r,A&&(top==null||top.postMessage({type:K.Hello,manifest:r.manifest},window.location.origin))},onLogMessage:r=>{A&&(top==null||top.postMessage({type:K.Log,message:r},window.location.origin))},onScoringChange:r=>{!r||A&&(top==null||top.postMessage({type:K.Score,score:r},window.location.origin))}}};var rt=i=>{let{values:t,total:e,missingDistribution:r}=i.reduce((n,a)=>(a.distribution?n.total+=a.distribution:++n.missingDistribution,n.values.push(a.distribution),n),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let a=(100-e)/r;t.forEach((s,o)=>{typeof s=="undefined"&&(t[o]=a)})}return t},on=({testName:i,variations:t,random:e,selectedVariantId:r,analyticsEmitter:n})=>{if(e>100||e<0)throw"Random must be between 0 and 100";let a;if(r&&(a=t.find(o=>o.id===r),a||console.warn("Previously selected variant is no longer present.")),!a){let o=rt(t),c=0;a=t.find((l,u)=>{let g=o[u];if(e>c&&e<=c+g)return l;c+=g})}let s=!1;return n==null||n.test({testName:i,testSelection:a==null?void 0:a.id}),{result:a,tracked:s}},cn=()=>Math.floor(Math.random()*100);export{We as AnalyticsEmitter,Ge as NoopAnalyticsEmitter,Xe as OptimizePluginLoader,Ee as OptimizeTracker,Q as TestCookieName,Se as TestExpiration,Qt as addBehaviorSignalPlugin,an as addBrowserExtension,jt as addConsoleLoggerPlugin,Ht as addCookieSignalPlugin,Yt as addEventSignalPlugin,tr as addLandingPageSignalPlugin,ir as addPageViewCountSignalPlugin,or as addPageVisitedSignalPlugin,ur as addQueryStringSignalPlugin,Me as behaviorSignalEvaluator,F as calculateEnrichmentIntentName,se as cloneScore,C as combineScores,Ur as compositeScopeStorage,Kr as compositeTestStorage,Ar as cookieScoringStorage,Fr as cookieTestStorage,Hr as createPercentageTestStrategy,yr as createVisitScopeStrategy,wr as createVisitorScopeStrategy,Z as cumulativeScoringStrategy,Y as decayByDayStrategy,x as diffScores,q as doesValueMatchEventProperty,Ae as eventSignalEvaluator,cn as generateRandom,L as getEnrichmentValue,Pr as inMemoryScopeStorage,Rr as inMemoryTestStorage,rt as normalizeVariationDistributions,te as parseEnrichment,Ve as personalizeList,dr as resolveAnalyticsEmitter,z as scopeStrategy,j as scoreIsEmpty,D as scoresAreEqual,on as testList,Dr as tieredScopeStorage}; |
@@ -1,1 +0,1 @@ | ||
var X=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Oe=Object.prototype.hasOwnProperty;var Le=n=>X(n,"__esModule",{value:!0});var Ce=(n,t)=>{for(var e in t)X(n,e,{get:t[e],enumerable:!0})},De=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Me(t))!Oe.call(n,i)&&(e||i!=="default")&&X(n,i,{get:()=>t[i],enumerable:!(r=Ie(t,i))||r.enumerable});return n};var ze=(n=>(t,e)=>n&&n.get(t)||(e=De(Le({}),t,1),n&&n.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var St={};Ce(St,{AnalyticsEmitter:()=>ke,NoopAnalyticsEmitter:()=>Te,OptimizePluginLoader:()=>we,OptimizeTracker:()=>pe,TestCookieName:()=>H,TestExpiration:()=>ne,addBehaviorSignalPlugin:()=>qe,addBrowserExtension:()=>ft,addConsoleLoggerPlugin:()=>Ue,addCookieSignalPlugin:()=>Je,addEventSignalPlugin:()=>He,addLandingPageSignalPlugin:()=>We,addPageViewCountSignalPlugin:()=>Ye,addPageVisitedSignalPlugin:()=>et,addQueryStringSignalPlugin:()=>tt,behaviorSignalEvaluator:()=>he,calculateEnrichmentIntentName:()=>q,cloneScore:()=>re,combineScores:()=>N,compositeScopeStorage:()=>ut,compositeTestStorage:()=>gt,cookieScoringStorage:()=>ct,cookieTestStorage:()=>lt,createPercentageTestStrategy:()=>dt,createVisitScopeStrategy:()=>nt,createVisitorScopeStrategy:()=>it,cumulativeScoringStrategy:()=>Z,decayByDayStrategy:()=>Y,diffScores:()=>w,doesValueMatchEventProperty:()=>J,eventSignalEvaluator:()=>ye,generateRandom:()=>mt,getEnrichmentValue:()=>z,inMemoryScopeStorage:()=>at,inMemoryTestStorage:()=>st,normalizeVariationDistributions:()=>_e,parseEnrichment:()=>ee,personalizeList:()=>ve,resolveAnalyticsEmitter:()=>rt,scopeStrategy:()=>j,scoreIsEmpty:()=>Q,scoresAreEqual:()=>A,testList:()=>pt,tieredScopeStorage:()=>ot});var S=require("@uniformdev/optimize-common");var Ne={maxDecay:.95,daysInMonth:30},Ae=(n,t)=>Math.round((n-t)/(1e3*60*60*24)),$e=(n,t,e)=>{if(!t)return console.warn("[DecayByDay]: daysInMonth is not populated."),null;let r;return e?r=Math.min(e,n/t):r=n/t,1-r},Y=n=>{let t={...Ne,...n};return r=>{if(!(r==null?void 0:r.updated)||!r.values)return Promise.resolve(void 0);let{updated:i,values:a}=r,s=t.today||new Date().valueOf(),o=Ae(s,i!=null?i:0),c=$e(o,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(a).forEach(u=>{var f,m;let g=a[u];typeof g=="number"&&(g=a[u]={str:g});let d=Number((m=(f=a[u])==null?void 0:f.str)!=null?m:0);c&&(l.values[u].str=d*c)}),Promise.resolve(l))}};var ue=require("@uniformdev/optimize-common"),Z=()=>{let n="cumulative";return({previousValue:e,valueToAdd:r})=>{let i={...e};return Object.keys(r).forEach(s=>{var c,l,u;let o=(c=r[s])==null?void 0:c.str;if(o===ue.IntentTagStrength.Antimatter)delete i[s];else{let g=Number((u=(l=i[s])==null?void 0:l.str)!=null?u:0),d=Number(o!=null?o:0),f=g+d;f>0?i[s]={str:f}:delete i[s]}}),{values:i,strategy:n,updated:new Date().valueOf()}}};var U={error:3,warn:2,info:1,verbose:0},ge=(n,t)=>!(!n||n==="none"||U[n]!==void 0&&U[t]!==void 0&&U[t]<U[n]),D=">",q=(n,t)=>{if(n.includes(D)||t.includes(D))throw`"${D}" is a reserved enrichment character`;return`${n}${D}${t}`},ee=n=>{let t=n.split(D);if(t.length===2)return{type:t[0],value:t[1]}},z=(n,t)=>{let e=ee(t);if(!!e&&e.type===n)return e.value},de=()=>{if(!(typeof window=="undefined"||typeof document=="undefined"))return{cookies:document.cookie,url:window.location.href,userAgent:navigator.userAgent}};var N=(...n)=>{let t={};return n.forEach(e=>{Object.keys(e).forEach(r=>{t[r]||(t[r]={str:0});let i=e[r];i.str&&(t[r].str=Number(t[r].str)+Number(i.str))})}),t};var fe=(n,t)=>{let e=n!=null?n:{str:0},r=t!=null?t:{str:0};return{str:Number(e.str)-Number(r.str)}},w=(n,t)=>{let e={};return n||(n={}),t||(t={}),Object.keys(n).forEach(r=>{e[r]=fe(n[r],t[r])}),Object.keys(t).forEach(r=>{e[r]||(e[r]=fe(n[r],t[r]))}),Object.keys(e).forEach(r=>{e[r].str===0&&delete e[r]}),e};var A=(n,t)=>{let e=w(n,t);return!(Object.keys(e).length>0)};var Q=n=>!n||Object.keys(n).length===0;var pe=class{constructor(t){this._intentMappings=[];this._behaviorQueue=[];this._behaviorKeys={};this._events=[];this._listeners=[];this._testSettings=[];this._signalEvaluators={};this._initialized=!1;this._lastBroadcastScoring=void 0;var e,r;if(this._intentManifest=t.intentManifest,t.intentManifest&&this.addIntents(t.intentManifest.site.intents),this._plugins=t.plugins,this._storage=t.storage,this._scopeStrategies=t.scopes,this._scoringStrategy=(e=t.scoring)!=null?e:Z(),this._decayStrategy=(r=t.decay)!=null?r:Y(),this._serverState=this.getServerState(),t.testing){let i=Array.isArray(t.testing)?t.testing:[t.testing];this._testSettings.push(...i)}}async initialize(){var t,e;this.log({level:"info",message:"Received intent manifest",region:"initialize",intents:this._intentManifest}),await this.initializeScopes(),await this.loadPlugins(),this._signalEvaluators=this.loadSignalEvaluators(),(e=(t=this._storage.scopes).setScoringValueExternallyUpdatedCallback)==null||e.call(t,async()=>{await this.broadcastScoring()}),this._lastBroadcastScoring=void 0,this._initialized=!0}isInitialized(){return this._initialized}async getIntentStrength(t){let e=this.getScopeNames(t),r={};return await Promise.all(e.map(async a=>{let s=await this.readScoring(a);r[a]=s})),this.combineScoring(r)}async getIntentStrengthSingle(t,e){let r=await this.getIntentStrength(e);return r==null?void 0:r[t]}async addIntentStrength(t,e){let r=await this.readScoring(t);await this.applyScoringStrategy(t,r,e,1),await this.broadcastScoring()}async setIntentStrength(t,e){await this.applyScoringStrategy(t,void 0,e,1),await this.broadcastScoring()}async removeIntent(t,e){let r=this.getScopeNames(e==null?void 0:e.scope),i=typeof t=="string"?[t]:t,a=!1;return await Promise.all(r.map(async s=>{let o=await this._storage.scopes.getScoring(s);if(o){let c={},l=!1;Object.keys(o.values).map(u=>{t&&(i==null?void 0:i.indexOf(u))===-1?c[u]=o.values[u]:(l=!0,a=!0)}),l&&(await this.writeScoring(s,{...o,values:c},o),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),a}addScoringChangeListener(t){this._listeners.push(t)}removeScoringChangeListener(t){let e=this._listeners.indexOf(t);e>-1&&this._listeners.splice(e,1)}async reevaluateSignals(t){let e="reevaluateSignals";if(this.log({level:"verbose",message:"Signals reevaluating...",region:e}),!this._intentMappings||!this._intentMappings.length)return this.log({level:"warn",message:"Intents list is empty",region:e}),{signalMatches:{}};let r={};await Promise.all(this.getAllScopeStrategies().map(g=>g.get().then(d=>{d&&(r[d==null?void 0:d.type]=d)})));let i=Object.keys(this._behaviorKeys),a=i.length===0?this._behaviorQueue:[...this._behaviorQueue,...i.map(g=>this._behaviorKeys[g])],o=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:a})))).flatMap(g=>g),c=o.reduce((g,d)=>{var h;if(!d.statsScope||!d.statistics||!d.signal)return g;let f=d.statsScope.type,m=g[f]=(h=g[f])!=null?h:{};return m[d.signal.id]=d.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var d;return(d=this.getScopeStrategy(g))==null?void 0:d.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(o),u=await this.applySignalEvaluationSummary(l);return await this.broadcastScoring(u),this.clearBehaviorQueue(),this.clearEventQueue(),this.log({level:"info",message:"Reevaluated signals",region:e,...u}),{scoring:u,signalMatches:Object.keys(l).reduce((g,d)=>(g[d]=l[d].matches,g),{})}}addBehaviorActivity(t,e){this.log({level:"verbose",region:"addBehaviorActivity",message:"Behavior activity added to queue",...t,sourceKey:e}),e?this._behaviorKeys[e]=t:this._behaviorQueue.push(t)}async addEvent(t,e){this._events.push(t),e&&e.quiet!==void 0&&e.quiet||await this.reevaluateSignals()}async getEnrichmentValues(t,e){if(!this.isKnownEnrichment(t))return;let i=await this.getIntentStrength(e==null?void 0:e.scope)||{};return Object.keys(i||{}).reduce((s,o)=>{let c=z(t,o);return c&&i[o].str&&(s[c]=Number(i[o].str||0)),s},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||S.Scope.Visitor,i=Array.isArray(t)?t:[t],a={},s={};for(let l of i)if(this.isKnownEnrichment(l.name)){let g=q(l.name,l.value);(e==null?void 0:e.clearValues)&&(s[l.name]=!0);let d=Number(((c=a[g])==null?void 0:c.str)||0);a[g]={str:d+(l.str||S.IntentTagStrength.Normal)}}for(let l of Object.keys(s))await this.removeEnrichment(l,{scope:r,quiet:!0});let o=await this.readScoring(r);await this.applyScoringStrategy(r,o,a,i.length),(e==null?void 0:e.quiet)||await this.reevaluateSignals()}async removeEnrichment(t,e){let r=(e==null?void 0:e.scope)||S.Scope.Visitor,i=await this.getIntentStrength(r)||{},a=Object.keys(i||{}).filter(s=>{if(z(t,s))return s},{});await this.removeIntent(a,{scope:r,quiet:e==null?void 0:e.quiet})}trackPersonalization(t,e){var r;t&&((r=this._plugins)==null||r.track(i=>i(t,e)))}async isInPersonalizationControlGroup(t){var l;let{scope:e,sampleSize:r}=t||{},i=new Date,a=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>i));if(!a)return!1;let s=e!=null?e:S.Scope.Visitor,o=await((l=this.getScopeStrategy(s))==null?void 0:l.get());return a.strategy.isInPersonalizationControlGroup(o,r)}getTestValue(t){var r,i,a,s,o,c;let e=(i=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:i.find(l=>l.name===t);return(e==null?void 0:e.winning_variation_id)?Promise.resolve(e.winning_variation_id):((s=(a=this._serverState)==null?void 0:a.tests)==null?void 0:s[t])?Promise.resolve((c=(o=this._serverState)==null?void 0:o.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var i,a;let r=(a=(i=this._intentManifest)==null?void 0:i.site.tests)==null?void 0:a.find(s=>s.name===t);return(r==null?void 0:r.winning_variation_id)?Promise.resolve():this._storage.tests.setTestSelection(t,e)}isTestEnabled(t){var r,i;return!!((i=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:i.find(a=>a.name===t))}async identify(t){var a;let e=(a=this._storage)==null?void 0:a.scopes.identify;if(!e){this.log({region:"identify",level:"warn",message:"Visitor was identified, but storage did not implement identification"});return}let r=await this._storage.scopes.getScoring(S.Scope.Visitor),i=await e(t);i&&(await this.writeScoring(S.Scope.Visitor,i,r),await this.broadcastScoring())}async forgetMe(t){await Promise.all([this._storage.scopes.delete(t),this._storage.tests.delete()]),this.log({level:"info",region:"forgetMe",message:`Visitor has been forgotten (allDevices: ${t})`}),await this.broadcastScoring()}log(t){var e;(e=this._plugins)==null||e.log(r=>r(t))}async reevaluateSignal({intent:t,scopes:e,signal:r,requestContext:i,behaviorQueue:a}){var I,y,C;let s="reevaluateSignal",o=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,o)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:s});return}let l=this._signalEvaluators[r.type];if(!l){this.log({level:"warn",message:`Signal ${r.type} not handled by any plugin. It will be ignored.`,region:s});return}!r.str&&r.str!==S.IntentTagStrength.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${S.IntentTagStrength.Normal}`,region:s}),r.str=S.IntentTagStrength.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),d={intent:t,signal:r,scope:u,statsScope:o},f={signal:r,intent:t,behaviors:a,state:g,requestContext:i||de(),events:this._events,log:this.log.bind(this)},{requestContext:m,log:h,...b}=f,L=l(f),v=await Promise.resolve(L);if(this.log({level:"verbose",message:`${r.type} Signal evaluation result: ${(v==null?void 0:v.strength)?v.strength:"no match"}`,region:s,signal:r,intent:t,result:v}),d.result=v,typeof v=="undefined")return d;if(r.id){let T=await this.resolveFrequencyScope(r,e);return T&&(d.statistics={...(I=T.statistics)==null?void 0:I[r.id],evaluations:(((C=(y=T.statistics)==null?void 0:y[r.id])==null?void 0:C.evaluations)||0)+1}),u&&r.id&&v.state&&(u.state.signals=u.state.signals||{},u.state.signals[r.id]=v.state),d}}async resolveFrequencyScope(t,e){let r=t.freq===S.SignalFrequency.OncePerVisit?S.Scope.Visit:S.Scope.Visitor;return this.resolveScope(r,e)}determineIfSignalShouldEvaluate(t,e){var r,i;return t.id?!t.freq||t.freq===S.SignalFrequency.Always||t.type===S.SignalType.PageViewCount?!0:!((i=(r=e==null?void 0:e.statistics)==null?void 0:r[t.id])==null?void 0:i.evaluations):(this.log({level:"info",region:"determineIfSignalShouldEvaluate",message:"Signal ID is not populated"}),!1)}combineScoring(t){let e=Object.keys(t).map(r=>t[r]).filter(r=>r&&r.values).map(r=>r.values);return N(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:i,scope:a,result:s,intent:o}=r,{id:c}=o;if(a&&s&&(s.strength||s.strength===S.IntentTagStrength.Antimatter)){let{score:l,matches:u}=e[a.type]=e[a.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(s.strength),u.push({intentId:c,signalStrength:s.strength,signalType:i.type})}}),this.log({level:"verbose",message:"Signal evaluation matches",region:"processSignalEvaluations",summary:e}),e}async reevaluateIntent({intent:t,scopes:e,requestContext:r,behaviorQueue:i}){let a="Reevaluate Intent",s=[],{id:o,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${o} does not define any signals.`,region:a}):await Promise.all(t.signals.map(async l=>{let u=await this.reevaluateSignal({intent:t,scopes:e,signal:l,requestContext:r,behaviorQueue:i});(u==null?void 0:u.result)&&s.push(u)})),s}clearBehaviorQueue(){let t=this._behaviorQueue.length,e=Object.keys(this._behaviorKeys).length;if(t||e){let r=this._behaviorQueue.splice(0,t),i=this._behaviorKeys;this._behaviorKeys={},this.log({level:"verbose",message:"Queue cleared",region:"clearBehaviorQueue",count:t+e,cleared:r,clearedKeys:i})}}clearEventQueue(){if(this._events.length){let t=this._events.splice(0,this._events.length);this.log({level:"verbose",message:"Clearing event queue",region:"clearEventQueue",count:t.length,cleared:t})}}async applySignalEvaluationSummary(t){let e="applySignalEvaluationSummary",r=this.getScopeNames(),i={};await Promise.all(r.map(async s=>{let{score:o,matches:c}=t[s]||{matches:[],score:{}},l=await this.readScoring(s);i[s]=await this.applyScoringStrategy(s,l,o,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...i});let a=this.combineScoring(i);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...a}),a}getServerState(){if(this._serverState)return this._serverState;if(typeof document=="undefined")return;let t=document.getElementById("__UNIFORM_DATA__");return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}resolveSignalStorage(t,e){var a,s;let r="resolveSignalStorage",i=e.id?(a=t==null?void 0:t.state.signals)==null?void 0:a[e.id]:{};return e.id&&!((s=t==null?void 0:t.state.signals)==null?void 0:s[e.id])?this.log({level:"verbose",message:`Signal "${e.id}" is using default state`,region:r}):this.log({level:"verbose",message:`Signal "${e.id}" is using stored state`,region:r,...i}),i}async loadPlugins(){if(!this._plugins)return;let t=this._plugins.findPlugins("initialize");await Promise.all(t.map(e=>e.initialize({setIntentStrength:this.setIntentStrength.bind(this),log:this.log.bind(this),manifest:this._intentManifest})))}loadSignalEvaluators(){var e;return(((e=this._plugins)==null?void 0:e.find("signalEvaluatorMapping"))||[]).reduce((r,i)=>{let a=i();return Object.keys(a).forEach(s=>{r[s]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${s}`}),r[s]=a[s]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:i}=r;return{...r,signals:i.map(a=>{let{id:s}=a;return{...a,id:s!=null?s:`${r.id}:${JSON.stringify(a)}`}})}});this._intentMappings.push(...e)}async readScoring(t){let e=await this._storage.scopes.getScoring(t);if(e&&this._decayStrategy){let r={...e},i=await this._decayStrategy(e);typeof i!="undefined"&&(e=i),i&&this.log({level:"verbose",message:"Score decay has been applied",region:"readScoring",pre:r,post:e})}return e}getScopeStrategy(t){if(this._scopeStrategies)return this._scopeStrategies[t]}getAllScopeStrategies(){return this._scopeStrategies?Object.keys(this._scopeStrategies).map(t=>this._scopeStrategies[t]):[]}getScopeNames(t){return this._scopeStrategies?t&&this._scopeStrategies[t]?[t]:Object.keys(this._scopeStrategies):[]}async resolveScope(t,e){var s;let r="Resolve Scope",i=t||S.Scope.Visitor,a=e&&t?e[t]:await((s=this.getScopeStrategy(i))==null?void 0:s.get());return a||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(a==null?void 0:a.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${a==null?void 0:a.type}" was resolved`,region:r}),a}async initializeScopes(){let t=this.getAllScopeStrategies();await Promise.all(t.map(e=>e.initialize({log:this.log.bind(this),storage:this._storage.scopes})))}applyScoringStrategy(t,e,r,i){let a=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:i});return this.writeScoring(t,a,e)}async writeScoring(t,e,r){var o,c;let i="writeScoring",a;if(r&&(a=w(e.values,r.values),Object.keys(a).length===0))return this.log({level:"verbose",region:i,message:`Scoring update skipped for scope ${t}; values unchanged`}),e;this.log({level:"verbose",message:`${t} scoring has been updated`,region:i,...Q(e.values)?{cleared:!0}:e.values});let s=(c=(o=this._scopeStrategies)==null?void 0:o[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,s,r,a),e}async broadcastScoring(t){var r;let e=t||await this.getIntentStrength();if(!Q(e)&&this._lastBroadcastScoring&&A(this._lastBroadcastScoring,e)){this.log({level:"verbose",region:"broadcastScoring",message:"Skipped broadcasting unchanged scoring",value:e});return}this._lastBroadcastScoring=e,(r=this._plugins)==null||r.scoringChange(i=>i(e||null)),this._listeners.forEach(i=>i(e||null))}isKnownEnrichment(t){var r,i;return!!((i=(r=this._intentManifest)==null?void 0:r.site.enrichments)==null?void 0:i.find(a=>a.name===t))}};var K=require("@uniformdev/optimize-tracker-common"),Se=require("@uniformdev/optimize-common");function te(n){return Math.sqrt(Object.keys(n).reduce((t,e)=>{var r;return t+=Math.pow(Number((r=n[e].str)!=null?r:0),2)},0))}function me(n){let t=n.reduce((r,i)=>{var a;return Math.max(r,(a=i.relevancy)!=null?a:0)},0);if(t===0)return;let e=1/t;n.forEach(r=>{typeof r.relevancy!="undefined"&&(r.relevancy=r.relevancy*e)})}var Fe=({intentTag:n,intentScores:t})=>{if(!t||!n)return{isDefault:!0,score:0,tagStrength:0};let e=(0,Se.getPersonalizationIntents)(n);if(!e||Object.keys(e).length===0)return{isDefault:!0,score:0,tagStrength:0};let r={},i={};return Object.keys(n.intents).forEach(a=>{t[a]&&(r[a]=t[a],i[a]=n.intents[a])}),{score:te(r),isDefault:!1,tagStrength:te(i),matches:Object.keys(r)}},je=(n,t)=>{var i,a,s,o,c,l;let e=Object.keys((s=(a=(i=n.item)==null?void 0:i.intentTag)==null?void 0:a.intents)!=null?s:{}).some(u=>{var g,d,f;return((g=n.matches)==null?void 0:g.includes(u))&&((f=(d=n.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)}),r=Object.keys((l=(c=(o=t.item)==null?void 0:o.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,d,f;return((g=t.matches)==null?void 0:g.includes(u))&&((f=(d=t.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)});return e&&!r?-1:!e&&r?1:0},Be=(n,t)=>{var s,o;let e=t.relevancy-n.relevancy;if(e!==0)return e;let r=t.tagStrength-n.tagStrength;if(r!==0)return r;let i=Number(t.isDefault)-Number(n.isDefault);return i!==0?i:(((s=t.matches)==null?void 0:s.length)||0)-(((o=n.matches)==null?void 0:o.length)||0)},ve=({list:n,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:i,isInPersonalizationControlGroup:a,count:s,matchFilter:o="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:Fe,u=[],g={};n.forEach(f=>{var I;if((I=f.intentTag)==null?void 0:I.intents){let y=!0,C=f.intentTag.intents;if(Object.keys(C).forEach(T=>{var se,oe,ce,le;let W=C[T];if(W.threshold){let Ve=(oe=(se=t[T])==null?void 0:se.str)!=null?oe:0;W.threshold>Ve&&(y=!1)}let ae=g[T]=(ce=g[T])!=null?ce:{count:0,max:0};ae.count++,y&&(ae.max=Math.max((le=W.threshold)!=null?le:0,0))}),!y)return}let{score:m,tagStrength:h,isDefault:b,matches:L}=l({intentTag:f.intentTag,intentScores:t});m>0&&(c=!0);let v={item:f,matches:L,relevancy:m,tagStrength:h,isDefault:b};(o===K.MatchFilter.PersonalizedOnly||o==="personalizedOnly")&&v.isDefault||(o===K.MatchFilter.PersonalizedOnly||o==="personalizedOnly"||o===K.MatchFilter.PersonalizedOrDefault||o==="personalizedOrDefault")&&v.relevancy===0&&!v.isDefault||u.push(v)}),me(u),u=u.filter(f=>{var h;let m=(h=f.item.intentTag)==null?void 0:h.intents;return m?Object.keys(m).every(b=>{var y;let L=m[b],v=g[b];return v.count===1||v.max===0?!0:((y=L.threshold)!=null?y:0)===v.max}):!0}),c&&!a?u.sort((f,m)=>{let h=je(f,m);if(h!==0)return h;let b=Be(f,m);return b===0&&r?r(f.item,m.item):b}):u.sort((f,m)=>f.isDefault===m.isDefault?r?r(f.item,m.item):0:Number(m.isDefault)>Number(f.isDefault)?1:-1);let d=u;if(typeof s=="number"&&s>0&&(d=d.slice(0,s)),i){let f=new Set(d.flatMap(m=>{var h;return(h=m.matches)!=null?h:[]}));i==null||i.personalization({matches:Array.from(f),isInPersonalizationControlGroup:a!=null?a:!1,intentScores:t})}return{result:d,personalized:!a&&c,intentScores:t}};var Ue=(n="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!ge(n,t))return;let a="",s=console.log;t==="error"?(s=console.error,a=""):t==="warn"?(s=console.warn,a=""):t==="verbose"&&(a="font-size: 0.8em;");let o=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(o=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?s(o,a,l):s(o,a)}else s(o,a)}});var re=n=>Object.keys(n).reduce((t,e)=>(t[e]={str:n[e].str},t),{});var $=require("@uniformdev/optimize-common"),he=({signal:n,behaviors:t,intent:e,log:r})=>{let i="behaviorSignalEvaluator";if(!(0,$.isBehaviorSignal)(n)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:i});return}let{id:a}=e,s=n.str,o=0;if(t.forEach((c,l)=>{var g;let u=(g=c[a])==null?void 0:g.str;if(u&&s){let d=(Number(u)+Number(s))/2,f=d/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${f} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:i,baseFromSignal:s,baseFromTag:u,baseTotal:d,behQueueCount:t.length,final:f}),o+=f}}),o===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${a}'`,region:i,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:i,resultStrength:o})),{strength:o}},qe=()=>({name:`${$.SignalType.Behavior}-signal`,signalEvaluatorMapping:()=>({[$.SignalType.Behavior]:he})});var E=require("@uniformdev/optimize-common"),Qe=(n,t)=>{if(!t||!t.cookies)return;let r=`; ${t.cookies}`.split(`; ${n}=`);if(r.length===2)return r.pop().split(";").shift()},Ke=({signal:n,requestContext:t,log:e})=>{let r="cookieSignalEvaluator";if(!(0,E.isCookieSignal)(n)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let i=Qe(n.parameter,t);if(!i){e==null||e({level:"verbose",message:`Cookie '${n.parameter}' value is not defined`,region:r});return}if(!(0,E.isStringMatch)(i,n.value)){e==null||e({level:"verbose",message:"Cookie value does not match signal",region:r});return}return e==null||e({level:"verbose",message:"Cookie signal is a match",name:n.parameter,strength:n.str,region:r}),{strength:Number(n.str)}},Je=()=>({name:`${E.SignalType.Cookie}-signal`,signalEvaluatorMapping:()=>({[E.SignalType.Cookie]:Ke})});var P=require("@uniformdev/optimize-common"),J=(n,t)=>!t||!t.expr?!0:n?(0,P.isStringMatch)(n,t):!1,ye=({signal:n,events:t,log:e})=>{let r="eventSignalEvaluator";if(!(0,P.isEventSignal)(n)){e==null||e({level:"warn",message:"Signal is not an event signal",region:r});return}if(!t||!t.length){e==null||e({level:"verbose",message:"No events to process",region:r});return}let i=0,a=!1;if(t.forEach(s=>{let o=J(s.label,n.label),c=J(s.category,n.category),l=J(s.value,n.value);o&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:s,signal:n}),i+=Number(n.str),a=!0)}),!a){e==null||e({level:"verbose",message:"No event matches",region:r,signal:n});return}return{strength:i}},He=()=>({name:`${P.SignalType.Event}-signal`,signalEvaluatorMapping:()=>({[P.SignalType.Event]:ye})});var x=require("@uniformdev/optimize-common"),Ge=async({signal:n,requestContext:t,log:e})=>{let r="landingPageSignalEvaluator";if(!(0,x.isLandingPageSignal)(n)){e==null||e({level:"warn",message:"Signal is not an landing page signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:i.toString(),criteria:n.path});let a;return(0,x.isStringMatch)(i.pathname,n.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:i.toString(),criteria:n.path}),a=Number(n.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:i.toString(),criteria:n.path}),{strength:a}},We=()=>({name:`${x.SignalType.LandingPage}-signal`,signalEvaluatorMapping:()=>({[x.SignalType.LandingPage]:Ge})});var F=require("@uniformdev/optimize-common"),Xe=({signal:n,state:t,log:e})=>{var c,l,u,g;let r="pageViewCountSignalEvaluator";if(!(0,F.isPageViewCountSignal)(n)){e==null||e({level:"warn",message:"Signal is not a page view count signal",region:r});return}let i=(c=t==null?void 0:t.pageCount)!=null?c:0;e==null||e({level:"warn",message:"Starting page count",region:r,pageCount:i});let a={state:{pageCount:i+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=a.state)==null?void 0:l.pageCount});let s=(u=n==null?void 0:n.min)!=null?u:0,o=(g=n==null?void 0:n.max)!=null?g:Number.MAX_VALUE;return(o===0||isNaN(o))&&(o=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:s,max:o}),i>=s&&i<=o?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:n.str}),a.strength=Number(n.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:n.str}),a},Ye=()=>({name:`${F.SignalType.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[F.SignalType.PageViewCount]:Xe})});var R=require("@uniformdev/optimize-common"),Ze=({signal:n,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!(0,R.isPageVisitedSignal)(n)){e==null||e({level:"warn",message:"Signal is not a page visited signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:i.toString(),criteria:n.path});let a;if((0,R.isStringMatch)(i.pathname,n.path))e==null||e({level:"info",message:"URL is a match",region:r,url:i.toString(),criteria:n.path}),a=Number(n.str);else{e==null||e({level:"info",message:"URL is not a match",region:r,url:i.toString(),criteria:n.path});return}return{strength:a}},et=()=>({name:`${R.SignalType.PageVisited}-signal`,signalEvaluatorMapping:()=>({[R.SignalType.PageVisited]:Ze})});var _=require("@uniformdev/optimize-common"),be=({signal:n,requestContext:t,log:e})=>{let r="queryStringSignalEvaluator";if(!(0,_.isQueryStringSignal)(n)){e==null||e({level:"warn",message:"Signal is not a query string signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url),a=i.searchParams.get(n.parameter);if(!a){e==null||e({level:"verbose",message:`Query string value '${n.parameter}' not defined`,region:r,url:i.toString()});return}if(!(0,_.isStringMatch)(a,n.value)){e==null||e({level:"verbose",message:`Query string value '${n.parameter}' is not a match`,region:r,parameterValue:a,criteria:n.value});return}return e==null||e({level:"verbose",message:`Query string value '${n.parameter}' matches`,region:r,url:i.toString(),parameter:n.parameter}),{strength:Number(n.str)}},tt=()=>({name:`${_.SignalType.QueryString}-signal`,signalEvaluatorMapping:()=>({[_.SignalType.QueryString]:be,UTM:be})});var rt=({active:n,options:t})=>!n||typeof window=="undefined"?Te():ke(t),Te=()=>({personalization:()=>!1,test:()=>!1}),ke=({tracker:n,name:t})=>({personalization:({matches:e,isInPersonalizationControlGroup:r,intentScores:i})=>{if(!n||!n.isInitialized())return!1;let a=e&&e.length?e.join(", "):"Default";return n.trackPersonalization(t,{category:"Uniform Personalization",label:a,value:r?1:0,intentScores:i}),!0},test:({testName:e,testSelection:r})=>{if(!n||!n.isInitialized())return!1;let i=typeof document!="undefined"?document.title:"";return n.trackPersonalization(`${e} | ${i}`,{category:"Uniform AB Testing",label:r||"No Variant"}),!0}});var we=class{constructor(t){this._pluginMap=this.mapPlugins(t)}log(t){this.find("onLogMessage").forEach(r=>t(r))}track(t){this.find("track").forEach(r=>t(r))}async initialize(t){let r=this.find("initialize").map(i=>t(i));await Promise.all(r)}scoringChange(t){this.find("onScoringChange").forEach(r=>t(r))}mapPlugins(t){let e={};return t.forEach(r=>{Object.keys(r).forEach(i=>{e[i]=e[i]||[],e[i].push({plugin:r,function:r[i]})})}),e}findPlugins(t){return(this._pluginMap[t]||[]).map(r=>r.plugin)}find(t){return(this._pluginMap[t]||[]).map(r=>r.function)}};var Ee=require("uuid"),Pe="scopeStrategy",j=n=>{let t=()=>({id:(0,Ee.v4)(),created:new Date().valueOf(),state:{},type:n.type,random:Math.random()}),e=s=>{if(typeof n.expirationMinutes=="undefined")return!1;let o=n.expirationMinutes*60*1e3,c=new Date().valueOf(),l=s.updated||s.created;return c-l>=o},{type:r}=n,i,a=()=>{};return{type:r,initialize:async({log:s,storage:o})=>{a=s,i=o},get:async()=>{if(!i)throw new Error("call initialize first");let s=await i.getScope(r);if(s&&e(s)&&(a({level:"info",region:Pe,message:`Scope ${r} is expired, data cleared.`}),s=void 0),!s){a({level:"verbose",region:Pe,message:`Creating scope ${r}`});let c=((n==null?void 0:n.createScope)||t)();return await i.setScope(c),c}return s},save:async s=>{if(!i)throw new Error("call initialize first");await i.setScope(s)},getExpiration:()=>n.expirationMinutes}};var xe=require("@uniformdev/optimize-common");var nt=n=>j({type:xe.Scope.Visit,expirationMinutes:(n==null?void 0:n.expirationMinutes)||20});var Re=require("@uniformdev/optimize-common");var it=()=>j({type:Re.Scope.Visitor});var at=n=>{let t={},e={};return{id:"In-memory Scope Storage",delete:()=>(Object.keys(t).forEach(r=>{delete t[r]}),Object.keys(e).forEach(r=>{delete e[r]}),Promise.resolve()),getScope:r=>Promise.resolve(t[r]),setScope:r=>(t[r.type]=r,Promise.resolve()),getScoring:r=>(n==null?void 0:n.scoringStorage)?n.scoringStorage.getScoring(r):Promise.resolve(e[r]),setScoring:(r,i)=>((n==null?void 0:n.scoringStorage)&&n.scoringStorage.setScoring(r,i),e[i]=r,Promise.resolve())}};var st=()=>{let n={};return{id:"In-memory Test Storage",getTestSelection:t=>{let e=n[t];return Promise.resolve(e)},setTestSelection:(t,e)=>(typeof e=="undefined"?delete n[t]:n[t]=e,Promise.resolve()),delete:()=>(Object.keys(n).forEach(t=>{delete n[t]}),Promise.resolve())}};var V=async(n,t)=>{for(let e of n)try{let r=await t(e);if(r)return r}catch(r){console.error(r)}},k=async(n,t)=>{for(let e=0;e<n.length;e++){let r=n[e];try{e===0?await t(r):t(r).catch(i=>{console.error(i)})}catch(i){console.error(i)}}},M=async(n,t)=>{await Promise.all(n.map(e=>t(e)))};var ot=({tiers:n})=>{let t=n,e=[],r;function i(a){return async(s,o)=>{let c=re(o.values),l=o.updated;e.forEach(g=>{g.time<=o.updated||(g.time>l&&(l=g.time),c=N(c,g.diff))});let u={...o,updated:l,values:c};await Promise.all(a.map(g=>g.storage.setScoring(u,s))),await(r==null?void 0:r(s,u))}}return t.forEach((a,s)=>{var l,u;let o=n.slice(0,s),c=i(o);a.__callback=c,(u=(l=a.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${n.map(a=>{var s,o;return(o=(s=a.storage)==null?void 0:s.id)!=null?o:"unknown"}).join(", ")})`,delete:async()=>{e=[],await M(n,a=>a.storage.delete())},getScope:async(...a)=>await V(n,s=>s.storage.getScope(...a)),setScope:async(...a)=>{await k(n,s=>s.storage.setScope(...a))},getScoring:async(...a)=>{let s;for(let o=0;o<n.length;o++){let c=t[o];if(s&&!c.loading)return s;if(!s||c.loading==="await"){let u=await c.storage.getScoring(...a);u&&(s=u);continue}let l=s;c.storage.getScoring(a[0]).then(u=>{if(u&&!A(l.values,u.values))return c.__callback(a[0],u)})}return s},setScoring:async(a,s,o,c,l)=>{var d;let u=w(a==null?void 0:a.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(d=a==null?void 0:a.updated)!=null?d:new Date().getTime(),diff:u}),await k(n,f=>f.storage.setScoring(a,s,o,c,l))},identify:async a=>{var c;let s=n.filter(l=>l.storage.identify);return s.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(s.map(l=>l.storage.identify(a)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:a=>r=a}};var B=require("@uniformdev/optimize-common"),ct=({getCookie:n,setCookie:t})=>{let e=s=>JSON.parse(s),r=s=>JSON.stringify(s),i=s=>`uniform_trk_${s.toLocaleLowerCase()}_score`,a={[B.Scope.Visit]:i(B.Scope.Visit),[B.Scope.Visitor]:i(B.Scope.Visitor)};return{getScoring:s=>{let o,c=a[s];if(!c)throw new Error(`Unsupported cookie scope ${s}`);let l=n(c);return l&&(o=e(l)),Promise.resolve(o)},setScoring:(s,o,c)=>{let l=s?r(s):"",u=c?c*60:30*24*60*60,g=a[o];if(!g)throw new Error(`Unsupported cookie scope ${o}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(a).forEach(s=>{t(a[s],"",-1)}),Promise.resolve())}};var H="uniform_trk_tests",ne=30*24*60*60,lt=({getCookie:n,setCookie:t})=>{let e=i=>i?JSON.parse(i):void 0,r=()=>{let i,a=n(H);return a&&(i=e(a)),i};return{id:"Cookie Test Storage",getTestSelection:i=>{let a=r(),s=a==null?void 0:a[i];return Promise.resolve(s)},setTestSelection:(i,a)=>{let o={...r(),[i]:a},c=JSON.stringify(o);return t(H,c,ne),Promise.resolve()},delete:()=>(t(H,"",ne),Promise.resolve())}};var ut=({storage:n})=>{let t;function e(r){return async(i,a,...s)=>{await Promise.all(r.map(o=>o.setScoring(a,i))),await(t==null?void 0:t(i,a,...s))}}return n.forEach((r,i)=>{var o;let a=n.slice(0,i),s=e(a);(o=r.setScoringValueExternallyUpdatedCallback)==null||o.call(r,s)}),{id:`Composite (${n.map(r=>{var i;return(i=r==null?void 0:r.id)!=null?i:"unknown"}).join(", ")})`,delete:async()=>{await M(n,r=>r.delete())},getScope:async(...r)=>await V(n,i=>i.getScope(...r)),setScope:async(...r)=>{await k(n,i=>i.setScope(...r))},getScoring:async(...r)=>await V(n,i=>i.getScoring(...r)),setScoring:async(...r)=>{await k(n,i=>i.setScoring(...r))},identify:async r=>{var s;let i=n.filter(o=>o.identify);return i.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(s=(await Promise.all(i.map(o=>o.identify(r)))).filter(o=>o))==null?void 0:s[0]},setScoringValueExternallyUpdatedCallback:r=>t=r}};var gt=({storage:n})=>({id:`Composite (${n.map(t=>t.id).join(", ")})`,getTestSelection:async(...t)=>await V(n,e=>e.getTestSelection(...t)),setTestSelection:async(...t)=>{await k(n,e=>e.setTestSelection(...t))},delete:async()=>{await M(n,t=>t.delete())}});var dt=n=>{let t=(n==null?void 0:n.sampleSize)||0;return{isInPersonalizationControlGroup:(e,r)=>e?(typeof r!="undefined"?r:t)>e.random:!1}};var ie=require("@uniformdev/optimize-common"),O=require("@uniformdev/optimize-tracker-common"),G=typeof top!="undefined",ft=n=>{let t,{disableEventListeners:e}=n||{};return e||G&&window.addEventListener("message",async r=>{if(!!r.data&&(0,O.isExtensionSetScoreMessage)(r.data)){let i=r.data.score;i&&(console.warn("[Uniform] browser extension has set intent scores. Note that this sets all scores to the visit scope and clears any existing visitor values.",i),await(t==null?void 0:t.setIntentStrength(ie.Scope.Visitor,{})),await(t==null?void 0:t.setIntentStrength(ie.Scope.Visit,i)))}}),{name:"browser-extension",initialize:r=>{t=r,G&&(top==null||top.postMessage({type:O.ExtensionEvents.Hello,manifest:r.manifest},window.location.origin))},onLogMessage:r=>{G&&(top==null||top.postMessage({type:O.ExtensionEvents.Log,message:r},window.location.origin))},onScoringChange:r=>{!r||G&&(top==null||top.postMessage({type:O.ExtensionEvents.Score,score:r},window.location.origin))}}};var _e=n=>{let{values:t,total:e,missingDistribution:r}=n.reduce((i,a)=>(a.distribution?i.total+=a.distribution:++i.missingDistribution,i.values.push(a.distribution),i),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let a=(100-e)/r;t.forEach((s,o)=>{typeof s=="undefined"&&(t[o]=a)})}return t},pt=({testName:n,variations:t,random:e,selectedVariantId:r,analyticsEmitter:i})=>{if(e>100||e<0)throw"Random must be between 0 and 100";let a;if(r&&(a=t.find(o=>o.id===r),a||console.warn("Previously selected variant is no longer present.")),!a){let o=_e(t),c=0;a=t.find((l,u)=>{let g=o[u];if(e>c&&e<=c+g)return l;c+=g})}let s=!1;return i==null||i.test({testName:n,testSelection:a==null?void 0:a.id}),{result:a,tracked:s}},mt=()=>Math.floor(Math.random()*100);module.exports=ze(St);0&&(module.exports={AnalyticsEmitter,NoopAnalyticsEmitter,OptimizePluginLoader,OptimizeTracker,TestCookieName,TestExpiration,addBehaviorSignalPlugin,addBrowserExtension,addConsoleLoggerPlugin,addCookieSignalPlugin,addEventSignalPlugin,addLandingPageSignalPlugin,addPageViewCountSignalPlugin,addPageVisitedSignalPlugin,addQueryStringSignalPlugin,behaviorSignalEvaluator,calculateEnrichmentIntentName,cloneScore,combineScores,compositeScopeStorage,compositeTestStorage,cookieScoringStorage,cookieTestStorage,createPercentageTestStrategy,createVisitScopeStrategy,createVisitorScopeStrategy,cumulativeScoringStrategy,decayByDayStrategy,diffScores,doesValueMatchEventProperty,eventSignalEvaluator,generateRandom,getEnrichmentValue,inMemoryScopeStorage,inMemoryTestStorage,normalizeVariationDistributions,parseEnrichment,personalizeList,resolveAnalyticsEmitter,scopeStrategy,scoreIsEmpty,scoresAreEqual,testList,tieredScopeStorage}); | ||
var X=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Oe=Object.prototype.hasOwnProperty;var Le=n=>X(n,"__esModule",{value:!0});var Ce=(n,t)=>{for(var e in t)X(n,e,{get:t[e],enumerable:!0})},De=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Me(t))!Oe.call(n,i)&&(e||i!=="default")&&X(n,i,{get:()=>t[i],enumerable:!(r=Ie(t,i))||r.enumerable});return n};var ze=(n=>(t,e)=>n&&n.get(t)||(e=De(Le({}),t,1),n&&n.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var St={};Ce(St,{AnalyticsEmitter:()=>ke,NoopAnalyticsEmitter:()=>Te,OptimizePluginLoader:()=>we,OptimizeTracker:()=>pe,TestCookieName:()=>H,TestExpiration:()=>ne,addBehaviorSignalPlugin:()=>qe,addBrowserExtension:()=>ft,addConsoleLoggerPlugin:()=>Ue,addCookieSignalPlugin:()=>Je,addEventSignalPlugin:()=>He,addLandingPageSignalPlugin:()=>We,addPageViewCountSignalPlugin:()=>Ye,addPageVisitedSignalPlugin:()=>et,addQueryStringSignalPlugin:()=>tt,behaviorSignalEvaluator:()=>he,calculateEnrichmentIntentName:()=>q,cloneScore:()=>re,combineScores:()=>N,compositeScopeStorage:()=>ut,compositeTestStorage:()=>gt,cookieScoringStorage:()=>ct,cookieTestStorage:()=>lt,createPercentageTestStrategy:()=>dt,createVisitScopeStrategy:()=>nt,createVisitorScopeStrategy:()=>it,cumulativeScoringStrategy:()=>Z,decayByDayStrategy:()=>Y,diffScores:()=>w,doesValueMatchEventProperty:()=>J,eventSignalEvaluator:()=>ye,generateRandom:()=>mt,getEnrichmentValue:()=>z,inMemoryScopeStorage:()=>at,inMemoryTestStorage:()=>st,normalizeVariationDistributions:()=>_e,parseEnrichment:()=>ee,personalizeList:()=>ve,resolveAnalyticsEmitter:()=>rt,scopeStrategy:()=>j,scoreIsEmpty:()=>Q,scoresAreEqual:()=>A,testList:()=>pt,tieredScopeStorage:()=>ot});var S=require("@uniformdev/optimize-common");var Ne={maxDecay:.95,daysInMonth:30},Ae=(n,t)=>Math.round((n-t)/864e5),$e=(n,t,e)=>{if(!t)return console.warn("[DecayByDay]: daysInMonth is not populated."),null;let r;return e?r=Math.min(e,n/t):r=n/t,1-r},Y=n=>{let t={...Ne,...n};return r=>{if(!(r==null?void 0:r.updated)||!r.values)return Promise.resolve(void 0);let{updated:i,values:a}=r,s=t.today||new Date().valueOf(),o=Ae(s,i!=null?i:0),c=$e(o,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(a).forEach(u=>{var f,m;let g=a[u];typeof g=="number"&&(g=a[u]={str:g});let d=Number((m=(f=a[u])==null?void 0:f.str)!=null?m:0);c&&(l.values[u].str=d*c)}),Promise.resolve(l))}};var ue=require("@uniformdev/optimize-common"),Z=()=>{let n="cumulative";return({previousValue:e,valueToAdd:r})=>{let i={...e};return Object.keys(r).forEach(s=>{var c,l,u;let o=(c=r[s])==null?void 0:c.str;if(o===ue.IntentTagStrength.Antimatter)delete i[s];else{let g=Number((u=(l=i[s])==null?void 0:l.str)!=null?u:0),d=Number(o!=null?o:0),f=g+d;f>0?i[s]={str:f}:delete i[s]}}),{values:i,strategy:n,updated:new Date().valueOf()}}};var U={error:3,warn:2,info:1,verbose:0},ge=(n,t)=>!(!n||n==="none"||U[n]!==void 0&&U[t]!==void 0&&U[t]<U[n]),D=">",q=(n,t)=>{if(n.includes(D)||t.includes(D))throw`"${D}" is a reserved enrichment character`;return`${n}${D}${t}`},ee=n=>{let t=n.split(D);if(t.length===2)return{type:t[0],value:t[1]}},z=(n,t)=>{let e=ee(t);if(!!e&&e.type===n)return e.value},de=()=>{if(!(typeof window=="undefined"||typeof document=="undefined"))return{cookies:document.cookie,url:window.location.href,userAgent:navigator.userAgent}};var N=(...n)=>{let t={};return n.forEach(e=>{Object.keys(e).forEach(r=>{t[r]||(t[r]={str:0});let i=e[r];i.str&&(t[r].str=Number(t[r].str)+Number(i.str))})}),t};var fe=(n,t)=>{let e=n!=null?n:{str:0},r=t!=null?t:{str:0};return{str:Number(e.str)-Number(r.str)}},w=(n,t)=>{let e={};return n||(n={}),t||(t={}),Object.keys(n).forEach(r=>{e[r]=fe(n[r],t[r])}),Object.keys(t).forEach(r=>{e[r]||(e[r]=fe(n[r],t[r]))}),Object.keys(e).forEach(r=>{e[r].str===0&&delete e[r]}),e};var A=(n,t)=>{let e=w(n,t);return!(Object.keys(e).length>0)};var Q=n=>!n||Object.keys(n).length===0;var pe=class{constructor(t){this._intentMappings=[];this._behaviorQueue=[];this._behaviorKeys={};this._events=[];this._listeners=[];this._testSettings=[];this._signalEvaluators={};this._initialized=!1;this._lastBroadcastScoring=void 0;var e,r;if(this._intentManifest=t.intentManifest,t.intentManifest&&this.addIntents(t.intentManifest.site.intents),this._plugins=t.plugins,this._storage=t.storage,this._scopeStrategies=t.scopes,this._scoringStrategy=(e=t.scoring)!=null?e:Z(),this._decayStrategy=(r=t.decay)!=null?r:Y(),this._serverState=this.getServerState(),t.testing){let i=Array.isArray(t.testing)?t.testing:[t.testing];this._testSettings.push(...i)}}async initialize(){var t,e;this.log({level:"info",message:"Received intent manifest",region:"initialize",intents:this._intentManifest}),await this.initializeScopes(),await this.loadPlugins(),this._signalEvaluators=this.loadSignalEvaluators(),(e=(t=this._storage.scopes).setScoringValueExternallyUpdatedCallback)==null||e.call(t,async()=>{await this.broadcastScoring()}),this._lastBroadcastScoring=void 0,this._initialized=!0}isInitialized(){return this._initialized}async getIntentStrength(t){let e=this.getScopeNames(t),r={};return await Promise.all(e.map(async a=>{let s=await this.readScoring(a);r[a]=s})),this.combineScoring(r)}async getIntentStrengthSingle(t,e){let r=await this.getIntentStrength(e);return r==null?void 0:r[t]}async addIntentStrength(t,e){let r=await this.readScoring(t);await this.applyScoringStrategy(t,r,e,1),await this.broadcastScoring()}async setIntentStrength(t,e){await this.applyScoringStrategy(t,void 0,e,1),await this.broadcastScoring()}async removeIntent(t,e){let r=this.getScopeNames(e==null?void 0:e.scope),i=typeof t=="string"?[t]:t,a=!1;return await Promise.all(r.map(async s=>{let o=await this._storage.scopes.getScoring(s);if(o){let c={},l=!1;Object.keys(o.values).map(u=>{t&&(i==null?void 0:i.indexOf(u))===-1?c[u]=o.values[u]:(l=!0,a=!0)}),l&&(await this.writeScoring(s,{...o,values:c},o),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),a}addScoringChangeListener(t){this._listeners.push(t)}removeScoringChangeListener(t){let e=this._listeners.indexOf(t);e>-1&&this._listeners.splice(e,1)}async reevaluateSignals(t){let e="reevaluateSignals";if(this.log({level:"verbose",message:"Signals reevaluating...",region:e}),!this._intentMappings||!this._intentMappings.length)return this.log({level:"warn",message:"Intents list is empty",region:e}),{signalMatches:{}};let r={};await Promise.all(this.getAllScopeStrategies().map(g=>g.get().then(d=>{d&&(r[d==null?void 0:d.type]=d)})));let i=Object.keys(this._behaviorKeys),a=i.length===0?this._behaviorQueue:[...this._behaviorQueue,...i.map(g=>this._behaviorKeys[g])],o=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:a})))).flatMap(g=>g),c=o.reduce((g,d)=>{var h;if(!d.statsScope||!d.statistics||!d.signal)return g;let f=d.statsScope.type,m=g[f]=(h=g[f])!=null?h:{};return m[d.signal.id]=d.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var d;return(d=this.getScopeStrategy(g))==null?void 0:d.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(o),u=await this.applySignalEvaluationSummary(l);return await this.broadcastScoring(u),this.clearBehaviorQueue(),this.clearEventQueue(),this.log({level:"info",message:"Reevaluated signals",region:e,...u}),{scoring:u,signalMatches:Object.keys(l).reduce((g,d)=>(g[d]=l[d].matches,g),{})}}addBehaviorActivity(t,e){this.log({level:"verbose",region:"addBehaviorActivity",message:"Behavior activity added to queue",...t,sourceKey:e}),e?this._behaviorKeys[e]=t:this._behaviorQueue.push(t)}async addEvent(t,e){this._events.push(t),e&&e.quiet!==void 0&&e.quiet||await this.reevaluateSignals()}async getEnrichmentValues(t,e){if(!this.isKnownEnrichment(t))return;let i=await this.getIntentStrength(e==null?void 0:e.scope)||{};return Object.keys(i||{}).reduce((s,o)=>{let c=z(t,o);return c&&i[o].str&&(s[c]=Number(i[o].str||0)),s},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||S.Scope.Visitor,i=Array.isArray(t)?t:[t],a={},s={};for(let l of i)if(this.isKnownEnrichment(l.name)){let g=q(l.name,l.value);(e==null?void 0:e.clearValues)&&(s[l.name]=!0);let d=Number(((c=a[g])==null?void 0:c.str)||0);a[g]={str:d+(l.str||S.IntentTagStrength.Normal)}}for(let l of Object.keys(s))await this.removeEnrichment(l,{scope:r,quiet:!0});let o=await this.readScoring(r);await this.applyScoringStrategy(r,o,a,i.length),(e==null?void 0:e.quiet)||await this.reevaluateSignals()}async removeEnrichment(t,e){let r=(e==null?void 0:e.scope)||S.Scope.Visitor,i=await this.getIntentStrength(r)||{},a=Object.keys(i||{}).filter(s=>{if(z(t,s))return s},{});await this.removeIntent(a,{scope:r,quiet:e==null?void 0:e.quiet})}trackPersonalization(t,e){var r;t&&((r=this._plugins)==null||r.track(i=>i(t,e)))}async isInPersonalizationControlGroup(t){var l;let{scope:e,sampleSize:r}=t||{},i=new Date,a=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>i));if(!a)return!1;let s=e!=null?e:S.Scope.Visitor,o=await((l=this.getScopeStrategy(s))==null?void 0:l.get());return a.strategy.isInPersonalizationControlGroup(o,r)}getTestValue(t){var r,i,a,s,o,c;let e=(i=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:i.find(l=>l.name===t);return(e==null?void 0:e.winning_variation_id)?Promise.resolve(e.winning_variation_id):((s=(a=this._serverState)==null?void 0:a.tests)==null?void 0:s[t])?Promise.resolve((c=(o=this._serverState)==null?void 0:o.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var i,a;let r=(a=(i=this._intentManifest)==null?void 0:i.site.tests)==null?void 0:a.find(s=>s.name===t);return(r==null?void 0:r.winning_variation_id)?Promise.resolve():this._storage.tests.setTestSelection(t,e)}isTestEnabled(t){var r,i;return!!((i=(r=this._intentManifest)==null?void 0:r.site.tests)==null?void 0:i.find(a=>a.name===t))}async identify(t){var a;let e=(a=this._storage)==null?void 0:a.scopes.identify;if(!e){this.log({region:"identify",level:"warn",message:"Visitor was identified, but storage did not implement identification"});return}let r=await this._storage.scopes.getScoring(S.Scope.Visitor),i=await e(t);i&&(await this.writeScoring(S.Scope.Visitor,i,r),await this.broadcastScoring())}async forgetMe(t){await Promise.all([this._storage.scopes.delete(t),this._storage.tests.delete()]),this.log({level:"info",region:"forgetMe",message:`Visitor has been forgotten (allDevices: ${t})`}),await this.broadcastScoring()}log(t){var e;(e=this._plugins)==null||e.log(r=>r(t))}async reevaluateSignal({intent:t,scopes:e,signal:r,requestContext:i,behaviorQueue:a}){var I,y,C;let s="reevaluateSignal",o=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,o)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:s});return}let l=this._signalEvaluators[r.type];if(!l){this.log({level:"warn",message:`Signal ${r.type} not handled by any plugin. It will be ignored.`,region:s});return}!r.str&&r.str!==S.IntentTagStrength.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${S.IntentTagStrength.Normal}`,region:s}),r.str=S.IntentTagStrength.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),d={intent:t,signal:r,scope:u,statsScope:o},f={signal:r,intent:t,behaviors:a,state:g,requestContext:i||de(),events:this._events,log:this.log.bind(this)},{requestContext:m,log:h,...b}=f,L=l(f),v=await Promise.resolve(L);if(this.log({level:"verbose",message:`${r.type} Signal evaluation result: ${(v==null?void 0:v.strength)?v.strength:"no match"}`,region:s,signal:r,intent:t,result:v}),d.result=v,typeof v=="undefined")return d;if(r.id){let T=await this.resolveFrequencyScope(r,e);return T&&(d.statistics={...(I=T.statistics)==null?void 0:I[r.id],evaluations:(((C=(y=T.statistics)==null?void 0:y[r.id])==null?void 0:C.evaluations)||0)+1}),u&&r.id&&v.state&&(u.state.signals=u.state.signals||{},u.state.signals[r.id]=v.state),d}}async resolveFrequencyScope(t,e){let r=t.freq===S.SignalFrequency.OncePerVisit?S.Scope.Visit:S.Scope.Visitor;return this.resolveScope(r,e)}determineIfSignalShouldEvaluate(t,e){var r,i;return t.id?!t.freq||t.freq===S.SignalFrequency.Always||t.type===S.SignalType.PageViewCount?!0:!((i=(r=e==null?void 0:e.statistics)==null?void 0:r[t.id])==null?void 0:i.evaluations):(this.log({level:"info",region:"determineIfSignalShouldEvaluate",message:"Signal ID is not populated"}),!1)}combineScoring(t){let e=Object.keys(t).map(r=>t[r]).filter(r=>r&&r.values).map(r=>r.values);return N(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:i,scope:a,result:s,intent:o}=r,{id:c}=o;if(a&&s&&(s.strength||s.strength===S.IntentTagStrength.Antimatter)){let{score:l,matches:u}=e[a.type]=e[a.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(s.strength),u.push({intentId:c,signalStrength:s.strength,signalType:i.type})}}),this.log({level:"verbose",message:"Signal evaluation matches",region:"processSignalEvaluations",summary:e}),e}async reevaluateIntent({intent:t,scopes:e,requestContext:r,behaviorQueue:i}){let a="Reevaluate Intent",s=[],{id:o,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${o} does not define any signals.`,region:a}):await Promise.all(t.signals.map(async l=>{let u=await this.reevaluateSignal({intent:t,scopes:e,signal:l,requestContext:r,behaviorQueue:i});(u==null?void 0:u.result)&&s.push(u)})),s}clearBehaviorQueue(){let t=this._behaviorQueue.length,e=Object.keys(this._behaviorKeys).length;if(t||e){let r=this._behaviorQueue.splice(0,t),i=this._behaviorKeys;this._behaviorKeys={},this.log({level:"verbose",message:"Queue cleared",region:"clearBehaviorQueue",count:t+e,cleared:r,clearedKeys:i})}}clearEventQueue(){if(this._events.length){let t=this._events.splice(0,this._events.length);this.log({level:"verbose",message:"Clearing event queue",region:"clearEventQueue",count:t.length,cleared:t})}}async applySignalEvaluationSummary(t){let e="applySignalEvaluationSummary",r=this.getScopeNames(),i={};await Promise.all(r.map(async s=>{let{score:o,matches:c}=t[s]||{matches:[],score:{}},l=await this.readScoring(s);i[s]=await this.applyScoringStrategy(s,l,o,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...i});let a=this.combineScoring(i);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...a}),a}getServerState(){if(this._serverState)return this._serverState;if(typeof document=="undefined")return;let t=document.getElementById("__UNIFORM_DATA__");return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}resolveSignalStorage(t,e){var a,s;let r="resolveSignalStorage",i=e.id?(a=t==null?void 0:t.state.signals)==null?void 0:a[e.id]:{};return e.id&&!((s=t==null?void 0:t.state.signals)==null?void 0:s[e.id])?this.log({level:"verbose",message:`Signal "${e.id}" is using default state`,region:r}):this.log({level:"verbose",message:`Signal "${e.id}" is using stored state`,region:r,...i}),i}async loadPlugins(){if(!this._plugins)return;let t=this._plugins.findPlugins("initialize");await Promise.all(t.map(e=>e.initialize({setIntentStrength:this.setIntentStrength.bind(this),log:this.log.bind(this),manifest:this._intentManifest})))}loadSignalEvaluators(){var e;return(((e=this._plugins)==null?void 0:e.find("signalEvaluatorMapping"))||[]).reduce((r,i)=>{let a=i();return Object.keys(a).forEach(s=>{r[s]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${s}`}),r[s]=a[s]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:i}=r;return{...r,signals:i.map(a=>{let{id:s}=a;return{...a,id:s!=null?s:`${r.id}:${JSON.stringify(a)}`}})}});this._intentMappings.push(...e)}async readScoring(t){let e=await this._storage.scopes.getScoring(t);if(e&&this._decayStrategy){let r={...e},i=await this._decayStrategy(e);typeof i!="undefined"&&(e=i),i&&this.log({level:"verbose",message:"Score decay has been applied",region:"readScoring",pre:r,post:e})}return e}getScopeStrategy(t){if(this._scopeStrategies)return this._scopeStrategies[t]}getAllScopeStrategies(){return this._scopeStrategies?Object.keys(this._scopeStrategies).map(t=>this._scopeStrategies[t]):[]}getScopeNames(t){return this._scopeStrategies?t&&this._scopeStrategies[t]?[t]:Object.keys(this._scopeStrategies):[]}async resolveScope(t,e){var s;let r="Resolve Scope",i=t||S.Scope.Visitor,a=e&&t?e[t]:await((s=this.getScopeStrategy(i))==null?void 0:s.get());return a||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(a==null?void 0:a.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${a==null?void 0:a.type}" was resolved`,region:r}),a}async initializeScopes(){let t=this.getAllScopeStrategies();await Promise.all(t.map(e=>e.initialize({log:this.log.bind(this),storage:this._storage.scopes})))}applyScoringStrategy(t,e,r,i){let a=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:i});return this.writeScoring(t,a,e)}async writeScoring(t,e,r){var o,c;let i="writeScoring",a;if(r&&(a=w(e.values,r.values),Object.keys(a).length===0))return this.log({level:"verbose",region:i,message:`Scoring update skipped for scope ${t}; values unchanged`}),e;this.log({level:"verbose",message:`${t} scoring has been updated`,region:i,...Q(e.values)?{cleared:!0}:e.values});let s=(c=(o=this._scopeStrategies)==null?void 0:o[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,s,r,a),e}async broadcastScoring(t){var r;let e=t||await this.getIntentStrength();if(!Q(e)&&this._lastBroadcastScoring&&A(this._lastBroadcastScoring,e)){this.log({level:"verbose",region:"broadcastScoring",message:"Skipped broadcasting unchanged scoring",value:e});return}this._lastBroadcastScoring=e,(r=this._plugins)==null||r.scoringChange(i=>i(e||null)),this._listeners.forEach(i=>i(e||null))}isKnownEnrichment(t){var r,i;return!!((i=(r=this._intentManifest)==null?void 0:r.site.enrichments)==null?void 0:i.find(a=>a.name===t))}};var K=require("@uniformdev/optimize-tracker-common"),Se=require("@uniformdev/optimize-common");function te(n){return Math.sqrt(Object.keys(n).reduce((t,e)=>{var r;return t+=Math.pow(Number((r=n[e].str)!=null?r:0),2)},0))}function me(n){let t=n.reduce((r,i)=>{var a;return Math.max(r,(a=i.relevancy)!=null?a:0)},0);if(t===0)return;let e=1/t;n.forEach(r=>{typeof r.relevancy!="undefined"&&(r.relevancy=r.relevancy*e)})}var Fe=({intentTag:n,intentScores:t})=>{if(!t||!n)return{isDefault:!0,score:0,tagStrength:0};let e=(0,Se.getPersonalizationIntents)(n);if(!e||Object.keys(e).length===0)return{isDefault:!0,score:0,tagStrength:0};let r={},i={};return Object.keys(n.intents).forEach(a=>{t[a]&&(r[a]=t[a],i[a]=n.intents[a])}),{score:te(r),isDefault:!1,tagStrength:te(i),matches:Object.keys(r)}},je=(n,t)=>{var i,a,s,o,c,l;let e=Object.keys((s=(a=(i=n.item)==null?void 0:i.intentTag)==null?void 0:a.intents)!=null?s:{}).some(u=>{var g,d,f;return((g=n.matches)==null?void 0:g.includes(u))&&((f=(d=n.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)}),r=Object.keys((l=(c=(o=t.item)==null?void 0:o.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,d,f;return((g=t.matches)==null?void 0:g.includes(u))&&((f=(d=t.item)==null?void 0:d.intentTag)==null?void 0:f.intents[u].override)});return e&&!r?-1:!e&&r?1:0},Be=(n,t)=>{var s,o;let e=t.relevancy-n.relevancy;if(e!==0)return e;let r=t.tagStrength-n.tagStrength;if(r!==0)return r;let i=Number(t.isDefault)-Number(n.isDefault);return i!==0?i:(((s=t.matches)==null?void 0:s.length)||0)-(((o=n.matches)==null?void 0:o.length)||0)},ve=({list:n,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:i,isInPersonalizationControlGroup:a,count:s,matchFilter:o="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:Fe,u=[],g={};n.forEach(f=>{var I;if((I=f.intentTag)==null?void 0:I.intents){let y=!0,C=f.intentTag.intents;if(Object.keys(C).forEach(T=>{var se,oe,ce,le;let W=C[T];if(W.threshold){let Ve=(oe=(se=t[T])==null?void 0:se.str)!=null?oe:0;W.threshold>Ve&&(y=!1)}let ae=g[T]=(ce=g[T])!=null?ce:{count:0,max:0};ae.count++,y&&(ae.max=Math.max((le=W.threshold)!=null?le:0,0))}),!y)return}let{score:m,tagStrength:h,isDefault:b,matches:L}=l({intentTag:f.intentTag,intentScores:t});m>0&&(c=!0);let v={item:f,matches:L,relevancy:m,tagStrength:h,isDefault:b};(o===K.MatchFilter.PersonalizedOnly||o==="personalizedOnly")&&v.isDefault||(o===K.MatchFilter.PersonalizedOnly||o==="personalizedOnly"||o===K.MatchFilter.PersonalizedOrDefault||o==="personalizedOrDefault")&&v.relevancy===0&&!v.isDefault||u.push(v)}),me(u),u=u.filter(f=>{var h;let m=(h=f.item.intentTag)==null?void 0:h.intents;return m?Object.keys(m).every(b=>{var y;let L=m[b],v=g[b];return v.count===1||v.max===0?!0:((y=L.threshold)!=null?y:0)===v.max}):!0}),c&&!a?u.sort((f,m)=>{let h=je(f,m);if(h!==0)return h;let b=Be(f,m);return b===0&&r?r(f.item,m.item):b}):u.sort((f,m)=>f.isDefault===m.isDefault?r?r(f.item,m.item):0:Number(m.isDefault)>Number(f.isDefault)?1:-1);let d=u;if(typeof s=="number"&&s>0&&(d=d.slice(0,s)),i){let f=new Set(d.flatMap(m=>{var h;return(h=m.matches)!=null?h:[]}));i==null||i.personalization({matches:Array.from(f),isInPersonalizationControlGroup:a!=null?a:!1,intentScores:t})}return{result:d,personalized:!a&&c,intentScores:t}};var Ue=(n="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!ge(n,t))return;let a="",s=console.log;t==="error"?(s=console.error,a=""):t==="warn"?(s=console.warn,a=""):t==="verbose"&&(a="font-size: 0.8em;");let o=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(o=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?s(o,a,l):s(o,a)}else s(o,a)}});var re=n=>Object.keys(n).reduce((t,e)=>(t[e]={str:n[e].str},t),{});var $=require("@uniformdev/optimize-common"),he=({signal:n,behaviors:t,intent:e,log:r})=>{let i="behaviorSignalEvaluator";if(!(0,$.isBehaviorSignal)(n)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:i});return}let{id:a}=e,s=n.str,o=0;if(t.forEach((c,l)=>{var g;let u=(g=c[a])==null?void 0:g.str;if(u&&s){let d=(Number(u)+Number(s))/2,f=d/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${f} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:i,baseFromSignal:s,baseFromTag:u,baseTotal:d,behQueueCount:t.length,final:f}),o+=f}}),o===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${a}'`,region:i,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:i,resultStrength:o})),{strength:o}},qe=()=>({name:`${$.SignalType.Behavior}-signal`,signalEvaluatorMapping:()=>({[$.SignalType.Behavior]:he})});var E=require("@uniformdev/optimize-common"),Qe=(n,t)=>{if(!t||!t.cookies)return;let r=`; ${t.cookies}`.split(`; ${n}=`);if(r.length===2)return r.pop().split(";").shift()},Ke=({signal:n,requestContext:t,log:e})=>{let r="cookieSignalEvaluator";if(!(0,E.isCookieSignal)(n)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let i=Qe(n.parameter,t);if(!i){e==null||e({level:"verbose",message:`Cookie '${n.parameter}' value is not defined`,region:r});return}if(!(0,E.isStringMatch)(i,n.value)){e==null||e({level:"verbose",message:"Cookie value does not match signal",region:r});return}return e==null||e({level:"verbose",message:"Cookie signal is a match",name:n.parameter,strength:n.str,region:r}),{strength:Number(n.str)}},Je=()=>({name:`${E.SignalType.Cookie}-signal`,signalEvaluatorMapping:()=>({[E.SignalType.Cookie]:Ke})});var P=require("@uniformdev/optimize-common"),J=(n,t)=>!t||!t.expr?!0:n?(0,P.isStringMatch)(n,t):!1,ye=({signal:n,events:t,log:e})=>{let r="eventSignalEvaluator";if(!(0,P.isEventSignal)(n)){e==null||e({level:"warn",message:"Signal is not an event signal",region:r});return}if(!t||!t.length){e==null||e({level:"verbose",message:"No events to process",region:r});return}let i=0,a=!1;if(t.forEach(s=>{let o=J(s.label,n.label),c=J(s.category,n.category),l=J(s.value,n.value);o&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:s,signal:n}),i+=Number(n.str),a=!0)}),!a){e==null||e({level:"verbose",message:"No event matches",region:r,signal:n});return}return{strength:i}},He=()=>({name:`${P.SignalType.Event}-signal`,signalEvaluatorMapping:()=>({[P.SignalType.Event]:ye})});var x=require("@uniformdev/optimize-common"),Ge=async({signal:n,requestContext:t,log:e})=>{let r="landingPageSignalEvaluator";if(!(0,x.isLandingPageSignal)(n)){e==null||e({level:"warn",message:"Signal is not an landing page signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:i.toString(),criteria:n.path});let a;return(0,x.isStringMatch)(i.pathname,n.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:i.toString(),criteria:n.path}),a=Number(n.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:i.toString(),criteria:n.path}),{strength:a}},We=()=>({name:`${x.SignalType.LandingPage}-signal`,signalEvaluatorMapping:()=>({[x.SignalType.LandingPage]:Ge})});var F=require("@uniformdev/optimize-common"),Xe=({signal:n,state:t,log:e})=>{var c,l,u,g;let r="pageViewCountSignalEvaluator";if(!(0,F.isPageViewCountSignal)(n)){e==null||e({level:"warn",message:"Signal is not a page view count signal",region:r});return}let i=(c=t==null?void 0:t.pageCount)!=null?c:0;e==null||e({level:"warn",message:"Starting page count",region:r,pageCount:i});let a={state:{pageCount:i+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=a.state)==null?void 0:l.pageCount});let s=(u=n==null?void 0:n.min)!=null?u:0,o=(g=n==null?void 0:n.max)!=null?g:Number.MAX_VALUE;return(o===0||isNaN(o))&&(o=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:s,max:o}),i>=s&&i<=o?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:n.str}),a.strength=Number(n.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:n.str}),a},Ye=()=>({name:`${F.SignalType.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[F.SignalType.PageViewCount]:Xe})});var R=require("@uniformdev/optimize-common"),Ze=({signal:n,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!(0,R.isPageVisitedSignal)(n)){e==null||e({level:"warn",message:"Signal is not a page visited signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url);e==null||e({level:"verbose",message:"Checking URL",region:r,url:i.toString(),criteria:n.path});let a;if((0,R.isStringMatch)(i.pathname,n.path))e==null||e({level:"info",message:"URL is a match",region:r,url:i.toString(),criteria:n.path}),a=Number(n.str);else{e==null||e({level:"info",message:"URL is not a match",region:r,url:i.toString(),criteria:n.path});return}return{strength:a}},et=()=>({name:`${R.SignalType.PageVisited}-signal`,signalEvaluatorMapping:()=>({[R.SignalType.PageVisited]:Ze})});var _=require("@uniformdev/optimize-common"),be=({signal:n,requestContext:t,log:e})=>{let r="queryStringSignalEvaluator";if(!(0,_.isQueryStringSignal)(n)){e==null||e({level:"warn",message:"Signal is not a query string signal",region:r});return}if(!t||!t.url){e==null||e({level:"verbose",message:"Request context not defined",region:r,requestContext:!!t,url:t==null?void 0:t.url});return}let i=new URL(t.url),a=i.searchParams.get(n.parameter);if(!a){e==null||e({level:"verbose",message:`Query string value '${n.parameter}' not defined`,region:r,url:i.toString()});return}if(!(0,_.isStringMatch)(a,n.value)){e==null||e({level:"verbose",message:`Query string value '${n.parameter}' is not a match`,region:r,parameterValue:a,criteria:n.value});return}return e==null||e({level:"verbose",message:`Query string value '${n.parameter}' matches`,region:r,url:i.toString(),parameter:n.parameter}),{strength:Number(n.str)}},tt=()=>({name:`${_.SignalType.QueryString}-signal`,signalEvaluatorMapping:()=>({[_.SignalType.QueryString]:be,UTM:be})});var rt=({active:n,options:t})=>!n||typeof window=="undefined"?Te():ke(t),Te=()=>({personalization:()=>!1,test:()=>!1}),ke=({tracker:n,name:t})=>({personalization:({matches:e,isInPersonalizationControlGroup:r,intentScores:i})=>{if(!n||!n.isInitialized())return!1;let a=e&&e.length?e.join(", "):"Default";return n.trackPersonalization(t,{category:"Uniform Personalization",label:a,value:r?1:0,intentScores:i}),!0},test:({testName:e,testSelection:r})=>{if(!n||!n.isInitialized())return!1;let i=typeof document!="undefined"?document.title:"";return n.trackPersonalization(`${e} | ${i}`,{category:"Uniform AB Testing",label:r||"No Variant"}),!0}});var we=class{constructor(t){this._pluginMap=this.mapPlugins(t)}log(t){this.find("onLogMessage").forEach(r=>t(r))}track(t){this.find("track").forEach(r=>t(r))}async initialize(t){let r=this.find("initialize").map(i=>t(i));await Promise.all(r)}scoringChange(t){this.find("onScoringChange").forEach(r=>t(r))}mapPlugins(t){let e={};return t.forEach(r=>{Object.keys(r).forEach(i=>{e[i]=e[i]||[],e[i].push({plugin:r,function:r[i]})})}),e}findPlugins(t){return(this._pluginMap[t]||[]).map(r=>r.plugin)}find(t){return(this._pluginMap[t]||[]).map(r=>r.function)}};var Pe=require("uuid"),Ee="scopeStrategy",j=n=>{let t=()=>({id:(0,Pe.v4)(),created:new Date().valueOf(),state:{},type:n.type,random:Math.random()}),e=s=>{if(typeof n.expirationMinutes=="undefined")return!1;let o=n.expirationMinutes*60*1e3,c=new Date().valueOf(),l=s.updated||s.created;return c-l>=o},{type:r}=n,i,a=()=>{};return{type:r,initialize:async({log:s,storage:o})=>{a=s,i=o},get:async()=>{if(!i)throw new Error("call initialize first");let s=await i.getScope(r);if(s&&e(s)&&(a({level:"info",region:Ee,message:`Scope ${r} is expired, data cleared.`}),s=void 0),!s){a({level:"verbose",region:Ee,message:`Creating scope ${r}`});let c=((n==null?void 0:n.createScope)||t)();return await i.setScope(c),c}return s},save:async s=>{if(!i)throw new Error("call initialize first");await i.setScope(s)},getExpiration:()=>n.expirationMinutes}};var xe=require("@uniformdev/optimize-common");var nt=n=>j({type:xe.Scope.Visit,expirationMinutes:(n==null?void 0:n.expirationMinutes)||20});var Re=require("@uniformdev/optimize-common");var it=()=>j({type:Re.Scope.Visitor});var at=n=>{let t={},e={};return{id:"In-memory Scope Storage",delete:()=>(Object.keys(t).forEach(r=>{delete t[r]}),Object.keys(e).forEach(r=>{delete e[r]}),Promise.resolve()),getScope:r=>Promise.resolve(t[r]),setScope:r=>(t[r.type]=r,Promise.resolve()),getScoring:r=>(n==null?void 0:n.scoringStorage)?n.scoringStorage.getScoring(r):Promise.resolve(e[r]),setScoring:(r,i)=>((n==null?void 0:n.scoringStorage)&&n.scoringStorage.setScoring(r,i),e[i]=r,Promise.resolve())}};var st=()=>{let n={};return{id:"In-memory Test Storage",getTestSelection:t=>{let e=n[t];return Promise.resolve(e)},setTestSelection:(t,e)=>(typeof e=="undefined"?delete n[t]:n[t]=e,Promise.resolve()),delete:()=>(Object.keys(n).forEach(t=>{delete n[t]}),Promise.resolve())}};var V=async(n,t)=>{for(let e of n)try{let r=await t(e);if(r)return r}catch(r){console.error(r)}},k=async(n,t)=>{for(let e=0;e<n.length;e++){let r=n[e];try{e===0?await t(r):t(r).catch(i=>{console.error(i)})}catch(i){console.error(i)}}},M=async(n,t)=>{await Promise.all(n.map(e=>t(e)))};var ot=({tiers:n})=>{let t=n,e=[],r;function i(a){return async(s,o)=>{let c=re(o.values),l=o.updated;e.forEach(g=>{g.time<=o.updated||(g.time>l&&(l=g.time),c=N(c,g.diff))});let u={...o,updated:l,values:c};await Promise.all(a.map(g=>g.storage.setScoring(u,s))),await(r==null?void 0:r(s,u))}}return t.forEach((a,s)=>{var l,u;let o=n.slice(0,s),c=i(o);a.__callback=c,(u=(l=a.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${n.map(a=>{var s,o;return(o=(s=a.storage)==null?void 0:s.id)!=null?o:"unknown"}).join(", ")})`,delete:async()=>{e=[],await M(n,a=>a.storage.delete())},getScope:async(...a)=>await V(n,s=>s.storage.getScope(...a)),setScope:async(...a)=>{await k(n,s=>s.storage.setScope(...a))},getScoring:async(...a)=>{let s;for(let o=0;o<n.length;o++){let c=t[o];if(s&&!c.loading)return s;if(!s||c.loading==="await"){let u=await c.storage.getScoring(...a);u&&(s=u);continue}let l=s;c.storage.getScoring(a[0]).then(u=>{if(u&&!A(l.values,u.values))return c.__callback(a[0],u)})}return s},setScoring:async(a,s,o,c,l)=>{var d;let u=w(a==null?void 0:a.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(d=a==null?void 0:a.updated)!=null?d:new Date().getTime(),diff:u}),await k(n,f=>f.storage.setScoring(a,s,o,c,l))},identify:async a=>{var c;let s=n.filter(l=>l.storage.identify);return s.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(s.map(l=>l.storage.identify(a)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:a=>r=a}};var B=require("@uniformdev/optimize-common"),ct=({getCookie:n,setCookie:t})=>{let e=s=>JSON.parse(s),r=s=>JSON.stringify(s),i=s=>`uniform_trk_${s.toLocaleLowerCase()}_score`,a={[B.Scope.Visit]:i(B.Scope.Visit),[B.Scope.Visitor]:i(B.Scope.Visitor)};return{getScoring:s=>{let o,c=a[s];if(!c)throw new Error(`Unsupported cookie scope ${s}`);let l=n(c);return l&&(o=e(l)),Promise.resolve(o)},setScoring:(s,o,c)=>{let l=s?r(s):"",u=c?c*60:30*24*60*60,g=a[o];if(!g)throw new Error(`Unsupported cookie scope ${o}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(a).forEach(s=>{t(a[s],"",-1)}),Promise.resolve())}};var H="uniform_trk_tests",ne=30*24*60*60,lt=({getCookie:n,setCookie:t})=>{let e=i=>i?JSON.parse(i):void 0,r=()=>{let i,a=n(H);return a&&(i=e(a)),i};return{id:"Cookie Test Storage",getTestSelection:i=>{let a=r(),s=a==null?void 0:a[i];return Promise.resolve(s)},setTestSelection:(i,a)=>{let o={...r(),[i]:a},c=JSON.stringify(o);return t(H,c,ne),Promise.resolve()},delete:()=>(t(H,"",ne),Promise.resolve())}};var ut=({storage:n})=>{let t;function e(r){return async(i,a,...s)=>{await Promise.all(r.map(o=>o.setScoring(a,i))),await(t==null?void 0:t(i,a,...s))}}return n.forEach((r,i)=>{var o;let a=n.slice(0,i),s=e(a);(o=r.setScoringValueExternallyUpdatedCallback)==null||o.call(r,s)}),{id:`Composite (${n.map(r=>{var i;return(i=r==null?void 0:r.id)!=null?i:"unknown"}).join(", ")})`,delete:async()=>{await M(n,r=>r.delete())},getScope:async(...r)=>await V(n,i=>i.getScope(...r)),setScope:async(...r)=>{await k(n,i=>i.setScope(...r))},getScoring:async(...r)=>await V(n,i=>i.getScoring(...r)),setScoring:async(...r)=>{await k(n,i=>i.setScoring(...r))},identify:async r=>{var s;let i=n.filter(o=>o.identify);return i.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(s=(await Promise.all(i.map(o=>o.identify(r)))).filter(o=>o))==null?void 0:s[0]},setScoringValueExternallyUpdatedCallback:r=>t=r}};var gt=({storage:n})=>({id:`Composite (${n.map(t=>t.id).join(", ")})`,getTestSelection:async(...t)=>await V(n,e=>e.getTestSelection(...t)),setTestSelection:async(...t)=>{await k(n,e=>e.setTestSelection(...t))},delete:async()=>{await M(n,t=>t.delete())}});var dt=n=>{let t=(n==null?void 0:n.sampleSize)||0;return{isInPersonalizationControlGroup:(e,r)=>e?(typeof r!="undefined"?r:t)>e.random:!1}};var ie=require("@uniformdev/optimize-common"),O=require("@uniformdev/optimize-tracker-common"),G=typeof top!="undefined",ft=n=>{let t,{disableEventListeners:e}=n||{};return e||G&&window.addEventListener("message",async r=>{if(!!r.data&&(0,O.isExtensionSetScoreMessage)(r.data)){let i=r.data.score;i&&(console.warn("[Uniform] browser extension has set intent scores. Note that this sets all scores to the visit scope and clears any existing visitor values.",i),await(t==null?void 0:t.setIntentStrength(ie.Scope.Visitor,{})),await(t==null?void 0:t.setIntentStrength(ie.Scope.Visit,i)))}}),{name:"browser-extension",initialize:r=>{t=r,G&&(top==null||top.postMessage({type:O.ExtensionEvents.Hello,manifest:r.manifest},window.location.origin))},onLogMessage:r=>{G&&(top==null||top.postMessage({type:O.ExtensionEvents.Log,message:r},window.location.origin))},onScoringChange:r=>{!r||G&&(top==null||top.postMessage({type:O.ExtensionEvents.Score,score:r},window.location.origin))}}};var _e=n=>{let{values:t,total:e,missingDistribution:r}=n.reduce((i,a)=>(a.distribution?i.total+=a.distribution:++i.missingDistribution,i.values.push(a.distribution),i),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let a=(100-e)/r;t.forEach((s,o)=>{typeof s=="undefined"&&(t[o]=a)})}return t},pt=({testName:n,variations:t,random:e,selectedVariantId:r,analyticsEmitter:i})=>{if(e>100||e<0)throw"Random must be between 0 and 100";let a;if(r&&(a=t.find(o=>o.id===r),a||console.warn("Previously selected variant is no longer present.")),!a){let o=_e(t),c=0;a=t.find((l,u)=>{let g=o[u];if(e>c&&e<=c+g)return l;c+=g})}let s=!1;return i==null||i.test({testName:n,testSelection:a==null?void 0:a.id}),{result:a,tracked:s}},mt=()=>Math.floor(Math.random()*100);module.exports=ze(St);0&&(module.exports={AnalyticsEmitter,NoopAnalyticsEmitter,OptimizePluginLoader,OptimizeTracker,TestCookieName,TestExpiration,addBehaviorSignalPlugin,addBrowserExtension,addConsoleLoggerPlugin,addCookieSignalPlugin,addEventSignalPlugin,addLandingPageSignalPlugin,addPageViewCountSignalPlugin,addPageVisitedSignalPlugin,addQueryStringSignalPlugin,behaviorSignalEvaluator,calculateEnrichmentIntentName,cloneScore,combineScores,compositeScopeStorage,compositeTestStorage,cookieScoringStorage,cookieTestStorage,createPercentageTestStrategy,createVisitScopeStrategy,createVisitorScopeStrategy,cumulativeScoringStrategy,decayByDayStrategy,diffScores,doesValueMatchEventProperty,eventSignalEvaluator,generateRandom,getEnrichmentValue,inMemoryScopeStorage,inMemoryTestStorage,normalizeVariationDistributions,parseEnrichment,personalizeList,resolveAnalyticsEmitter,scopeStrategy,scoreIsEmpty,scoresAreEqual,testList,tieredScopeStorage}); |
{ | ||
"name": "@uniformdev/optimize-tracker", | ||
"version": "12.2.1-alpha.143+b54f3127", | ||
"version": "12.2.1-alpha.170+899ea147", | ||
"description": "Uniform Optimize tracker", | ||
@@ -28,4 +28,4 @@ "license": "SEE LICENSE IN LICENSE.txt", | ||
"dependencies": { | ||
"@uniformdev/optimize-common": "^12.2.1-alpha.143+b54f3127", | ||
"@uniformdev/optimize-tracker-common": "^12.2.1-alpha.143+b54f3127", | ||
"@uniformdev/optimize-common": "^12.2.1-alpha.170+899ea147", | ||
"@uniformdev/optimize-tracker-common": "^12.2.1-alpha.170+899ea147", | ||
"uuid": ">=7.0.0" | ||
@@ -35,12 +35,12 @@ }, | ||
"@types/jest": "27.4.0", | ||
"@types/node": "16.11.21", | ||
"@types/node": "16.11.24", | ||
"@types/uuid": "8.3.4", | ||
"eslint": "8.7.0", | ||
"eslint": "8.8.0", | ||
"eslint-plugin-react": "7.28.0", | ||
"eslint-plugin-react-hooks": "4.3.0", | ||
"jest": "27.4.7", | ||
"jest": "27.5.1", | ||
"npm-run-all": "4.1.5", | ||
"rimraf": "3.0.2", | ||
"ts-jest": "27.1.3", | ||
"tsup": "5.11.11" | ||
"tsup": "5.11.13" | ||
}, | ||
@@ -53,3 +53,3 @@ "files": [ | ||
}, | ||
"gitHead": "b54f3127570a6a8232fda786952b3abfc0963a49" | ||
"gitHead": "899ea147cdea482a014e02911fc9554c81dd2cbc" | ||
} |
Sorry, the diff of this file is not supported yet
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
125467