@sessionvision/core 0.3.0 → 0.4.0
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/README.md +14 -11
- package/dist/react/core/config.d.ts +14 -1
- package/dist/react/core/init.d.ts +25 -0
- package/dist/react/recorder/chunk.d.ts +59 -0
- package/dist/react/recorder/index.d.ts +46 -0
- package/dist/react/recorder/mask.d.ts +13 -0
- package/dist/react/recorder/rrweb.d.ts +19 -0
- package/dist/react/recorder/upload.d.ts +20 -0
- package/dist/react/types.d.ts +37 -1
- package/dist/sessionvision-recorder.js +13041 -0
- package/dist/sessionvision-recorder.js.map +1 -0
- package/dist/sessionvision-recorder.min.js +7 -0
- package/dist/sessionvision-recorder.min.js.map +1 -0
- package/dist/sessionvision.cjs.js +284 -12
- package/dist/sessionvision.cjs.js.map +1 -1
- package/dist/sessionvision.esm.js +284 -12
- package/dist/sessionvision.esm.js.map +1 -1
- package/dist/sessionvision.js +284 -12
- package/dist/sessionvision.js.map +1 -1
- package/dist/sessionvision.min.js +2 -2
- package/dist/sessionvision.min.js.map +1 -1
- package/dist/types/core/config.d.ts +14 -1
- package/dist/types/core/init.d.ts +25 -0
- package/dist/types/recorder/chunk.d.ts +59 -0
- package/dist/types/recorder/index.d.ts +46 -0
- package/dist/types/recorder/mask.d.ts +13 -0
- package/dist/types/recorder/rrweb.d.ts +19 -0
- package/dist/types/recorder/upload.d.ts +20 -0
- package/dist/types/types.d.ts +37 -1
- package/dist/vue/core/config.d.ts +14 -1
- package/dist/vue/core/init.d.ts +25 -0
- package/dist/vue/recorder/chunk.d.ts +59 -0
- package/dist/vue/recorder/index.d.ts +46 -0
- package/dist/vue/recorder/mask.d.ts +13 -0
- package/dist/vue/recorder/rrweb.d.ts +19 -0
- package/dist/vue/recorder/upload.d.ts +20 -0
- package/dist/vue/types.d.ts +37 -1
- package/package.json +5 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Session Vision Core v0.
|
|
2
|
+
* Session Vision Core v0.4.0
|
|
3
3
|
* (c) 2026 Session Vision
|
|
4
4
|
* Released under the MIT License
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).sessionvision=t()}(this,function(){"use strict";const e="sessionvision_anonymous_id",t="sessionvision_user_id",n="sessionvision_session",i="sessionvision_registered",o="sessionvision_registered_once",r={pageview:!0,click:!0,formSubmit:!0,rageClick:!0,deadClick:!0,formAbandonment:!0},s={MAX_EVENTS:10,FLUSH_INTERVAL_MS:5e3,MAX_RETRIES:3,RETRY_DELAYS_MS:[1e3,2e3,4e3]};function c(){try{const e="__sessionvision_test__";return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}function l(){try{const e="__sessionvision_test__";return window.sessionStorage.setItem(e,e),window.sessionStorage.removeItem(e),!0}catch{return!1}}function a(e){if(!c())return null;try{const t=window.localStorage.getItem(e);return null===t?null:JSON.parse(t)}catch{return null}}function u(e,t){if(!c())return!1;try{return window.localStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function f(e){if(!c())return!1;try{return window.localStorage.removeItem(e),!0}catch{return!1}}function d(e,t){if(!l())return!1;try{return window.sessionStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function m(e){if(!c())return null;try{return window.localStorage.getItem(e)}catch{return null}}function p(e,t){if(!c())return!1;try{return window.localStorage.setItem(e,t),!0}catch{return!1}}function g(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=new Uint8Array(16);return crypto.getRandomValues(e),e[6]=15&e[6]|64,e[8]=63&e[8]|128,function(e){const t=[];for(let n=0;e.length>n;n++)t.push(e[n].toString(16).padStart(2,"0"));return[t.slice(0,4).join(""),t.slice(4,6).join(""),t.slice(6,8).join(""),t.slice(8,10).join(""),t.slice(10,16).join("")].join("-")}(e)}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function h(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}let y=null,w=18e5;function _(){const e=Date.now();if(y&&w>e-y.lastActivity)return v(y.id),y.id;const t=function(e){if(!l())return null;try{const t=window.sessionStorage.getItem(e);return null===t?null:JSON.parse(t)}catch{return null}}(n);return t&&h(t.id)&&w>e-t.lastActivity?(v(t.id),t.id):S()}function S(){const e=g();return y={id:e,lastActivity:Date.now()},d(n,y),e}function v(e){y={id:e,lastActivity:Date.now()},d(n,y)}function k(e){return"sessionvision_config_"+e}let b=null;function T(){if(b)return b;const t=m(e);return t&&h(t)?(b=t,b):(b=g(),p(e,b),b)}let $=null,x=null;function E(){if(null!==$)return $;const e=m(t);return e?($=e,$):null}function A(){$=null,f(t),b=g(),p(e,b),y=null,function(e){if(!l())return!1;try{return window.sessionStorage.removeItem(e),!0}catch{return!1}}(n),S(),f(i),f(o)}function C(e,t=100){return e.hasAttribute("data-sessionvision-mask")?"[masked]":e.textContent?.trim().replace(/\s+/g," ").slice(0,t)||""}function M(e){return e.classList&&e.classList.length>0?Array.from(e.classList).join(" "):""}function I(e){return e.tagName?.toLowerCase()||""}function L(e){return e.id||null}function D(e){return e instanceof HTMLAnchorElement?e.href||null:e.getAttribute("href")}function V(e){if(e.hasAttribute("data-sessionvision-ignore"))return!0;if(e.closest("[data-sessionvision-ignore]"))return!0;if(e instanceof HTMLElement){const t=window.getComputedStyle(e);if("none"===t.display||"hidden"===t.visibility)return!0}return!1}function F(e){const t=I(e);if(["a","button","input","select","textarea","label"].includes(t))return!0;const n=e.getAttribute("role");return!(!n||!["button","link","checkbox","radio","tab"].includes(n))||!!(e.hasAttribute("onclick")||e.hasAttribute("tabindex")||e instanceof HTMLElement&&"true"===e.contentEditable)}function R(){return window.location.href}function X(){return document.referrer||""}function O(){const e=navigator.userAgent,t=[{name:"iOS",pattern:/iPad|iPhone|iPod/},{name:"Android",pattern:/Android/},{name:"Windows",pattern:/Windows NT/},{name:"macOS",pattern:/Mac OS X/},{name:"Linux",pattern:/Linux/},{name:"Chrome OS",pattern:/CrOS/}];for(const n of t)if(n.pattern.test(e))return n.name;return"unknown"}function H(){const e=navigator.userAgent;if(/iPad|tablet|playbook|silk/i.test(e))return"tablet";if(/Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Opera Mini/i.test(e))return"mobile";const t=window.screen?.width||window.innerWidth;return 768>t?"mobile":1024>t?"tablet":"desktop"}function j(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"unknown"}catch{return"unknown"}}function N(){const e=navigator.connection;return e?.effectiveType||null}function U(){const e=function(){const e=navigator.userAgent,t=[{name:"Edge",pattern:/Edg(?:e|A|iOS)?\/(\d+(?:\.\d+)*)/},{name:"Chrome",pattern:/Chrome\/(\d+(?:\.\d+)*)/},{name:"Firefox",pattern:/Firefox\/(\d+(?:\.\d+)*)/},{name:"Safari",pattern:/Version\/(\d+(?:\.\d+)*).*Safari/},{name:"Opera",pattern:/OPR\/(\d+(?:\.\d+)*)/},{name:"IE",pattern:/MSIE (\d+(?:\.\d+)*)|Trident.*rv:(\d+(?:\.\d+)*)/}];for(const n of t){const t=e.match(n.pattern);if(t)return{name:n.name,version:t[1]||t[2]||"unknown"}}return{name:"unknown",version:"unknown"}}();return{$current_url:R(),$referrer:X(),$browser:e.name,$browser_version:e.version,$os:O(),$device_type:H(),$screen_width:window.screen?.width||0,$screen_height:window.screen?.height||0,$viewport_width:window.innerWidth||0,$viewport_height:window.innerHeight||0,$timezone:j(),$locale:navigator.language||"unknown",$connection_type:N(),$lib_version:"0.3.0"}}function z(){const e=a(i);return{...a(o),...e}}let P=null,q=null;function K(e,t={},n={}){if(q?.optOut)return void(q.debug&&console.log("[SessionVision] Tracking disabled (optOut: true)"));if(!e||"string"!=typeof e)return void console.warn("[SessionVision] capture() requires a non-empty event name");const{includeAutoProperties:i=!0}=n,o={event:e,timestamp:Date.now(),properties:{...t,...i?U():{},...z()},anonymousId:T(),userId:E(),sessionId:_()};q?.debug&&console.log("[SessionVision] Event captured:",o),P&&P(o)}function W(){return"undefined"!=typeof CompressionStream&&"undefined"!=typeof ReadableStream}let B=null,Y=0;function Z(e){return new Promise(t=>setTimeout(t,e))}async function J(e){if(!B)return console.warn("[SessionVision] SDK not initialized"),!1;const t=B.ingestHost+"/api/v1/ingest/events",n=JSON.stringify(e);let i=n;const o={"Content-Type":"application/json"};if(r=n,W()&&function(e){return new Blob([e]).size}(r)>1024){const e=await async function(e){if(!W())return null;try{const t=(new TextEncoder).encode(e),n=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new CompressionStream("gzip")).getReader(),i=[];for(;;){const{done:e,value:t}=await n.read();if(e)break;i.push(t)}return new Blob(i,{type:"application/gzip"})}catch{return null}}(n);e&&(i=e,o["Content-Type"]="application/json",o["Content-Encoding"]="gzip")}var r;for(let n=0;s.MAX_RETRIES>=n;n++)try{const n=await fetch(t,{method:"POST",headers:o,body:i,keepalive:!0});if(n.ok||202===n.status)return Y=0,B.debug&&console.log(`[SessionVision] Events sent successfully (${e.events.length} events)`),!0;if(n.status>=500)throw Error("Server error: "+n.status);return B.debug&&console.warn("[SessionVision] Failed to send events: "+n.status),!1}catch(e){if(s.MAX_RETRIES>n){const e=s.RETRY_DELAYS_MS[n]||4e3;B.debug&&console.log(`[SessionVision] Retry ${n+1}/${s.MAX_RETRIES} in ${e}ms`),await Z(e)}else Y++,B.debug&&console.warn("[SessionVision] Failed to send events after retries:",e)}return!1}function G(){return Y>=3}let Q=[],ee=null,te=null,ne=!1;async function ie(){if(ne||0===Q.length||!te)return;ne=!0;const e=[...Q];Q=[];const t={projectToken:te.projectToken,events:e};if(!await J(t)&&!G()){const t=[...e,...Q];Q=t.slice(-10),te.debug&&t.length>s.MAX_EVENTS&&console.warn(`[SessionVision] Buffer overflow, dropped ${t.length-s.MAX_EVENTS} oldest events`)}ne=!1}let oe=!1,re=null;function se(e={}){const t=R();t!==re&&(re=t,K("$pageview",{$current_url:t,$referrer:X(),$title:document.title||"",...e}),ie())}function ce(){setTimeout(()=>{se()},0)}function le(e){const t=e.getAttribute("data-sessionvision-id");if(t)return`[data-sessionvision-id="${n=t,n.replace(/"/g,'\\"').replace(/\\/g,"\\\\")}"]`;var n;const i=L(e);return i&&ae(i)?"#"+de(i):function(e){const t=[];let n=e,i=0;for(;n&&5>i;){const e=ue(n);t.unshift(e);const o=L(n);if(o&&ae(o))break;if(n===document.body)break;n=n.parentElement,i++}return t.join(" > ")}(e)}function ae(e){try{return 1===document.querySelectorAll("#"+de(e)).length}catch{return!1}}function ue(e){const t=I(e),n=L(e);if(n&&ae(n))return"#"+de(n);let i=t;const o=M(e);if(o){const e=o.split(" ").filter(fe).slice(0,2);e.length>0&&(i+=e.map(e=>"."+de(e)).join(""))}const r=function(e){const t=e.parentElement;if(!t)return null;const n=Array.from(t.children).indexOf(e);return 0>n?null:n+1}(e);return null!==r&&function(e,t){const n=e.parentElement;if(!n)return!1;try{return n.querySelectorAll(":scope > "+t).length>1}catch{return!1}}(e,i)&&(i+=`:nth-child(${r})`),i}function fe(e){return!!e&&![/^(mt|mb|ml|mr|mx|my|pt|pb|pl|pr|px|py)-/,/^(w|h|min-w|min-h|max-w|max-h)-/,/^(text|font|bg|border|rounded)-/,/^(flex|grid|block|inline|hidden)$/,/^(col|row)-/,/^(sm|md|lg|xl|2xl):/,/^hover:/,/^[a-z]{1,3}-\d+$/,/^css-[a-z0-9]+$/i,/^_[a-zA-Z0-9]+$/,/^svelte-[a-z0-9]+$/i].some(t=>t.test(e))}function de(e){return e.replace(/([^\w-])/g,"\\$1").replace(/^(\d)/,"\\3$1 ")}const me=[{name:"credit_card",pattern:/\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}/g,mask:"[CARD XXXX]"},{name:"ssn",pattern:/\b\d{3}-\d{2}-\d{4}\b/g,mask:"[SSN XXX-XX-XXXX]"},{name:"phone_us",pattern:/(?:\+1[\s.-]?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}/g,mask:"[PHONE XXX-XXX-XXXX]"},{name:"email",pattern:/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?:\.[A-Za-z]{2,})?/g,mask:"[EMAIL]"}];function pe(e){if(!e)return e;let t=e;for(const e of me)e.pattern.lastIndex=0,t=t.replace(e.pattern,e.mask);return t}const ge=['input[type="number"]','input[type="range"]','[role="spinbutton"]','[role="slider"]','[class*="quantity"]','[class*="stepper"]','[class*="increment"]','[class*="decrement"]','[class*="plus"]','[class*="minus"]',"video","audio",'[class*="player"]','[class*="volume"]','[class*="seek"]',"canvas"];class he{constructor(e){this.clicks=[],this.emitTimeout=null,this.threshold=he.DEFAULT_THRESHOLD,this.windowMs=he.DEFAULT_WINDOW_MS,this.radiusPx=he.DEFAULT_RADIUS_PX}recordClick(e,t,n){const i=Date.now();this.clicks.push({timestamp:i,x:e.clientX,y:e.clientY,elementSelector:n.$element_selector||"",element:t,properties:n}),this.clicks=this.clicks.filter(e=>this.windowMs>=i-e.timestamp),this.scheduleEmit()}scheduleEmit(){this.emitTimeout&&clearTimeout(this.emitTimeout),this.emitTimeout=setTimeout(()=>{this.maybeEmitRageClick()},this.windowMs)}maybeEmitRageClick(){if(this.threshold>this.clicks.length)return void(this.clicks=[]);const e=this.clicks.every(e=>e.elementSelector===this.clicks[0].elementSelector),t=this.isClickCluster(this.clicks);(e||t)&&this.emitRageClick(),this.clicks=[]}isClickCluster(e){for(let t=0;e.length>t;t++)for(let n=t+1;e.length>n;n++){const i=e[t].x-e[n].x,o=e[t].y-e[n].y;if(Math.sqrt(i*i+o*o)>this.radiusPx)return!1}return!0}emitRageClick(){const e=this.clicks[this.clicks.length-1],t=e.timestamp-this.clicks[0].timestamp;let n=0,i=0;try{const t=e.element.getBoundingClientRect();n=e.x-t.left,i=e.y-t.top}catch{}K("$rage_click",{...e.properties,$click_count:this.clicks.length,$rage_click_duration_ms:t,$click_x:e.x,$click_y:e.y,$element_x:n,$element_y:i,$click_positions:this.clicks.map(e=>({x:e.x,y:e.y,timestamp:e.timestamp}))})}destroy(){this.emitTimeout&&(clearTimeout(this.emitTimeout),this.emitTimeout=null),this.clicks=[]}}he.DEFAULT_THRESHOLD=3,he.DEFAULT_WINDOW_MS=1e3,he.DEFAULT_RADIUS_PX=30;const ye=['input[type="text"]','input[type="password"]','input[type="email"]','input[type="search"]','input[type="tel"]','input[type="url"]',"textarea","select","video","audio"];class we{constructor(e){this.pendingClick=null,this.timeoutMs=we.DEFAULT_TIMEOUT_MS}monitorClick(e,t,n){this.cancelPending();const i=Date.now();let o=!1;const r=new MutationObserver(e=>{e.some(e=>this.isMeaningfulMutation(e,t))&&(o=!0,this.cancelPending())});r.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0});const s=setTimeout(()=>{!o&&this.pendingClick&&this.emitDeadClick(this.pendingClick),this.cancelPending()},this.timeoutMs);this.pendingClick={x:e.clientX,y:e.clientY,element:t,properties:n,timestamp:i,observer:r,timeout:s}}cancelPending(){this.pendingClick&&(this.pendingClick.observer.disconnect(),clearTimeout(this.pendingClick.timeout),this.pendingClick=null)}isMeaningfulMutation(e,t){if("attributes"===e.type&&"class"===e.attributeName&&e.target===t)return!1;if("attributes"===e.type&&e.attributeName?.startsWith("data-"))return!1;if("childList"===e.type){const t=["SCRIPT","STYLE","LINK","META"];if(!Array.from(e.addedNodes).some(e=>!t.includes(e.nodeName))&&0===e.removedNodes.length)return!1}return!0}emitDeadClick(e){let t=0,n=0;try{const i=e.element.getBoundingClientRect();t=e.x-i.left,n=e.y-i.top}catch{}K("$dead_click",{...e.properties,$click_x:e.x,$click_y:e.y,$element_x:t,$element_y:n,$wait_duration_ms:Date.now()-e.timestamp,$element_is_interactive:F(e.element)})}destroy(){this.cancelPending()}}we.DEFAULT_TIMEOUT_MS=1e3;let _e=!1;const Se=new Map;function ve(e){const t=e.querySelectorAll("input, textarea, select");return Array.from(t)}function ke(e,t){return ve(t).indexOf(e)}function be(e){return e instanceof HTMLInputElement?"checkbox"===e.type||"radio"===e.type?e.checked:e.value.length>0:e instanceof HTMLTextAreaElement?e.value.length>0:e instanceof HTMLSelectElement&&(e.selectedIndex>0||0===e.selectedIndex&&""!==e.value)}function Te(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement}function $e(e){return e.closest("form")}function xe(e){const t=e.target;if(!t||!Te(t))return;if(V(t))return;const n=$e(t);if(!n||V(n))return;const i=le(n);if(Se.has(i))return;const o=ve(n);K("$form_start",{$form_id:n.id||null,$form_name:n.name||null,$form_selector:i,$form_field_count:o.length}),Se.set(i,{startTime:Date.now(),fieldCount:o.length,interactedFields:new Set,filledFields:new Set})}function Ee(e){const t=e.target;if(!t||!Te(t))return;if(V(t))return;const n=$e(t);if(!n||V(n))return;const i=le(n),o=le(t),r=Se.get(i);if(r)r.interactedFields.add(o),be(t)?r.filledFields.add(o):r.filledFields.delete(o);else{const e=ve(n);K("$form_start",{$form_id:n.id||null,$form_name:n.name||null,$form_selector:i,$form_field_count:e.length}),Se.set(i,{startTime:Date.now(),fieldCount:e.length,interactedFields:new Set([o]),filledFields:new Set(be(t)?[o]:[])})}var s;K("$form_field_change",{$form_selector:i,$field_selector:o,$field_name:t.name||null,$field_type:(s=t,s instanceof HTMLInputElement?s.type||"text":s instanceof HTMLTextAreaElement?"textarea":s instanceof HTMLSelectElement?"select":"unknown"),$field_index:ke(t,n),$has_value:be(t)})}let Ae=!1,Ce=!1,Me=null,Ie=null,Le=null;function De(e){Me=e}function Ve(e){const t=e.target;if(!t||V(t))return;const n=function(e){let t=e;for(;t;){if(F(t))return t;t=t.parentElement}return null}(t)||t;if(V(n))return;const i={$element_tag:I(n),$element_text:pe(C(n)),$element_classes:M(n),$element_id:L(n),$element_selector:le(n),$element_href:D(n)};K("$click",i),Ie&&!function(e){if(e.closest("[data-sessionvision-no-rageclick]"))return!0;for(const t of ge)if(e.matches(t)||e.closest(t))return!0;return!1}(n)&&Ie.recordClick(e,n,i),Le&&!function(e){if(e.closest("[data-sessionvision-no-deadclick]"))return!0;for(const t of ye)if(e.matches(t)||e.closest(t))return!0;return!1}(n)&&Le.monitorClick(e,n,i)}function Fe(e){const t=e.target;if(!(t&&t instanceof HTMLFormElement))return;if(V(t))return;const n=function(e){const t=le(e),n=ve(e),i=Se.get(t);if(!i){const e=[];for(const t of n)be(t)&&!V(t)&&e.push(le(t));return{formSelector:t,formFieldCount:n.length,formFieldsFilled:e,formFieldsInteracted:[],formCompletionRate:n.length>0?e.length/n.length:0,formTimeToSubmitMs:null}}const o=[];for(const e of n)be(e)&&!V(e)&&o.push(le(e));const r=n.length>0?o.length/n.length:0;return{formSelector:t,formFieldCount:i.fieldCount,formFieldsFilled:o,formFieldsInteracted:Array.from(i.interactedFields),formCompletionRate:Math.round(100*r)/100,formTimeToSubmitMs:Date.now()-i.startTime}}(t);K("$form_submit",{$form_id:t.id||null,$form_action:t.action||"",$form_method:(t.method||"GET").toUpperCase(),$form_name:t.name||null,$form_selector:n.formSelector,$form_field_count:n.formFieldCount,$form_fields_filled:n.formFieldsFilled,$form_fields_interacted:n.formFieldsInteracted,$form_completion_rate:n.formCompletionRate,$form_time_to_submit_ms:n.formTimeToSubmitMs}),Se.delete(n.formSelector)}function Re(e){Me=e,Me.autocapture.click&&(Ae||(Ae=!0,document.addEventListener("click",Ve,{capture:!0}))),Me.autocapture.formSubmit&&(Ce||(Ce=!0,document.addEventListener("submit",Fe,{capture:!0}))),Me.autocapture.formAbandonment&&(_e||(_e=!0,document.addEventListener("focusin",xe,{capture:!0}),document.addEventListener("change",Ee,{capture:!0}))),Me.autocapture.rageClick&&(Ie=new he(Me)),Me.autocapture.deadClick&&(Le=new we(Me))}let Xe=!1,Oe=null;async function He(e,t){if(Xe)console.warn("[SessionVision] SDK already initialized");else if(e&&"string"==typeof e){if(Oe=function(e,t){let n={...r};if(void 0!==t?.autocapture)if("boolean"==typeof t.autocapture)n={pageview:t.autocapture,click:t.autocapture,formSubmit:t.autocapture,rageClick:t.autocapture,deadClick:t.autocapture,formAbandonment:t.autocapture};else if("object"==typeof t.autocapture){const e=t.autocapture;n={pageview:e.pageview??!0,click:e.click??!0,formSubmit:e.formSubmit??!0,rageClick:e.rageClick??!0,deadClick:e.deadClick??!0,formAbandonment:e.formAbandonment??!0}}return{projectToken:e,apiHost:t?.apiHost??"https://cdn.sessionvision.com",ingestHost:t?.ingestHost??"https://app.sessionvision.com",version:t?.version??"latest",debug:t?.debug??false,optOut:t?.optOut??false,maskAllInputs:t?.maskAllInputs??true,autocapture:n}}(e,t),Oe.debug&&console.log("[SessionVision] Initializing with config:",Oe),q=Oe,te=Oe,function(e){B=e}(Oe),De(Oe),P=e=>{!function(e){G()?te?.debug&&console.warn("[SessionVision] Too many failures, dropping event"):(Q.push(e),s.MAX_EVENTS>Q.length||ie())}(e)},x=(e,t)=>{!function(e,t={}){K("$identify",t,{includeAutoProperties:!0})}(0,{$user_id:e,...t})},T(),_(),Oe.optOut)return Oe.debug&&console.log("[SessionVision] Tracking disabled (optOut: true)"),void(Xe=!0);(async function(e){const{projectToken:t,debug:n}=e,i=function(e){const t=a(k(e));return t?Date.now()-t.timestamp>36e5?null:t.config:null}(t);if(i)return n&&console.log("[SessionVision] Using cached config"),i;try{const i=`${e.apiHost}/static/config/${t}`,o=await fetch(i,{method:"GET",headers:{Accept:"application/json"}});if(!o.ok)throw Error("Config fetch failed: "+o.status);const r=await o.json();return function(e,t){const n={config:t,timestamp:Date.now()};u(k(e),n)}(t,r),n&&console.log("[SessionVision] Remote config fetched:",r),r}catch(e){n&&console.warn("[SessionVision] Failed to fetch remote config:",e);const i=a(k(t));return i?(n&&console.log("[SessionVision] Using stale cached config"),i.config):null}})(Oe).then(e=>{e&&function(e){e.session?.timeoutMinutes&&(w=60*e.session.timeoutMinutes*1e3)}(e)}),ee||(ee=setInterval(()=>{ie()},s.FLUSH_INTERVAL_MS)),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&ie()}),n=()=>{Oe&&Oe.autocapture.pageview&&function(){if(oe)return;oe=!0,se();const e=history.pushState;history.pushState=function(...t){const n=e.apply(this,t);return ce(),n};const t=history.replaceState;history.replaceState=function(...e){const n=t.apply(this,e);return ce(),n},window.addEventListener("popstate",ce)}(),Oe&&Re(Oe)},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n(),Xe=!0,Oe.debug&&console.log("[SessionVision] SDK initialized successfully")}else console.error("[SessionVision] init() requires a valid project token");var n}const je={version:"0.3.0",init(e,t){He(e,t)},capture(e,t){!function(e,t){Xe?K(e,t||{}):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e,t)},identify(e,n){!function(e,n){Xe?function(e,n){if(!e||"string"!=typeof e)return void console.warn("[SessionVision] identify() requires a non-empty user ID string");const i=e.trim();i?($=i,p(t,i),x&&x(i,n)):console.warn("[SessionVision] identify() requires a non-empty user ID string")}(e,n):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e,n)},reset(){Xe?A():console.warn("[SessionVision] SDK not initialized. Call init() first.")},getDistinctId:()=>E()||T(),register(e){!function(e){Xe?function(e){const t=a(i)||{};u(i,{...t,...e})}(e):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e)},registerOnce(e){!function(e){Xe?function(e){const t={...a(o)||{}};for(const n of Object.keys(e))n in t||(t[n]=e[n]);u(o,t)}(e):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e)},flushEvents:()=>ie()};return function(){const e=window.sessionvision;if(!e||!e.__SV){var t,n;if(e?._q&&function(e,t){if(e&&Array.isArray(e))for(const n of e){if(!n||"object"!=typeof n)continue;const{method:e,args:i}=n;if(!e||"string"!=typeof e)continue;const o=t[e];if("function"==typeof o)try{o.apply(t,i||[])}catch(t){console.warn(`[SessionVision] Error replaying queued call ${e}:`,t)}else console.warn("[SessionVision] Unknown method in queue: "+e)}}((t=e._q)&&Array.isArray(t)?t.filter(e=>Array.isArray(e)&&e.length>0).map(e=>({method:e[0]+"",args:e.slice(1)})):[],je),e?._i){const t=(n=e._i)&&Array.isArray(n)?n.filter(e=>Array.isArray(e)&&e.length>0&&"string"==typeof e[0]).map(e=>({projectToken:e[0],config:e[1]})):[];for(const{projectToken:e,config:n}of t)je.init(e,n)}je.__SV=1,window.sessionvision=je}}(),je});
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).sessionvision=t()}(this,function(){"use strict";const e="sessionvision_anonymous_id",t="sessionvision_user_id",n="sessionvision_session",i="sessionvision_registered",o="sessionvision_registered_once",r={pageview:!0,click:!0,formSubmit:!0,rageClick:!0,deadClick:!0,formAbandonment:!0},s={MAX_EVENTS:10,FLUSH_INTERVAL_MS:5e3,MAX_RETRIES:3,RETRY_DELAYS_MS:[1e3,2e3,4e3]};function c(){try{const e="__sessionvision_test__";return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch{return!1}}function l(){try{const e="__sessionvision_test__";return window.sessionStorage.setItem(e,e),window.sessionStorage.removeItem(e),!0}catch{return!1}}function a(e){if(!c())return null;try{const t=window.localStorage.getItem(e);return null===t?null:JSON.parse(t)}catch{return null}}function u(e,t){if(!c())return!1;try{return window.localStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function d(e){if(!c())return!1;try{return window.localStorage.removeItem(e),!0}catch{return!1}}function f(e,t){if(!l())return!1;try{return window.sessionStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function m(e){if(!c())return null;try{return window.localStorage.getItem(e)}catch{return null}}function p(e,t){if(!c())return!1;try{return window.localStorage.setItem(e,t),!0}catch{return!1}}function g(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=new Uint8Array(16);return crypto.getRandomValues(e),e[6]=15&e[6]|64,e[8]=63&e[8]|128,function(e){const t=[];for(let n=0;e.length>n;n++)t.push(e[n].toString(16).padStart(2,"0"));return[t.slice(0,4).join(""),t.slice(4,6).join(""),t.slice(6,8).join(""),t.slice(8,10).join(""),t.slice(10,16).join("")].join("-")}(e)}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function h(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}let y=null,w=18e5;function S(){const e=Date.now();if(y&&w>e-y.lastActivity)return v(y.id),y.id;const t=function(e){if(!l())return null;try{const t=window.sessionStorage.getItem(e);return null===t?null:JSON.parse(t)}catch{return null}}(n);return t&&h(t.id)&&w>e-t.lastActivity?(v(t.id),t.id):_()}function _(){const e=g();return y={id:e,lastActivity:Date.now()},f(n,y),e}function v(e){y={id:e,lastActivity:Date.now()},f(n,y)}function k(e){return"sessionvision_config_"+e}function b(e){const t=a(k(e));return t?Date.now()-t.timestamp>144e5?null:t.config:null}let $=null;function T(){if($)return $;const t=m(e);return t&&h(t)?($=t,$):($=g(),p(e,$),$)}let E=null,x=null;function A(){if(null!==E)return E;const e=m(t);return e?(E=e,E):null}function C(){E=null,d(t),$=g(),p(e,$),y=null,function(e){if(!l())return!1;try{return window.sessionStorage.removeItem(e),!0}catch{return!1}}(n),_(),d(i),d(o)}function M(e,t=100){return e.hasAttribute("data-sessionvision-mask")?"[masked]":e.textContent?.trim().replace(/\s+/g," ").slice(0,t)||""}function I(e){return e.classList&&e.classList.length>0?Array.from(e.classList).join(" "):""}function R(e){return e.tagName?.toLowerCase()||""}function L(e){return e.id||null}function D(e){return e instanceof HTMLAnchorElement?e.href||null:e.getAttribute("href")}function V(e){if(e.hasAttribute("data-sessionvision-ignore"))return!0;if(e.closest("[data-sessionvision-ignore]"))return!0;if(e instanceof HTMLElement){const t=window.getComputedStyle(e);if("none"===t.display||"hidden"===t.visibility)return!0}return!1}function F(e){const t=R(e);if(["a","button","input","select","textarea","label"].includes(t))return!0;const n=e.getAttribute("role");return!(!n||!["button","link","checkbox","radio","tab"].includes(n))||!!(e.hasAttribute("onclick")||e.hasAttribute("tabindex")||e instanceof HTMLElement&&"true"===e.contentEditable)}function O(){return window.location.href}function X(){return document.referrer||""}function H(){const e=navigator.userAgent,t=[{name:"iOS",pattern:/iPad|iPhone|iPod/},{name:"Android",pattern:/Android/},{name:"Windows",pattern:/Windows NT/},{name:"macOS",pattern:/Mac OS X/},{name:"Linux",pattern:/Linux/},{name:"Chrome OS",pattern:/CrOS/}];for(const n of t)if(n.pattern.test(e))return n.name;return"unknown"}function j(){const e=navigator.userAgent;if(/iPad|tablet|playbook|silk/i.test(e))return"tablet";if(/Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Opera Mini/i.test(e))return"mobile";const t=window.screen?.width||window.innerWidth;return 768>t?"mobile":1024>t?"tablet":"desktop"}function N(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"unknown"}catch{return"unknown"}}function U(){const e=navigator.connection;return e?.effectiveType||null}function z(){const e=function(){const e=navigator.userAgent,t=[{name:"Edge",pattern:/Edg(?:e|A|iOS)?\/(\d+(?:\.\d+)*)/},{name:"Chrome",pattern:/Chrome\/(\d+(?:\.\d+)*)/},{name:"Firefox",pattern:/Firefox\/(\d+(?:\.\d+)*)/},{name:"Safari",pattern:/Version\/(\d+(?:\.\d+)*).*Safari/},{name:"Opera",pattern:/OPR\/(\d+(?:\.\d+)*)/},{name:"IE",pattern:/MSIE (\d+(?:\.\d+)*)|Trident.*rv:(\d+(?:\.\d+)*)/}];for(const n of t){const t=e.match(n.pattern);if(t)return{name:n.name,version:t[1]||t[2]||"unknown"}}return{name:"unknown",version:"unknown"}}();return{$current_url:O(),$referrer:X(),$browser:e.name,$browser_version:e.version,$os:H(),$device_type:j(),$screen_width:window.screen?.width||0,$screen_height:window.screen?.height||0,$viewport_width:window.innerWidth||0,$viewport_height:window.innerHeight||0,$timezone:N(),$locale:navigator.language||"unknown",$connection_type:U(),$lib_version:"0.4.0"}}function P(){const e=a(i);return{...a(o),...e}}let q=null,K=null;function W(e,t={},n={}){if(K?.optOut)return void(K.debug&&console.log("[SessionVision] Tracking disabled (optOut: true)"));if(!e||"string"!=typeof e)return void console.warn("[SessionVision] capture() requires a non-empty event name");const{includeAutoProperties:i=!0}=n,o={event:e,timestamp:Date.now(),properties:{...t,...i?z():{},...P()},anonymousId:T(),userId:A(),sessionId:S()};K?.debug&&console.log("[SessionVision] Event captured:",o),q&&q(o)}function B(){return"undefined"!=typeof CompressionStream&&"undefined"!=typeof ReadableStream}let Y=null,Z=0;function J(e){return new Promise(t=>setTimeout(t,e))}async function G(e){if(!Y)return console.warn("[SessionVision] SDK not initialized"),!1;const t=Y.ingestHost+"/api/v1/ingest/events",n=JSON.stringify(e);let i=n;const o={"Content-Type":"application/json"};if(r=n,B()&&function(e){return new Blob([e]).size}(r)>1024){const e=await async function(e){if(!B())return null;try{const t=(new TextEncoder).encode(e),n=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new CompressionStream("gzip")).getReader(),i=[];for(;;){const{done:e,value:t}=await n.read();if(e)break;i.push(t)}return new Blob(i,{type:"application/gzip"})}catch{return null}}(n);e&&(i=e,o["Content-Type"]="application/json",o["Content-Encoding"]="gzip")}var r;for(let n=0;s.MAX_RETRIES>=n;n++)try{const n=await fetch(t,{method:"POST",headers:o,body:i,keepalive:!0});if(n.ok||202===n.status)return Z=0,Y.debug&&console.log(`[SessionVision] Events sent successfully (${e.events.length} events)`),!0;if(n.status>=500)throw Error("Server error: "+n.status);return Y.debug&&console.warn("[SessionVision] Failed to send events: "+n.status),!1}catch(e){if(s.MAX_RETRIES>n){const e=s.RETRY_DELAYS_MS[n]||4e3;Y.debug&&console.log(`[SessionVision] Retry ${n+1}/${s.MAX_RETRIES} in ${e}ms`),await J(e)}else Z++,Y.debug&&console.warn("[SessionVision] Failed to send events after retries:",e)}return!1}function Q(){return Z>=3}let ee=[],te=null,ne=null,ie=!1;async function oe(){if(ie||0===ee.length||!ne)return;ie=!0;const e=[...ee];ee=[];const t={projectToken:ne.projectToken,events:e};if(!await G(t)&&!Q()){const t=[...e,...ee];ee=t.slice(-10),ne.debug&&t.length>s.MAX_EVENTS&&console.warn(`[SessionVision] Buffer overflow, dropped ${t.length-s.MAX_EVENTS} oldest events`)}ie=!1}let re=!1,se=null;function ce(e={}){const t=O();t!==se&&(se=t,W("$pageview",{$current_url:t,$referrer:X(),$title:document.title||"",...e}),oe())}function le(){setTimeout(()=>{ce()},0)}function ae(e){const t=e.getAttribute("data-sessionvision-id");if(t)return`[data-sessionvision-id="${n=t,n.replace(/"/g,'\\"').replace(/\\/g,"\\\\")}"]`;var n;const i=L(e);return i&&ue(i)?"#"+me(i):function(e){const t=[];let n=e,i=0;for(;n&&5>i;){const e=de(n);t.unshift(e);const o=L(n);if(o&&ue(o))break;if(n===document.body)break;n=n.parentElement,i++}return t.join(" > ")}(e)}function ue(e){try{return 1===document.querySelectorAll("#"+me(e)).length}catch{return!1}}function de(e){const t=R(e),n=L(e);if(n&&ue(n))return"#"+me(n);let i=t;const o=I(e);if(o){const e=o.split(" ").filter(fe).slice(0,2);e.length>0&&(i+=e.map(e=>"."+me(e)).join(""))}const r=function(e){const t=e.parentElement;if(!t)return null;const n=Array.from(t.children).indexOf(e);return 0>n?null:n+1}(e);return null!==r&&function(e,t){const n=e.parentElement;if(!n)return!1;try{return n.querySelectorAll(":scope > "+t).length>1}catch{return!1}}(e,i)&&(i+=`:nth-child(${r})`),i}function fe(e){return!!e&&![/^(mt|mb|ml|mr|mx|my|pt|pb|pl|pr|px|py)-/,/^(w|h|min-w|min-h|max-w|max-h)-/,/^(text|font|bg|border|rounded)-/,/^(flex|grid|block|inline|hidden)$/,/^(col|row)-/,/^(sm|md|lg|xl|2xl):/,/^hover:/,/^[a-z]{1,3}-\d+$/,/^css-[a-z0-9]+$/i,/^_[a-zA-Z0-9]+$/,/^svelte-[a-z0-9]+$/i].some(t=>t.test(e))}function me(e){return e.replace(/([^\w-])/g,"\\$1").replace(/^(\d)/,"\\3$1 ")}const pe=[{name:"credit_card",pattern:/\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}/g,mask:"[CARD XXXX]"},{name:"ssn",pattern:/\b\d{3}-\d{2}-\d{4}\b/g,mask:"[SSN XXX-XX-XXXX]"},{name:"phone_us",pattern:/(?:\+1[\s.-]?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}/g,mask:"[PHONE XXX-XXX-XXXX]"},{name:"email",pattern:/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?:\.[A-Za-z]{2,})?/g,mask:"[EMAIL]"}];function ge(e){if(!e)return e;let t=e;for(const e of pe)e.pattern.lastIndex=0,t=t.replace(e.pattern,e.mask);return t}const he=['input[type="number"]','input[type="range"]','[role="spinbutton"]','[role="slider"]','[class*="quantity"]','[class*="stepper"]','[class*="increment"]','[class*="decrement"]','[class*="plus"]','[class*="minus"]',"video","audio",'[class*="player"]','[class*="volume"]','[class*="seek"]',"canvas"];class ye{constructor(e){this.clicks=[],this.emitTimeout=null,this.threshold=ye.DEFAULT_THRESHOLD,this.windowMs=ye.DEFAULT_WINDOW_MS,this.radiusPx=ye.DEFAULT_RADIUS_PX}recordClick(e,t,n){const i=Date.now();this.clicks.push({timestamp:i,x:e.clientX,y:e.clientY,elementSelector:n.$element_selector||"",element:t,properties:n}),this.clicks=this.clicks.filter(e=>this.windowMs>=i-e.timestamp),this.scheduleEmit()}scheduleEmit(){this.emitTimeout&&clearTimeout(this.emitTimeout),this.emitTimeout=setTimeout(()=>{this.maybeEmitRageClick()},this.windowMs)}maybeEmitRageClick(){if(this.threshold>this.clicks.length)return void(this.clicks=[]);const e=this.clicks.every(e=>e.elementSelector===this.clicks[0].elementSelector),t=this.isClickCluster(this.clicks);(e||t)&&this.emitRageClick(),this.clicks=[]}isClickCluster(e){for(let t=0;e.length>t;t++)for(let n=t+1;e.length>n;n++){const i=e[t].x-e[n].x,o=e[t].y-e[n].y;if(Math.sqrt(i*i+o*o)>this.radiusPx)return!1}return!0}emitRageClick(){const e=this.clicks[this.clicks.length-1],t=e.timestamp-this.clicks[0].timestamp;let n=0,i=0;try{const t=e.element.getBoundingClientRect();n=e.x-t.left,i=e.y-t.top}catch{}W("$rage_click",{...e.properties,$click_count:this.clicks.length,$rage_click_duration_ms:t,$click_x:e.x,$click_y:e.y,$element_x:n,$element_y:i,$click_positions:this.clicks.map(e=>({x:e.x,y:e.y,timestamp:e.timestamp}))})}destroy(){this.emitTimeout&&(clearTimeout(this.emitTimeout),this.emitTimeout=null),this.clicks=[]}}ye.DEFAULT_THRESHOLD=3,ye.DEFAULT_WINDOW_MS=1e3,ye.DEFAULT_RADIUS_PX=30;const we=['input[type="text"]','input[type="password"]','input[type="email"]','input[type="search"]','input[type="tel"]','input[type="url"]',"textarea","select","video","audio"];class Se{constructor(e){this.pendingClick=null,this.timeoutMs=Se.DEFAULT_TIMEOUT_MS}monitorClick(e,t,n){this.cancelPending();const i=Date.now();let o=!1;const r=new MutationObserver(e=>{e.some(e=>this.isMeaningfulMutation(e,t))&&(o=!0,this.cancelPending())});r.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0});const s=setTimeout(()=>{!o&&this.pendingClick&&this.emitDeadClick(this.pendingClick),this.cancelPending()},this.timeoutMs);this.pendingClick={x:e.clientX,y:e.clientY,element:t,properties:n,timestamp:i,observer:r,timeout:s}}cancelPending(){this.pendingClick&&(this.pendingClick.observer.disconnect(),clearTimeout(this.pendingClick.timeout),this.pendingClick=null)}isMeaningfulMutation(e,t){if("attributes"===e.type&&"class"===e.attributeName&&e.target===t)return!1;if("attributes"===e.type&&e.attributeName?.startsWith("data-"))return!1;if("childList"===e.type){const t=["SCRIPT","STYLE","LINK","META"];if(!Array.from(e.addedNodes).some(e=>!t.includes(e.nodeName))&&0===e.removedNodes.length)return!1}return!0}emitDeadClick(e){let t=0,n=0;try{const i=e.element.getBoundingClientRect();t=e.x-i.left,n=e.y-i.top}catch{}W("$dead_click",{...e.properties,$click_x:e.x,$click_y:e.y,$element_x:t,$element_y:n,$wait_duration_ms:Date.now()-e.timestamp,$element_is_interactive:F(e.element)})}destroy(){this.cancelPending()}}Se.DEFAULT_TIMEOUT_MS=1e3;let _e=!1;const ve=new Map;function ke(e){const t=e.querySelectorAll("input, textarea, select");return Array.from(t)}function be(e,t){return ke(t).indexOf(e)}function $e(e){return e instanceof HTMLInputElement?"checkbox"===e.type||"radio"===e.type?e.checked:e.value.length>0:e instanceof HTMLTextAreaElement?e.value.length>0:e instanceof HTMLSelectElement&&(e.selectedIndex>0||0===e.selectedIndex&&""!==e.value)}function Te(e){return e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement}function Ee(e){return e.closest("form")}function xe(e){const t=e.target;if(!t||!Te(t))return;if(V(t))return;const n=Ee(t);if(!n||V(n))return;const i=ae(n);if(ve.has(i))return;const o=ke(n);W("$form_start",{$form_id:n.id||null,$form_name:n.name||null,$form_selector:i,$form_field_count:o.length}),ve.set(i,{startTime:Date.now(),fieldCount:o.length,interactedFields:new Set,filledFields:new Set})}function Ae(e){const t=e.target;if(!t||!Te(t))return;if(V(t))return;const n=Ee(t);if(!n||V(n))return;const i=ae(n),o=ae(t),r=ve.get(i);if(r)r.interactedFields.add(o),$e(t)?r.filledFields.add(o):r.filledFields.delete(o);else{const e=ke(n);W("$form_start",{$form_id:n.id||null,$form_name:n.name||null,$form_selector:i,$form_field_count:e.length}),ve.set(i,{startTime:Date.now(),fieldCount:e.length,interactedFields:new Set([o]),filledFields:new Set($e(t)?[o]:[])})}var s;W("$form_field_change",{$form_selector:i,$field_selector:o,$field_name:t.name||null,$field_type:(s=t,s instanceof HTMLInputElement?s.type||"text":s instanceof HTMLTextAreaElement?"textarea":s instanceof HTMLSelectElement?"select":"unknown"),$field_index:be(t,n),$has_value:$e(t)})}let Ce=!1,Me=!1,Ie=null,Re=null,Le=null;function De(e){Ie=e}function Ve(e){const t=e.target;if(!t||V(t))return;const n=function(e){let t=e;for(;t;){if(F(t))return t;t=t.parentElement}return null}(t)||t;if(V(n))return;const i={$element_tag:R(n),$element_text:ge(M(n)),$element_classes:I(n),$element_id:L(n),$element_selector:ae(n),$element_href:D(n)};W("$click",i),Re&&!function(e){if(e.closest("[data-sessionvision-no-rageclick]"))return!0;for(const t of he)if(e.matches(t)||e.closest(t))return!0;return!1}(n)&&Re.recordClick(e,n,i),Le&&!function(e){if(e.closest("[data-sessionvision-no-deadclick]"))return!0;for(const t of we)if(e.matches(t)||e.closest(t))return!0;return!1}(n)&&Le.monitorClick(e,n,i)}function Fe(e){const t=e.target;if(!(t&&t instanceof HTMLFormElement))return;if(V(t))return;const n=function(e){const t=ae(e),n=ke(e),i=ve.get(t);if(!i){const e=[];for(const t of n)$e(t)&&!V(t)&&e.push(ae(t));return{formSelector:t,formFieldCount:n.length,formFieldsFilled:e,formFieldsInteracted:[],formCompletionRate:n.length>0?e.length/n.length:0,formTimeToSubmitMs:null}}const o=[];for(const e of n)$e(e)&&!V(e)&&o.push(ae(e));const r=n.length>0?o.length/n.length:0;return{formSelector:t,formFieldCount:i.fieldCount,formFieldsFilled:o,formFieldsInteracted:Array.from(i.interactedFields),formCompletionRate:Math.round(100*r)/100,formTimeToSubmitMs:Date.now()-i.startTime}}(t);W("$form_submit",{$form_id:t.id||null,$form_action:t.action||"",$form_method:(t.method||"GET").toUpperCase(),$form_name:t.name||null,$form_selector:n.formSelector,$form_field_count:n.formFieldCount,$form_fields_filled:n.formFieldsFilled,$form_fields_interacted:n.formFieldsInteracted,$form_completion_rate:n.formCompletionRate,$form_time_to_submit_ms:n.formTimeToSubmitMs}),ve.delete(n.formSelector)}function Oe(e){Ie=e,Ie.autocapture.click&&(Ce||(Ce=!0,document.addEventListener("click",Ve,{capture:!0}))),Ie.autocapture.formSubmit&&(Me||(Me=!0,document.addEventListener("submit",Fe,{capture:!0}))),Ie.autocapture.formAbandonment&&(_e||(_e=!0,document.addEventListener("focusin",xe,{capture:!0}),document.addEventListener("change",Ae,{capture:!0}))),Ie.autocapture.rageClick&&(Re=new ye(Ie)),Ie.autocapture.deadClick&&(Le=new Se(Ie))}let Xe=!1,He=null;async function je(e,t){if(Xe)return void console.warn("[SessionVision] SDK already initialized");if(!e||"string"!=typeof e)return void console.error("[SessionVision] init() requires a valid project token");if(He=function(e,t){let n={...r};if(void 0!==t?.autocapture)if("boolean"==typeof t.autocapture)n={pageview:t.autocapture,click:t.autocapture,formSubmit:t.autocapture,rageClick:t.autocapture,deadClick:t.autocapture,formAbandonment:t.autocapture};else if("object"==typeof t.autocapture){const e=t.autocapture;n={pageview:e.pageview??!0,click:e.click??!0,formSubmit:e.formSubmit??!0,rageClick:e.rageClick??!0,deadClick:e.deadClick??!0,formAbandonment:e.formAbandonment??!0}}return{projectToken:e,apiHost:t?.apiHost??"https://cdn.sessionvision.com",ingestHost:t?.ingestHost??"https://app.sessionvision.com",version:t?.version??"latest",debug:t?.debug??false,optOut:t?.optOut??false,maskAllInputs:t?.maskAllInputs??true,autocapture:n,recording:t?.recording}}(e,t),He.debug&&console.log("[SessionVision] Initializing with config:",He),K=He,ne=He,function(e){Y=e}(He),De(He),q=e=>{!function(e){Q()?ne?.debug&&console.warn("[SessionVision] Too many failures, dropping event"):(ee.push(e),s.MAX_EVENTS>ee.length||oe())}(e)},x=(e,t)=>{!function(e,t={}){W("$identify",t,{includeAutoProperties:!0})}(0,{$user_id:e,...t})},T(),S(),He.optOut)return He.debug&&console.log("[SessionVision] Tracking disabled (optOut: true)"),void(Xe=!0);let n=!1;const i=b(He.projectToken);var o;i?.recording?.enabled&&(n=!0,We(i,S())),async function(e,t){const{projectToken:n,debug:i}=e,o=b(n);if(o)return i&&console.log("[SessionVision] Using cached config"),o;if(t?.prefetchRecorder&&"undefined"!=typeof document)try{const t=document.createElement("link");t.rel="prefetch",t.href=function(e){return`${e.apiHost}/v${e.version}/sessionvision-recorder.min.js`}(e),document.head.appendChild(t)}catch{}try{const t=`${e.apiHost}/static/config/${n}`,o=await fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!o.ok)throw Error("Config fetch failed: "+o.status);const r=await o.json();return function(e,t){const n={config:t,timestamp:Date.now()};u(k(e),n)}(n,r),i&&console.log("[SessionVision] Remote config fetched:",r),r}catch(e){i&&console.warn("[SessionVision] Failed to fetch remote config:",e);const t=a(k(n));return t?(i&&console.log("[SessionVision] Using stale cached config"),t.config):null}}(He,{prefetchRecorder:!i&&!1!==He.recording}).then(e=>{e&&(function(e){e.session?.timeoutMinutes&&(w=60*e.session.timeoutMinutes*1e3)}(e),n||We(e,S()))}),te||(te=setInterval(()=>{oe()},s.FLUSH_INTERVAL_MS)),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&oe()}),o=()=>{He&&He.autocapture.pageview&&function(){if(re)return;re=!0,ce();const e=history.pushState;history.pushState=function(...t){const n=e.apply(this,t);return le(),n};const t=history.replaceState;history.replaceState=function(...e){const n=t.apply(this,e);return le(),n},window.addEventListener("popstate",le)}(),He&&Oe(He)},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",o):o(),Xe=!0,He.debug&&console.log("[SessionVision] SDK initialized successfully")}let Ne=null,Ue=!1;const ze=new Map;let Pe=null;if("undefined"!=typeof document&&document.currentScript){const e=document.currentScript.src;e&&(Pe=e.substring(0,e.lastIndexOf("/")+1))}function qe(){return"undefined"==typeof window?null:window.__sessionvision_recorder??null}function Ke(){return new Promise((e,t)=>{const n=qe();if(n)return void e(n);if("undefined"==typeof document)return void t(Error("No document available"));const i=(Pe||`${He?.apiHost}/v${He?.version}/`)+"sessionvision-recorder.min.js",o=document.createElement("script");o.src=i,o.async=!0,o.onload=()=>{const n=qe();if(n){for(const[e,t]of ze)for(const i of t)n.on(e,i);e(n)}else t(Error("Recorder bundle loaded but module not registered"))},o.onerror=()=>{t(Error("Failed to load recorder bundle from "+i))},document.head.appendChild(o)})}async function We(e,t){if(e.recording?.enabled&&!1!==He?.recording)if(function(e,t){if(e>=1)return!0;if(0>=e)return!1;const n=function(e){let t=2166136261;for(let n=0;e.length>n;n++)t^=e.charCodeAt(n),t=16777619*t>>>0;return t>>>0}(t);return 100*e>n%100}(e.recording.sampleRate,t)){Ne=e;try{(await Ke()).initRecorder(He,e),Ue=!0}catch(e){He?.debug&&console.warn("[SessionVision] Failed to load recorder:",e)}}else He?.debug&&console.log("[SessionVision] Session not sampled for recording")}const Be={version:"0.4.0",init(e,t){je(e,t)},capture(e,t){!function(e,t){Xe?W(e,t||{}):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e,t)},identify(e,n){!function(e,n){Xe?function(e,n){if(!e||"string"!=typeof e)return void console.warn("[SessionVision] identify() requires a non-empty user ID string");const i=e.trim();i?(E=i,p(t,i),x&&x(i,n)):console.warn("[SessionVision] identify() requires a non-empty user ID string")}(e,n):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e,n)},reset(){Xe?C():console.warn("[SessionVision] SDK not initialized. Call init() first.")},getDistinctId:()=>A()||T(),register(e){!function(e){Xe?function(e){const t=a(i)||{};u(i,{...t,...e})}(e):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e)},registerOnce(e){!function(e){Xe?function(e){const t={...a(o)||{}};for(const n of Object.keys(e))n in t||(t[n]=e[n]);u(o,t)}(e):console.warn("[SessionVision] SDK not initialized. Call init() first.")}(e)},flushEvents:()=>oe(),on(e,t){!function(e,t){ze.has(e)||ze.set(e,new Set),ze.get(e).add(t);const n=qe();n&&n.on(e,t)}(e,t)},off(e,t){!function(e,t){ze.get(e)?.delete(t);const n=qe();n&&n.off(e,t)}(e,t)},startRecording(){!async function(){if(!Xe||!He)return;if(!1===He.recording)return;const e=Ne||b(He.projectToken);if(e?.recording?.enabled)try{const t=qe()||await Ke();t.isRecorderActive()||(t.initRecorder(He,e),Ue=!0)}catch(e){He.debug&&console.warn("[SessionVision] Failed to start recording:",e)}}()},stopRecording(){!function(){const e=qe();e&&e.stopRecorder(),Ue=!1}()},isRecording:()=>Ue,tagRecording(e){!function(e){const t=qe();t&&t.tagRecording(e)}(e)}};return function(){const e=window.sessionvision;if(!e||!e.__SV){var t,n;if(e?._q&&function(e,t){if(e&&Array.isArray(e))for(const n of e){if(!n||"object"!=typeof n)continue;const{method:e,args:i}=n;if(!e||"string"!=typeof e)continue;const o=t[e];if("function"==typeof o)try{o.apply(t,i||[])}catch(t){console.warn(`[SessionVision] Error replaying queued call ${e}:`,t)}else console.warn("[SessionVision] Unknown method in queue: "+e)}}((t=e._q)&&Array.isArray(t)?t.filter(e=>Array.isArray(e)&&e.length>0).map(e=>({method:e[0]+"",args:e.slice(1)})):[],Be),e?._i){const t=(n=e._i)&&Array.isArray(n)?n.filter(e=>Array.isArray(e)&&e.length>0&&"string"==typeof e[0]).map(e=>({projectToken:e[0],config:e[1]})):[];for(const{projectToken:e,config:n}of t)Be.init(e,n)}Be.__SV=1,window.sessionvision=Be}}(),Be});
|
|
7
7
|
//# sourceMappingURL=sessionvision.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionvision.min.js","sources":["../src/types.ts","../src/utils/storage.ts","../src/utils/uuid.ts","../src/identity/session.ts","../src/core/config.ts","../src/identity/anonymous.ts","../src/identity/identify.ts","../src/utils/dom.ts","../src/capture/properties.ts","../src/capture/event.ts","../src/transport/compress.ts","../src/transport/send.ts","../src/transport/buffer.ts","../src/capture/pageview.ts","../src/utils/selector.ts","../src/utils/pii.ts","../src/capture/rageclick.ts","../src/capture/deadclick.ts","../src/capture/formfields.ts","../src/capture/autocapture.ts","../src/core/init.ts","../src/index.ts","../src/core/queue.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["STORAGE_KEYS","DEFAULT_CONFIG","pageview","click","formSubmit","rageClick","deadClick","formAbandonment","BUFFER_CONFIG","MAX_EVENTS","FLUSH_INTERVAL_MS","MAX_RETRIES","RETRY_DELAYS_MS","isLocalStorageAvailable","testKey","window","localStorage","setItem","removeItem","isSessionStorageAvailable","sessionStorage","getLocalStorage","key","value","getItem","JSON","parse","setLocalStorage","stringify","removeLocalStorage","setSessionStorage","getLocalStorageRaw","setLocalStorageRaw","generateUUID","crypto","randomUUID","getRandomValues","bytes","Uint8Array","hex","i","length","push","toString","padStart","slice","join","formatUUID","replace","c","r","Math","random","isValidUUID","uuid","test","cachedSessionData","sessionTimeoutMs","getSessionId","now","Date","lastActivity","updateSessionActivity","id","stored","getSessionStorage","createNewSession","sessionId","getCacheKey","projectToken","cachedAnonymousId","getAnonymousId","cachedUserId","identifyCallback","getUserId","reset","removeSessionStorage","getElementText","element","maxLength","hasAttribute","textContent","trim","getElementClasses","classList","Array","from","getElementTag","tagName","toLowerCase","getElementId","getElementHref","HTMLAnchorElement","href","getAttribute","shouldIgnoreElement","closest","HTMLElement","style","getComputedStyle","display","visibility","isInteractiveElement","tag","includes","role","contentEditable","getCurrentUrl","location","getReferrer","document","referrer","parseOS","ua","navigator","userAgent","osPatterns","name","pattern","os","parseDeviceType","screenWidth","screen","width","innerWidth","getTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","getConnectionType","connection","effectiveType","getAutomaticProperties","browser","browsers","match","version","parseBrowser","$current_url","$referrer","$browser","$browser_version","$os","$device_type","$screen_width","$screen_height","height","$viewport_width","$viewport_height","innerHeight","$timezone","$locale","language","$connection_type","$lib_version","getRegisteredProperties","props","eventCallback","config","captureEvent","eventName","properties","options","optOut","debug","console","log","warn","includeAutoProperties","event","timestamp","anonymousId","userId","isCompressionSupported","CompressionStream","ReadableStream","consecutiveFailures","sleep","ms","Promise","resolve","setTimeout","async","sendEvents","payload","url","ingestHost","jsonPayload","body","headers","data","Blob","size","getByteSize","compressed","inputBytes","TextEncoder","encode","reader","start","controller","enqueue","close","pipeThrough","getReader","chunks","done","read","type","compressPayload","attempt","response","fetch","method","keepalive","ok","status","events","Error","error","delay","shouldStopRetrying","eventBuffer","flushTimer","isFlushing","flush","eventsToSend","combined","isInitialized","lastUrl","capturePageview","customProperties","$title","title","handleHistoryChange","generateSelector","customId","str","isUniqueId","escapeCssIdentifier","parts","current","depth","part","buildElementPart","unshift","parentElement","buildPathSelector","querySelectorAll","selector","classes","significantClasses","split","filter","isSignificantClass","map","nthChild","parent","index","children","indexOf","getNthChildIndex","baseSelector","needsNthChild","className","some","PII_PATTERNS","mask","maskPII","text","masked","pii","lastIndex","RAGE_CLICK_EXCLUDED_SELECTORS","RageClickDetector","constructor","_config","this","clicks","emitTimeout","threshold","DEFAULT_THRESHOLD","windowMs","DEFAULT_WINDOW_MS","radiusPx","DEFAULT_RADIUS_PX","recordClick","x","clientX","y","clientY","elementSelector","$element_selector","scheduleEmit","clearTimeout","maybeEmitRageClick","sameElement","every","sameArea","isClickCluster","emitRageClick","j","dx","dy","sqrt","lastClick","duration","elementX","elementY","rect","getBoundingClientRect","left","top","$click_count","$rage_click_duration_ms","$click_x","$click_y","$element_x","$element_y","$click_positions","destroy","DEAD_CLICK_EXCLUDED_SELECTORS","DeadClickDetector","pendingClick","timeoutMs","DEFAULT_TIMEOUT_MS","monitorClick","cancelPending","mutationDetected","observer","MutationObserver","mutations","m","isMeaningfulMutation","observe","childList","attributes","characterData","subtree","timeout","emitDeadClick","disconnect","mutation","clickedElement","attributeName","target","startsWith","ignoredNodes","addedNodes","node","nodeName","removedNodes","pending","$wait_duration_ms","$element_is_interactive","isActive","startedForms","Map","getFormFields","form","fields","getFieldIndex","field","fieldHasValue","HTMLInputElement","checked","HTMLTextAreaElement","HTMLSelectElement","selectedIndex","isFormField","getParentForm","handleFocusIn","formSelector","has","$form_id","$form_name","$form_selector","$form_field_count","set","startTime","fieldCount","interactedFields","Set","filledFields","handleChange","fieldSelector","formState","get","add","delete","$field_selector","$field_name","$field_type","$field_index","$has_value","isClickTrackingActive","isFormTrackingActive","rageClickDetector","deadClickDetector","setAutocaptureConfig","cfg","handleClick","getInteractiveParent","$element_tag","$element_text","$element_classes","$element_id","$element_href","matches","shouldExcludeFromRageClick","shouldExcludeFromDeadClick","handleFormSubmit","HTMLFormElement","trackingData","formFieldCount","formFieldsFilled","formFieldsInteracted","formCompletionRate","formTimeToSubmitMs","currentFilledFields","completionRate","round","getFormTrackingData","$form_action","action","$form_method","toUpperCase","$form_fields_filled","$form_fields_interacted","$form_completion_rate","$form_time_to_submit_ms","initAutocapture","autocapture","addEventListener","capture","resolvedConfig","init","userConfig","undefined","userAutocapture","apiHost","maskAllInputs","resolveConfig","setTransportConfig","addToBuffer","traits","captureSystemEvent","$user_id","cached","getCachedConfig","Accept","json","setCachedConfig","staleCache","fetchRemoteConfig","then","remoteConfig","session","timeoutMinutes","applyRemoteConfig","setInterval","visibilityState","callback","originalPushState","history","pushState","args","result","apply","originalReplaceState","replaceState","initPageviewTracking","readyState","sessionvision","coreInit","coreCapture","identify","normalizedUserId","identifyUser","coreIdentify","resetIdentity","getDistinctId","register","existing","registerProperties","coreRegister","registerOnce","merged","Object","keys","registerOnceProperties","coreRegisterOnce","flushEvents","existingInstance","__SV","legacyQueue","initArray","_q","queue","api","isArray","call","fn","replayQueue","item","String","_i","initCalls","bootstrap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessionvision.min.js","sources":["../src/types.ts","../src/utils/storage.ts","../src/utils/uuid.ts","../src/identity/session.ts","../src/core/config.ts","../src/identity/anonymous.ts","../src/identity/identify.ts","../src/utils/dom.ts","../src/capture/properties.ts","../src/capture/event.ts","../src/transport/compress.ts","../src/transport/send.ts","../src/transport/buffer.ts","../src/capture/pageview.ts","../src/utils/selector.ts","../src/utils/pii.ts","../src/capture/rageclick.ts","../src/capture/deadclick.ts","../src/capture/formfields.ts","../src/capture/autocapture.ts","../src/core/init.ts","../src/index.ts","../src/core/queue.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["STORAGE_KEYS","DEFAULT_CONFIG","pageview","click","formSubmit","rageClick","deadClick","formAbandonment","BUFFER_CONFIG","MAX_EVENTS","FLUSH_INTERVAL_MS","MAX_RETRIES","RETRY_DELAYS_MS","isLocalStorageAvailable","testKey","window","localStorage","setItem","removeItem","isSessionStorageAvailable","sessionStorage","getLocalStorage","key","value","getItem","JSON","parse","setLocalStorage","stringify","removeLocalStorage","setSessionStorage","getLocalStorageRaw","setLocalStorageRaw","generateUUID","crypto","randomUUID","getRandomValues","bytes","Uint8Array","hex","i","length","push","toString","padStart","slice","join","formatUUID","replace","c","r","Math","random","isValidUUID","uuid","test","cachedSessionData","sessionTimeoutMs","getSessionId","now","Date","lastActivity","updateSessionActivity","id","stored","getSessionStorage","createNewSession","sessionId","getCacheKey","projectToken","getCachedRemoteConfig","cached","timestamp","config","cachedAnonymousId","getAnonymousId","cachedUserId","identifyCallback","getUserId","reset","removeSessionStorage","getElementText","element","maxLength","hasAttribute","textContent","trim","getElementClasses","classList","Array","from","getElementTag","tagName","toLowerCase","getElementId","getElementHref","HTMLAnchorElement","href","getAttribute","shouldIgnoreElement","closest","HTMLElement","style","getComputedStyle","display","visibility","isInteractiveElement","tag","includes","role","contentEditable","getCurrentUrl","location","getReferrer","document","referrer","parseOS","ua","navigator","userAgent","osPatterns","name","pattern","os","parseDeviceType","screenWidth","screen","width","innerWidth","getTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","getConnectionType","connection","effectiveType","getAutomaticProperties","browser","browsers","match","version","parseBrowser","$current_url","$referrer","$browser","$browser_version","$os","$device_type","$screen_width","$screen_height","height","$viewport_width","$viewport_height","innerHeight","$timezone","$locale","language","$connection_type","$lib_version","getRegisteredProperties","props","eventCallback","captureEvent","eventName","properties","options","optOut","debug","console","log","warn","includeAutoProperties","event","anonymousId","userId","isCompressionSupported","CompressionStream","ReadableStream","consecutiveFailures","sleep","ms","Promise","resolve","setTimeout","async","sendEvents","payload","url","ingestHost","jsonPayload","body","headers","data","Blob","size","getByteSize","compressed","inputBytes","TextEncoder","encode","reader","start","controller","enqueue","close","pipeThrough","getReader","chunks","done","read","type","compressPayload","attempt","response","fetch","method","keepalive","ok","status","events","Error","error","delay","shouldStopRetrying","eventBuffer","flushTimer","isFlushing","flush","eventsToSend","combined","isInitialized","lastUrl","capturePageview","customProperties","$title","title","handleHistoryChange","generateSelector","customId","str","isUniqueId","escapeCssIdentifier","parts","current","depth","part","buildElementPart","unshift","parentElement","buildPathSelector","querySelectorAll","selector","classes","significantClasses","split","filter","isSignificantClass","map","nthChild","parent","index","children","indexOf","getNthChildIndex","baseSelector","needsNthChild","className","some","PII_PATTERNS","mask","maskPII","text","masked","pii","lastIndex","RAGE_CLICK_EXCLUDED_SELECTORS","RageClickDetector","constructor","_config","this","clicks","emitTimeout","threshold","DEFAULT_THRESHOLD","windowMs","DEFAULT_WINDOW_MS","radiusPx","DEFAULT_RADIUS_PX","recordClick","x","clientX","y","clientY","elementSelector","$element_selector","scheduleEmit","clearTimeout","maybeEmitRageClick","sameElement","every","sameArea","isClickCluster","emitRageClick","j","dx","dy","sqrt","lastClick","duration","elementX","elementY","rect","getBoundingClientRect","left","top","$click_count","$rage_click_duration_ms","$click_x","$click_y","$element_x","$element_y","$click_positions","destroy","DEAD_CLICK_EXCLUDED_SELECTORS","DeadClickDetector","pendingClick","timeoutMs","DEFAULT_TIMEOUT_MS","monitorClick","cancelPending","mutationDetected","observer","MutationObserver","mutations","m","isMeaningfulMutation","observe","childList","attributes","characterData","subtree","timeout","emitDeadClick","disconnect","mutation","clickedElement","attributeName","target","startsWith","ignoredNodes","addedNodes","node","nodeName","removedNodes","pending","$wait_duration_ms","$element_is_interactive","isActive","startedForms","Map","getFormFields","form","fields","getFieldIndex","field","fieldHasValue","HTMLInputElement","checked","HTMLTextAreaElement","HTMLSelectElement","selectedIndex","isFormField","getParentForm","handleFocusIn","formSelector","has","$form_id","$form_name","$form_selector","$form_field_count","set","startTime","fieldCount","interactedFields","Set","filledFields","handleChange","fieldSelector","formState","get","add","delete","$field_selector","$field_name","$field_type","$field_index","$has_value","isClickTrackingActive","isFormTrackingActive","rageClickDetector","deadClickDetector","setAutocaptureConfig","cfg","handleClick","getInteractiveParent","$element_tag","$element_text","$element_classes","$element_id","$element_href","matches","shouldExcludeFromRageClick","shouldExcludeFromDeadClick","handleFormSubmit","HTMLFormElement","trackingData","formFieldCount","formFieldsFilled","formFieldsInteracted","formCompletionRate","formTimeToSubmitMs","currentFilledFields","completionRate","round","getFormTrackingData","$form_action","action","$form_method","toUpperCase","$form_fields_filled","$form_fields_interacted","$form_completion_rate","$form_time_to_submit_ms","initAutocapture","autocapture","addEventListener","capture","resolvedConfig","init","userConfig","undefined","userAutocapture","apiHost","maskAllInputs","recording","resolveConfig","setTransportConfig","addToBuffer","traits","captureSystemEvent","$user_id","recorderAlreadyLoading","cachedConfig","callback","enabled","maybeLoadRecorder","prefetchRecorder","link","createElement","rel","resolveRecorderUrl","head","appendChild","Accept","json","setCachedConfig","staleCache","fetchRemoteConfig","then","remoteConfig","session","timeoutMinutes","applyRemoteConfig","setInterval","visibilityState","originalPushState","history","pushState","args","result","apply","originalReplaceState","replaceState","initPageviewTracking","readyState","lastRemoteConfig","recordingActive","eventListeners","cachedScriptBaseUrl","currentScript","src","substring","lastIndexOf","getRecorderModule","__sessionvision_recorder","loadRecorderBundle","reject","existing","script","onload","mod","callbacks","cb","on","onerror","sampleRate","hash","charCodeAt","hashSessionId","shouldRecordSession","initRecorder","sessionvision","coreInit","coreCapture","identify","normalizedUserId","identifyUser","coreIdentify","resetIdentity","getDistinctId","register","registerProperties","coreRegister","registerOnce","merged","Object","keys","registerOnceProperties","coreRegisterOnce","flushEvents","recorder","coreOnEvent","off","coreOffEvent","startRecording","isRecorderActive","coreStartRecording","stopRecording","stopRecorder","coreStopRecording","isRecording","tagRecording","tags","coreTagRecording","existingInstance","__SV","legacyQueue","initArray","_q","queue","api","isArray","call","fn","replayQueue","item","String","_i","initCalls","bootstrap"],"mappings":"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"}
|
|
@@ -7,10 +7,22 @@ import { SessionVisionConfig, ResolvedConfig, RemoteConfig } from '../types';
|
|
|
7
7
|
* Resolve user config with defaults
|
|
8
8
|
*/
|
|
9
9
|
export declare function resolveConfig(projectToken: string, userConfig?: SessionVisionConfig): ResolvedConfig;
|
|
10
|
+
/**
|
|
11
|
+
* Get cached remote config if valid (exported for fast path in init.ts)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCachedRemoteConfig(projectToken: string): RemoteConfig | null;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the recorder bundle URL relative to the SDK's apiHost
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveRecorderUrl(config: ResolvedConfig): string;
|
|
18
|
+
interface FetchRemoteConfigOptions {
|
|
19
|
+
/** Inject <link rel="prefetch"> for the recorder bundle (for first-time visitors with no cache) */
|
|
20
|
+
prefetchRecorder?: boolean;
|
|
21
|
+
}
|
|
10
22
|
/**
|
|
11
23
|
* Fetch remote configuration from server
|
|
12
24
|
*/
|
|
13
|
-
export declare function fetchRemoteConfig(resolvedConfig: ResolvedConfig): Promise<RemoteConfig | null>;
|
|
25
|
+
export declare function fetchRemoteConfig(resolvedConfig: ResolvedConfig, options?: FetchRemoteConfigOptions): Promise<RemoteConfig | null>;
|
|
14
26
|
/**
|
|
15
27
|
* Apply remote config settings
|
|
16
28
|
*/
|
|
@@ -19,3 +31,4 @@ export declare function applyRemoteConfig(remoteConfig: RemoteConfig): void;
|
|
|
19
31
|
* Get default remote config for offline mode
|
|
20
32
|
*/
|
|
21
33
|
export declare function getDefaultRemoteConfig(): RemoteConfig;
|
|
34
|
+
export {};
|
|
@@ -47,6 +47,31 @@ export declare function isSDKInitialized(): boolean;
|
|
|
47
47
|
* Get the current configuration
|
|
48
48
|
*/
|
|
49
49
|
export declare function getConfig(): ResolvedConfig | null;
|
|
50
|
+
/**
|
|
51
|
+
* Manually start recording. Respects remote config — no-op if recording.enabled is false.
|
|
52
|
+
* Bypasses sampling when recording is enabled.
|
|
53
|
+
*/
|
|
54
|
+
export declare function startRecording(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Stop recording for this session
|
|
57
|
+
*/
|
|
58
|
+
export declare function stopRecording(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Check if recording is active
|
|
61
|
+
*/
|
|
62
|
+
export declare function isRecording(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Tag the current recording with custom metadata
|
|
65
|
+
*/
|
|
66
|
+
export declare function tagRecordingFn(tags: Record<string, string>): void;
|
|
67
|
+
/**
|
|
68
|
+
* Subscribe to SDK events
|
|
69
|
+
*/
|
|
70
|
+
export declare function onEvent(event: string, callback: (data?: unknown) => void): void;
|
|
71
|
+
/**
|
|
72
|
+
* Unsubscribe from SDK events
|
|
73
|
+
*/
|
|
74
|
+
export declare function offEvent(event: string, callback: (data?: unknown) => void): void;
|
|
50
75
|
/**
|
|
51
76
|
* Reset for testing
|
|
52
77
|
*/
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chunk manager for recording events
|
|
3
|
+
* Buffers rrweb events and manages chunked uploads
|
|
4
|
+
*/
|
|
5
|
+
import { RecordingEvent, ResolvedConfig } from '../types';
|
|
6
|
+
type EventEmitFn = (event: string, data?: unknown) => void;
|
|
7
|
+
interface ChunkManagerOptions {
|
|
8
|
+
config: ResolvedConfig;
|
|
9
|
+
emit: EventEmitFn;
|
|
10
|
+
}
|
|
11
|
+
export declare class ChunkManager {
|
|
12
|
+
private buffer;
|
|
13
|
+
private bufferSize;
|
|
14
|
+
private chunkNumber;
|
|
15
|
+
private lastFlush;
|
|
16
|
+
private flushTimer;
|
|
17
|
+
private config;
|
|
18
|
+
private emit;
|
|
19
|
+
private tags;
|
|
20
|
+
private chunkStartTime;
|
|
21
|
+
private hasFullSnapshot;
|
|
22
|
+
private started;
|
|
23
|
+
constructor(options: ChunkManagerOptions);
|
|
24
|
+
/**
|
|
25
|
+
* Start the chunk manager flush timer
|
|
26
|
+
*/
|
|
27
|
+
start(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Stop the chunk manager
|
|
30
|
+
*/
|
|
31
|
+
stop(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Add an rrweb event to the buffer
|
|
34
|
+
*/
|
|
35
|
+
addEvent(event: RecordingEvent): void;
|
|
36
|
+
/**
|
|
37
|
+
* Set tags to be sent with the next chunk
|
|
38
|
+
*/
|
|
39
|
+
setTags(tags: Record<string, string>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Check if the buffer should be flushed
|
|
42
|
+
*/
|
|
43
|
+
private shouldFlush;
|
|
44
|
+
/**
|
|
45
|
+
* Flush the buffer — send accumulated events as a chunk
|
|
46
|
+
*/
|
|
47
|
+
flush(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get the current chunk number (for testing)
|
|
50
|
+
*/
|
|
51
|
+
getChunkNumber(): number;
|
|
52
|
+
/**
|
|
53
|
+
* Get the current buffer size in bytes (for testing)
|
|
54
|
+
*/
|
|
55
|
+
getBufferSize(): number;
|
|
56
|
+
private handleVisibilityChange;
|
|
57
|
+
private handleBeforeUnload;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recorder entry point
|
|
3
|
+
* Handles initialization, sampling decision, and lifecycle management
|
|
4
|
+
*/
|
|
5
|
+
import { RemoteConfig, ResolvedConfig } from '../types';
|
|
6
|
+
type EventListener = (data?: unknown) => void;
|
|
7
|
+
export declare function on(event: string, callback: EventListener): void;
|
|
8
|
+
export declare function off(event: string, callback: EventListener): void;
|
|
9
|
+
/**
|
|
10
|
+
* Deterministic sampling based on session ID
|
|
11
|
+
* Same session always gets same result (important for multi-page sessions)
|
|
12
|
+
*/
|
|
13
|
+
export declare function shouldRecordSession(sampleRate: number, sessionId: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the recorder — called after the recorder bundle is loaded
|
|
16
|
+
*/
|
|
17
|
+
export declare function initRecorder(config: ResolvedConfig, _remoteConfig: RemoteConfig): void;
|
|
18
|
+
/**
|
|
19
|
+
* Stop the recorder
|
|
20
|
+
*/
|
|
21
|
+
export declare function stopRecorder(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Check if the recorder is currently active
|
|
24
|
+
*/
|
|
25
|
+
export declare function isRecorderActive(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Tag the current recording with custom metadata
|
|
28
|
+
*/
|
|
29
|
+
export declare function tagRecording(tags: Record<string, string>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Reset recorder state (for testing)
|
|
32
|
+
*/
|
|
33
|
+
export declare function _resetRecorder(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Recorder module interface (exposed via global for script-based loading)
|
|
36
|
+
*/
|
|
37
|
+
export interface RecorderModule {
|
|
38
|
+
initRecorder: typeof initRecorder;
|
|
39
|
+
stopRecorder: typeof stopRecorder;
|
|
40
|
+
isRecorderActive: typeof isRecorderActive;
|
|
41
|
+
tagRecording: typeof tagRecording;
|
|
42
|
+
shouldRecordSession: typeof shouldRecordSession;
|
|
43
|
+
on: typeof on;
|
|
44
|
+
off: typeof off;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy & masking bridge for session recordings
|
|
3
|
+
* Bridges rrweb's masking callbacks with the SDK's existing PII detection
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Mask text content for rrweb's maskTextFn callback
|
|
7
|
+
*/
|
|
8
|
+
export declare function maskTextForRecording(text: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Mask input values for rrweb's maskInputFn callback
|
|
11
|
+
* Respects data-sessionvision-unmask attribute
|
|
12
|
+
*/
|
|
13
|
+
export declare function maskInputForRecording(text: string, element: HTMLElement): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rrweb integration module
|
|
3
|
+
* Wraps rrweb with configured capture options and handles events
|
|
4
|
+
*/
|
|
5
|
+
import { RecordingEvent, ResolvedConfig } from '../types';
|
|
6
|
+
type EventCallback = (event: RecordingEvent) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Start rrweb recording
|
|
9
|
+
*/
|
|
10
|
+
export declare function startRrwebRecording(config: ResolvedConfig, onEvent: EventCallback): void;
|
|
11
|
+
/**
|
|
12
|
+
* Stop rrweb recording
|
|
13
|
+
*/
|
|
14
|
+
export declare function stopRrwebRecording(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Check if rrweb is currently recording
|
|
17
|
+
*/
|
|
18
|
+
export declare function isRrwebRecording(): boolean;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload manager for recording chunks
|
|
3
|
+
* Sends recording chunks to the ingest API as $recording events
|
|
4
|
+
*/
|
|
5
|
+
import { RecordingEvent, ResolvedConfig } from '../types';
|
|
6
|
+
interface ChunkPayload {
|
|
7
|
+
chunkNumber: number;
|
|
8
|
+
startTime: number;
|
|
9
|
+
endTime: number;
|
|
10
|
+
events: RecordingEvent[];
|
|
11
|
+
fullSnapshotIncluded: boolean;
|
|
12
|
+
tags?: Record<string, string>;
|
|
13
|
+
isFirstChunk: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Send a recording chunk to the ingest API
|
|
17
|
+
* Uses the same endpoint as regular events with the $recording event name
|
|
18
|
+
*/
|
|
19
|
+
export declare function sendRecordingChunk(config: ResolvedConfig, chunk: ChunkPayload): Promise<boolean>;
|
|
20
|
+
export {};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -36,6 +36,10 @@ export interface SessionVisionConfig {
|
|
|
36
36
|
maskAllInputs?: boolean;
|
|
37
37
|
/** Enable/disable auto-capture (default: true) */
|
|
38
38
|
autocapture?: boolean | AutocaptureConfig;
|
|
39
|
+
/** Override recording behavior. Set false to force-disable regardless of remote config. */
|
|
40
|
+
recording?: false | {
|
|
41
|
+
maskAllInputs?: boolean;
|
|
42
|
+
};
|
|
39
43
|
}
|
|
40
44
|
/**
|
|
41
45
|
* Internal resolved configuration
|
|
@@ -56,6 +60,9 @@ export interface ResolvedConfig {
|
|
|
56
60
|
deadClick: boolean;
|
|
57
61
|
formAbandonment: boolean;
|
|
58
62
|
};
|
|
63
|
+
recording?: false | {
|
|
64
|
+
maskAllInputs?: boolean;
|
|
65
|
+
};
|
|
59
66
|
}
|
|
60
67
|
/**
|
|
61
68
|
* Remote configuration fetched from server
|
|
@@ -264,6 +271,18 @@ export interface SessionVisionAPI {
|
|
|
264
271
|
registerOnce(properties: EventProperties): void;
|
|
265
272
|
/** Manually flush the event buffer */
|
|
266
273
|
flushEvents(): Promise<void>;
|
|
274
|
+
/** Subscribe to SDK events (e.g., 'recording:error', 'recording:quota_exceeded') */
|
|
275
|
+
on(event: string, callback: (data?: unknown) => void): void;
|
|
276
|
+
/** Unsubscribe from SDK events */
|
|
277
|
+
off(event: string, callback: (data?: unknown) => void): void;
|
|
278
|
+
/** Manually start recording. Respects remote config — no-op if recording.enabled is false. Bypasses sampling when recording is enabled. */
|
|
279
|
+
startRecording(): void;
|
|
280
|
+
/** Stop recording for this session */
|
|
281
|
+
stopRecording(): void;
|
|
282
|
+
/** Check if recording is active */
|
|
283
|
+
isRecording(): boolean;
|
|
284
|
+
/** Tag the current recording with custom metadata */
|
|
285
|
+
tagRecording(tags: Record<string, string>): void;
|
|
267
286
|
/** SDK version */
|
|
268
287
|
version: string;
|
|
269
288
|
/** Internal: queued method calls before SDK loads */
|
|
@@ -273,6 +292,23 @@ export interface SessionVisionAPI {
|
|
|
273
292
|
/** Internal: SDK version marker */
|
|
274
293
|
__SV?: number;
|
|
275
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Recording event type (rrweb event)
|
|
297
|
+
*/
|
|
298
|
+
export interface RecordingEvent {
|
|
299
|
+
type: number;
|
|
300
|
+
data: unknown;
|
|
301
|
+
timestamp: number;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Recording chunk configuration
|
|
305
|
+
*/
|
|
306
|
+
export declare const RECORDING_CONFIG: {
|
|
307
|
+
readonly FLUSH_INTERVAL_MS: 5000;
|
|
308
|
+
readonly MAX_BUFFER_SIZE_BYTES: number;
|
|
309
|
+
readonly FULL_SNAPSHOT_INTERVAL_MS: number;
|
|
310
|
+
readonly RETRY_DELAY_MS: 2000;
|
|
311
|
+
};
|
|
276
312
|
/**
|
|
277
313
|
* Storage key constants
|
|
278
314
|
*/
|
|
@@ -302,6 +338,6 @@ export declare const BUFFER_CONFIG: {
|
|
|
302
338
|
readonly RETRY_DELAYS_MS: readonly [1000, 2000, 4000];
|
|
303
339
|
};
|
|
304
340
|
/**
|
|
305
|
-
* Config cache TTL in milliseconds (
|
|
341
|
+
* Config cache TTL in milliseconds (4 hours)
|
|
306
342
|
*/
|
|
307
343
|
export declare const CONFIG_CACHE_TTL_MS: number;
|