userlens-analytics-sdk 0.1.41 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/types/index.d.ts +1 -1
- package/dist/userlens.cjs.js +1 -1
- package/dist/userlens.cjs.js.map +1 -1
- package/dist/userlens.esm.js +1 -1
- package/dist/userlens.esm.js.map +1 -1
- package/dist/userlens.umd.js +1 -1
- package/dist/userlens.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/EventCollector/index.ts +2 -1
- package/src/types/index.ts +1 -1
package/dist/userlens.cjs.js
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* MIT License | (c) Dustin Diaz 2012-2015
|
|
6
6
|
* MIT License | (c) Denis Demchenko 2015-2019
|
|
7
7
|
*/class xw{static getParser(e,t=!1){if("string"!=typeof e)throw new Error("UserAgent should be a string");return new Iw(e,t)}static parse(e){return new Iw(e).getResult()}static get BROWSER_MAP(){return dw}static get ENGINE_MAP(){return gw}static get OS_MAP(){return mw}static get PLATFORMS_MAP(){return fw}}var kw="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Ow(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Mw,Ew={exports:{}},Aw=Ew.exports;
|
|
8
|
-
/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */function Rw(){return Mw||(Mw=1,e=Ew,function(t){e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,r=String(e),s=r.length,n=-1,o="",i=r.charCodeAt(0);++n<s;)0!=(t=r.charCodeAt(n))?o+=t>=1&&t<=31||127==t||0==n&&t>=48&&t<=57||1==n&&t>=48&&t<=57&&45==i?"\\"+t.toString(16)+" ":0==n&&1==s&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+r.charAt(n):r.charAt(n):o+="�";return o};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(t)}(void 0!==kw?kw:Aw)),Ew.exports;var e}var Nw,Tw,Pw,Fw={};var Dw,Lw,Bw,_w,Uw,jw,zw,Ww,Vw,Gw,Zw,Yw,Jw,Xw,$w,Hw,Kw,Qw,qw=function(){if(Pw)return Tw;Pw=1,Rw();const{ShadowRootTypes:e,nodeNameInCorrectCase:t,NodeType:r}=(Nw||(Nw=1,Fw.nodeNameInCorrectCase=function(e){const t=e.shadowRoot&&e.shadowRoot.mode;return t?"#shadow-root ("+t+")":e.localName?e.localName.length!==e.nodeName.length?e.nodeName:e.localName:e.nodeName},Fw.shadowRootType=function(e){const t=e.ancestorShadowRoot();return t?t.mode:null},Fw.NodeType={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9},Fw.ShadowRootTypes={UserAgent:"user-agent",Open:"open",Closed:"closed"}),Fw);let s={DOMPath:{}};return s.DOMPath.fullQualifiedSelector=function(e,t){try{return e.nodeType!==r.ELEMENT_NODE?e.localName||e.nodeName.toLowerCase():s.DOMPath.cssPath(e,t)}catch(e){return null}},s.DOMPath.cssPath=function(e,t){if(e.nodeType!==r.ELEMENT_NODE)return"";const n=[];let o=e;for(;o;){const r=s.DOMPath._cssPathStep(o,!!t,o===e);if(!r)break;if(n.push(r),r.optimized)break;o=o.parentNode}return n.reverse(),n.join(" > ")},s.DOMPath.canGetJSPath=function(t){let r=t;for(;r;){if(r.shadowRoot&&r.shadowRoot.mode!==e.Open)return!1;r=r.shadowRoot&&r.shadowRoot.host}return!0},s.DOMPath.jsPath=function(e,t){if(e.nodeType!==r.ELEMENT_NODE)return"";const n=[];let o=e;for(;o;)n.push(s.DOMPath.cssPath(o,t)),o=o.shadowRoot&&o.shadowRoot.host;n.reverse();let i="";for(let e=0;e<n.length;++e){const t=JSON.stringify(n[e]);i+=e?`.shadowRoot.querySelector(${t})`:`document.querySelector(${t})`}return i},s.DOMPath._cssPathStep=function(e,n,o){if(e.nodeType!==r.ELEMENT_NODE)return null;const i=e.getAttribute("id");if(n){if(i)return new s.DOMPath.Step(h(i),!0);const r=e.nodeName.toLowerCase();if("body"===r||"head"===r||"html"===r)return new s.DOMPath.Step(t(e),!0)}const a=t(e);if(i)return new s.DOMPath.Step(a+h(i),!0);const l=e.parentNode;if(!l||l.nodeType===r.DOCUMENT_NODE)return new s.DOMPath.Step(a,!0);function c(e){const t=e.getAttribute("class");return t?t.split(/\s+/g).filter(Boolean).map((function(e){return"$"+e})):[]}function h(e){return"#"+CSS.escape(e)}const u=c(e);let p=!1,d=!1,f=-1,m=-1;const g=l.children;for(let s=0;(-1===f||!d)&&s<g.length;++s){const n=g[s];if(n.nodeType!==r.ELEMENT_NODE)continue;if(m+=1,n===e){f=m;continue}if(d)continue;if(t(n)!==a)continue;p=!0;const o=new Set(u);if(!o.size){d=!0;continue}const i=c(n);for(let e=0;e<i.length;++e){const t=i[e];if(o.has(t)&&(o.delete(t),!o.size)){d=!0;break}}}let y=a;if(o&&"input"===a.toLowerCase()&&e.getAttribute("type")&&!e.getAttribute("id")&&!e.getAttribute("class")&&(y+="[type="+CSS.escape(e.getAttribute("type"))+"]"),d)y+=":nth-child("+(f+1)+")";else if(p)for(const e of u)y+="."+CSS.escape(e.slice(1));return new s.DOMPath.Step(y,!1)},s.DOMPath.xPath=function(e,t){if(e.nodeType===r.DOCUMENT_NODE)return"/";const n=[];let o=e;for(;o;){const e=s.DOMPath._xPathValue(o,t);if(!e)break;if(n.push(e),e.optimized)break;o=o.parentNode}return n.reverse(),(n.length&&n[0].optimized?"":"/")+n.join("/")},s.DOMPath._xPathValue=function(e,t){let n;const o=s.DOMPath._xPathIndex(e);if(-1===o)return null;switch(e.nodeType){case r.ELEMENT_NODE:if(t&&e.getAttribute("id"))return new s.DOMPath.Step('//*[@id="'+e.getAttribute("id")+'"]',!0);n=e.localName;break;case r.ATTRIBUTE_NODE:n="@"+e.nodeName;break;case r.TEXT_NODE:case r.CDATA_SECTION_NODE:n="text()";break;case r.PROCESSING_INSTRUCTION_NODE:n="processing-instruction()";break;case r.COMMENT_NODE:n="comment()";break;case r.DOCUMENT_NODE:default:n=""}return o>0&&(n+="["+o+"]"),new s.DOMPath.Step(n,e.nodeType===r.DOCUMENT_NODE)},s.DOMPath._xPathIndex=function(e){function t(e,t){if(e===t)return!0;if(e.nodeType===r.ELEMENT_NODE&&t.nodeType===r.ELEMENT_NODE)return e.localName===t.localName;if(e.nodeType===t.nodeType)return!0;return(e.nodeType===r.CDATA_SECTION_NODE?r.TEXT_NODE:e.nodeType)===(t.nodeType===r.CDATA_SECTION_NODE?r.TEXT_NODE:t.nodeType)}const s=e.parentNode?e.parentNode.children:null;if(!s)return 0;let n;for(let r=0;r<s.length;++r)if(t(e,s[r])&&s[r]!==e){n=!0;break}if(!n)return 0;let o=1;for(let r=0;r<s.length;++r)if(t(e,s[r])){if(s[r]===e)return o;++o}return-1},s.DOMPath.Step=class{constructor(e,t){this.value=e,this.optimized=t||!1}toString(){return this.value}},Tw=s.DOMPath}(),eb=Ow(qw);class tb{constructor({userId:e,userTraits:t,WRITE_CODE:s,callback:n,intervalTime:o=5e3}){if(Dw.add(this),this.userContext=null,Lw.set(this,void 0),Bw.set(this,void 0),_w.set(this,void 0),Uw.set(this,r(this,Dw,"m",Ww).bind(this)),jw.set(this,r(this,Dw,"m",Jw).bind(this)),Xw.set(this,(()=>{if(0===this.events.length)return;const e=[...this.events];if(this.callback){try{this.callback(e)}catch(e){console.error("Userlens callback error:",e)}r(this,Dw,"m",$w).call(this)}else Promise.allSettled([this.userId&&this.userTraits?Hy({userId:this.userId,traits:this.userTraits}):null,Ky(e)]),r(this,Dw,"m",$w).call(this)})),"undefined"==typeof window)return void console.error("Userlens EventCollector error: unavailable outside of browser environment.");if(this.autoUploadModeEnabled=!n,this.autoUploadModeEnabled&&!(null==e?void 0:e.length))return void console.error("Userlens EventCollector error: userId is missing.");if(this.autoUploadModeEnabled&&!(null==s?void 0:s.length))return void console.error("Userlens EventCollector error: WRITE_CODE is missing.");if(this.autoUploadModeEnabled&&Qy(s),!this.autoUploadModeEnabled&&"function"!=typeof n)return void console.error("Userlens EventCollector error: callback is not a function.");this.userId=e,this.userTraits=t,this.callback=n,this.intervalTime=o;const i=window.localStorage.getItem("userlensEvents");this.events=i?JSON.parse(i):[],r(this,Dw,"m",zw).call(this),r(this,Dw,"m",Zw).call(this),r(this,Dw,"m",Yw).call(this),this.userContext=this.getUserContext()}pushEvent(e){const t={is_raw:!1,...e,properties:{...null==e?void 0:e.properties,...this.getUserContext()}};this.userId&&(t.userId=this.userId),this.events.push(t),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))}updateUserTraits(e){this.userTraits=e}stop(){r(this,Dw,"m",Hw).call(this),r(this,Dw,"m",Kw).call(this),r(this,Dw,"m",Qw).call(this)}getUserContext(){var e,t,r,s,n,o,i;if(this.userContext)return this.userContext;const a=xw.getParser(window.navigator.userAgent),l=a.getBrowser(),c=a.getOS(),h={$ul_browser:null!==(e=l.name)&&void 0!==e?e:"Unknown",$ul_browser_version:null!==(t=l.version)&&void 0!==t?t:"Unknown",$ul_os:null!==(r=c.name)&&void 0!==r?r:"Unknown",$ul_os_version:null!==(s=c.versionName)&&void 0!==s?s:"Unknown",$ul_browser_language:null!==(n=navigator.language)&&void 0!==n?n:"en-US",$ul_browser_language_prefix:null!==(i=null===(o=navigator.language)||void 0===o?void 0:o.split("-")[0])&&void 0!==i?i:"en",$ul_screen_width:window.screen.width,$ul_screen_height:window.screen.height,$ul_viewport_width:window.innerWidth,$ul_viewport_height:window.innerHeight,$ul_current_url:window.location.href,$ul_pathname:window.location.pathname,$ul_host:window.location.host,$ul_referrer:document.referrer||"$direct",$ul_referring_domain:document.referrer?new URL(document.referrer).hostname:"$direct",$ul_lib:"userlens.js",$ul_lib_version:"0.1.29",$ul_device_type:/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",$ul_timezone:Intl.DateTimeFormat().resolvedOptions().timeZone};return this.userContext=h,h}}Lw=new WeakMap,Bw=new WeakMap,_w=new WeakMap,Uw=new WeakMap,jw=new WeakMap,Xw=new WeakMap,Dw=new WeakSet,zw=function(){document.body.addEventListener("click",r(this,Uw,"f"))},Ww=function(e){const t=e.target;if(!(t instanceof HTMLElement))return;const s={event:eb.xPath(t,!0),is_raw:!0,snapshot:r(this,Dw,"m",Vw).call(this,t),current_url:window.location.href,properties:{...this.getUserContext()}};this.userId&&(s.userId=this.userId),this.events.push(s),this.events.length>100&&(this.events=this.events.slice(-100)),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))},Vw=function(e){if(!(e instanceof HTMLElement))return null;const t=[];let s=e;for(;s&&1===s.nodeType;)t.unshift(s),s=s.parentElement;let n=null,o=null;for(let e=0;e<t.length;e++){const s=t[e],i=e>=t.length-3,a=e===t.length-1,l=r(this,Dw,"m",Gw).call(this,s,{isTarget:a,leadsToTarget:!0});let c=[l];if(i&&s.parentElement){c=[l,...Array.from(s.parentElement.children).filter((e=>e!==s&&e instanceof HTMLElement)).map((e=>r(this,Dw,"m",Gw).call(this,e,{includeChildren:!0}))).filter(Boolean)]}n||(n=l),o&&(o.children||(o.children=[]),o.children.push(...c)),o=l}return n},Gw=function e(t,{isTarget:s=!1,includeChildren:n=!1,leadsToTarget:o=!1}={}){var i,a;const l=t.tagName.toLowerCase(),c=t.classList.length?Array.from(t.classList):null,h=t.id||null,u=t.getAttribute("href")||null,p=Array.from((null===(i=t.parentNode)||void 0===i?void 0:i.children)||[]).indexOf(t)+1,d=Array.from((null===(a=t.parentNode)||void 0===a?void 0:a.children)||[]).filter((e=>e instanceof HTMLElement&&e.tagName===t.tagName)).indexOf(t)+1,f={};for(let e of Array.from(t.attributes))f[`attr__${e.name}`]=e.value;const m=Array.from(t.childNodes).filter((e=>e.nodeType===Node.TEXT_NODE)),g=m.map((e=>{var t;return null===(t=e.textContent)||void 0===t?void 0:t.trim()})).filter(Boolean).join(" ")||null,y={tag_name:l,attr_class:c,attr_id:h,href:u,nth_child:p,nth_of_type:d,attributes:f,text:g,...s&&{is_target:!0},...o&&!s&&{leads_to_target:!0}};return(n&&t.children.length>0||s)&&(y.children=Array.from(t.children).filter((e=>e instanceof HTMLElement)).map((t=>r(this,Dw,"m",e).call(this,t,{includeChildren:!0}))).filter(Boolean)),y},Zw=function(){s(this,Lw,setInterval((()=>{r(this,Xw,"f").call(this)}),this.intervalTime),"f")},Yw=function(){s(this,Bw,history.pushState,"f"),s(this,_w,history.replaceState,"f"),history.pushState=(...e)=>{r(this,Bw,"f").apply(history,e),r(this,Dw,"m",Jw).call(this)},history.replaceState=(...e)=>{r(this,_w,"f").apply(history,e),r(this,Dw,"m",Jw).call(this)},window.addEventListener("popstate",r(this,jw,"f"))},Jw=function(){try{const e=new URL(window.location.href);if("localhost"===(null==e?void 0:e.hostname)||"127.0.0.1"===(null==e?void 0:e.hostname)||"::1"===(null==e?void 0:e.hostname))return;let t="";try{document.referrer&&/^https?:\/\//.test(document.referrer)&&(t=new URL(document.referrer).origin+new URL(document.referrer).pathname)}catch(e){t=""}const r=Object.fromEntries(e.searchParams.entries()),s={event:"$ul_pageview",properties:{$ul_page:(null==e?void 0:e.origin)+(null==e?void 0:e.pathname)||null,$ul_referrer:t||null,$ul_query:r}};this.events.push(s),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))}catch(e){console.warn("Userlens EventCollector error: tracking page view failed")}},$w=function(){this.events=[],window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))},Hw=function(){document.body.removeEventListener("click",r(this,Uw,"f"))},Kw=function(){r(this,Xw,"f").call(this),clearInterval(r(this,Lw,"f")),r(this,Dw,"m",$w).call(this)},Qw=function(){history.pushState=r(this,Bw,"f"),history.replaceState=r(this,_w,"f"),window.removeEventListener("popstate",r(this,jw,"f"))};const rb=t.createContext({collector:null,sessionRecorder:null});exports.EventCollector=tb,exports.SessionRecorder=uw,exports.UserlensProvider=({children:r,config:s})=>{const n=t.useRef(null),o=t.useRef(null),i=t.useRef(void 0);t.useEffect((()=>{var e,t;if("undefined"==typeof window)return void console.error("UserlensProvider: unavailable outside of browser environment.");if(!s)return void console.error("UserlensProvider: config is required.");if((null==i?void 0:i.current)===(null==s?void 0:s.userId))return;if(i.current=null==s?void 0:s.userId,n.current)return void console.warn("UserlensProvider: EventCollector already initialized.");const r="function"!=typeof(null===(e=null==s?void 0:s.eventCollector)||void 0===e?void 0:e.callback),o={userId:null==s?void 0:s.userId,userTraits:null==s?void 0:s.userTraits,WRITE_CODE:null==s?void 0:s.WRITE_CODE,...r&&{callback:null===(t=null==s?void 0:s.eventCollector)||void 0===t?void 0:t.callback}};n.current=new tb(o)}),[null==s?void 0:s.userId]),t.useEffect((()=>{var e;(null==s?void 0:s.userTraits)&&(null==n?void 0:n.current)&&(null===(e=null==n?void 0:n.current)||void 0===e||e.updateUserTraits(null==s?void 0:s.userTraits))}),[null==s?void 0:s.userTraits]);const a=t.useRef(void 0);return t.useEffect((()=>{if(!s)return void console.error("UserlensProvider: config is required.");if(!1===(null==s?void 0:s.enableSessionReplay))return;if(!(null==s?void 0:s.WRITE_CODE)||!(null==s?void 0:s.userId))return void console.error("UserlensProvider: WRITE_CODE and userId are required for session recording.");if((null==a?void 0:a.current)===(null==s?void 0:s.userId))return;if(null==o?void 0:o.current)return void console.warn("UserlensProvider: SessionRecorder already initialized.");a.current=null==s?void 0:s.userId;const e=new uw({WRITE_CODE:null==s?void 0:s.WRITE_CODE,userId:null==s?void 0:s.userId,recordingOptions:null==s?void 0:s.sessionRecorder});return o.current=e,()=>{null==e||e.stop()}}),[null==s?void 0:s.userId,null==s?void 0:s.enableSessionReplay]),e.jsx(rb.Provider,{value:{collector:null==n?void 0:n.current,sessionRecorder:null==o?void 0:o.current},children:r})},exports.useUserlens=()=>{const e=t.useContext(rb);if(!e)throw new Error("useUserlens must be used within a <UserlensProvider>");return e};
|
|
8
|
+
/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */function Rw(){return Mw||(Mw=1,e=Ew,function(t){e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,r=String(e),s=r.length,n=-1,o="",i=r.charCodeAt(0);++n<s;)0!=(t=r.charCodeAt(n))?o+=t>=1&&t<=31||127==t||0==n&&t>=48&&t<=57||1==n&&t>=48&&t<=57&&45==i?"\\"+t.toString(16)+" ":0==n&&1==s&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+r.charAt(n):r.charAt(n):o+="�";return o};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(t)}(void 0!==kw?kw:Aw)),Ew.exports;var e}var Nw,Tw,Pw,Fw={};var Dw,Lw,Bw,_w,Uw,jw,zw,Ww,Vw,Gw,Zw,Yw,Jw,Xw,$w,Hw,Kw,Qw,qw=function(){if(Pw)return Tw;Pw=1,Rw();const{ShadowRootTypes:e,nodeNameInCorrectCase:t,NodeType:r}=(Nw||(Nw=1,Fw.nodeNameInCorrectCase=function(e){const t=e.shadowRoot&&e.shadowRoot.mode;return t?"#shadow-root ("+t+")":e.localName?e.localName.length!==e.nodeName.length?e.nodeName:e.localName:e.nodeName},Fw.shadowRootType=function(e){const t=e.ancestorShadowRoot();return t?t.mode:null},Fw.NodeType={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9},Fw.ShadowRootTypes={UserAgent:"user-agent",Open:"open",Closed:"closed"}),Fw);let s={DOMPath:{}};return s.DOMPath.fullQualifiedSelector=function(e,t){try{return e.nodeType!==r.ELEMENT_NODE?e.localName||e.nodeName.toLowerCase():s.DOMPath.cssPath(e,t)}catch(e){return null}},s.DOMPath.cssPath=function(e,t){if(e.nodeType!==r.ELEMENT_NODE)return"";const n=[];let o=e;for(;o;){const r=s.DOMPath._cssPathStep(o,!!t,o===e);if(!r)break;if(n.push(r),r.optimized)break;o=o.parentNode}return n.reverse(),n.join(" > ")},s.DOMPath.canGetJSPath=function(t){let r=t;for(;r;){if(r.shadowRoot&&r.shadowRoot.mode!==e.Open)return!1;r=r.shadowRoot&&r.shadowRoot.host}return!0},s.DOMPath.jsPath=function(e,t){if(e.nodeType!==r.ELEMENT_NODE)return"";const n=[];let o=e;for(;o;)n.push(s.DOMPath.cssPath(o,t)),o=o.shadowRoot&&o.shadowRoot.host;n.reverse();let i="";for(let e=0;e<n.length;++e){const t=JSON.stringify(n[e]);i+=e?`.shadowRoot.querySelector(${t})`:`document.querySelector(${t})`}return i},s.DOMPath._cssPathStep=function(e,n,o){if(e.nodeType!==r.ELEMENT_NODE)return null;const i=e.getAttribute("id");if(n){if(i)return new s.DOMPath.Step(h(i),!0);const r=e.nodeName.toLowerCase();if("body"===r||"head"===r||"html"===r)return new s.DOMPath.Step(t(e),!0)}const a=t(e);if(i)return new s.DOMPath.Step(a+h(i),!0);const l=e.parentNode;if(!l||l.nodeType===r.DOCUMENT_NODE)return new s.DOMPath.Step(a,!0);function c(e){const t=e.getAttribute("class");return t?t.split(/\s+/g).filter(Boolean).map((function(e){return"$"+e})):[]}function h(e){return"#"+CSS.escape(e)}const u=c(e);let p=!1,d=!1,f=-1,m=-1;const g=l.children;for(let s=0;(-1===f||!d)&&s<g.length;++s){const n=g[s];if(n.nodeType!==r.ELEMENT_NODE)continue;if(m+=1,n===e){f=m;continue}if(d)continue;if(t(n)!==a)continue;p=!0;const o=new Set(u);if(!o.size){d=!0;continue}const i=c(n);for(let e=0;e<i.length;++e){const t=i[e];if(o.has(t)&&(o.delete(t),!o.size)){d=!0;break}}}let y=a;if(o&&"input"===a.toLowerCase()&&e.getAttribute("type")&&!e.getAttribute("id")&&!e.getAttribute("class")&&(y+="[type="+CSS.escape(e.getAttribute("type"))+"]"),d)y+=":nth-child("+(f+1)+")";else if(p)for(const e of u)y+="."+CSS.escape(e.slice(1));return new s.DOMPath.Step(y,!1)},s.DOMPath.xPath=function(e,t){if(e.nodeType===r.DOCUMENT_NODE)return"/";const n=[];let o=e;for(;o;){const e=s.DOMPath._xPathValue(o,t);if(!e)break;if(n.push(e),e.optimized)break;o=o.parentNode}return n.reverse(),(n.length&&n[0].optimized?"":"/")+n.join("/")},s.DOMPath._xPathValue=function(e,t){let n;const o=s.DOMPath._xPathIndex(e);if(-1===o)return null;switch(e.nodeType){case r.ELEMENT_NODE:if(t&&e.getAttribute("id"))return new s.DOMPath.Step('//*[@id="'+e.getAttribute("id")+'"]',!0);n=e.localName;break;case r.ATTRIBUTE_NODE:n="@"+e.nodeName;break;case r.TEXT_NODE:case r.CDATA_SECTION_NODE:n="text()";break;case r.PROCESSING_INSTRUCTION_NODE:n="processing-instruction()";break;case r.COMMENT_NODE:n="comment()";break;case r.DOCUMENT_NODE:default:n=""}return o>0&&(n+="["+o+"]"),new s.DOMPath.Step(n,e.nodeType===r.DOCUMENT_NODE)},s.DOMPath._xPathIndex=function(e){function t(e,t){if(e===t)return!0;if(e.nodeType===r.ELEMENT_NODE&&t.nodeType===r.ELEMENT_NODE)return e.localName===t.localName;if(e.nodeType===t.nodeType)return!0;return(e.nodeType===r.CDATA_SECTION_NODE?r.TEXT_NODE:e.nodeType)===(t.nodeType===r.CDATA_SECTION_NODE?r.TEXT_NODE:t.nodeType)}const s=e.parentNode?e.parentNode.children:null;if(!s)return 0;let n;for(let r=0;r<s.length;++r)if(t(e,s[r])&&s[r]!==e){n=!0;break}if(!n)return 0;let o=1;for(let r=0;r<s.length;++r)if(t(e,s[r])){if(s[r]===e)return o;++o}return-1},s.DOMPath.Step=class{constructor(e,t){this.value=e,this.optimized=t||!1}toString(){return this.value}},Tw=s.DOMPath}(),eb=Ow(qw);class tb{constructor({userId:e,userTraits:t,WRITE_CODE:s,callback:n,intervalTime:o=5e3}){if(Dw.add(this),this.userContext=null,Lw.set(this,void 0),Bw.set(this,void 0),_w.set(this,void 0),Uw.set(this,r(this,Dw,"m",Ww).bind(this)),jw.set(this,r(this,Dw,"m",Jw).bind(this)),Xw.set(this,(()=>{if(0===this.events.length)return;const e=[...this.events];if(this.callback){try{this.callback(e)}catch(e){console.error("Userlens callback error:",e)}r(this,Dw,"m",$w).call(this)}else Promise.allSettled([this.userId&&this.userTraits?Hy({userId:this.userId,traits:this.userTraits}):null,Ky(e)]),r(this,Dw,"m",$w).call(this)})),"undefined"==typeof window)return void console.error("Userlens EventCollector error: unavailable outside of browser environment.");if(this.autoUploadModeEnabled=!n,this.autoUploadModeEnabled&&!(null==e?void 0:e.length))return void console.error("Userlens EventCollector error: userId is missing.");if(this.autoUploadModeEnabled&&!(null==s?void 0:s.length))return void console.error("Userlens EventCollector error: WRITE_CODE is missing.");if(this.autoUploadModeEnabled&&Qy(s),!this.autoUploadModeEnabled&&"function"!=typeof n)return void console.error("Userlens EventCollector error: callback is not a function.");this.userId=e,this.userTraits=t,this.callback=n,this.intervalTime=o;const i=window.localStorage.getItem("userlensEvents");this.events=i?JSON.parse(i):[],r(this,Dw,"m",zw).call(this),r(this,Dw,"m",Zw).call(this),r(this,Dw,"m",Yw).call(this),this.userContext=this.getUserContext()}pushEvent(e){const t={is_raw:!1,...e,properties:{...null==e?void 0:e.properties,...this.getUserContext()}};this.userId&&(t.userId=this.userId),this.events.push(t),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))}updateUserTraits(e){this.userTraits=e}stop(){r(this,Dw,"m",Hw).call(this),r(this,Dw,"m",Kw).call(this),r(this,Dw,"m",Qw).call(this)}getUserContext(){var e,t,r,s,n,o,i;if(this.userContext)return this.userContext;const a=xw.getParser(window.navigator.userAgent),l=a.getBrowser(),c=a.getOS(),h={$ul_browser:null!==(e=l.name)&&void 0!==e?e:"Unknown",$ul_browser_version:null!==(t=l.version)&&void 0!==t?t:"Unknown",$ul_os:null!==(r=c.name)&&void 0!==r?r:"Unknown",$ul_os_version:null!==(s=c.versionName)&&void 0!==s?s:"Unknown",$ul_browser_language:null!==(n=navigator.language)&&void 0!==n?n:"en-US",$ul_browser_language_prefix:null!==(i=null===(o=navigator.language)||void 0===o?void 0:o.split("-")[0])&&void 0!==i?i:"en",$ul_screen_width:window.screen.width,$ul_screen_height:window.screen.height,$ul_viewport_width:window.innerWidth,$ul_viewport_height:window.innerHeight,$ul_current_url:window.location.href,$ul_pathname:window.location.pathname,$ul_host:window.location.host,$ul_referrer:document.referrer||"$direct",$ul_referring_domain:document.referrer?new URL(document.referrer).hostname:"$direct",$ul_lib:"userlens.js",$ul_lib_version:"0.1.29",$ul_device_type:/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",$ul_timezone:Intl.DateTimeFormat().resolvedOptions().timeZone};return this.userContext=h,h}}Lw=new WeakMap,Bw=new WeakMap,_w=new WeakMap,Uw=new WeakMap,jw=new WeakMap,Xw=new WeakMap,Dw=new WeakSet,zw=function(){document.body.addEventListener("click",r(this,Uw,"f"))},Ww=function(e){const t=e.target;if(!(t instanceof HTMLElement))return;const s=eb.xPath(t,!0),n=r(this,Dw,"m",Vw).call(this,t),o={event:s,is_raw:!0,snapshot:n?[n]:[],current_url:window.location.href,properties:{...this.getUserContext()}};this.userId&&(o.userId=this.userId),this.events.push(o),this.events.length>100&&(this.events=this.events.slice(-100)),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))},Vw=function(e){if(!(e instanceof HTMLElement))return null;const t=[];let s=e;for(;s&&1===s.nodeType;)t.unshift(s),s=s.parentElement;let n=null,o=null;for(let e=0;e<t.length;e++){const s=t[e],i=e>=t.length-3,a=e===t.length-1,l=r(this,Dw,"m",Gw).call(this,s,{isTarget:a,leadsToTarget:!0});let c=[l];if(i&&s.parentElement){c=[l,...Array.from(s.parentElement.children).filter((e=>e!==s&&e instanceof HTMLElement)).map((e=>r(this,Dw,"m",Gw).call(this,e,{includeChildren:!0}))).filter(Boolean)]}n||(n=l),o&&(o.children||(o.children=[]),o.children.push(...c)),o=l}return n},Gw=function e(t,{isTarget:s=!1,includeChildren:n=!1,leadsToTarget:o=!1}={}){var i,a;const l=t.tagName.toLowerCase(),c=t.classList.length?Array.from(t.classList):null,h=t.id||null,u=t.getAttribute("href")||null,p=Array.from((null===(i=t.parentNode)||void 0===i?void 0:i.children)||[]).indexOf(t)+1,d=Array.from((null===(a=t.parentNode)||void 0===a?void 0:a.children)||[]).filter((e=>e instanceof HTMLElement&&e.tagName===t.tagName)).indexOf(t)+1,f={};for(let e of Array.from(t.attributes))f[`attr__${e.name}`]=e.value;const m=Array.from(t.childNodes).filter((e=>e.nodeType===Node.TEXT_NODE)),g=m.map((e=>{var t;return null===(t=e.textContent)||void 0===t?void 0:t.trim()})).filter(Boolean).join(" ")||null,y={tag_name:l,attr_class:c,attr_id:h,href:u,nth_child:p,nth_of_type:d,attributes:f,text:g,...s&&{is_target:!0},...o&&!s&&{leads_to_target:!0}};return(n&&t.children.length>0||s)&&(y.children=Array.from(t.children).filter((e=>e instanceof HTMLElement)).map((t=>r(this,Dw,"m",e).call(this,t,{includeChildren:!0}))).filter(Boolean)),y},Zw=function(){s(this,Lw,setInterval((()=>{r(this,Xw,"f").call(this)}),this.intervalTime),"f")},Yw=function(){s(this,Bw,history.pushState,"f"),s(this,_w,history.replaceState,"f"),history.pushState=(...e)=>{r(this,Bw,"f").apply(history,e),r(this,Dw,"m",Jw).call(this)},history.replaceState=(...e)=>{r(this,_w,"f").apply(history,e),r(this,Dw,"m",Jw).call(this)},window.addEventListener("popstate",r(this,jw,"f"))},Jw=function(){try{const e=new URL(window.location.href);if("localhost"===(null==e?void 0:e.hostname)||"127.0.0.1"===(null==e?void 0:e.hostname)||"::1"===(null==e?void 0:e.hostname))return;let t="";try{document.referrer&&/^https?:\/\//.test(document.referrer)&&(t=new URL(document.referrer).origin+new URL(document.referrer).pathname)}catch(e){t=""}const r=Object.fromEntries(e.searchParams.entries()),s={event:"$ul_pageview",properties:{$ul_page:(null==e?void 0:e.origin)+(null==e?void 0:e.pathname)||null,$ul_referrer:t||null,$ul_query:r}};this.events.push(s),window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))}catch(e){console.warn("Userlens EventCollector error: tracking page view failed")}},$w=function(){this.events=[],window.localStorage.setItem("userlensEvents",JSON.stringify(this.events))},Hw=function(){document.body.removeEventListener("click",r(this,Uw,"f"))},Kw=function(){r(this,Xw,"f").call(this),clearInterval(r(this,Lw,"f")),r(this,Dw,"m",$w).call(this)},Qw=function(){history.pushState=r(this,Bw,"f"),history.replaceState=r(this,_w,"f"),window.removeEventListener("popstate",r(this,jw,"f"))};const rb=t.createContext({collector:null,sessionRecorder:null});exports.EventCollector=tb,exports.SessionRecorder=uw,exports.UserlensProvider=({children:r,config:s})=>{const n=t.useRef(null),o=t.useRef(null),i=t.useRef(void 0);t.useEffect((()=>{var e,t;if("undefined"==typeof window)return void console.error("UserlensProvider: unavailable outside of browser environment.");if(!s)return void console.error("UserlensProvider: config is required.");if((null==i?void 0:i.current)===(null==s?void 0:s.userId))return;if(i.current=null==s?void 0:s.userId,n.current)return void console.warn("UserlensProvider: EventCollector already initialized.");const r="function"!=typeof(null===(e=null==s?void 0:s.eventCollector)||void 0===e?void 0:e.callback),o={userId:null==s?void 0:s.userId,userTraits:null==s?void 0:s.userTraits,WRITE_CODE:null==s?void 0:s.WRITE_CODE,...r&&{callback:null===(t=null==s?void 0:s.eventCollector)||void 0===t?void 0:t.callback}};n.current=new tb(o)}),[null==s?void 0:s.userId]),t.useEffect((()=>{var e;(null==s?void 0:s.userTraits)&&(null==n?void 0:n.current)&&(null===(e=null==n?void 0:n.current)||void 0===e||e.updateUserTraits(null==s?void 0:s.userTraits))}),[null==s?void 0:s.userTraits]);const a=t.useRef(void 0);return t.useEffect((()=>{if(!s)return void console.error("UserlensProvider: config is required.");if(!1===(null==s?void 0:s.enableSessionReplay))return;if(!(null==s?void 0:s.WRITE_CODE)||!(null==s?void 0:s.userId))return void console.error("UserlensProvider: WRITE_CODE and userId are required for session recording.");if((null==a?void 0:a.current)===(null==s?void 0:s.userId))return;if(null==o?void 0:o.current)return void console.warn("UserlensProvider: SessionRecorder already initialized.");a.current=null==s?void 0:s.userId;const e=new uw({WRITE_CODE:null==s?void 0:s.WRITE_CODE,userId:null==s?void 0:s.userId,recordingOptions:null==s?void 0:s.sessionRecorder});return o.current=e,()=>{null==e||e.stop()}}),[null==s?void 0:s.userId,null==s?void 0:s.enableSessionReplay]),e.jsx(rb.Provider,{value:{collector:null==n?void 0:n.current,sessionRecorder:null==o?void 0:o.current},children:r})},exports.useUserlens=()=>{const e=t.useContext(rb);if(!e)throw new Error("useUserlens must be used within a <UserlensProvider>");return e};
|
|
9
9
|
//# sourceMappingURL=userlens.cjs.js.map
|