@usermaven/sdk-js
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
(function(f,g){typeof exports=="object"&&typeof module<"u"?g(exports):typeof define=="function"&&define.amd?define(["exports"],g):(f=typeof globalThis<"u"?globalThis:f||self,g(f.Usermaven={}))})(this,function(f){"use strict";var g=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i))(g||{});class X{constructor(e){this.level=e}debug(e,...t){this.level<=0&&console.debug("[Usermaven Debug]:",e,...t)}info(e,...t){this.level<=1&&console.info("[Usermaven Info]:",e,...t)}warn(e,...t){this.level<=2&&console.warn("[Usermaven Warning]:",e,...t)}error(e,...t){this.level<=3&&console.error("[Usermaven Error]:",e,...t)}}function d(i=0){return new X(i)}const L={logLevel:g.ERROR,useBeaconApi:!1,forceUseFetch:!1,trackingHost:"t.usermaven.com",autocapture:!1,rageClick:!1,formTracking:!1,autoPageview:!1,disableEventPersistence:!1,gaHook:!1,segmentHook:!1,randomizeUrl:!1,capture3rdPartyCookies:["_ga","_fbp","_ym_uid","ajs_user_id","ajs_anonymous_id"],idMethod:"cookie",ipPolicy:"keep",cookiePolicy:"keep",minSendTimeout:0,maxSendTimeout:2e3,maxSendAttempts:4,propertiesStringMaxLength:null,propertyBlacklist:[],crossDomainLinking:!0,maskAllText:!1,maskAllElementAttributes:!1};class K{constructor(e){this.domain=e,this.cookieDomain=this.getCookieDomain()}set(e,t,s=365,n=!0,r=!1){const o=new Date;o.setTime(o.getTime()+s*24*60*60*1e3);const c=`expires=${o.toUTCString()}`,l=n?"; Secure":"",a=r?"; HttpOnly":"";document.cookie=`${e}=${t};${c};path=/;domain=${this.cookieDomain}${l}${a}`}get(e){const t=e+"=",s=document.cookie.split(";");for(let n=0;n<s.length;n++){let r=s[n].trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null}delete(e,t="/"){document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${t};domain=${this.cookieDomain}`}getCookieDomain(){return typeof window>"u"||this.domain?this.domain||"":this.extractRoot(window.location.hostname)}extractRoot(e){if(this.isIpAddress(e)||e==="localhost")return e;let t=this.extractTopLevelDomain(e);return t||(t=this.extractRootDomain(e)),"."+t}isIpAddress(e){const t=e.split(".");return t.length===4&&t.every(s=>!isNaN(Number(s)))}extractHostname(e){let t;return e.indexOf("//")>-1?t=e.split("/")[2]:t=e.split("/")[0],t=t.split(":")[0],t=t.split("?")[0],t}extractRootDomain(e){let t=this.extractHostname(e);const s=t.split("."),n=s.length;return n>2&&(s[n-1].length==2?(t=s[n-2]+"."+s[n-1],s[n-2].length==2&&(t=s[n-3]+"."+t)):t=s[n-2]+"."+s[n-1]),t}extractTopLevelDomain(e){const t=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,s=e.match(t);return s?s[0]:""}}const G=Object.prototype.hasOwnProperty,P=Array.prototype.forEach,A={};function Y(i,e,t){if(Array.isArray(i)){if(P&&i.forEach===P)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}}}const x=function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},Z=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=i[e].bind(i))};function m(i,e,t){if(i!=null){if(P&&Array.isArray(i)&&i.forEach===P)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}else for(const s in i)if(G.call(i,s)&&e.call(t,i[s],s)===A)return}}const j=function(i,...e){return Y(e,function(t){for(const s in t)t[s]!==void 0&&(i[s]=t[s])}),i};function v(i,e){return i.indexOf(e)!==-1}const ee=function(i){try{return/^\s*\bfunction\b/.test(i)}catch{return!1}},te=function(i){return i===void 0},w=function(){const i=function(s,n,r,o,c){if(!s){d().error("No valid element provided to register_event");return}if(s.addEventListener&&!o)s.addEventListener(n,r,!!c);else{const l="on"+n,a=s[l];s[l]=e(s,r,a)}};function e(s,n,r){return function(o){if(o=o||t(window.event),!o)return;let c=!0,l;ee(r)&&(l=r(o));const a=n.call(s,o);return(l===!1||a===!1)&&(c=!1),c}}function t(s){return s&&(s.preventDefault=t.preventDefault,s.stopPropagation=t.stopPropagation),s}return t.preventDefault=function(){this.returnValue=!1},t.stopPropagation=function(){this.cancelBubble=!0},i}(),ie=function(i){return function(...e){try{return i.apply(this,e)}catch(t){d().error("Implementation error. Please turn on debug and contact support@usermaven.com.",t)}}},I=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=ie(i[e]))};function D(i){for(let e in i)(i[e]===""||i[e]===null||i[e]===void 0||typeof i[e]=="object"&&Object.keys(i[e]).length===0)&&delete i[e];return i}function u(){try{return typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0}catch{return d().warn("window is not available"),!1}}function y(i=5){const e=new Uint8Array(i);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(36).padStart(2,"0")).join("").slice(0,i)}function se(i){return i.replace(/([-_][a-z])/g,e=>e.toUpperCase().replace("-","").replace("_",""))}function H(i){return typeof i!="object"||i===null?i:Array.isArray(i)?i.map(H):Object.keys(i).reduce((e,t)=>{const s=se(t);return e[s]=H(i[t]),e},{})}function E(i){switch(typeof i.className){case"string":return i.className;case"object":return("baseVal"in i.className?i.className.baseVal:null)||i.getAttribute("class")||"";default:return""}}function U(i){let e="";return O(i)&&!M(i)&&i.childNodes&&i.childNodes.length&&m(i.childNodes,function(t){z(t)&&t.textContent&&(e+=x(t.textContent).split(/(\s+)/).filter(S).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))}),x(e)}function F(i){return!!i&&i.nodeType===1}function p(i,e){return!!i&&!!i.tagName&&i.tagName.toLowerCase()===e.toLowerCase()}function z(i){return!!i&&i.nodeType===3}function N(i){return!!i&&i.nodeType===11}const $=["a","button","form","input","select","textarea","label"];function ne(i,e){if(!i||p(i,"html")||!F(i))return!1;let t=i;for(;t&&!p(t,"body");){if(t.classList&&t.classList.contains("um-no-capture"))return!1;t.parentNode&&N(t.parentNode)?t=t.parentNode.host:t=t.parentNode}let s=!1;for(t=i;t&&!p(t,"body");){if(t.parentNode&&N(t.parentNode)){t=t.parentNode.host,t&&$.indexOf(t.tagName.toLowerCase())>-1&&(s=!0);continue}const o=t.parentNode;if(!o)break;if($.indexOf(o.tagName.toLowerCase())>-1)s=!0;else{const c=window.getComputedStyle(o);c&&c.getPropertyValue("cursor")==="pointer"&&(s=!0)}t=o}const n=window.getComputedStyle(i);if(n&&n.getPropertyValue("cursor")==="pointer"&&e.type==="click")return!0;const r=i.tagName.toLowerCase();switch(r){case"html":return!1;case"form":return e.type==="submit";case"input":return e.type==="change"||e.type==="click";case"select":case"textarea":return e.type==="change"||e.type==="click";default:return s?e.type==="click":e.type==="click"&&($.indexOf(r)>-1||i.getAttribute("contenteditable")==="true")}}function O(i){for(let s=i;s.parentNode&&!p(s,"body");s=s.parentNode){const n=E(s).split(" ");if(v(n,"ph-sensitive")||v(n,"ph-no-capture"))return!1}if(v(E(i).split(" "),"ph-include"))return!0;const e=i.type||"";if(typeof e=="string")switch(e.toLowerCase()){case"hidden":return!1;case"password":return!1}const t=i.name||i.id||"";return!(typeof t=="string"&&/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(t.replace(/[^a-zA-Z0-9]/g,"")))}function M(i){const e=["button","checkbox","submit","reset"];return!!(p(i,"input")&&!e.includes(i.type)||p(i,"select")||p(i,"textarea")||i.getAttribute("contenteditable")==="true")}function S(i){return!(i===null||te(i)||typeof i=="string"&&(i=x(i),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((i||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(i)))}function re(i){return typeof i=="string"?i.substring(0,10)==="_ngcontent"||i.substring(0,7)==="_nghost":!1}function R(){return y(10)}function oe(i){return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(i).toLowerCase())}function ae(i,e){let t;return function(...s){const n=()=>{clearTimeout(t),i(...s)};clearTimeout(t),t=setTimeout(n,e)}}function ce(i){const e={},t=i.replace(/^\?/,"").split("&");for(let s=0;s<t.length;s++){const n=t[s].split("=");n[0]!==""&&(e[decodeURIComponent(n[0])]=decodeURIComponent(n[1]||""))}return e}function q(i){return typeof i=="string"||i instanceof String}function _(i){return i!==null&&typeof i=="object"&&i.constructor===Object}function le(i){if(i===null)return g.ERROR;const e=i.toUpperCase(),t=g[e];return t||t===0?t:g.ERROR}class ue{constructor(e){this.maxScrollDepth=0,this.milestones=[25,50,75,90],this.lastScrollDepth=0,this.client=e,this.documentElement=document.documentElement,this.debouncedHandleScroll=ae(this.handleScroll.bind(this),250),this.initializeEventListener()}initializeEventListener(){window.addEventListener("scroll",this.debouncedHandleScroll)}track(){const e=this.getScrollDepth();e>this.lastScrollDepth&&(this.lastScrollDepth=e,this.checkMilestones(e))}send(e="$scroll"){if(!this.lastScrollDepth)return;const t={percent:this.lastScrollDepth,window_height:this.getWindowHeight(),document_height:this.getDocumentHeight(),scroll_distance:this.getScrollDistance()};this.client.track(e,t)}handleScroll(){this.track()}getScrollDepth(){const e=this.getWindowHeight(),t=this.getDocumentHeight(),s=this.getScrollDistance(),n=t-e;return Math.min(100,Math.floor(s/n*100))}getWindowHeight(){return window.innerHeight||this.documentElement.clientHeight||document.body.clientHeight||0}getDocumentHeight(){return Math.max(document.body.scrollHeight||0,this.documentElement.scrollHeight||0,document.body.offsetHeight||0,this.documentElement.offsetHeight||0,document.body.clientHeight||0,this.documentElement.clientHeight||0)}getScrollDistance(){return window.pageYOffset||this.documentElement.scrollTop||document.body.scrollTop||0}checkMilestones(e){this.milestones.filter(s=>e>=s).forEach(s=>{this.send(),this.milestones=this.milestones.filter(n=>n!==s)})}}const T=class T{constructor(e,t,s=d()){this.logger=s,this.scrollDepth=null,this.customProperties=[],this.client=e,this.options=t,this.scrollDepth=new ue(e),Z(this),I(this)}init(){if(!(document&&document.body)){this.logger.debug("Document not ready yet, trying again in 500 milliseconds..."),setTimeout(()=>this.init(),500);return}this.addDomEventHandlers()}addDomEventHandlers(){const e=t=>{t=t||window.event,this.captureEvent(t)};w(document,"submit",e,!1,!0),w(document,"change",e,!1,!0),w(document,"click",e,!1,!0),w(document,"visibilitychange",e,!1,!0),w(document,"scroll",e,!1,!0),w(window,"popstate",e,!1,!0)}isPageRefresh(){if("PerformanceNavigationTiming"in window){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type==="reload"}return performance.navigation&&performance.navigation.type===1}captureEvent(e){var s,n;let t=this.getEventTarget(e);if(z(t)&&(t=t.parentNode||null),e.type==="scroll")return(s=this.scrollDepth)==null||s.track(),!0;if(e.type==="visibilitychange"&&document.visibilityState==="hidden"||e.type==="popstate")return this.isPageRefresh()||(n=this.scrollDepth)==null||n.send(),!0;if(t&&ne(t,e)){const r=[t];let o=t;for(;o.parentNode&&!p(o,"body");){if(N(o.parentNode)){r.push(o.parentNode.host),o=o.parentNode.host;continue}r.push(o.parentNode),o=o.parentNode}const c=[];let l,a=!1;if(m(r,b=>{const ke=O(b);b.tagName.toLowerCase()==="a"&&(l=b.getAttribute("href"),l=ke&&S(l)&&l);const ve=E(b).split(" ");v(ve,"ph-no-capture")&&(a=!0),c.push(this.getPropertiesFromElement(b,this.options.maskAllElementAttributes??!1,this.options.maskAllText??!1))}),this.options.maskAllText||(c[0].$el_text=U(t)),l&&(c[0].attr__href=l),a)return!1;const h=j(this.getDefaultProperties(e.type),{$elements:c},this.getCustomProperties(r));return this.client.track("$autocapture",h),!0}}getCustomProperties(e){const t={};return m(this.customProperties,s=>{m(s.event_selectors,n=>{const r=document.querySelectorAll(n);m(r,o=>{v(e,o)&&O(o)&&(t[s.name]=this.extractCustomPropertyValue(s))})})}),t}extractCustomPropertyValue(e){const t=[];return m(document.querySelectorAll(e.css_selector),function(s){let n;["input","select"].indexOf(s.tagName.toLowerCase())>-1?n=s.value:s.textContent&&(n=s.textContent),S(n)&&t.push(n)}),t.join(", ")}getEventTarget(e){var t;return typeof e.target>"u"?e.srcElement||null:(t=e.target)!=null&&t.shadowRoot?e.composedPath()[0]||null:e.target||null}getPropertiesFromElement(e,t,s){const n=e.tagName.toLowerCase(),r={tag_name:n};$.indexOf(n)>-1&&!s&&(r.$el_text=U(e));const o=E(e);o.length>0&&(r.classes=o.split(" ").filter(function(h){return h!==""})),m(e.attributes,function(h){M(e)&&["name","id","class"].indexOf(h.name)===-1||!t&&S(h.value)&&!re(h.name)&&(r["attr__"+h.name]=h.value)});let c=1,l=1,a=e;for(;a=this.previousElementSibling(a);)c++,a.tagName===e.tagName&&l++;return r.nth_child=c,r.nth_of_type=l,r}previousElementSibling(e){if(e.previousElementSibling)return e.previousElementSibling;{let t=e;do t=t.previousSibling;while(t&&!F(t));return t}}getDefaultProperties(e){return{$event_type:e,$ce_version:1}}encodeHtml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}static enabledForProject(e,t=10,s=10){if(!e)return!1;let n=0;for(let r=0;r<e.length;r++)n+=e.charCodeAt(r);return n%t<s}};T.FORCE_CAPTURE_ATTR="data-um-force-capture",T.PREVENT_CAPTURE_ATTR="data-um-no-capture";let C=T;class he{constructor(e){this.client=e,this.lastPageUrl=window.location.href,this.trackInitialPageview(),this.initializePageviewTracking()}trackInitialPageview(){this.trackPageview()}initializePageviewTracking(){window.addEventListener("popstate",this.handlePageview.bind(this));const e=history.pushState;history.pushState=(...t)=>{e.apply(history,t),this.handlePageview()},window.addEventListener("hashchange",this.handlePageview.bind(this)),setInterval(this.checkForUrlChange.bind(this),1e3)}handlePageview(){this.trackPageview()}checkForUrlChange(){window.location.href!==this.lastPageUrl&&this.trackPageview()}trackPageview(){const e=window.location.href;e!==this.lastPageUrl&&(this.lastPageUrl=e,this.client.track("pageview",{url:e,referrer:document.referrer,title:document.title}))}}class de{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=new Blob([JSON.stringify(e)],{type:"application/json"});if(navigator.sendBeacon(s,n))this.logger.debug(`Successfully queued ${e.length} event(s) via Beacon API`);else throw new Error("Failed to queue events via Beacon API")}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}}class B{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=JSON.stringify(e),r={"Content-Type":"application/json",...this.getCustomHeaders()},o=await fetch(s,{method:"POST",headers:r,body:n});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);this.logger.debug(`Successfully sent ${e.length} event(s)`),this.postHandle(o.status,await o.text())}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class ge{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}send(e){return new Promise((t,s)=>{const n=new XMLHttpRequest,r=this.config.key,o=this.constructUrl(r);n.open("POST",o,!0),n.setRequestHeader("Content-Type","application/json");const c=this.getCustomHeaders();Object.keys(c).forEach(l=>{n.setRequestHeader(l,c[l])}),n.onload=()=>{n.status>=200&&n.status<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),t()):s(new Error(`HTTP error! status: ${n.status}`))},n.onerror=()=>{s(new Error("Network error"))},n.send(JSON.stringify(e))})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class V{constructor(e,t){this.storage={},this.prefix=`usermaven_${e}_`,this.load(),this.logger=t||d()}set(e,t){this.storage[e]=t,this.save()}get(e){return this.storage[e]}remove(e){delete this.storage[e],this.save()}clear(){this.storage={},this.save()}save(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{localStorage.setItem(this.prefix+"data",JSON.stringify(this.storage))}catch(e){this.logger.error("Error saving to localStorage:",e)}}load(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{const e=localStorage.getItem(this.prefix+"data");e&&(this.storage=JSON.parse(e))}catch(e){this.logger.error("Error loading from localStorage:",e)}}}class fe{constructor(){this.storage={}}set(e,t){this.storage[e]=t}get(e){return this.storage[e]}remove(e){delete this.storage[e]}save(){}clear(){this.storage={}}}class J{constructor(e,t=3,s=1e3,n=10,r=1e3,o=d(),c="default"){this.transport=e,this.maxRetries=t,this.retryInterval=s,this.batchSize=n,this.batchInterval=r,this.logger=o,this.queue=[],this.processing=!1,this.batchTimeoutId=null,this.isOnline=!0,this.persistence=new V(`offline_queue_${c}`),u()&&(this.isOnline=navigator.onLine,this.loadQueueFromStorage(),this.initNetworkListeners(),this.scheduleBatch())}add(e){const t={payload:e,retries:0,timestamp:Date.now()};this.queue.push(t),u()?this.saveQueueToStorage():this.processBatch()}initNetworkListeners(){u()&&(window.addEventListener("online",()=>{this.isOnline=!0,this.processBatch()}),window.addEventListener("offline",()=>{this.isOnline=!1}))}scheduleBatch(){u()&&(this.batchTimeoutId!==null&&clearTimeout(this.batchTimeoutId),this.batchTimeoutId=window.setTimeout(()=>this.processBatch(),this.batchInterval))}async processBatch(){if((!u()||this.isOnline)&&!this.processing&&this.queue.length>0){this.processing=!0;const e=this.queue.splice(0,this.batchSize),t=e.map(s=>s.payload);try{await this.transport.send(t),this.logger.debug(`Successfully sent batch of ${e.length} payloads`),u()&&this.saveQueueToStorage()}catch(s){this.logger.error("Failed to send batch",s),await this.handleBatchFailure(e)}this.processing=!1}u()&&this.scheduleBatch()}async handleBatchFailure(e){for(const t of e)t.retries<this.maxRetries?(t.retries++,this.queue.unshift(t),this.logger.warn(`Retry attempt ${t.retries} for payload`)):this.logger.error("Max retries reached, discarding payload",t.payload);u()&&(this.saveQueueToStorage(),await new Promise(t=>setTimeout(t,this.retryInterval)))}loadQueueFromStorage(){if(u()){const e=this.persistence.get("queue");e&&(this.queue=JSON.parse(e))}}saveQueueToStorage(){u()&&this.persistence.set("queue",JSON.stringify(this.queue))}}class pe{constructor(e){this.clicks=[],this.threshold=3,this.timeWindow=2e3,this.distanceThreshold=30,this.client=e,this.initializeEventListener(),I(this)}initializeEventListener(){document.addEventListener("click",this.handleClick.bind(this))}handleClick(e){const t=e.target;this.shouldCaptureElement(t)&&this.click(e.clientX,e.clientY,Date.now())}shouldCaptureElement(e){return!e.closest(".um-no-capture")}click(e,t,s){const n={x:e,y:t,timestamp:s};this.clicks.push(n),this.clicks=this.clicks.filter(r=>s-r.timestamp<this.timeWindow),this.clicks.length>=this.threshold&&this.checkRageClick()}checkRageClick(){const e=this.clicks[0],s=(this.clicks[this.clicks.length-1].timestamp-e.timestamp)/1e3;this.clicks.every((r,o)=>{if(o===0)return!0;const c=this.clicks[o-1];return Math.sqrt(Math.pow(r.x-c.x,2)+Math.pow(r.y-c.y,2))<this.distanceThreshold})&&this.sendRageClickEvent(s)}sendRageClickEvent(e){const t=this.clicks[this.clicks.length-1];document.elementFromPoint(t.x,t.y)&&this.client.track("$rage_click",{no_of_clicks:this.clicks.length,time:e.toFixed(2)}),this.clicks=[]}}class me{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=new(void 0)(this.constructUrl(t)),n={hostname:s.hostname,port:443,path:`${s.pathname}${s.search}`,method:"POST",headers:{"Content-Type":"application/json",...this.getCustomHeaders()}};return new Promise((r,o)=>{const c=(void 0)(n,l=>{l.on("data",a=>{}),l.on("end",()=>{const a=l.statusCode||0;a>=200&&a<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),r()):o(new Error(`HTTP error! status: ${a}`))})});c.on("error",l=>{o(l)}),c.write(JSON.stringify(e)),c.end()})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"";return`${this.trackingHost}/api/v1/s2s/event?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}}class k{constructor(e,t="all",s={}){this.instance=e,this.trackingType=t,this.options=s,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.initialize.bind(this)):this.initialize()}initialize(){this.trackingType!=="none"&&this.setupFormTracking()}setupFormTracking(){var e;this.formElements=this.trackingType==="tagged"?document.querySelectorAll("form[data-um-form]"):document.querySelectorAll("form"),(e=this.formElements)==null||e.forEach(t=>{t.addEventListener("submit",this.handleFormSubmit.bind(this))})}handleFormSubmit(e){const t=e.target,s=this._getFormDetails(t);this.instance.track("$form",D(s)),this.options.trackFieldChanges&&this.trackFieldChanges(t)}trackFieldChanges(e){e.querySelectorAll("input, select, textarea").forEach(s=>{s.addEventListener("change",n=>{const r=this._getFieldProps(n.target,0);this.instance.track("$form_field_change",D(r))})})}static getInstance(e,t="all",s={}){return k.instance||(k.instance=new k(e,t,s)),k.instance}_getFormDetails(e){const t={form_id:e.id,form_name:e.name||"",form_action:e.action,form_method:e.method,form_class:e.className,form_attributes:this._getElementAttributes(e)},s=e.querySelectorAll("input, select, textarea");return Array.from(s).filter(r=>!r.classList.contains("um-no-capture")).forEach((r,o)=>{const c=this._getFieldProps(r,o);Object.assign(t,c)}),t}_getFieldProps(e,t){const s=Object.keys(e.dataset).length?JSON.stringify(e.dataset):void 0,n=this.getSafeText(e);return{[`field_${t+1}_tag`]:e.tagName.toLowerCase(),[`field_${t+1}_type`]:e instanceof HTMLInputElement?e.type:void 0,[`field_${t+1}_data_attributes`]:s,[`field_${t+1}_id`]:e.id,[`field_${t+1}_value`]:n,[`field_${t+1}_class`]:e.className,[`field_${t+1}_name`]:e.name,[`field_${t+1}_attributes`]:this._getElementAttributes(e)}}_getElementAttributes(e){return Object.keys(e.dataset).length?JSON.parse(JSON.stringify(e.dataset)):{}}getSafeText(e){let t="";return"value"in e&&e.type!=="password"?t=e.value:e.hasChildNodes()?t=Array.from(e.childNodes).filter(n=>n.nodeType===Node.TEXT_NODE).map(n=>n.textContent).join(""):t=e.textContent||"",this._scrubPotentiallySensitiveValues(t)}_scrubPotentiallySensitiveValues(e){return this._shouldCaptureValue(e)?e:"<redacted>"}_shouldCaptureValue(e){return!(this._isNullish(e)||this._isString(e)&&(e=this._trim(e),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(e)))}_isNullish(e){return e==null}_isString(e){return typeof e=="string"||e instanceof String}_trim(e){if(typeof String.prototype.trim=="function")return e.trim();let t=0,s=e.length-1;const n=[" ",` | ||
`,"\r"," ","\f","\v"," "," "," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," "," "].join("");for(;t<=s&&n.indexOf(e[t])>-1;)t++;for(;s>=t&&n.indexOf(e[s])>-1;)s--;return e.slice(t,s+1)}}class Q{constructor(e){this.config=this.mergeConfig(e,L),this.logger=d(this.config.logLevel),this.namespace=e.namespace||"default",this.transport=this.initializeTransport(this.config),this.persistence=this.initializePersistence(),this.retryQueue=new J(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,200,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client initialized for namespace: ${this.namespace}`)}initializeBrowserFeatures(){if(this.cookieManager=new K(this.config.cookieDomain),this.config.autocapture&&C.enabledForProject(this.config.key)&&(this.autoCapture=new C(this,this.config,this.logger),this.autoCapture.init()),this.config.formTracking){const e=this.config.formTracking===!0?"all":this.config.formTracking;this.formTracking=k.getInstance(this,e||"none",{trackFieldChanges:!1})}this.config.autoPageview&&(this.pageviewTracking=new he(this)),this.config.crossDomainLinking&&this.manageCrossDomainLinking(),this.config.rageClick&&(this.rageClick=new pe(this)),this.setupPageLeaveTracking()}mergeConfig(e,t){const s=JSON.parse(JSON.stringify(e));let n={...t,...s};return Object.keys(t).forEach(r=>{_(t[r])&&(n[r]=this.mergeConfig(e[r],t[r]))}),n}init(e){this.config={...this.config,...e},this.logger=d(this.config.logLevel),this.namespace=e.namespace||this.namespace,this.transport=this.initializeTransport(e),this.persistence=this.initializePersistence(),this.retryQueue=new J(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,250,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client reinitialized for namespace: ${this.namespace}`)}manageCrossDomainLinking(){if(!this.config.crossDomainLinking||!this.config.domains)return;const e=this.config.domains.split(",").map(s=>s.trim()),t=this.config.cookieName||`__eventn_id_${this.config.key}`;document.addEventListener("click",s=>{var c;const n=this.findClosestLink(s.target);if(!n)return;const r=n.getAttribute("href");if(!r||!r.startsWith("http"))return;const o=new URL(r);if(o.hostname!==window.location.hostname&&e.includes(o.hostname)){const l=(c=this.cookieManager)==null?void 0:c.get(t);l&&(o.searchParams.append("_um",l),n.setAttribute("href",o.toString()))}}),this.logger.debug("Cross-domain linking initialized")}findClosestLink(e){for(;e&&e.tagName!=="A";)e=e.parentElement;return e}initializeTransport(e){const t="https://events.usermaven.com";if(!u())return new me(e.trackingHost||t,e);const s="XMLHttpRequest"in window,n=typeof fetch<"u",r=typeof navigator<"u"&&"sendBeacon"in navigator;if(e.useBeaconApi&&r)return new de(e.trackingHost||t,e,this.logger);if(e.forceUseFetch&&n)return new B(e.trackingHost||t,e,this.logger);if(s)return new ge(e.trackingHost||t,e,this.logger);if(n)return new B(e.trackingHost||t,e,this.logger);throw new Error("No suitable transport method available")}initializePersistence(){return this.config.disableEventPersistence||!u()?new fe:new V(`${this.namespace}_${this.config.key}`,this.logger)}getOrCreateAnonymousId(){var s,n;if(!u())return R();if(this.config.privacyPolicy==="strict"||this.config.cookiePolicy==="strict")return"";const e=this.config.cookieName||`__eventn_id_${this.config.key}`;let t=(s=this.cookieManager)==null?void 0:s.get(e);if(!t){if(this.config.crossDomainLinking){const c=new URLSearchParams(window.location.search).get("_um"),a=window.location.hash.substring(1).split("~"),h=a.length>1?a[1]:void 0;t=c||h||R()}t||(t=R());const r=365*10;(n=this.cookieManager)==null||n.set(e,t,r,document.location.protocol!=="http:",!1)}return t}async id(e,t=!1){if(!_(e))throw new Error("User data must be an object");if(e.email&&!oe(e.email))throw new Error("Invalid email provided");if(!e.id||!q(e.id))throw new Error("User ID must be a string");const s=e.id;if(this.persistence.set("userId",s),this.persistence.set("userProps",e),!t){const n={...e,anonymous_id:this.anonymousId};await this.track("user_identify",n)}this.logger.info("User identified:",e)}track(e,t,s=!1){this.trackInternal(e,t,s)}trackInternal(e,t,s=!1){if(!q(e))throw new Error("Event name must be a string");if(t!==void 0&&(typeof t!="object"||t===null||Array.isArray(t)))throw new Error("Event payload must be a non-null object and not an array");const n=this.createEventPayload(e,t);try{if(s){this.transport.send(n),this.logger.debug(`Event sent: ${e}`,[n]);return}this.retryQueue.add(n),this.logger.debug(`Event tracked: ${e}`,[n])}catch(r){throw this.logger.error(`Failed to track event: ${e}`,r),new Error(`Failed to track event: ${e}`)}}rawTrack(e){if(!_(e))throw new Error("Event payload must be an object");this.track("raw",e)}async group(e,t=!1){if(!_(e))throw new Error("Company properties must be an object");if(!e.id||!e.name||!e.created_at)throw new Error("Company properties must include id, name, and created_at");this.persistence.set("companyProps",e),t||await this.track("group",e),this.logger.info("Company identified:",e)}createEventPayload(e,t){const s=this.persistence.get("userProps")||{},n=this.persistence.get("companyProps")||(s==null?void 0:s.company)||{},r=this.persistence.get("userId"),o=this.persistence.get("global_props")||{},c=this.persistence.get(`props_${e}`)||{};let l=t||{};const a={event_id:"",user:{anonymous_id:this.anonymousId,id:r,...s},...n&&{company:n},ids:this.getThirdPartyIds(),utc_time:new Date().toISOString(),local_tz_offset:new Date().getTimezoneOffset(),api_key:this.config.key,src:"usermaven",event_type:e,namespace:this.namespace,...o,...c};if(e==="$autocapture"){const h=this.processAutocaptureAttributes(t||{});a.autocapture_attributes=h}else e!=="user_identify"&&e!=="group"&&(Array.isArray(this.config.propertyBlacklist)&&this.config.propertyBlacklist.forEach(h=>{delete l[h]}),a.event_attributes=l);return u()&&(a.referer=document.referrer,a.url=window.location.href,a.page_title=document.title,a.doc_path=window.location.pathname,a.doc_host=window.location.hostname,a.doc_search=window.location.search,a.screen_resolution=`${window.screen.width}x${window.screen.height}`,a.vp_size=`${window.innerWidth}x${window.innerHeight}`,a.user_agent=navigator.userAgent,a.user_language=navigator.language,a.doc_encoding=document.characterSet,a.utm=this.getUtmParams()),a}processAutocaptureAttributes(e){let t={};const s=e.$elements||[];return s.length&&(t={...s[0]}),t.el_text=t.$el_text||"",t.event_type=e.$event_type||"",["$ce_version","$event_type","$initial_referrer","$initial_referring_domain","$referrer","$referring_domain","$elements"].forEach(n=>{delete t[n]}),delete t.$el_text,delete t.nth_child,delete t.nth_of_type,t}getCookie(e){var t;return((t=this.cookieManager)==null?void 0:t.get(e))||null}getThirdPartyIds(){const e={};if(u()){const t=this.getCookie("_fbp");t&&(e.fbp=t)}return e}getUtmParams(){const e={},t=ce(window.location.search);return["utm_source","utm_medium","utm_campaign","utm_term","utm_content"].forEach(n=>{t[n]&&(e[n.replace("utm_","")]=t[n])}),e}pageview(){u()?this.track("pageview",{url:window.location.href,referrer:document.referrer,title:document.title},!0):this.logger.warn("Pageview tracking is not available in server-side environments")}setupPageLeaveTracking(){if(!u())return;let e=!1,t=!1;const s=()=>{!e&&!t&&(e=!0,this.track("$pageleave",{url:window.location.href,referrer:document.referrer,title:document.title}))};window.addEventListener("beforeunload",r=>{t=!0,setTimeout(()=>{t=!1},100)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&!t&&s()});const n=history.pushState;history.pushState=function(){return s(),n.apply(this,arguments)},window.addEventListener("popstate",s)}getConfig(){return this.config}getLogger(){return this.logger}async reset(e=!1){if(this.persistence.clear(),e&&this.cookieManager){const t=this.config.cookieName||`__eventn_id_${this.config.key}`;this.cookieManager.delete(t),this.anonymousId=this.getOrCreateAnonymousId()}this.logger.info("core state reset",{resetAnonId:e,namespace:this.namespace})}set(e,t){if(!_(e))throw new Error("Properties must be an object");const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};r={...r,...e},this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};r={...r,...e},this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug("Properties set",{properties:e,eventType:s||"global",persist:n})}setUserId(e){this.persistence.set("userId",e);let t=this.persistence.get("userProps")||{};t.id=e,this.persistence.set("userProps",t),this.persistence.save()}unset(e,t){const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};delete r[e],this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};delete r[e],this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug(`Property unset: ${e}`,`Event type: ${s||"global"}`)}}function W(i){const e=JSON.parse(JSON.stringify(i)),t=H(e),s={...L,...t};if(!s.key)throw new Error("API key is required!");if(!s.trackingHost)throw new Error("Tracking host is required!");return new Q(s)}function ye(i){var n;const e={key:i.getAttribute("data-key")||void 0,trackingHost:i.getAttribute("data-tracking-host")||"https://events.usermaven.com",logLevel:le(i.getAttribute("data-log-level")),autocapture:i.getAttribute("data-autocapture")==="true",formTracking:i.getAttribute("data-form-tracking")==="false"?!1:i.getAttribute("data-form-tracking")==="true"?"all":i.getAttribute("data-form-tracking"),autoPageview:i.getAttribute("data-auto-pageview")==="true",useBeaconApi:i.getAttribute("data-use-beacon-api")==="true",forceUseFetch:i.getAttribute("data-force-use-fetch")==="true",gaHook:i.getAttribute("data-ga-hook")==="true",segmentHook:i.getAttribute("data-segment-hook")==="true",randomizeUrl:i.getAttribute("data-randomize-url")==="true",capture3rdPartyCookies:i.getAttribute("data-capture-3rd-party-cookies")==="false"?!1:void 0,idMethod:i.getAttribute("data-id-method")||void 0,privacyPolicy:i.getAttribute("data-privacy-policy")==="strict"?"strict":void 0,ipPolicy:i.getAttribute("data-ip-policy")||void 0,cookiePolicy:i.getAttribute("data-cookie-policy")||void 0,minSendTimeout:parseInt(i.getAttribute("data-min-send-timeout")||"",10)||void 0,maxSendTimeout:parseInt(i.getAttribute("data-max-send-timeout")||"",10)||void 0,maxSendAttempts:parseInt(i.getAttribute("data-max-send-attempts")||"",10)||void 0,propertiesStringMaxLength:parseInt(i.getAttribute("data-properties-string-max-length")||"",10)||null,propertyBlacklist:((n=i.getAttribute("data-property-blacklist"))==null?void 0:n.split(","))||void 0,exclude:i.getAttribute("data-exclude")||void 0,namespace:i.getAttribute("data-namespace")||void 0,crossDomainLinking:i.getAttribute("data-cross-domain-linking")!=="false",domains:i.getAttribute("data-domains")||void 0,maskAllText:i.getAttribute("data-mask-all-text")==="true",maskAllElementAttributes:i.getAttribute("data-mask-all-element-attributes")==="true"},t=W(e),s=e.namespace||"usermaven";u()&&t.pageview(),we(s,t)}function we(i,e){let t=!1;const s=[],n=[];function r(){for(;s.length>0;){const a=s.shift();a&&window[i].apply(null,a)}}function o(){n.forEach(a=>a()),n.length=0}window[i]=function(...a){const h=a[0];if(h==="onLoad"){typeof a[1]=="function"&&(t?a[1]():n.push(a[1]));return}if(!t){s.push(a);return}if(typeof e[h]=="function")return e[h].apply(e,a.slice(1));console.error(`Method ${h} not found on UsermavenClient`)};const c=`${i}Q`,l=window[c]||[];for(window[c]=l,l.push=function(...a){return window[i].apply(null,a),Array.prototype.push.apply(this,a)},setTimeout(()=>{t=!0,r(),o(),console.log(`Usermaven client for namespace ${i} is ready`)},0);l.length>0;){const a=l.shift();a&&s.push(a)}}u()&&function(i,e){const t=i.currentScript;function s(){t&&t.src.includes("lib.js")&&ye(t)}typeof e<"u"&&(i.readyState==="loading"?i.addEventListener("DOMContentLoaded",s):s())}(document,window),f.LogLevel=g,f.UsermavenClient=Q,f.usermavenClient=W,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}); | ||
(function(f,g){typeof exports=="object"&&typeof module<"u"?g(exports):typeof define=="function"&&define.amd?define(["exports"],g):(f=typeof globalThis<"u"?globalThis:f||self,g(f.Usermaven={}))})(this,function(f){"use strict";var g=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i))(g||{});class X{constructor(e){this.level=e}debug(e,...t){this.level<=0&&console.debug("[Usermaven Debug]:",e,...t)}info(e,...t){this.level<=1&&console.info("[Usermaven Info]:",e,...t)}warn(e,...t){this.level<=2&&console.warn("[Usermaven Warning]:",e,...t)}error(e,...t){this.level<=3&&console.error("[Usermaven Error]:",e,...t)}}function d(i=0){return new X(i)}const L={logLevel:g.ERROR,useBeaconApi:!1,forceUseFetch:!1,trackingHost:"t.usermaven.com",autocapture:!1,rageClick:!1,formTracking:!1,autoPageview:!1,disableEventPersistence:!1,gaHook:!1,segmentHook:!1,randomizeUrl:!1,capture3rdPartyCookies:["_ga","_fbp","_ym_uid","ajs_user_id","ajs_anonymous_id"],idMethod:"cookie",ipPolicy:"keep",cookiePolicy:"keep",minSendTimeout:0,maxSendTimeout:2e3,maxSendAttempts:4,propertiesStringMaxLength:null,propertyBlacklist:[],crossDomainLinking:!0,maskAllText:!1,maskAllElementAttributes:!1};class K{constructor(e){this.domain=e,this.cookieDomain=this.getCookieDomain()}set(e,t,s=365,n=!0,r=!1){const o=new Date;o.setTime(o.getTime()+s*24*60*60*1e3);const c=`expires=${o.toUTCString()}`,l=n?"; Secure":"",a=r?"; HttpOnly":"";document.cookie=`${e}=${t};${c};path=/;domain=${this.cookieDomain}${l}${a}`}get(e){const t=e+"=",s=document.cookie.split(";");for(let n=0;n<s.length;n++){let r=s[n].trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null}delete(e,t="/"){document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${t};domain=${this.cookieDomain}`}getCookieDomain(){return typeof window>"u"||this.domain?this.domain||"":this.extractRoot(window.location.hostname)}extractRoot(e){if(this.isIpAddress(e)||e==="localhost")return e;let t=this.extractTopLevelDomain(e);return t||(t=this.extractRootDomain(e)),"."+t}isIpAddress(e){const t=e.split(".");return t.length===4&&t.every(s=>!isNaN(Number(s)))}extractHostname(e){let t;return e.indexOf("//")>-1?t=e.split("/")[2]:t=e.split("/")[0],t=t.split(":")[0],t=t.split("?")[0],t}extractRootDomain(e){let t=this.extractHostname(e);const s=t.split("."),n=s.length;return n>2&&(s[n-1].length==2?(t=s[n-2]+"."+s[n-1],s[n-2].length==2&&(t=s[n-3]+"."+t)):t=s[n-2]+"."+s[n-1]),t}extractTopLevelDomain(e){const t=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,s=e.match(t);return s?s[0]:""}}const G=Object.prototype.hasOwnProperty,P=Array.prototype.forEach,A={};function Y(i,e,t){if(Array.isArray(i)){if(P&&i.forEach===P)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}}}const x=function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},Z=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=i[e].bind(i))};function m(i,e,t){if(i!=null){if(P&&Array.isArray(i)&&i.forEach===P)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}else for(const s in i)if(G.call(i,s)&&e.call(t,i[s],s)===A)return}}const j=function(i,...e){return Y(e,function(t){for(const s in t)t[s]!==void 0&&(i[s]=t[s])}),i};function v(i,e){return i.indexOf(e)!==-1}const ee=function(i){try{return/^\s*\bfunction\b/.test(i)}catch{return!1}},te=function(i){return i===void 0},w=function(){const i=function(s,n,r,o,c){if(!s){d().error("No valid element provided to register_event");return}if(s.addEventListener&&!o)s.addEventListener(n,r,!!c);else{const l="on"+n,a=s[l];s[l]=e(s,r,a)}};function e(s,n,r){return function(o){if(o=o||t(window.event),!o)return;let c=!0,l;ee(r)&&(l=r(o));const a=n.call(s,o);return(l===!1||a===!1)&&(c=!1),c}}function t(s){return s&&(s.preventDefault=t.preventDefault,s.stopPropagation=t.stopPropagation),s}return t.preventDefault=function(){this.returnValue=!1},t.stopPropagation=function(){this.cancelBubble=!0},i}(),ie=function(i){return function(...e){try{return i.apply(this,e)}catch(t){d().error("Implementation error. Please turn on debug and contact support@usermaven.com.",t)}}},I=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=ie(i[e]))};function D(i){for(let e in i)(i[e]===""||i[e]===null||i[e]===void 0||typeof i[e]=="object"&&Object.keys(i[e]).length===0)&&delete i[e];return i}function u(){try{return typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0}catch{return d().warn("window is not available"),!1}}function y(i=5){const e=new Uint8Array(i);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(36).padStart(2,"0")).join("").slice(0,i)}function se(i){return i.replace(/([-_][a-z])/g,e=>e.toUpperCase().replace("-","").replace("_",""))}function H(i){return typeof i!="object"||i===null?i:Array.isArray(i)?i.map(H):Object.keys(i).reduce((e,t)=>{const s=se(t);return e[s]=H(i[t]),e},{})}function E(i){switch(typeof i.className){case"string":return i.className;case"object":return("baseVal"in i.className?i.className.baseVal:null)||i.getAttribute("class")||"";default:return""}}function U(i){let e="";return O(i)&&!B(i)&&i.childNodes&&i.childNodes.length&&m(i.childNodes,function(t){z(t)&&t.textContent&&(e+=x(t.textContent).split(/(\s+)/).filter(S).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))}),x(e)}function F(i){return!!i&&i.nodeType===1}function p(i,e){return!!i&&!!i.tagName&&i.tagName.toLowerCase()===e.toLowerCase()}function z(i){return!!i&&i.nodeType===3}function N(i){return!!i&&i.nodeType===11}const $=["a","button","form","input","select","textarea","label"];function ne(i,e){if(!i||p(i,"html")||!F(i))return!1;let t=i;for(;t&&!p(t,"body");){if(t.classList&&t.classList.contains("um-no-capture"))return!1;t.parentNode&&N(t.parentNode)?t=t.parentNode.host:t=t.parentNode}let s=!1;for(t=i;t&&!p(t,"body");){if(t.parentNode&&N(t.parentNode)){t=t.parentNode.host,t&&$.indexOf(t.tagName.toLowerCase())>-1&&(s=!0);continue}const o=t.parentNode;if(!o)break;if($.indexOf(o.tagName.toLowerCase())>-1)s=!0;else{const c=window.getComputedStyle(o);c&&c.getPropertyValue("cursor")==="pointer"&&(s=!0)}t=o}const n=window.getComputedStyle(i);if(n&&n.getPropertyValue("cursor")==="pointer"&&e.type==="click")return!0;const r=i.tagName.toLowerCase();switch(r){case"html":return!1;case"form":return e.type==="submit";case"input":return e.type==="change"||e.type==="click";case"select":case"textarea":return e.type==="change"||e.type==="click";default:return s?e.type==="click":e.type==="click"&&($.indexOf(r)>-1||i.getAttribute("contenteditable")==="true")}}function O(i){for(let s=i;s.parentNode&&!p(s,"body");s=s.parentNode){const n=E(s).split(" ");if(v(n,"ph-sensitive")||v(n,"ph-no-capture"))return!1}if(v(E(i).split(" "),"ph-include"))return!0;const e=i.type||"";if(typeof e=="string")switch(e.toLowerCase()){case"hidden":return!1;case"password":return!1}const t=i.name||i.id||"";return!(typeof t=="string"&&/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(t.replace(/[^a-zA-Z0-9]/g,"")))}function B(i){const e=["button","checkbox","submit","reset"];return!!(p(i,"input")&&!e.includes(i.type)||p(i,"select")||p(i,"textarea")||i.getAttribute("contenteditable")==="true")}function S(i){return!(i===null||te(i)||typeof i=="string"&&(i=x(i),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((i||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(i)))}function re(i){return typeof i=="string"?i.substring(0,10)==="_ngcontent"||i.substring(0,7)==="_nghost":!1}function R(){return y(10)}function oe(i){return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(i).toLowerCase())}function ae(i,e){let t;return function(...s){const n=()=>{clearTimeout(t),i(...s)};clearTimeout(t),t=setTimeout(n,e)}}function ce(i){const e={},t=i.replace(/^\?/,"").split("&");for(let s=0;s<t.length;s++){const n=t[s].split("=");n[0]!==""&&(e[decodeURIComponent(n[0])]=decodeURIComponent(n[1]||""))}return e}function M(i){return typeof i=="string"||i instanceof String}function _(i){return i!==null&&typeof i=="object"&&i.constructor===Object}function le(i){if(i===null)return g.ERROR;const e=i.toUpperCase(),t=g[e];return t||t===0?t:g.ERROR}const ue=()=>{let i="false";return typeof window<"u"&&window.localStorage&&(i=localStorage.getItem("um_exclusion")),!(i==null||i==="false")};class he{constructor(e){this.maxScrollDepth=0,this.milestones=[25,50,75,90],this.lastScrollDepth=0,this.client=e,this.documentElement=document.documentElement,this.debouncedHandleScroll=ae(this.handleScroll.bind(this),250),this.initializeEventListener()}initializeEventListener(){window.addEventListener("scroll",this.debouncedHandleScroll)}track(){const e=this.getScrollDepth();e>this.lastScrollDepth&&(this.lastScrollDepth=e,this.checkMilestones(e))}send(e="$scroll"){if(!this.lastScrollDepth)return;const t={percent:this.lastScrollDepth,window_height:this.getWindowHeight(),document_height:this.getDocumentHeight(),scroll_distance:this.getScrollDistance()};this.client.track(e,t)}handleScroll(){this.track()}getScrollDepth(){const e=this.getWindowHeight(),t=this.getDocumentHeight(),s=this.getScrollDistance(),n=t-e;return Math.min(100,Math.floor(s/n*100))}getWindowHeight(){return window.innerHeight||this.documentElement.clientHeight||document.body.clientHeight||0}getDocumentHeight(){return Math.max(document.body.scrollHeight||0,this.documentElement.scrollHeight||0,document.body.offsetHeight||0,this.documentElement.offsetHeight||0,document.body.clientHeight||0,this.documentElement.clientHeight||0)}getScrollDistance(){return window.pageYOffset||this.documentElement.scrollTop||document.body.scrollTop||0}checkMilestones(e){this.milestones.filter(s=>e>=s).forEach(s=>{this.send(),this.milestones=this.milestones.filter(n=>n!==s)})}}const T=class T{constructor(e,t,s=d()){this.logger=s,this.scrollDepth=null,this.customProperties=[],this.client=e,this.options=t,this.scrollDepth=new he(e),Z(this),I(this)}init(){if(!(document&&document.body)){this.logger.debug("Document not ready yet, trying again in 500 milliseconds..."),setTimeout(()=>this.init(),500);return}this.addDomEventHandlers()}addDomEventHandlers(){const e=t=>{t=t||window.event,this.captureEvent(t)};w(document,"submit",e,!1,!0),w(document,"change",e,!1,!0),w(document,"click",e,!1,!0),w(document,"visibilitychange",e,!1,!0),w(document,"scroll",e,!1,!0),w(window,"popstate",e,!1,!0)}isPageRefresh(){if("PerformanceNavigationTiming"in window){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type==="reload"}return performance.navigation&&performance.navigation.type===1}captureEvent(e){var s,n;let t=this.getEventTarget(e);if(z(t)&&(t=t.parentNode||null),e.type==="scroll")return(s=this.scrollDepth)==null||s.track(),!0;if(e.type==="visibilitychange"&&document.visibilityState==="hidden"||e.type==="popstate")return this.isPageRefresh()||(n=this.scrollDepth)==null||n.send(),!0;if(t&&ne(t,e)){const r=[t];let o=t;for(;o.parentNode&&!p(o,"body");){if(N(o.parentNode)){r.push(o.parentNode.host),o=o.parentNode.host;continue}r.push(o.parentNode),o=o.parentNode}const c=[];let l,a=!1;if(m(r,b=>{const ve=O(b);b.tagName.toLowerCase()==="a"&&(l=b.getAttribute("href"),l=ve&&S(l)&&l);const _e=E(b).split(" ");v(_e,"ph-no-capture")&&(a=!0),c.push(this.getPropertiesFromElement(b,this.options.maskAllElementAttributes??!1,this.options.maskAllText??!1))}),this.options.maskAllText||(c[0].$el_text=U(t)),l&&(c[0].attr__href=l),a)return!1;const h=j(this.getDefaultProperties(e.type),{$elements:c},this.getCustomProperties(r));return this.client.track("$autocapture",h),!0}}getCustomProperties(e){const t={};return m(this.customProperties,s=>{m(s.event_selectors,n=>{const r=document.querySelectorAll(n);m(r,o=>{v(e,o)&&O(o)&&(t[s.name]=this.extractCustomPropertyValue(s))})})}),t}extractCustomPropertyValue(e){const t=[];return m(document.querySelectorAll(e.css_selector),function(s){let n;["input","select"].indexOf(s.tagName.toLowerCase())>-1?n=s.value:s.textContent&&(n=s.textContent),S(n)&&t.push(n)}),t.join(", ")}getEventTarget(e){var t;return typeof e.target>"u"?e.srcElement||null:(t=e.target)!=null&&t.shadowRoot?e.composedPath()[0]||null:e.target||null}getPropertiesFromElement(e,t,s){const n=e.tagName.toLowerCase(),r={tag_name:n};$.indexOf(n)>-1&&!s&&(r.$el_text=U(e));const o=E(e);o.length>0&&(r.classes=o.split(" ").filter(function(h){return h!==""})),m(e.attributes,function(h){B(e)&&["name","id","class"].indexOf(h.name)===-1||!t&&S(h.value)&&!re(h.name)&&(r["attr__"+h.name]=h.value)});let c=1,l=1,a=e;for(;a=this.previousElementSibling(a);)c++,a.tagName===e.tagName&&l++;return r.nth_child=c,r.nth_of_type=l,r}previousElementSibling(e){if(e.previousElementSibling)return e.previousElementSibling;{let t=e;do t=t.previousSibling;while(t&&!F(t));return t}}getDefaultProperties(e){return{$event_type:e,$ce_version:1}}encodeHtml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}static enabledForProject(e,t=10,s=10){if(!e)return!1;let n=0;for(let r=0;r<e.length;r++)n+=e.charCodeAt(r);return n%t<s}};T.FORCE_CAPTURE_ATTR="data-um-force-capture",T.PREVENT_CAPTURE_ATTR="data-um-no-capture";let C=T;class de{constructor(e){this.client=e,this.lastPageUrl=window.location.href,this.trackInitialPageview(),this.initializePageviewTracking()}trackInitialPageview(){this.trackPageview()}initializePageviewTracking(){window.addEventListener("popstate",this.handlePageview.bind(this));const e=history.pushState;history.pushState=(...t)=>{e.apply(history,t),this.handlePageview()},window.addEventListener("hashchange",this.handlePageview.bind(this)),setInterval(this.checkForUrlChange.bind(this),1e3)}handlePageview(){this.trackPageview()}checkForUrlChange(){window.location.href!==this.lastPageUrl&&this.trackPageview()}trackPageview(){const e=window.location.href;e!==this.lastPageUrl&&(this.lastPageUrl=e,this.client.track("pageview",{url:e,referrer:document.referrer,title:document.title}))}}class ge{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=new Blob([JSON.stringify(e)],{type:"application/json"});if(navigator.sendBeacon(s,n))this.logger.debug(`Successfully queued ${e.length} event(s) via Beacon API`);else throw new Error("Failed to queue events via Beacon API")}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}}class q{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=JSON.stringify(e),r={"Content-Type":"application/json",...this.getCustomHeaders()},o=await fetch(s,{method:"POST",headers:r,body:n});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);this.logger.debug(`Successfully sent ${e.length} event(s)`),this.postHandle(o.status,await o.text())}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class fe{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}send(e){return new Promise((t,s)=>{const n=new XMLHttpRequest,r=this.config.key,o=this.constructUrl(r);n.open("POST",o,!0),n.setRequestHeader("Content-Type","application/json");const c=this.getCustomHeaders();Object.keys(c).forEach(l=>{n.setRequestHeader(l,c[l])}),n.onload=()=>{n.status>=200&&n.status<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),t()):s(new Error(`HTTP error! status: ${n.status}`))},n.onerror=()=>{s(new Error("Network error"))},n.send(JSON.stringify(e))})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${y()}?p_${y()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class V{constructor(e,t){this.storage={},this.prefix=`usermaven_${e}_`,this.load(),this.logger=t||d()}set(e,t){this.storage[e]=t,this.save()}get(e){return this.storage[e]}remove(e){delete this.storage[e],this.save()}clear(){this.storage={},this.save()}save(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{localStorage.setItem(this.prefix+"data",JSON.stringify(this.storage))}catch(e){this.logger.error("Error saving to localStorage:",e)}}load(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{const e=localStorage.getItem(this.prefix+"data");e&&(this.storage=JSON.parse(e))}catch(e){this.logger.error("Error loading from localStorage:",e)}}}class pe{constructor(){this.storage={}}set(e,t){this.storage[e]=t}get(e){return this.storage[e]}remove(e){delete this.storage[e]}save(){}clear(){this.storage={}}}class J{constructor(e,t=3,s=1e3,n=10,r=1e3,o=d(),c="default"){this.transport=e,this.maxRetries=t,this.retryInterval=s,this.batchSize=n,this.batchInterval=r,this.logger=o,this.queue=[],this.processing=!1,this.batchTimeoutId=null,this.isOnline=!0,this.persistence=new V(`offline_queue_${c}`),u()&&(this.isOnline=navigator.onLine,this.loadQueueFromStorage(),this.initNetworkListeners(),this.scheduleBatch())}add(e){const t={payload:e,retries:0,timestamp:Date.now()};this.queue.push(t),u()?this.saveQueueToStorage():this.processBatch()}initNetworkListeners(){u()&&(window.addEventListener("online",()=>{this.isOnline=!0,this.processBatch()}),window.addEventListener("offline",()=>{this.isOnline=!1}))}scheduleBatch(){u()&&(this.batchTimeoutId!==null&&clearTimeout(this.batchTimeoutId),this.batchTimeoutId=window.setTimeout(()=>this.processBatch(),this.batchInterval))}async processBatch(){if((!u()||this.isOnline)&&!this.processing&&this.queue.length>0){this.processing=!0;const e=this.queue.splice(0,this.batchSize),t=e.map(s=>s.payload);try{await this.transport.send(t),this.logger.debug(`Successfully sent batch of ${e.length} payloads`),u()&&this.saveQueueToStorage()}catch(s){this.logger.error("Failed to send batch",s),await this.handleBatchFailure(e)}this.processing=!1}u()&&this.scheduleBatch()}async handleBatchFailure(e){for(const t of e)t.retries<this.maxRetries?(t.retries++,this.queue.unshift(t),this.logger.warn(`Retry attempt ${t.retries} for payload`)):this.logger.error("Max retries reached, discarding payload",t.payload);u()&&(this.saveQueueToStorage(),await new Promise(t=>setTimeout(t,this.retryInterval)))}loadQueueFromStorage(){if(u()){const e=this.persistence.get("queue");e&&(this.queue=JSON.parse(e))}}saveQueueToStorage(){u()&&this.persistence.set("queue",JSON.stringify(this.queue))}}class me{constructor(e){this.clicks=[],this.threshold=3,this.timeWindow=2e3,this.distanceThreshold=30,this.client=e,this.initializeEventListener(),I(this)}initializeEventListener(){document.addEventListener("click",this.handleClick.bind(this))}handleClick(e){const t=e.target;this.shouldCaptureElement(t)&&this.click(e.clientX,e.clientY,Date.now())}shouldCaptureElement(e){return!e.closest(".um-no-capture")}click(e,t,s){const n={x:e,y:t,timestamp:s};this.clicks.push(n),this.clicks=this.clicks.filter(r=>s-r.timestamp<this.timeWindow),this.clicks.length>=this.threshold&&this.checkRageClick()}checkRageClick(){const e=this.clicks[0],s=(this.clicks[this.clicks.length-1].timestamp-e.timestamp)/1e3;this.clicks.every((r,o)=>{if(o===0)return!0;const c=this.clicks[o-1];return Math.sqrt(Math.pow(r.x-c.x,2)+Math.pow(r.y-c.y,2))<this.distanceThreshold})&&this.sendRageClickEvent(s)}sendRageClickEvent(e){const t=this.clicks[this.clicks.length-1];document.elementFromPoint(t.x,t.y)&&this.client.track("$rage_click",{no_of_clicks:this.clicks.length,time:e.toFixed(2)}),this.clicks=[]}}class ye{constructor(e,t,s=d()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=new(void 0)(this.constructUrl(t)),n={hostname:s.hostname,port:443,path:`${s.pathname}${s.search}`,method:"POST",headers:{"Content-Type":"application/json",...this.getCustomHeaders()}};return new Promise((r,o)=>{const c=(void 0)(n,l=>{l.on("data",a=>{}),l.on("end",()=>{const a=l.statusCode||0;a>=200&&a<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),r()):o(new Error(`HTTP error! status: ${a}`))})});c.on("error",l=>{o(l)}),c.write(JSON.stringify(e)),c.end()})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"";return`${this.trackingHost}/api/v1/s2s/event?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}}class k{constructor(e,t="all",s={}){this.instance=e,this.trackingType=t,this.options=s,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.initialize.bind(this)):this.initialize()}initialize(){this.trackingType!=="none"&&this.setupFormTracking()}setupFormTracking(){var e;this.formElements=this.trackingType==="tagged"?document.querySelectorAll("form[data-um-form]"):document.querySelectorAll("form"),(e=this.formElements)==null||e.forEach(t=>{t.addEventListener("submit",this.handleFormSubmit.bind(this))})}handleFormSubmit(e){const t=e.target,s=this._getFormDetails(t);this.instance.track("$form",D(s)),this.options.trackFieldChanges&&this.trackFieldChanges(t)}trackFieldChanges(e){e.querySelectorAll("input, select, textarea").forEach(s=>{s.addEventListener("change",n=>{const r=this._getFieldProps(n.target,0);this.instance.track("$form_field_change",D(r))})})}static getInstance(e,t="all",s={}){return k.instance||(k.instance=new k(e,t,s)),k.instance}_getFormDetails(e){const t={form_id:e.id,form_name:e.name||"",form_action:e.action,form_method:e.method,form_class:e.className,form_attributes:this._getElementAttributes(e)},s=e.querySelectorAll("input, select, textarea");return Array.from(s).filter(r=>!r.classList.contains("um-no-capture")).forEach((r,o)=>{const c=this._getFieldProps(r,o);Object.assign(t,c)}),t}_getFieldProps(e,t){const s=Object.keys(e.dataset).length?JSON.stringify(e.dataset):void 0,n=this.getSafeText(e);return{[`field_${t+1}_tag`]:e.tagName.toLowerCase(),[`field_${t+1}_type`]:e instanceof HTMLInputElement?e.type:void 0,[`field_${t+1}_data_attributes`]:s,[`field_${t+1}_id`]:e.id,[`field_${t+1}_value`]:n,[`field_${t+1}_class`]:e.className,[`field_${t+1}_name`]:e.name,[`field_${t+1}_attributes`]:this._getElementAttributes(e)}}_getElementAttributes(e){return Object.keys(e.dataset).length?JSON.parse(JSON.stringify(e.dataset)):{}}getSafeText(e){let t="";return"value"in e&&e.type!=="password"?t=e.value:e.hasChildNodes()?t=Array.from(e.childNodes).filter(n=>n.nodeType===Node.TEXT_NODE).map(n=>n.textContent).join(""):t=e.textContent||"",this._scrubPotentiallySensitiveValues(t)}_scrubPotentiallySensitiveValues(e){return this._shouldCaptureValue(e)?e:"<redacted>"}_shouldCaptureValue(e){return!(this._isNullish(e)||this._isString(e)&&(e=this._trim(e),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(e)))}_isNullish(e){return e==null}_isString(e){return typeof e=="string"||e instanceof String}_trim(e){if(typeof String.prototype.trim=="function")return e.trim();let t=0,s=e.length-1;const n=[" ",` | ||
`,"\r"," ","\f","\v"," "," "," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," "," "].join("");for(;t<=s&&n.indexOf(e[t])>-1;)t++;for(;s>=t&&n.indexOf(e[s])>-1;)s--;return e.slice(t,s+1)}}class Q{constructor(e){this.config=this.mergeConfig(e,L),this.logger=d(this.config.logLevel),this.namespace=e.namespace||"default",this.transport=this.initializeTransport(this.config),this.persistence=this.initializePersistence(),this.retryQueue=new J(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,200,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client initialized for namespace: ${this.namespace}`)}initializeBrowserFeatures(){if(this.cookieManager=new K(this.config.cookieDomain),this.config.autocapture&&C.enabledForProject(this.config.key)&&(this.autoCapture=new C(this,this.config,this.logger),this.autoCapture.init()),this.config.formTracking){const e=this.config.formTracking===!0?"all":this.config.formTracking;this.formTracking=k.getInstance(this,e||"none",{trackFieldChanges:!1})}this.config.autoPageview&&(this.pageviewTracking=new de(this)),this.config.crossDomainLinking&&this.manageCrossDomainLinking(),this.config.rageClick&&(this.rageClick=new me(this)),this.setupPageLeaveTracking()}mergeConfig(e,t){const s=JSON.parse(JSON.stringify(e));let n={...t,...s};return Object.keys(t).forEach(r=>{_(t[r])&&(n[r]=this.mergeConfig(e[r],t[r]))}),n}init(e){this.config={...this.config,...e},this.logger=d(this.config.logLevel),this.namespace=e.namespace||this.namespace,this.transport=this.initializeTransport(e),this.persistence=this.initializePersistence(),this.retryQueue=new J(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,250,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client reinitialized for namespace: ${this.namespace}`)}manageCrossDomainLinking(){if(!this.config.crossDomainLinking||!this.config.domains)return;const e=this.config.domains.split(",").map(s=>s.trim()),t=this.config.cookieName||`__eventn_id_${this.config.key}`;document.addEventListener("click",s=>{var c;const n=this.findClosestLink(s.target);if(!n)return;const r=n.getAttribute("href");if(!r||!r.startsWith("http"))return;const o=new URL(r);if(o.hostname!==window.location.hostname&&e.includes(o.hostname)){const l=(c=this.cookieManager)==null?void 0:c.get(t);l&&(o.searchParams.append("_um",l),n.setAttribute("href",o.toString()))}}),this.logger.debug("Cross-domain linking initialized")}findClosestLink(e){for(;e&&e.tagName!=="A";)e=e.parentElement;return e}initializeTransport(e){const t="https://events.usermaven.com";if(!u())return new ye(e.trackingHost||t,e);const s="XMLHttpRequest"in window,n=typeof fetch<"u",r=typeof navigator<"u"&&"sendBeacon"in navigator;if(e.useBeaconApi&&r)return new ge(e.trackingHost||t,e,this.logger);if(e.forceUseFetch&&n)return new q(e.trackingHost||t,e,this.logger);if(s)return new fe(e.trackingHost||t,e,this.logger);if(n)return new q(e.trackingHost||t,e,this.logger);throw new Error("No suitable transport method available")}initializePersistence(){return this.config.disableEventPersistence||!u()?new pe:new V(`${this.namespace}_${this.config.key}`,this.logger)}getOrCreateAnonymousId(){var s,n;if(!u())return R();if(this.config.privacyPolicy==="strict"||this.config.cookiePolicy==="strict")return"";const e=this.config.cookieName||`__eventn_id_${this.config.key}`;let t=(s=this.cookieManager)==null?void 0:s.get(e);if(!t){if(this.config.crossDomainLinking){const c=new URLSearchParams(window.location.search).get("_um"),a=window.location.hash.substring(1).split("~"),h=a.length>1?a[1]:void 0;t=c||h||R()}t||(t=R());const r=365*10;(n=this.cookieManager)==null||n.set(e,t,r,document.location.protocol!=="http:",!1)}return t}async id(e,t=!1){if(!_(e))throw new Error("User data must be an object");if(e.email&&!oe(e.email))throw new Error("Invalid email provided");if(!e.id||!M(e.id))throw new Error("User ID must be a string");const s=e.id;if(this.persistence.set("userId",s),this.persistence.set("userProps",e),!t){const n={...e,anonymous_id:this.anonymousId};await this.track("user_identify",n)}this.logger.info("User identified:",e)}track(e,t,s=!1){this.trackInternal(e,t,s)}trackInternal(e,t,s=!1){if(ue()){this.logger.debug("Tracking disabled due to um_exclusion setting");return}if(!M(e))throw new Error("Event name must be a string");if(t!==void 0&&(typeof t!="object"||t===null||Array.isArray(t)))throw new Error("Event payload must be a non-null object and not an array");const r=this.createEventPayload(e,t);try{if(s){this.transport.send(r),this.logger.debug(`Event sent: ${e}`,[r]);return}this.retryQueue.add(r),this.logger.debug(`Event tracked: ${e}`,[r])}catch(o){throw this.logger.error(`Failed to track event: ${e}`,o),new Error(`Failed to track event: ${e}`)}}rawTrack(e){if(!_(e))throw new Error("Event payload must be an object");this.track("raw",e)}async group(e,t=!1){if(!_(e))throw new Error("Company properties must be an object");if(!e.id||!e.name||!e.created_at)throw new Error("Company properties must include id, name, and created_at");this.persistence.set("companyProps",e),t||await this.track("group",e),this.logger.info("Company identified:",e)}createEventPayload(e,t){const s=this.persistence.get("userProps")||{},n=this.persistence.get("companyProps")||(s==null?void 0:s.company)||{},r=this.persistence.get("userId"),o=this.persistence.get("global_props")||{},c=this.persistence.get(`props_${e}`)||{};let l=t||{};const a={event_id:"",user:{anonymous_id:this.anonymousId,id:r,...s},...n&&{company:n},ids:this.getThirdPartyIds(),utc_time:new Date().toISOString(),local_tz_offset:new Date().getTimezoneOffset(),api_key:this.config.key,src:"usermaven",event_type:e,namespace:this.namespace,...o,...c};if(e==="$autocapture"){const h=this.processAutocaptureAttributes(t||{});a.autocapture_attributes=h}else e!=="user_identify"&&e!=="group"&&(Array.isArray(this.config.propertyBlacklist)&&this.config.propertyBlacklist.forEach(h=>{delete l[h]}),a.event_attributes=l);return u()&&(a.referer=document.referrer,a.url=window.location.href,a.page_title=document.title,a.doc_path=window.location.pathname,a.doc_host=window.location.hostname,a.doc_search=window.location.search,a.screen_resolution=`${window.screen.width}x${window.screen.height}`,a.vp_size=`${window.innerWidth}x${window.innerHeight}`,a.user_agent=navigator.userAgent,a.user_language=navigator.language,a.doc_encoding=document.characterSet,a.utm=this.getUtmParams()),a}processAutocaptureAttributes(e){let t={};const s=e.$elements||[];return s.length&&(t={...s[0]}),t.el_text=t.$el_text||"",t.event_type=e.$event_type||"",["$ce_version","$event_type","$initial_referrer","$initial_referring_domain","$referrer","$referring_domain","$elements"].forEach(n=>{delete t[n]}),delete t.$el_text,delete t.nth_child,delete t.nth_of_type,t}getCookie(e){var t;return((t=this.cookieManager)==null?void 0:t.get(e))||null}getThirdPartyIds(){const e={};if(u()){const t=this.getCookie("_fbp");t&&(e.fbp=t)}return e}getUtmParams(){const e={},t=ce(window.location.search);return["utm_source","utm_medium","utm_campaign","utm_term","utm_content"].forEach(n=>{t[n]&&(e[n.replace("utm_","")]=t[n])}),e}pageview(){u()?this.track("pageview",{url:window.location.href,referrer:document.referrer,title:document.title},!0):this.logger.warn("Pageview tracking is not available in server-side environments")}setupPageLeaveTracking(){if(!u())return;let e=!1,t=!1;const s=()=>{!e&&!t&&(e=!0,this.track("$pageleave",{url:window.location.href,referrer:document.referrer,title:document.title}))};window.addEventListener("beforeunload",r=>{t=!0,setTimeout(()=>{t=!1},100)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&!t&&s()});const n=history.pushState;history.pushState=function(){return s(),n.apply(this,arguments)},window.addEventListener("popstate",s)}getConfig(){return this.config}getLogger(){return this.logger}async reset(e=!1){if(this.persistence.clear(),e&&this.cookieManager){const t=this.config.cookieName||`__eventn_id_${this.config.key}`;this.cookieManager.delete(t),this.anonymousId=this.getOrCreateAnonymousId()}this.logger.info("core state reset",{resetAnonId:e,namespace:this.namespace})}set(e,t){if(!_(e))throw new Error("Properties must be an object");const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};r={...r,...e},this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};r={...r,...e},this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug("Properties set",{properties:e,eventType:s||"global",persist:n})}setUserId(e){this.persistence.set("userId",e);let t=this.persistence.get("userProps")||{};t.id=e,this.persistence.set("userProps",t),this.persistence.save()}unset(e,t){const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};delete r[e],this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};delete r[e],this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug(`Property unset: ${e}`,`Event type: ${s||"global"}`)}}function W(i){const e=JSON.parse(JSON.stringify(i)),t=H(e),s={...L,...t};if(!s.key)throw new Error("API key is required!");if(!s.trackingHost)throw new Error("Tracking host is required!");return new Q(s)}function we(i){var n;const e={key:i.getAttribute("data-key")||void 0,trackingHost:i.getAttribute("data-tracking-host")||"https://events.usermaven.com",logLevel:le(i.getAttribute("data-log-level")),autocapture:i.getAttribute("data-autocapture")==="true",formTracking:i.getAttribute("data-form-tracking")==="false"?!1:i.getAttribute("data-form-tracking")==="true"?"all":i.getAttribute("data-form-tracking"),autoPageview:i.getAttribute("data-auto-pageview")==="true",useBeaconApi:i.getAttribute("data-use-beacon-api")==="true",forceUseFetch:i.getAttribute("data-force-use-fetch")==="true",gaHook:i.getAttribute("data-ga-hook")==="true",segmentHook:i.getAttribute("data-segment-hook")==="true",randomizeUrl:i.getAttribute("data-randomize-url")==="true",capture3rdPartyCookies:i.getAttribute("data-capture-3rd-party-cookies")==="false"?!1:void 0,idMethod:i.getAttribute("data-id-method")||void 0,privacyPolicy:i.getAttribute("data-privacy-policy")==="strict"?"strict":void 0,ipPolicy:i.getAttribute("data-ip-policy")||void 0,cookiePolicy:i.getAttribute("data-cookie-policy")||void 0,minSendTimeout:parseInt(i.getAttribute("data-min-send-timeout")||"",10)||void 0,maxSendTimeout:parseInt(i.getAttribute("data-max-send-timeout")||"",10)||void 0,maxSendAttempts:parseInt(i.getAttribute("data-max-send-attempts")||"",10)||void 0,propertiesStringMaxLength:parseInt(i.getAttribute("data-properties-string-max-length")||"",10)||null,propertyBlacklist:((n=i.getAttribute("data-property-blacklist"))==null?void 0:n.split(","))||void 0,exclude:i.getAttribute("data-exclude")||void 0,namespace:i.getAttribute("data-namespace")||void 0,crossDomainLinking:i.getAttribute("data-cross-domain-linking")!=="false",domains:i.getAttribute("data-domains")||void 0,maskAllText:i.getAttribute("data-mask-all-text")==="true",maskAllElementAttributes:i.getAttribute("data-mask-all-element-attributes")==="true"};e.privacyPolicy==="strict"&&(e.cookiePolicy="strict",e.ipPolicy="strict"),e.cookiePolicy==="comply"&&e.useBeaconApi&&(e.cookiePolicy="strict");const t=W(e),s=e.namespace||"usermaven";u()&&t.pageview(),ke(s,t)}function ke(i,e){let t=!1;const s=[],n=[];function r(){for(;s.length>0;){const a=s.shift();a&&window[i].apply(null,a)}}function o(){n.forEach(a=>a()),n.length=0}window[i]=function(...a){const h=a[0];if(h==="onLoad"){typeof a[1]=="function"&&(t?a[1]():n.push(a[1]));return}if(!t){s.push(a);return}if(typeof e[h]=="function")return e[h].apply(e,a.slice(1));console.error(`Method ${h} not found on UsermavenClient`)};const c=`${i}Q`,l=window[c]||[];for(window[c]=l,l.push=function(...a){return window[i].apply(null,a),Array.prototype.push.apply(this,a)},setTimeout(()=>{t=!0,r(),o(),console.log(`Usermaven client for namespace ${i} is ready`)},0);l.length>0;){const a=l.shift();a&&s.push(a)}}u()&&function(i,e){const t=i.currentScript;function s(){t&&t.src.includes("lib.js")&&we(t)}typeof e<"u"&&(i.readyState==="loading"?i.addEventListener("DOMContentLoaded",s):s())}(document,window),f.LogLevel=g,f.UsermavenClient=Q,f.usermavenClient=W,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}); |
@@ -1,2 +0,2 @@ | ||
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var w=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i))(w||{});class K{constructor(e){this.level=e}debug(e,...t){this.level<=0&&console.debug("[Usermaven Debug]:",e,...t)}info(e,...t){this.level<=1&&console.info("[Usermaven Info]:",e,...t)}warn(e,...t){this.level<=2&&console.warn("[Usermaven Warning]:",e,...t)}error(e,...t){this.level<=3&&console.error("[Usermaven Error]:",e,...t)}}function g(i=0){return new K(i)}const F={logLevel:w.ERROR,useBeaconApi:!1,forceUseFetch:!1,trackingHost:"t.usermaven.com",autocapture:!1,rageClick:!1,formTracking:!1,autoPageview:!1,disableEventPersistence:!1,gaHook:!1,segmentHook:!1,randomizeUrl:!1,capture3rdPartyCookies:["_ga","_fbp","_ym_uid","ajs_user_id","ajs_anonymous_id"],idMethod:"cookie",ipPolicy:"keep",cookiePolicy:"keep",minSendTimeout:0,maxSendTimeout:2e3,maxSendAttempts:4,propertiesStringMaxLength:null,propertyBlacklist:[],crossDomainLinking:!0,maskAllText:!1,maskAllElementAttributes:!1};class G{constructor(e){this.domain=e,this.cookieDomain=this.getCookieDomain()}set(e,t,s=365,n=!0,r=!1){const o=new Date;o.setTime(o.getTime()+s*24*60*60*1e3);const c=`expires=${o.toUTCString()}`,l=n?"; Secure":"",a=r?"; HttpOnly":"";document.cookie=`${e}=${t};${c};path=/;domain=${this.cookieDomain}${l}${a}`}get(e){const t=e+"=",s=document.cookie.split(";");for(let n=0;n<s.length;n++){let r=s[n].trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null}delete(e,t="/"){document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${t};domain=${this.cookieDomain}`}getCookieDomain(){return typeof window>"u"||this.domain?this.domain||"":this.extractRoot(window.location.hostname)}extractRoot(e){if(this.isIpAddress(e)||e==="localhost")return e;let t=this.extractTopLevelDomain(e);return t||(t=this.extractRootDomain(e)),"."+t}isIpAddress(e){const t=e.split(".");return t.length===4&&t.every(s=>!isNaN(Number(s)))}extractHostname(e){let t;return e.indexOf("//")>-1?t=e.split("/")[2]:t=e.split("/")[0],t=t.split(":")[0],t=t.split("?")[0],t}extractRootDomain(e){let t=this.extractHostname(e);const s=t.split("."),n=s.length;return n>2&&(s[n-1].length==2?(t=s[n-2]+"."+s[n-1],s[n-2].length==2&&(t=s[n-3]+"."+t)):t=s[n-2]+"."+s[n-1]),t}extractTopLevelDomain(e){const t=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,s=e.match(t);return s?s[0]:""}}const Y=Object.prototype,Z=Y.hasOwnProperty,j=Array.prototype,E=j.forEach,A={};function ee(i,e,t){if(Array.isArray(i)){if(E&&i.forEach===E)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}}}const x=function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},te=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=i[e].bind(i))};function f(i,e,t){if(i!=null){if(E&&Array.isArray(i)&&i.forEach===E)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}else for(const s in i)if(Z.call(i,s)&&e.call(t,i[s],s)===A)return}}const ie=function(i,...e){return ee(e,function(t){for(const s in t)t[s]!==void 0&&(i[s]=t[s])}),i};function _(i,e){return i.indexOf(e)!==-1}const se=function(i){try{return/^\s*\bfunction\b/.test(i)}catch{return!1}},ne=function(i){return i===void 0},m=function(){const i=function(s,n,r,o,c){if(!s){g().error("No valid element provided to register_event");return}if(s.addEventListener&&!o)s.addEventListener(n,r,!!c);else{const l="on"+n,a=s[l];s[l]=e(s,r,a)}};function e(s,n,r){return function(o){if(o=o||t(window.event),!o)return;let c=!0,l;se(r)&&(l=r(o));const a=n.call(s,o);return(l===!1||a===!1)&&(c=!1),c}}function t(s){return s&&(s.preventDefault=t.preventDefault,s.stopPropagation=t.stopPropagation),s}return t.preventDefault=function(){this.returnValue=!1},t.stopPropagation=function(){this.cancelBubble=!0},i}(),re=function(i){return function(...e){try{return i.apply(this,e)}catch(t){g().error("Implementation error. Please turn on debug and contact support@usermaven.com.",t)}}},z=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=re(i[e]))};function R(i){for(let e in i)(i[e]===""||i[e]===null||i[e]===void 0||typeof i[e]=="object"&&Object.keys(i[e]).length===0)&&delete i[e];return i}function u(){try{return typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0}catch{return g().warn("window is not available"),!1}}function p(i=5){const e=new Uint8Array(i);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(36).padStart(2,"0")).join("").slice(0,i)}function oe(i){return i.replace(/([-_][a-z])/g,e=>e.toUpperCase().replace("-","").replace("_",""))}function H(i){return typeof i!="object"||i===null?i:Array.isArray(i)?i.map(H):Object.keys(i).reduce((e,t)=>{const s=oe(t);return e[s]=H(i[t]),e},{})}function $(i){switch(typeof i.className){case"string":return i.className;case"object":return("baseVal"in i.className?i.className.baseVal:null)||i.getAttribute("class")||"";default:return""}}function L(i){let e="";return O(i)&&!B(i)&&i.childNodes&&i.childNodes.length&&f(i.childNodes,function(t){q(t)&&t.textContent&&(e+=x(t.textContent).split(/(\s+)/).filter(P).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))}),x(e)}function M(i){return!!i&&i.nodeType===1}function d(i,e){return!!i&&!!i.tagName&&i.tagName.toLowerCase()===e.toLowerCase()}function q(i){return!!i&&i.nodeType===3}function N(i){return!!i&&i.nodeType===11}const b=["a","button","form","input","select","textarea","label"];function ae(i,e){if(!i||d(i,"html")||!M(i))return!1;let t=i;for(;t&&!d(t,"body");){if(t.classList&&t.classList.contains("um-no-capture"))return!1;t.parentNode&&N(t.parentNode)?t=t.parentNode.host:t=t.parentNode}let s=!1;for(t=i;t&&!d(t,"body");){if(t.parentNode&&N(t.parentNode)){t=t.parentNode.host,t&&b.indexOf(t.tagName.toLowerCase())>-1&&(s=!0);continue}const o=t.parentNode;if(!o)break;if(b.indexOf(o.tagName.toLowerCase())>-1)s=!0;else{const c=window.getComputedStyle(o);c&&c.getPropertyValue("cursor")==="pointer"&&(s=!0)}t=o}const n=window.getComputedStyle(i);if(n&&n.getPropertyValue("cursor")==="pointer"&&e.type==="click")return!0;const r=i.tagName.toLowerCase();switch(r){case"html":return!1;case"form":return e.type==="submit";case"input":return e.type==="change"||e.type==="click";case"select":case"textarea":return e.type==="change"||e.type==="click";default:return s?e.type==="click":e.type==="click"&&(b.indexOf(r)>-1||i.getAttribute("contenteditable")==="true")}}function O(i){for(let s=i;s.parentNode&&!d(s,"body");s=s.parentNode){const n=$(s).split(" ");if(_(n,"ph-sensitive")||_(n,"ph-no-capture"))return!1}if(_($(i).split(" "),"ph-include"))return!0;const e=i.type||"";if(typeof e=="string")switch(e.toLowerCase()){case"hidden":return!1;case"password":return!1}const t=i.name||i.id||"";return!(typeof t=="string"&&/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(t.replace(/[^a-zA-Z0-9]/g,"")))}function B(i){const e=["button","checkbox","submit","reset"];return!!(d(i,"input")&&!e.includes(i.type)||d(i,"select")||d(i,"textarea")||i.getAttribute("contenteditable")==="true")}function P(i){return!(i===null||ne(i)||typeof i=="string"&&(i=x(i),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((i||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(i)))}function ce(i){return typeof i=="string"?i.substring(0,10)==="_ngcontent"||i.substring(0,7)==="_nghost":!1}function T(){return p(10)}function le(i){return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(i).toLowerCase())}function ue(i,e){let t;return function(...s){const n=()=>{clearTimeout(t),i(...s)};clearTimeout(t),t=setTimeout(n,e)}}function he(i){const e={},t=i.replace(/^\?/,"").split("&");for(let s=0;s<t.length;s++){const n=t[s].split("=");n[0]!==""&&(e[decodeURIComponent(n[0])]=decodeURIComponent(n[1]||""))}return e}function I(i){return typeof i=="string"||i instanceof String}function v(i){return i!==null&&typeof i=="object"&&i.constructor===Object}function ge(i){if(i===null)return w.ERROR;const e=i.toUpperCase(),t=w[e];return t||t===0?t:w.ERROR}class de{constructor(e){this.maxScrollDepth=0,this.milestones=[25,50,75,90],this.lastScrollDepth=0,this.client=e,this.documentElement=document.documentElement,this.debouncedHandleScroll=ue(this.handleScroll.bind(this),250),this.initializeEventListener()}initializeEventListener(){window.addEventListener("scroll",this.debouncedHandleScroll)}track(){const e=this.getScrollDepth();e>this.lastScrollDepth&&(this.lastScrollDepth=e,this.checkMilestones(e))}send(e="$scroll"){if(!this.lastScrollDepth)return;const t={percent:this.lastScrollDepth,window_height:this.getWindowHeight(),document_height:this.getDocumentHeight(),scroll_distance:this.getScrollDistance()};this.client.track(e,t)}handleScroll(){this.track()}getScrollDepth(){const e=this.getWindowHeight(),t=this.getDocumentHeight(),s=this.getScrollDistance(),n=t-e;return Math.min(100,Math.floor(s/n*100))}getWindowHeight(){return window.innerHeight||this.documentElement.clientHeight||document.body.clientHeight||0}getDocumentHeight(){return Math.max(document.body.scrollHeight||0,this.documentElement.scrollHeight||0,document.body.offsetHeight||0,this.documentElement.offsetHeight||0,document.body.clientHeight||0,this.documentElement.clientHeight||0)}getScrollDistance(){return window.pageYOffset||this.documentElement.scrollTop||document.body.scrollTop||0}checkMilestones(e){this.milestones.filter(s=>e>=s).forEach(s=>{this.send(),this.milestones=this.milestones.filter(n=>n!==s)})}}const C=class C{constructor(e,t,s=g()){this.logger=s,this.scrollDepth=null,this.customProperties=[],this.client=e,this.options=t,this.scrollDepth=new de(e),te(this),z(this)}init(){if(!(document&&document.body)){this.logger.debug("Document not ready yet, trying again in 500 milliseconds..."),setTimeout(()=>this.init(),500);return}this.addDomEventHandlers()}addDomEventHandlers(){const e=t=>{t=t||window.event,this.captureEvent(t)};m(document,"submit",e,!1,!0),m(document,"change",e,!1,!0),m(document,"click",e,!1,!0),m(document,"visibilitychange",e,!1,!0),m(document,"scroll",e,!1,!0),m(window,"popstate",e,!1,!0)}isPageRefresh(){if("PerformanceNavigationTiming"in window){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type==="reload"}return performance.navigation&&performance.navigation.type===1}captureEvent(e){var s,n;let t=this.getEventTarget(e);if(q(t)&&(t=t.parentNode||null),e.type==="scroll")return(s=this.scrollDepth)==null||s.track(),!0;if(e.type==="visibilitychange"&&document.visibilityState==="hidden"||e.type==="popstate")return this.isPageRefresh()||(n=this.scrollDepth)==null||n.send(),!0;if(t&&ae(t,e)){const r=[t];let o=t;for(;o.parentNode&&!d(o,"body");){if(N(o.parentNode)){r.push(o.parentNode.host),o=o.parentNode.host;continue}r.push(o.parentNode),o=o.parentNode}const c=[];let l,a=!1;if(f(r,k=>{const W=O(k);k.tagName.toLowerCase()==="a"&&(l=k.getAttribute("href"),l=W&&P(l)&&l);const X=$(k).split(" ");_(X,"ph-no-capture")&&(a=!0),c.push(this.getPropertiesFromElement(k,this.options.maskAllElementAttributes??!1,this.options.maskAllText??!1))}),this.options.maskAllText||(c[0].$el_text=L(t)),l&&(c[0].attr__href=l),a)return!1;const h=ie(this.getDefaultProperties(e.type),{$elements:c},this.getCustomProperties(r));return this.client.track("$autocapture",h),!0}}getCustomProperties(e){const t={};return f(this.customProperties,s=>{f(s.event_selectors,n=>{const r=document.querySelectorAll(n);f(r,o=>{_(e,o)&&O(o)&&(t[s.name]=this.extractCustomPropertyValue(s))})})}),t}extractCustomPropertyValue(e){const t=[];return f(document.querySelectorAll(e.css_selector),function(s){let n;["input","select"].indexOf(s.tagName.toLowerCase())>-1?n=s.value:s.textContent&&(n=s.textContent),P(n)&&t.push(n)}),t.join(", ")}getEventTarget(e){var t;return typeof e.target>"u"?e.srcElement||null:(t=e.target)!=null&&t.shadowRoot?e.composedPath()[0]||null:e.target||null}getPropertiesFromElement(e,t,s){const n=e.tagName.toLowerCase(),r={tag_name:n};b.indexOf(n)>-1&&!s&&(r.$el_text=L(e));const o=$(e);o.length>0&&(r.classes=o.split(" ").filter(function(h){return h!==""})),f(e.attributes,function(h){B(e)&&["name","id","class"].indexOf(h.name)===-1||!t&&P(h.value)&&!ce(h.name)&&(r["attr__"+h.name]=h.value)});let c=1,l=1,a=e;for(;a=this.previousElementSibling(a);)c++,a.tagName===e.tagName&&l++;return r.nth_child=c,r.nth_of_type=l,r}previousElementSibling(e){if(e.previousElementSibling)return e.previousElementSibling;{let t=e;do t=t.previousSibling;while(t&&!M(t));return t}}getDefaultProperties(e){return{$event_type:e,$ce_version:1}}encodeHtml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}static enabledForProject(e,t=10,s=10){if(!e)return!1;let n=0;for(let r=0;r<e.length;r++)n+=e.charCodeAt(r);return n%t<s}};C.FORCE_CAPTURE_ATTR="data-um-force-capture",C.PREVENT_CAPTURE_ATTR="data-um-no-capture";let S=C;class fe{constructor(e){this.client=e,this.lastPageUrl=window.location.href,this.trackInitialPageview(),this.initializePageviewTracking()}trackInitialPageview(){this.trackPageview()}initializePageviewTracking(){window.addEventListener("popstate",this.handlePageview.bind(this));const e=history.pushState;history.pushState=(...t)=>{e.apply(history,t),this.handlePageview()},window.addEventListener("hashchange",this.handlePageview.bind(this)),setInterval(this.checkForUrlChange.bind(this),1e3)}handlePageview(){this.trackPageview()}checkForUrlChange(){window.location.href!==this.lastPageUrl&&this.trackPageview()}trackPageview(){const e=window.location.href;e!==this.lastPageUrl&&(this.lastPageUrl=e,this.client.track("pageview",{url:e,referrer:document.referrer,title:document.title}))}}class pe{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=new Blob([JSON.stringify(e)],{type:"application/json"});if(navigator.sendBeacon(s,n))this.logger.debug(`Successfully queued ${e.length} event(s) via Beacon API`);else throw new Error("Failed to queue events via Beacon API")}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}}class D{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=JSON.stringify(e),r={"Content-Type":"application/json",...this.getCustomHeaders()},o=await fetch(s,{method:"POST",headers:r,body:n});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);this.logger.debug(`Successfully sent ${e.length} event(s)`),this.postHandle(o.status,await o.text())}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class me{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}send(e){return new Promise((t,s)=>{const n=new XMLHttpRequest,r=this.config.key,o=this.constructUrl(r);n.open("POST",o,!0),n.setRequestHeader("Content-Type","application/json");const c=this.getCustomHeaders();Object.keys(c).forEach(l=>{n.setRequestHeader(l,c[l])}),n.onload=()=>{n.status>=200&&n.status<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),t()):s(new Error(`HTTP error! status: ${n.status}`))},n.onerror=()=>{s(new Error("Network error"))},n.send(JSON.stringify(e))})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class V{constructor(e,t){this.storage={},this.prefix=`usermaven_${e}_`,this.load(),this.logger=t||g()}set(e,t){this.storage[e]=t,this.save()}get(e){return this.storage[e]}remove(e){delete this.storage[e],this.save()}clear(){this.storage={},this.save()}save(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{localStorage.setItem(this.prefix+"data",JSON.stringify(this.storage))}catch(e){this.logger.error("Error saving to localStorage:",e)}}load(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{const e=localStorage.getItem(this.prefix+"data");e&&(this.storage=JSON.parse(e))}catch(e){this.logger.error("Error loading from localStorage:",e)}}}class ye{constructor(){this.storage={}}set(e,t){this.storage[e]=t}get(e){return this.storage[e]}remove(e){delete this.storage[e]}save(){}clear(){this.storage={}}}class U{constructor(e,t=3,s=1e3,n=10,r=1e3,o=g(),c="default"){this.transport=e,this.maxRetries=t,this.retryInterval=s,this.batchSize=n,this.batchInterval=r,this.logger=o,this.queue=[],this.processing=!1,this.batchTimeoutId=null,this.isOnline=!0,this.persistence=new V(`offline_queue_${c}`),u()&&(this.isOnline=navigator.onLine,this.loadQueueFromStorage(),this.initNetworkListeners(),this.scheduleBatch())}add(e){const t={payload:e,retries:0,timestamp:Date.now()};this.queue.push(t),u()?this.saveQueueToStorage():this.processBatch()}initNetworkListeners(){u()&&(window.addEventListener("online",()=>{this.isOnline=!0,this.processBatch()}),window.addEventListener("offline",()=>{this.isOnline=!1}))}scheduleBatch(){u()&&(this.batchTimeoutId!==null&&clearTimeout(this.batchTimeoutId),this.batchTimeoutId=window.setTimeout(()=>this.processBatch(),this.batchInterval))}async processBatch(){if((!u()||this.isOnline)&&!this.processing&&this.queue.length>0){this.processing=!0;const e=this.queue.splice(0,this.batchSize),t=e.map(s=>s.payload);try{await this.transport.send(t),this.logger.debug(`Successfully sent batch of ${e.length} payloads`),u()&&this.saveQueueToStorage()}catch(s){this.logger.error("Failed to send batch",s),await this.handleBatchFailure(e)}this.processing=!1}u()&&this.scheduleBatch()}async handleBatchFailure(e){for(const t of e)t.retries<this.maxRetries?(t.retries++,this.queue.unshift(t),this.logger.warn(`Retry attempt ${t.retries} for payload`)):this.logger.error("Max retries reached, discarding payload",t.payload);u()&&(this.saveQueueToStorage(),await new Promise(t=>setTimeout(t,this.retryInterval)))}loadQueueFromStorage(){if(u()){const e=this.persistence.get("queue");e&&(this.queue=JSON.parse(e))}}saveQueueToStorage(){u()&&this.persistence.set("queue",JSON.stringify(this.queue))}}class we{constructor(e){this.clicks=[],this.threshold=3,this.timeWindow=2e3,this.distanceThreshold=30,this.client=e,this.initializeEventListener(),z(this)}initializeEventListener(){document.addEventListener("click",this.handleClick.bind(this))}handleClick(e){const t=e.target;this.shouldCaptureElement(t)&&this.click(e.clientX,e.clientY,Date.now())}shouldCaptureElement(e){return!e.closest(".um-no-capture")}click(e,t,s){const n={x:e,y:t,timestamp:s};this.clicks.push(n),this.clicks=this.clicks.filter(r=>s-r.timestamp<this.timeWindow),this.clicks.length>=this.threshold&&this.checkRageClick()}checkRageClick(){const e=this.clicks[0],s=(this.clicks[this.clicks.length-1].timestamp-e.timestamp)/1e3;this.clicks.every((r,o)=>{if(o===0)return!0;const c=this.clicks[o-1];return Math.sqrt(Math.pow(r.x-c.x,2)+Math.pow(r.y-c.y,2))<this.distanceThreshold})&&this.sendRageClickEvent(s)}sendRageClickEvent(e){const t=this.clicks[this.clicks.length-1];document.elementFromPoint(t.x,t.y)&&this.client.track("$rage_click",{no_of_clicks:this.clicks.length,time:e.toFixed(2)}),this.clicks=[]}}class ke{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=new(void 0)(this.constructUrl(t)),n={hostname:s.hostname,port:443,path:`${s.pathname}${s.search}`,method:"POST",headers:{"Content-Type":"application/json",...this.getCustomHeaders()}};return new Promise((r,o)=>{const c=(void 0)(n,l=>{l.on("data",a=>{}),l.on("end",()=>{const a=l.statusCode||0;a>=200&&a<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),r()):o(new Error(`HTTP error! status: ${a}`))})});c.on("error",l=>{o(l)}),c.write(JSON.stringify(e)),c.end()})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"";return`${this.trackingHost}/api/v1/s2s/event?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}}class y{constructor(e,t="all",s={}){this.instance=e,this.trackingType=t,this.options=s,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.initialize.bind(this)):this.initialize()}initialize(){this.trackingType!=="none"&&this.setupFormTracking()}setupFormTracking(){var e;this.formElements=this.trackingType==="tagged"?document.querySelectorAll("form[data-um-form]"):document.querySelectorAll("form"),(e=this.formElements)==null||e.forEach(t=>{t.addEventListener("submit",this.handleFormSubmit.bind(this))})}handleFormSubmit(e){const t=e.target,s=this._getFormDetails(t);this.instance.track("$form",R(s)),this.options.trackFieldChanges&&this.trackFieldChanges(t)}trackFieldChanges(e){e.querySelectorAll("input, select, textarea").forEach(s=>{s.addEventListener("change",n=>{const r=this._getFieldProps(n.target,0);this.instance.track("$form_field_change",R(r))})})}static getInstance(e,t="all",s={}){return y.instance||(y.instance=new y(e,t,s)),y.instance}_getFormDetails(e){const t={form_id:e.id,form_name:e.name||"",form_action:e.action,form_method:e.method,form_class:e.className,form_attributes:this._getElementAttributes(e)},s=e.querySelectorAll("input, select, textarea");return Array.from(s).filter(r=>!r.classList.contains("um-no-capture")).forEach((r,o)=>{const c=this._getFieldProps(r,o);Object.assign(t,c)}),t}_getFieldProps(e,t){const s=Object.keys(e.dataset).length?JSON.stringify(e.dataset):void 0,n=this.getSafeText(e);return{[`field_${t+1}_tag`]:e.tagName.toLowerCase(),[`field_${t+1}_type`]:e instanceof HTMLInputElement?e.type:void 0,[`field_${t+1}_data_attributes`]:s,[`field_${t+1}_id`]:e.id,[`field_${t+1}_value`]:n,[`field_${t+1}_class`]:e.className,[`field_${t+1}_name`]:e.name,[`field_${t+1}_attributes`]:this._getElementAttributes(e)}}_getElementAttributes(e){return Object.keys(e.dataset).length?JSON.parse(JSON.stringify(e.dataset)):{}}getSafeText(e){let t="";return"value"in e&&e.type!=="password"?t=e.value:e.hasChildNodes()?t=Array.from(e.childNodes).filter(n=>n.nodeType===Node.TEXT_NODE).map(n=>n.textContent).join(""):t=e.textContent||"",this._scrubPotentiallySensitiveValues(t)}_scrubPotentiallySensitiveValues(e){return this._shouldCaptureValue(e)?e:"<redacted>"}_shouldCaptureValue(e){return!(this._isNullish(e)||this._isString(e)&&(e=this._trim(e),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(e)))}_isNullish(e){return e==null}_isString(e){return typeof e=="string"||e instanceof String}_trim(e){if(typeof String.prototype.trim=="function")return e.trim();let t=0,s=e.length-1;const n=[" ",` | ||
`,"\r"," ","\f","\v"," "," "," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," "," "].join("");for(;t<=s&&n.indexOf(e[t])>-1;)t++;for(;s>=t&&n.indexOf(e[s])>-1;)s--;return e.slice(t,s+1)}}class J{constructor(e){this.config=this.mergeConfig(e,F),this.logger=g(this.config.logLevel),this.namespace=e.namespace||"default",this.transport=this.initializeTransport(this.config),this.persistence=this.initializePersistence(),this.retryQueue=new U(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,200,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client initialized for namespace: ${this.namespace}`)}initializeBrowserFeatures(){if(this.cookieManager=new G(this.config.cookieDomain),this.config.autocapture&&S.enabledForProject(this.config.key)&&(this.autoCapture=new S(this,this.config,this.logger),this.autoCapture.init()),this.config.formTracking){const e=this.config.formTracking===!0?"all":this.config.formTracking;this.formTracking=y.getInstance(this,e||"none",{trackFieldChanges:!1})}this.config.autoPageview&&(this.pageviewTracking=new fe(this)),this.config.crossDomainLinking&&this.manageCrossDomainLinking(),this.config.rageClick&&(this.rageClick=new we(this)),this.setupPageLeaveTracking()}mergeConfig(e,t){const s=JSON.parse(JSON.stringify(e));let n={...t,...s};return Object.keys(t).forEach(r=>{v(t[r])&&(n[r]=this.mergeConfig(e[r],t[r]))}),n}init(e){this.config={...this.config,...e},this.logger=g(this.config.logLevel),this.namespace=e.namespace||this.namespace,this.transport=this.initializeTransport(e),this.persistence=this.initializePersistence(),this.retryQueue=new U(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,250,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client reinitialized for namespace: ${this.namespace}`)}manageCrossDomainLinking(){if(!this.config.crossDomainLinking||!this.config.domains)return;const e=this.config.domains.split(",").map(s=>s.trim()),t=this.config.cookieName||`__eventn_id_${this.config.key}`;document.addEventListener("click",s=>{var c;const n=this.findClosestLink(s.target);if(!n)return;const r=n.getAttribute("href");if(!r||!r.startsWith("http"))return;const o=new URL(r);if(o.hostname!==window.location.hostname&&e.includes(o.hostname)){const l=(c=this.cookieManager)==null?void 0:c.get(t);l&&(o.searchParams.append("_um",l),n.setAttribute("href",o.toString()))}}),this.logger.debug("Cross-domain linking initialized")}findClosestLink(e){for(;e&&e.tagName!=="A";)e=e.parentElement;return e}initializeTransport(e){const t="https://events.usermaven.com";if(!u())return new ke(e.trackingHost||t,e);const s="XMLHttpRequest"in window,n=typeof fetch<"u",r=typeof navigator<"u"&&"sendBeacon"in navigator;if(e.useBeaconApi&&r)return new pe(e.trackingHost||t,e,this.logger);if(e.forceUseFetch&&n)return new D(e.trackingHost||t,e,this.logger);if(s)return new me(e.trackingHost||t,e,this.logger);if(n)return new D(e.trackingHost||t,e,this.logger);throw new Error("No suitable transport method available")}initializePersistence(){return this.config.disableEventPersistence||!u()?new ye:new V(`${this.namespace}_${this.config.key}`,this.logger)}getOrCreateAnonymousId(){var s,n;if(!u())return T();if(this.config.privacyPolicy==="strict"||this.config.cookiePolicy==="strict")return"";const e=this.config.cookieName||`__eventn_id_${this.config.key}`;let t=(s=this.cookieManager)==null?void 0:s.get(e);if(!t){if(this.config.crossDomainLinking){const c=new URLSearchParams(window.location.search).get("_um"),a=window.location.hash.substring(1).split("~"),h=a.length>1?a[1]:void 0;t=c||h||T()}t||(t=T());const r=365*10;(n=this.cookieManager)==null||n.set(e,t,r,document.location.protocol!=="http:",!1)}return t}async id(e,t=!1){if(!v(e))throw new Error("User data must be an object");if(e.email&&!le(e.email))throw new Error("Invalid email provided");if(!e.id||!I(e.id))throw new Error("User ID must be a string");const s=e.id;if(this.persistence.set("userId",s),this.persistence.set("userProps",e),!t){const n={...e,anonymous_id:this.anonymousId};await this.track("user_identify",n)}this.logger.info("User identified:",e)}track(e,t,s=!1){this.trackInternal(e,t,s)}trackInternal(e,t,s=!1){if(!I(e))throw new Error("Event name must be a string");if(t!==void 0&&(typeof t!="object"||t===null||Array.isArray(t)))throw new Error("Event payload must be a non-null object and not an array");const n=this.createEventPayload(e,t);try{if(s){this.transport.send(n),this.logger.debug(`Event sent: ${e}`,[n]);return}this.retryQueue.add(n),this.logger.debug(`Event tracked: ${e}`,[n])}catch(r){throw this.logger.error(`Failed to track event: ${e}`,r),new Error(`Failed to track event: ${e}`)}}rawTrack(e){if(!v(e))throw new Error("Event payload must be an object");this.track("raw",e)}async group(e,t=!1){if(!v(e))throw new Error("Company properties must be an object");if(!e.id||!e.name||!e.created_at)throw new Error("Company properties must include id, name, and created_at");this.persistence.set("companyProps",e),t||await this.track("group",e),this.logger.info("Company identified:",e)}createEventPayload(e,t){const s=this.persistence.get("userProps")||{},n=this.persistence.get("companyProps")||(s==null?void 0:s.company)||{},r=this.persistence.get("userId"),o=this.persistence.get("global_props")||{},c=this.persistence.get(`props_${e}`)||{};let l=t||{};const a={event_id:"",user:{anonymous_id:this.anonymousId,id:r,...s},...n&&{company:n},ids:this.getThirdPartyIds(),utc_time:new Date().toISOString(),local_tz_offset:new Date().getTimezoneOffset(),api_key:this.config.key,src:"usermaven",event_type:e,namespace:this.namespace,...o,...c};if(e==="$autocapture"){const h=this.processAutocaptureAttributes(t||{});a.autocapture_attributes=h}else e!=="user_identify"&&e!=="group"&&(Array.isArray(this.config.propertyBlacklist)&&this.config.propertyBlacklist.forEach(h=>{delete l[h]}),a.event_attributes=l);return u()&&(a.referer=document.referrer,a.url=window.location.href,a.page_title=document.title,a.doc_path=window.location.pathname,a.doc_host=window.location.hostname,a.doc_search=window.location.search,a.screen_resolution=`${window.screen.width}x${window.screen.height}`,a.vp_size=`${window.innerWidth}x${window.innerHeight}`,a.user_agent=navigator.userAgent,a.user_language=navigator.language,a.doc_encoding=document.characterSet,a.utm=this.getUtmParams()),a}processAutocaptureAttributes(e){let t={};const s=e.$elements||[];return s.length&&(t={...s[0]}),t.el_text=t.$el_text||"",t.event_type=e.$event_type||"",["$ce_version","$event_type","$initial_referrer","$initial_referring_domain","$referrer","$referring_domain","$elements"].forEach(n=>{delete t[n]}),delete t.$el_text,delete t.nth_child,delete t.nth_of_type,t}getCookie(e){var t;return((t=this.cookieManager)==null?void 0:t.get(e))||null}getThirdPartyIds(){const e={};if(u()){const t=this.getCookie("_fbp");t&&(e.fbp=t)}return e}getUtmParams(){const e={},t=he(window.location.search);return["utm_source","utm_medium","utm_campaign","utm_term","utm_content"].forEach(n=>{t[n]&&(e[n.replace("utm_","")]=t[n])}),e}pageview(){u()?this.track("pageview",{url:window.location.href,referrer:document.referrer,title:document.title},!0):this.logger.warn("Pageview tracking is not available in server-side environments")}setupPageLeaveTracking(){if(!u())return;let e=!1,t=!1;const s=()=>{!e&&!t&&(e=!0,this.track("$pageleave",{url:window.location.href,referrer:document.referrer,title:document.title}))};window.addEventListener("beforeunload",r=>{t=!0,setTimeout(()=>{t=!1},100)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&!t&&s()});const n=history.pushState;history.pushState=function(){return s(),n.apply(this,arguments)},window.addEventListener("popstate",s)}getConfig(){return this.config}getLogger(){return this.logger}async reset(e=!1){if(this.persistence.clear(),e&&this.cookieManager){const t=this.config.cookieName||`__eventn_id_${this.config.key}`;this.cookieManager.delete(t),this.anonymousId=this.getOrCreateAnonymousId()}this.logger.info("core state reset",{resetAnonId:e,namespace:this.namespace})}set(e,t){if(!v(e))throw new Error("Properties must be an object");const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};r={...r,...e},this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};r={...r,...e},this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug("Properties set",{properties:e,eventType:s||"global",persist:n})}setUserId(e){this.persistence.set("userId",e);let t=this.persistence.get("userProps")||{};t.id=e,this.persistence.set("userProps",t),this.persistence.save()}unset(e,t){const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};delete r[e],this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};delete r[e],this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug(`Property unset: ${e}`,`Event type: ${s||"global"}`)}}function Q(i){const e=JSON.parse(JSON.stringify(i)),t=H(e),s={...F,...t};if(!s.key)throw new Error("API key is required!");if(!s.trackingHost)throw new Error("Tracking host is required!");return new J(s)}function ve(i){var n;const e={key:i.getAttribute("data-key")||void 0,trackingHost:i.getAttribute("data-tracking-host")||"https://events.usermaven.com",logLevel:ge(i.getAttribute("data-log-level")),autocapture:i.getAttribute("data-autocapture")==="true",formTracking:i.getAttribute("data-form-tracking")==="false"?!1:i.getAttribute("data-form-tracking")==="true"?"all":i.getAttribute("data-form-tracking"),autoPageview:i.getAttribute("data-auto-pageview")==="true",useBeaconApi:i.getAttribute("data-use-beacon-api")==="true",forceUseFetch:i.getAttribute("data-force-use-fetch")==="true",gaHook:i.getAttribute("data-ga-hook")==="true",segmentHook:i.getAttribute("data-segment-hook")==="true",randomizeUrl:i.getAttribute("data-randomize-url")==="true",capture3rdPartyCookies:i.getAttribute("data-capture-3rd-party-cookies")==="false"?!1:void 0,idMethod:i.getAttribute("data-id-method")||void 0,privacyPolicy:i.getAttribute("data-privacy-policy")==="strict"?"strict":void 0,ipPolicy:i.getAttribute("data-ip-policy")||void 0,cookiePolicy:i.getAttribute("data-cookie-policy")||void 0,minSendTimeout:parseInt(i.getAttribute("data-min-send-timeout")||"",10)||void 0,maxSendTimeout:parseInt(i.getAttribute("data-max-send-timeout")||"",10)||void 0,maxSendAttempts:parseInt(i.getAttribute("data-max-send-attempts")||"",10)||void 0,propertiesStringMaxLength:parseInt(i.getAttribute("data-properties-string-max-length")||"",10)||null,propertyBlacklist:((n=i.getAttribute("data-property-blacklist"))==null?void 0:n.split(","))||void 0,exclude:i.getAttribute("data-exclude")||void 0,namespace:i.getAttribute("data-namespace")||void 0,crossDomainLinking:i.getAttribute("data-cross-domain-linking")!=="false",domains:i.getAttribute("data-domains")||void 0,maskAllText:i.getAttribute("data-mask-all-text")==="true",maskAllElementAttributes:i.getAttribute("data-mask-all-element-attributes")==="true"},t=Q(e),s=e.namespace||"usermaven";u()&&t.pageview(),_e(s,t)}function _e(i,e){let t=!1;const s=[],n=[];function r(){for(;s.length>0;){const a=s.shift();a&&window[i].apply(null,a)}}function o(){n.forEach(a=>a()),n.length=0}window[i]=function(...a){const h=a[0];if(h==="onLoad"){typeof a[1]=="function"&&(t?a[1]():n.push(a[1]));return}if(!t){s.push(a);return}if(typeof e[h]=="function")return e[h].apply(e,a.slice(1));console.error(`Method ${h} not found on UsermavenClient`)};const c=`${i}Q`,l=window[c]||[];for(window[c]=l,l.push=function(...a){return window[i].apply(null,a),Array.prototype.push.apply(this,a)},setTimeout(()=>{t=!0,r(),o(),console.log(`Usermaven client for namespace ${i} is ready`)},0);l.length>0;){const a=l.shift();a&&s.push(a)}}u()&&function(i,e){const t=i.currentScript;function s(){t&&t.src.includes("lib.js")&&ve(t)}typeof e<"u"&&(i.readyState==="loading"?i.addEventListener("DOMContentLoaded",s):s())}(document,window);exports.LogLevel=w;exports.UsermavenClient=J;exports.usermavenClient=Q; | ||
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var w=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i))(w||{});class K{constructor(e){this.level=e}debug(e,...t){this.level<=0&&console.debug("[Usermaven Debug]:",e,...t)}info(e,...t){this.level<=1&&console.info("[Usermaven Info]:",e,...t)}warn(e,...t){this.level<=2&&console.warn("[Usermaven Warning]:",e,...t)}error(e,...t){this.level<=3&&console.error("[Usermaven Error]:",e,...t)}}function g(i=0){return new K(i)}const F={logLevel:w.ERROR,useBeaconApi:!1,forceUseFetch:!1,trackingHost:"t.usermaven.com",autocapture:!1,rageClick:!1,formTracking:!1,autoPageview:!1,disableEventPersistence:!1,gaHook:!1,segmentHook:!1,randomizeUrl:!1,capture3rdPartyCookies:["_ga","_fbp","_ym_uid","ajs_user_id","ajs_anonymous_id"],idMethod:"cookie",ipPolicy:"keep",cookiePolicy:"keep",minSendTimeout:0,maxSendTimeout:2e3,maxSendAttempts:4,propertiesStringMaxLength:null,propertyBlacklist:[],crossDomainLinking:!0,maskAllText:!1,maskAllElementAttributes:!1};class G{constructor(e){this.domain=e,this.cookieDomain=this.getCookieDomain()}set(e,t,s=365,n=!0,r=!1){const o=new Date;o.setTime(o.getTime()+s*24*60*60*1e3);const c=`expires=${o.toUTCString()}`,l=n?"; Secure":"",a=r?"; HttpOnly":"";document.cookie=`${e}=${t};${c};path=/;domain=${this.cookieDomain}${l}${a}`}get(e){const t=e+"=",s=document.cookie.split(";");for(let n=0;n<s.length;n++){let r=s[n].trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null}delete(e,t="/"){document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${t};domain=${this.cookieDomain}`}getCookieDomain(){return typeof window>"u"||this.domain?this.domain||"":this.extractRoot(window.location.hostname)}extractRoot(e){if(this.isIpAddress(e)||e==="localhost")return e;let t=this.extractTopLevelDomain(e);return t||(t=this.extractRootDomain(e)),"."+t}isIpAddress(e){const t=e.split(".");return t.length===4&&t.every(s=>!isNaN(Number(s)))}extractHostname(e){let t;return e.indexOf("//")>-1?t=e.split("/")[2]:t=e.split("/")[0],t=t.split(":")[0],t=t.split("?")[0],t}extractRootDomain(e){let t=this.extractHostname(e);const s=t.split("."),n=s.length;return n>2&&(s[n-1].length==2?(t=s[n-2]+"."+s[n-1],s[n-2].length==2&&(t=s[n-3]+"."+t)):t=s[n-2]+"."+s[n-1]),t}extractTopLevelDomain(e){const t=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,s=e.match(t);return s?s[0]:""}}const Y=Object.prototype,Z=Y.hasOwnProperty,j=Array.prototype,E=j.forEach,A={};function ee(i,e,t){if(Array.isArray(i)){if(E&&i.forEach===E)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}}}const x=function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},te=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=i[e].bind(i))};function f(i,e,t){if(i!=null){if(E&&Array.isArray(i)&&i.forEach===E)i.forEach(e,t);else if("length"in i&&i.length===+i.length){for(let s=0,n=i.length;s<n;s++)if(s in i&&e.call(t,i[s],s)===A)return}else for(const s in i)if(Z.call(i,s)&&e.call(t,i[s],s)===A)return}}const ie=function(i,...e){return ee(e,function(t){for(const s in t)t[s]!==void 0&&(i[s]=t[s])}),i};function _(i,e){return i.indexOf(e)!==-1}const se=function(i){try{return/^\s*\bfunction\b/.test(i)}catch{return!1}},ne=function(i){return i===void 0},m=function(){const i=function(s,n,r,o,c){if(!s){g().error("No valid element provided to register_event");return}if(s.addEventListener&&!o)s.addEventListener(n,r,!!c);else{const l="on"+n,a=s[l];s[l]=e(s,r,a)}};function e(s,n,r){return function(o){if(o=o||t(window.event),!o)return;let c=!0,l;se(r)&&(l=r(o));const a=n.call(s,o);return(l===!1||a===!1)&&(c=!1),c}}function t(s){return s&&(s.preventDefault=t.preventDefault,s.stopPropagation=t.stopPropagation),s}return t.preventDefault=function(){this.returnValue=!1},t.stopPropagation=function(){this.cancelBubble=!0},i}(),re=function(i){return function(...e){try{return i.apply(this,e)}catch(t){g().error("Implementation error. Please turn on debug and contact support@usermaven.com.",t)}}},z=function(i){for(const e in i)typeof i[e]=="function"&&(i[e]=re(i[e]))};function R(i){for(let e in i)(i[e]===""||i[e]===null||i[e]===void 0||typeof i[e]=="object"&&Object.keys(i[e]).length===0)&&delete i[e];return i}function u(){try{return typeof window<"u"&&window.document!==void 0&&window.document.createElement!==void 0}catch{return g().warn("window is not available"),!1}}function p(i=5){const e=new Uint8Array(i);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(36).padStart(2,"0")).join("").slice(0,i)}function oe(i){return i.replace(/([-_][a-z])/g,e=>e.toUpperCase().replace("-","").replace("_",""))}function H(i){return typeof i!="object"||i===null?i:Array.isArray(i)?i.map(H):Object.keys(i).reduce((e,t)=>{const s=oe(t);return e[s]=H(i[t]),e},{})}function $(i){switch(typeof i.className){case"string":return i.className;case"object":return("baseVal"in i.className?i.className.baseVal:null)||i.getAttribute("class")||"";default:return""}}function L(i){let e="";return O(i)&&!q(i)&&i.childNodes&&i.childNodes.length&&f(i.childNodes,function(t){M(t)&&t.textContent&&(e+=x(t.textContent).split(/(\s+)/).filter(P).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255))}),x(e)}function B(i){return!!i&&i.nodeType===1}function d(i,e){return!!i&&!!i.tagName&&i.tagName.toLowerCase()===e.toLowerCase()}function M(i){return!!i&&i.nodeType===3}function N(i){return!!i&&i.nodeType===11}const b=["a","button","form","input","select","textarea","label"];function ae(i,e){if(!i||d(i,"html")||!B(i))return!1;let t=i;for(;t&&!d(t,"body");){if(t.classList&&t.classList.contains("um-no-capture"))return!1;t.parentNode&&N(t.parentNode)?t=t.parentNode.host:t=t.parentNode}let s=!1;for(t=i;t&&!d(t,"body");){if(t.parentNode&&N(t.parentNode)){t=t.parentNode.host,t&&b.indexOf(t.tagName.toLowerCase())>-1&&(s=!0);continue}const o=t.parentNode;if(!o)break;if(b.indexOf(o.tagName.toLowerCase())>-1)s=!0;else{const c=window.getComputedStyle(o);c&&c.getPropertyValue("cursor")==="pointer"&&(s=!0)}t=o}const n=window.getComputedStyle(i);if(n&&n.getPropertyValue("cursor")==="pointer"&&e.type==="click")return!0;const r=i.tagName.toLowerCase();switch(r){case"html":return!1;case"form":return e.type==="submit";case"input":return e.type==="change"||e.type==="click";case"select":case"textarea":return e.type==="change"||e.type==="click";default:return s?e.type==="click":e.type==="click"&&(b.indexOf(r)>-1||i.getAttribute("contenteditable")==="true")}}function O(i){for(let s=i;s.parentNode&&!d(s,"body");s=s.parentNode){const n=$(s).split(" ");if(_(n,"ph-sensitive")||_(n,"ph-no-capture"))return!1}if(_($(i).split(" "),"ph-include"))return!0;const e=i.type||"";if(typeof e=="string")switch(e.toLowerCase()){case"hidden":return!1;case"password":return!1}const t=i.name||i.id||"";return!(typeof t=="string"&&/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(t.replace(/[^a-zA-Z0-9]/g,"")))}function q(i){const e=["button","checkbox","submit","reset"];return!!(d(i,"input")&&!e.includes(i.type)||d(i,"select")||d(i,"textarea")||i.getAttribute("contenteditable")==="true")}function P(i){return!(i===null||ne(i)||typeof i=="string"&&(i=x(i),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((i||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(i)))}function ce(i){return typeof i=="string"?i.substring(0,10)==="_ngcontent"||i.substring(0,7)==="_nghost":!1}function T(){return p(10)}function le(i){return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(String(i).toLowerCase())}function ue(i,e){let t;return function(...s){const n=()=>{clearTimeout(t),i(...s)};clearTimeout(t),t=setTimeout(n,e)}}function he(i){const e={},t=i.replace(/^\?/,"").split("&");for(let s=0;s<t.length;s++){const n=t[s].split("=");n[0]!==""&&(e[decodeURIComponent(n[0])]=decodeURIComponent(n[1]||""))}return e}function I(i){return typeof i=="string"||i instanceof String}function v(i){return i!==null&&typeof i=="object"&&i.constructor===Object}function ge(i){if(i===null)return w.ERROR;const e=i.toUpperCase(),t=w[e];return t||t===0?t:w.ERROR}const de=()=>{let i="false";return typeof window<"u"&&window.localStorage&&(i=localStorage.getItem("um_exclusion")),!(i==null||i==="false")};class fe{constructor(e){this.maxScrollDepth=0,this.milestones=[25,50,75,90],this.lastScrollDepth=0,this.client=e,this.documentElement=document.documentElement,this.debouncedHandleScroll=ue(this.handleScroll.bind(this),250),this.initializeEventListener()}initializeEventListener(){window.addEventListener("scroll",this.debouncedHandleScroll)}track(){const e=this.getScrollDepth();e>this.lastScrollDepth&&(this.lastScrollDepth=e,this.checkMilestones(e))}send(e="$scroll"){if(!this.lastScrollDepth)return;const t={percent:this.lastScrollDepth,window_height:this.getWindowHeight(),document_height:this.getDocumentHeight(),scroll_distance:this.getScrollDistance()};this.client.track(e,t)}handleScroll(){this.track()}getScrollDepth(){const e=this.getWindowHeight(),t=this.getDocumentHeight(),s=this.getScrollDistance(),n=t-e;return Math.min(100,Math.floor(s/n*100))}getWindowHeight(){return window.innerHeight||this.documentElement.clientHeight||document.body.clientHeight||0}getDocumentHeight(){return Math.max(document.body.scrollHeight||0,this.documentElement.scrollHeight||0,document.body.offsetHeight||0,this.documentElement.offsetHeight||0,document.body.clientHeight||0,this.documentElement.clientHeight||0)}getScrollDistance(){return window.pageYOffset||this.documentElement.scrollTop||document.body.scrollTop||0}checkMilestones(e){this.milestones.filter(s=>e>=s).forEach(s=>{this.send(),this.milestones=this.milestones.filter(n=>n!==s)})}}const C=class C{constructor(e,t,s=g()){this.logger=s,this.scrollDepth=null,this.customProperties=[],this.client=e,this.options=t,this.scrollDepth=new fe(e),te(this),z(this)}init(){if(!(document&&document.body)){this.logger.debug("Document not ready yet, trying again in 500 milliseconds..."),setTimeout(()=>this.init(),500);return}this.addDomEventHandlers()}addDomEventHandlers(){const e=t=>{t=t||window.event,this.captureEvent(t)};m(document,"submit",e,!1,!0),m(document,"change",e,!1,!0),m(document,"click",e,!1,!0),m(document,"visibilitychange",e,!1,!0),m(document,"scroll",e,!1,!0),m(window,"popstate",e,!1,!0)}isPageRefresh(){if("PerformanceNavigationTiming"in window){const e=performance.getEntriesByType("navigation");if(e.length>0)return e[0].type==="reload"}return performance.navigation&&performance.navigation.type===1}captureEvent(e){var s,n;let t=this.getEventTarget(e);if(M(t)&&(t=t.parentNode||null),e.type==="scroll")return(s=this.scrollDepth)==null||s.track(),!0;if(e.type==="visibilitychange"&&document.visibilityState==="hidden"||e.type==="popstate")return this.isPageRefresh()||(n=this.scrollDepth)==null||n.send(),!0;if(t&&ae(t,e)){const r=[t];let o=t;for(;o.parentNode&&!d(o,"body");){if(N(o.parentNode)){r.push(o.parentNode.host),o=o.parentNode.host;continue}r.push(o.parentNode),o=o.parentNode}const c=[];let l,a=!1;if(f(r,k=>{const W=O(k);k.tagName.toLowerCase()==="a"&&(l=k.getAttribute("href"),l=W&&P(l)&&l);const X=$(k).split(" ");_(X,"ph-no-capture")&&(a=!0),c.push(this.getPropertiesFromElement(k,this.options.maskAllElementAttributes??!1,this.options.maskAllText??!1))}),this.options.maskAllText||(c[0].$el_text=L(t)),l&&(c[0].attr__href=l),a)return!1;const h=ie(this.getDefaultProperties(e.type),{$elements:c},this.getCustomProperties(r));return this.client.track("$autocapture",h),!0}}getCustomProperties(e){const t={};return f(this.customProperties,s=>{f(s.event_selectors,n=>{const r=document.querySelectorAll(n);f(r,o=>{_(e,o)&&O(o)&&(t[s.name]=this.extractCustomPropertyValue(s))})})}),t}extractCustomPropertyValue(e){const t=[];return f(document.querySelectorAll(e.css_selector),function(s){let n;["input","select"].indexOf(s.tagName.toLowerCase())>-1?n=s.value:s.textContent&&(n=s.textContent),P(n)&&t.push(n)}),t.join(", ")}getEventTarget(e){var t;return typeof e.target>"u"?e.srcElement||null:(t=e.target)!=null&&t.shadowRoot?e.composedPath()[0]||null:e.target||null}getPropertiesFromElement(e,t,s){const n=e.tagName.toLowerCase(),r={tag_name:n};b.indexOf(n)>-1&&!s&&(r.$el_text=L(e));const o=$(e);o.length>0&&(r.classes=o.split(" ").filter(function(h){return h!==""})),f(e.attributes,function(h){q(e)&&["name","id","class"].indexOf(h.name)===-1||!t&&P(h.value)&&!ce(h.name)&&(r["attr__"+h.name]=h.value)});let c=1,l=1,a=e;for(;a=this.previousElementSibling(a);)c++,a.tagName===e.tagName&&l++;return r.nth_child=c,r.nth_of_type=l,r}previousElementSibling(e){if(e.previousElementSibling)return e.previousElementSibling;{let t=e;do t=t.previousSibling;while(t&&!B(t));return t}}getDefaultProperties(e){return{$event_type:e,$ce_version:1}}encodeHtml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}static enabledForProject(e,t=10,s=10){if(!e)return!1;let n=0;for(let r=0;r<e.length;r++)n+=e.charCodeAt(r);return n%t<s}};C.FORCE_CAPTURE_ATTR="data-um-force-capture",C.PREVENT_CAPTURE_ATTR="data-um-no-capture";let S=C;class pe{constructor(e){this.client=e,this.lastPageUrl=window.location.href,this.trackInitialPageview(),this.initializePageviewTracking()}trackInitialPageview(){this.trackPageview()}initializePageviewTracking(){window.addEventListener("popstate",this.handlePageview.bind(this));const e=history.pushState;history.pushState=(...t)=>{e.apply(history,t),this.handlePageview()},window.addEventListener("hashchange",this.handlePageview.bind(this)),setInterval(this.checkForUrlChange.bind(this),1e3)}handlePageview(){this.trackPageview()}checkForUrlChange(){window.location.href!==this.lastPageUrl&&this.trackPageview()}trackPageview(){const e=window.location.href;e!==this.lastPageUrl&&(this.lastPageUrl=e,this.client.track("pageview",{url:e,referrer:document.referrer,title:document.title}))}}class me{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=new Blob([JSON.stringify(e)],{type:"application/json"});if(navigator.sendBeacon(s,n))this.logger.debug(`Successfully queued ${e.length} event(s) via Beacon API`);else throw new Error("Failed to queue events via Beacon API")}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}}class D{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=this.constructUrl(t),n=JSON.stringify(e),r={"Content-Type":"application/json",...this.getCustomHeaders()},o=await fetch(s,{method:"POST",headers:r,body:n});if(!o.ok)throw new Error(`HTTP error! status: ${o.status}`);this.logger.debug(`Successfully sent ${e.length} event(s)`),this.postHandle(o.status,await o.text())}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class ye{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}send(e){return new Promise((t,s)=>{const n=new XMLHttpRequest,r=this.config.key,o=this.constructUrl(r);n.open("POST",o,!0),n.setRequestHeader("Content-Type","application/json");const c=this.getCustomHeaders();Object.keys(c).forEach(l=>{n.setRequestHeader(l,c[l])}),n.onload=()=>{n.status>=200&&n.status<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),t()):s(new Error(`HTTP error! status: ${n.status}`))},n.onerror=()=>{s(new Error("Network error"))},n.send(JSON.stringify(e))})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"",n=u()?"/api/v1/event":"/api/v1/s2s/event";return this.config.randomizeUrl?`${this.trackingHost}/api.${p()}?p_${p()}=${e}${t}${s}`:`${this.trackingHost}${n}?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}postHandle(e,t){this.logger.debug(`Response received. Status: ${e}, Body: ${t}`)}}class V{constructor(e,t){this.storage={},this.prefix=`usermaven_${e}_`,this.load(),this.logger=t||g()}set(e,t){this.storage[e]=t,this.save()}get(e){return this.storage[e]}remove(e){delete this.storage[e],this.save()}clear(){this.storage={},this.save()}save(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{localStorage.setItem(this.prefix+"data",JSON.stringify(this.storage))}catch(e){this.logger.error("Error saving to localStorage:",e)}}load(){if(!u()){this.logger.warn("localStorage is not available in this environment");return}try{const e=localStorage.getItem(this.prefix+"data");e&&(this.storage=JSON.parse(e))}catch(e){this.logger.error("Error loading from localStorage:",e)}}}class we{constructor(){this.storage={}}set(e,t){this.storage[e]=t}get(e){return this.storage[e]}remove(e){delete this.storage[e]}save(){}clear(){this.storage={}}}class U{constructor(e,t=3,s=1e3,n=10,r=1e3,o=g(),c="default"){this.transport=e,this.maxRetries=t,this.retryInterval=s,this.batchSize=n,this.batchInterval=r,this.logger=o,this.queue=[],this.processing=!1,this.batchTimeoutId=null,this.isOnline=!0,this.persistence=new V(`offline_queue_${c}`),u()&&(this.isOnline=navigator.onLine,this.loadQueueFromStorage(),this.initNetworkListeners(),this.scheduleBatch())}add(e){const t={payload:e,retries:0,timestamp:Date.now()};this.queue.push(t),u()?this.saveQueueToStorage():this.processBatch()}initNetworkListeners(){u()&&(window.addEventListener("online",()=>{this.isOnline=!0,this.processBatch()}),window.addEventListener("offline",()=>{this.isOnline=!1}))}scheduleBatch(){u()&&(this.batchTimeoutId!==null&&clearTimeout(this.batchTimeoutId),this.batchTimeoutId=window.setTimeout(()=>this.processBatch(),this.batchInterval))}async processBatch(){if((!u()||this.isOnline)&&!this.processing&&this.queue.length>0){this.processing=!0;const e=this.queue.splice(0,this.batchSize),t=e.map(s=>s.payload);try{await this.transport.send(t),this.logger.debug(`Successfully sent batch of ${e.length} payloads`),u()&&this.saveQueueToStorage()}catch(s){this.logger.error("Failed to send batch",s),await this.handleBatchFailure(e)}this.processing=!1}u()&&this.scheduleBatch()}async handleBatchFailure(e){for(const t of e)t.retries<this.maxRetries?(t.retries++,this.queue.unshift(t),this.logger.warn(`Retry attempt ${t.retries} for payload`)):this.logger.error("Max retries reached, discarding payload",t.payload);u()&&(this.saveQueueToStorage(),await new Promise(t=>setTimeout(t,this.retryInterval)))}loadQueueFromStorage(){if(u()){const e=this.persistence.get("queue");e&&(this.queue=JSON.parse(e))}}saveQueueToStorage(){u()&&this.persistence.set("queue",JSON.stringify(this.queue))}}class ke{constructor(e){this.clicks=[],this.threshold=3,this.timeWindow=2e3,this.distanceThreshold=30,this.client=e,this.initializeEventListener(),z(this)}initializeEventListener(){document.addEventListener("click",this.handleClick.bind(this))}handleClick(e){const t=e.target;this.shouldCaptureElement(t)&&this.click(e.clientX,e.clientY,Date.now())}shouldCaptureElement(e){return!e.closest(".um-no-capture")}click(e,t,s){const n={x:e,y:t,timestamp:s};this.clicks.push(n),this.clicks=this.clicks.filter(r=>s-r.timestamp<this.timeWindow),this.clicks.length>=this.threshold&&this.checkRageClick()}checkRageClick(){const e=this.clicks[0],s=(this.clicks[this.clicks.length-1].timestamp-e.timestamp)/1e3;this.clicks.every((r,o)=>{if(o===0)return!0;const c=this.clicks[o-1];return Math.sqrt(Math.pow(r.x-c.x,2)+Math.pow(r.y-c.y,2))<this.distanceThreshold})&&this.sendRageClickEvent(s)}sendRageClickEvent(e){const t=this.clicks[this.clicks.length-1];document.elementFromPoint(t.x,t.y)&&this.client.track("$rage_click",{no_of_clicks:this.clicks.length,time:e.toFixed(2)}),this.clicks=[]}}class ve{constructor(e,t,s=g()){this.trackingHost=e,this.logger=s,this.config=t}async send(e){const t=this.config.key,s=new(void 0)(this.constructUrl(t)),n={hostname:s.hostname,port:443,path:`${s.pathname}${s.search}`,method:"POST",headers:{"Content-Type":"application/json",...this.getCustomHeaders()}};return new Promise((r,o)=>{const c=(void 0)(n,l=>{l.on("data",a=>{}),l.on("end",()=>{const a=l.statusCode||0;a>=200&&a<300?(this.logger.debug(`Successfully sent ${e.length} event(s)`),r()):o(new Error(`HTTP error! status: ${a}`))})});c.on("error",l=>{o(l)}),c.write(JSON.stringify(e)),c.end()})}constructUrl(e){const t=this.config.cookiePolicy!=="keep"?`&cookie_policy=${this.config.cookiePolicy}`:"",s=this.config.ipPolicy!=="keep"?`&ip_policy=${this.config.ipPolicy}`:"";return`${this.trackingHost}/api/v1/s2s/event?token=${e}${t}${s}`}getCustomHeaders(){return typeof this.config.customHeaders=="function"?this.config.customHeaders():this.config.customHeaders?this.config.customHeaders:{}}}class y{constructor(e,t="all",s={}){this.instance=e,this.trackingType=t,this.options=s,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.initialize.bind(this)):this.initialize()}initialize(){this.trackingType!=="none"&&this.setupFormTracking()}setupFormTracking(){var e;this.formElements=this.trackingType==="tagged"?document.querySelectorAll("form[data-um-form]"):document.querySelectorAll("form"),(e=this.formElements)==null||e.forEach(t=>{t.addEventListener("submit",this.handleFormSubmit.bind(this))})}handleFormSubmit(e){const t=e.target,s=this._getFormDetails(t);this.instance.track("$form",R(s)),this.options.trackFieldChanges&&this.trackFieldChanges(t)}trackFieldChanges(e){e.querySelectorAll("input, select, textarea").forEach(s=>{s.addEventListener("change",n=>{const r=this._getFieldProps(n.target,0);this.instance.track("$form_field_change",R(r))})})}static getInstance(e,t="all",s={}){return y.instance||(y.instance=new y(e,t,s)),y.instance}_getFormDetails(e){const t={form_id:e.id,form_name:e.name||"",form_action:e.action,form_method:e.method,form_class:e.className,form_attributes:this._getElementAttributes(e)},s=e.querySelectorAll("input, select, textarea");return Array.from(s).filter(r=>!r.classList.contains("um-no-capture")).forEach((r,o)=>{const c=this._getFieldProps(r,o);Object.assign(t,c)}),t}_getFieldProps(e,t){const s=Object.keys(e.dataset).length?JSON.stringify(e.dataset):void 0,n=this.getSafeText(e);return{[`field_${t+1}_tag`]:e.tagName.toLowerCase(),[`field_${t+1}_type`]:e instanceof HTMLInputElement?e.type:void 0,[`field_${t+1}_data_attributes`]:s,[`field_${t+1}_id`]:e.id,[`field_${t+1}_value`]:n,[`field_${t+1}_class`]:e.className,[`field_${t+1}_name`]:e.name,[`field_${t+1}_attributes`]:this._getElementAttributes(e)}}_getElementAttributes(e){return Object.keys(e.dataset).length?JSON.parse(JSON.stringify(e.dataset)):{}}getSafeText(e){let t="";return"value"in e&&e.type!=="password"?t=e.value:e.hasChildNodes()?t=Array.from(e.childNodes).filter(n=>n.nodeType===Node.TEXT_NODE).map(n=>n.textContent).join(""):t=e.textContent||"",this._scrubPotentiallySensitiveValues(t)}_scrubPotentiallySensitiveValues(e){return this._shouldCaptureValue(e)?e:"<redacted>"}_shouldCaptureValue(e){return!(this._isNullish(e)||this._isString(e)&&(e=this._trim(e),/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,""))||/(^\d{3}-?\d{2}-?\d{4}$)/.test(e)))}_isNullish(e){return e==null}_isString(e){return typeof e=="string"||e instanceof String}_trim(e){if(typeof String.prototype.trim=="function")return e.trim();let t=0,s=e.length-1;const n=[" ",` | ||
`,"\r"," ","\f","\v"," "," "," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," "," "].join("");for(;t<=s&&n.indexOf(e[t])>-1;)t++;for(;s>=t&&n.indexOf(e[s])>-1;)s--;return e.slice(t,s+1)}}class J{constructor(e){this.config=this.mergeConfig(e,F),this.logger=g(this.config.logLevel),this.namespace=e.namespace||"default",this.transport=this.initializeTransport(this.config),this.persistence=this.initializePersistence(),this.retryQueue=new U(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,200,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client initialized for namespace: ${this.namespace}`)}initializeBrowserFeatures(){if(this.cookieManager=new G(this.config.cookieDomain),this.config.autocapture&&S.enabledForProject(this.config.key)&&(this.autoCapture=new S(this,this.config,this.logger),this.autoCapture.init()),this.config.formTracking){const e=this.config.formTracking===!0?"all":this.config.formTracking;this.formTracking=y.getInstance(this,e||"none",{trackFieldChanges:!1})}this.config.autoPageview&&(this.pageviewTracking=new pe(this)),this.config.crossDomainLinking&&this.manageCrossDomainLinking(),this.config.rageClick&&(this.rageClick=new ke(this)),this.setupPageLeaveTracking()}mergeConfig(e,t){const s=JSON.parse(JSON.stringify(e));let n={...t,...s};return Object.keys(t).forEach(r=>{v(t[r])&&(n[r]=this.mergeConfig(e[r],t[r]))}),n}init(e){this.config={...this.config,...e},this.logger=g(this.config.logLevel),this.namespace=e.namespace||this.namespace,this.transport=this.initializeTransport(e),this.persistence=this.initializePersistence(),this.retryQueue=new U(this.transport,this.config.maxSendAttempts||3,this.config.minSendTimeout||1e3,10,250,this.logger,this.namespace),u()&&this.initializeBrowserFeatures(),this.anonymousId=this.getOrCreateAnonymousId(),this.logger.info(`Usermaven client reinitialized for namespace: ${this.namespace}`)}manageCrossDomainLinking(){if(!this.config.crossDomainLinking||!this.config.domains)return;const e=this.config.domains.split(",").map(s=>s.trim()),t=this.config.cookieName||`__eventn_id_${this.config.key}`;document.addEventListener("click",s=>{var c;const n=this.findClosestLink(s.target);if(!n)return;const r=n.getAttribute("href");if(!r||!r.startsWith("http"))return;const o=new URL(r);if(o.hostname!==window.location.hostname&&e.includes(o.hostname)){const l=(c=this.cookieManager)==null?void 0:c.get(t);l&&(o.searchParams.append("_um",l),n.setAttribute("href",o.toString()))}}),this.logger.debug("Cross-domain linking initialized")}findClosestLink(e){for(;e&&e.tagName!=="A";)e=e.parentElement;return e}initializeTransport(e){const t="https://events.usermaven.com";if(!u())return new ve(e.trackingHost||t,e);const s="XMLHttpRequest"in window,n=typeof fetch<"u",r=typeof navigator<"u"&&"sendBeacon"in navigator;if(e.useBeaconApi&&r)return new me(e.trackingHost||t,e,this.logger);if(e.forceUseFetch&&n)return new D(e.trackingHost||t,e,this.logger);if(s)return new ye(e.trackingHost||t,e,this.logger);if(n)return new D(e.trackingHost||t,e,this.logger);throw new Error("No suitable transport method available")}initializePersistence(){return this.config.disableEventPersistence||!u()?new we:new V(`${this.namespace}_${this.config.key}`,this.logger)}getOrCreateAnonymousId(){var s,n;if(!u())return T();if(this.config.privacyPolicy==="strict"||this.config.cookiePolicy==="strict")return"";const e=this.config.cookieName||`__eventn_id_${this.config.key}`;let t=(s=this.cookieManager)==null?void 0:s.get(e);if(!t){if(this.config.crossDomainLinking){const c=new URLSearchParams(window.location.search).get("_um"),a=window.location.hash.substring(1).split("~"),h=a.length>1?a[1]:void 0;t=c||h||T()}t||(t=T());const r=365*10;(n=this.cookieManager)==null||n.set(e,t,r,document.location.protocol!=="http:",!1)}return t}async id(e,t=!1){if(!v(e))throw new Error("User data must be an object");if(e.email&&!le(e.email))throw new Error("Invalid email provided");if(!e.id||!I(e.id))throw new Error("User ID must be a string");const s=e.id;if(this.persistence.set("userId",s),this.persistence.set("userProps",e),!t){const n={...e,anonymous_id:this.anonymousId};await this.track("user_identify",n)}this.logger.info("User identified:",e)}track(e,t,s=!1){this.trackInternal(e,t,s)}trackInternal(e,t,s=!1){if(de()){this.logger.debug("Tracking disabled due to um_exclusion setting");return}if(!I(e))throw new Error("Event name must be a string");if(t!==void 0&&(typeof t!="object"||t===null||Array.isArray(t)))throw new Error("Event payload must be a non-null object and not an array");const r=this.createEventPayload(e,t);try{if(s){this.transport.send(r),this.logger.debug(`Event sent: ${e}`,[r]);return}this.retryQueue.add(r),this.logger.debug(`Event tracked: ${e}`,[r])}catch(o){throw this.logger.error(`Failed to track event: ${e}`,o),new Error(`Failed to track event: ${e}`)}}rawTrack(e){if(!v(e))throw new Error("Event payload must be an object");this.track("raw",e)}async group(e,t=!1){if(!v(e))throw new Error("Company properties must be an object");if(!e.id||!e.name||!e.created_at)throw new Error("Company properties must include id, name, and created_at");this.persistence.set("companyProps",e),t||await this.track("group",e),this.logger.info("Company identified:",e)}createEventPayload(e,t){const s=this.persistence.get("userProps")||{},n=this.persistence.get("companyProps")||(s==null?void 0:s.company)||{},r=this.persistence.get("userId"),o=this.persistence.get("global_props")||{},c=this.persistence.get(`props_${e}`)||{};let l=t||{};const a={event_id:"",user:{anonymous_id:this.anonymousId,id:r,...s},...n&&{company:n},ids:this.getThirdPartyIds(),utc_time:new Date().toISOString(),local_tz_offset:new Date().getTimezoneOffset(),api_key:this.config.key,src:"usermaven",event_type:e,namespace:this.namespace,...o,...c};if(e==="$autocapture"){const h=this.processAutocaptureAttributes(t||{});a.autocapture_attributes=h}else e!=="user_identify"&&e!=="group"&&(Array.isArray(this.config.propertyBlacklist)&&this.config.propertyBlacklist.forEach(h=>{delete l[h]}),a.event_attributes=l);return u()&&(a.referer=document.referrer,a.url=window.location.href,a.page_title=document.title,a.doc_path=window.location.pathname,a.doc_host=window.location.hostname,a.doc_search=window.location.search,a.screen_resolution=`${window.screen.width}x${window.screen.height}`,a.vp_size=`${window.innerWidth}x${window.innerHeight}`,a.user_agent=navigator.userAgent,a.user_language=navigator.language,a.doc_encoding=document.characterSet,a.utm=this.getUtmParams()),a}processAutocaptureAttributes(e){let t={};const s=e.$elements||[];return s.length&&(t={...s[0]}),t.el_text=t.$el_text||"",t.event_type=e.$event_type||"",["$ce_version","$event_type","$initial_referrer","$initial_referring_domain","$referrer","$referring_domain","$elements"].forEach(n=>{delete t[n]}),delete t.$el_text,delete t.nth_child,delete t.nth_of_type,t}getCookie(e){var t;return((t=this.cookieManager)==null?void 0:t.get(e))||null}getThirdPartyIds(){const e={};if(u()){const t=this.getCookie("_fbp");t&&(e.fbp=t)}return e}getUtmParams(){const e={},t=he(window.location.search);return["utm_source","utm_medium","utm_campaign","utm_term","utm_content"].forEach(n=>{t[n]&&(e[n.replace("utm_","")]=t[n])}),e}pageview(){u()?this.track("pageview",{url:window.location.href,referrer:document.referrer,title:document.title},!0):this.logger.warn("Pageview tracking is not available in server-side environments")}setupPageLeaveTracking(){if(!u())return;let e=!1,t=!1;const s=()=>{!e&&!t&&(e=!0,this.track("$pageleave",{url:window.location.href,referrer:document.referrer,title:document.title}))};window.addEventListener("beforeunload",r=>{t=!0,setTimeout(()=>{t=!1},100)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&!t&&s()});const n=history.pushState;history.pushState=function(){return s(),n.apply(this,arguments)},window.addEventListener("popstate",s)}getConfig(){return this.config}getLogger(){return this.logger}async reset(e=!1){if(this.persistence.clear(),e&&this.cookieManager){const t=this.config.cookieName||`__eventn_id_${this.config.key}`;this.cookieManager.delete(t),this.anonymousId=this.getOrCreateAnonymousId()}this.logger.info("core state reset",{resetAnonId:e,namespace:this.namespace})}set(e,t){if(!v(e))throw new Error("Properties must be an object");const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};r={...r,...e},this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};r={...r,...e},this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug("Properties set",{properties:e,eventType:s||"global",persist:n})}setUserId(e){this.persistence.set("userId",e);let t=this.persistence.get("userProps")||{};t.id=e,this.persistence.set("userProps",t),this.persistence.save()}unset(e,t){const s=t==null?void 0:t.eventType,n=(t==null?void 0:t.persist)??!0;if(s){let r=this.persistence.get(`props_${s}`)||{};delete r[e],this.persistence.set(`props_${s}`,r)}else{let r=this.persistence.get("global_props")||{};delete r[e],this.persistence.set("global_props",r)}n&&this.persistence.save(),this.logger.debug(`Property unset: ${e}`,`Event type: ${s||"global"}`)}}function Q(i){const e=JSON.parse(JSON.stringify(i)),t=H(e),s={...F,...t};if(!s.key)throw new Error("API key is required!");if(!s.trackingHost)throw new Error("Tracking host is required!");return new J(s)}function _e(i){var n;const e={key:i.getAttribute("data-key")||void 0,trackingHost:i.getAttribute("data-tracking-host")||"https://events.usermaven.com",logLevel:ge(i.getAttribute("data-log-level")),autocapture:i.getAttribute("data-autocapture")==="true",formTracking:i.getAttribute("data-form-tracking")==="false"?!1:i.getAttribute("data-form-tracking")==="true"?"all":i.getAttribute("data-form-tracking"),autoPageview:i.getAttribute("data-auto-pageview")==="true",useBeaconApi:i.getAttribute("data-use-beacon-api")==="true",forceUseFetch:i.getAttribute("data-force-use-fetch")==="true",gaHook:i.getAttribute("data-ga-hook")==="true",segmentHook:i.getAttribute("data-segment-hook")==="true",randomizeUrl:i.getAttribute("data-randomize-url")==="true",capture3rdPartyCookies:i.getAttribute("data-capture-3rd-party-cookies")==="false"?!1:void 0,idMethod:i.getAttribute("data-id-method")||void 0,privacyPolicy:i.getAttribute("data-privacy-policy")==="strict"?"strict":void 0,ipPolicy:i.getAttribute("data-ip-policy")||void 0,cookiePolicy:i.getAttribute("data-cookie-policy")||void 0,minSendTimeout:parseInt(i.getAttribute("data-min-send-timeout")||"",10)||void 0,maxSendTimeout:parseInt(i.getAttribute("data-max-send-timeout")||"",10)||void 0,maxSendAttempts:parseInt(i.getAttribute("data-max-send-attempts")||"",10)||void 0,propertiesStringMaxLength:parseInt(i.getAttribute("data-properties-string-max-length")||"",10)||null,propertyBlacklist:((n=i.getAttribute("data-property-blacklist"))==null?void 0:n.split(","))||void 0,exclude:i.getAttribute("data-exclude")||void 0,namespace:i.getAttribute("data-namespace")||void 0,crossDomainLinking:i.getAttribute("data-cross-domain-linking")!=="false",domains:i.getAttribute("data-domains")||void 0,maskAllText:i.getAttribute("data-mask-all-text")==="true",maskAllElementAttributes:i.getAttribute("data-mask-all-element-attributes")==="true"};e.privacyPolicy==="strict"&&(e.cookiePolicy="strict",e.ipPolicy="strict"),e.cookiePolicy==="comply"&&e.useBeaconApi&&(e.cookiePolicy="strict");const t=Q(e),s=e.namespace||"usermaven";u()&&t.pageview(),be(s,t)}function be(i,e){let t=!1;const s=[],n=[];function r(){for(;s.length>0;){const a=s.shift();a&&window[i].apply(null,a)}}function o(){n.forEach(a=>a()),n.length=0}window[i]=function(...a){const h=a[0];if(h==="onLoad"){typeof a[1]=="function"&&(t?a[1]():n.push(a[1]));return}if(!t){s.push(a);return}if(typeof e[h]=="function")return e[h].apply(e,a.slice(1));console.error(`Method ${h} not found on UsermavenClient`)};const c=`${i}Q`,l=window[c]||[];for(window[c]=l,l.push=function(...a){return window[i].apply(null,a),Array.prototype.push.apply(this,a)},setTimeout(()=>{t=!0,r(),o(),console.log(`Usermaven client for namespace ${i} is ready`)},0);l.length>0;){const a=l.shift();a&&s.push(a)}}u()&&function(i,e){const t=i.currentScript;function s(){t&&t.src.includes("lib.js")&&_e(t)}typeof e<"u"&&(i.readyState==="loading"?i.addEventListener("DOMContentLoaded",s):s())}(document,window);exports.LogLevel=w;exports.UsermavenClient=J;exports.usermavenClient=Q; |
@@ -22,3 +22,3 @@ var v = /* @__PURE__ */ ((i) => (i[i.DEBUG = 0] = "DEBUG", i[i.INFO = 1] = "INFO", i[i.WARN = 2] = "WARN", i[i.ERROR = 3] = "ERROR", i))(v || {}); | ||
} | ||
const U = { | ||
const F = { | ||
logLevel: v.ERROR, | ||
@@ -231,6 +231,6 @@ useBeaconApi: !1, | ||
return O(i) && !M(i) && i.childNodes && i.childNodes.length && f(i.childNodes, function(t) { | ||
B(t) && t.textContent && (e += x(t.textContent).split(/(\s+)/).filter(P).join("").replace(/[\r\n]/g, " ").replace(/[ ]+/g, " ").substring(0, 255)); | ||
q(t) && t.textContent && (e += x(t.textContent).split(/(\s+)/).filter(P).join("").replace(/[\r\n]/g, " ").replace(/[ ]+/g, " ").substring(0, 255)); | ||
}), x(e); | ||
} | ||
function q(i) { | ||
function B(i) { | ||
return !!i && i.nodeType === 1; | ||
@@ -241,3 +241,3 @@ } | ||
} | ||
function B(i) { | ||
function q(i) { | ||
return !!i && i.nodeType === 3; | ||
@@ -250,3 +250,3 @@ } | ||
function re(i, e) { | ||
if (!i || g(i, "html") || !q(i)) | ||
if (!i || g(i, "html") || !B(i)) | ||
return !1; | ||
@@ -357,3 +357,7 @@ let t = i; | ||
} | ||
class he { | ||
const he = () => { | ||
let i = "false"; | ||
return typeof window < "u" && window.localStorage && (i = localStorage.getItem("um_exclusion")), !(i == null || i === "false"); | ||
}; | ||
class de { | ||
constructor(e) { | ||
@@ -411,3 +415,3 @@ this.maxScrollDepth = 0, this.milestones = [25, 50, 75, 90], this.lastScrollDepth = 0, this.client = e, this.documentElement = document.documentElement, this.debouncedHandleScroll = ce(this.handleScroll.bind(this), 250), this.initializeEventListener(); | ||
constructor(e, t, s = d()) { | ||
this.logger = s, this.scrollDepth = null, this.customProperties = [], this.client = e, this.options = t, this.scrollDepth = new he(e), j(this), z(this); | ||
this.logger = s, this.scrollDepth = null, this.customProperties = [], this.client = e, this.options = t, this.scrollDepth = new de(e), j(this), z(this); | ||
} | ||
@@ -438,3 +442,3 @@ init() { | ||
let t = this.getEventTarget(e); | ||
if (B(t) && (t = t.parentNode || null), e.type === "scroll") | ||
if (q(t) && (t = t.parentNode || null), e.type === "scroll") | ||
return (s = this.scrollDepth) == null || s.track(), !0; | ||
@@ -523,3 +527,3 @@ if (e.type === "visibilitychange" && document.visibilityState === "hidden" || e.type === "popstate") | ||
t = t.previousSibling; | ||
while (t && !q(t)); | ||
while (t && !B(t)); | ||
return t; | ||
@@ -548,3 +552,3 @@ } | ||
let S = C; | ||
class de { | ||
class ge { | ||
constructor(e) { | ||
@@ -578,3 +582,3 @@ this.client = e, this.lastPageUrl = window.location.href, this.trackInitialPageview(), this.initializePageviewTracking(); | ||
} | ||
class ge { | ||
class fe { | ||
constructor(e, t, s = d()) { | ||
@@ -625,3 +629,3 @@ this.trackingHost = e, this.logger = s, this.config = t; | ||
} | ||
class fe { | ||
class pe { | ||
constructor(e, t, s = d()) { | ||
@@ -695,3 +699,3 @@ this.trackingHost = e, this.logger = s, this.config = t; | ||
} | ||
class pe { | ||
class me { | ||
constructor() { | ||
@@ -715,3 +719,3 @@ this.storage = {}; | ||
} | ||
class F { | ||
class U { | ||
// Default to true for server-side | ||
@@ -763,3 +767,3 @@ constructor(e, t = 3, s = 1e3, n = 10, r = 1e3, o = d(), c = "default") { | ||
} | ||
class me { | ||
class ye { | ||
constructor(e) { | ||
@@ -798,3 +802,3 @@ this.clicks = [], this.threshold = 3, this.timeWindow = 2e3, this.distanceThreshold = 30, this.client = e, this.initializeEventListener(), z(this); | ||
} | ||
class ye { | ||
class we { | ||
constructor(e, t, s = d()) { | ||
@@ -949,5 +953,5 @@ this.trackingHost = e, this.logger = s, this.config = t; | ||
} | ||
class we { | ||
class ke { | ||
constructor(e) { | ||
this.config = this.mergeConfig(e, U), this.logger = d(this.config.logLevel), this.namespace = e.namespace || "default", this.transport = this.initializeTransport(this.config), this.persistence = this.initializePersistence(), this.retryQueue = new F( | ||
this.config = this.mergeConfig(e, F), this.logger = d(this.config.logLevel), this.namespace = e.namespace || "default", this.transport = this.initializeTransport(this.config), this.persistence = this.initializePersistence(), this.retryQueue = new U( | ||
this.transport, | ||
@@ -970,3 +974,3 @@ this.config.maxSendAttempts || 3, | ||
} | ||
this.config.autoPageview && (this.pageviewTracking = new de(this)), this.config.crossDomainLinking && this.manageCrossDomainLinking(), this.config.rageClick && (this.rageClick = new me(this)), this.setupPageLeaveTracking(); | ||
this.config.autoPageview && (this.pageviewTracking = new ge(this)), this.config.crossDomainLinking && this.manageCrossDomainLinking(), this.config.rageClick && (this.rageClick = new ye(this)), this.setupPageLeaveTracking(); | ||
} | ||
@@ -986,3 +990,3 @@ /** | ||
init(e) { | ||
this.config = { ...this.config, ...e }, this.logger = d(this.config.logLevel), this.namespace = e.namespace || this.namespace, this.transport = this.initializeTransport(e), this.persistence = this.initializePersistence(), this.retryQueue = new F( | ||
this.config = { ...this.config, ...e }, this.logger = d(this.config.logLevel), this.namespace = e.namespace || this.namespace, this.transport = this.initializeTransport(e), this.persistence = this.initializePersistence(), this.retryQueue = new U( | ||
this.transport, | ||
@@ -1023,10 +1027,10 @@ this.config.maxSendAttempts || 3, | ||
if (!u()) | ||
return new ye(e.trackingHost || t, e); | ||
return new we(e.trackingHost || t, e); | ||
const s = "XMLHttpRequest" in window, n = typeof fetch < "u", r = typeof navigator < "u" && "sendBeacon" in navigator; | ||
if (e.useBeaconApi && r) | ||
return new ge(e.trackingHost || t, e, this.logger); | ||
return new fe(e.trackingHost || t, e, this.logger); | ||
if (e.forceUseFetch && n) | ||
return new D(e.trackingHost || t, e, this.logger); | ||
if (s) | ||
return new fe(e.trackingHost || t, e, this.logger); | ||
return new pe(e.trackingHost || t, e, this.logger); | ||
if (n) | ||
@@ -1037,3 +1041,3 @@ return new D(e.trackingHost || t, e, this.logger); | ||
initializePersistence() { | ||
return this.config.disableEventPersistence || !u() ? new pe() : new V(`${this.namespace}_${this.config.key}`, this.logger); | ||
return this.config.disableEventPersistence || !u() ? new me() : new V(`${this.namespace}_${this.config.key}`, this.logger); | ||
} | ||
@@ -1080,2 +1084,6 @@ getOrCreateAnonymousId() { | ||
trackInternal(e, t, s = !1) { | ||
if (he()) { | ||
this.logger.debug("Tracking disabled due to um_exclusion setting"); | ||
return; | ||
} | ||
if (!I(e)) | ||
@@ -1085,11 +1093,11 @@ throw new Error("Event name must be a string"); | ||
throw new Error("Event payload must be a non-null object and not an array"); | ||
const n = this.createEventPayload(e, t); | ||
const r = this.createEventPayload(e, t); | ||
try { | ||
if (s) { | ||
this.transport.send(n), this.logger.debug(`Event sent: ${e}`, [n]); | ||
this.transport.send(r), this.logger.debug(`Event sent: ${e}`, [r]); | ||
return; | ||
} | ||
this.retryQueue.add(n), this.logger.debug(`Event tracked: ${e}`, [n]); | ||
} catch (r) { | ||
throw this.logger.error(`Failed to track event: ${e}`, r), new Error(`Failed to track event: ${e}`); | ||
this.retryQueue.add(r), this.logger.debug(`Event tracked: ${e}`, [r]); | ||
} catch (o) { | ||
throw this.logger.error(`Failed to track event: ${e}`, o), new Error(`Failed to track event: ${e}`); | ||
} | ||
@@ -1239,4 +1247,4 @@ } | ||
} | ||
function ke(i) { | ||
const e = JSON.parse(JSON.stringify(i)), t = H(e), s = { ...U, ...t }; | ||
function ve(i) { | ||
const e = JSON.parse(JSON.stringify(i)), t = H(e), s = { ...F, ...t }; | ||
if (!s.key) | ||
@@ -1246,5 +1254,5 @@ throw new Error("API key is required!"); | ||
throw new Error("Tracking host is required!"); | ||
return new we(s); | ||
return new ke(s); | ||
} | ||
function ve(i) { | ||
function _e(i) { | ||
var n; | ||
@@ -1279,6 +1287,8 @@ const e = { | ||
maskAllElementAttributes: i.getAttribute("data-mask-all-element-attributes") === "true" | ||
}, t = ke(e), s = e.namespace || "usermaven"; | ||
u() && t.pageview(), _e(s, t); | ||
}; | ||
e.privacyPolicy === "strict" && (e.cookiePolicy = "strict", e.ipPolicy = "strict"), e.cookiePolicy === "comply" && e.useBeaconApi && (e.cookiePolicy = "strict"); | ||
const t = ve(e), s = e.namespace || "usermaven"; | ||
u() && t.pageview(), be(s, t); | ||
} | ||
function _e(i, e) { | ||
function be(i, e) { | ||
let t = !1; | ||
@@ -1322,3 +1332,3 @@ const s = [], n = []; | ||
function s() { | ||
t && t.src.includes("lib.js") && ve(t); | ||
t && t.src.includes("lib.js") && _e(t); | ||
} | ||
@@ -1329,4 +1339,4 @@ typeof e < "u" && (i.readyState === "loading" ? i.addEventListener("DOMContentLoaded", s) : s()); | ||
v as LogLevel, | ||
we as UsermavenClient, | ||
ke as usermavenClient | ||
ke as UsermavenClient, | ||
ve as usermavenClient | ||
}; |
@@ -10,1 +10,2 @@ import { LogLevel } from '../utils/logger'; | ||
export declare function parseLogLevel(value: string | null): LogLevel; | ||
export declare const getUmExclusionState: () => boolean; |
{ | ||
"name": "@usermaven/sdk-js", | ||
"version": "1.5.3", | ||
"version": "1.5.4-rc.96", | ||
"description": "Usermaven JavaScript SDK", | ||
@@ -5,0 +5,0 @@ "main": "dist/lib.js", |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
145527
0.87%2063
0.68%2
100%