@prosdevlab/experience-sdk 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
var experiences=(function(exports){'use strict';var
|
|
1
|
+
var experiences=(function(exports){'use strict';var D=class{storage=new Map;get(e){return this.storage.get(e)??null}set(e,t,n){this.storage.set(e,t);}remove(e){this.storage.delete(e);}clear(){this.storage.clear();}isSupported(){return true}},X=class{fallback=null;defaultOptions;constructor(e={}){this.defaultOptions={path:"/",sameSite:"lax",...e};}get(e){if(!this.isSupported())return this.getFallback().get(e);try{let t=`${encodeURIComponent(e)}=`,n=document.cookie.split(";");for(let r of n)if(r=r.trim(),r.startsWith(t))return decodeURIComponent(r.substring(t.length));return null}catch(t){return console.warn("Cookie get failed:",t),this.getFallback().get(e)}}set(e,t,n){if(!this.isSupported()){this.getFallback().set(e,t);return}try{let r={...this.defaultOptions,...n},i=[`${encodeURIComponent(e)}=${encodeURIComponent(t)}`];if(r.ttl){let p=new Date;p.setTime(p.getTime()+r.ttl*1e3),i.push(`expires=${p.toUTCString()}`);}r.path&&i.push(`path=${r.path}`),r.domain&&i.push(`domain=${r.domain}`),r.secure&&i.push("secure"),r.sameSite&&i.push(`samesite=${r.sameSite}`),document.cookie=i.join("; ");}catch(r){console.warn("Cookie set failed, falling back to memory:",r),this.getFallback().set(e,t);}}remove(e){if(!this.isSupported()){this.getFallback().remove(e);return}try{let t=this.defaultOptions,n=[`${encodeURIComponent(e)}=`,"expires=Thu, 01 Jan 1970 00:00:00 UTC"];t.path&&n.push(`path=${t.path}`),t.domain&&n.push(`domain=${t.domain}`),document.cookie=n.join("; ");}catch(t){console.warn("Cookie remove failed:",t),this.getFallback().remove(e);}}clear(){if(!this.isSupported()){this.getFallback().clear();return}try{let e=document.cookie.split(";");for(let t of e){t=t.trim();let n=t.indexOf("="),r=n>-1?t.substring(0,n):t;this.remove(decodeURIComponent(r));}}catch(e){console.warn("Cookie clear failed:",e),this.getFallback().clear();}}isSupported(){try{if(typeof document>"u"||!document.cookie)return !1;let e="__cookie_test__";document.cookie=`${e}=test; path=/`;let t=document.cookie.indexOf(e)!==-1;return document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,t}catch{return false}}getFallback(){return this.fallback||(this.fallback=new D),this.fallback}},Y=class{fallback=null;get(e){if(!this.isSupported())return this.getFallback().get(e);try{return localStorage.getItem(e)}catch(t){return console.warn("localStorage.getItem failed:",t),this.getFallback().get(e)}}set(e,t,n){if(!this.isSupported()){this.getFallback().set(e,t);return}try{localStorage.setItem(e,t);}catch(r){console.warn("localStorage.setItem failed, falling back to memory:",r),this.getFallback().set(e,t);}}remove(e){if(!this.isSupported()){this.getFallback().remove(e);return}try{localStorage.removeItem(e);}catch(t){console.warn("localStorage.removeItem failed:",t),this.getFallback().remove(e);}}clear(){if(!this.isSupported()){this.getFallback().clear();return}try{localStorage.clear();}catch(e){console.warn("localStorage.clear failed:",e),this.getFallback().clear();}}isSupported(){try{let e="__storage_test__";return localStorage.setItem(e,"test"),localStorage.removeItem(e),!0}catch{return false}}getFallback(){return this.fallback||(this.fallback=new D),this.fallback}},Z=class{fallback=null;get(e){if(!this.isSupported())return this.getFallback().get(e);try{return sessionStorage.getItem(e)}catch(t){return console.warn("sessionStorage.getItem failed:",t),this.getFallback().get(e)}}set(e,t,n){if(!this.isSupported()){this.getFallback().set(e,t);return}try{sessionStorage.setItem(e,t);}catch(r){console.warn("sessionStorage.setItem failed, falling back to memory:",r),this.getFallback().set(e,t);}}remove(e){if(!this.isSupported()){this.getFallback().remove(e);return}try{sessionStorage.removeItem(e);}catch(t){console.warn("sessionStorage.removeItem failed:",t),this.getFallback().remove(e);}}clear(){if(!this.isSupported()){this.getFallback().clear();return}try{sessionStorage.clear();}catch(e){console.warn("sessionStorage.clear failed:",e),this.getFallback().clear();}}isSupported(){try{let e="__storage_test__";return sessionStorage.setItem(e,"test"),sessionStorage.removeItem(e),!0}catch{return false}}getFallback(){return this.fallback||(this.fallback=new D),this.fallback}},I=(e,t,n)=>{e.ns("storage"),e.defaults({storage:{backend:"localStorage",namespace:"",path:"/",sameSite:"lax"}});let r=()=>n.get("storage.backend")??"localStorage",i=()=>n.get("storage.namespace")??"",p=()=>n.get("storage.ttl"),h=()=>({domain:n.get("storage.domain"),path:n.get("storage.path")??"/",secure:n.get("storage.secure"),sameSite:n.get("storage.sameSite")??"lax"}),o={};function l(s){if(!o[s])switch(s){case "localStorage":o[s]=new Y;break;case "sessionStorage":o[s]=new Z;break;case "cookie":o[s]=new X(h());break;case "memory":o[s]=new D;break}return o[s]}function y(s,u){let f=u??i();return f?`${f}:${s}`:s}function k(s){return s.expires?Date.now()>s.expires:false}function c(s,u,f){let b=f?.backend??r(),w=l(b),v=y(s,f?.namespace),C={value:u},m=f?.ttl??p();m&&(C.expires=Date.now()+m*1e3);let S=JSON.stringify(C);w.set(v,S,f),e.emit("storage:set",{key:s,value:u,backend:b});}function a(s,u){let f=u?.backend??r(),b=l(f),w=y(s,u?.namespace),v=b.get(w);if(!v)return null;try{let C=JSON.parse(v);return k(C)?(b.remove(w),e.emit("storage:expired",{key:s,backend:f}),null):(e.emit("storage:get",{key:s,backend:f}),C.value)}catch(C){return console.warn("Failed to parse stored value:",C),b.remove(w),null}}function x(s,u){let f=u?.backend??r(),b=l(f),w=y(s,u?.namespace);b.remove(w),e.emit("storage:remove",{key:s,backend:f});}function d(s){let u=s?.backend??r(),f=l(u),b=s?.namespace;if(!b){f.clear(),e.emit("storage:clear",{backend:u});return}if(u==="localStorage"||u==="sessionStorage"){let w=u==="localStorage"?localStorage:sessionStorage,v=`${b}:`,C=[];for(let m=0;m<w.length;m++){let S=w.key(m);S?.startsWith(v)&&C.push(S);}for(let m of C)f.remove(m);}else if(u==="cookie"){let w=`${b}:`,v=document.cookie.split(";");for(let C of v){let m=C.trim(),S=m.indexOf("=");if(S===-1)continue;let q=m.substring(0,S),E=decodeURIComponent(q);E.startsWith(w)&&f.remove(E);}}else f.clear();e.emit("storage:clear",{backend:u,namespace:b});}function g(s){let u=s??r();return l(u).isSupported()}e.expose({storage:{set:c,get:a,remove:x,clear:d,isSupported:g}}),t.on("sdk:ready",()=>{let s=r();l(s).isSupported()||console.warn(`Storage backend '${s}' is not supported, falling back to memory storage`);});};var ee=["strong","em","a","br","span","b","i","p"],te={a:["href","class","style","title"],span:["class","style"],p:["class","style"]};function F(e){if(!e||typeof e!="string")return "";let t=document.createElement("div");t.innerHTML=e;function n(i){if(i.nodeType===Node.TEXT_NODE)return ne(i.textContent||"");if(i.nodeType===Node.ELEMENT_NODE){let p=i,h=p.tagName.toLowerCase();if(!h||h.includes(" ")||!ee.includes(h))return "";let o=te[h]||[],l=[];for(let c of o){let a=p.getAttribute(c);if(a!==null)if(c==="href"){let x=re(a);x&&l.push(`href="${j(x)}"`);}else l.push(`${c}="${j(a)}"`);}let y=l.length>0?" "+l.join(" "):"",k="";for(let c of Array.from(p.childNodes))k+=n(c);return h==="br"?`<br${y} />`:`<${h}${y}>${k}</${h}>`}return ""}let r="";for(let i of Array.from(t.childNodes))r+=n(i);return r}function ne(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function j(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function re(e){if(!e||typeof e!="string")return "";let t;try{t=decodeURIComponent(e);}catch{t=e;}let n=t.trim().toLowerCase();return n.startsWith("javascript:")||n.startsWith("data:")||e.toLowerCase().trim().startsWith("javascript:")||e.toLowerCase().trim().startsWith("data:")?"":n.startsWith("http://")||n.startsWith("https://")||n.startsWith("mailto:")||n.startsWith("tel:")||n.startsWith("/")||n.startsWith("#")||n.startsWith("?")||!n.includes(":")?e:""}var O=(e,t,n)=>{e.ns("banner"),e.defaults({banner:{position:"top",dismissable:true,zIndex:1e4}});let r=new Map;function i(){let c="xp-banner-styles";if(document.getElementById(c))return;let a=document.createElement("style");a.id=c,a.textContent=`
|
|
2
2
|
.xp-banner {
|
|
3
3
|
position: fixed;
|
|
4
4
|
left: 0;
|
|
5
5
|
right: 0;
|
|
6
6
|
width: 100%;
|
|
7
|
-
padding: 16px 20px;
|
|
8
7
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
9
8
|
font-size: 14px;
|
|
10
9
|
line-height: 1.5;
|
|
11
|
-
display: flex;
|
|
12
|
-
align-items: center;
|
|
13
|
-
justify-content: space-between;
|
|
14
10
|
box-sizing: border-box;
|
|
15
11
|
z-index: 10000;
|
|
16
|
-
background: #
|
|
12
|
+
background: #ffffff;
|
|
17
13
|
color: #111827;
|
|
18
14
|
border-bottom: 1px solid #e5e7eb;
|
|
19
15
|
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05);
|
|
@@ -33,33 +29,38 @@ var experiences=(function(exports){'use strict';var q=class{storage=new Map;get(
|
|
|
33
29
|
.xp-banner__container {
|
|
34
30
|
display: flex;
|
|
35
31
|
align-items: center;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
gap: 16px;
|
|
33
|
+
max-width: 1280px;
|
|
34
|
+
margin: 0 auto;
|
|
35
|
+
padding: 14px 24px;
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
.xp-banner__content {
|
|
42
39
|
flex: 1;
|
|
43
40
|
min-width: 0;
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: 4px;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
.xp-banner__title {
|
|
47
47
|
font-weight: 600;
|
|
48
|
-
margin
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
margin: 0;
|
|
49
|
+
font-size: 15px;
|
|
50
|
+
line-height: 1.4;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.xp-banner__message {
|
|
54
54
|
margin: 0;
|
|
55
55
|
font-size: 14px;
|
|
56
|
+
line-height: 1.5;
|
|
57
|
+
color: #6b7280;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
.xp-banner__buttons {
|
|
59
61
|
display: flex;
|
|
60
62
|
align-items: center;
|
|
61
|
-
gap:
|
|
62
|
-
flex-wrap: wrap;
|
|
63
|
+
gap: 8px;
|
|
63
64
|
flex-shrink: 0;
|
|
64
65
|
}
|
|
65
66
|
|
|
@@ -72,6 +73,10 @@ var experiences=(function(exports){'use strict';var q=class{storage=new Map;get(
|
|
|
72
73
|
cursor: pointer;
|
|
73
74
|
transition: all 0.2s;
|
|
74
75
|
text-decoration: none;
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
white-space: nowrap;
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
.xp-banner__button--primary {
|
|
@@ -84,71 +89,93 @@ var experiences=(function(exports){'use strict';var q=class{storage=new Map;get(
|
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
.xp-banner__button--secondary {
|
|
87
|
-
background: #
|
|
92
|
+
background: #f3f4f6;
|
|
88
93
|
color: #374151;
|
|
89
|
-
border: 1px solid #
|
|
94
|
+
border: 1px solid #e5e7eb;
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
.xp-banner__button--secondary:hover {
|
|
93
|
-
background: #
|
|
98
|
+
background: #e5e7eb;
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
.xp-banner__button--link {
|
|
97
102
|
background: transparent;
|
|
98
103
|
color: #2563eb;
|
|
99
|
-
padding:
|
|
104
|
+
padding: 6px 12px;
|
|
100
105
|
font-weight: 400;
|
|
101
|
-
text-decoration: underline;
|
|
102
106
|
}
|
|
103
107
|
|
|
104
108
|
.xp-banner__button--link:hover {
|
|
105
|
-
background:
|
|
109
|
+
background: #f3f4f6;
|
|
110
|
+
text-decoration: underline;
|
|
106
111
|
}
|
|
107
112
|
|
|
108
113
|
.xp-banner__close {
|
|
109
114
|
background: transparent;
|
|
110
115
|
border: none;
|
|
111
|
-
color: #
|
|
112
|
-
font-size:
|
|
116
|
+
color: #9ca3af;
|
|
117
|
+
font-size: 20px;
|
|
113
118
|
line-height: 1;
|
|
114
119
|
cursor: pointer;
|
|
115
|
-
padding:
|
|
120
|
+
padding: 4px;
|
|
116
121
|
margin: 0;
|
|
117
|
-
|
|
118
|
-
transition: opacity 0.2s;
|
|
122
|
+
transition: color 0.2s;
|
|
119
123
|
flex-shrink: 0;
|
|
124
|
+
width: 28px;
|
|
125
|
+
height: 28px;
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
justify-content: center;
|
|
129
|
+
border-radius: 4px;
|
|
120
130
|
}
|
|
121
131
|
|
|
122
132
|
.xp-banner__close:hover {
|
|
123
|
-
|
|
133
|
+
color: #111827;
|
|
134
|
+
background: #f3f4f6;
|
|
124
135
|
}
|
|
125
136
|
|
|
126
137
|
@media (max-width: 640px) {
|
|
127
138
|
.xp-banner__container {
|
|
128
|
-
flex-
|
|
129
|
-
|
|
139
|
+
flex-wrap: wrap;
|
|
140
|
+
padding: 14px 16px;
|
|
141
|
+
position: relative;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.xp-banner__content {
|
|
145
|
+
flex: 1 1 100%;
|
|
146
|
+
padding-right: 32px;
|
|
130
147
|
}
|
|
131
148
|
|
|
132
149
|
.xp-banner__buttons {
|
|
150
|
+
flex: 1 1 auto;
|
|
133
151
|
width: 100%;
|
|
134
|
-
flex-direction: column;
|
|
135
152
|
}
|
|
136
153
|
|
|
137
154
|
.xp-banner__button {
|
|
138
|
-
|
|
155
|
+
flex: 1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.xp-banner__close {
|
|
159
|
+
position: absolute;
|
|
160
|
+
top: 12px;
|
|
161
|
+
right: 12px;
|
|
139
162
|
}
|
|
140
163
|
}
|
|
141
164
|
|
|
142
165
|
/* Dark mode support */
|
|
143
166
|
@media (prefers-color-scheme: dark) {
|
|
144
167
|
.xp-banner {
|
|
145
|
-
background: #
|
|
146
|
-
color: #
|
|
147
|
-
border-bottom-color: #
|
|
168
|
+
background: #111827;
|
|
169
|
+
color: #f9fafb;
|
|
170
|
+
border-bottom-color: #1f2937;
|
|
148
171
|
}
|
|
149
172
|
|
|
150
173
|
.xp-banner--bottom {
|
|
151
|
-
border-top-color: #
|
|
174
|
+
border-top-color: #1f2937;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.xp-banner__message {
|
|
178
|
+
color: #9ca3af;
|
|
152
179
|
}
|
|
153
180
|
|
|
154
181
|
.xp-banner__button--primary {
|
|
@@ -160,27 +187,31 @@ var experiences=(function(exports){'use strict';var q=class{storage=new Map;get(
|
|
|
160
187
|
}
|
|
161
188
|
|
|
162
189
|
.xp-banner__button--secondary {
|
|
163
|
-
background: #
|
|
164
|
-
color: #
|
|
165
|
-
border-color: #
|
|
190
|
+
background: #1f2937;
|
|
191
|
+
color: #f9fafb;
|
|
192
|
+
border-color: #374151;
|
|
166
193
|
}
|
|
167
194
|
|
|
168
195
|
.xp-banner__button--secondary:hover {
|
|
169
|
-
background: #
|
|
196
|
+
background: #374151;
|
|
170
197
|
}
|
|
171
198
|
|
|
172
199
|
.xp-banner__button--link {
|
|
173
|
-
color: #
|
|
200
|
+
color: #60a5fa;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.xp-banner__button--link:hover {
|
|
204
|
+
background: #1f2937;
|
|
174
205
|
}
|
|
175
206
|
|
|
176
207
|
.xp-banner__close {
|
|
177
|
-
color: #
|
|
208
|
+
color: #6b7280;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.xp-banner__close:hover {
|
|
212
|
+
color: #f9fafb;
|
|
213
|
+
background: #1f2937;
|
|
178
214
|
}
|
|
179
215
|
}
|
|
180
|
-
`,document.head.appendChild(c);}function m(d){let c=d.content,h=c.position??n.get("banner.position")??"top",k=c.dismissable??n.get("banner.dismissable")??true,v=n.get("banner.zIndex")??1e4;i();let l=document.createElement("div");l.setAttribute("data-experience-id",d.id);let b=["xp-banner",`xp-banner--${h}`];c.className&&b.push(c.className),l.className=b.join(" "),c.style&&Object.assign(l.style,c.style),v!==1e4&&(l.style.zIndex=String(v));let s=document.createElement("div");s.className="xp-banner__container",l.appendChild(s);let a=document.createElement("div");if(a.className="xp-banner__content",c.title){let p=document.createElement("h3");p.className="xp-banner__title",p.innerHTML=L(c.title),a.appendChild(p);}let f=document.createElement("p");f.className="xp-banner__message",f.innerHTML=L(c.message),a.appendChild(f),s.appendChild(a),l.appendChild(a);let y=document.createElement("div");y.style.cssText=`
|
|
181
|
-
display: flex;
|
|
182
|
-
align-items: center;
|
|
183
|
-
gap: 12px;
|
|
184
|
-
flex-wrap: wrap;
|
|
185
|
-
`;let x=document.createElement("div");x.className="xp-banner__buttons";function S(p){let w=document.createElement("button");w.textContent=p.text;let C=p.variant||"primary",T=["xp-banner__button",`xp-banner__button--${C}`];return p.className&&T.push(p.className),w.className=T.join(" "),p.style&&Object.assign(w.style,p.style),w.addEventListener("click",()=>{t.emit("experiences:action",{experienceId:d.id,type:"banner",action:p.action,url:p.url,metadata:p.metadata,variant:C,timestamp:Date.now()}),p.url&&(window.location.href=p.url);}),w}if(c.buttons&&c.buttons.length>0&&c.buttons.forEach(p=>{let w=S(p);x.appendChild(w);}),k){let p=document.createElement("button");p.className="xp-banner__close",p.innerHTML="×",p.setAttribute("aria-label","Close banner"),p.addEventListener("click",()=>{o(d.id),t.emit("experiences:dismissed",{experienceId:d.id,type:"banner"});}),x.appendChild(p);}return s.appendChild(x),l}function g(d){if(r.has(d.id)||typeof document>"u")return;let c=m(d);document.body.appendChild(c),r.set(d.id,c),t.emit("experiences:shown",{experienceId:d.id,type:"banner",timestamp:Date.now()});}function o(d){if(d){let c=r.get(d);c?.parentNode&&c.parentNode.removeChild(c),r.delete(d);}else for(let[c,h]of r.entries())h?.parentNode&&h.parentNode.removeChild(h),r.delete(c);}function u(){return r.size>0}e.expose({banner:{show:g,remove:o,isShowing:u}}),t.on("experiences:evaluated",d=>{let c=Array.isArray(d)?d:[d];for(let h of c){let k=h,v=k.decision,l=k.experience;l?.type==="banner"&&(v?.show?g(l):l.id&&r.has(l.id)&&o(l.id));}}),t.on("sdk:destroy",()=>{o();});},O=(e,t,n)=>{e.ns("debug"),e.defaults({debug:{enabled:false,console:false,window:true}});let r=()=>n.get("debug.enabled")??false,i=()=>n.get("debug.console")??false,m=()=>n.get("debug.window")??true,g=(o,u)=>{if(!r())return;let c={timestamp:new Date().toISOString(),message:o,data:u};if(i()&&console.log(`[experiences] ${o}`,u||""),m()&&typeof window<"u"){let h=new CustomEvent("experience-sdk:debug",{detail:c});window.dispatchEvent(h);}};e.expose({debug:{log:g,isEnabled:r}}),r()&&(t.on("experiences:ready",()=>{r()&&g("SDK initialized and ready");}),t.on("experiences:registered",o=>{r()&&g("Experience registered",o);}),t.on("experiences:evaluated",o=>{r()&&g("Experience evaluated",o);}));},R=(e,t,n)=>{e.ns("frequency"),e.defaults({frequency:{enabled:true,namespace:"experiences:frequency"}});let r=new Map;t.storage||t.use(_);let i=()=>n.get("frequency.enabled")??true,m=()=>n.get("frequency.namespace")??"experiences:frequency",g=l=>l==="session"?sessionStorage:localStorage,o=l=>`${m()}:${l}`,u=(l,b)=>{let s=g(b),a=o(l),f=s.getItem(a);if(!f)return {count:0,lastImpression:0,impressions:[],per:b};try{return JSON.parse(f)}catch{return {count:0,lastImpression:0,impressions:[],per:b}}},d=(l,b)=>{let s=b.per||"session",a=g(s),f=o(l);a.setItem(f,JSON.stringify(b));},c=l=>{switch(l){case "session":return Number.POSITIVE_INFINITY;case "day":return 1440*60*1e3;case "week":return 10080*60*1e3}},h=(l,b="session")=>i()?u(l,b).count:0,k=(l,b,s)=>{if(!i())return false;let a=u(l,s),f=c(s),y=Date.now();return s==="session"?a.count>=b:a.impressions.filter(S=>y-S<f).length>=b},v=(l,b="session")=>{if(!i())return;let s=u(l,b),a=Date.now();s.count+=1,s.lastImpression=a,s.impressions.push(a),s.per=b;let f=a-10080*60*1e3;s.impressions=s.impressions.filter(y=>y>f),d(l,s),t.emit("experiences:impression-recorded",{experienceId:l,count:s.count,timestamp:a});};e.expose({frequency:{getImpressionCount:h,hasReachedCap:k,recordImpression:v,_registerExperience:(l,b)=>{r.set(l,b);}}}),i()&&t.on("experiences:evaluated",l=>{let b=Array.isArray(l)?l:[l];for(let s of b){let a=s.decision;if(a?.show&&a.experienceId){let f=r.get(a.experienceId)||"session";if(!r.has(a.experienceId)){let y=a.trace.find(x=>x.step==="check-frequency-cap");y?.input&&typeof y.input=="object"&&"per"in y.input&&(f=y.input.per,r.set(a.experienceId,f));}v(a.experienceId,f);}}});};function N(e,t){let n={...e};for(let r in t){if(!Object.hasOwn(t,r))continue;let i=t[r],m=n[r];if(m===void 0){n[r]=i;continue}U(m)&&U(i)&&(n[r]=N(m,i));}return n}function U(e){return e===null||typeof e!="object"?false:Object.prototype.toString.call(e)==="[object Object]"}var se=class{data={};required=new Set;constructor(e={}){this.data=JSON.parse(JSON.stringify(e));}defaults(e){this.data=N(this.data,e);}merge(e){this.data=N(e,this.data);}get(e){let t=e.split("."),n=this.data;for(let r of t){if(n==null)return;n=n[r];}return n}set(e,t){let n=e.split("."),r=n.pop();if(!r)return;let i=this.data;for(let m of n)(i[m]==null||typeof i[m]!="object")&&(i[m]={}),i=i[m];i[r]=t;}markRequired(e){e!=null&&this.required.add(e);}isRequired(e){return this.required.has(e)}getAll(){return JSON.parse(JSON.stringify(this.data))}},oe=class{subscriptions=[];on(e,t){if(typeof t!="function")throw new TypeError("handler must be a function");let n={pattern:e,compiledPattern:this.compilePattern(e),handler:t};return this.subscriptions.push(n),()=>this.off(e,t)}off(e,t){this.subscriptions=this.subscriptions.filter(n=>!(n.pattern===e&&n.handler===t));}emit(e,...t){for(let n of this.subscriptions)if(n.compiledPattern.test(e))try{n.handler(...t);}catch(r){console.error(`Error in event handler for "${e}":`,r);}}removeAllListeners(){this.subscriptions=[];}compilePattern(e){let n=this.escapeRegExp(e).replace(/\\\*/g,"(.*?)");return new RegExp(`^${n}$`)}escapeRegExp(e){return e.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&")}},ie=class{sdk;constructor(e){this.sdk=e;}expose(e){Object.assign(this.sdk,e);}},ae=class{name="";ns(e){if(this.name)throw new Error(`Namespace already set to "${this.name}". Cannot reassign to "${e}".`);this.name=e;}},z=class{configInstance;emitter;plugins=new Map;isInitialized=false;constructor(e={}){this.emitter=new oe,this.configInstance=new se(e);}use(e){let t=new ae,n=new ie(this),r={ns:t.ns.bind(t),defaults:this.configInstance.defaults.bind(this.configInstance),on:this.emitter.on.bind(this.emitter),off:this.emitter.off.bind(this.emitter),emit:this.emitter.emit.bind(this.emitter),expose:n.expose.bind(n),mustEnable:()=>{t.name&&this.configInstance.markRequired(t.name);}};return e(r,this,this.configInstance),t.name&&this.plugins.set(t.name,{namespace:t,plugin:r}),this}async init(e){if(this.isInitialized){console.warn("SDK already initialized");return}e&&this.configInstance.merge(e),this.emitter.emit("sdk:init");let t=Array.from(this.plugins.keys()).filter(n=>this.configInstance.isRequired(n));for(let n of t)if(!this.plugins.has(n))throw new Error(`Required plugin "${n}" is not registered`);this.isInitialized=true,this.emitter.emit("sdk:ready");}async destroy(){this.emitter.emit("sdk:destroy"),this.plugins.clear(),this.emitter.removeAllListeners(),this.isInitialized=false;}get(e){return this.configInstance.get(e)}set(e,t){this.configInstance.set(e,t);}on(e,t){return this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t);}emit(e,...t){this.emitter.emit(e,...t);}getAll(){return this.configInstance.getAll()}isReady(){return this.isInitialized}};var E=class{sdk;experiences=new Map;decisions=[];initialized=false;destroyed=false;constructor(t={}){this.sdk=new z({name:"experience-sdk",...t}),this.sdk.use(_),this.sdk.use(O),this.sdk.use(R),this.sdk.use(D);}async init(t){if(this.initialized){console.warn("[experiences] Already initialized");return}this.destroyed&&(this.sdk=new z({name:"experience-sdk",...t}),this.sdk.use(_),this.sdk.use(O),this.sdk.use(R),this.sdk.use(D),this.destroyed=false),t&&Object.entries(t).forEach(([n,r])=>{this.sdk.set(n,r);}),await this.sdk.init(),this.initialized=true,this.sdk.emit("experiences:ready");}register(t,n){let r={id:t,...n};this.experiences.set(t,r),r.frequency&&this.sdk.frequency?._registerExperience&&this.sdk.frequency._registerExperience(t,r.frequency.per),this.sdk.emit("experiences:registered",{id:t,experience:r});}evaluate(t){let n=Date.now(),r=P(t),i,m=[],g=[];for(let[,u]of this.experiences){let d=A(u,r);if(m.push(...d.reasons),g.push(...d.trace),d.matched){if(u.frequency&&this.sdk.frequency){let c=Date.now(),h=this.sdk.frequency.hasReachedCap(u.id,u.frequency.max,u.frequency.per);if(g.push({step:"check-frequency-cap",timestamp:c,duration:Date.now()-c,input:u.frequency,output:h,passed:!h}),h){let v=this.sdk.frequency.getImpressionCount(u.id,u.frequency.per);m.push(`Frequency cap reached (${v}/${u.frequency.max} this ${u.frequency.per})`);continue}let k=this.sdk.frequency.getImpressionCount(u.id,u.frequency.per);m.push(`Frequency cap not reached (${k}/${u.frequency.max} this ${u.frequency.per})`);}i=u;break}}let o={show:!!i,experienceId:i?.id,reasons:m,trace:g,context:r,metadata:{evaluatedAt:Date.now(),totalDuration:Date.now()-n,experiencesEvaluated:this.experiences.size}};return this.decisions.push(o),this.sdk.emit("experiences:evaluated",{decision:o,experience:i}),o}evaluateAll(t){let n=P(t),r=Array.from(this.experiences.values()).sort((o,u)=>{let d=o.priority??0;return (u.priority??0)-d}),i=[];for(let o of r){let u=Date.now(),d=A(o,n),c=d.matched,h=[...d.reasons],k=[...d.trace];if(c&&o.frequency&&this.sdk.frequency){let l=Date.now(),b=this.sdk.frequency.hasReachedCap(o.id,o.frequency.max,o.frequency.per);if(k.push({step:"check-frequency-cap",timestamp:l,duration:Date.now()-l,input:o.frequency,output:b,passed:!b}),b){let s=this.sdk.frequency.getImpressionCount(o.id,o.frequency.per);h.push(`Frequency cap reached (${s}/${o.frequency.max} this ${o.frequency.per})`),c=false;}else {let s=this.sdk.frequency.getImpressionCount(o.id,o.frequency.per);h.push(`Frequency cap not reached (${s}/${o.frequency.max} this ${o.frequency.per})`);}}let v={show:c,experienceId:o.id,reasons:h,trace:k,context:n,metadata:{evaluatedAt:Date.now(),totalDuration:Date.now()-u,experiencesEvaluated:1}};i.push(v),this.decisions.push(v);}let m=i.filter(o=>o.show),g=m.map(o=>o.experienceId&&this.experiences.get(o.experienceId)).filter(o=>o!==void 0);return this.sdk.emit("experiences:evaluated",m.map((o,u)=>({decision:o,experience:g[u]}))),i}explain(t){let n=this.experiences.get(t);if(!n)return null;let r=P(),i=A(n,r);return {show:i.matched,experienceId:t,reasons:i.reasons,trace:i.trace,context:r,metadata:{evaluatedAt:Date.now(),totalDuration:0,experiencesEvaluated:1}}}getState(){return {initialized:this.initialized,experiences:new Map(this.experiences),decisions:[...this.decisions],config:this.sdk?this.sdk.getAll():{}}}on(t,n){return this.sdk.on(t,n)}async destroy(){this.sdk&&await this.sdk.destroy(),this.destroyed=true,this.experiences.clear(),this.decisions=[],this.initialized=false;}};function P(e){return {url:e?.url??(typeof window<"u"?window.location.href:""),timestamp:Date.now(),user:e?.user,custom:e?.custom}}function A(e,t){let n=[],r=[],i=true;if(e.targeting.url){let m=Date.now(),g=M(e.targeting.url,t.url);r.push({step:"evaluate-url-rule",timestamp:m,duration:Date.now()-m,input:{rule:e.targeting.url,url:t.url},output:g,passed:g}),g?n.push("URL matches targeting rule"):(n.push("URL does not match targeting rule"),i=false);}return {matched:i,reasons:n,trace:r}}function M(e,t=""){return e.equals!==void 0?t===e.equals:e.contains!==void 0?t.includes(e.contains):e.matches!==void 0?e.matches.test(t):true}function $(e){return new E(e)}var I=$();async function B(e){return I.init(e)}function W(e,t){I.register(e,t);}function K(e){return I.evaluate(e)}function H(e){return I.evaluateAll(e)}function V(e){return I.explain(e)}function J(){return I.getState()}function Q(e,t){return I.on(e,t)}async function G(){return I.destroy()}var ce={createInstance:$,init:B,register:W,evaluate:K,evaluateAll:H,explain:V,getState:J,on:Q,destroy:G};typeof window<"u"&&(window.experiences=ce);exports.ExperienceRuntime=E;exports.bannerPlugin=D;exports.buildContext=P;exports.createInstance=$;exports.debugPlugin=O;exports.destroy=G;exports.evaluate=K;exports.evaluateAll=H;exports.evaluateExperience=A;exports.evaluateUrlRule=M;exports.explain=V;exports.frequencyPlugin=R;exports.getState=J;exports.init=B;exports.on=Q;exports.register=W;return exports;})({});//# sourceMappingURL=experience-sdk.global.js.map
|
|
216
|
+
`,document.head.appendChild(a);}function p(c){let a=c.content,x=a.position??n.get("banner.position")??"top",d=a.dismissable??n.get("banner.dismissable")??true,g=n.get("banner.zIndex")??1e4;i();let s=document.createElement("div");s.setAttribute("data-experience-id",c.id);let u=["xp-banner",`xp-banner--${x}`];a.className&&u.push(a.className),s.className=u.join(" "),a.style&&Object.assign(s.style,a.style),g!==1e4&&(s.style.zIndex=String(g));let f=document.createElement("div");f.className="xp-banner__container",s.appendChild(f);let b=document.createElement("div");if(b.className="xp-banner__content",a.title){let m=document.createElement("h3");m.className="xp-banner__title",m.innerHTML=F(a.title),b.appendChild(m);}let w=document.createElement("p");w.className="xp-banner__message",w.innerHTML=F(a.message),b.appendChild(w),f.appendChild(b);let v=document.createElement("div");v.className="xp-banner__buttons";function C(m){let S=document.createElement("button");S.textContent=m.text;let q=m.variant||"primary",E=["xp-banner__button",`xp-banner__button--${q}`];return m.className&&E.push(m.className),S.className=E.join(" "),m.style&&Object.assign(S.style,m.style),S.addEventListener("click",()=>{t.emit("experiences:action",{experienceId:c.id,type:"banner",action:m.action,url:m.url,metadata:m.metadata,variant:q,timestamp:Date.now()}),m.url&&(window.location.href=m.url);}),S}if(a.buttons&&a.buttons.length>0&&a.buttons.forEach(m=>{let S=C(m);v.appendChild(S);}),d){let m=document.createElement("button");m.className="xp-banner__close",m.innerHTML="×",m.setAttribute("aria-label","Close banner"),m.addEventListener("click",()=>{y(c.id),t.emit("experiences:dismissed",{experienceId:c.id,type:"banner"});}),v.appendChild(m);}return f.appendChild(v),s}function h(c,a){let x=n.get("banner.pushDown");if(!x||a!=="top")return;let d=document.querySelector(x);if(!d||!(d instanceof HTMLElement))return;let g=c.offsetHeight;d.style.transition="margin-top 0.3s ease",d.style.marginTop=`${g}px`;}function o(){let c=n.get("banner.pushDown");if(!c)return;let a=document.querySelector(c);!a||!(a instanceof HTMLElement)||(a.style.transition="margin-top 0.3s ease",a.style.marginTop="0");}function l(c){if(r.has(c.id)||typeof document>"u")return;let a=p(c);document.body.appendChild(a),r.set(c.id,a);let d=c.content.position??n.get("banner.position")??"top";h(a,d),t.emit("experiences:shown",{experienceId:c.id,type:"banner",timestamp:Date.now()});}function y(c){if(c){let a=r.get(c);a?.parentNode&&a.parentNode.removeChild(a),r.delete(c),r.size===0&&o();}else {for(let[a,x]of r.entries())x?.parentNode&&x.parentNode.removeChild(x),r.delete(a);o();}}function k(){return r.size>0}e.expose({banner:{show:l,remove:y,isShowing:k}}),t.on("experiences:evaluated",c=>{let a=Array.isArray(c)?c:[c];for(let x of a){let d=x,g=d.decision,s=d.experience;s?.type==="banner"&&(g?.show?l(s):s.id&&r.has(s.id)&&y(s.id));}}),t.on("sdk:destroy",()=>{y();});},P=(e,t,n)=>{e.ns("debug"),e.defaults({debug:{enabled:false,console:false,window:true}});let r=()=>n.get("debug.enabled")??false,i=()=>n.get("debug.console")??false,p=()=>n.get("debug.window")??true,h=(o,l)=>{if(!r())return;let k={timestamp:new Date().toISOString(),message:o,data:l};if(i()&&console.log(`[experiences] ${o}`,l||""),p()&&typeof window<"u"){let c=new CustomEvent("experience-sdk:debug",{detail:k});window.dispatchEvent(c);}};e.expose({debug:{log:h,isEnabled:r}}),r()&&(t.on("experiences:ready",()=>{r()&&h("SDK initialized and ready");}),t.on("experiences:registered",o=>{r()&&h("Experience registered",o);}),t.on("experiences:evaluated",o=>{r()&&h("Experience evaluated",o);}));},R=(e,t,n)=>{e.ns("frequency"),e.defaults({frequency:{enabled:true,namespace:"experiences:frequency"}});let r=new Map;t.storage||t.use(I);let i=()=>n.get("frequency.enabled")??true,p=()=>n.get("frequency.namespace")??"experiences:frequency",h=d=>d==="session"?sessionStorage:localStorage,o=d=>`${p()}:${d}`,l=(d,g)=>{let s=h(g),u=o(d),f=s.getItem(u);if(!f)return {count:0,lastImpression:0,impressions:[],per:g};try{return JSON.parse(f)}catch{return {count:0,lastImpression:0,impressions:[],per:g}}},y=(d,g)=>{let s=g.per||"session",u=h(s),f=o(d);u.setItem(f,JSON.stringify(g));},k=d=>{switch(d){case "session":return Number.POSITIVE_INFINITY;case "day":return 1440*60*1e3;case "week":return 10080*60*1e3}},c=(d,g="session")=>i()?l(d,g).count:0,a=(d,g,s)=>{if(!i())return false;let u=l(d,s),f=k(s),b=Date.now();return s==="session"?u.count>=g:u.impressions.filter(v=>b-v<f).length>=g},x=(d,g="session")=>{if(!i())return;let s=l(d,g),u=Date.now();s.count+=1,s.lastImpression=u,s.impressions.push(u),s.per=g;let f=u-10080*60*1e3;s.impressions=s.impressions.filter(b=>b>f),y(d,s),t.emit("experiences:impression-recorded",{experienceId:d,count:s.count,timestamp:u});};e.expose({frequency:{getImpressionCount:c,hasReachedCap:a,recordImpression:x,_registerExperience:(d,g)=>{r.set(d,g);}}}),i()&&t.on("experiences:evaluated",d=>{let g=Array.isArray(d)?d:[d];for(let s of g){let u=s.decision;if(u?.show&&u.experienceId){let f=r.get(u.experienceId)||"session";if(!r.has(u.experienceId)){let b=u.trace.find(w=>w.step==="check-frequency-cap");b?.input&&typeof b.input=="object"&&"per"in b.input&&(f=b.input.per,r.set(u.experienceId,f));}x(u.experienceId,f);}}});};function z(e,t){let n={...e};for(let r in t){if(!Object.hasOwn(t,r))continue;let i=t[r],p=n[r];if(p===void 0){n[r]=i;continue}U(p)&&U(i)&&(n[r]=z(p,i));}return n}function U(e){return e===null||typeof e!="object"?false:Object.prototype.toString.call(e)==="[object Object]"}var se=class{data={};required=new Set;constructor(e={}){this.data=JSON.parse(JSON.stringify(e));}defaults(e){this.data=z(this.data,e);}merge(e){this.data=z(e,this.data);}get(e){let t=e.split("."),n=this.data;for(let r of t){if(n==null)return;n=n[r];}return n}set(e,t){let n=e.split("."),r=n.pop();if(!r)return;let i=this.data;for(let p of n)(i[p]==null||typeof i[p]!="object")&&(i[p]={}),i=i[p];i[r]=t;}markRequired(e){e!=null&&this.required.add(e);}isRequired(e){return this.required.has(e)}getAll(){return JSON.parse(JSON.stringify(this.data))}},oe=class{subscriptions=[];on(e,t){if(typeof t!="function")throw new TypeError("handler must be a function");let n={pattern:e,compiledPattern:this.compilePattern(e),handler:t};return this.subscriptions.push(n),()=>this.off(e,t)}off(e,t){this.subscriptions=this.subscriptions.filter(n=>!(n.pattern===e&&n.handler===t));}emit(e,...t){for(let n of this.subscriptions)if(n.compiledPattern.test(e))try{n.handler(...t);}catch(r){console.error(`Error in event handler for "${e}":`,r);}}removeAllListeners(){this.subscriptions=[];}compilePattern(e){let n=this.escapeRegExp(e).replace(/\\\*/g,"(.*?)");return new RegExp(`^${n}$`)}escapeRegExp(e){return e.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&")}},ie=class{sdk;constructor(e){this.sdk=e;}expose(e){Object.assign(this.sdk,e);}},ae=class{name="";ns(e){if(this.name)throw new Error(`Namespace already set to "${this.name}". Cannot reassign to "${e}".`);this.name=e;}},L=class{configInstance;emitter;plugins=new Map;isInitialized=false;constructor(e={}){this.emitter=new oe,this.configInstance=new se(e);}use(e){let t=new ae,n=new ie(this),r={ns:t.ns.bind(t),defaults:this.configInstance.defaults.bind(this.configInstance),on:this.emitter.on.bind(this.emitter),off:this.emitter.off.bind(this.emitter),emit:this.emitter.emit.bind(this.emitter),expose:n.expose.bind(n),mustEnable:()=>{t.name&&this.configInstance.markRequired(t.name);}};return e(r,this,this.configInstance),t.name&&this.plugins.set(t.name,{namespace:t,plugin:r}),this}async init(e){if(this.isInitialized){console.warn("SDK already initialized");return}e&&this.configInstance.merge(e),this.emitter.emit("sdk:init");let t=Array.from(this.plugins.keys()).filter(n=>this.configInstance.isRequired(n));for(let n of t)if(!this.plugins.has(n))throw new Error(`Required plugin "${n}" is not registered`);this.isInitialized=true,this.emitter.emit("sdk:ready");}async destroy(){this.emitter.emit("sdk:destroy"),this.plugins.clear(),this.emitter.removeAllListeners(),this.isInitialized=false;}get(e){return this.configInstance.get(e)}set(e,t){this.configInstance.set(e,t);}on(e,t){return this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t);}emit(e,...t){this.emitter.emit(e,...t);}getAll(){return this.configInstance.getAll()}isReady(){return this.isInitialized}};var T=class{sdk;experiences=new Map;decisions=[];initialized=false;destroyed=false;constructor(t={}){this.sdk=new L({name:"experience-sdk",...t}),this.sdk.use(I),this.sdk.use(P),this.sdk.use(R),this.sdk.use(O);}async init(t){if(this.initialized){console.warn("[experiences] Already initialized");return}this.destroyed&&(this.sdk=new L({name:"experience-sdk",...t}),this.sdk.use(I),this.sdk.use(P),this.sdk.use(R),this.sdk.use(O),this.destroyed=false),t&&Object.entries(t).forEach(([n,r])=>{this.sdk.set(n,r);}),await this.sdk.init(),this.initialized=true,this.sdk.emit("experiences:ready");}register(t,n){let r={id:t,...n};this.experiences.set(t,r),r.frequency&&this.sdk.frequency?._registerExperience&&this.sdk.frequency._registerExperience(t,r.frequency.per),this.sdk.emit("experiences:registered",{id:t,experience:r});}evaluate(t){let n=Date.now(),r=A(t),i,p=[],h=[];for(let[,l]of this.experiences){let y=N(l,r);if(p.push(...y.reasons),h.push(...y.trace),y.matched){if(l.frequency&&this.sdk.frequency){let k=Date.now(),c=this.sdk.frequency.hasReachedCap(l.id,l.frequency.max,l.frequency.per);if(h.push({step:"check-frequency-cap",timestamp:k,duration:Date.now()-k,input:l.frequency,output:c,passed:!c}),c){let x=this.sdk.frequency.getImpressionCount(l.id,l.frequency.per);p.push(`Frequency cap reached (${x}/${l.frequency.max} this ${l.frequency.per})`);continue}let a=this.sdk.frequency.getImpressionCount(l.id,l.frequency.per);p.push(`Frequency cap not reached (${a}/${l.frequency.max} this ${l.frequency.per})`);}i=l;break}}let o={show:!!i,experienceId:i?.id,reasons:p,trace:h,context:r,metadata:{evaluatedAt:Date.now(),totalDuration:Date.now()-n,experiencesEvaluated:this.experiences.size}};return this.decisions.push(o),this.sdk.emit("experiences:evaluated",{decision:o,experience:i}),o}evaluateAll(t){let n=A(t),r=Array.from(this.experiences.values()).sort((o,l)=>{let y=o.priority??0;return (l.priority??0)-y}),i=[];for(let o of r){let l=Date.now(),y=N(o,n),k=y.matched,c=[...y.reasons],a=[...y.trace];if(k&&o.frequency&&this.sdk.frequency){let d=Date.now(),g=this.sdk.frequency.hasReachedCap(o.id,o.frequency.max,o.frequency.per);if(a.push({step:"check-frequency-cap",timestamp:d,duration:Date.now()-d,input:o.frequency,output:g,passed:!g}),g){let s=this.sdk.frequency.getImpressionCount(o.id,o.frequency.per);c.push(`Frequency cap reached (${s}/${o.frequency.max} this ${o.frequency.per})`),k=false;}else {let s=this.sdk.frequency.getImpressionCount(o.id,o.frequency.per);c.push(`Frequency cap not reached (${s}/${o.frequency.max} this ${o.frequency.per})`);}}let x={show:k,experienceId:o.id,reasons:c,trace:a,context:n,metadata:{evaluatedAt:Date.now(),totalDuration:Date.now()-l,experiencesEvaluated:1}};i.push(x),this.decisions.push(x);}let p=i.filter(o=>o.show),h=p.map(o=>o.experienceId&&this.experiences.get(o.experienceId)).filter(o=>o!==void 0);return this.sdk.emit("experiences:evaluated",p.map((o,l)=>({decision:o,experience:h[l]}))),i}explain(t){let n=this.experiences.get(t);if(!n)return null;let r=A(),i=N(n,r);return {show:i.matched,experienceId:t,reasons:i.reasons,trace:i.trace,context:r,metadata:{evaluatedAt:Date.now(),totalDuration:0,experiencesEvaluated:1}}}getState(){return {initialized:this.initialized,experiences:new Map(this.experiences),decisions:[...this.decisions],config:this.sdk?this.sdk.getAll():{}}}on(t,n){return this.sdk.on(t,n)}async destroy(){this.sdk&&await this.sdk.destroy(),this.destroyed=true,this.experiences.clear(),this.decisions=[],this.initialized=false;}};function A(e){return {url:e?.url??(typeof window<"u"?window.location.href:""),timestamp:Date.now(),user:e?.user,custom:e?.custom}}function N(e,t){let n=[],r=[],i=true;if(e.targeting.url){let p=Date.now(),h=M(e.targeting.url,t.url);r.push({step:"evaluate-url-rule",timestamp:p,duration:Date.now()-p,input:{rule:e.targeting.url,url:t.url},output:h,passed:h}),h?n.push("URL matches targeting rule"):(n.push("URL does not match targeting rule"),i=false);}return {matched:i,reasons:n,trace:r}}function M(e,t=""){return e.equals!==void 0?t===e.equals:e.contains!==void 0?t.includes(e.contains):e.matches!==void 0?e.matches.test(t):true}function $(e){return new T(e)}var _=$();async function B(e){return _.init(e)}function W(e,t){_.register(e,t);}function H(e){return _.evaluate(e)}function K(e){return _.evaluateAll(e)}function V(e){return _.explain(e)}function J(){return _.getState()}function Q(e,t){return _.on(e,t)}async function G(){return _.destroy()}var ce={createInstance:$,init:B,register:W,evaluate:H,evaluateAll:K,explain:V,getState:J,on:Q,destroy:G};typeof window<"u"&&(window.experiences=ce);exports.ExperienceRuntime=T;exports.bannerPlugin=O;exports.buildContext=A;exports.createInstance=$;exports.debugPlugin=P;exports.destroy=G;exports.evaluate=H;exports.evaluateAll=K;exports.evaluateExperience=N;exports.evaluateUrlRule=M;exports.explain=V;exports.frequencyPlugin=R;exports.getState=J;exports.init=B;exports.on=Q;exports.register=W;return exports;})({});//# sourceMappingURL=experience-sdk.global.js.map
|
|
186
217
|
//# sourceMappingURL=experience-sdk.global.js.map
|