@xenia-martech/sdk-js 1.1.0 → 1.2.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +50 -0
  2. package/assets/coverage.json +1 -0
  3. package/dist/{actions-CKeiofxJ.d.cts → actions-BcdlokGO.d.cts} +192 -4
  4. package/dist/{actions-CKeiofxJ.d.ts → actions-BcdlokGO.d.ts} +192 -4
  5. package/dist/api-BEPW0Uan.d.cts +88 -0
  6. package/dist/api-CktVQ6Gl.d.ts +88 -0
  7. package/dist/{chunk-U2WBBOYT.cjs → chunk-3PYPPIUM.cjs} +35 -10
  8. package/dist/chunk-3PYPPIUM.cjs.map +1 -0
  9. package/dist/{chunk-FYSEKFIY.js → chunk-7NGJC7CF.js} +249 -3
  10. package/dist/chunk-7NGJC7CF.js.map +1 -0
  11. package/dist/{chunk-WYAMPEVV.js → chunk-DWFVDNU5.js} +28 -3
  12. package/dist/chunk-DWFVDNU5.js.map +1 -0
  13. package/dist/{chunk-JEKVN7HK.cjs → chunk-IBNIRT7J.cjs} +251 -2
  14. package/dist/chunk-IBNIRT7J.cjs.map +1 -0
  15. package/dist/{chunk-TLTG3BTC.js → chunk-OUZU4Z5B.js} +2 -2
  16. package/dist/{chunk-TLTG3BTC.js.map → chunk-OUZU4Z5B.js.map} +1 -1
  17. package/dist/{chunk-5D7SJIO4.cjs → chunk-PKWANLT7.cjs} +2 -2
  18. package/dist/{chunk-5D7SJIO4.cjs.map → chunk-PKWANLT7.cjs.map} +1 -1
  19. package/dist/client/index.cjs +314 -12
  20. package/dist/client/index.cjs.map +1 -1
  21. package/dist/client/index.d.cts +2 -2
  22. package/dist/client/index.d.ts +2 -2
  23. package/dist/client/index.js +312 -13
  24. package/dist/client/index.js.map +1 -1
  25. package/dist/client/react/index.cjs +402 -16
  26. package/dist/client/react/index.cjs.map +1 -1
  27. package/dist/client/react/index.d.cts +53 -3
  28. package/dist/client/react/index.d.ts +53 -3
  29. package/dist/client/react/index.js +396 -17
  30. package/dist/client/react/index.js.map +1 -1
  31. package/dist/cms/contentful.cjs +138 -0
  32. package/dist/cms/contentful.cjs.map +1 -0
  33. package/dist/cms/contentful.d.cts +57 -0
  34. package/dist/cms/contentful.d.ts +57 -0
  35. package/dist/cms/contentful.js +134 -0
  36. package/dist/cms/contentful.js.map +1 -0
  37. package/dist/{cookie-names-QYMiEMAq.d.cts → cookie-names-BACctagz.d.cts} +1 -1
  38. package/dist/{cookie-names-8FxbGKGS.d.ts → cookie-names-CLqtmGBM.d.ts} +1 -1
  39. package/dist/index.cjs +35 -23
  40. package/dist/index.d.cts +4 -3
  41. package/dist/index.d.ts +4 -3
  42. package/dist/index.js +2 -2
  43. package/dist/next/index.cjs +41 -9
  44. package/dist/next/index.cjs.map +1 -1
  45. package/dist/next/index.d.cts +32 -3
  46. package/dist/next/index.d.ts +32 -3
  47. package/dist/next/index.js +14 -3
  48. package/dist/next/index.js.map +1 -1
  49. package/dist/{api-URhxxi4x.d.cts → personalize-content-Clc1oMYY.d.cts} +152 -69
  50. package/dist/{api-URhxxi4x.d.ts → personalize-content-Clc1oMYY.d.ts} +152 -69
  51. package/dist/server/index.cjs +29 -17
  52. package/dist/server/index.d.cts +5 -4
  53. package/dist/server/index.d.ts +5 -4
  54. package/dist/server/index.js +4 -4
  55. package/dist/xenia-sdk.iife.js +3 -3
  56. package/dist/xenia-sdk.iife.js.map +1 -1
  57. package/dist/{xenia-server-Cti94W49.d.cts → xenia-server-BWhWD0La.d.ts} +15 -1
  58. package/dist/{xenia-server-DDtQp6Wi.d.ts → xenia-server-o_wDOcei.d.cts} +15 -1
  59. package/package.json +15 -1
  60. package/dist/chunk-FYSEKFIY.js.map +0 -1
  61. package/dist/chunk-JEKVN7HK.cjs.map +0 -1
  62. package/dist/chunk-U2WBBOYT.cjs.map +0 -1
  63. package/dist/chunk-WYAMPEVV.js.map +0 -1
