New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@uniformdev/optimize-tracker

Package Overview
Dependencies
Maintainers
9
Versions
170
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@uniformdev/optimize-tracker - npm Package Compare versions

Comparing version 12.2.1-alpha.59 to 12.2.1-alpha.107

2

dist/index.esm.js

@@ -1,1 +0,1 @@

import{IntentTagStrength as V,Scope as b,SignalFrequency as re,SignalType as Te}from"@uniformdev/optimize-common";var ve={maxDecay:.95,daysInMonth:30},he=(i,t)=>Math.round((i-t)/(1e3*60*60*24)),ye=(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},W=i=>{let t={...ve,...i};return r=>{if(!(r==null?void 0:r.updated)||!r.values)return Promise.resolve(void 0);let{updated:n,values:o}=r,a=t.today||new Date().valueOf(),s=he(a,n!=null?n:0),c=ye(s,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(o).forEach(u=>{var d,f;let g=o[u];typeof g=="number"&&(g=o[u]={str:g});let m=Number((f=(d=o[u])==null?void 0:d.str)!=null?f:0);c&&(l.values[u].str=m*c)}),Promise.resolve(l))}};import{IntentTagStrength as be}from"@uniformdev/optimize-common";var X=()=>{let i="cumulative";return({previousValue:e,valueToAdd:r})=>{let n={...e};return Object.keys(r).forEach(a=>{var c,l,u;let s=(c=r[a])==null?void 0:c.str;if(s===be.Antimatter)delete n[a];else{let g=Number((u=(l=n[a])==null?void 0:l.str)!=null?u:0),m=Number(s!=null?s:0),d=g+m;d>0?n[a]={str:d}:delete n[a]}}),{values:n,strategy:i,updated:new Date().valueOf()}}};var z={error:3,warn:2,info:1,verbose:0},Y=(i,t)=>!(!i||i==="none"||z[i]!==void 0&&z[t]!==void 0&&z[t]<z[i]),_=">",A=(i,t)=>{if(i.includes(_)||t.includes(_))throw`"${_}" is a reserved enrichment character`;return`${i}${_}${t}`},Z=i=>{let t=i.split(_);if(t.length===2)return{type:t[0],value:t[1]}},I=(i,t)=>{let e=Z(t);if(!!e&&e.type===i)return e.value},ee=()=>{if(!(typeof window=="undefined"||typeof document=="undefined"))return{cookies:document.cookie,url:window.location.href,userAgent:navigator.userAgent}};var M=(...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 te=(i,t)=>{let e=i!=null?i:{str:0},r=t!=null?t:{str:0};return{str:Number(e.str)-Number(r.str)}},E=(i,t)=>{let e={};return i||(i={}),t||(t={}),Object.keys(i).forEach(r=>{e[r]=te(i[r],t[r])}),Object.keys(t).forEach(r=>{e[r]||(e[r]=te(i[r],t[r]))}),Object.keys(e).forEach(r=>{e[r].str===0&&delete e[r]}),e};var O=(i,t)=>{let e=E(i,t);return!(Object.keys(e).length>0)};var $=i=>!i||Object.keys(i).length===0;var ke=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:X(),this._decayStrategy=(r=t.decay)!=null?r:W(),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 o=>{let a=await this.readScoring(o);r[o]=a})),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,o=!1;return await Promise.all(r.map(async a=>{let s=await this._storage.scopes.getScoring(a);if(s){let c={},l=!1;Object.keys(s.values).map(u=>{t&&(n==null?void 0:n.indexOf(u))===-1?c[u]=s.values[u]:(l=!0,o=!0)}),l&&(await this.writeScoring(a,{...s,values:c},s),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),o}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(m=>{m&&(r[m==null?void 0:m.type]=m)})));let n=Object.keys(this._behaviorKeys),o=n.length===0?this._behaviorQueue:[...this._behaviorQueue,...n.map(g=>this._behaviorKeys[g])],s=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:o})))).flatMap(g=>g),c=s.reduce((g,m)=>{var S;if(!m.statsScope||!m.statistics||!m.signal)return g;let d=m.statsScope.type,f=g[d]=(S=g[d])!=null?S:{};return f[m.signal.id]=m.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var m;return(m=this.getScopeStrategy(g))==null?void 0:m.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(s),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,m)=>(g[m]=l[m].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((a,s)=>{let c=I(t,s);return c&&n[s].str&&(a[c]=Number(n[s].str||0)),a},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||b.Visitor,n=Array.isArray(t)?t:[t],o={},a={};for(let l of n)if(this.isKnownEnrichment(l.name)){let g=A(l.name,l.value);(e==null?void 0:e.clearValues)&&(a[l.name]=!0);let m=Number(((c=o[g])==null?void 0:c.str)||0);o[g]={str:m+(l.str||V.Normal)}}for(let l of Object.keys(a))await this.removeEnrichment(l,{scope:r,quiet:!0});let s=await this.readScoring(r);await this.applyScoringStrategy(r,s,o,n.length),(e==null?void 0:e.quiet)||await this.reevaluateSignals()}async removeEnrichment(t,e){let r=(e==null?void 0:e.scope)||b.Visitor,n=await this.getIntentStrength(r)||{},o=Object.keys(n||{}).filter(a=>{if(I(t,a))return a},{});await this.removeIntent(o,{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,o=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>n));if(!o)return!1;let a=e!=null?e:b.Visitor,s=await((l=this.getScopeStrategy(a))==null?void 0:l.get());return o.strategy.isInPersonalizationControlGroup(s,r)}getTestValue(t){var r,n,o,a,s,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):((a=(o=this._serverState)==null?void 0:o.tests)==null?void 0:a[t])?Promise.resolve((c=(s=this._serverState)==null?void 0:s.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var n,o;let r=(o=(n=this._intentManifest)==null?void 0:n.site.tests)==null?void 0:o.find(a=>a.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(o=>o.name===t))}async identify(t){var o;let e=(o=this._storage)==null?void 0:o.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(b.Visitor),n=await e(t);n&&(await this.writeScoring(b.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:o}){var w,v,R;let a="reevaluateSignal",s=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,s)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:a});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:a});return}!r.str&&r.str!==V.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${V.Normal}`,region:a}),r.str=V.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),m={intent:t,signal:r,scope:u,statsScope:s},d={signal:r,intent:t,behaviors:o,state:g,requestContext:n||ee(),events:this._events,log:this.log.bind(this)},{requestContext:f,log:S,...h}=d,x=l(d),p=await Promise.resolve(x);if(this.log({level:"verbose",message:`${r.type} Signal evaluation result: ${(p==null?void 0:p.strength)?p.strength:"no match"}`,region:a,signal:r,intent:t,result:p}),m.result=p,typeof p=="undefined")return m;if(r.id){let y=await this.resolveFrequencyScope(r,e);return y&&(m.statistics={...(w=y.statistics)==null?void 0:w[r.id],evaluations:(((R=(v=y.statistics)==null?void 0:v[r.id])==null?void 0:R.evaluations)||0)+1}),u&&r.id&&p.state&&(u.state.signals=u.state.signals||{},u.state.signals[r.id]=p.state),m}}async resolveFrequencyScope(t,e){let r=t.freq===re.OncePerVisit?b.Visit:b.Visitor;return this.resolveScope(r,e)}determineIfSignalShouldEvaluate(t,e){var r,n;return t.id?!t.freq||t.freq===re.Always||t.type===Te.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 M(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:n,scope:o,result:a,intent:s}=r,{id:c}=s;if(o&&a&&(a.strength||a.strength===V.Antimatter)){let{score:l,matches:u}=e[o.type]=e[o.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(a.strength),u.push({intentId:c,signalStrength:a.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 o="Reevaluate Intent",a=[],{id:s,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${s} does not define any signals.`,region:o}):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)&&a.push(u)})),a}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 a=>{let{score:s,matches:c}=t[a]||{matches:[],score:{}},l=await this.readScoring(a);n[a]=await this.applyScoringStrategy(a,l,s,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...n});let o=this.combineScoring(n);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...o}),o}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 o,a;let r="resolveSignalStorage",n=e.id?(o=t==null?void 0:t.state.signals)==null?void 0:o[e.id]:{};return e.id&&!((a=t==null?void 0:t.state.signals)==null?void 0:a[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 o=n();return Object.keys(o).forEach(a=>{r[a]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${a}`}),r[a]=o[a]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:n}=r;return{...r,signals:n.map(o=>{let{id:a}=o;return{...o,id:a!=null?a:`${r.id}:${JSON.stringify(o)}`}})}});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 a;let r="Resolve Scope",n=t||b.Visitor,o=e&&t?e[t]:await((a=this.getScopeStrategy(n))==null?void 0:a.get());return o||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(o==null?void 0:o.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${o==null?void 0:o.type}" was resolved`,region:r}),o}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 o=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:n});return this.writeScoring(t,o,e)}async writeScoring(t,e,r){var s,c;let n="writeScoring",o;if(r&&(o=E(e.values,r.values),Object.keys(o).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,...$(e.values)?{cleared:!0}:e.values});let a=(c=(s=this._scopeStrategies)==null?void 0:s[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,a,r,o),e}async broadcastScoring(t){var r;let e=t||await this.getIntentStrength();if(!$(e)&&this._lastBroadcastScoring&&O(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(o=>o.name===t))}};import{MatchFilter as j}from"@uniformdev/optimize-tracker-common";import{getPersonalizationIntents as we}from"@uniformdev/optimize-common";function F(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 ne(i){let t=i.reduce((r,n)=>{var o;return Math.max(r,(o=n.relevancy)!=null?o:0)},0);if(t===0)return;let e=1/t;i.forEach(r=>{typeof r.relevancy!="undefined"&&(r.relevancy=r.relevancy*e)})}var Ee=({intentTag:i,intentScores:t})=>{if(!t||!i)return{isDefault:!0,score:0,tagStrength:0};let e=we(i);if(!e||Object.keys(e).length===0)return{isDefault:!0,score:0,tagStrength:0};let r={},n={};return Object.keys(i.intents).forEach(o=>{t[o]&&(r[o]=t[o],n[o]=i.intents[o])}),{score:F(r),isDefault:!1,tagStrength:F(n),matches:Object.keys(r)}},Pe=(i,t)=>{var n,o,a,s,c,l;let e=Object.keys((a=(o=(n=i.item)==null?void 0:n.intentTag)==null?void 0:o.intents)!=null?a:{}).some(u=>{var g,m,d;return((g=i.matches)==null?void 0:g.includes(u))&&((d=(m=i.item)==null?void 0:m.intentTag)==null?void 0:d.intents[u].override)}),r=Object.keys((l=(c=(s=t.item)==null?void 0:s.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,m,d;return((g=t.matches)==null?void 0:g.includes(u))&&((d=(m=t.item)==null?void 0:m.intentTag)==null?void 0:d.intents[u].override)});return e&&!r?-1:!e&&r?1:0},xe=(i,t)=>{var a,s;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:(((a=t.matches)==null?void 0:a.length)||0)-(((s=i.matches)==null?void 0:s.length)||0)},Re=({list:i,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:n,isInPersonalizationControlGroup:o,count:a,matchFilter:s="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:Ee,u=[],g={};i.forEach(d=>{var w;if((w=d.intentTag)==null?void 0:w.intents){let v=!0,R=d.intentTag.intents;if(Object.keys(R).forEach(y=>{var K,J,H,G;let N=R[y];if(N.threshold){let Se=(J=(K=t[y])==null?void 0:K.str)!=null?J:0;N.threshold>Se&&(v=!1)}let Q=g[y]=(H=g[y])!=null?H:{count:0,max:0};Q.count++,v&&(Q.max=Math.max((G=N.threshold)!=null?G:0,0))}),!v)return}let{score:f,tagStrength:S,isDefault:h,matches:x}=l({intentTag:d.intentTag,intentScores:t});f>0&&(c=!0);let p={item:d,matches:x,relevancy:f,tagStrength:S,isDefault:h};(s===j.PersonalizedOnly||s==="personalizedOnly")&&p.isDefault||(s===j.PersonalizedOnly||s==="personalizedOnly"||s===j.PersonalizedOrDefault||s==="personalizedOrDefault")&&p.relevancy===0&&!p.isDefault||u.push(p)}),ne(u),u=u.filter(d=>{var S;let f=(S=d.item.intentTag)==null?void 0:S.intents;return f?Object.keys(f).every(h=>{var v;let x=f[h],p=g[h];return p.count===1||p.max===0?!0:((v=x.threshold)!=null?v:0)===p.max}):!0}),c&&!o?u.sort((d,f)=>{let S=Pe(d,f);if(S!==0)return S;let h=xe(d,f);return h===0&&r?r(d.item,f.item):h}):u.sort((d,f)=>d.isDefault===f.isDefault?r?r(d.item,f.item):0:Number(f.isDefault)>Number(d.isDefault)?1:-1);let m=u;if(typeof a=="number"&&a>0&&(m=m.slice(0,a)),n){let d=new Set(m.flatMap(f=>{var S;return(S=f.matches)!=null?S:[]}));n==null||n.personalization({matches:Array.from(d),isInPersonalizationControlGroup:o!=null?o:!1,intentScores:t})}return{result:m,personalized:!o&&c,intentScores:t}};var $t=(i="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!Y(i,t))return;let o="",a=console.log;t==="error"?(a=console.error,o=""):t==="warn"?(a=console.warn,o=""):t==="verbose"&&(o="font-size: 0.8em;");let s=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(s=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?a(s,o,l):a(s,o)}else a(s,o)}});var ie=i=>Object.keys(i).reduce((t,e)=>(t[e]={str:i[e].str},t),{});import{isBehaviorSignal as _e,SignalType as oe}from"@uniformdev/optimize-common";var Ve=({signal:i,behaviors:t,intent:e,log:r})=>{let n="behaviorSignalEvaluator";if(!_e(i)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:n});return}let{id:o}=e,a=i.str,s=0;if(t.forEach((c,l)=>{var g;let u=(g=c[o])==null?void 0:g.str;if(u&&a){let m=(Number(u)+Number(a))/2,d=m/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${d} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:n,baseFromSignal:a,baseFromTag:u,baseTotal:m,behQueueCount:t.length,final:d}),s+=d}}),s===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${o}'`,region:n,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:n,resultStrength:s})),{strength:s}},qt=()=>({name:`${oe.Behavior}-signal`,signalEvaluatorMapping:()=>({[oe.Behavior]:Ve})});import{isCookieSignal as ze,isStringMatch as Ie,SignalType as ae}from"@uniformdev/optimize-common";var Me=(i,t)=>{if(!t||!t.cookies)return;let r=`; ${t.cookies}`.split(`; ${i}=`);if(r.length===2)return r.pop().split(";").shift()},Oe=({signal:i,requestContext:t,log:e})=>{let r="cookieSignalEvaluator";if(!ze(i)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let n=Me(i.parameter,t);if(!n){e==null||e({level:"verbose",message:`Cookie '${i.parameter}' value is not defined`,region:r});return}if(!Ie(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)}},Kt=()=>({name:`${ae.Cookie}-signal`,signalEvaluatorMapping:()=>({[ae.Cookie]:Oe})});import{isEventSignal as Le,isStringMatch as De,SignalType as se}from"@uniformdev/optimize-common";var B=(i,t)=>!t||!t.expr?!0:i?De(i,t):!1,Ce=({signal:i,events:t,log:e})=>{let r="eventSignalEvaluator";if(!Le(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,o=!1;if(t.forEach(a=>{let s=B(a.label,i.label),c=B(a.category,i.category),l=B(a.value,i.value);s&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:a,signal:i}),n+=Number(i.str),o=!0)}),!o){e==null||e({level:"verbose",message:"No event matches",region:r,signal:i});return}return{strength:n}},Wt=()=>({name:`${se.Event}-signal`,signalEvaluatorMapping:()=>({[se.Event]:Ce})});import{isLandingPageSignal as Ne,isStringMatch as Ae,SignalType as ce}from"@uniformdev/optimize-common";var $e=async({signal:i,requestContext:t,log:e})=>{let r="landingPageSignalEvaluator";if(!Ne(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 o;return Ae(n.pathname,i.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),o=Number(i.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path}),{strength:o}},Zt=()=>({name:`${ce.LandingPage}-signal`,signalEvaluatorMapping:()=>({[ce.LandingPage]:$e})});import{isPageViewCountSignal as Fe,SignalType as le}from"@uniformdev/optimize-common";var je=({signal:i,state:t,log:e})=>{var c,l,u,g;let r="pageViewCountSignalEvaluator";if(!Fe(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 o={state:{pageCount:n+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=o.state)==null?void 0:l.pageCount});let a=(u=i==null?void 0:i.min)!=null?u:0,s=(g=i==null?void 0:i.max)!=null?g:Number.MAX_VALUE;return(s===0||isNaN(s))&&(s=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:a,max:s}),n>=a&&n<=s?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:i.str}),o.strength=Number(i.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:i.str}),o},rr=()=>({name:`${le.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[le.PageViewCount]:je})});import{isPageVisitedSignal as Be,isStringMatch as qe,SignalType as ue}from"@uniformdev/optimize-common";var Ue=({signal:i,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!Be(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 o;if(qe(n.pathname,i.path))e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),o=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:o}},or=()=>({name:`${ue.PageVisited}-signal`,signalEvaluatorMapping:()=>({[ue.PageVisited]:Ue})});import{isQueryStringSignal as Qe,isStringMatch as Ke,SignalType as ge}from"@uniformdev/optimize-common";var me=({signal:i,requestContext:t,log:e})=>{let r="queryStringSignalEvaluator";if(!Qe(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),o=n.searchParams.get(i.parameter);if(!o){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' not defined`,region:r,url:n.toString()});return}if(!Ke(o,i.value)){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' is not a match`,region:r,parameterValue:o,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)}},cr=()=>({name:`${ge.QueryString}-signal`,signalEvaluatorMapping:()=>({[ge.QueryString]:me,UTM:me})});var ur=({active:i,options:t})=>!i||typeof window=="undefined"?Je():He(t),Je=()=>({personalization:()=>!1,test:()=>!1}),He=({tracker:i,name:t})=>({personalization:({matches:e,isInPersonalizationControlGroup:r,intentScores:n})=>{if(!i||!i.isInitialized())return!1;let o=e&&e.length?e.join(", "):"Default";return i.trackPersonalization(t,{category:"Uniform Personalization",label:o,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 Ge=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 We}from"uuid";var de="scopeStrategy",L=i=>{let t=()=>({id:We(),created:new Date().valueOf(),state:{},type:i.type,random:Math.random()}),e=a=>{if(typeof i.expirationMinutes=="undefined")return!1;let s=i.expirationMinutes*60*1e3,c=new Date().valueOf(),l=a.updated||a.created;return c-l>=s},{type:r}=i,n,o=()=>{};return{type:r,initialize:async({log:a,storage:s})=>{o=a,n=s},get:async()=>{if(!n)throw new Error("call initialize first");let a=await n.getScope(r);if(a&&e(a)&&(o({level:"info",region:de,message:`Scope ${r} is expired, data cleared.`}),a=void 0),!a){o({level:"verbose",region:de,message:`Creating scope ${r}`});let c=((i==null?void 0:i.createScope)||t)();return await n.setScope(c),c}return a},save:async a=>{if(!n)throw new Error("call initialize first");await n.setScope(a)},getExpiration:()=>i.expirationMinutes}};import{Scope as Xe}from"@uniformdev/optimize-common";var vr=i=>L({type:Xe.Visit,expirationMinutes:(i==null?void 0:i.expirationMinutes)||20});import{Scope as Ye}from"@uniformdev/optimize-common";var Tr=()=>L({type:Ye.Visitor});var wr=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 Pr=()=>{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 k=async(i,t)=>{for(let e of i)try{let r=await t(e);if(r)return r}catch(r){console.error(r)}},T=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)}}},P=async(i,t)=>{await Promise.all(i.map(e=>t(e)))};var Or=({tiers:i})=>{let t=i,e=[],r;function n(o){return async(a,s)=>{let c=ie(s.values),l=s.updated;e.forEach(g=>{g.time<=s.updated||(g.time>l&&(l=g.time),c=M(c,g.diff))});let u={...s,updated:l,values:c};await Promise.all(o.map(g=>g.storage.setScoring(u,a))),await(r==null?void 0:r(a,u))}}return t.forEach((o,a)=>{var l,u;let s=i.slice(0,a),c=n(s);o.__callback=c,(u=(l=o.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${i.map(o=>{var a,s;return(s=(a=o.storage)==null?void 0:a.id)!=null?s:"unknown"}).join(", ")})`,delete:async()=>{e=[],await P(i,o=>o.storage.delete())},getScope:async(...o)=>await k(i,a=>a.storage.getScope(...o)),setScope:async(...o)=>{await T(i,a=>a.storage.setScope(...o))},getScoring:async(...o)=>{let a;for(let s=0;s<i.length;s++){let c=t[s];if(a&&!c.loading)return a;if(!a||c.loading==="await"){let u=await c.storage.getScoring(...o);u&&(a=u);continue}let l=a;c.storage.getScoring(o[0]).then(u=>{if(u&&!O(l.values,u.values))return c.__callback(o[0],u)})}return a},setScoring:async(o,a,s,c,l)=>{var m;let u=E(o==null?void 0:o.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(m=o==null?void 0:o.updated)!=null?m:new Date().getTime(),diff:u}),await T(i,d=>d.storage.setScoring(o,a,s,c,l))},identify:async o=>{var c;let a=i.filter(l=>l.storage.identify);return a.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(a.map(l=>l.storage.identify(o)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:o=>r=o}};import{Scope as D}from"@uniformdev/optimize-common";var Cr=({getCookie:i,setCookie:t})=>{let e=a=>JSON.parse(a),r=a=>JSON.stringify(a),n=a=>`uniform_trk_${a.toLocaleLowerCase()}_score`,o={[D.Visit]:n(D.Visit),[D.Visitor]:n(D.Visitor)};return{getScoring:a=>{let s,c=o[a];if(!c)throw new Error(`Unsupported cookie scope ${a}`);let l=i(c);return l&&(s=e(l)),Promise.resolve(s)},setScoring:(a,s,c)=>{let l=a?r(a):"",u=c?c*60:30*24*60*60,g=o[s];if(!g)throw new Error(`Unsupported cookie scope ${s}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(o).forEach(a=>{t(o[a],"",-1)}),Promise.resolve())}};var q="uniform_trk_tests",fe=30*24*60*60,Ar=({getCookie:i,setCookie:t})=>{let e=n=>n?JSON.parse(n):void 0,r=()=>{let n,o=i(q);return o&&(n=e(o)),n};return{id:"Cookie Test Storage",getTestSelection:n=>{let o=r(),a=o==null?void 0:o[n];return Promise.resolve(a)},setTestSelection:(n,o)=>{let s={...r(),[n]:o},c=JSON.stringify(s);return t(q,c,fe),Promise.resolve()},delete:()=>(t(q,"",fe),Promise.resolve())}};var jr=({storage:i})=>{let t;function e(r){return async(n,o,...a)=>{await Promise.all(r.map(s=>s.setScoring(o,n))),await(t==null?void 0:t(n,o,...a))}}return i.forEach((r,n)=>{var s;let o=i.slice(0,n),a=e(o);(s=r.setScoringValueExternallyUpdatedCallback)==null||s.call(r,a)}),{id:`Composite (${i.map(r=>{var n;return(n=r==null?void 0:r.id)!=null?n:"unknown"}).join(", ")})`,delete:async()=>{await P(i,r=>r.delete())},getScope:async(...r)=>await k(i,n=>n.getScope(...r)),setScope:async(...r)=>{await T(i,n=>n.setScope(...r))},getScoring:async(...r)=>await k(i,n=>n.getScoring(...r)),setScoring:async(...r)=>{await T(i,n=>n.setScoring(...r))},identify:async r=>{var a;let n=i.filter(s=>s.identify);return n.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(a=(await Promise.all(n.map(s=>s.identify(r)))).filter(s=>s))==null?void 0:a[0]},setScoringValueExternallyUpdatedCallback:r=>t=r}};var Ur=({storage:i})=>({id:`Composite (${i.map(t=>t.id).join(", ")})`,getTestSelection:async(...t)=>await k(i,e=>e.getTestSelection(...t)),setTestSelection:async(...t)=>{await T(i,e=>e.setTestSelection(...t))},delete:async()=>{await P(i,t=>t.delete())}});var Kr=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 pe}from"@uniformdev/optimize-common";import{ExtensionEvents as U,isExtensionSetScoreMessage as Ze}from"@uniformdev/optimize-tracker-common";var C=typeof top!="undefined",rn=i=>{let t,{disableEventListeners:e}=i||{};return e||C&&window.addEventListener("message",async r=>{if(!!r.data&&Ze(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(pe.Visitor,{})),await(t==null?void 0:t.setIntentStrength(pe.Visit,n)))}}),{name:"browser-extension",initialize:r=>{t=r,C&&(top==null||top.postMessage({type:U.Hello,manifest:r.manifest},window.location.origin))},onLogMessage:r=>{C&&(top==null||top.postMessage({type:U.Log,message:r},window.location.origin))},onScoringChange:r=>{!r||C&&(top==null||top.postMessage({type:U.Score,score:r},window.location.origin))}}};var et=i=>{let{values:t,total:e,missingDistribution:r}=i.reduce((n,o)=>(o.distribution?n.total+=o.distribution:++n.missingDistribution,n.values.push(o.distribution),n),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let o=(100-e)/r;t.forEach((a,s)=>{typeof a=="undefined"&&(t[s]=o)})}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 o;if(r&&(o=t.find(s=>s.id===r),o||console.warn("Previously selected variant is no longer present.")),!o){let s=et(t),c=0;o=t.find((l,u)=>{let g=s[u];if(e>c&&e<=c+g)return l;c+=g})}let a=!1;return n==null||n.test({testName:i,testSelection:o==null?void 0:o.id}),{result:o,tracked:a}},an=()=>Math.floor(Math.random()*100);export{He as AnalyticsEmitter,Je as NoopAnalyticsEmitter,Ge as OptimizePluginLoader,ke as OptimizeTracker,q as TestCookieName,fe as TestExpiration,qt as addBehaviorSignalPlugin,rn as addBrowserExtension,$t as addConsoleLoggerPlugin,Kt as addCookieSignalPlugin,Wt as addEventSignalPlugin,Zt as addLandingPageSignalPlugin,rr as addPageViewCountSignalPlugin,or as addPageVisitedSignalPlugin,cr as addQueryStringSignalPlugin,Ve as behaviorSignalEvaluator,A as calculateEnrichmentIntentName,ie as cloneScore,M as combineScores,jr as compositeScopeStorage,Ur as compositeTestStorage,Cr as cookieScoringStorage,Ar as cookieTestStorage,Kr as createPercentageTestStrategy,vr as createVisitScopeStrategy,Tr as createVisitorScopeStrategy,X as cumulativeScoringStrategy,W as decayByDayStrategy,E as diffScores,B as doesValueMatchEventProperty,Ce as eventSignalEvaluator,an as generateRandom,I as getEnrichmentValue,wr as inMemoryScopeStorage,Pr as inMemoryTestStorage,et as normalizeVariationDistributions,Z as parseEnrichment,Re as personalizeList,ur as resolveAnalyticsEmitter,L as scopeStrategy,$ as scoreIsEmpty,O as scoresAreEqual,on as testList,Or as tieredScopeStorage};
import{IntentTagStrength as I,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:o}=r,a=t.today||new Date().valueOf(),s=be(a,n!=null?n:0),c=Te(s,t.daysInMonth,t.maxDecay),l={values:{},updated:0,strategy:"?",...r};return c===1?Promise.resolve(void 0):(Object.keys(o).forEach(u=>{var d,S;let g=o[u];typeof g=="number"&&(g=o[u]={str:g});let m=Number((S=(d=o[u])==null?void 0:d.str)!=null?S:0);c&&(l.values[u].str=m*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(a=>{var c,l,u;let s=(c=r[a])==null?void 0:c.str;if(s===ke.Antimatter)delete n[a];else{let g=Number((u=(l=n[a])==null?void 0:l.str)!=null?u:0),m=Number(s!=null?s:0),d=g+m;d>0?n[a]={str:d}:delete n[a]}}),{values:n,strategy:i,updated:new Date().valueOf()}}};var M={error:3,warn:2,info:1,verbose:0},ee=(i,t)=>!(!i||i==="none"||M[i]!==void 0&&M[t]!==void 0&&M[t]<M[i]),z=">",F=(i,t)=>{if(i.includes(z)||t.includes(z))throw`"${z}" is a reserved enrichment character`;return`${i}${z}${t}`},te=i=>{let t=i.split(z);if(t.length===2)return{type:t[0],value:t[1]}},O=(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 L=(...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 o=>{let a=await this.readScoring(o);r[o]=a})),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,o=!1;return await Promise.all(r.map(async a=>{let s=await this._storage.scopes.getScoring(a);if(s){let c={},l=!1;Object.keys(s.values).map(u=>{t&&(n==null?void 0:n.indexOf(u))===-1?c[u]=s.values[u]:(l=!0,o=!0)}),l&&(await this.writeScoring(a,{...s,values:c},s),(e==null?void 0:e.quiet)||await this.broadcastScoring())}})),o}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(m=>{m&&(r[m==null?void 0:m.type]=m)})));let n=Object.keys(this._behaviorKeys),o=n.length===0?this._behaviorQueue:[...this._behaviorQueue,...n.map(g=>this._behaviorKeys[g])],s=(await Promise.all(this._intentMappings.map(g=>this.reevaluateIntent({intent:g,scopes:r,requestContext:t,behaviorQueue:o})))).flatMap(g=>g),c=s.reduce((g,m)=>{var h;if(!m.statsScope||!m.statistics||!m.signal)return g;let d=m.statsScope.type,S=g[d]=(h=g[d])!=null?h:{};return S[m.signal.id]=m.statistics,g},{});await Promise.all(Object.keys(c).map(g=>{var m;return(m=this.getScopeStrategy(g))==null?void 0:m.save({...r[g],statistics:{...r[g].statistics||{},...c[g]}})}));let l=this.processSignalEvaluations(s),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,m)=>(g[m]=l[m].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((a,s)=>{let c=O(t,s);return c&&n[s].str&&(a[c]=Number(n[s].str||0)),a},{})}async addEnrichment(t,e){var c;let r=(e==null?void 0:e.scope)||k.Visitor,n=Array.isArray(t)?t:[t],o={},a={};for(let l of n)if(this.isKnownEnrichment(l.name)){let g=F(l.name,l.value);(e==null?void 0:e.clearValues)&&(a[l.name]=!0);let m=Number(((c=o[g])==null?void 0:c.str)||0);o[g]={str:m+(l.str||I.Normal)}}for(let l of Object.keys(a))await this.removeEnrichment(l,{scope:r,quiet:!0});let s=await this.readScoring(r);await this.applyScoringStrategy(r,s,o,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)||{},o=Object.keys(n||{}).filter(a=>{if(O(t,a))return a},{});await this.removeIntent(o,{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,o=this._testSettings.find(u=>u.strategy&&(!u.endDate||u.endDate>n));if(!o)return!1;let a=e!=null?e:k.Visitor,s=await((l=this.getScopeStrategy(a))==null?void 0:l.get());return o.strategy.isInPersonalizationControlGroup(s,r)}getTestValue(t){var r,n,o,a,s,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):((a=(o=this._serverState)==null?void 0:o.tests)==null?void 0:a[t])?Promise.resolve((c=(s=this._serverState)==null?void 0:s.tests)==null?void 0:c[t]):this._storage.tests.getTestSelection(t)}setTestValue(t,e){var n,o;let r=(o=(n=this._intentManifest)==null?void 0:n.site.tests)==null?void 0:o.find(a=>a.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(o=>o.name===t))}async identify(t){var o;let e=(o=this._storage)==null?void 0:o.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:o}){var P,y,V;let a="reevaluateSignal",s=await this.resolveFrequencyScope(r,e);if(!await this.determineIfSignalShouldEvaluate(r,s)){this.log({level:"info",message:`Signal ${r.id} will not evaluate`,region:a});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:a});return}!r.str&&r.str!==I.Antimatter&&(this.log({level:"warn",message:`Strength not defined on signal, setting strength to ${I.Normal}`,region:a}),r.str=I.Normal);let u=await this.resolveScope(r.scope,e),g=this.resolveSignalStorage(u,r),m={intent:t,signal:r,scope:u,statsScope:s},d={signal:r,intent:t,behaviors:o,state:g,requestContext:n||re(),events:this._events,log:this.log.bind(this)},{requestContext:S,log:h,...b}=d,_=l(d),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:a,signal:r,intent:t,result:v}),m.result=v,typeof v=="undefined")return m;if(r.id){let T=await this.resolveFrequencyScope(r,e);return T&&(m.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),m}}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 L(...e)}processSignalEvaluations(t){let e={};return t.forEach(r=>{let{signal:n,scope:o,result:a,intent:s}=r,{id:c}=s;if(o&&a&&(a.strength||a.strength===I.Antimatter)){let{score:l,matches:u}=e[o.type]=e[o.type]||{matches:[],score:{}},g=l[c]=l[c]||{str:0};g.str=Number(g.str)+Number(a.strength),u.push({intentId:c,signalStrength:a.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 o="Reevaluate Intent",a=[],{id:s,signals:c}=t;return!c||c.length===0?this.log({level:"warn",message:`Intent ${s} does not define any signals.`,region:o}):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)&&a.push(u)})),a}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 a=>{let{score:s,matches:c}=t[a]||{matches:[],score:{}},l=await this.readScoring(a);n[a]=await this.applyScoringStrategy(a,l,s,c.length)})),this.log({level:"verbose",message:"Scoring by scope",region:e,...n});let o=this.combineScoring(n);return this.log({level:"verbose",message:"Combined scope scoring",region:e,...o}),o}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 o,a;let r="resolveSignalStorage",n=e.id?(o=t==null?void 0:t.state.signals)==null?void 0:o[e.id]:{};return e.id&&!((a=t==null?void 0:t.state.signals)==null?void 0:a[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 o=n();return Object.keys(o).forEach(a=>{r[a]&&this.log({level:"warn",region:"loadSignalEvaluators",message:`[Tracker]: Multiple plugins provided signal resolvers for ${a}`}),r[a]=o[a]}),r},{})}addIntents(t){let e=t.map(r=>{let{signals:n}=r;return{...r,signals:n.map(o=>{let{id:a}=o;return{...o,id:a!=null?a:`${r.id}:${JSON.stringify(o)}`}})}});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 a;let r="Resolve Scope",n=t||k.Visitor,o=e&&t?e[t]:await((a=this.getScopeStrategy(n))==null?void 0:a.get());return o||this.log({level:"warn",message:`Scope "${t}" returned null or undefined`,region:r}),(o==null?void 0:o.type)!==t&&typeof t!="undefined"&&this.log({level:"warn",message:`Scope "${t}" was requested, but "${o==null?void 0:o.type}" was resolved`,region:r}),o}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 o=this._scoringStrategy({previousValue:(e==null?void 0:e.values)||{},valueToAdd:r,signalCount:n});return this.writeScoring(t,o,e)}async writeScoring(t,e,r){var s,c;let n="writeScoring",o;if(r&&(o=x(e.values,r.values),Object.keys(o).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 a=(c=(s=this._scopeStrategies)==null?void 0:s[t])==null?void 0:c.getExpiration();return await this._storage.scopes.setScoring(e,t,a,r,o),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(o=>o.name===t))}};import{MatchFilter as q}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 oe(i){let t=i.reduce((r,n)=>{var o;return Math.max(r,(o=n.relevancy)!=null?o: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(o=>{t[o]&&(r[o]=t[o],n[o]=i.intents[o])}),{score:B(r),isDefault:!1,tagStrength:B(n),matches:Object.keys(r)}},Re=(i,t)=>{var n,o,a,s,c,l;let e=Object.keys((a=(o=(n=i.item)==null?void 0:n.intentTag)==null?void 0:o.intents)!=null?a:{}).some(u=>{var g,m,d;return((g=i.matches)==null?void 0:g.includes(u))&&((d=(m=i.item)==null?void 0:m.intentTag)==null?void 0:d.intents[u].override)}),r=Object.keys((l=(c=(s=t.item)==null?void 0:s.intentTag)==null?void 0:c.intents)!=null?l:{}).some(u=>{var g,m,d;return((g=t.matches)==null?void 0:g.includes(u))&&((d=(m=t.item)==null?void 0:m.intentTag)==null?void 0:d.intents[u].override)});return e&&!r?-1:!e&&r?1:0},_e=(i,t)=>{var a,s;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:(((a=t.matches)==null?void 0:a.length)||0)-(((s=i.matches)==null?void 0:s.length)||0)},Ve=({list:i,intentScores:t,scorer:e,fallbackSort:r,analyticsEmitter:n,isInPersonalizationControlGroup:o,count:a,matchFilter:s="personalizedOrDefault"})=>{let c=!1,l=e!=null?e:xe,u=[],g={};i.forEach(d=>{var P;if((P=d.intentTag)==null?void 0:P.intents){let y=!0,V=d.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:d.intentTag,intentScores:t});S>0&&(c=!0);let v={item:d,matches:_,relevancy:S,tagStrength:h,isDefault:b};(s===q.PersonalizedOnly||s==="personalizedOnly")&&v.isDefault||(s===q.PersonalizedOnly||s==="personalizedOnly"||s===q.PersonalizedOrDefault||s==="personalizedOrDefault")&&v.relevancy===0&&!v.isDefault||u.push(v)}),oe(u),u=u.filter(d=>{var h;let S=(h=d.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&&!o?u.sort((d,S)=>{let h=Re(d,S);if(h!==0)return h;let b=_e(d,S);return b===0&&r?r(d.item,S.item):b}):u.sort((d,S)=>d.isDefault===S.isDefault?r?r(d.item,S.item):0:Number(S.isDefault)>Number(d.isDefault)?1:-1);let m=u;if(typeof a=="number"&&a>0&&(m=m.slice(0,a)),n){let d=new Set(m.flatMap(S=>{var h;return(h=S.matches)!=null?h:[]}));n==null||n.personalization({matches:Array.from(d),isInPersonalizationControlGroup:o!=null?o:!1,intentScores:t})}return{result:m,personalized:!o&&c,intentScores:t}};var jt=(i="info")=>({name:"console-logger",onLogMessage:({level:t="verbose",message:e,...r})=>{if(!ee(i,t))return;let o="",a=console.log;t==="error"?(a=console.error,o=""):t==="warn"?(a=console.warn,o=""):t==="verbose"&&(o="font-size: 0.8em;");let s=`%c[Uniform] ${e}`;if(r){let{region:c,...l}=r;c&&(s=`%c[Uniform] [${c}] ${e}`),Object.keys(l).length>0?a(s,o,l):a(s,o)}else a(s,o)}});var ae=i=>Object.keys(i).reduce((t,e)=>(t[e]={str:i[e].str},t),{});import{isBehaviorSignal as ze,SignalType as se}from"@uniformdev/optimize-common";var Ie=({signal:i,behaviors:t,intent:e,log:r})=>{let n="behaviorSignalEvaluator";if(!ze(i)){r==null||r({level:"warn",message:"Signal is not a behavior signal",region:n});return}let{id:o}=e,a=i.str,s=0;if(t.forEach((c,l)=>{var g;let u=(g=c[o])==null?void 0:g.str;if(u&&a){let m=(Number(u)+Number(a))/2,d=m/t.length;r==null||r({level:"verbose",message:`Behavior [${l}] ${e.id} strength: ${d} - ((baseFromSignal + baseFromTag) / 2) / behQueueCount`,region:n,baseFromSignal:a,baseFromTag:u,baseTotal:m,behQueueCount:t.length,final:d}),s+=d}}),s===0){t.length>0&&(r==null||r({level:"verbose",message:`No pending behavior for intent '${o}'`,region:n,behaviors:t}));return}return t.length>1&&(r==null||r({level:"verbose",message:"Total Behavior Signal strength",region:n,resultStrength:s})),{strength:s}},Qt=()=>({name:`${se.Behavior}-signal`,signalEvaluatorMapping:()=>({[se.Behavior]:Ie})});import{isCookieSignal as Me,isStringMatch as Oe,SignalType as ce}from"@uniformdev/optimize-common";var Le=(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(!Me(i)){e==null||e({level:"warn",message:"Signal is not a cookie signal",region:r});return}let n=Le(i.parameter,t);if(!n){e==null||e({level:"verbose",message:`Cookie '${i.parameter}' value is not defined`,region:r});return}if(!Oe(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 Ce,isStringMatch as Ne,SignalType as le}from"@uniformdev/optimize-common";var U=(i,t)=>!t||!t.expr?!0:i?Ne(i,t):!1,Ae=({signal:i,events:t,log:e})=>{let r="eventSignalEvaluator";if(!Ce(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,o=!1;if(t.forEach(a=>{let s=U(a.label,i.label),c=U(a.category,i.category),l=U(a.value,i.value);s&&c&&l&&(e==null||e({level:"info",message:"Event Match",region:r,event:a,signal:i}),n+=Number(i.str),o=!0)}),!o){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 o;return Fe(n.pathname,i.path)?(e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),o=Number(i.str)):e==null||e({level:"info",message:"URL is not a match",region:r,url:n.toString(),criteria:i.path}),{strength:o}},tr=()=>({name:`${ue.LandingPage}-signal`,signalEvaluatorMapping:()=>({[ue.LandingPage]:je})});import{isPageViewCountSignal as Be,SignalType as ge}from"@uniformdev/optimize-common";var qe=({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 o={state:{pageCount:n+1}};e==null||e({level:"verbose",message:"Incrementing page count",region:r,pageCount:(l=o.state)==null?void 0:l.pageCount});let a=(u=i==null?void 0:i.min)!=null?u:0,s=(g=i==null?void 0:i.max)!=null?g:Number.MAX_VALUE;return(s===0||isNaN(s))&&(s=Number.MAX_VALUE),e==null||e({level:"verbose",message:"Checking if page count is in range",region:r,min:a,max:s}),n>=a&&n<=s?(e==null||e({level:"info",message:"Is in range, setting strength",region:r,str:i.str}),o.strength=Number(i.str)):e==null||e({level:"verbose",message:"Is not in range, ignoring.",region:r,str:i.str}),o},ir=()=>({name:`${ge.PageViewCount}-signal`,signalEvaluatorMapping:()=>({[ge.PageViewCount]:qe})});import{isPageVisitedSignal as Ue,isStringMatch as Qe,SignalType as me}from"@uniformdev/optimize-common";var Ke=({signal:i,requestContext:t,log:e})=>{let r="pageVisitedSignalEvaluator";if(!Ue(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 o;if(Qe(n.pathname,i.path))e==null||e({level:"info",message:"URL is a match",region:r,url:n.toString(),criteria:i.path}),o=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:o}},sr=()=>({name:`${me.PageVisited}-signal`,signalEvaluatorMapping:()=>({[me.PageVisited]:Ke})});import{isQueryStringSignal as Je,isStringMatch as He,SignalType as de}from"@uniformdev/optimize-common";var fe=({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),o=n.searchParams.get(i.parameter);if(!o){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' not defined`,region:r,url:n.toString()});return}if(!He(o,i.value)){e==null||e({level:"verbose",message:`Query string value '${i.parameter}' is not a match`,region:r,parameterValue:o,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:`${de.QueryString}-signal`,signalEvaluatorMapping:()=>({[de.QueryString]:fe,UTM:fe})});var mr=({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 o=e&&e.length?e.join(", "):"Default";return i.trackPersonalization(t,{category:"Uniform Personalization",label:o,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 pe="scopeStrategy",C=i=>{let t=()=>({id:Ye(),created:new Date().valueOf(),state:{},type:i.type,random:Math.random()}),e=a=>{if(typeof i.expirationMinutes=="undefined")return!1;let s=i.expirationMinutes*60*1e3,c=new Date().valueOf(),l=a.updated||a.created;return c-l>=s},{type:r}=i,n,o=()=>{};return{type:r,initialize:async({log:a,storage:s})=>{o=a,n=s},get:async()=>{if(!n)throw new Error("call initialize first");let a=await n.getScope(r);if(a&&e(a)&&(o({level:"info",region:pe,message:`Scope ${r} is expired, data cleared.`}),a=void 0),!a){o({level:"verbose",region:pe,message:`Creating scope ${r}`});let c=((i==null?void 0:i.createScope)||t)();return await n.setScope(c),c}return a},save:async a=>{if(!n)throw new Error("call initialize first");await n.setScope(a)},getExpiration:()=>i.expirationMinutes}};import{Scope as Ze}from"@uniformdev/optimize-common";var yr=i=>C({type:Ze.Visit,expirationMinutes:(i==null?void 0:i.expirationMinutes)||20});import{Scope as et}from"@uniformdev/optimize-common";var wr=()=>C({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(o){return async(a,s)=>{let c=ae(s.values),l=s.updated;e.forEach(g=>{g.time<=s.updated||(g.time>l&&(l=g.time),c=L(c,g.diff))});let u={...s,updated:l,values:c};await Promise.all(o.map(g=>g.storage.setScoring(u,a))),await(r==null?void 0:r(a,u))}}return t.forEach((o,a)=>{var l,u;let s=i.slice(0,a),c=n(s);o.__callback=c,(u=(l=o.storage).setScoringValueExternallyUpdatedCallback)==null||u.call(l,c)}),{id:`Tiered (${i.map(o=>{var a,s;return(s=(a=o.storage)==null?void 0:a.id)!=null?s:"unknown"}).join(", ")})`,delete:async()=>{e=[],await R(i,o=>o.storage.delete())},getScope:async(...o)=>await E(i,a=>a.storage.getScope(...o)),setScope:async(...o)=>{await w(i,a=>a.storage.setScope(...o))},getScoring:async(...o)=>{let a;for(let s=0;s<i.length;s++){let c=t[s];if(a&&!c.loading)return a;if(!a||c.loading==="await"){let u=await c.storage.getScoring(...o);u&&(a=u);continue}let l=a;c.storage.getScoring(o[0]).then(u=>{if(u&&!D(l.values,u.values))return c.__callback(o[0],u)})}return a},setScoring:async(o,a,s,c,l)=>{var m;let u=x(o==null?void 0:o.values,c==null?void 0:c.values);Object.keys(u).length>0&&e.push({time:(m=o==null?void 0:o.updated)!=null?m:new Date().getTime(),diff:u}),await w(i,d=>d.storage.setScoring(o,a,s,c,l))},identify:async o=>{var c;let a=i.filter(l=>l.storage.identify);return a.length===0&&console.warn("Visitor was identified, but no storage tier implemented identification"),(c=(await Promise.all(a.map(l=>l.storage.identify(o)))).filter(l=>l))==null?void 0:c[0]},setScoringValueExternallyUpdatedCallback:o=>r=o}};import{Scope as N}from"@uniformdev/optimize-common";var Ar=({getCookie:i,setCookie:t})=>{let e=a=>JSON.parse(a),r=a=>JSON.stringify(a),n=a=>`uniform_trk_${a.toLocaleLowerCase()}_score`,o={[N.Visit]:n(N.Visit),[N.Visitor]:n(N.Visitor)};return{getScoring:a=>{let s,c=o[a];if(!c)throw new Error(`Unsupported cookie scope ${a}`);let l=i(c);return l&&(s=e(l)),Promise.resolve(s)},setScoring:(a,s,c)=>{let l=a?r(a):"",u=c?c*60:30*24*60*60,g=o[s];if(!g)throw new Error(`Unsupported cookie scope ${s}`);return t(g,l,u),Promise.resolve()},delete:async()=>(Object.keys(o).forEach(a=>{t(o[a],"",-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,o=i(Q);return o&&(n=e(o)),n};return{id:"Cookie Test Storage",getTestSelection:n=>{let o=r(),a=o==null?void 0:o[n];return Promise.resolve(a)},setTestSelection:(n,o)=>{let s={...r(),[n]:o},c=JSON.stringify(s);return t(Q,c,Se),Promise.resolve()},delete:()=>(t(Q,"",Se),Promise.resolve())}};var qr=({storage:i})=>{let t;function e(r){return async(n,o,...a)=>{await Promise.all(r.map(s=>s.setScoring(o,n))),await(t==null?void 0:t(n,o,...a))}}return i.forEach((r,n)=>{var s;let o=i.slice(0,n),a=e(o);(s=r.setScoringValueExternallyUpdatedCallback)==null||s.call(r,a)}),{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 a;let n=i.filter(s=>s.identify);return n.length===0&&console.warn("Visitor was identified, but no composite storage implements identification"),(a=(await Promise.all(n.map(s=>s.identify(r)))).filter(s=>s))==null?void 0:a[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",on=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,o)=>(o.distribution?n.total+=o.distribution:++n.missingDistribution,n.values.push(o.distribution),n),{values:[],total:0,missingDistribution:0});if(e>100)throw`Total distribution ${e} is over the maximum 100.`;if(e<100){let o=(100-e)/r;t.forEach((a,s)=>{typeof a=="undefined"&&(t[s]=o)})}return t},sn=({testName:i,variations:t,random:e,selectedVariantId:r,analyticsEmitter:n})=>{if(e>100||e<0)throw"Random must be between 0 and 100";let o;if(r&&(o=t.find(s=>s.id===r),o||console.warn("Previously selected variant is no longer present.")),!o){let s=rt(t),c=0;o=t.find((l,u)=>{let g=s[u];if(e>c&&e<=c+g)return l;c+=g})}let a=!1;return n==null||n.test({testName:i,testSelection:o==null?void 0:o.id}),{result:o,tracked:a}},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,on as addBrowserExtension,jt as addConsoleLoggerPlugin,Ht as addCookieSignalPlugin,Yt as addEventSignalPlugin,tr as addLandingPageSignalPlugin,ir as addPageViewCountSignalPlugin,sr as addPageVisitedSignalPlugin,ur as addQueryStringSignalPlugin,Ie as behaviorSignalEvaluator,F as calculateEnrichmentIntentName,ae as cloneScore,L as combineScores,qr 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,U as doesValueMatchEventProperty,Ae as eventSignalEvaluator,cn as generateRandom,O as getEnrichmentValue,Pr as inMemoryScopeStorage,Rr as inMemoryTestStorage,rt as normalizeVariationDistributions,te as parseEnrichment,Ve as personalizeList,mr as resolveAnalyticsEmitter,C as scopeStrategy,j as scoreIsEmpty,D as scoresAreEqual,sn as testList,Dr as tieredScopeStorage};
© 2021 Uniform Systems, Inc. All Rights Reserved.
See details of Uniform Systems, Inc. Master Subscription Agreement here: https://uniform.dev/eula
{
"name": "@uniformdev/optimize-tracker",
"version": "12.2.1-alpha.59+ee5a4745",
"version": "12.2.1-alpha.107+b30768d5",
"description": "Uniform Optimize tracker",

@@ -28,4 +28,4 @@ "license": "SEE LICENSE IN LICENSE.txt",

"dependencies": {
"@uniformdev/optimize-common": "^12.2.1-alpha.59+ee5a4745",
"@uniformdev/optimize-tracker-common": "^12.2.1-alpha.59+ee5a4745",
"@uniformdev/optimize-common": "^12.2.1-alpha.107+b30768d5",
"@uniformdev/optimize-tracker-common": "^12.2.1-alpha.107+b30768d5",
"uuid": ">=7.0.0"

@@ -35,12 +35,12 @@ },

"@types/jest": "27.0.3",
"@types/node": "16.7.1",
"@types/uuid": "8.3.1",
"eslint": "7.32.0",
"@types/node": "16.11.18",
"@types/uuid": "8.3.3",
"eslint": "8.4.1",
"eslint-plugin-react": "7.27.1",
"eslint-plugin-react-hooks": "4.3.0",
"jest": "27.3.1",
"jest": "27.4.5",
"npm-run-all": "4.1.5",
"rimraf": "3.0.2",
"ts-jest": "27.0.7",
"tsup": "5.7.2"
"ts-jest": "27.1.1",
"tsup": "5.11.10"
},

@@ -53,3 +53,3 @@ "files": [

},
"gitHead": "ee5a4745535ac342d62ba2472e2a681c9867255b"
"gitHead": "b30768d5d58d4c75b390274042724d50c1ee1041"
}
Uniform Optimize tracker.
part of the [Uniform Platform](https://uniform.app). See our [documentation](https://docs.uniform.app) for more details.

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc