userpath-js 0.0.6 → 0.0.8
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/index.js +1 -1
- package/package.json +4 -4
- package/dist/types/src/base/api.d.ts +0 -12
- package/dist/types/src/base/api.d.ts.map +0 -1
- package/dist/types/src/base/events.d.ts +0 -184
- package/dist/types/src/base/events.d.ts.map +0 -1
- package/dist/types/src/base/session.d.ts +0 -64
- package/dist/types/src/base/session.d.ts.map +0 -1
- package/dist/types/src/index.d.ts +0 -57
- package/dist/types/src/index.d.ts.map +0 -1
- package/dist/types/src/pixel.d.ts +0 -2
- package/dist/types/src/pixel.d.ts.map +0 -1
- package/dist/types/src/schemas/config.d.ts +0 -32
- package/dist/types/src/schemas/config.d.ts.map +0 -1
- package/dist/types/src/schemas/events.d.ts +0 -58
- package/dist/types/src/schemas/events.d.ts.map +0 -1
- package/dist/types/src/schemas/identity.d.ts +0 -7
- package/dist/types/src/schemas/identity.d.ts.map +0 -1
- package/dist/types/src/server/index.d.ts +0 -42
- package/dist/types/src/server/index.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var q={name:"userpath-js",version:"0.0.5",private:!1,main:"dist/index.js",types:"dist/types/src/index.d.ts",exports:{".":{types:"./dist/types/src/index.d.ts",default:"./dist/index.js"},"./server":{types:"./dist/types/src/server/index.d.ts",default:"./dist/server/index.js"}},files:["dist/index.js","dist/types","dist/server"],scripts:{dev:"bun build src/index.ts --outdir ./dist --watch",types:"tsc",build:"bun run build.client && bun run build.pixel && bun run build.server","build.prod":"bun run build.client.prod && bun run build.pixel.prod && bun run build.server.prod","build.client":"bun run types && bun build src/index.ts --outdir ./dist --no-cache","build.client.prod":"bun run types && bun build src/index.ts --outdir ./dist --minify","build.pixel":"bun build src/pixel.ts --outdir ./dist","build.pixel.prod":"bun build src/pixel.ts --outdir ./dist --minify","build.server":"bun run types && bun build src/server/index.ts --outdir ./dist/server","build.server.prod":"bun run types && bun build src/server/index.ts --outdir ./dist/server --minify"},devDependencies:{"bun-types":"latest",typescript:"^5.0.0"}};class z{namespace;constructor({namespace:x}){this.namespace=x}getItem(x){let $=localStorage.getItem(`${this.namespace}.${x}`)||"";try{return JSON.parse($)}catch(R){return null}}setItem(x,$){localStorage.setItem(`${this.namespace}.${x}`,JSON.stringify($))}removeItem(x){localStorage.removeItem(`${this.namespace}.${x}`)}}var F=new z({namespace:"userpath"});function K(x,$,R={}){let{days:J=7,path:j="/",domain:X,secure:Q,sameSite:Z="strict"}=R,_=J?new Date(Date.now()+J*86400000).toUTCString():"",Y=`${encodeURIComponent(x)}=${encodeURIComponent($)}`;if(_)Y+=`; expires=${_}`;if(j)Y+=`; path=${j}`;if(X)Y+=`; domain=${X}`;if(Q)Y+="; secure";if(Z)Y+=`; samesite=${Z}`;document.cookie=Y}function w(x){let $=encodeURIComponent(x)+"=",R=document.cookie.split(";");for(let J=0;J<R.length;J++){let j=R[J];while(j.charAt(0)===" ")j=j.substring(1,j.length);if(j.indexOf($)===0)return decodeURIComponent(j.substring($.length,j.length))}return null}var W={appId:"",serverUrl:"https://api.userpath.co",version:1,flushIntervalMs:5000,secure:!0,autoTrack:{errors:!0,clicks:!0,scrolling:!0,forms:!0,videos:!0,pageVisibility:!0,pageInactivity:!0}};function M(x){return`.${new URL(x).hostname}`}class B{serverUrl;appId;version;secure;constructor(x){this.secure=typeof x.secure==="boolean"?x.secure:W.secure,this.serverUrl=x.serverUrl||W.serverUrl,this.appId=x.appId,this.version=x.version||W.version,K("_up.app",this.appId,{days:365,sameSite:"lax",secure:this.secure,domain:M(this.serverUrl)})}buildUrl(x){return`${this.serverUrl}/v${this.version}/${x}`}}var E=typeof window==="undefined",g={pushState:()=>{},replaceState:()=>{},go:()=>{},back:()=>{},forward:()=>{}};if(E)global.history=g;var D={location:{href:""},addEventListener:()=>{},removeEventListener:()=>{},scrollTo:()=>{},scrollBy:()=>{},setTimeout:()=>{},clearTimeout:()=>{},setInterval:()=>{},clearInterval:()=>{}};if(E)global.window=D;var L={hidden:!1,addEventListener:()=>{},removeEventListener:()=>{},querySelector:()=>null,closest:()=>null,getAttribute:()=>null,tagName:"",textContent:"",classList:{contains:()=>!1},scrollHeight:0,offsetHeight:0,clientHeight:0,pageYOffset:0,referrer:"",title:""};if(E)global.document=L;class O{#R;#x;#$;#j;#W;#X;#Y;#J;#Z;#_;#P;#g;#D;#L;#V;#K;#y;#z;#q;#M;#w;#B;#A;#E;#b;#Q;#O;#C;#U=60000;#N;#G=!1;#F;#u;#I;constructor(x,$=W){this.#R=x,this.#I=$,this.#x=new Set,this.#$=0,this.#K=null,this.#y=window.location.href,this.#z=new Map,this.#q=new WeakMap,this.#M=new WeakMap,this.#w=Date.now(),this.#B=0,this.#A=this.#w,this.#E=document.hidden,this.#b=Date.now(),this.#Q=null,this.#O=!1,this.#N=null,this.#j=this.handleClick.bind(this),this.#W=this.handleScroll.bind(this),this.#X=this.handleScroll.bind(this),this.#Y=this.handleInputFocus.bind(this),this.#J=this.handleInputBlur.bind(this),this.#Z=this.handleFormChange.bind(this),this.#_=this.handleFormSubmit.bind(this),this.#P=this.handleVideoPlay.bind(this),this.#g=this.handleVideoPause.bind(this),this.#D=this.handleVideoEnd.bind(this),this.#L=this.handleVisibilityChange.bind(this),this.#V=this.handleBeforeUnload.bind(this),this.#C=this.handleUserActivity.bind(this),this.#F=this.handleError.bind(this),this.#u=this.handleRejection.bind(this);let R=this.#I.autoTrack||W.autoTrack;if(R.clicks!==!1)this.setupClickTracking();if(R.scrolling!==!1)this.setupScrollTracking();if(R.forms!==!1)this.setupFormTracking();if(R.videos!==!1)this.setupVideoTracking();if(R.pageVisibility!==!1)this.setupPageTimeTracking();if(R.pageInactivity!==!1)this.setupInactivityTracking()}destroy(){if(document.removeEventListener("click",this.#j),window.removeEventListener("scroll",this.#W),window.removeEventListener("resize",this.#X),document.removeEventListener("focus",this.#Y,!0),document.removeEventListener("blur",this.#J,!0),document.removeEventListener("change",this.#Z,!0),document.removeEventListener("submit",this.#_,!0),document.removeEventListener("play",this.#P,!0),document.removeEventListener("pause",this.#g,!0),document.removeEventListener("ended",this.#D,!0),document.removeEventListener("visibilitychange",this.#L),window.removeEventListener("beforeunload",this.#V),this.#K)window.clearTimeout(this.#K);if(["mousemove","mousedown","keydown","touchstart","scroll"].forEach((x)=>{document.removeEventListener(x,this.#C,!0)}),this.#Q)window.clearTimeout(this.#Q);this.uninstallErrorHandler()}setupClickTracking(){document.addEventListener("click",this.#j)}handleClick(x){let $=x.target;if(!$)return;let R=this.extractClickLabel($);if(!R)return;this.trackCustomEvent("click",{label:R,element:$.tagName.toLowerCase(),id:$.id||void 0})}handleScroll(){let x=window.location.href;if(x!==this.#y)this.#y=x,this.#$=0,this.#x.clear();if(this.#K)window.clearTimeout(this.#K);this.#K=window.setTimeout(()=>{let $=this.calculateScrollDepth();if($>this.#$)this.#$=$,this.checkAndTrackScrollDepth($)},100)}setupScrollTracking(){window.addEventListener("scroll",this.#W),window.addEventListener("resize",this.#X)}calculateScrollDepth(){let x=window.innerHeight,$=Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight,document.documentElement.clientHeight),R=window.pageYOffset||document.documentElement.scrollTop;return Math.round((R+x)/$*100)}checkAndTrackScrollDepth(x){let $=window.location.href;if(x>50&&!this.#x.has($))this.#x.add($),this.trackCustomEvent("scroll")}extractClickLabel(x){let $=x.getAttribute("aria-label");if($)return`${$}`;if(x instanceof HTMLButtonElement||x instanceof HTMLAnchorElement){let J=x.textContent?.trim();if(J)return`${J}`}if(x instanceof HTMLInputElement){if(x.type==="submit"&&x.value)return`${x.value}`;if(x.type==="checkbox"){let J=this.findInputLabel(x),j=x.checked?"Checked":"Unchecked";return J?`${j} ${J}`:null}}let R=x.closest("label");if(R){let J=R.textContent?.trim();if(J)return`${J}`}return null}findInputLabel(x){let $=x.getAttribute("aria-label");if($)return $;if(x.id){let J=document.querySelector(`label[for="${x.id}"]`);if(J&&J.textContent)return J.textContent.trim()}let R=x.closest("label");if(R&&R.textContent)return R.textContent.trim().replace(x.value,"").trim();return null}trackPageView(){let x={name:"page_view",url:window.location.href,referrer:document.referrer,title:document.title,timestamp:new Date().toISOString()};this.#R.track(x)}trackCustomEvent(x,$={},R={immediate:!1}){let J={name:x,url:window.location.href,referrer:document.referrer,title:document.title,properties:$,timestamp:new Date().toISOString()};if(R.immediate)this.#R.publish([J]);else this.#R.track(J)}trackPurchase(x){let $={name:"purchase",url:window.location.href,referrer:document.referrer,title:document.title,productId:x.productId,price:x.price,currency:x.currency,properties:{...x.properties},timestamp:new Date().toISOString()};this.#R.track($)}setupFormTracking(){document.addEventListener("focus",this.#Y,!0),document.addEventListener("blur",this.#J,!0),document.addEventListener("change",this.#Z,!0),document.addEventListener("submit",this.#_,!0)}handleInputFocus(x){let $=x.target;if(!$||!($ instanceof HTMLInputElement||$ instanceof HTMLTextAreaElement||$ instanceof HTMLSelectElement))return;if($ instanceof HTMLInputElement&&$.type==="password")return;this.#q.set($,this.getElementValue($));let R=$.closest("form");if(R&&!this.#z.has(R))this.#z.set(R,Date.now())}getElementValue(x){if(x instanceof HTMLSelectElement)return x.value;if(x instanceof HTMLInputElement||x instanceof HTMLTextAreaElement)return x.value;return""}handleInputBlur(x){let $=x.target;if(!$||!($ instanceof HTMLInputElement||$ instanceof HTMLTextAreaElement||$ instanceof HTMLSelectElement))return;if($ instanceof HTMLInputElement&&$.type==="password")return;let R=this.#q.get($)||"",J=this.getElementValue($);if(J!==R&&J.trim()!==""){let j=$ instanceof HTMLSelectElement?"select":$.type,X=this.findFormElementLabel($)||this.getInputIdentifier($);if(!X)return;this.trackCustomEvent("input_fill",{input_type:j,label:X,form_name:this.getFormName($)})}this.#q.delete($)}getFormName(x){let $=x.closest("form");if(!$)return;return $.getAttribute("name")||$.getAttribute("id")||$.getAttribute("aria-label")||void 0}getInputIdentifier(x){return x.getAttribute("name")||x.getAttribute("id")||x.getAttribute("placeholder")||null}findFormElementLabel(x){let $=x.getAttribute("aria-label");if($)return $;if(x.id){let J=document.querySelector(`label[for="${x.id}"]`);if(J&&J.textContent)return J.textContent.trim()}let R=x.closest("label");if(R&&R.textContent){let J=R.textContent.trim(),j=x instanceof HTMLSelectElement?x.selectedOptions[0]?.text:x.value;return j?J.replace(j,"").trim():J}return null}handleFormChange(x){let $=x.target;if(!$||!($ instanceof HTMLSelectElement||$ instanceof HTMLInputElement))return;if($ instanceof HTMLSelectElement)this.trackSelectChange($);else if($ instanceof HTMLInputElement){if($.type==="radio")this.trackRadioChange($);else if($.type==="checkbox")this.trackCheckboxChange($);else if($.type==="range")this.trackRangeChange($)}}trackSelectChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;let R=x.selectedOptions[0];this.trackCustomEvent("input_select",{input_type:"select",label:$,option_label:R?.text||"",form_name:this.getFormName(x)})}trackRadioChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;let R=x.name||$;this.trackCustomEvent("input_radio",{input_type:"radio",group:R,label:$,form_name:this.getFormName(x)})}trackCheckboxChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;this.trackCustomEvent("input_checkbox",{input_type:"checkbox",label:$,checked:x.checked,form_name:this.getFormName(x)})}trackRangeChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;this.trackCustomEvent("input_range",{input_type:"range",label:$,form_name:this.getFormName(x)})}handleFormSubmit(x){let $=x.target;if(!$||!($ instanceof HTMLFormElement))return;let R=this.#z.get($)||Date.now(),J=Date.now()-R,j=this.getFormName($)||"unknown";this.trackCustomEvent("form_submit",{form_name:j,time_to_complete:J}),this.#z.delete($)}setupVideoTracking(){document.addEventListener("play",this.#P,!0),document.addEventListener("pause",this.#g,!0),document.addEventListener("ended",this.#D,!0)}getVideoMetadata(x){return{duration:Math.round(x.duration),current_time:Math.round(x.currentTime),src:x.currentSrc||x.src||void 0,title:x.title||void 0,video_id:x.id||void 0}}handleVideoPlay(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;this.#M.set($,Date.now()),this.trackCustomEvent("video_play",this.getVideoMetadata($))}handleVideoPause(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;let R=this.#M.get($),J=this.getVideoMetadata($);if(R)J.watch_time=Math.round((Date.now()-R)/1000),this.#M.delete($);this.trackCustomEvent("video_pause",J)}handleVideoEnd(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;let R=this.#M.get($),J=this.getVideoMetadata($);if(R)J.watch_time=Math.round((Date.now()-R)/1000),this.#M.delete($);this.trackCustomEvent("video_complete",J)}setupPageTimeTracking(){document.addEventListener("visibilitychange",this.#L),window.addEventListener("beforeunload",this.#V)}handleVisibilityChange(){let x=Date.now(),$=this.#E;if(this.#E=!document.hidden,$)this.#B+=x-this.#A;this.#A=x,this.trackCustomEvent("page_visibility",{visible:this.#E,total_time:Math.round((x-this.#w)/1000),visible_time:Math.round(this.#B/1000)})}handleBeforeUnload(){let x=Date.now();if(this.#E)this.#B+=x-this.#A;this.trackCustomEvent("page_exit",{total_time:Math.round((x-this.#w)/1000),visible_time:Math.round(this.#B/1000)},{immediate:!0})}setupInactivityTracking(){["mousemove","mousedown","keydown","touchstart","scroll"].forEach((x)=>{document.addEventListener(x,this.#C,!0)}),this.checkInactivity()}handleUserActivity(){if(this.#b=Date.now(),this.#O&&this.#N)this.#O=!1,this.trackCustomEvent("user_active",{inactive_duration:Math.round((Date.now()-this.#N)/1000),url:window.location.href,title:document.title}),this.#N=null;this.checkInactivity()}checkInactivity(){if(this.#Q)window.clearTimeout(this.#Q);this.#Q=window.setTimeout(()=>{let x=Date.now();if(x-this.#b>=this.#U&&!this.#O)this.#O=!0,this.#N=x,this.trackCustomEvent("user_inactive")},this.#U)}installErrorHandler(){if(this.#G||typeof window==="undefined")return;window.addEventListener("error",this.#F),window.addEventListener("unhandledrejection",this.#u),this.#G=!0}uninstallErrorHandler(){if(!this.#G||typeof window==="undefined")return;window.removeEventListener("error",this.#F),window.removeEventListener("unhandledrejection",this.#u),this.#G=!1}isErrorHandlerInstalled(){return this.#G}handleError(x){if(x instanceof ErrorEvent)this.trackError(new Error(x.message),{filename:x.filename,lineno:x.lineno,colno:x.colno,source:"window.onerror"})}handleRejection(x){let $=x.reason instanceof Error?x.reason:new Error(String(x.reason||"Unhandled Promise rejection"));this.trackError($,{source:"unhandledrejection"})}trackError(x,$={},R={immediate:!1}){let{filename:J,lineno:j,colno:X,source:Q,url:Z,referrer:_,userAgent:Y,...A}=$,G={name:"error",message:x.message,stack:x.stack,source:Q||"client",lineno:j,colno:X,filename:J,properties:A,timestamp:new Date().toISOString(),url:Z||window.location.href,referrer:_||document.referrer,title:document.title};if(R.immediate)this.#R.publish([G]);else this.#R.track(G)}}class N{#R;#x=[];#$=null;#j;#W;#X="";#Y=null;#J=null;#Z=5000;#_=!0;constructor(x,$){this.#R=x,this.#j=$?.userId,this.#W=$?.appId||"",this.#_=typeof $?.secure==="boolean"?$.secure:W.secure,this.#Z=$?.flushIntervalMs||W.flushIntervalMs||5000}init(x){this.#$=x,this.setup()}destroy(){if(this.#Y)window.clearInterval(this.#Y);if(this.#J)window.clearTimeout(this.#J);if(this.#x.length>0)this.flush()}setup(){if(typeof window==="undefined")return;console.log("setting sessionId",this.getSessionId()),this.#X=window.location.href,this.#$.trackPageView(),this.setupHistoryChange(),this.#Y=window.setInterval(()=>this.flush(),this.#Z)}setupHistoryChange(){if(!this.#$)return;let{pushState:x,replaceState:$}=history;history.pushState=(...R)=>{x.apply(history,R),this.trackPageViewIfUrlChanged()},history.replaceState=(...R)=>{$.apply(history,R),this.trackPageViewIfUrlChanged()},window.addEventListener("popstate",()=>{this.trackPageViewIfUrlChanged()})}trackPageViewIfUrlChanged(){let x=window.location.href;if(x!==this.#X)this.#X=x,this.#$.trackPageView()}getUserId(){return this.#j}setUserId(x){this.#j=x}getAppId(){return this.#W}setAppId(x){this.#W=x}track(x){if(this.#x.push(x),this.#x.length>=20){this.flush();return}if(!this.#J)this.#J=window.setTimeout(()=>{this.flush(),this.#J=null},this.#Z)}async identify(x){this.setUserId(x.id),await fetch(this.#R.buildUrl("identify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x),keepalive:!0,credentials:"include"})}deduplicateEvents(x){let $=new Set;return x.filter((R)=>{let J=`${R.name}-${R.timestamp}`;if($.has(J))return!1;return $.add(J),!0})}flush(){if(this.#x.length===0)return;if(this.#J)window.clearTimeout(this.#J),this.#J=null;let x=[...this.#x];this.#x=[];let $=this.deduplicateEvents(x);this.publish($).catch((R)=>{this.#x=[...$,...this.#x].slice(0,100),console.error("Error sending analytics data:",R)})}async publish(x){return fetch(this.#R.buildUrl("log"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userAgent:navigator.userAgent,screenWidth:window.screen.width,screenHeight:window.screen.height,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,events:x.map(($)=>{if(!$.timestamp)$.timestamp=new Date().toISOString();return{...$,name:$.name||$.type,properties:$.properties||{}}})}),credentials:"include",keepalive:!0})}getSessionId(){let x=w("_up.sid");if(!x)x=this.generateId(),K("_up.sid",x,{days:365,sameSite:"lax",secure:this.#_,domain:M(this.#R.serverUrl)});return x}generateId(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(x){let $=Math.random()*16|0;return(x==="x"?$:$&3|8).toString(16)})}}class V{#R;#x;#$;#j=W.version;constructor(x){if(this.#R=new B(x),this.#x=new N(this.#R,x),this.#$=new O(this.#x,x),this.#j=x.version||this.#j,this.#x.init(this.#$),this.#x.setAppId(x.appId),x.autoTrack?.errors!==void 0?x.autoTrack.errors:!0)this.installErrorHandler();console.debug(`UserPath v${q.version} initialized`)}getAppId(){return this.#x.getAppId()}setAppId(x){this.#x.setAppId(x)}installErrorHandler(){this.#$.installErrorHandler()}uninstallErrorHandler(){this.#$.uninstallErrorHandler()}trackError(x,$={}){if(!this.#$.isErrorHandlerInstalled()&&$.source!=="manual")return;this.#$.trackError(x,$)}setUserId(x){this.#x.setUserId(x)}getUserId(){return this.#x.getUserId()}async identify(x){await this.#x.identify(x)}track(x,$){if(x==="page_view")this.#$.trackPageView();else if(x==="event")this.#$.trackCustomEvent($.name,$.properties||{});else if(x==="purchase")this.#$.trackPurchase({productId:$.properties?.product_id||"",price:$.price,currency:$.currency,properties:$.properties})}}export{V as UserPath,W as DEFAULT_CONFIG};
|
|
1
|
+
var q={name:"userpath-js",version:"0.0.7",private:!1,main:"dist/index.js",types:"dist/types/client/src/index.d.ts",exports:{".":{types:"./dist/types/client/src/index.d.ts",default:"./dist/index.js"},"./server":{types:"./dist/types/client/src/server/index.d.ts",default:"./dist/server/index.js"}},files:["dist/index.js","dist/types","dist/server"],scripts:{dev:"bun build src/index.ts --outdir ./dist --watch",types:"tsc",build:"bun run build.client && bun run build.pixel && bun run build.server","build.prod":"bun run build.client.prod && bun run build.pixel.prod && bun run build.server.prod","build.client":"bun run types && bun build src/index.ts --outdir ./dist --no-cache","build.client.prod":"bun run types && bun build src/index.ts --outdir ./dist --minify","build.pixel":"bun build src/pixel.ts --outdir ./dist","build.pixel.prod":"bun build src/pixel.ts --outdir ./dist --minify","build.server":"bun run types && bun build src/server/index.ts --outdir ./dist/server","build.server.prod":"bun run types && bun build src/server/index.ts --outdir ./dist/server --minify"},devDependencies:{"bun-types":"latest",typescript:"^5.0.0"}};class z{namespace;constructor({namespace:x}){this.namespace=x}getItem(x){let $=localStorage.getItem(`${this.namespace}.${x}`)||"";try{return JSON.parse($)}catch(R){return null}}setItem(x,$){localStorage.setItem(`${this.namespace}.${x}`,JSON.stringify($))}removeItem(x){localStorage.removeItem(`${this.namespace}.${x}`)}}var F=new z({namespace:"userpath"});function K(x,$,R={}){let{days:J=7,path:j="/",domain:X,secure:Q,sameSite:Z="strict"}=R,_=J?new Date(Date.now()+J*86400000).toUTCString():"",Y=`${encodeURIComponent(x)}=${encodeURIComponent($)}`;if(_)Y+=`; expires=${_}`;if(j)Y+=`; path=${j}`;if(X)Y+=`; domain=${X}`;if(Q)Y+="; secure";if(Z)Y+=`; samesite=${Z}`;document.cookie=Y}function w(x){let $=encodeURIComponent(x)+"=",R=document.cookie.split(";");for(let J=0;J<R.length;J++){let j=R[J];while(j.charAt(0)===" ")j=j.substring(1,j.length);if(j.indexOf($)===0)return decodeURIComponent(j.substring($.length,j.length))}return null}var W={appId:"",serverUrl:"https://api.userpath.co",version:1,flushIntervalMs:5000,secure:!0,autoTrack:{errors:!0,clicks:!0,scrolling:!0,forms:!0,videos:!0,pageVisibility:!0,pageInactivity:!0}};function M(x){return`.${new URL(x).hostname}`}class B{serverUrl;appId;version;secure;constructor(x){this.secure=typeof x.secure==="boolean"?x.secure:W.secure,this.serverUrl=x.serverUrl||W.serverUrl,this.appId=x.appId,this.version=x.version||W.version,K("_up.app",this.appId,{days:365,sameSite:"lax",secure:this.secure,domain:M(this.serverUrl)})}buildUrl(x){return`${this.serverUrl}/v${this.version}/${x}`}}var E=typeof window==="undefined",g={pushState:()=>{},replaceState:()=>{},go:()=>{},back:()=>{},forward:()=>{}};if(E)global.history=g;var D={location:{href:""},addEventListener:()=>{},removeEventListener:()=>{},scrollTo:()=>{},scrollBy:()=>{},setTimeout:()=>{},clearTimeout:()=>{},setInterval:()=>{},clearInterval:()=>{}};if(E)global.window=D;var L={hidden:!1,addEventListener:()=>{},removeEventListener:()=>{},querySelector:()=>null,closest:()=>null,getAttribute:()=>null,tagName:"",textContent:"",classList:{contains:()=>!1},scrollHeight:0,offsetHeight:0,clientHeight:0,pageYOffset:0,referrer:"",title:""};if(E)global.document=L;class O{#R;#x;#$;#j;#W;#X;#Y;#J;#Z;#_;#P;#g;#D;#L;#V;#K;#y;#z;#q;#M;#w;#B;#A;#E;#b;#Q;#O;#C;#U=60000;#N;#G=!1;#F;#u;#I;constructor(x,$=W){this.#R=x,this.#I=$,this.#x=new Set,this.#$=0,this.#K=null,this.#y=window.location.href,this.#z=new Map,this.#q=new WeakMap,this.#M=new WeakMap,this.#w=Date.now(),this.#B=0,this.#A=this.#w,this.#E=document.hidden,this.#b=Date.now(),this.#Q=null,this.#O=!1,this.#N=null,this.#j=this.handleClick.bind(this),this.#W=this.handleScroll.bind(this),this.#X=this.handleScroll.bind(this),this.#Y=this.handleInputFocus.bind(this),this.#J=this.handleInputBlur.bind(this),this.#Z=this.handleFormChange.bind(this),this.#_=this.handleFormSubmit.bind(this),this.#P=this.handleVideoPlay.bind(this),this.#g=this.handleVideoPause.bind(this),this.#D=this.handleVideoEnd.bind(this),this.#L=this.handleVisibilityChange.bind(this),this.#V=this.handleBeforeUnload.bind(this),this.#C=this.handleUserActivity.bind(this),this.#F=this.handleError.bind(this),this.#u=this.handleRejection.bind(this);let R=this.#I.autoTrack||W.autoTrack;if(R.clicks!==!1)this.setupClickTracking();if(R.scrolling!==!1)this.setupScrollTracking();if(R.forms!==!1)this.setupFormTracking();if(R.videos!==!1)this.setupVideoTracking();if(R.pageVisibility!==!1)this.setupPageTimeTracking();if(R.pageInactivity!==!1)this.setupInactivityTracking()}destroy(){if(document.removeEventListener("click",this.#j),window.removeEventListener("scroll",this.#W),window.removeEventListener("resize",this.#X),document.removeEventListener("focus",this.#Y,!0),document.removeEventListener("blur",this.#J,!0),document.removeEventListener("change",this.#Z,!0),document.removeEventListener("submit",this.#_,!0),document.removeEventListener("play",this.#P,!0),document.removeEventListener("pause",this.#g,!0),document.removeEventListener("ended",this.#D,!0),document.removeEventListener("visibilitychange",this.#L),window.removeEventListener("beforeunload",this.#V),this.#K)window.clearTimeout(this.#K);if(["mousemove","mousedown","keydown","touchstart","scroll"].forEach((x)=>{document.removeEventListener(x,this.#C,!0)}),this.#Q)window.clearTimeout(this.#Q);this.uninstallErrorHandler()}setupClickTracking(){document.addEventListener("click",this.#j)}handleClick(x){let $=x.target;if(!$)return;let R=this.extractClickLabel($);if(!R)return;this.trackCustomEvent("click",{label:R,element:$.tagName.toLowerCase(),id:$.id||void 0})}handleScroll(){let x=window.location.href;if(x!==this.#y)this.#y=x,this.#$=0,this.#x.clear();if(this.#K)window.clearTimeout(this.#K);this.#K=window.setTimeout(()=>{let $=this.calculateScrollDepth();if($>this.#$)this.#$=$,this.checkAndTrackScrollDepth($)},100)}setupScrollTracking(){window.addEventListener("scroll",this.#W),window.addEventListener("resize",this.#X)}calculateScrollDepth(){let x=window.innerHeight,$=Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight,document.documentElement.clientHeight),R=window.pageYOffset||document.documentElement.scrollTop;return Math.round((R+x)/$*100)}checkAndTrackScrollDepth(x){let $=window.location.href;if(x>50&&!this.#x.has($))this.#x.add($),this.trackCustomEvent("scroll")}extractClickLabel(x){let $=x.getAttribute("aria-label");if($)return`${$}`;if(x instanceof HTMLButtonElement||x instanceof HTMLAnchorElement){let J=x.textContent?.trim();if(J)return`${J}`}if(x instanceof HTMLInputElement){if(x.type==="submit"&&x.value)return`${x.value}`;if(x.type==="checkbox"){let J=this.findInputLabel(x),j=x.checked?"Checked":"Unchecked";return J?`${j} ${J}`:null}}let R=x.closest("label");if(R){let J=R.textContent?.trim();if(J)return`${J}`}return null}findInputLabel(x){let $=x.getAttribute("aria-label");if($)return $;if(x.id){let J=document.querySelector(`label[for="${x.id}"]`);if(J&&J.textContent)return J.textContent.trim()}let R=x.closest("label");if(R&&R.textContent)return R.textContent.trim().replace(x.value,"").trim();return null}trackPageView(){let x={name:"page_view",url:window.location.href,referrer:document.referrer,title:document.title,timestamp:new Date().toISOString()};this.#R.track(x)}trackCustomEvent(x,$={},R={immediate:!1}){let J={name:x,url:window.location.href,referrer:document.referrer,title:document.title,properties:$,timestamp:new Date().toISOString()};if(R.immediate)this.#R.publish([J]);else this.#R.track(J)}trackPurchase(x){let $={name:"purchase",url:window.location.href,referrer:document.referrer,title:document.title,productId:x.productId,price:x.price,currency:x.currency,properties:{...x.properties},timestamp:new Date().toISOString()};this.#R.track($)}setupFormTracking(){document.addEventListener("focus",this.#Y,!0),document.addEventListener("blur",this.#J,!0),document.addEventListener("change",this.#Z,!0),document.addEventListener("submit",this.#_,!0)}handleInputFocus(x){let $=x.target;if(!$||!($ instanceof HTMLInputElement||$ instanceof HTMLTextAreaElement||$ instanceof HTMLSelectElement))return;if($ instanceof HTMLInputElement&&$.type==="password")return;this.#q.set($,this.getElementValue($));let R=$.closest("form");if(R&&!this.#z.has(R))this.#z.set(R,Date.now())}getElementValue(x){if(x instanceof HTMLSelectElement)return x.value;if(x instanceof HTMLInputElement||x instanceof HTMLTextAreaElement)return x.value;return""}handleInputBlur(x){let $=x.target;if(!$||!($ instanceof HTMLInputElement||$ instanceof HTMLTextAreaElement||$ instanceof HTMLSelectElement))return;if($ instanceof HTMLInputElement&&$.type==="password")return;let R=this.#q.get($)||"",J=this.getElementValue($);if(J!==R&&J.trim()!==""){let j=$ instanceof HTMLSelectElement?"select":$.type,X=this.findFormElementLabel($)||this.getInputIdentifier($);if(!X)return;this.trackCustomEvent("input_fill",{input_type:j,label:X,form_name:this.getFormName($)})}this.#q.delete($)}getFormName(x){let $=x.closest("form");if(!$)return;return $.getAttribute("name")||$.getAttribute("id")||$.getAttribute("aria-label")||void 0}getInputIdentifier(x){return x.getAttribute("name")||x.getAttribute("id")||x.getAttribute("placeholder")||null}findFormElementLabel(x){let $=x.getAttribute("aria-label");if($)return $;if(x.id){let J=document.querySelector(`label[for="${x.id}"]`);if(J&&J.textContent)return J.textContent.trim()}let R=x.closest("label");if(R&&R.textContent){let J=R.textContent.trim(),j=x instanceof HTMLSelectElement?x.selectedOptions[0]?.text:x.value;return j?J.replace(j,"").trim():J}return null}handleFormChange(x){let $=x.target;if(!$||!($ instanceof HTMLSelectElement||$ instanceof HTMLInputElement))return;if($ instanceof HTMLSelectElement)this.trackSelectChange($);else if($ instanceof HTMLInputElement){if($.type==="radio")this.trackRadioChange($);else if($.type==="checkbox")this.trackCheckboxChange($);else if($.type==="range")this.trackRangeChange($)}}trackSelectChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;let R=x.selectedOptions[0];this.trackCustomEvent("input_select",{input_type:"select",label:$,option_label:R?.text||"",form_name:this.getFormName(x)})}trackRadioChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;let R=x.name||$;this.trackCustomEvent("input_radio",{input_type:"radio",group:R,label:$,form_name:this.getFormName(x)})}trackCheckboxChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;this.trackCustomEvent("input_checkbox",{input_type:"checkbox",label:$,checked:x.checked,form_name:this.getFormName(x)})}trackRangeChange(x){let $=this.findFormElementLabel(x)||this.getInputIdentifier(x);if(!$)return;this.trackCustomEvent("input_range",{input_type:"range",label:$,form_name:this.getFormName(x)})}handleFormSubmit(x){let $=x.target;if(!$||!($ instanceof HTMLFormElement))return;let R=this.#z.get($)||Date.now(),J=Date.now()-R,j=this.getFormName($)||"unknown";this.trackCustomEvent("form_submit",{form_name:j,time_to_complete:J}),this.#z.delete($)}setupVideoTracking(){document.addEventListener("play",this.#P,!0),document.addEventListener("pause",this.#g,!0),document.addEventListener("ended",this.#D,!0)}getVideoMetadata(x){return{duration:Math.round(x.duration),current_time:Math.round(x.currentTime),src:x.currentSrc||x.src||void 0,title:x.title||void 0,video_id:x.id||void 0}}handleVideoPlay(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;this.#M.set($,Date.now()),this.trackCustomEvent("video_play",this.getVideoMetadata($))}handleVideoPause(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;let R=this.#M.get($),J=this.getVideoMetadata($);if(R)J.watch_time=Math.round((Date.now()-R)/1000),this.#M.delete($);this.trackCustomEvent("video_pause",J)}handleVideoEnd(x){let $=x.target;if(!$||!($ instanceof HTMLVideoElement))return;let R=this.#M.get($),J=this.getVideoMetadata($);if(R)J.watch_time=Math.round((Date.now()-R)/1000),this.#M.delete($);this.trackCustomEvent("video_complete",J)}setupPageTimeTracking(){document.addEventListener("visibilitychange",this.#L),window.addEventListener("beforeunload",this.#V)}handleVisibilityChange(){let x=Date.now(),$=this.#E;if(this.#E=!document.hidden,$)this.#B+=x-this.#A;this.#A=x,this.trackCustomEvent("page_visibility",{visible:this.#E,total_time:Math.round((x-this.#w)/1000),visible_time:Math.round(this.#B/1000)})}handleBeforeUnload(){let x=Date.now();if(this.#E)this.#B+=x-this.#A;this.trackCustomEvent("page_exit",{total_time:Math.round((x-this.#w)/1000),visible_time:Math.round(this.#B/1000)},{immediate:!0})}setupInactivityTracking(){["mousemove","mousedown","keydown","touchstart","scroll"].forEach((x)=>{document.addEventListener(x,this.#C,!0)}),this.checkInactivity()}handleUserActivity(){if(this.#b=Date.now(),this.#O&&this.#N)this.#O=!1,this.trackCustomEvent("user_active",{inactive_duration:Math.round((Date.now()-this.#N)/1000),url:window.location.href,title:document.title}),this.#N=null;this.checkInactivity()}checkInactivity(){if(this.#Q)window.clearTimeout(this.#Q);this.#Q=window.setTimeout(()=>{let x=Date.now();if(x-this.#b>=this.#U&&!this.#O)this.#O=!0,this.#N=x,this.trackCustomEvent("user_inactive")},this.#U)}installErrorHandler(){if(this.#G||typeof window==="undefined")return;window.addEventListener("error",this.#F),window.addEventListener("unhandledrejection",this.#u),this.#G=!0}uninstallErrorHandler(){if(!this.#G||typeof window==="undefined")return;window.removeEventListener("error",this.#F),window.removeEventListener("unhandledrejection",this.#u),this.#G=!1}isErrorHandlerInstalled(){return this.#G}handleError(x){if(x instanceof ErrorEvent)this.trackError(new Error(x.message),{filename:x.filename,lineno:x.lineno,colno:x.colno,source:"window.onerror"})}handleRejection(x){let $=x.reason instanceof Error?x.reason:new Error(String(x.reason||"Unhandled Promise rejection"));this.trackError($,{source:"unhandledrejection"})}trackError(x,$={},R={immediate:!1}){let{filename:J,lineno:j,colno:X,source:Q,url:Z,referrer:_,userAgent:Y,...A}=$,G={name:"error",message:x.message,stack:x.stack,source:Q||"client",lineno:j,colno:X,filename:J,properties:A,timestamp:new Date().toISOString(),url:Z||window.location.href,referrer:_||document.referrer,title:document.title};if(R.immediate)this.#R.publish([G]);else this.#R.track(G)}}class N{#R;#x=[];#$=null;#j;#W;#X="";#Y=null;#J=null;#Z=5000;#_=!0;constructor(x,$){this.#R=x,this.#j=$?.userId,this.#W=$?.appId||"",this.#_=typeof $?.secure==="boolean"?$.secure:W.secure,this.#Z=$?.flushIntervalMs||W.flushIntervalMs||5000}init(x){this.#$=x,this.setup()}destroy(){if(this.#Y)window.clearInterval(this.#Y);if(this.#J)window.clearTimeout(this.#J);if(this.#x.length>0)this.flush()}setup(){if(typeof window==="undefined")return;this.getSessionId(),this.#X=window.location.href,this.#$.trackPageView(),this.setupHistoryChange(),this.#Y=window.setInterval(()=>this.flush(),this.#Z)}setupHistoryChange(){if(!this.#$)return;let{pushState:x,replaceState:$}=history;history.pushState=(...R)=>{x.apply(history,R),this.trackPageViewIfUrlChanged()},history.replaceState=(...R)=>{$.apply(history,R),this.trackPageViewIfUrlChanged()},window.addEventListener("popstate",()=>{this.trackPageViewIfUrlChanged()})}trackPageViewIfUrlChanged(){let x=window.location.href;if(x!==this.#X)this.#X=x,this.#$.trackPageView()}getUserId(){return this.#j}setUserId(x){this.#j=x}getAppId(){return this.#W}setAppId(x){this.#W=x}track(x){if(this.#x.push(x),this.#x.length>=20){this.flush();return}if(!this.#J)this.#J=window.setTimeout(()=>{this.flush(),this.#J=null},this.#Z)}async identify(x){this.setUserId(x.id),await fetch(this.#R.buildUrl("identify"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x),keepalive:!0,credentials:"include"})}deduplicateEvents(x){let $=new Set;return x.filter((R)=>{let J=`${R.name}-${R.timestamp}`;if($.has(J))return!1;return $.add(J),!0})}flush(){if(this.#x.length===0)return;if(this.#J)window.clearTimeout(this.#J),this.#J=null;let x=[...this.#x];this.#x=[];let $=this.deduplicateEvents(x);this.publish($).catch((R)=>{this.#x=[...$,...this.#x].slice(0,100),console.error("Error sending analytics data:",R)})}async publish(x){return fetch(this.#R.buildUrl("log"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userAgent:navigator.userAgent,screenWidth:window.screen.width,screenHeight:window.screen.height,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,events:x.map(($)=>{if(!$.timestamp)$.timestamp=new Date().toISOString();return{...$,name:$.name||$.type,properties:$.properties||{}}})}),credentials:"include",keepalive:!0})}getSessionId(){let x=w("_up.sid");if(!x)x=this.generateId(),K("_up.sid",x,{days:365,sameSite:"lax",secure:this.#_,domain:M(this.#R.serverUrl)});return x}generateId(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(x){let $=Math.random()*16|0;return(x==="x"?$:$&3|8).toString(16)})}}class V{#R;#x;#$;#j=W.version;constructor(x){if(this.#R=new B(x),this.#x=new N(this.#R,x),this.#$=new O(this.#x,x),this.#j=x.version||this.#j,this.#x.init(this.#$),this.#x.setAppId(x.appId),x.autoTrack?.errors!==void 0?x.autoTrack.errors:!0)this.installErrorHandler();console.debug(`UserPath v${q.version} initialized`)}getAppId(){return this.#x.getAppId()}setAppId(x){this.#x.setAppId(x)}installErrorHandler(){this.#$.installErrorHandler()}uninstallErrorHandler(){this.#$.uninstallErrorHandler()}trackError(x,$={}){if(!this.#$.isErrorHandlerInstalled()&&$.source!=="manual")return;this.#$.trackError(x,$)}setUserId(x){this.#x.setUserId(x)}getUserId(){return this.#x.getUserId()}async identify(x){await this.#x.identify(x)}track(x,$){if(x==="page_view")this.#$.trackPageView();else if(x==="event")this.#$.trackCustomEvent($.name,$.properties||{});else if(x==="purchase")this.#$.trackPurchase({productId:$.properties?.product_id||"",price:$.price,currency:$.currency,properties:$.properties})}}export{V as UserPath,W as DEFAULT_CONFIG};
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "userpath-js",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/types/src/index.d.ts",
|
|
6
|
+
"types": "dist/types/client/src/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
9
|
-
"types": "./dist/types/src/index.d.ts",
|
|
9
|
+
"types": "./dist/types/client/src/index.d.ts",
|
|
10
10
|
"default": "./dist/index.js"
|
|
11
11
|
},
|
|
12
12
|
"./server": {
|
|
13
|
-
"types": "./dist/types/src/server/index.d.ts",
|
|
13
|
+
"types": "./dist/types/client/src/server/index.d.ts",
|
|
14
14
|
"default": "./dist/server/index.js"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Config } from '../schemas/config';
|
|
2
|
-
/**
|
|
3
|
-
* Base API client for UserPath SDK
|
|
4
|
-
*/
|
|
5
|
-
export declare class ApiClient {
|
|
6
|
-
serverUrl: string;
|
|
7
|
-
appId: string;
|
|
8
|
-
version: number;
|
|
9
|
-
constructor(config: Config);
|
|
10
|
-
buildUrl(path: string): string;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/base/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAE3D;;GAEG;AACH,qBAAa,SAAS;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,MAAM;IAM1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG9B"}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { Config } from '../schemas/config';
|
|
2
|
-
import { SessionClient } from './session';
|
|
3
|
-
/**
|
|
4
|
-
* Session client for managing user sessions and automatic tracking
|
|
5
|
-
*/
|
|
6
|
-
export declare class EventsClient {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(session: SessionClient, config?: Config);
|
|
9
|
-
destroy(): void;
|
|
10
|
-
/**
|
|
11
|
-
* Set up automatic click event tracking
|
|
12
|
-
*/
|
|
13
|
-
private setupClickTracking;
|
|
14
|
-
/**
|
|
15
|
-
* Handle click events
|
|
16
|
-
*/
|
|
17
|
-
private handleClick;
|
|
18
|
-
/**
|
|
19
|
-
* Handle scroll and resize events
|
|
20
|
-
*/
|
|
21
|
-
private handleScroll;
|
|
22
|
-
/**
|
|
23
|
-
* Set up automatic scroll event tracking
|
|
24
|
-
*/
|
|
25
|
-
private setupScrollTracking;
|
|
26
|
-
/**
|
|
27
|
-
* Calculate the current scroll depth as a percentage
|
|
28
|
-
*/
|
|
29
|
-
private calculateScrollDepth;
|
|
30
|
-
/**
|
|
31
|
-
* Check and track scroll depth milestones
|
|
32
|
-
*/
|
|
33
|
-
private checkAndTrackScrollDepth;
|
|
34
|
-
/**
|
|
35
|
-
* Extract a meaningful label from a clicked element
|
|
36
|
-
*/
|
|
37
|
-
private extractClickLabel;
|
|
38
|
-
/**
|
|
39
|
-
* Find the label text for an input element
|
|
40
|
-
*/
|
|
41
|
-
private findInputLabel;
|
|
42
|
-
/**
|
|
43
|
-
* Track a page view event
|
|
44
|
-
*/
|
|
45
|
-
trackPageView(): void;
|
|
46
|
-
/**
|
|
47
|
-
* Track a custom event
|
|
48
|
-
*/
|
|
49
|
-
trackCustomEvent(name: string, properties?: Record<string, any>, options?: {
|
|
50
|
-
immediate: boolean;
|
|
51
|
-
}): void;
|
|
52
|
-
/**
|
|
53
|
-
* Track a purchase event
|
|
54
|
-
*/
|
|
55
|
-
trackPurchase(params: {
|
|
56
|
-
productId: string;
|
|
57
|
-
price: number;
|
|
58
|
-
currency: string;
|
|
59
|
-
properties?: Record<string, any>;
|
|
60
|
-
}): void;
|
|
61
|
-
/**
|
|
62
|
-
* Set up automatic form input tracking
|
|
63
|
-
*/
|
|
64
|
-
private setupFormTracking;
|
|
65
|
-
/**
|
|
66
|
-
* Handle input focus events
|
|
67
|
-
*/
|
|
68
|
-
private handleInputFocus;
|
|
69
|
-
/**
|
|
70
|
-
* Get the current value of an input element
|
|
71
|
-
*/
|
|
72
|
-
private getElementValue;
|
|
73
|
-
/**
|
|
74
|
-
* Handle input blur events
|
|
75
|
-
*/
|
|
76
|
-
private handleInputBlur;
|
|
77
|
-
/**
|
|
78
|
-
* Get a meaningful identifier for the form if available
|
|
79
|
-
*/
|
|
80
|
-
private getFormName;
|
|
81
|
-
/**
|
|
82
|
-
* Get an identifier for an input when no label is found
|
|
83
|
-
*/
|
|
84
|
-
private getInputIdentifier;
|
|
85
|
-
/**
|
|
86
|
-
* Find the label text for a form element
|
|
87
|
-
*/
|
|
88
|
-
private findFormElementLabel;
|
|
89
|
-
/**
|
|
90
|
-
* Handle form change events (select, radio, checkbox)
|
|
91
|
-
*/
|
|
92
|
-
private handleFormChange;
|
|
93
|
-
/**
|
|
94
|
-
* Track select element changes
|
|
95
|
-
*/
|
|
96
|
-
private trackSelectChange;
|
|
97
|
-
/**
|
|
98
|
-
* Track radio button changes
|
|
99
|
-
*/
|
|
100
|
-
private trackRadioChange;
|
|
101
|
-
/**
|
|
102
|
-
* Track checkbox changes
|
|
103
|
-
*/
|
|
104
|
-
private trackCheckboxChange;
|
|
105
|
-
/**
|
|
106
|
-
* Track range input changes
|
|
107
|
-
*/
|
|
108
|
-
private trackRangeChange;
|
|
109
|
-
/**
|
|
110
|
-
* Handle form submission events
|
|
111
|
-
*/
|
|
112
|
-
private handleFormSubmit;
|
|
113
|
-
/**
|
|
114
|
-
* Set up automatic video tracking
|
|
115
|
-
*/
|
|
116
|
-
private setupVideoTracking;
|
|
117
|
-
/**
|
|
118
|
-
* Get video metadata for tracking
|
|
119
|
-
*/
|
|
120
|
-
private getVideoMetadata;
|
|
121
|
-
/**
|
|
122
|
-
* Handle video play events
|
|
123
|
-
*/
|
|
124
|
-
private handleVideoPlay;
|
|
125
|
-
/**
|
|
126
|
-
* Handle video pause events
|
|
127
|
-
*/
|
|
128
|
-
private handleVideoPause;
|
|
129
|
-
/**
|
|
130
|
-
* Handle video end events
|
|
131
|
-
*/
|
|
132
|
-
private handleVideoEnd;
|
|
133
|
-
/**
|
|
134
|
-
* Set up page time tracking
|
|
135
|
-
*/
|
|
136
|
-
private setupPageTimeTracking;
|
|
137
|
-
/**
|
|
138
|
-
* Handle visibility change events (tab switch, minimize)
|
|
139
|
-
*/
|
|
140
|
-
private handleVisibilityChange;
|
|
141
|
-
/**
|
|
142
|
-
* Handle page unload events
|
|
143
|
-
*/
|
|
144
|
-
private handleBeforeUnload;
|
|
145
|
-
/**
|
|
146
|
-
* Set up inactivity tracking
|
|
147
|
-
*/
|
|
148
|
-
private setupInactivityTracking;
|
|
149
|
-
/**
|
|
150
|
-
* Handle user activity events
|
|
151
|
-
*/
|
|
152
|
-
private handleUserActivity;
|
|
153
|
-
/**
|
|
154
|
-
* Check for user inactivity
|
|
155
|
-
*/
|
|
156
|
-
private checkInactivity;
|
|
157
|
-
/**
|
|
158
|
-
* Install global error handlers
|
|
159
|
-
*/
|
|
160
|
-
installErrorHandler(): void;
|
|
161
|
-
/**
|
|
162
|
-
* Remove global error handlers
|
|
163
|
-
*/
|
|
164
|
-
uninstallErrorHandler(): void;
|
|
165
|
-
/**
|
|
166
|
-
* Get error handler installation state
|
|
167
|
-
*/
|
|
168
|
-
isErrorHandlerInstalled(): boolean;
|
|
169
|
-
/**
|
|
170
|
-
* Handle uncaught errors
|
|
171
|
-
*/
|
|
172
|
-
private handleError;
|
|
173
|
-
/**
|
|
174
|
-
* Handle unhandled promise rejections
|
|
175
|
-
*/
|
|
176
|
-
private handleRejection;
|
|
177
|
-
/**
|
|
178
|
-
* Track an error event
|
|
179
|
-
*/
|
|
180
|
-
trackError(error: Error, properties?: Record<string, any>, options?: {
|
|
181
|
-
immediate: boolean;
|
|
182
|
-
}): void;
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/base/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAO3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA6D1C;;GAEG;AAEH,qBAAa,YAAY;;gBAoCZ,OAAO,EAAE,aAAa,EAAE,MAAM,GAAE,MAAuB;IAkE5D,OAAO,IAAI,IAAI;IAiCtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACI,aAAa,IAAI,IAAI;IAY5B;;OAEG;IACI,gBAAgB,CACtB,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EACpC,OAAO,GAAE;QACR,SAAS,EAAE,OAAO,CAAC;KAGnB,GACC,IAAI;IAiBP;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,GAAG,IAAI;IAkBR;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAclC;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAWpC;;OAEG;IACI,uBAAuB,IAAI,OAAO;IAIzC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACI,UAAU,CAChB,KAAK,EAAE,KAAK,EACZ,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EACpC,OAAO,GAAE;QACR,SAAS,EAAE,OAAO,CAAC;KAGnB,GACC,IAAI;CAoCP"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Config } from '../schemas/config';
|
|
2
|
-
import { Event } from '../schemas/events';
|
|
3
|
-
import { UserIdentity } from '../schemas/identity';
|
|
4
|
-
import { ApiClient } from './api';
|
|
5
|
-
import { EventsClient } from './events';
|
|
6
|
-
/**
|
|
7
|
-
* Session client for managing user sessions and automatic tracking
|
|
8
|
-
*/
|
|
9
|
-
export declare class SessionClient {
|
|
10
|
-
#private;
|
|
11
|
-
constructor(api: ApiClient, config?: Config);
|
|
12
|
-
init(events: EventsClient): void;
|
|
13
|
-
destroy(): void;
|
|
14
|
-
/**
|
|
15
|
-
* Setup session tracking
|
|
16
|
-
*/
|
|
17
|
-
private setup;
|
|
18
|
-
/**
|
|
19
|
-
* Set up tracking for history/navigation changes
|
|
20
|
-
*/
|
|
21
|
-
private setupHistoryChange;
|
|
22
|
-
/**
|
|
23
|
-
* Track page view only if URL has changed
|
|
24
|
-
*/
|
|
25
|
-
private trackPageViewIfUrlChanged;
|
|
26
|
-
/**
|
|
27
|
-
* Get the current user ID if available
|
|
28
|
-
*/
|
|
29
|
-
getUserId(): string | undefined;
|
|
30
|
-
/**
|
|
31
|
-
* Set the user ID
|
|
32
|
-
*/
|
|
33
|
-
setUserId(userId: string): void;
|
|
34
|
-
/**
|
|
35
|
-
* Get the current app ID
|
|
36
|
-
*/
|
|
37
|
-
getAppId(): string;
|
|
38
|
-
/**
|
|
39
|
-
* Set the app ID
|
|
40
|
-
*/
|
|
41
|
-
setAppId(appId: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* Add an event to the queue and flush if needed
|
|
44
|
-
*/
|
|
45
|
-
track(event: Event): void;
|
|
46
|
-
/**
|
|
47
|
-
* Identify a user so that we can show in the User Journey
|
|
48
|
-
*/
|
|
49
|
-
identify(identity: UserIdentity): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Flush queued events to the server
|
|
52
|
-
*/
|
|
53
|
-
protected flush(): void;
|
|
54
|
-
publish(events: any[]): Promise<Response>;
|
|
55
|
-
/**
|
|
56
|
-
* Get or generate a session ID
|
|
57
|
-
*/
|
|
58
|
-
getSessionId(): string;
|
|
59
|
-
/**
|
|
60
|
-
* Generate a UUID v4
|
|
61
|
-
*/
|
|
62
|
-
generateId(): string;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/base/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,qBAAa,aAAa;;gBASb,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IAMpC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKhC,OAAO,IAAI,IAAI;IAStB;;OAEG;IACH,OAAO,CAAC,KAAK;IAiBb;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;IACI,SAAS,IAAI,MAAM,GAAG,SAAS;IAItC;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQhC;;OAEG;IACU,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5D;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IAaV,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;IAgClC;;OAEG;IACI,YAAY,IAAI,MAAM;IAS7B;;OAEG;IACI,UAAU,IAAI,MAAM;CAU3B"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { Config } from './schemas/config';
|
|
2
|
-
import { UserIdentity } from './schemas/identity';
|
|
3
|
-
declare class UserPath {
|
|
4
|
-
#private;
|
|
5
|
-
constructor(config: Config);
|
|
6
|
-
/**
|
|
7
|
-
* Get the current app ID
|
|
8
|
-
*/
|
|
9
|
-
getAppId(): string;
|
|
10
|
-
/**
|
|
11
|
-
* Set the app ID directly
|
|
12
|
-
*/
|
|
13
|
-
setAppId(appId: string): void;
|
|
14
|
-
/**
|
|
15
|
-
* Install global error handlers
|
|
16
|
-
*/
|
|
17
|
-
installErrorHandler(): void;
|
|
18
|
-
/**
|
|
19
|
-
* Remove global error handlers
|
|
20
|
-
*/
|
|
21
|
-
uninstallErrorHandler(): void;
|
|
22
|
-
/**
|
|
23
|
-
* Track an error
|
|
24
|
-
*/
|
|
25
|
-
trackError(error: Error, properties?: Record<string, any>): void;
|
|
26
|
-
/**
|
|
27
|
-
* Set the user ID directly
|
|
28
|
-
*/
|
|
29
|
-
setUserId(userId: string): void;
|
|
30
|
-
/**
|
|
31
|
-
* Get the current user ID
|
|
32
|
-
*/
|
|
33
|
-
getUserId(): string | undefined;
|
|
34
|
-
/**
|
|
35
|
-
* Identify a user and associate them with their anonymous ID
|
|
36
|
-
*/
|
|
37
|
-
identify(identity: UserIdentity): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Track an event
|
|
40
|
-
*/
|
|
41
|
-
track(eventType: 'page_view'): void;
|
|
42
|
-
track(eventType: 'event', params: {
|
|
43
|
-
name: string;
|
|
44
|
-
properties?: Record<string, any>;
|
|
45
|
-
}): void;
|
|
46
|
-
track(eventType: 'purchase', params: {
|
|
47
|
-
price: number;
|
|
48
|
-
amount?: number;
|
|
49
|
-
currency: string;
|
|
50
|
-
properties?: Record<string, any>;
|
|
51
|
-
}): void;
|
|
52
|
-
}
|
|
53
|
-
export * from './schemas/events';
|
|
54
|
-
export * from './schemas/config';
|
|
55
|
-
export * from './schemas/identity';
|
|
56
|
-
export { UserPath };
|
|
57
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAkB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,cAAM,QAAQ;;gBAMD,MAAM,EAAE,MAAM;IAyB1B;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAIlC;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAIpC;;OAEG;IACI,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IAY3E;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACI,SAAS,IAAI,MAAM,GAAG,SAAS;IAItC;;OAEG;IACU,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;OAEG;IACI,KAAK,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IACnC,KAAK,CACX,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GACxD,IAAI;IACA,KAAK,CACX,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,GACC,IAAI;CAkBP;AAGD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pixel.d.ts","sourceRoot":"","sources":["../../../src/pixel.ts"],"names":[],"mappings":""}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export interface Config {
|
|
2
|
-
appId: string;
|
|
3
|
-
serverUrl?: string;
|
|
4
|
-
version?: number;
|
|
5
|
-
userId?: string;
|
|
6
|
-
autoTrackErrors?: boolean;
|
|
7
|
-
autoTrack?: {
|
|
8
|
-
errors?: boolean;
|
|
9
|
-
clicks?: boolean;
|
|
10
|
-
scrolling?: boolean;
|
|
11
|
-
forms?: boolean;
|
|
12
|
-
videos?: boolean;
|
|
13
|
-
pageVisibility?: boolean;
|
|
14
|
-
inactivity?: boolean;
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export declare const DEFAULT_CONFIG: {
|
|
18
|
-
readonly appId: "";
|
|
19
|
-
readonly serverUrl: "https://api.userpath.co";
|
|
20
|
-
readonly version: 1;
|
|
21
|
-
readonly autoTrackErrors: true;
|
|
22
|
-
readonly autoTrack: {
|
|
23
|
-
readonly errors: true;
|
|
24
|
-
readonly clicks: true;
|
|
25
|
-
readonly scrolling: true;
|
|
26
|
-
readonly forms: true;
|
|
27
|
-
readonly videos: true;
|
|
28
|
-
readonly pageVisibility: true;
|
|
29
|
-
readonly inactivity: true;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/schemas/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,UAAU,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACF;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAcjB,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
export interface PageViewEvent {
|
|
2
|
-
name: 'page_view';
|
|
3
|
-
url: string;
|
|
4
|
-
referrer: string;
|
|
5
|
-
title: string;
|
|
6
|
-
user_id?: string;
|
|
7
|
-
timestamp: string;
|
|
8
|
-
}
|
|
9
|
-
export interface CustomEvent {
|
|
10
|
-
name: string;
|
|
11
|
-
url: string;
|
|
12
|
-
referrer: string;
|
|
13
|
-
title: string;
|
|
14
|
-
properties: Record<string, any>;
|
|
15
|
-
user_id?: string;
|
|
16
|
-
timestamp: string;
|
|
17
|
-
}
|
|
18
|
-
export interface PurchaseEvent {
|
|
19
|
-
name: 'purchase';
|
|
20
|
-
productId: string;
|
|
21
|
-
price: number;
|
|
22
|
-
currency: string;
|
|
23
|
-
properties?: Record<string, any>;
|
|
24
|
-
user_id?: string;
|
|
25
|
-
timestamp: string;
|
|
26
|
-
url: string;
|
|
27
|
-
referrer: string;
|
|
28
|
-
title: string;
|
|
29
|
-
}
|
|
30
|
-
export interface IdentifyEvent {
|
|
31
|
-
name: 'identify';
|
|
32
|
-
anonymousId: string;
|
|
33
|
-
userId: string;
|
|
34
|
-
email?: string;
|
|
35
|
-
properties?: Record<string, any>;
|
|
36
|
-
user_id?: string;
|
|
37
|
-
timestamp: string;
|
|
38
|
-
url?: string;
|
|
39
|
-
referrer?: string;
|
|
40
|
-
title?: string;
|
|
41
|
-
}
|
|
42
|
-
export interface ErrorEvent {
|
|
43
|
-
name: 'error';
|
|
44
|
-
message: string;
|
|
45
|
-
stack?: string;
|
|
46
|
-
source?: string;
|
|
47
|
-
lineno?: number;
|
|
48
|
-
colno?: number;
|
|
49
|
-
filename?: string;
|
|
50
|
-
properties?: Record<string, any>;
|
|
51
|
-
user_id?: string;
|
|
52
|
-
timestamp: string;
|
|
53
|
-
url?: string;
|
|
54
|
-
referrer?: string;
|
|
55
|
-
title?: string;
|
|
56
|
-
}
|
|
57
|
-
export type Event = PageViewEvent | CustomEvent | PurchaseEvent | IdentifyEvent | ErrorEvent;
|
|
58
|
-
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/schemas/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,KAAK,GACd,aAAa,GACb,WAAW,GACX,aAAa,GACb,aAAa,GACb,UAAU,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../src/schemas/identity.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* First party server integration for UserPath
|
|
3
|
-
* UserPath is compliant with WinterCG
|
|
4
|
-
* meaning you can extend it with any framework that supports the native Fetch API
|
|
5
|
-
* including cloudflare workers.
|
|
6
|
-
*/
|
|
7
|
-
export declare const userpath: {
|
|
8
|
-
/**
|
|
9
|
-
* Fetch Handler for First Party Server Integration
|
|
10
|
-
* @param request - The request object
|
|
11
|
-
* @returns The response object
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* import { userpath } from 'userpath-js/server';
|
|
15
|
-
*
|
|
16
|
-
* // Using Node.js
|
|
17
|
-
* http
|
|
18
|
-
* .createServer(function (req, res) {
|
|
19
|
-
* return userpath.fetch(req);
|
|
20
|
-
* })
|
|
21
|
-
* .listen(3000);
|
|
22
|
-
*
|
|
23
|
-
* // Using Bun
|
|
24
|
-
* Bun.serve({
|
|
25
|
-
* fetch(req) {
|
|
26
|
-
* return userpath.fetch(req);
|
|
27
|
-
* },
|
|
28
|
-
* });
|
|
29
|
-
*
|
|
30
|
-
* // Using Elysia
|
|
31
|
-
* const app = new Elysia({ name: 'my-userpath' });
|
|
32
|
-
*
|
|
33
|
-
* app.get('/', () => 'Hello World from Elysia');
|
|
34
|
-
*
|
|
35
|
-
* app.mount('/events', userpath.fetch); // Mount the UserPath server
|
|
36
|
-
*
|
|
37
|
-
* app.listen(3000);
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
fetch(request: Request): Promise<any>;
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;mBACkB,OAAO;CAqD5B,CAAC"}
|