@@ -1,5 +1,5 @@
1
- var Xenia=(function(exports){'use strict';var qe=new Set(["banner","popup","modal","inline"]),Je=new Set(["top-left","top-right","bottom-left","bottom-right","top","bottom"]),De=new Set(["standard","spin-wheel"]),_e=new Set(["swap","hide","show","setContent","redirect",...qe]);function E(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function u(n){return typeof n=="string"?n:void 0}function ce(n){return typeof n=="number"?n:void 0}function ze(n){if(!E(n))return null;let e=u(n.type);if(!e||!_e.has(e))return null;if(e==="redirect"){let i=u(n.url);return i?{type:e,url:i}:null}if(e==="hide"||e==="show"){let i=u(n.target);return i?{type:e,target:i}:null}if(e==="swap"||e==="setContent"){let i=u(n.target);return i?{type:e,target:i,html:u(n.html),text:u(n.text)}:null}let t=E(n.cta)?{label:u(n.cta.label)??"",url:u(n.cta.url),event:u(n.cta.event)}:void 0;return {type:e,target:u(n.target),title:u(n.title),message:u(n.message),imageUrl:u(n.imageUrl),html:u(n.html),cta:t&&(t.label||t.url)?t:void 0,dismissAfterMs:ce(n.dismissAfterMs),position:Fe(n.position),widgetType:Ne(n.widgetType),segments:Xe(n.segments),formSubmit:Be(n.formSubmit),style:je(n.style),spinnerHtml:u(n.spinnerHtml),winHtml:u(n.winHtml),lossHtml:u(n.lossHtml)}}function Fe(n){let e=u(n);return e&&Je.has(e)?e:void 0}function Ne(n){let e=u(n);return e&&De.has(e)?e:void 0}function Xe(n){if(!Array.isArray(n))return;let e=[];for(let t of n){if(!E(t))continue;let i=u(t.id),r=u(t.label);!i||!r||e.push({id:i,label:r,colorHex:u(t.colorHex),isLoss:t.isLoss===true});}return e.length?e:void 0}function Be(n){if(!E(n))return;let e=u(n.mode);if(e)return {requiresResolve:n.requiresResolve===true,mode:e,flowRef:u(n.flowRef),bindingRef:u(n.bindingRef),successDisplayMs:ce(n.successDisplayMs)}}function je(n){if(!E(n))return;let e={hideCloseButton:n.hideCloseButton===true,hideOverlay:n.hideOverlay===true};return e.hideCloseButton||e.hideOverlay?e:void 0}function U(n){let e;if(Array.isArray(n)?e=n:E(n)&&Array.isArray(n.xeniaActions)&&(e=n.xeniaActions),!Array.isArray(e))return [];let t=[];for(let i of e){let r=ze(i);r&&t.push(r);}return t}var Ue="https://engine.xeniamartech.com/xenia";function T(){return typeof window<"u"&&typeof document<"u"}function ue(n,e){if(!e||Object.keys(e).length===0)return n;let t=new URLSearchParams(e),i=n.includes("?")?"&":"?";return `${n}${i}${t.toString()}`}function pe(n){return new Promise(e=>setTimeout(e,n))}var x=class extends Error{constructor(t,i,r){super(r??`Request failed with status ${t}`);this.status=t;this.data=i;this.name="HttpError";}status;data},K=class extends Error{constructor(t){super(`Circuit open for ${t}: failing fast until the cooldown passes`);this.endpoint=t;this.name="CircuitOpenError";}endpoint},H=new Map,W=class{baseUrl;defaultHeaders;timeout;retry;debug;breaker;constructor(e){this.baseUrl=(e.baseUrl??Ue).replace(/\/+$/,""),this.defaultHeaders=e.defaultHeaders??{},this.timeout=e.timeout??8e3,this.retry={attempts:e.retry?.attempts??2,baseDelayMs:e.retry?.baseDelayMs??300},this.debug=e.debug??false;let t=e.circuitBreaker===true?{}:e.circuitBreaker||null;this.breaker=t&&{failureThreshold:t.failureThreshold??3,cooldownMs:t.cooldownMs??3e4};}async request(e){if(!this.breaker)return this.send(e);let t=ue(this.baseUrl+e.path,e.query),i=H.get(t)??{failures:0,openedAt:0};if(i.openedAt){if(Date.now()-i.openedAt<this.breaker.cooldownMs)throw new K(t);i.openedAt=0,i.failures=this.breaker.failureThreshold-1;}try{let r=await this.send(e);return H.delete(t),r}catch(r){throw r instanceof x&&!this.isRetryableStatus(r.status)?(H.delete(t),r):(i.failures+=1,i.failures>=this.breaker.failureThreshold&&(i.openedAt=Date.now(),this.log(`circuit opened for ${e.path} after ${i.failures} failures`)),H.set(t,i),r)}}async send(e){let t=ue(this.baseUrl+e.path,e.query),i=e.method??"GET",r={"Content-Type":"application/json",...this.defaultHeaders,...e.headers},s=e.body!==void 0?JSON.stringify(e.body):void 0,o=e.timeout??this.timeout,a=e.noRetry?1:(e.retry?.attempts??this.retry.attempts)+1,l=e.retry?.baseDelayMs??this.retry.baseDelayMs,c;for(let d=0;d<a;d++)try{let p=await this.fetchWithTimeout(t,{method:i,headers:r,body:s,...e.keepalive?{keepalive:!0}:{}},o),m=await this.parseBody(p);if(p.ok)return {response:p,data:m};if(this.isRetryableStatus(p.status)&&d<a-1){let k=this.retryAfterMs(p,l,d);this.log(`retrying ${e.path} after ${k}ms (status ${p.status})`),await pe(k);continue}throw new x(p.status,m)}catch(p){if(c=p,p instanceof x)throw p;if(d<a-1){let m=l*2**d;this.log(`retrying ${e.path} after ${m}ms (network error)`),await pe(m);continue}}throw c instanceof Error?c:new Error("Request failed")}async fetchWithTimeout(e,t,i){let r=new AbortController,s=setTimeout(()=>r.abort(),i);try{return await fetch(e,{...t,signal:r.signal})}catch(o){throw o instanceof Error&&o.name==="AbortError"?new Error(`Request timeout after ${i}ms`,{cause:o}):o}finally{clearTimeout(s);}}async parseBody(e){let t=await e.text().catch(()=>"");if(!t)return null;try{return JSON.parse(t)}catch{return t}}isRetryableStatus(e){return e===429||e>=500&&e<=599}retryAfterMs(e,t,i){let r=e.headers.get("Retry-After");if(r){let s=Number(r);if(!Number.isNaN(s))return s*1e3}return t*2**i}log(e){this.debug&&console.warn(`[xenia] ${e}`);}};function Ke(n){try{let e=n.split(".")[1];if(!e)return;let t=JSON.parse(atob(e.replace(/-/g,"+").replace(/_/g,"/")));return typeof t.exp=="number"?t.exp*1e3:void 0}catch{return}}var V=class{config;cached=null;inflight=null;constructor(e){this.config=e;}hasSource(){return !!(this.config.token||this.config.getToken)}getToken=async()=>{if(this.config.token&&!this.config.getToken)return this.config.token;let e=Date.now();if(this.cached&&this.cached.expiresAt>e)return this.cached.token;if(this.inflight)return this.inflight;if(!this.config.getToken)throw new Error("No token source: set config.token or config.getToken.");return this.inflight=Promise.resolve(this.config.getToken()).then(t=>{let i=Ke(t),r=i?i-3e4:e+5*6e4;return this.cached={token:t,expiresAt:r},t}).finally(()=>{this.inflight=null;}),this.inflight}};function he(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Qe(n){return n!==void 0&&he(n)?n:void 0}function w(n){let e={};for(let[t,i]of Object.entries(n))i!==void 0&&(e[t]=i);return e}var L=class{http;tenantId;environmentKey;tokenProvider;constructor(e){this.tenantId=e.tenantId,this.environmentKey=e.environmentKey,this.tokenProvider=new V(e),this.http=new W({baseUrl:e.baseUrl,defaultHeaders:e.headers,timeout:e.timeout,retry:e.retry,circuitBreaker:e.circuitBreaker,debug:e.debug});}tenantHeaders(){return {"X-Tenant-Id":this.tenantId,"X-Environment":this.environmentKey}}async authHeaders(){let e=this.tenantHeaders();if(!this.tokenProvider.hasSource())return e;let t=await this.tokenProvider.getToken();return t&&(e.Authorization=`Bearer ${t}`),e}async webhook(e,t,i="POST"){let{response:r,data:s}=await this.http.request({method:i,path:"/flow",query:{id:e},headers:await this.authHeaders(),body:i==="POST"?t??{}:void 0,noRetry:true});return {status:r.status,body:s,actions:U(s),receivedAt:Date.now()}}async submitWidget(e,t){let{response:i,data:r}=await this.http.request({method:"POST",path:"/widget-submissions",query:{ref:e},headers:await this.authHeaders(),body:t??{},noRetry:true}),s=he(r)?r:{};return {status:i.status,body:r,actions:U(r),prize:Qe(s.prize),alreadyPlayed:s.alreadyPlayed===true,dispatched:s.dispatched===true,dispatchError:typeof s.dispatchError=="string"?s.dispatchError:void 0,widgetType:typeof s.widgetType=="string"?s.widgetType:void 0,receivedAt:Date.now()}}async sendEvents(e,t){let{data:i}=await this.http.request({method:"POST",path:"/api/events/v1",headers:await this.authHeaders(),body:{events:e},keepalive:t?.keepalive});return i}async identify(e){let{data:t}=await this.http.request({method:"POST",path:"/api/events/v1/identify",headers:await this.authHeaders(),body:e});return t}async consent(e,t){let{data:i}=await this.http.request({method:"POST",path:"/api/events/v1/consent",headers:await this.authHeaders(),body:w({xeniaVisitorId:e,analytics:t.analytics===true,marketing:t.marketing===true,personalization:t.personalization===true,consentSource:t.consentSource,consentVersion:t.consentVersion})});return i}async resolve(e,t={}){let{data:i}=await this.http.request({method:"POST",path:"/api/personalization/resolve",query:t.merge!==void 0?{merge:String(t.merge)}:void 0,headers:await this.authHeaders(),body:w({contentKey:e,data:t.data,locale:t.locale})});return i}async resolveBatch(e,t={}){let{data:i}=await this.http.request({method:"POST",path:"/api/personalization/resolve-batch",query:t.merge!==void 0?{merge:String(t.merge)}:void 0,headers:await this.authHeaders(),body:w({items:e,data:t.data,locale:t.locale})});return i}};var $="xenia";function Q(n=$){return `${n||$}_vid`}function me(n=$){return `${n||$}_consent`}function fe(n,e,t=365){return `${me(e)}=${encodeURIComponent(JSON.stringify(n))}; path=/; max-age=${Math.floor(t*86400)}; SameSite=Lax`}var Ge=new Set(["eventId","eventType","journeyId","deviceId","visitorId","customerId","email","utmSource","utmMedium","utmCampaign","utmContent","utmId","url","referrer","path","query"]);function ge(n){let e={};for(let[t,i]of Object.entries(n))i!==void 0&&(e[t]=i);return e}function ye(n){let e={},t={};if(n.props)for(let[r,s]of Object.entries(n.props))s!==void 0&&(Ge.has(r)?t[r]=s:e[r]=s);return {...e,...t,...ge(n.context??{}),...ge(n.identity??{}),eventId:n.eventId,...n.eventType?{eventType:n.eventType}:{},...n.journeyId?{journeyId:n.journeyId}:{}}}var A="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ye(n){let e=new Uint8Array(n);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<n;t++)e[t]=Math.floor(Math.random()*256);return e}function g(n=Date.now()){let e="",t=n;for(let s=9;s>=0;s--)e=A[t%32]+e,t=Math.floor(t/32);let i=Ye(16),r="";for(let s=0;s<16;s++)r+=A[i[s]%32];return e+r}var G=26;function ve(n){if(n.length<=G)return n;let e="";for(let i of [2166136261,16777619]){let r=i>>>0;for(let s=0;s<n.length;s++)r^=n.charCodeAt(s),r=Math.imul(r,16777619)>>>0,e+=A[r%32];}let t="";for(let i=0;i<G;i++){let r=i+1;for(let s=i;s<e.length;s+=G)r=r*31+A.indexOf(e[s])>>>0;t+=A[r%32];}return t}var q=class{map=new Map;set(e,t){this.map.set(e,t);}get(e){return this.map.get(e)}keys(){return [...this.map.keys()]}clear(){this.map.clear();}},J=class{nsKey;constructor(e="xenia"){this.nsKey=`${e}_responses`;}read(){try{let e=localStorage.getItem(this.nsKey);return e?JSON.parse(e):{}}catch{return {}}}write(e){try{localStorage.setItem(this.nsKey,JSON.stringify(e));}catch{}}set(e,t){let i=this.read();i[e]=t,this.write(i);}get(e){return this.read()[e]}keys(){return Object.keys(this.read())}clear(){try{localStorage.removeItem(this.nsKey);}catch{}}};var D=class{queue=[];send;batchSize;flushIntervalMs;maxQueueSize;debug;timer=null;flushing=false;listenersAttached=false;allowed=false;onPageHide=()=>this.flushOnUnload();onVisibilityChange=()=>{document.visibilityState==="hidden"&&this.flushOnUnload();};constructor(e){this.send=e.send,this.batchSize=e.batchSize??20,this.flushIntervalMs=e.flushIntervalMs??3e3,this.maxQueueSize=e.maxQueueSize??200,this.debug=e.debug??false;}start(){this.allowed=true,!(this.timer||typeof window>"u")&&(this.timer=setInterval(()=>{this.flush();},this.flushIntervalMs),window.addEventListener("pagehide",this.onPageHide),document.addEventListener("visibilitychange",this.onVisibilityChange),this.listenersAttached=true);}stop(){this.allowed=false,this.timer&&clearInterval(this.timer),this.timer=null,this.listenersAttached&&(window.removeEventListener("pagehide",this.onPageHide),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.listenersAttached=false);}enqueue(e){this.queue.length>=this.maxQueueSize&&this.queue.shift(),this.queue.push(e),this.allowed&&this.queue.length>=this.batchSize&&this.flush();}async sendImmediate(e){try{await this.send([e],{keepalive:!0});}catch(t){this.isPermanentFailure(t)||this.requeue([e]),this.debug&&console.warn("[xenia] immediate send failed",t);}}async flush(){if(!this.allowed||this.flushing||this.queue.length===0)return;this.flushing=true;let e=this.queue.splice(0,this.batchSize);try{await this.send(e);}catch(t){this.isPermanentFailure(t)||this.requeue(e),this.debug&&console.warn("[xenia] analytics flush failed",t);}finally{this.flushing=false;}}isPermanentFailure(e){return e instanceof x&&e.status>=400&&e.status<500}flushOnUnload(){if(!this.allowed||this.queue.length===0)return;let e=this.queue.splice(0,this.queue.length);this.send(e,{keepalive:true}).catch(()=>{});}requeue(e){let t=this.maxQueueSize-this.queue.length;t<=0||this.queue.unshift(...e.slice(0,t));}};var Ze=new Set(["click","view-port","page-load"]);function be(n){let e=n.indexOf("&");if(e===-1)return null;let t=n.slice(0,e),i=n.slice(e+1);return !t||!Ze.has(i)?null:{eventId:t,interactionType:i}}function xe(n){let e=n.getAttribute("data-xenia-content-key");if(!e)return null;let t=n.getAttribute("data-xenia-content-entry-id"),i=n.getAttribute("data-xenia-base-entry-id"),r=n.getAttribute("data-xenia-personalized");return {contentKey:e,contentEntryId:t??void 0,baseEntryId:i??void 0,personalized:r==null?void 0:r==="true"}}var _=class{opts;throttleTimers=new Map;observers=new Map;slotObservers=new Map;triggered=new Set;slotImpressed=new Set;clickHandler=null;mutationObserver=null;constructor(e){this.opts=e;}start(){this.setupClicks(),this.scan(document),this.setupMutations();}stop(){this.clickHandler&&document.removeEventListener("click",this.clickHandler),this.clickHandler=null,this.mutationObserver?.disconnect(),this.mutationObserver=null,this.observers.forEach(e=>e.disconnect()),this.observers.clear(),this.slotObservers.forEach(e=>e.disconnect()),this.slotObservers.clear(),this.throttleTimers.clear(),this.triggered.clear(),this.slotImpressed.clear();}attr(){return `data-${this.opts.prefix}`}throttled(e){if(this.opts.throttleMs<=0)return false;let t=Date.now(),i=this.throttleTimers.get(e)??0;return t-i>=this.opts.throttleMs?(this.throttleTimers.set(e,t),false):true}setupClicks(){let e=this.attr();this.clickHandler=t=>{let i=t.target;if(!i)return;let r=i.closest(`[${e}]`);if(r){let s=r.getAttribute(e),o=s?be(s):null;o&&o.interactionType==="click"&&!this.throttled(r)&&this.opts.fire(o.eventId,"click");}if(this.opts.fireSlot){let s=i.closest("[data-xenia-slot]");if(s){let o=xe(s);o&&!this.throttled(s)&&this.opts.fireSlot("click",o);}}},document.addEventListener("click",this.clickHandler);}observeSlot(e){if(!this.opts.fireSlot||this.slotObservers.has(e))return;let t=xe(e);if(!t)return;let i=this.opts.fireSlot,{threshold:r,rootMargin:s}=this.opts.viewport,o=new IntersectionObserver(a=>{for(let l of a)l.isIntersecting&&(this.slotImpressed.has(e)||(this.slotImpressed.add(e),i("impression",t),o.disconnect(),this.slotObservers.delete(e)));},{threshold:r,rootMargin:s});o.observe(e),this.slotObservers.set(e,o);}observeViewport(e,t){if(this.observers.has(e))return;let{threshold:i,rootMargin:r,triggerOnce:s}=this.opts.viewport,o=new IntersectionObserver(a=>{for(let l of a)l.isIntersecting&&(s&&this.triggered.has(e)||this.throttled(e)||(this.opts.fire(t,"view-port"),s&&(this.triggered.add(e),o.disconnect(),this.observers.delete(e))));},{threshold:i,rootMargin:r});o.observe(e),this.observers.set(e,o);}handleElement(e){let t=e.getAttribute(this.attr());if(!t)return;let i=be(t);i&&(i.interactionType==="view-port"?this.observeViewport(e,i.eventId):i.interactionType==="page-load"&&this.opts.fire(i.eventId,"page-load"));}scan(e){e.querySelectorAll(`[${this.attr()}]`).forEach(t=>this.handleElement(t)),this.opts.fireSlot&&e.querySelectorAll("[data-xenia-slot]").forEach(t=>this.observeSlot(t));}setupMutations(){this.mutationObserver=new MutationObserver(e=>{for(let t of e)for(let i of t.addedNodes){if(i.nodeType!==Node.ELEMENT_NODE)continue;let r=i;this.handleElement(r),this.opts.fireSlot&&r.matches("[data-xenia-slot]")&&this.observeSlot(r),this.scan(r);}}),this.mutationObserver.observe(document.body,{childList:true,subtree:true});}};var et=1800*1e3,z=class{prefix;cookie;deviceId=null;journeyId=null;sessionId=null;constructor(e="xenia",t=true){this.prefix=e,this.cookie=tt(t);}key(e){return `${this.prefix}_${e}`}cookieName(){return Q(this.prefix)}writeVisitorCookie(e){if(!(!this.cookie||!e))try{if(typeof document>"u")return;let t=[`${this.cookieName()}=${encodeURIComponent(e)}`,"path=/",`max-age=${Math.floor(this.cookie.maxAgeDays*86400)}`,`SameSite=${this.cookie.sameSite}`];this.cookie.domain&&t.push(`domain=${this.cookie.domain}`),this.cookie.secure&&t.push("Secure"),document.cookie=t.join("; ");}catch{}}async resolveDeviceId(){if(this.deviceId)return this.writeVisitorCookie(this.getVisitorId()??this.deviceId),this.deviceId;let e=this.key("device_id");try{let i=localStorage.getItem(e);if(i)return this.deviceId=i,this.writeVisitorCookie(this.getVisitorId()??i),i}catch{}let t=await this.mediaDeviceId();t||(t=await this.fingerprint()),this.deviceId=t;try{localStorage.setItem(e,t);}catch{}return this.writeVisitorCookie(this.getVisitorId()??t),t}getDeviceId(){return this.deviceId}async mediaDeviceId(){try{if(!navigator.mediaDevices?.enumerateDevices)return null;let e=await navigator.mediaDevices.enumerateDevices();return (e.find(i=>i.kind==="videoinput"&&i.deviceId)||e.find(i=>i.kind==="audioinput"&&i.deviceId)||e.find(i=>i.kind==="audiooutput"&&i.deviceId))?.deviceId||null}catch{return null}}async fingerprint(){let e=[navigator.userAgent,navigator.language,screen.width,screen.height,screen.colorDepth,new Date().getTimezoneOffset()].join("|"),t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(t)).map(i=>i.toString(16).padStart(2,"0")).join("")}identify(e){if(e){try{localStorage.setItem(this.key("visitor_id"),e);}catch{}this.writeVisitorCookie(e);}}getVisitorId(){try{return localStorage.getItem(this.key("visitor_id"))}catch{return null}}setCustomerId(e){try{e?localStorage.setItem(this.key("customer_id"),e):localStorage.removeItem(this.key("customer_id"));}catch{}}getCustomerId(){try{return localStorage.getItem(this.key("customer_id"))}catch{return null}}setEmail(e){try{e?localStorage.setItem(this.key("email"),e):localStorage.removeItem(this.key("email"));}catch{}}getEmail(){try{return localStorage.getItem(this.key("email"))}catch{return null}}getSessionId(){let e=this.key("session_id"),t=this.key("session_last_activity"),i=Date.now();try{let r=sessionStorage.getItem(e),s=Number(sessionStorage.getItem(t)),a=r&&Number.isFinite(s)&&i-s<et?r:g(i);return sessionStorage.setItem(e,a),sessionStorage.setItem(t,String(i)),this.sessionId=a,a}catch{return this.sessionId||(this.sessionId=g(i)),this.sessionId}}setJourneyId(e){this.journeyId=e&&e.trim()?e.trim():null;}getJourneyId(){return this.journeyId||this.utmParam("utm_id")||null}utmParam(e){try{let t=new URLSearchParams(window.location.search).get(e);if(t){try{sessionStorage.setItem(this.key(e),t);}catch{}return t}try{return sessionStorage.getItem(this.key(e))}catch{}}catch{}return null}collectContext(){let e={},t=this.utmParam("utm_source"),i=this.utmParam("utm_medium"),r=this.utmParam("utm_campaign"),s=this.utmParam("utm_content"),o=this.utmParam("utm_id");t&&(e.utmSource=t),i&&(e.utmMedium=i),r&&(e.utmCampaign=r),s&&(e.utmContent=s),o&&(e.utmId=o);try{e.url=window.location.href,e.path=window.location.pathname,e.query=Object.fromEntries(new URLSearchParams(window.location.search)),document.referrer&&(e.referrer=document.referrer);}catch{}let a=this.getVisitorId();return a&&(e.visitorId=a),e}};function tt(n){if(n===false)return null;let e=n===true?{}:n,t=e.sameSite??"Lax",i=t==="None"?true:e.secure??false;return {sameSite:t,secure:i,maxAgeDays:e.maxAgeDays??365,domain:e.domain}}function F(n){let e={};return n.querySelectorAll("[data-xenia-field]").forEach(t=>{let i=t.getAttribute("data-xenia-field");i&&(e[i]=nt(t));}),e}function nt(n){return n instanceof HTMLInputElement?n.type==="checkbox"?n.checked?n.value||"on":"":n.type==="radio"?n.checked?n.value:"":n.value:n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement?n.value:n.textContent?.trim()??""}function we(n,e){n&&(n instanceof HTMLButtonElement||n instanceof HTMLInputElement||n instanceof HTMLSelectElement||n instanceof HTMLTextAreaElement||n instanceof HTMLFieldSetElement?n.disabled=e:e?n.setAttribute("aria-disabled","true"):n.removeAttribute("aria-disabled"));}function Y(n,e){let t=n.querySelector("[data-xenia-error]");t&&(t.textContent=e);}var Se="xenia-form-submit-style";function it(n){if(n.querySelector(`#${Se}`))return;let e=document.createElement("style");e.id=Se,e.textContent="@keyframes xenia-submit-spin{to{transform:rotate(360deg)}}[data-xenia-submitting]::after{content:'';display:inline-block;width:0.85em;height:0.85em;margin-left:0.5em;vertical-align:-0.15em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:xenia-submit-spin 0.6s linear infinite}",n.prepend(e);}function Z(n,e){n&&(e?n.setAttribute("data-xenia-submitting",""):n.removeAttribute("data-xenia-submitting"));}function rt(n,e){if(!e)return;let t=n instanceof ShadowRoot?n.host:n;t instanceof HTMLElement?(t.style.transition="opacity 220ms ease, transform 220ms ease",t.style.opacity="0",t.style.transform="scale(0.96)",window.setTimeout(e,220)):e();}var st=900;function ot(n,e){let t=n.querySelector("[data-xenia-success]");return t?(t instanceof HTMLElement?t.hidden=false:t.removeAttribute("hidden"),e?e.hidden=true:n.querySelectorAll("[data-xenia-field], [data-xenia-submit]").forEach(i=>{i.hidden=true;}),true):false}function Ee(n,e,t){let i=n.querySelector("form"),r=false;it(n);let s=(o,a)=>{if(r)return;if(!e.formSubmit){Y(n,"This form isn't connected yet.");return}r=true,Y(n,""),we(o,true),Z(o,true);let l=Date.now(),c=e.formSubmit.successDisplayMs??st;t.submitWidgetForm(a).then(()=>{Z(o,false),ot(n,i);let d=Math.max(0,c-(Date.now()-l));window.setTimeout(()=>rt(n,t.dismiss),d);}).catch(()=>{Z(o,false),we(o,false),Y(n,"Something went wrong. Please try again.");}).finally(()=>{r=false;});};i&&i.addEventListener("submit",o=>{o.preventDefault();let a={};new FormData(i).forEach((c,d)=>{typeof c=="string"&&(a[d]=c);});let l=o.submitter??i.querySelector('[type="submit"], button:not([type])');s(l,{...F(n),...a});}),n.querySelectorAll("[data-xenia-submit]").forEach(o=>{i?.contains(o)||o.addEventListener("click",()=>s(o,F(n)));});}function ee(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ce(n){return ee(n).replace(/"/g,"&quot;")}function N(n,e){e&&n.querySelectorAll(".xenia-close, [data-xenia-close], [class*='close' i], [id*='close' i], [class*='backdrop' i], [id*='backdrop' i]").forEach(i=>{i.removeAttribute("onclick"),i.addEventListener("click",e);}),n.querySelectorAll("[class*='backdrop' i], [id*='backdrop' i]").forEach(t=>{t instanceof HTMLElement&&t.children.length===0&&!t.textContent?.trim()&&(t.style.opacity="0.5");});}var C=260,M=C/2,R=C/2,Re=["#7c3aed","#2563eb","#059669","#d97706","#dc2626","#0891b2"],at="transform 3.2s cubic-bezier(0.15, 0.85, 0.25, 1)",lt='<div class="xenia-wheel-pointer" aria-hidden="true"></div>',ne=320,ke=`opacity ${ne}ms ease, transform ${ne}ms ease`,dt=900,te=(n,e)=>`perspective(${dt}px) translateZ(${e}px) scale(${n})`;function ie(n,e){let t=n*Math.PI/180;return {x:R+e*Math.sin(t),y:R-e*Math.cos(t)}}function ct(n,e){let t=ie(n,M),i=ie(e,M),r=e-n>180?1:0;return `M ${R},${R} L ${t.x},${t.y} A ${M},${M} 0 ${r} 1 ${i.x},${i.y} Z`}function ut(n,e,t=0){if(e<=0)return 0;let i=360/e,s=(360-(n*i+i/2))%360;return t*360+s}function Te(n,e){let t=n?Array.from(n.children):[],i=e?Array.from(e.children):[];e&&(e.hidden=false),i.forEach(r=>{r instanceof HTMLElement&&(r.style.transition="none",r.style.opacity="0",r.style.transform=te(.94,-60));}),i.forEach(r=>{r instanceof HTMLElement&&r.offsetHeight;}),Ae(()=>{t.forEach(r=>{r instanceof HTMLElement&&(r.style.transition=ke,r.style.opacity="0",r.style.transform=te(.94,-60));}),i.forEach(r=>{r instanceof HTMLElement&&(r.style.transition=ke,r.style.opacity="1",r.style.transform=te(1,0));});}),n&&setTimeout(()=>{n.hidden=true;},ne);}function Ae(n){typeof requestAnimationFrame=="function"?requestAnimationFrame(n):setTimeout(n,0);}function pt(n){let t=360/(n.length||1),i=n.map((r,s)=>{let o=s*t,a=o+t,l=r.colorHex||Re[s%Re.length],c=o+t/2,d=ie(c,M*.62);return `<path d="${ct(o,a)}" fill="${Ce(l)}" stroke="#fff" stroke-width="1"></path><text x="${d.x}" y="${d.y}" fill="#fff" font-size="12" text-anchor="middle" transform="rotate(${c} ${d.x} ${d.y})">${ee(r.label)}</text>`}).join("");return `<svg class="xenia-wheel-svg" viewBox="0 0 ${C} ${C}" width="${C}" height="${C}"><g class="xenia-wheel-dial">${i}</g><circle class="xenia-wheel-hub" cx="${R}" cy="${R}" r="6"></circle></svg>`}var Me={html(n){return `<div class="xenia-spin-wheel"><div data-xenia-wheel-face>${n.spinnerHtml??""}</div><div class="xenia-widget-result" data-xenia-wheel-result hidden>${n.winHtml??""}</div><div class="xenia-widget-result" data-xenia-wheel-loss hidden>${n.lossHtml??""}</div></div>`},wire(n,e,t){N(n,t.dismiss);let i=e.segments??[],r=n.querySelector("[data-xenia-wheel-face]"),s=n.querySelector("[data-xenia-spin]"),o=n.querySelector("[data-xenia-wheel-result]"),a=n.querySelector("[data-xenia-wheel-loss]"),l=n.querySelector("[data-xenia-error]"),c=n.querySelector("[data-xenia-wheel-slot]");c&&c.insertAdjacentHTML("afterbegin",pt(i)+lt);let d=n.querySelector(".xenia-wheel-dial");if(!s||!e.formSubmit)return;n.querySelectorAll("[data-xenia-wheel-cta]").forEach(v=>{v.addEventListener("click",()=>t.fireCta());});let p=(v,f,b)=>{n.querySelectorAll("[data-xenia-wheel-prize]").forEach(S=>{S.textContent=v;});let O=f?a:o,I=f?o:a;I&&(I.hidden=true),Te(r,O),b||(k=true,n.querySelectorAll("[data-xenia-spin-again]").forEach(S=>{S.hidden=true;}));},m=false,k=false;n.querySelectorAll("[data-xenia-spin-again]").forEach(v=>{v.addEventListener("click",()=>{if(k)return;let f=o&&!o.hidden?o:a&&!a.hidden?a:null;f&&(m=false,s.disabled=false,l&&(l.textContent=""),Te(f,r));});}),s.addEventListener("click",()=>{if(m)return;m=true,s.disabled=true,l&&(l.textContent="");let v=F(n);t.submitWidgetForm(v).then(f=>{let b=i.findIndex($e=>$e.id===f.prize?.segmentId),O=f.prize?.label??i[b]?.label??"",I=b>=0&&!!i[b]?.isLoss,S=f.alreadyPlayed!==true;if(b<0||!d){p(O,I,S);return}let We=3+Math.floor(Math.random()*3),Ve=ut(b,i.length||1,We),le=/rotate\(([-\d.]+)deg\)/.exec(d.style.transform),Le=le?parseFloat(le[1]):0;d.style.transition="none",d.style.transform=`rotate(${Le%360}deg)`,d.getBoundingClientRect(),d.style.transition=at;let de=()=>{d.removeEventListener("transitionend",de),p(O,I,S);};d.addEventListener("transitionend",de),Ae(()=>{d.style.transform=`rotate(${Ve}deg)`;});}).catch(()=>{m=false,s.disabled=false,l&&(l.textContent="Something went wrong. Please try again.");});});}};var re={"spin-wheel":Me};function j(n,e=document){if(!n)return null;let t=e.querySelector(`[data-xenia-slot="${ht(n)}"]`);if(t)return t;try{return e.querySelector(n)}catch{return null}}function ht(n){let e=window;return e.CSS?.escape?e.CSS.escape(n):n.replace(/["\\]/g,"\\$&")}function X(n,e){let t=j(n);return t?(e.html!==void 0?t.innerHTML=e.html:e.text!==void 0&&(t.textContent=e.text),t.removeAttribute("hidden"),true):false}function se(n){let e=j(n);return !e||!(e instanceof HTMLElement)?false:(e.dataset.xeniaHidden="1",e.style.setProperty("display","none","important"),true)}function oe(n){let e=j(n);return !e||!(e instanceof HTMLElement)?false:(delete e.dataset.xeniaHidden,e.style.removeProperty("display"),true)}var mt=new Set(["banner","popup","modal","inline"]);function ft(n){return mt.has(n)}var B=class{host=null;shadow=null;onCta;messageTemplate;messageStyles;messageComponent;submitWidgetFormFn;mounted=new Map;constructor(e,t){this.onCta=e,this.messageTemplate=t?.messageTemplate,this.messageStyles=t?.messageStyles,this.messageComponent=t?.messageComponent,this.submitWidgetFormFn=t?.submitWidgetForm;}apply(e){let t=0;for(let i of e)this.applyOne(i)&&t++;return t}applyOne(e){switch(e.type){case "swap":return X(e.target,{html:e.html,text:e.text});case "setContent":return X(e.target,{html:e.html,text:e.text});case "hide":return se(e.target);case "show":return oe(e.target);case "redirect":try{return window.location.assign(e.url),!0}catch{return false}default:return ft(e.type)?this.renderMessage(e):false}}destroy(){this.mounted.forEach(e=>e()),this.mounted.clear(),this.host?.remove(),this.host=null,this.shadow=null;}ensureShadow(){if(this.shadow)return this.shadow;let e=document.createElement("div");e.setAttribute("data-xenia-ui",""),document.body.appendChild(e);let t=e.attachShadow({mode:"open"});return t.appendChild(this.styleEl()),this.host=e,this.shadow=t,t}styleEl(){let e=document.createElement("style");return e.textContent=this.messageStyles?`${Oe}
2
- ${this.messageStyles}`:Oe,e}renderMessage(e){let t=e.html===void 0&&!!this.messageComponent;if(e.type==="inline"){if(!e.target)return false;let c=j(e.target);return c?(this.unmount(c),t?(c.innerHTML="",this.mountComponent(c,e,"inline",()=>this.unmount(c))):(c.innerHTML=this.cardHtml(e,"inline"),this.wireCard(c,e)),true):false}let i=this.ensureShadow(),r=document.createElement("div"),s=this.positionClass(e.type,e.position),o=e.html!==void 0?" xenia-custom-bg":"",a=e.style?.hideOverlay?" xenia-no-overlay":"";r.className=`xenia-msg xenia-${e.type}${s?` ${s}`:""}${o}${a}`,i.appendChild(r);let l=()=>{this.unmount(r),r.remove();};if(t?this.mountComponent(r,e,e.type,l):(r.innerHTML=this.cardHtml(e,e.type),this.wireCard(r,e,l)),e.dismissAfterMs&&e.dismissAfterMs>0){let c=setTimeout(l,e.dismissAfterMs),d=()=>clearTimeout(c);r.addEventListener("click",d,{once:true}),r.addEventListener("focusin",d,{once:true});}return true}mountComponent(e,t,i,r){if(!this.messageComponent)return;let s={action:t,variant:i,close:r,fireCta:()=>{t.cta?.event&&this.onCta?.(t.cta.event,t.cta),t.cta?.url&&window.location.assign(t.cta.url),r();}},o=this.messageComponent(e,s);o&&this.mounted.set(e,o);}unmount(e){let t=this.mounted.get(e);t&&(t(),this.mounted.delete(e));}positionClass(e,t){return e==="popup"?`xenia-pos-${t==="top-left"||t==="top-right"||t==="bottom-left"?t:"bottom-right"}`:e==="banner"?`xenia-pos-${t==="top"?"top":"bottom"}`:""}cardHtml(e,t){let i=e.widgetType?re[e.widgetType]:void 0;if(i)return i.html(e,t);if(e.html!==void 0)return gt(e.html,t);if(this.messageTemplate){let c={action:e,variant:t,escapeHtml:P,escapeAttr:Pe};return this.messageTemplate(c)}let r=e.imageUrl?`<img class="xenia-img" src="${Pe(e.imageUrl)}" alt="" />`:"",s=e.title?`<div class="xenia-title">${P(e.title)}</div>`:"",o=e.message?`<div class="xenia-body">${P(e.message)}</div>`:"",a=e.cta?`<button class="xenia-cta" type="button">${P(e.cta.label)}</button>`:"";return `<div class="xenia-card">${t==="inline"?"":'<button class="xenia-close" type="button" aria-label="Close">\xD7</button>'}${r}<div class="xenia-content">${s}${o}${a}</div></div>`}wireCard(e,t,i){let r=t.widgetType?re[t.widgetType]:void 0;if(r){r.wire(e,t,this.buildWidgetCtx(t,i));return}N(e,i);let s=e.querySelector(".xenia-cta, [data-xenia-cta]");s&&t.cta&&s.addEventListener("click",()=>{t.cta?.event&&this.onCta?.(t.cta.event,t.cta),t.cta?.url&&window.location.assign(t.cta.url),i?.();}),Ee(e,t,this.buildWidgetCtx(t,i));}buildWidgetCtx(e,t){let i=g();return {dismiss:t,fireCta:()=>{e.cta?.event&&this.onCta?.(e.cta.event,e.cta),e.cta?.url&&window.location.assign(e.cta.url),t?.();},submitWidgetForm:r=>!e.formSubmit||!this.submitWidgetFormFn?Promise.reject(new Error("xenia: this action has no formSubmit config, or no submitWidgetForm handler is wired (construct the ActionRenderer via XeniaClient to get one)")):this.submitWidgetFormFn(e.formSubmit,r,{idempotencyKey:i})}}};function gt(n,e){return e==="modal"?`<div class="xenia-custom-html">${n}</div>`:`<div class="xenia-custom-html"><style>.xenia-custom-html{position:relative}.xenia-custom-html>*{position:static!important;inset:auto!important;top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}</style>${n}</div>`}function P(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Pe(n){return P(n).replace(/"/g,"&quot;")}var Oe=`
1
+ var Xenia=(function(exports){'use strict';var je=new Set(["banner","popup","modal","inline"]),Be=new Set(["top-left","top-right","bottom-left","bottom-right","top","bottom"]),Ue=new Set(["standard","spin-wheel"]),Ke=new Set(["swap","hide","show","setContent","redirect",...je]);function I(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function f(n){return typeof n=="string"?n:void 0}function fe(n){return typeof n=="number"?n:void 0}function Qe(n){if(!I(n))return null;let e=f(n.type);if(!e||!Ke.has(e))return null;if(e==="redirect"){let i=f(n.url);return i?{type:e,url:i}:null}if(e==="hide"||e==="show"){let i=f(n.target);return i?{type:e,target:i}:null}if(e==="swap"||e==="setContent"){let i=f(n.target);return i?{type:e,target:i,html:f(n.html),text:f(n.text)}:null}let t=I(n.cta)?{label:f(n.cta.label)??"",url:f(n.cta.url),event:f(n.cta.event)}:void 0;return {type:e,target:f(n.target),title:f(n.title),message:f(n.message),imageUrl:f(n.imageUrl),html:f(n.html),cta:t&&(t.label||t.url)?t:void 0,dismissAfterMs:fe(n.dismissAfterMs),position:Ge(n.position),widgetType:Ye(n.widgetType),segments:Ze(n.segments),formSubmit:et(n.formSubmit),style:tt(n.style),spinnerHtml:f(n.spinnerHtml),winHtml:f(n.winHtml),lossHtml:f(n.lossHtml)}}function Ge(n){let e=f(n);return e&&Be.has(e)?e:void 0}function Ye(n){let e=f(n);return e&&Ue.has(e)?e:void 0}function Ze(n){if(!Array.isArray(n))return;let e=[];for(let t of n){if(!I(t))continue;let i=f(t.id),r=f(t.label);!i||!r||e.push({id:i,label:r,colorHex:f(t.colorHex),isLoss:t.isLoss===true});}return e.length?e:void 0}function et(n){if(!I(n))return;let e=f(n.mode);if(e)return {requiresResolve:n.requiresResolve===true,mode:e,flowRef:f(n.flowRef),bindingRef:f(n.bindingRef),successDisplayMs:fe(n.successDisplayMs)}}function tt(n){if(!I(n))return;let e={hideCloseButton:n.hideCloseButton===true,hideOverlay:n.hideOverlay===true};return e.hideCloseButton||e.hideOverlay?e:void 0}function Y(n){let e;if(Array.isArray(n)?e=n:I(n)&&Array.isArray(n.xeniaActions)&&(e=n.xeniaActions),!Array.isArray(e))return [];let t=[];for(let i of e){let r=Qe(i);r&&t.push(r);}return t}var nt="https://engine.xeniamartech.com/xenia";function O(){return typeof window<"u"&&typeof document<"u"}function ge(n,e){if(!e||Object.keys(e).length===0)return n;let t=new URLSearchParams(e),i=n.includes("?")?"&":"?";return `${n}${i}${t.toString()}`}function ye(n){return new Promise(e=>setTimeout(e,n))}var R=class extends Error{constructor(t,i,r){super(r??`Request failed with status ${t}`);this.status=t;this.data=i;this.name="HttpError";}status;data},Z=class extends Error{constructor(t){super(`Circuit open for ${t}: failing fast until the cooldown passes`);this.endpoint=t;this.name="CircuitOpenError";}endpoint},L=new Map,q=class{baseUrl;defaultHeaders;timeout;retry;debug;breaker;constructor(e){this.baseUrl=(e.baseUrl??nt).replace(/\/+$/,""),this.defaultHeaders=e.defaultHeaders??{},this.timeout=e.timeout??8e3,this.retry={attempts:e.retry?.attempts??2,baseDelayMs:e.retry?.baseDelayMs??300},this.debug=e.debug??false;let t=e.circuitBreaker===true?{}:e.circuitBreaker||null;this.breaker=t&&{failureThreshold:t.failureThreshold??3,cooldownMs:t.cooldownMs??3e4};}async request(e){if(!this.breaker)return this.send(e);let t=ge(this.baseUrl+e.path,e.query),i=L.get(t)??{failures:0,openedAt:0};if(i.openedAt){if(Date.now()-i.openedAt<this.breaker.cooldownMs)throw new Z(t);i.openedAt=0,i.failures=this.breaker.failureThreshold-1;}try{let r=await this.send(e);return L.delete(t),r}catch(r){throw r instanceof R&&!this.isRetryableStatus(r.status)?(L.delete(t),r):(i.failures+=1,i.failures>=this.breaker.failureThreshold&&(i.openedAt=Date.now(),this.log(`circuit opened for ${e.path} after ${i.failures} failures`)),L.set(t,i),r)}}async send(e){let t=ge(this.baseUrl+e.path,e.query),i=e.method??"GET",r={"Content-Type":"application/json",...this.defaultHeaders,...e.headers},s=e.body!==void 0?JSON.stringify(e.body):void 0,o=e.timeout??this.timeout,a=e.noRetry?1:(e.retry?.attempts??this.retry.attempts)+1,d=e.retry?.baseDelayMs??this.retry.baseDelayMs,l;for(let c=0;c<a;c++)try{let p=await this.fetchWithTimeout(t,{method:i,headers:r,body:s,...e.keepalive?{keepalive:!0}:{}},o),y=await this.parseBody(p);if(p.ok)return {response:p,data:y};if(this.isRetryableStatus(p.status)&&c<a-1){let u=this.retryAfterMs(p,d,c);this.log(`retrying ${e.path} after ${u}ms (status ${p.status})`),await ye(u);continue}throw new R(p.status,y)}catch(p){if(l=p,p instanceof R)throw p;if(c<a-1){let y=d*2**c;this.log(`retrying ${e.path} after ${y}ms (network error)`),await ye(y);continue}}throw l instanceof Error?l:new Error("Request failed")}async fetchWithTimeout(e,t,i){let r=new AbortController,s=setTimeout(()=>r.abort(),i);try{return await fetch(e,{...t,signal:r.signal})}catch(o){throw o instanceof Error&&o.name==="AbortError"?new Error(`Request timeout after ${i}ms`,{cause:o}):o}finally{clearTimeout(s);}}async parseBody(e){let t=await e.text().catch(()=>"");if(!t)return null;try{return JSON.parse(t)}catch{return t}}isRetryableStatus(e){return e===429||e>=500&&e<=599}retryAfterMs(e,t,i){let r=e.headers.get("Retry-After");if(r){let s=Number(r);if(!Number.isNaN(s))return s*1e3}return t*2**i}log(e){this.debug&&console.warn(`[xenia] ${e}`);}};function it(n){try{let e=n.split(".")[1];if(!e)return;let t=JSON.parse(atob(e.replace(/-/g,"+").replace(/_/g,"/")));return typeof t.exp=="number"?t.exp*1e3:void 0}catch{return}}var N=class{config;cached=null;inflight=null;constructor(e){this.config=e;}hasSource(){return !!(this.config.token||this.config.getToken)}getToken=async()=>{if(this.config.token&&!this.config.getToken)return this.config.token;let e=Date.now();if(this.cached&&this.cached.expiresAt>e)return this.cached.token;if(this.inflight)return this.inflight;if(!this.config.getToken)throw new Error("No token source: set config.token or config.getToken.");return this.inflight=Promise.resolve(this.config.getToken()).then(t=>{let i=it(t),r=i?i-3e4:e+5*6e4;return this.cached={token:t,expiresAt:r},t}).finally(()=>{this.inflight=null;}),this.inflight}};function ve(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function rt(n){return n!==void 0&&ve(n)?n:void 0}function E(n){let e={};for(let[t,i]of Object.entries(n))i!==void 0&&(e[t]=i);return e}var z=class{http;tenantId;environmentKey;tokenProvider;constructor(e){this.tenantId=e.tenantId,this.environmentKey=e.environmentKey,this.tokenProvider=new N(e),this.http=new q({baseUrl:e.baseUrl,defaultHeaders:e.headers,timeout:e.timeout,retry:e.retry,circuitBreaker:e.circuitBreaker,debug:e.debug});}tenantHeaders(){return {"X-Tenant-Id":this.tenantId,"X-Environment":this.environmentKey}}async authHeaders(){let e=this.tenantHeaders();if(!this.tokenProvider.hasSource())return e;let t=await this.tokenProvider.getToken();return t&&(e.Authorization=`Bearer ${t}`),e}async webhook(e,t,i="POST"){let{response:r,data:s}=await this.http.request({method:i,path:"/flow",query:{id:e},headers:await this.authHeaders(),body:i==="POST"?t??{}:void 0,noRetry:true});return {status:r.status,body:s,actions:Y(s),receivedAt:Date.now()}}async submitWidget(e,t){let{response:i,data:r}=await this.http.request({method:"POST",path:"/widget-submissions",query:{ref:e},headers:await this.authHeaders(),body:t??{},noRetry:true}),s=ve(r)?r:{};return {status:i.status,body:r,actions:Y(r),prize:rt(s.prize),alreadyPlayed:s.alreadyPlayed===true,dispatched:s.dispatched===true,dispatchError:typeof s.dispatchError=="string"?s.dispatchError:void 0,widgetType:typeof s.widgetType=="string"?s.widgetType:void 0,receivedAt:Date.now()}}async sendEvents(e,t){let{data:i}=await this.http.request({method:"POST",path:"/api/events/v1",headers:await this.authHeaders(),body:{events:e},keepalive:t?.keepalive});return i}async identify(e){let{data:t}=await this.http.request({method:"POST",path:"/api/events/v1/identify",headers:await this.authHeaders(),body:e});return t}async consent(e,t){let{data:i}=await this.http.request({method:"POST",path:"/api/events/v1/consent",headers:await this.authHeaders(),body:E({xeniaVisitorId:e,analytics:t.analytics===true,marketing:t.marketing===true,personalization:t.personalization===true,consentSource:t.consentSource,consentVersion:t.consentVersion})});return i}async resolve(e,t={}){let{data:i}=await this.http.request({method:"POST",path:"/api/personalization/resolve",query:t.merge!==void 0?{merge:String(t.merge)}:void 0,headers:await this.authHeaders(),body:E({contentKey:e,data:t.data,locale:t.locale})});return i}async resolveBatch(e,t={}){let{data:i}=await this.http.request({method:"POST",path:"/api/personalization/resolve-batch",query:t.merge!==void 0?{merge:String(t.merge)}:void 0,headers:await this.authHeaders(),body:E({items:e,data:t.data,locale:t.locale})});return i}async resolveEntries(e,t={}){let{data:i}=await this.http.request({method:"POST",path:"/api/personalization/resolve-entries",headers:await this.authHeaders(),body:E({entryIds:e,data:t.data,locale:t.locale})});return i}};var $="xenia";function ee(n=$){return `${n||$}_vid`}function be(n=$){return `${n||$}_consent`}function xe(n,e,t=365){return `${be(e)}=${encodeURIComponent(JSON.stringify(n))}; path=/; max-age=${Math.floor(t*86400)}; SameSite=Lax`}var st=new Set(["eventId","eventType","journeyId","deviceId","visitorId","customerId","email","utmSource","utmMedium","utmCampaign","utmContent","utmId","url","referrer","path","query"]);function we(n){let e={};for(let[t,i]of Object.entries(n))i!==void 0&&(e[t]=i);return e}function Se(n){let e={},t={};if(n.props)for(let[r,s]of Object.entries(n.props))s!==void 0&&(st.has(r)?t[r]=s:e[r]=s);return {...e,...t,...we(n.context??{}),...we(n.identity??{}),eventId:n.eventId,...n.eventType?{eventType:n.eventType}:{},...n.journeyId?{journeyId:n.journeyId}:{}}}var W="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function ot(n){let e=new Uint8Array(n);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(e);else for(let t=0;t<n;t++)e[t]=Math.floor(Math.random()*256);return e}function k(n=Date.now()){let e="",t=n;for(let s=9;s>=0;s--)e=W[t%32]+e,t=Math.floor(t/32);let i=ot(16),r="";for(let s=0;s<16;s++)r+=W[i[s]%32];return e+r}var te=26;function Ee(n){if(n.length<=te)return n;let e="";for(let i of [2166136261,16777619]){let r=i>>>0;for(let s=0;s<n.length;s++)r^=n.charCodeAt(s),r=Math.imul(r,16777619)>>>0,e+=W[r%32];}let t="";for(let i=0;i<te;i++){let r=i+1;for(let s=i;s<e.length;s+=te)r=r*31+W.indexOf(e[s])>>>0;t+=W[r%32];}return t}var at=n=>n&&typeof n=="object"&&typeof structuredClone=="function"?structuredClone(n):n;async function ie(n,e){let{cms:t}=e,i=e.maxRounds??3,r=Date.now()+(e.timeoutMs??300),s=[],o=u=>{s.push(u);try{e.onApplied?.(u);}catch{}},a=n;try{!e.inPlace&&typeof structuredClone=="function"&&(a=structuredClone(a)),a=t.prepare?t.prepare(a):a;}catch(u){return {content:n,applied:s,complete:false,error:u}}let d={root:a},l=new WeakSet,c=new Map,p=[{parent:d,key:"root",value:d.root}],y=(u,m,g)=>{l.add(u.entry),t.clearMarker?.(u.entry);let v=m.items.map(at);if(!m.decision||v.length===0)return dt(u,t);for(let h of v)h&&typeof h=="object"&&l.add(h);let b=m.decision.op??u.marker.op??"replace",S=Ie(u,b,m.decision.field??u.marker.field,v,t);return o({target:u.id,kind:"runtime",op:b,entryIds:v.map(h=>t.entryId(h)).filter(h=>!!h),contentKey:m.decision.contentKey,bucket:m.decision.bucket,round:g}),S};for(let u=0;;u++){let m=lt(p,t,l,u,o,h=>{let w=c.get(h.id);return w?y(h,w,u):void 0});if(m.size===0)return {content:d.root,applied:s,complete:true};if(!e.resolve||u>=i)return {content:d.root,applied:s,complete:!e.resolve};ke(e,{content:d.root,round:u,pending:[...m.keys()]});let g,v,b;try{g=await Re(e.resolve([...m.keys()]),r),{entriesById:v,queried:b}=await Re(ct(g,t,e.locale),r);}catch(h){return {content:d.root,applied:s,complete:false,error:h===ne?void 0:h}}let S=new Map(g.map(h=>[h.target,h]));p=[];for(let h of m.values()){let w=S.get(h.id),G=w?w.ids?w.ids.map(P=>v.get(P)).filter(P=>P!==void 0):b.get(w)??[]:[],M={decision:w,items:G};c.set(h.id,M),p.push(...y(h,M,u));}ke(e,{content:d.root,round:u,pending:[]});}}function ke(n,e){try{n.onProgress?.(e);}catch{}}function lt(n,e,t,i,r,s){let o=new Map,a=new WeakSet,d=new WeakSet,l=[...n];for(;l.length>0;){let c=l.shift(),p=c.value;if(!p||typeof p!="object"||d.has(p))continue;let y=t.has(p)?void 0:e.entryId(p),u=y?e.marker(p):null;if(y&&u?.kind==="runtime"){let m=s({id:y,marker:u,entry:p,slots:[c]});if(m){l.push(...m);continue}let g=o.get(y);if(g)g.slots.push(c);else if(o.set(y,{id:y,marker:u,entry:p,slots:[c]}),u.op==="items"&&u.field){let v=e.getField(p,u.field);v&&typeof v=="object"&&d.add(v),l.push(...Ce(p));}continue}if(y&&u?.kind==="static"){let m=e.staticVariants(p).filter(g=>g&&typeof g=="object");if(t.add(p),e.clearMarker?.(p),m.length>0){for(let b of m)t.add(b);let g=u.op??"replace",v={entry:p,slots:[c]};l.push(...Ie(v,g,u.field,m,e)),r({target:y,kind:"static",op:g,entryIds:m.map(b=>e.entryId(b)).filter(b=>!!b),round:i});continue}}a.has(p)||(a.add(p),l.push(...Ce(p)));}return o}function Ie(n,e,t,i,r){if(e==="items"){if(t)return r.setField(n.entry,t,i),[{parent:n.entry,key:t,value:r.getField(n.entry,t)}];if(r.mergeItems)return r.mergeItems(n.entry,i[0]),n.slots.map(o=>({...o,value:n.entry}));e="replace";}let s=[];for(let o of n.slots){let a=e==="expand"&&Array.isArray(o.parent)?i:[i[0]];if(Array.isArray(o.parent)){let d=o.parent.indexOf(n.entry);if(d<0)continue;o.parent.splice(d,1,...a);}else o.parent[o.key]=a[0];for(let d of a)s.push({parent:o.parent,key:o.key,value:d});}return s}function dt(n,e){return n.marker.op==="items"&&n.marker.field?[{parent:n.entry,key:n.marker.field,value:e.getField(n.entry,n.marker.field)}]:n.slots.map(t=>({...t,value:n.entry}))}function Ce(n){return Array.isArray(n)?n.map((e,t)=>({parent:n,key:t,value:e})):Object.keys(n).map(e=>({parent:n,key:e,value:n[e]}))}async function ct(n,e,t){let i=[...new Set(n.flatMap(l=>l.ids??[]))],r=n.filter(l=>!l.ids&&l.query),[s,...o]=await Promise.all([i.length>0?e.fetchEntries(i,t):Promise.resolve([]),...r.map(l=>e.queryEntries(l.query,t).catch(()=>[]))]),a=new Map;for(let l of s){let c=e.entryId(l);c&&a.set(c,l);}let d=new Map;return r.forEach((l,c)=>d.set(l,o[c])),{entriesById:a,queried:d}}var ne=Symbol("timeout");function Re(n,e){let t=e-Date.now();if(t<=0)return Promise.reject(ne);let i;return Promise.race([n,new Promise((r,s)=>{i=setTimeout(()=>s(ne),t);})]).finally(()=>clearTimeout(i))}async function Te(n,e){let t;try{if(!e.cms.fetchPage)throw new Error("This CMS adapter cannot fetch pages; use personalizeContent(page)");t=await e.cms.fetchPage(n,e.locale);}catch(i){return {content:null,applied:[],complete:false,error:i}}return t==null?{content:null,applied:[],complete:true}:ie(t,e)}var D=class{map=new Map;set(e,t){this.map.set(e,t);}get(e){return this.map.get(e)}keys(){return [...this.map.keys()]}clear(){this.map.clear();}},J=class{nsKey;constructor(e="xenia"){this.nsKey=`${e}_responses`;}read(){try{let e=localStorage.getItem(this.nsKey);return e?JSON.parse(e):{}}catch{return {}}}write(e){try{localStorage.setItem(this.nsKey,JSON.stringify(e));}catch{}}set(e,t){let i=this.read();i[e]=t,this.write(i);}get(e){return this.read()[e]}keys(){return Object.keys(this.read())}clear(){try{localStorage.removeItem(this.nsKey);}catch{}}};var _=class{queue=[];send;batchSize;flushIntervalMs;maxQueueSize;debug;timer=null;flushing=false;listenersAttached=false;allowed=false;onPageHide=()=>this.flushOnUnload();onVisibilityChange=()=>{document.visibilityState==="hidden"&&this.flushOnUnload();};constructor(e){this.send=e.send,this.batchSize=e.batchSize??20,this.flushIntervalMs=e.flushIntervalMs??3e3,this.maxQueueSize=e.maxQueueSize??200,this.debug=e.debug??false;}start(){this.allowed=true,!(this.timer||typeof window>"u")&&(this.timer=setInterval(()=>{this.flush();},this.flushIntervalMs),window.addEventListener("pagehide",this.onPageHide),document.addEventListener("visibilitychange",this.onVisibilityChange),this.listenersAttached=true);}stop(){this.allowed=false,this.timer&&clearInterval(this.timer),this.timer=null,this.listenersAttached&&(window.removeEventListener("pagehide",this.onPageHide),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.listenersAttached=false);}enqueue(e){this.queue.length>=this.maxQueueSize&&this.queue.shift(),this.queue.push(e),this.allowed&&this.queue.length>=this.batchSize&&this.flush();}async sendImmediate(e){try{await this.send([e],{keepalive:!0});}catch(t){this.isPermanentFailure(t)||this.requeue([e]),this.debug&&console.warn("[xenia] immediate send failed",t);}}async flush(){if(!this.allowed||this.flushing||this.queue.length===0)return;this.flushing=true;let e=this.queue.splice(0,this.batchSize);try{await this.send(e);}catch(t){this.isPermanentFailure(t)||this.requeue(e),this.debug&&console.warn("[xenia] analytics flush failed",t);}finally{this.flushing=false;}}isPermanentFailure(e){return e instanceof R&&e.status>=400&&e.status<500}flushOnUnload(){if(!this.allowed||this.queue.length===0)return;let e=this.queue.splice(0,this.queue.length);this.send(e,{keepalive:true}).catch(()=>{});}requeue(e){let t=this.maxQueueSize-this.queue.length;t<=0||this.queue.unshift(...e.slice(0,t));}};var ut=new Set(["click","view-port","page-load"]);function Ae(n){let e=n.indexOf("&");if(e===-1)return null;let t=n.slice(0,e),i=n.slice(e+1);return !t||!ut.has(i)?null:{eventId:t,interactionType:i}}function Me(n){let e=n.getAttribute("data-xenia-content-key");if(!e)return null;let t=n.getAttribute("data-xenia-content-entry-id"),i=n.getAttribute("data-xenia-base-entry-id"),r=n.getAttribute("data-xenia-personalized");return {contentKey:e,contentEntryId:t??void 0,baseEntryId:i??void 0,personalized:r==null?void 0:r==="true"}}var F=class{opts;throttleTimers=new Map;observers=new Map;slotObservers=new Map;triggered=new Set;slotImpressed=new Set;clickHandler=null;mutationObserver=null;constructor(e){this.opts=e;}start(){this.setupClicks(),this.scan(document),this.setupMutations();}stop(){this.clickHandler&&document.removeEventListener("click",this.clickHandler),this.clickHandler=null,this.mutationObserver?.disconnect(),this.mutationObserver=null,this.observers.forEach(e=>e.disconnect()),this.observers.clear(),this.slotObservers.forEach(e=>e.disconnect()),this.slotObservers.clear(),this.throttleTimers.clear(),this.triggered.clear(),this.slotImpressed.clear();}attr(){return `data-${this.opts.prefix}`}throttled(e){if(this.opts.throttleMs<=0)return false;let t=Date.now(),i=this.throttleTimers.get(e)??0;return t-i>=this.opts.throttleMs?(this.throttleTimers.set(e,t),false):true}setupClicks(){let e=this.attr();this.clickHandler=t=>{let i=t.target;if(!i)return;let r=i.closest(`[${e}]`);if(r){let s=r.getAttribute(e),o=s?Ae(s):null;o&&o.interactionType==="click"&&!this.throttled(r)&&this.opts.fire(o.eventId,"click");}if(this.opts.fireSlot){let s=i.closest("[data-xenia-slot]");if(s){let o=Me(s);o&&!this.throttled(s)&&this.opts.fireSlot("click",o);}}},document.addEventListener("click",this.clickHandler);}observeSlot(e){if(!this.opts.fireSlot||this.slotObservers.has(e))return;let t=Me(e);if(!t)return;let i=this.opts.fireSlot,{threshold:r,rootMargin:s}=this.opts.viewport,o=new IntersectionObserver(a=>{for(let d of a)d.isIntersecting&&(this.slotImpressed.has(e)||(this.slotImpressed.add(e),i("impression",t),o.disconnect(),this.slotObservers.delete(e)));},{threshold:r,rootMargin:s});o.observe(e),this.slotObservers.set(e,o);}observeViewport(e,t){if(this.observers.has(e))return;let{threshold:i,rootMargin:r,triggerOnce:s}=this.opts.viewport,o=new IntersectionObserver(a=>{for(let d of a)d.isIntersecting&&(s&&this.triggered.has(e)||this.throttled(e)||(this.opts.fire(t,"view-port"),s&&(this.triggered.add(e),o.disconnect(),this.observers.delete(e))));},{threshold:i,rootMargin:r});o.observe(e),this.observers.set(e,o);}handleElement(e){let t=e.getAttribute(this.attr());if(!t)return;let i=Ae(t);i&&(i.interactionType==="view-port"?this.observeViewport(e,i.eventId):i.interactionType==="page-load"&&this.opts.fire(i.eventId,"page-load"));}scan(e){e.querySelectorAll(`[${this.attr()}]`).forEach(t=>this.handleElement(t)),this.opts.fireSlot&&e.querySelectorAll("[data-xenia-slot]").forEach(t=>this.observeSlot(t));}setupMutations(){this.mutationObserver=new MutationObserver(e=>{for(let t of e)for(let i of t.addedNodes){if(i.nodeType!==Node.ELEMENT_NODE)continue;let r=i;this.handleElement(r),this.opts.fireSlot&&r.matches("[data-xenia-slot]")&&this.observeSlot(r),this.scan(r);}}),this.mutationObserver.observe(document.body,{childList:true,subtree:true});}};function Pe(n){let e={};if(!n)return e;for(let t of n.split(";")){let i=t.indexOf("=");if(i===-1)continue;let r=t.slice(0,i).trim(),s=t.slice(i+1).trim();r&&(e[r]=decodeURIComponent(s));}return e}var pt=1800*1e3,X=class{prefix;cookie;deviceId=null;journeyId=null;sessionId=null;constructor(e="xenia",t=true){this.prefix=e,this.cookie=mt(t);}key(e){return `${this.prefix}_${e}`}cookieName(){return ee(this.prefix)}writeVisitorCookie(e){if(!(!this.cookie||!e))try{if(typeof document>"u")return;let t=[`${this.cookieName()}=${encodeURIComponent(e)}`,"path=/",`max-age=${Math.floor(this.cookie.maxAgeDays*86400)}`,`SameSite=${this.cookie.sameSite}`];this.cookie.domain&&t.push(`domain=${this.cookie.domain}`),this.cookie.secure&&t.push("Secure"),document.cookie=t.join("; ");}catch{}}readVisitorCookie(){if(!this.cookie||typeof document>"u")return null;try{return Pe(document.cookie)[this.cookieName()]||null}catch{return null}}async resolveDeviceId(){if(this.deviceId)return this.writeVisitorCookie(this.getVisitorId()??this.deviceId),this.deviceId;let e=this.key("device_id");try{let i=localStorage.getItem(e);if(i)return this.deviceId=i,this.writeVisitorCookie(this.getVisitorId()??i),i}catch{}let t=this.readVisitorCookie();t||(t=await this.mediaDeviceId()),t||(t=await this.fingerprint()),this.deviceId=t;try{localStorage.setItem(e,t);}catch{}return this.writeVisitorCookie(this.getVisitorId()??t),t}getDeviceId(){return this.deviceId}async mediaDeviceId(){try{if(!navigator.mediaDevices?.enumerateDevices)return null;let e=await navigator.mediaDevices.enumerateDevices();return (e.find(i=>i.kind==="videoinput"&&i.deviceId)||e.find(i=>i.kind==="audioinput"&&i.deviceId)||e.find(i=>i.kind==="audiooutput"&&i.deviceId))?.deviceId||null}catch{return null}}async fingerprint(){let e=[navigator.userAgent,navigator.language,screen.width,screen.height,screen.colorDepth,new Date().getTimezoneOffset()].join("|"),t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(t)).map(i=>i.toString(16).padStart(2,"0")).join("")}identify(e){if(e){try{localStorage.setItem(this.key("visitor_id"),e);}catch{}this.writeVisitorCookie(e);}}getVisitorId(){try{return localStorage.getItem(this.key("visitor_id"))}catch{return null}}setCustomerId(e){try{e?localStorage.setItem(this.key("customer_id"),e):localStorage.removeItem(this.key("customer_id"));}catch{}}getCustomerId(){try{return localStorage.getItem(this.key("customer_id"))}catch{return null}}setEmail(e){try{e?localStorage.setItem(this.key("email"),e):localStorage.removeItem(this.key("email"));}catch{}}getEmail(){try{return localStorage.getItem(this.key("email"))}catch{return null}}getSessionId(){let e=this.key("session_id"),t=this.key("session_last_activity"),i=Date.now();try{let r=sessionStorage.getItem(e),s=Number(sessionStorage.getItem(t)),a=r&&Number.isFinite(s)&&i-s<pt?r:k(i);return sessionStorage.setItem(e,a),sessionStorage.setItem(t,String(i)),this.sessionId=a,a}catch{return this.sessionId||(this.sessionId=k(i)),this.sessionId}}setJourneyId(e){this.journeyId=e&&e.trim()?e.trim():null;}getJourneyId(){return this.journeyId||this.utmParam("utm_id")||null}utmParam(e){try{let t=new URLSearchParams(window.location.search).get(e);if(t){try{sessionStorage.setItem(this.key(e),t);}catch{}return t}try{return sessionStorage.getItem(this.key(e))}catch{}}catch{}return null}collectContext(){let e={},t=this.utmParam("utm_source"),i=this.utmParam("utm_medium"),r=this.utmParam("utm_campaign"),s=this.utmParam("utm_content"),o=this.utmParam("utm_id");t&&(e.utmSource=t),i&&(e.utmMedium=i),r&&(e.utmCampaign=r),s&&(e.utmContent=s),o&&(e.utmId=o);try{e.url=window.location.href,e.path=window.location.pathname,e.query=Object.fromEntries(new URLSearchParams(window.location.search)),document.referrer&&(e.referrer=document.referrer);}catch{}let a=this.getVisitorId();return a&&(e.visitorId=a),e}};function mt(n){if(n===false)return null;let e=n===true?{}:n,t=e.sameSite??"Lax",i=t==="None"?true:e.secure??false;return {sameSite:t,secure:i,maxAgeDays:e.maxAgeDays??365,domain:e.domain}}function j(n){let e={};return n.querySelectorAll("[data-xenia-field]").forEach(t=>{let i=t.getAttribute("data-xenia-field");i&&(e[i]=ht(t));}),e}function ht(n){return n instanceof HTMLInputElement?n.type==="checkbox"?n.checked?n.value||"on":"":n.type==="radio"?n.checked?n.value:"":n.value:n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement?n.value:n.textContent?.trim()??""}function Oe(n,e){n&&(n instanceof HTMLButtonElement||n instanceof HTMLInputElement||n instanceof HTMLSelectElement||n instanceof HTMLTextAreaElement||n instanceof HTMLFieldSetElement?n.disabled=e:e?n.setAttribute("aria-disabled","true"):n.removeAttribute("aria-disabled"));}function re(n,e){let t=n.querySelector("[data-xenia-error]");t&&(t.textContent=e);}var We="xenia-form-submit-style";function ft(n){if(n.querySelector(`#${We}`))return;let e=document.createElement("style");e.id=We,e.textContent="@keyframes xenia-submit-spin{to{transform:rotate(360deg)}}[data-xenia-submitting]::after{content:'';display:inline-block;width:0.85em;height:0.85em;margin-left:0.5em;vertical-align:-0.15em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:xenia-submit-spin 0.6s linear infinite}",n.prepend(e);}function se(n,e){n&&(e?n.setAttribute("data-xenia-submitting",""):n.removeAttribute("data-xenia-submitting"));}function gt(n,e){if(!e)return;let t=n instanceof ShadowRoot?n.host:n;t instanceof HTMLElement?(t.style.transition="opacity 220ms ease, transform 220ms ease",t.style.opacity="0",t.style.transform="scale(0.96)",window.setTimeout(e,220)):e();}var yt=900;function vt(n,e){let t=n.querySelector("[data-xenia-success]");return t?(t instanceof HTMLElement?t.hidden=false:t.removeAttribute("hidden"),e?e.hidden=true:n.querySelectorAll("[data-xenia-field], [data-xenia-submit]").forEach(i=>{i.hidden=true;}),true):false}function He(n,e,t){let i=n.querySelector("form"),r=false;ft(n);let s=(o,a)=>{if(r)return;if(!e.formSubmit){re(n,"This form isn't connected yet.");return}r=true,re(n,""),Oe(o,true),se(o,true);let d=Date.now(),l=e.formSubmit.successDisplayMs??yt;t.submitWidgetForm(a).then(()=>{se(o,false),vt(n,i);let c=Math.max(0,l-(Date.now()-d));window.setTimeout(()=>gt(n,t.dismiss),c);}).catch(()=>{se(o,false),Oe(o,false),re(n,"Something went wrong. Please try again.");}).finally(()=>{r=false;});};i&&i.addEventListener("submit",o=>{o.preventDefault();let a={};new FormData(i).forEach((l,c)=>{typeof l=="string"&&(a[c]=l);});let d=o.submitter??i.querySelector('[type="submit"], button:not([type])');s(d,{...j(n),...a});}),n.querySelectorAll("[data-xenia-submit]").forEach(o=>{i?.contains(o)||o.addEventListener("click",()=>s(o,j(n)));});}function oe(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ve(n){return oe(n).replace(/"/g,"&quot;")}function B(n,e){e&&n.querySelectorAll(".xenia-close, [data-xenia-close], [class*='close' i], [id*='close' i], [class*='backdrop' i], [id*='backdrop' i]").forEach(i=>{i.removeAttribute("onclick"),i.addEventListener("click",e);}),n.querySelectorAll("[class*='backdrop' i], [id*='backdrop' i]").forEach(t=>{t instanceof HTMLElement&&t.children.length===0&&!t.textContent?.trim()&&(t.style.opacity="0.5");});}var T=260,H=T/2,A=T/2,Le=["#7c3aed","#2563eb","#059669","#d97706","#dc2626","#0891b2"],bt="transform 3.2s cubic-bezier(0.15, 0.85, 0.25, 1)",xt='<div class="xenia-wheel-pointer" aria-hidden="true"></div>',le=320,qe=`opacity ${le}ms ease, transform ${le}ms ease`,wt=900,ae=(n,e)=>`perspective(${wt}px) translateZ(${e}px) scale(${n})`;function de(n,e){let t=n*Math.PI/180;return {x:A+e*Math.sin(t),y:A-e*Math.cos(t)}}function St(n,e){let t=de(n,H),i=de(e,H),r=e-n>180?1:0;return `M ${A},${A} L ${t.x},${t.y} A ${H},${H} 0 ${r} 1 ${i.x},${i.y} Z`}function Et(n,e,t=0){if(e<=0)return 0;let i=360/e,s=(360-(n*i+i/2))%360;return t*360+s}function ze(n,e){let t=n?Array.from(n.children):[],i=e?Array.from(e.children):[];e&&(e.hidden=false),i.forEach(r=>{r instanceof HTMLElement&&(r.style.transition="none",r.style.opacity="0",r.style.transform=ae(.94,-60));}),i.forEach(r=>{r instanceof HTMLElement&&r.offsetHeight;}),$e(()=>{t.forEach(r=>{r instanceof HTMLElement&&(r.style.transition=qe,r.style.opacity="0",r.style.transform=ae(.94,-60));}),i.forEach(r=>{r instanceof HTMLElement&&(r.style.transition=qe,r.style.opacity="1",r.style.transform=ae(1,0));});}),n&&setTimeout(()=>{n.hidden=true;},le);}function $e(n){typeof requestAnimationFrame=="function"?requestAnimationFrame(n):setTimeout(n,0);}function kt(n){let t=360/(n.length||1),i=n.map((r,s)=>{let o=s*t,a=o+t,d=r.colorHex||Le[s%Le.length],l=o+t/2,c=de(l,H*.62);return `<path d="${St(o,a)}" fill="${Ve(d)}" stroke="#fff" stroke-width="1"></path><text x="${c.x}" y="${c.y}" fill="#fff" font-size="12" text-anchor="middle" transform="rotate(${l} ${c.x} ${c.y})">${oe(r.label)}</text>`}).join("");return `<svg class="xenia-wheel-svg" viewBox="0 0 ${T} ${T}" width="${T}" height="${T}"><g class="xenia-wheel-dial">${i}</g><circle class="xenia-wheel-hub" cx="${A}" cy="${A}" r="6"></circle></svg>`}var De={html(n){return `<div class="xenia-spin-wheel"><div data-xenia-wheel-face>${n.spinnerHtml??""}</div><div class="xenia-widget-result" data-xenia-wheel-result hidden>${n.winHtml??""}</div><div class="xenia-widget-result" data-xenia-wheel-loss hidden>${n.lossHtml??""}</div></div>`},wire(n,e,t){B(n,t.dismiss);let i=e.segments??[],r=n.querySelector("[data-xenia-wheel-face]"),s=n.querySelector("[data-xenia-spin]"),o=n.querySelector("[data-xenia-wheel-result]"),a=n.querySelector("[data-xenia-wheel-loss]"),d=n.querySelector("[data-xenia-error]"),l=n.querySelector("[data-xenia-wheel-slot]");l&&l.insertAdjacentHTML("afterbegin",kt(i)+xt);let c=n.querySelector(".xenia-wheel-dial");if(!s||!e.formSubmit)return;n.querySelectorAll("[data-xenia-wheel-cta]").forEach(m=>{m.addEventListener("click",()=>t.fireCta());});let p=(m,g,v)=>{n.querySelectorAll("[data-xenia-wheel-prize]").forEach(h=>{h.textContent=m;});let b=g?a:o,S=g?o:a;S&&(S.hidden=true),ze(r,b),v||(u=true,n.querySelectorAll("[data-xenia-spin-again]").forEach(h=>{h.hidden=true;}));},y=false,u=false;n.querySelectorAll("[data-xenia-spin-again]").forEach(m=>{m.addEventListener("click",()=>{if(u)return;let g=o&&!o.hidden?o:a&&!a.hidden?a:null;g&&(y=false,s.disabled=false,d&&(d.textContent=""),ze(g,r));});}),s.addEventListener("click",()=>{if(y)return;y=true,s.disabled=true,d&&(d.textContent="");let m=j(n);t.submitWidgetForm(m).then(g=>{let v=i.findIndex(Xe=>Xe.id===g.prize?.segmentId),b=g.prize?.label??i[v]?.label??"",S=v>=0&&!!i[v]?.isLoss,h=g.alreadyPlayed!==true;if(v<0||!c){p(b,S,h);return}let w=3+Math.floor(Math.random()*3),G=Et(v,i.length||1,w),M=/rotate\(([-\d.]+)deg\)/.exec(c.style.transform),P=M?parseFloat(M[1]):0;c.style.transition="none",c.style.transform=`rotate(${P%360}deg)`,c.getBoundingClientRect(),c.style.transition=bt;let he=()=>{c.removeEventListener("transitionend",he),p(b,S,h);};c.addEventListener("transitionend",he),$e(()=>{c.style.transform=`rotate(${G}deg)`;});}).catch(()=>{y=false,s.disabled=false,d&&(d.textContent="Something went wrong. Please try again.");});});}};var ce={"spin-wheel":De};function Q(n,e=document){if(!n)return null;let t=e.querySelector(`[data-xenia-slot="${Ct(n)}"]`);if(t)return t;try{return e.querySelector(n)}catch{return null}}function Ct(n){let e=window;return e.CSS?.escape?e.CSS.escape(n):n.replace(/["\\]/g,"\\$&")}function U(n,e){let t=Q(n);return t?(e.html!==void 0?t.innerHTML=e.html:e.text!==void 0&&(t.textContent=e.text),t.removeAttribute("hidden"),true):false}function ue(n){let e=Q(n);return !e||!(e instanceof HTMLElement)?false:(e.dataset.xeniaHidden="1",e.style.setProperty("display","none","important"),true)}function pe(n){let e=Q(n);return !e||!(e instanceof HTMLElement)?false:(delete e.dataset.xeniaHidden,e.style.removeProperty("display"),true)}var Rt=new Set(["banner","popup","modal","inline"]);function It(n){return Rt.has(n)}var K=class{host=null;shadow=null;onCta;messageTemplate;messageStyles;messageComponent;submitWidgetFormFn;mounted=new Map;constructor(e,t){this.onCta=e,this.messageTemplate=t?.messageTemplate,this.messageStyles=t?.messageStyles,this.messageComponent=t?.messageComponent,this.submitWidgetFormFn=t?.submitWidgetForm;}apply(e){let t=0;for(let i of e)this.applyOne(i)&&t++;return t}applyOne(e){switch(e.type){case "swap":return U(e.target,{html:e.html,text:e.text});case "setContent":return U(e.target,{html:e.html,text:e.text});case "hide":return ue(e.target);case "show":return pe(e.target);case "redirect":try{return window.location.assign(e.url),!0}catch{return false}default:return It(e.type)?this.renderMessage(e):false}}destroy(){this.mounted.forEach(e=>e()),this.mounted.clear(),this.host?.remove(),this.host=null,this.shadow=null;}ensureShadow(){if(this.shadow)return this.shadow;let e=document.createElement("div");e.setAttribute("data-xenia-ui",""),document.body.appendChild(e);let t=e.attachShadow({mode:"open"});return t.appendChild(this.styleEl()),this.host=e,this.shadow=t,t}styleEl(){let e=document.createElement("style");return e.textContent=this.messageStyles?`${_e}
2
+ ${this.messageStyles}`:_e,e}renderMessage(e){let t=e.html===void 0&&!!this.messageComponent;if(e.type==="inline"){if(!e.target)return false;let l=Q(e.target);return l?(this.unmount(l),t?(l.innerHTML="",this.mountComponent(l,e,"inline",()=>this.unmount(l))):(l.innerHTML=this.cardHtml(e,"inline"),this.wireCard(l,e)),true):false}let i=this.ensureShadow(),r=document.createElement("div"),s=this.positionClass(e.type,e.position),o=e.html!==void 0?" xenia-custom-bg":"",a=e.style?.hideOverlay?" xenia-no-overlay":"";r.className=`xenia-msg xenia-${e.type}${s?` ${s}`:""}${o}${a}`,i.appendChild(r);let d=()=>{this.unmount(r),r.remove();};if(t?this.mountComponent(r,e,e.type,d):(r.innerHTML=this.cardHtml(e,e.type),this.wireCard(r,e,d)),e.dismissAfterMs&&e.dismissAfterMs>0){let l=setTimeout(d,e.dismissAfterMs),c=()=>clearTimeout(l);r.addEventListener("click",c,{once:true}),r.addEventListener("focusin",c,{once:true});}return true}mountComponent(e,t,i,r){if(!this.messageComponent)return;let s={action:t,variant:i,close:r,fireCta:()=>{t.cta?.event&&this.onCta?.(t.cta.event,t.cta),t.cta?.url&&window.location.assign(t.cta.url),r();}},o=this.messageComponent(e,s);o&&this.mounted.set(e,o);}unmount(e){let t=this.mounted.get(e);t&&(t(),this.mounted.delete(e));}positionClass(e,t){return e==="popup"?`xenia-pos-${t==="top-left"||t==="top-right"||t==="bottom-left"?t:"bottom-right"}`:e==="banner"?`xenia-pos-${t==="top"?"top":"bottom"}`:""}cardHtml(e,t){let i=e.widgetType?ce[e.widgetType]:void 0;if(i)return i.html(e,t);if(e.html!==void 0)return Tt(e.html,t);if(this.messageTemplate){let l={action:e,variant:t,escapeHtml:V,escapeAttr:Je};return this.messageTemplate(l)}let r=e.imageUrl?`<img class="xenia-img" src="${Je(e.imageUrl)}" alt="" />`:"",s=e.title?`<div class="xenia-title">${V(e.title)}</div>`:"",o=e.message?`<div class="xenia-body">${V(e.message)}</div>`:"",a=e.cta?`<button class="xenia-cta" type="button">${V(e.cta.label)}</button>`:"";return `<div class="xenia-card">${t==="inline"?"":'<button class="xenia-close" type="button" aria-label="Close">\xD7</button>'}${r}<div class="xenia-content">${s}${o}${a}</div></div>`}wireCard(e,t,i){let r=t.widgetType?ce[t.widgetType]:void 0;if(r){r.wire(e,t,this.buildWidgetCtx(t,i));return}B(e,i);let s=e.querySelector(".xenia-cta, [data-xenia-cta]");s&&t.cta&&s.addEventListener("click",()=>{t.cta?.event&&this.onCta?.(t.cta.event,t.cta),t.cta?.url&&window.location.assign(t.cta.url),i?.();}),He(e,t,this.buildWidgetCtx(t,i));}buildWidgetCtx(e,t){let i=k();return {dismiss:t,fireCta:()=>{e.cta?.event&&this.onCta?.(e.cta.event,e.cta),e.cta?.url&&window.location.assign(e.cta.url),t?.();},submitWidgetForm:r=>!e.formSubmit||!this.submitWidgetFormFn?Promise.reject(new Error("xenia: this action has no formSubmit config, or no submitWidgetForm handler is wired (construct the ActionRenderer via XeniaClient to get one)")):this.submitWidgetFormFn(e.formSubmit,r,{idempotencyKey:i})}}};function Tt(n,e){return e==="modal"?`<div class="xenia-custom-html">${n}</div>`:`<div class="xenia-custom-html"><style>.xenia-custom-html{position:relative}.xenia-custom-html>*{position:static!important;inset:auto!important;top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}</style>${n}</div>`}function V(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Je(n){return V(n).replace(/"/g,"&quot;")}var _e=`
3
3
  :host { all: initial; }
4
4
  .xenia-msg { position: fixed; z-index: var(--xenia-z-index, 2147483000);
5
5
  font-family: var(--xenia-font-family, system-ui, sans-serif); }
@@ -76,6 +76,6 @@ ${this.messageStyles}`:Oe,e}renderMessage(e){let t=e.html===void 0&&!!this.messa
76
76
  .xenia-widget-result-cta { margin-top: 8px; background: var(--xenia-cta-bg, #111); color: var(--xenia-cta-color, #fff);
77
77
  border: 0; border-radius: var(--xenia-cta-radius, 8px); padding: var(--xenia-cta-padding, 8px 14px);
78
78
  font-size: var(--xenia-cta-size, 14px); font-family: inherit; cursor: pointer; }
79
- `;var ae=class{api;identity;responses;options;renderer;analyticsQueue;tracker=null;ready=false;consentState;listeners=new Map;constructor(e){this.options=e;let t=e.prefix??"xenia";this.identity=new z(t,e.visitorCookie??true),e.visitorId&&this.identity.identify(e.visitorId),this.api=new L(e),this.responses=e.persistResponses===false||!T()?new q:new J(t),this.renderer=new B((i,r)=>this.onCtaEvent(i,r),{messageTemplate:e.messageTemplate,messageStyles:e.messageStyles,messageComponent:e.messageComponent,submitWidgetForm:(i,r,s)=>this.submitWidgetForm(i,r,s)}),this.consentState={...e.consent},this.analyticsQueue=new D({debug:e.debug,send:(i,r)=>this.api.sendEvents(i.map(s=>({...s,consent:this.consentState})),r)});}async init(){this.ready||!T()||(await this.identity.resolveDeviceId(),this.ready=true,this.analyticsAllowed()&&this.analyticsQueue.start(),this.options.autoTrack!==false&&(this.tracker=new _({prefix:this.options.prefix??"xenia",throttleMs:this.options.throttleMs??1e3,viewport:{threshold:this.options.viewport?.threshold??.5,rootMargin:this.options.viewport?.rootMargin,triggerOnce:this.options.viewport?.triggerOnce??true},fire:(e,t)=>this.track(e,{interactionType:t},{trigger:true}),fireSlot:(e,t)=>{this.track("customEvent",{customEventName:e==="impression"?"personalization_impression":"personalization_click",contentKey:t.contentKey,contentEntryId:t.contentEntryId??null,baseEntryId:t.baseEntryId??null},{trigger:false});}}),this.tracker.start()));}destroy(){this.tracker?.stop(),this.tracker=null,this.renderer.destroy(),this.analyticsQueue.stop(),this.ready=false;}identify(e,t){this.identity.identify(e),t?.customerId!==void 0&&this.identity.setCustomerId(t.customerId),t?.email!==void 0&&this.identity.setEmail(t.email),this.api.identify({xeniaVisitorId:e,userId:t?.customerId,email:t?.email}).then(i=>this.emit("identify",i)).catch(i=>this.emitError(i));}setJourneyId(e){this.identity.setJourneyId(e);}track(e,t,i={}){if(!T())return;let r=i.trigger===true;if(!r&&this.dntBlocked())return;let s=this.buildEvent(e,t,i);this.emit("event",{eventName:e,event:s}),r?this.analyticsQueue.sendImmediate(s).catch(o=>this.emitError(o)):(this.analyticsQueue.enqueue(s),this.analyticsAllowed()&&this.analyticsQueue.start());}buildEvent(e,t,i){let r=this.identity.collectContext(),s;try{s=Intl.DateTimeFormat().resolvedOptions().timeZone;}catch{}return {eventName:e,eventId:i.eventId?ve(i.eventId):g(),eventVersion:1,occurredAtMs:Date.now(),source:"xenia-js-sdk",identity:{sessionId:this.identity.getSessionId(),...i.identity,xeniaVisitorId:r.visitorId??this.identity.getDeviceId()??void 0},context:{pagePath:r.path,referrer:r.referrer,userAgent:navigator.userAgent,locale:navigator.language,timezone:s,journeyId:this.identity.getJourneyId()??void 0,utmSource:r.utmSource,utmMedium:r.utmMedium,utmCampaign:r.utmCampaign,utmContent:r.utmContent,...i.context},properties:this.withUtmId(t,r.utmId),trigger:i.trigger===true?true:void 0}}withUtmId(e,t){return !t||e&&(e.utm_id!==void 0||e.utmId!==void 0)?e:{...e,utm_id:t}}async resolve(e,t){return this.api.resolve(e,this.withVisitor(t))}async resolveBatch(e,t){return this.api.resolveBatch(e,this.withVisitor(t))}resolveVisitorId(){return this.identity.getVisitorId()??this.identity.getDeviceId()??void 0}withVisitor(e){let t=this.identity.collectContext(),i=this.resolveVisitorId(),r=w({path:t.path,query:t.query,deviceId:this.identity.getDeviceId()??void 0,visitorId:i,customerId:this.identity.getCustomerId()??void 0,email:this.identity.getEmail()??void 0,url:t.url,referrer:t.referrer,utmSource:t.utmSource,utmMedium:t.utmMedium,utmCampaign:t.utmCampaign,utmContent:t.utmContent,utmId:t.utmId});return i&&(r._xenia_vid=i),Object.keys(r).length===0?e:{...e,data:{...e?.data??{},...r}}}dntBlocked(){if(this.options.respectDnt===false)return false;try{let e=navigator,t=navigator.doNotTrack??window.doNotTrack;if(t==="1"||t==="yes"||e.globalPrivacyControl===!0)return !0}catch{}return false}analyticsAllowed(){return this.consentState.analytics===true}async request(e,t,i){let r=this.identity.collectContext(),s=ye({eventId:e,journeyId:this.identity.getJourneyId()??void 0,identity:{deviceId:this.identity.getDeviceId()??void 0,visitorId:this.resolveVisitorId()},context:r,props:t}),o=await this.api.webhook(e,s,i?.method??"POST");return this.responses.set(e,o),this.emit("response",{triggerId:e,response:o}),(i?.apply??this.options.autoApplyActions!==false)&&o.actions.length&&this.applyActions(o.actions),o}getResponse(e){return this.responses.get(e)}async submitWidgetForm(e,t,i){let r=this.identity.collectContext(),s=i?.idempotencyKey??g(),o=e.flowRef??e.bindingRef,a={visitorId:this.resolveVisitorId(),deviceId:this.identity.getDeviceId()??void 0,idempotencyKey:s,mode:e.mode,ref:o,url:r.url,referrer:r.referrer,path:r.path,query:r.query,utmSource:r.utmSource,utmMedium:r.utmMedium,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmId:r.utmId},l=e.flowRef?await this.api.webhook(e.flowRef,w({...a,...t}),"POST"):await this.api.submitWidget(e.bindingRef??"",w({...a,fields:t}));return this.emit("response",{triggerId:o,response:l}),(i?.apply??this.options.autoApplyActions!==false)&&l.actions.length&&this.applyActions(l.actions),l}swapContent(e,t){return X(e,t)}hideContent(e){return se(e)}showContent(e){return oe(e)}applyActions(e){let t=this.renderer.apply(e);return this.emit("actions",{actions:e,applied:t}),t}async consent(e){let t=this.analyticsAllowed();if(this.consentState={...this.consentState,...e},T())try{document.cookie=fe(this.consentState,this.options.prefix);}catch{}this.analyticsAllowed()&&!t?(this.analyticsQueue.start(),this.analyticsQueue.flush()):!this.analyticsAllowed()&&t&&this.analyticsQueue.stop();let i=this.identity.getVisitorId()??this.identity.getDeviceId();if(i)try{await this.api.consent(i,e);}catch(r){this.emitError(r);}}on(e,t){let i=this.listeners.get(e)??new Set;return i.add(t),this.listeners.set(e,i),()=>i.delete(t)}emit(e,t){this.listeners.get(e)?.forEach(i=>{try{i(t);}catch{}});}emitError(e){let t=e instanceof Error?e:new Error(String(e));this.options.debug&&console.error("[xenia]",t),this.emit("error",t);}onCtaEvent(e,t){this.track(e,{ctaLabel:t.label,ctaUrl:t.url??null},{trigger:true});}};function He(n){return new ae(n)}var y=null;function h(n){if(!y)throw console.warn(`[xenia] ${n}() called before init().`),new Error("Xenia not initialized");return y}var an={init(n){y&&y.destroy(),y=He(n),y.init();},destroy(){y?.destroy(),y=null;},track(n,e,t){h("track").track(n,e,t);},identify(n){h("identify").identify(n);},consent(n){return h("consent").consent(n)},resolve(n,e){return h("resolve").resolve(n,e)},resolveBatch(n,e){return h("resolveBatch").resolveBatch(n,e)},setJourneyId(n){h("setJourneyId").setJourneyId(n);},request(n,e){return h("request").request(n,e)},getResponse(n){return h("getResponse").getResponse(n)},swapContent(n,e){return h("swapContent").swapContent(n,e)},hideContent(n){return h("hideContent").hideContent(n)},showContent(n){return h("showContent").showContent(n)}};exports.Xenia=an;return exports;})({});
79
+ `;var me=class{api;identity;responses;options;renderer;analyticsQueue;tracker=null;booting=null;generation=0;consentState;listeners=new Map;constructor(e){this.options=e;let t=e.prefix??"xenia";this.identity=new X(t,e.visitorCookie??true),e.visitorId&&this.identity.identify(e.visitorId),this.api=new z(e),this.responses=e.persistResponses===false||!O()?new D:new J(t),this.renderer=new K((i,r)=>this.onCtaEvent(i,r),{messageTemplate:e.messageTemplate,messageStyles:e.messageStyles,messageComponent:e.messageComponent,submitWidgetForm:(i,r,s)=>this.submitWidgetForm(i,r,s)}),this.consentState={...e.consent},this.analyticsQueue=new _({debug:e.debug,send:(i,r)=>this.api.sendEvents(i.map(s=>({...s,consent:this.consentState})),r)});}init(){return O()?this.booting??=this.boot():Promise.resolve()}async boot(){let e=this.generation;await this.identity.resolveDeviceId(),e===this.generation&&(this.analyticsAllowed()&&this.analyticsQueue.start(),this.options.autoTrack!==false&&(this.tracker=new F({prefix:this.options.prefix??"xenia",throttleMs:this.options.throttleMs??1e3,viewport:{threshold:this.options.viewport?.threshold??.5,rootMargin:this.options.viewport?.rootMargin,triggerOnce:this.options.viewport?.triggerOnce??true},fire:(t,i)=>this.track(t,{interactionType:i},{trigger:true}),fireSlot:(t,i)=>{this.track("customEvent",{customEventName:t==="impression"?"personalization_impression":"personalization_click",contentKey:i.contentKey,contentEntryId:i.contentEntryId??null,baseEntryId:i.baseEntryId??null},{trigger:false});}}),this.tracker.start()));}destroy(){this.tracker?.stop(),this.tracker=null,this.renderer.destroy(),this.analyticsQueue.stop(),this.booting=null,this.generation++;}identify(e,t){this.identity.identify(e),t?.customerId!==void 0&&this.identity.setCustomerId(t.customerId),t?.email!==void 0&&this.identity.setEmail(t.email),this.api.identify({xeniaVisitorId:e,userId:t?.customerId,email:t?.email}).then(i=>this.emit("identify",i)).catch(i=>this.emitError(i));}setJourneyId(e){this.identity.setJourneyId(e);}track(e,t,i={}){if(!O())return;let r=i.trigger===true;if(!r&&this.dntBlocked())return;let s=this.buildEvent(e,t,i);this.emit("event",{eventName:e,event:s}),r?this.analyticsQueue.sendImmediate(s).catch(o=>this.emitError(o)):(this.analyticsQueue.enqueue(s),this.analyticsAllowed()&&this.analyticsQueue.start());}buildEvent(e,t,i){let r=this.identity.collectContext(),s;try{s=Intl.DateTimeFormat().resolvedOptions().timeZone;}catch{}return {eventName:e,eventId:i.eventId?Ee(i.eventId):k(),eventVersion:1,occurredAtMs:Date.now(),source:"xenia-js-sdk",identity:{sessionId:this.identity.getSessionId(),...i.identity,xeniaVisitorId:r.visitorId??this.identity.getDeviceId()??void 0},context:{pagePath:r.path,referrer:r.referrer,userAgent:navigator.userAgent,locale:navigator.language,timezone:s,journeyId:this.identity.getJourneyId()??void 0,utmSource:r.utmSource,utmMedium:r.utmMedium,utmCampaign:r.utmCampaign,utmContent:r.utmContent,...i.context},properties:this.withUtmId(t,r.utmId),trigger:i.trigger===true?true:void 0}}withUtmId(e,t){return !t||e&&(e.utm_id!==void 0||e.utmId!==void 0)?e:{...e,utm_id:t}}async resolve(e,t){return this.api.resolve(e,this.withVisitor(t))}async resolveBatch(e,t){return this.api.resolveBatch(e,this.withVisitor(t))}async personalizeContent(e,t){return ie(e,{...t,resolve:this.entryResolver(t)})}async personalizePage(e,t){return Te(e,{...t,resolve:this.entryResolver(t)})}entryResolver(e){let t=this.withVisitor({data:e.data,locale:e.locale});return async i=>(await this.api.resolveEntries(i,t)).decisions??[]}resolveVisitorId(){return this.identity.getVisitorId()??this.identity.getDeviceId()??void 0}withVisitor(e){let t=this.identity.collectContext(),i=this.resolveVisitorId(),r=E({path:t.path,query:t.query,deviceId:this.identity.getDeviceId()??void 0,visitorId:i,customerId:this.identity.getCustomerId()??void 0,email:this.identity.getEmail()??void 0,url:t.url,referrer:t.referrer,utmSource:t.utmSource,utmMedium:t.utmMedium,utmCampaign:t.utmCampaign,utmContent:t.utmContent,utmId:t.utmId});return i&&(r._xenia_vid=i),Object.keys(r).length===0?e:{...e,data:{...e?.data??{},...r}}}dntBlocked(){if(this.options.respectDnt===false)return false;try{let e=navigator,t=navigator.doNotTrack??window.doNotTrack;if(t==="1"||t==="yes"||e.globalPrivacyControl===!0)return !0}catch{}return false}analyticsAllowed(){return this.consentState.analytics===true}async request(e,t,i){let r=this.identity.collectContext(),s=Se({eventId:e,journeyId:this.identity.getJourneyId()??void 0,identity:{deviceId:this.identity.getDeviceId()??void 0,visitorId:this.resolveVisitorId()},context:r,props:t}),o=await this.api.webhook(e,s,i?.method??"POST");return this.responses.set(e,o),this.emit("response",{triggerId:e,response:o}),(i?.apply??this.options.autoApplyActions!==false)&&o.actions.length&&this.applyActions(o.actions),o}getResponse(e){return this.responses.get(e)}async submitWidgetForm(e,t,i){let r=this.identity.collectContext(),s=i?.idempotencyKey??k(),o=e.flowRef??e.bindingRef,a={visitorId:this.resolveVisitorId(),deviceId:this.identity.getDeviceId()??void 0,idempotencyKey:s,mode:e.mode,ref:o,url:r.url,referrer:r.referrer,path:r.path,query:r.query,utmSource:r.utmSource,utmMedium:r.utmMedium,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmId:r.utmId},d=e.flowRef?await this.api.webhook(e.flowRef,E({...a,...t}),"POST"):await this.api.submitWidget(e.bindingRef??"",E({...a,fields:t}));return this.emit("response",{triggerId:o,response:d}),(i?.apply??this.options.autoApplyActions!==false)&&d.actions.length&&this.applyActions(d.actions),d}swapContent(e,t){return U(e,t)}hideContent(e){return ue(e)}showContent(e){return pe(e)}applyActions(e){let t=this.renderer.apply(e);return this.emit("actions",{actions:e,applied:t}),t}async consent(e){let t=this.analyticsAllowed();if(this.consentState={...this.consentState,...e},O())try{document.cookie=xe(this.consentState,this.options.prefix);}catch{}this.analyticsAllowed()&&!t?(this.analyticsQueue.start(),this.analyticsQueue.flush()):!this.analyticsAllowed()&&t&&this.analyticsQueue.stop();let i=this.identity.getVisitorId()??this.identity.getDeviceId();if(i)try{await this.api.consent(i,e);}catch(r){this.emitError(r);}}on(e,t){let i=this.listeners.get(e)??new Set;return i.add(t),this.listeners.set(e,i),()=>i.delete(t)}emit(e,t){this.listeners.get(e)?.forEach(i=>{try{i(t);}catch{}});}emitError(e){let t=e instanceof Error?e:new Error(String(e));this.options.debug&&console.error("[xenia]",t),this.emit("error",t);}onCtaEvent(e,t){this.track(e,{ctaLabel:t.label,ctaUrl:t.url??null},{trigger:true});}};function Fe(n){return new me(n)}var C=null;function x(n){if(!C)throw console.warn(`[xenia] ${n}() called before init().`),new Error("Xenia not initialized");return C}var En={init(n){C&&C.destroy(),C=Fe(n),C.init();},destroy(){C?.destroy(),C=null;},track(n,e,t){x("track").track(n,e,t);},identify(n){x("identify").identify(n);},consent(n){return x("consent").consent(n)},resolve(n,e){return x("resolve").resolve(n,e)},resolveBatch(n,e){return x("resolveBatch").resolveBatch(n,e)},setJourneyId(n){x("setJourneyId").setJourneyId(n);},request(n,e){return x("request").request(n,e)},getResponse(n){return x("getResponse").getResponse(n)},swapContent(n,e){return x("swapContent").swapContent(n,e)},hideContent(n){return x("hideContent").hideContent(n)},showContent(n){return x("showContent").showContent(n)}};exports.Xenia=En;return exports;})({});
80
80
  Xenia=Xenia&&(Xenia.Xenia||Xenia.default)||Xenia;if(typeof window!=='undefined'){window.Xenia=Xenia;}
81
81
  //# sourceMappingURL=xenia-sdk.iife.js.map