@kryptonhq/analytics 0.1.7 → 0.1.9
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/browser.global.js +4 -4
- package/dist/index.d.mts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +2 -45
- package/dist/index.mjs +2 -47
- package/package.json +2 -5
package/dist/browser.global.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var KryptonAnalytics=(()=>{var Z=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var be=Object.prototype.hasOwnProperty;var Ce=(e,t)=>{for(var r in t)Z(e,r,{get:t[r],enumerable:!0})},xe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Se(t))!be.call(e,i)&&i!==r&&Z(e,i,{get:()=>t[i],enumerable:!(n=ke(t,i))||n.enumerable});return e};var Ie=e=>xe(Z({},"__esModule",{value:!0}),e);var at={};Ce(at,{Krypton:()=>q,default:()=>it,init:()=>ye});var v;(function(e){e[e.Document=0]="Document",e[e.DocumentType=1]="DocumentType",e[e.Element=2]="Element",e[e.Text=3]="Text",e[e.CDATA=4]="CDATA",e[e.Comment=5]="Comment"})(v||(v={}));function Te(e){return e.nodeType===e.ELEMENT_NODE}function Ee(e){var t=e?.host;return t?.shadowRoot===e}function ee(e){return Object.prototype.toString.call(e)==="[object ShadowRoot]"}function Le(e){return e.includes(" background-clip: text;")&&!e.includes(" -webkit-background-clip: text;")&&(e=e.replace(" background-clip: text;"," -webkit-background-clip: text; background-clip: text;")),e}function te(e){try{var t=e.rules||e.cssRules;return t?Le(Array.from(t).map(Re).join("")):null}catch{return null}}function Re(e){var t=e.cssText;if(Ne(e))try{t=te(e.styleSheet)||t}catch{}return t}function Ne(e){return"styleSheet"in e}var _e=(function(){function e(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}return e.prototype.getId=function(t){var r;if(!t)return-1;var n=(r=this.getMeta(t))===null||r===void 0?void 0:r.id;return n??-1},e.prototype.getNode=function(t){return this.idNodeMap.get(t)||null},e.prototype.getIds=function(){return Array.from(this.idNodeMap.keys())},e.prototype.getMeta=function(t){return this.nodeMetaMap.get(t)||null},e.prototype.removeNodeFromMap=function(t){var r=this,n=this.getId(t);this.idNodeMap.delete(n),t.childNodes&&t.childNodes.forEach(function(i){return r.removeNodeFromMap(i)})},e.prototype.has=function(t){return this.idNodeMap.has(t)},e.prototype.hasNode=function(t){return this.nodeMetaMap.has(t)},e.prototype.add=function(t,r){var n=r.id;this.idNodeMap.set(n,t),this.nodeMetaMap.set(t,r)},e.prototype.replace=function(t,r){var n=this.getNode(t);if(n){var i=this.nodeMetaMap.get(n);i&&this.nodeMetaMap.set(r,i)}this.idNodeMap.set(t,r)},e.prototype.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},e})();function Ae(e){var t=e.maskInputOptions,r=e.tagName,n=e.type,i=e.value,a=e.maskInputFn,c=i||"";return(t[r.toLowerCase()]||t[n])&&(a?c=a(c):c="*".repeat(c.length)),c}var le="__rrweb_original__";function Me(e){var t=e.getContext("2d");if(!t)return!0;for(var r=50,n=0;n<e.width;n+=r)for(var i=0;i<e.height;i+=r){var a=t.getImageData,c=le in a?a[le]:a,u=new Uint32Array(c.call(t,n,i,Math.min(r,e.width-n),Math.min(r,e.height-i)).data.buffer);if(u.some(function(o){return o!==0}))return!1}return!0}var Oe=1,Pe=new RegExp("[^a-z0-9-_:]"),ue=-2;function De(){return Oe++}function Fe(e){if(e instanceof HTMLFormElement)return"form";var t=e.tagName.toLowerCase().trim();return Pe.test(t)?"div":t}function He(e){return e.cssRules?Array.from(e.cssRules).map(function(t){return t.cssText||""}).join(""):""}function Ue(e){var t="";return e.indexOf("//")>-1?t=e.split("/").slice(0,3).join("/"):t=e.split("/")[0],t=t.split("?")[0],t}var z,fe,We=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,Be=/^(?!www\.|(?:http|ftp)s?:\/\/|[A-Za-z]:\\|\/\/|#).*/,Ke=/^(data:)([^,]*),(.*)/i;function G(e,t){return(e||"").replace(We,function(r,n,i,a,c,u){var o=i||c||u,f=n||a||"";if(!o)return r;if(!Be.test(o)||Ke.test(o))return"url(".concat(f).concat(o).concat(f,")");if(o[0]==="/")return"url(".concat(f).concat(Ue(t)+o).concat(f,")");var l=t.split("/"),p=o.split("/");l.pop();for(var b=0,w=p;b<w.length;b++){var k=w[b];k!=="."&&(k===".."?l.pop():l.push(k))}return"url(".concat(f).concat(l.join("/")).concat(f,")")})}var ze=/^[^ \t\n\r\u000c]+/,$e=/^[, \t\n\r\u000c]+/;function qe(e,t){if(t.trim()==="")return t;var r=0;function n(f){var l,p=f.exec(t.substring(r));return p?(l=p[0],r+=l.length,l):""}for(var i=[];n($e),!(r>=t.length);){var a=n(ze);if(a.slice(-1)===",")a=$(e,a.substring(0,a.length-1)),i.push(a);else{var c="";a=$(e,a);for(var u=!1;;){var o=t.charAt(r);if(o===""){i.push((a+c).trim());break}else if(u)o===")"&&(u=!1);else if(o===","){r+=1,i.push((a+c).trim());break}else o==="("&&(u=!0);c+=o,r+=1}}}return i.join(", ")}function $(e,t){if(!t||t.trim()==="")return t;var r=e.createElement("a");return r.href=t,r.href}function je(e){return!!(e.tagName==="svg"||e.ownerSVGElement)}function ne(){var e=document.createElement("a");return e.href="",e.href}function Qe(e,t,r,n){return r==="src"||r==="href"&&n&&!(t==="use"&&n[0]==="#")||r==="xlink:href"&&n&&n[0]!=="#"||r==="background"&&n&&(t==="table"||t==="td"||t==="th")?$(e,n):r==="srcset"&&n?qe(e,n):r==="style"&&n?G(n,ne()):t==="object"&&r==="data"&&n?$(e,n):n}function Ge(e,t,r){if(typeof t=="string"){if(e.classList.contains(t))return!0}else for(var n=e.classList.length;n--;){var i=e.classList[n];if(t.test(i))return!0}return r?e.matches(r):!1}function re(e,t,r){if(!e)return!1;if(e.nodeType!==e.ELEMENT_NODE)return r?re(e.parentNode,t,r):!1;for(var n=e.classList.length;n--;){var i=e.classList[n];if(t.test(i))return!0}return r?re(e.parentNode,t,r):!1}function Je(e,t,r){var n=e.nodeType===e.ELEMENT_NODE?e:e.parentElement;if(n===null)return!1;if(typeof t=="string"){if(n.classList.contains(t)||n.closest(".".concat(t)))return!0}else if(re(n,t,!0))return!0;return!!(r&&(n.matches(r)||n.closest(r)))}function Ve(e,t,r){var n=e.contentWindow;if(n){var i=!1,a;try{a=n.document.readyState}catch{return}if(a!=="complete"){var c=setTimeout(function(){i||(t(),i=!0)},r);e.addEventListener("load",function(){clearTimeout(c),i=!0,t()});return}var u="about:blank";if(n.location.href!==u||e.src===u||e.src==="")return setTimeout(t,0),e.addEventListener("load",t);e.addEventListener("load",t)}}function Ye(e,t,r){var n=!1,i;try{i=e.sheet}catch{return}if(!i){var a=setTimeout(function(){n||(t(),n=!0)},r);e.addEventListener("load",function(){clearTimeout(a),n=!0,t()})}}function Xe(e,t){var r=t.doc,n=t.mirror,i=t.blockClass,a=t.blockSelector,c=t.maskTextClass,u=t.maskTextSelector,o=t.inlineStylesheet,f=t.maskInputOptions,l=f===void 0?{}:f,p=t.maskTextFn,b=t.maskInputFn,w=t.dataURLOptions,k=w===void 0?{}:w,x=t.inlineImages,I=t.recordCanvas,T=t.keepIframeSrcFn,h=t.newlyAddedElement,s=h===void 0?!1:h,y=Ze(r,n);switch(e.nodeType){case e.DOCUMENT_NODE:return e.compatMode!=="CSS1Compat"?{type:v.Document,childNodes:[],compatMode:e.compatMode}:{type:v.Document,childNodes:[]};case e.DOCUMENT_TYPE_NODE:return{type:v.DocumentType,name:e.name,publicId:e.publicId,systemId:e.systemId,rootId:y};case e.ELEMENT_NODE:return tt(e,{doc:r,blockClass:i,blockSelector:a,inlineStylesheet:o,maskInputOptions:l,maskInputFn:b,dataURLOptions:k,inlineImages:x,recordCanvas:I,keepIframeSrcFn:T,newlyAddedElement:s,rootId:y});case e.TEXT_NODE:return et(e,{maskTextClass:c,maskTextSelector:u,maskTextFn:p,rootId:y});case e.CDATA_SECTION_NODE:return{type:v.CDATA,textContent:"",rootId:y};case e.COMMENT_NODE:return{type:v.Comment,textContent:e.textContent||"",rootId:y};default:return!1}}function Ze(e,t){if(t.hasNode(e)){var r=t.getId(e);return r===1?void 0:r}}function et(e,t){var r,n=t.maskTextClass,i=t.maskTextSelector,a=t.maskTextFn,c=t.rootId,u=e.parentNode&&e.parentNode.tagName,o=e.textContent,f=u==="STYLE"?!0:void 0,l=u==="SCRIPT"?!0:void 0;if(f&&o){try{e.nextSibling||e.previousSibling||!((r=e.parentNode.sheet)===null||r===void 0)&&r.cssRules&&(o=He(e.parentNode.sheet))}catch(p){console.warn("Cannot get CSS styles from text's parentNode. Error: ".concat(p),e)}o=G(o,ne())}return l&&(o="SCRIPT_PLACEHOLDER"),!f&&!l&&o&&Je(e,n,i)&&(o=a?a(o):o.replace(/[\S]/g,"*")),{type:v.Text,textContent:o||"",isStyle:f,rootId:c}}function tt(e,t){for(var r=t.doc,n=t.blockClass,i=t.blockSelector,a=t.inlineStylesheet,c=t.maskInputOptions,u=c===void 0?{}:c,o=t.maskInputFn,f=t.dataURLOptions,l=f===void 0?{}:f,p=t.inlineImages,b=t.recordCanvas,w=t.keepIframeSrcFn,k=t.newlyAddedElement,x=k===void 0?!1:k,I=t.rootId,T=Ge(e,n,i),h=Fe(e),s={},y=e.attributes.length,M=0;M<y;M++){var E=e.attributes[M];s[E.name]=Qe(r,h,E.name,E.value)}if(h==="link"&&a){var C=Array.from(r.styleSheets).find(function(R){return R.href===e.href}),m=null;C&&(m=te(C)),m&&(delete s.rel,delete s.href,s._cssText=G(m,C.href))}if(h==="style"&&e.sheet&&!(e.innerText||e.textContent||"").trim().length){var m=te(e.sheet);m&&(s._cssText=G(m,ne()))}if(h==="input"||h==="textarea"||h==="select"){var F=e.value,N=e.checked;s.type!=="radio"&&s.type!=="checkbox"&&s.type!=="submit"&&s.type!=="button"&&F?s.value=Ae({type:s.type,tagName:h,value:F,maskInputOptions:u,maskInputFn:o}):N&&(s.checked=N)}if(h==="option"&&(e.selected&&!u.select?s.selected=!0:delete s.selected),h==="canvas"&&b){if(e.__context==="2d")Me(e)||(s.rr_dataURL=e.toDataURL(l.type,l.quality));else if(!("__context"in e)){var L=e.toDataURL(l.type,l.quality),O=document.createElement("canvas");O.width=e.width,O.height=e.height;var P=O.toDataURL(l.type,l.quality);L!==P&&(s.rr_dataURL=L)}}if(h==="img"&&p){z||(z=r.createElement("canvas"),fe=z.getContext("2d"));var S=e,_=S.crossOrigin;S.crossOrigin="anonymous";var D=function(){try{z.width=S.naturalWidth,z.height=S.naturalHeight,fe.drawImage(S,0,0),s.rr_dataURL=z.toDataURL(l.type,l.quality)}catch(R){console.warn("Cannot inline img src=".concat(S.currentSrc,"! Error: ").concat(R))}_?s.crossOrigin=_:S.removeAttribute("crossorigin")};S.complete&&S.naturalWidth!==0?D():S.onload=D}if((h==="audio"||h==="video")&&(s.rr_mediaState=e.paused?"paused":"played",s.rr_mediaCurrentTime=e.currentTime),x||(e.scrollLeft&&(s.rr_scrollLeft=e.scrollLeft),e.scrollTop&&(s.rr_scrollTop=e.scrollTop)),T){var U=e.getBoundingClientRect(),W=U.width,A=U.height;s={class:s.class,rr_width:"".concat(W,"px"),rr_height:"".concat(A,"px")}}return h==="iframe"&&!w(s.src)&&(e.contentDocument||(s.rr_src=s.src),delete s.src),{type:v.Element,tagName:h,attributes:s,childNodes:[],isSVG:je(e)||void 0,needBlock:T,rootId:I}}function d(e){return e===void 0?"":e.toLowerCase()}function rt(e,t){if(t.comment&&e.type===v.Comment)return!0;if(e.type===v.Element){if(t.script&&(e.tagName==="script"||e.tagName==="link"&&e.attributes.rel==="preload"&&e.attributes.as==="script"||e.tagName==="link"&&e.attributes.rel==="prefetch"&&typeof e.attributes.href=="string"&&e.attributes.href.endsWith(".js")))return!0;if(t.headFavicon&&(e.tagName==="link"&&e.attributes.rel==="shortcut icon"||e.tagName==="meta"&&(d(e.attributes.name).match(/^msapplication-tile(image|color)$/)||d(e.attributes.name)==="application-name"||d(e.attributes.rel)==="icon"||d(e.attributes.rel)==="apple-touch-icon"||d(e.attributes.rel)==="shortcut icon")))return!0;if(e.tagName==="meta"){if(t.headMetaDescKeywords&&d(e.attributes.name).match(/^description|keywords$/))return!0;if(t.headMetaSocial&&(d(e.attributes.property).match(/^(og|twitter|fb):/)||d(e.attributes.name).match(/^(og|twitter):/)||d(e.attributes.name)==="pinterest"))return!0;if(t.headMetaRobots&&(d(e.attributes.name)==="robots"||d(e.attributes.name)==="googlebot"||d(e.attributes.name)==="bingbot"))return!0;if(t.headMetaHttpEquiv&&e.attributes["http-equiv"]!==void 0)return!0;if(t.headMetaAuthorship&&(d(e.attributes.name)==="author"||d(e.attributes.name)==="generator"||d(e.attributes.name)==="framework"||d(e.attributes.name)==="publisher"||d(e.attributes.name)==="progid"||d(e.attributes.property).match(/^article:/)||d(e.attributes.property).match(/^product:/)))return!0;if(t.headMetaVerification&&(d(e.attributes.name)==="google-site-verification"||d(e.attributes.name)==="yandex-verification"||d(e.attributes.name)==="csrf-token"||d(e.attributes.name)==="p:domain_verify"||d(e.attributes.name)==="verify-v1"||d(e.attributes.name)==="verification"||d(e.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function Q(e,t){var r=t.doc,n=t.mirror,i=t.blockClass,a=t.blockSelector,c=t.maskTextClass,u=t.maskTextSelector,o=t.skipChild,f=o===void 0?!1:o,l=t.inlineStylesheet,p=l===void 0?!0:l,b=t.maskInputOptions,w=b===void 0?{}:b,k=t.maskTextFn,x=t.maskInputFn,I=t.slimDOMOptions,T=t.dataURLOptions,h=T===void 0?{}:T,s=t.inlineImages,y=s===void 0?!1:s,M=t.recordCanvas,E=M===void 0?!1:M,C=t.onSerialize,m=t.onIframeLoad,F=t.iframeLoadTimeout,N=F===void 0?5e3:F,L=t.onStylesheetLoad,O=t.stylesheetLoadTimeout,P=O===void 0?5e3:O,S=t.keepIframeSrcFn,_=S===void 0?function(){return!1}:S,D=t.newlyAddedElement,U=D===void 0?!1:D,W=t.preserveWhiteSpace,A=W===void 0?!0:W,R=Xe(e,{doc:r,mirror:n,blockClass:i,blockSelector:a,maskTextClass:c,maskTextSelector:u,inlineStylesheet:p,maskInputOptions:w,maskTextFn:k,maskInputFn:x,dataURLOptions:h,inlineImages:y,recordCanvas:E,keepIframeSrcFn:_,newlyAddedElement:U});if(!R)return console.warn(e,"not serialized"),null;var j;n.hasNode(e)?j=n.getId(e):rt(R,I)||!A&&R.type===v.Text&&!R.isStyle&&!R.textContent.replace(/^\s+|\s+$/gm,"").length?j=ue:j=De();var g=Object.assign(R,{id:j});if(n.add(e,g),j===ue)return null;C&&C(e);var J=!f;if(g.type===v.Element){J=J&&!g.needBlock,delete g.needBlock;var ie=e.shadowRoot;ie&&ee(ie)&&(g.isShadowHost=!0)}if((g.type===v.Document||g.type===v.Element)&&J){I.headWhitespace&&g.type===v.Element&&g.tagName==="head"&&(A=!1);for(var ae={doc:r,mirror:n,blockClass:i,blockSelector:a,maskTextClass:c,maskTextSelector:u,skipChild:f,inlineStylesheet:p,maskInputOptions:w,maskTextFn:k,maskInputFn:x,slimDOMOptions:I,dataURLOptions:h,inlineImages:y,recordCanvas:E,preserveWhiteSpace:A,onSerialize:C,onIframeLoad:m,iframeLoadTimeout:N,onStylesheetLoad:L,stylesheetLoadTimeout:P,keepIframeSrcFn:_},V=0,oe=Array.from(e.childNodes);V<oe.length;V++){var Y=oe[V],B=Q(Y,ae);B&&g.childNodes.push(B)}if(Te(e)&&e.shadowRoot)for(var X=0,se=Array.from(e.shadowRoot.childNodes);X<se.length;X++){var Y=se[X],B=Q(Y,ae);B&&(ee(e.shadowRoot)&&(B.isShadow=!0),g.childNodes.push(B))}}return e.parentNode&&Ee(e.parentNode)&&ee(e.parentNode)&&(g.isShadow=!0),g.type===v.Element&&g.tagName==="iframe"&&Ve(e,function(){var K=e.contentDocument;if(K&&m){var ce=Q(K,{doc:K,mirror:n,blockClass:i,blockSelector:a,maskTextClass:c,maskTextSelector:u,skipChild:!1,inlineStylesheet:p,maskInputOptions:w,maskTextFn:k,maskInputFn:x,slimDOMOptions:I,dataURLOptions:h,inlineImages:y,recordCanvas:E,preserveWhiteSpace:A,onSerialize:C,onIframeLoad:m,iframeLoadTimeout:N,onStylesheetLoad:L,stylesheetLoadTimeout:P,keepIframeSrcFn:_});ce&&m(e,ce)}},N),g.type===v.Element&&g.tagName==="link"&&g.attributes.rel==="stylesheet"&&Ye(e,function(){if(L){var K=Q(e,{doc:r,mirror:n,blockClass:i,blockSelector:a,maskTextClass:c,maskTextSelector:u,skipChild:!1,inlineStylesheet:p,maskInputOptions:w,maskTextFn:k,maskInputFn:x,slimDOMOptions:I,dataURLOptions:h,inlineImages:y,recordCanvas:E,preserveWhiteSpace:A,onSerialize:C,onIframeLoad:m,iframeLoadTimeout:N,onStylesheetLoad:L,stylesheetLoadTimeout:P,keepIframeSrcFn:_});K&&L(e,K)}},P),g}function de(e,t){var r=t||{},n=r.mirror,i=n===void 0?new _e:n,a=r.blockClass,c=a===void 0?"rr-block":a,u=r.blockSelector,o=u===void 0?null:u,f=r.maskTextClass,l=f===void 0?"rr-mask":f,p=r.maskTextSelector,b=p===void 0?null:p,w=r.inlineStylesheet,k=w===void 0?!0:w,x=r.inlineImages,I=x===void 0?!1:x,T=r.recordCanvas,h=T===void 0?!1:T,s=r.maskAllInputs,y=s===void 0?!1:s,M=r.maskTextFn,E=r.maskInputFn,C=r.slimDOM,m=C===void 0?!1:C,F=r.dataURLOptions,N=r.preserveWhiteSpace,L=r.onSerialize,O=r.onIframeLoad,P=r.iframeLoadTimeout,S=r.onStylesheetLoad,_=r.stylesheetLoadTimeout,D=r.keepIframeSrcFn,U=D===void 0?function(){return!1}:D,W=y===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:y===!1?{password:!0}:y,A=m===!0||m==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:m==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:m===!1?{}:m;return Q(e,{doc:e,mirror:i,blockClass:c,blockSelector:o,maskTextClass:l,maskTextSelector:b,skipChild:!1,inlineStylesheet:k,maskInputOptions:W,maskTextFn:M,maskInputFn:E,slimDOMOptions:A,dataURLOptions:F,inlineImages:I,recordCanvas:h,preserveWhiteSpace:N,onSerialize:L,onIframeLoad:O,iframeLoadTimeout:P,onStylesheetLoad:S,stylesheetLoadTimeout:_,keepIframeSrcFn:U,newlyAddedElement:!1})}var nt=/([^\\]):hover/,st=new RegExp(nt.source,"g");function H(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function he(){let e="_krypton_sid";try{if(typeof sessionStorage<"u"){let t=sessionStorage.getItem(e);return t||(t=H(),sessionStorage.setItem(e,t)),t}}catch{}return H()}function pe(){let e="_krypton_did";try{if(typeof localStorage<"u"){let t=localStorage.getItem(e);return t||(t=H(),localStorage.setItem(e,t)),t}}catch{}return H()}function me(){if(typeof window>"u")return{};let e=new URLSearchParams(window.location.search),t={};for(let r of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let n=e.get(r);n&&(t[r]=n)}return t}function ge(){if(typeof window>"u")return"unknown";let e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"}function ve(e){if(e.id)return`#${e.id}`;let t=[],r=e;for(;r&&r!==document.body;){let n=r.tagName.toLowerCase();if(r.id){t.unshift(`#${r.id}`);break}if(r.className&&typeof r.className=="string"){let i=r.className.trim().split(/\s+/).slice(0,2).join(".");i&&(n+=`.${i}`)}t.unshift(n),r=r.parentElement}return t.join(" > ")}var q=class{constructor(t){this.eventQueue=[];this.heatmapQueue=[];this.flushTimer=null;this.initialized=!1;this.lastSnapshotUrl=null;this.heatmapSetup=!1;this.serverConfig=null;this.configFetched=!1;this.logPrefix="[Krypton SDK]";this.config={autoPageview:!0,heatmap:!1,consentRequired:!1,showConsentBanner:!1,consentCategories:{},flushInterval:5e3,batchSize:20,debug:!1,disableConfigCache:!1,...t},this.distinctId=H(),this.sessionId=H(),this.consent=this.resolveInitialConsent(),this.canTrackAnalytics()&&this.promotePersistentIds(),this.init()}init(){this.initialized||(this.initialized=!0,this.fetchConfig().finally(()=>{try{this.setupTracking()}catch(t){this.warn("setupTracking failed",t)}try{this.config.consentRequired&&this.config.showConsentBanner&&!this.hasStoredConsent()?(this.debug("showing consent banner automatically",{consentRequired:this.config.consentRequired,showConsentBanner:this.config.showConsentBanner}),this.showConsentBannerWhenReady()):this.debug("skipping consent banner",{consentRequired:this.config.consentRequired,showConsentBanner:this.config.showConsentBanner,hasStoredConsent:this.hasStoredConsent()})}catch(t){this.warn("consent banner initialization failed",t)}}))}showConsentBannerWhenReady(t=12){if(!(typeof document>"u")&&!document.getElementById("krypton-consent-banner")){if(document.body){this.showConsentBanner();return}t<=0||setTimeout(()=>this.showConsentBannerWhenReady(t-1),50)}}resolveInitialConsent(){let t=this.loadStoredConsent();return t||{...this.config.consentRequired?{analytics:!1,heatmaps:!1}:{analytics:!0,heatmaps:!!this.config.heatmap},...this.config.consentCategories}}consentStorageKey(){return`_krypton_consent_${this.config.apiKey}`}hasStoredConsent(){try{return typeof localStorage>"u"?!1:!!localStorage.getItem(this.consentStorageKey())}catch{return!1}}loadStoredConsent(){try{if(typeof localStorage>"u")return null;let t=localStorage.getItem(this.consentStorageKey());if(!t)return null;let r=JSON.parse(t);return{analytics:!!r.analytics,heatmaps:!!r.heatmaps}}catch{return null}}persistConsent(){try{if(typeof localStorage>"u")return;localStorage.setItem(this.consentStorageKey(),JSON.stringify(this.consent))}catch{}}promotePersistentIds(){this.distinctId=pe(),this.sessionId=he()}canTrackAnalytics(){return!!this.consent.analytics}isHeatmapFeatureEnabled(){return!this.config.heatmap||this.configFetched&&!this.serverConfig?.heatmaps_enabled?!1:!!this.consent.heatmaps}async fetchConfig(){if(typeof window>"u")return;let t=`_krypton_config_${this.config.apiKey}`,r=null;if(!this.config.disableConfigCache)try{r=sessionStorage.getItem(t)}catch{r=null}if(r)try{let n=JSON.parse(r);if(n._ts&&Date.now()-n._ts<300*1e3){this.serverConfig=n,this.configFetched=!0,this.debug("config loaded from session cache",n);return}}catch{}try{let n=new AbortController,i=setTimeout(()=>n.abort(),5e3),a=await fetch(`${this.config.endpoint}/api/v1/config?api_key=${encodeURIComponent(this.config.apiKey)}`,{signal:n.signal});if(clearTimeout(i),a.ok){let c=await a.json();if(this.serverConfig=c,this.configFetched=!0,this.debug("config fetched from API",c),!this.config.disableConfigCache)try{sessionStorage.setItem(t,JSON.stringify({...c,_ts:Date.now()}))}catch{}}else this.warn(`Config fetch failed (${a.status})`,{endpoint:this.config.endpoint})}catch(n){this.warn("Config fetch failed",n)}}setupTracking(){if(this.flushTimer=setInterval(()=>{this.flush()},this.config.flushInterval),typeof window>"u")return;window.addEventListener("beforeunload",()=>{this.flush()}),this.config.autoPageview&&this.canTrackAnalytics()&&this.trackPageview();let t=history.pushState;history.pushState=(...n)=>{try{t.apply(history,n),this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0),this.isHeatmapFeatureEnabled()&&setTimeout(()=>this.captureSnapshot(),0)}catch(i){this.warn("pushState hook failed",i)}};let r=history.replaceState;history.replaceState=(...n)=>{try{r.apply(history,n),this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0),this.isHeatmapFeatureEnabled()&&setTimeout(()=>this.captureSnapshot(),0)}catch(i){this.warn("replaceState hook failed",i)}},window.addEventListener("popstate",()=>{try{this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0),this.isHeatmapFeatureEnabled()&&setTimeout(()=>this.captureSnapshot(),0)}catch(n){this.warn("popstate hook failed",n)}}),this.isHeatmapFeatureEnabled()&&this.setupHeatmap()}showConsentBanner(){if(typeof document>"u"||document.getElementById("krypton-consent-banner"))return;let t=document.createElement("div");t.id="krypton-consent-banner",t.style.cssText=["position:fixed","left:16px","right:16px","bottom:16px","z-index:2147483647","max-width:720px","margin:0 auto","background:#111827","color:#f9fafb","border-radius:12px","padding:16px","box-shadow:0 12px 30px rgba(0,0,0,0.35)","font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif","font-size:14px","line-height:1.4"].join(";");let r=a=>a?"checked":"";t.innerHTML=`
|
|
1
|
+
"use strict";var KryptonAnalytics=(()=>{var l=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var x=(s,e)=>{for(var n in e)l(s,n,{get:e[n],enumerable:!0})},b=(s,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of w(e))!v.call(s,i)&&i!==n&&l(s,i,{get:()=>e[i],enumerable:!(t=y(e,i))||t.enumerable});return s};var k=s=>b(l({},"__esModule",{value:!0}),s);var S={};x(S,{Krypton:()=>r,default:()=>C,init:()=>g});function a(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,s=>{let e=Math.random()*16|0;return(s==="x"?e:e&3|8).toString(16)})}function d(){let s="_krypton_sid";try{if(typeof sessionStorage<"u"){let e=sessionStorage.getItem(s);return e||(e=a(),sessionStorage.setItem(s,e)),e}}catch{}return a()}function h(){let s="_krypton_did";try{if(typeof localStorage<"u"){let e=localStorage.getItem(s);return e||(e=a(),localStorage.setItem(s,e)),e}}catch{}return a()}function u(){if(typeof window>"u")return{};let s=new URLSearchParams(window.location.search),e={};for(let n of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let t=s.get(n);t&&(e[n]=t)}return e}function p(){if(typeof window>"u")return"unknown";let s=window.innerWidth;return s<768?"mobile":s<1024?"tablet":"desktop"}function f(s){if(s.id)return`#${s.id}`;let e=[],n=s;for(;n&&n!==document.body;){let t=n.tagName.toLowerCase();if(n.id){e.unshift(`#${n.id}`);break}if(n.className&&typeof n.className=="string"){let i=n.className.trim().split(/\s+/).slice(0,2).join(".");i&&(t+=`.${i}`)}e.unshift(t),n=n.parentElement}return e.join(" > ")}var r=class{constructor(e){this.eventQueue=[];this.heatmapQueue=[];this.flushTimer=null;this.initialized=!1;this.heatmapSetup=!1;this.serverConfig=null;this.configFetched=!1;this.logPrefix="[Krypton SDK]";this.config={autoPageview:!0,heatmap:!1,consentRequired:!1,showConsentBanner:!1,consentCategories:{},flushInterval:5e3,batchSize:20,debug:!1,disableConfigCache:!1,...e},this.distinctId=a(),this.sessionId=a(),this.consent=this.resolveInitialConsent(),this.canTrackAnalytics()&&this.promotePersistentIds(),this.init()}init(){this.initialized||(this.initialized=!0,this.fetchConfig().finally(()=>{try{this.setupTracking()}catch(e){this.warn("setupTracking failed",e)}try{this.config.consentRequired&&this.config.showConsentBanner&&!this.hasStoredConsent()?(this.debug("showing consent banner automatically",{consentRequired:this.config.consentRequired,showConsentBanner:this.config.showConsentBanner}),this.showConsentBannerWhenReady()):this.debug("skipping consent banner",{consentRequired:this.config.consentRequired,showConsentBanner:this.config.showConsentBanner,hasStoredConsent:this.hasStoredConsent()})}catch(e){this.warn("consent banner initialization failed",e)}}))}showConsentBannerWhenReady(e=12){if(!(typeof document>"u")&&!document.getElementById("krypton-consent-banner")){if(document.body){this.showConsentBanner();return}e<=0||setTimeout(()=>this.showConsentBannerWhenReady(e-1),50)}}resolveInitialConsent(){let e=this.loadStoredConsent();return e||{...this.config.consentRequired?{analytics:!1,heatmaps:!1}:{analytics:!0,heatmaps:!!this.config.heatmap},...this.config.consentCategories}}consentStorageKey(){return`_krypton_consent_${this.config.apiKey}`}hasStoredConsent(){try{return typeof localStorage>"u"?!1:!!localStorage.getItem(this.consentStorageKey())}catch{return!1}}loadStoredConsent(){try{if(typeof localStorage>"u")return null;let e=localStorage.getItem(this.consentStorageKey());if(!e)return null;let n=JSON.parse(e);return{analytics:!!n.analytics,heatmaps:!!n.heatmaps}}catch{return null}}persistConsent(){try{if(typeof localStorage>"u")return;localStorage.setItem(this.consentStorageKey(),JSON.stringify(this.consent))}catch{}}promotePersistentIds(){this.distinctId=h(),this.sessionId=d()}canTrackAnalytics(){return!!this.consent.analytics}isHeatmapFeatureEnabled(){return!this.config.heatmap||this.configFetched&&!this.serverConfig?.heatmaps_enabled?!1:!!this.consent.heatmaps}async fetchConfig(){if(typeof window>"u")return;let e=`_krypton_config_${this.config.apiKey}`,n=null;if(!this.config.disableConfigCache)try{n=sessionStorage.getItem(e)}catch{n=null}if(n)try{let t=JSON.parse(n);if(t._ts&&Date.now()-t._ts<300*1e3){this.serverConfig=t,this.configFetched=!0,this.debug("config loaded from session cache",t);return}}catch{}try{let t=new AbortController,i=setTimeout(()=>t.abort(),5e3),o=await fetch(`${this.config.endpoint}/api/v1/config?api_key=${encodeURIComponent(this.config.apiKey)}`,{signal:t.signal});if(clearTimeout(i),o.ok){let c=await o.json();if(this.serverConfig=c,this.configFetched=!0,this.debug("config fetched from API",c),!this.config.disableConfigCache)try{sessionStorage.setItem(e,JSON.stringify({...c,_ts:Date.now()}))}catch{}}else this.warn(`Config fetch failed (${o.status})`,{endpoint:this.config.endpoint})}catch(t){this.warn("Config fetch failed",t)}}setupTracking(){if(this.flushTimer=setInterval(()=>{this.flush()},this.config.flushInterval),typeof window>"u")return;window.addEventListener("beforeunload",()=>{this.flush()}),this.config.autoPageview&&this.canTrackAnalytics()&&this.trackPageview();let e=history.pushState;history.pushState=(...t)=>{try{e.apply(history,t),this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0)}catch(i){this.warn("pushState hook failed",i)}};let n=history.replaceState;history.replaceState=(...t)=>{try{n.apply(history,t),this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0)}catch(i){this.warn("replaceState hook failed",i)}},window.addEventListener("popstate",()=>{try{this.config.autoPageview&&this.canTrackAnalytics()&&setTimeout(()=>this.trackPageview(),0)}catch(t){this.warn("popstate hook failed",t)}}),this.isHeatmapFeatureEnabled()&&this.setupHeatmap()}showConsentBanner(){if(typeof document>"u"||document.getElementById("krypton-consent-banner"))return;let e=document.createElement("div");e.id="krypton-consent-banner",e.style.cssText=["position:fixed","left:16px","right:16px","bottom:16px","z-index:2147483647","max-width:720px","margin:0 auto","background:#111827","color:#f9fafb","border-radius:12px","padding:16px","box-shadow:0 12px 30px rgba(0,0,0,0.35)","font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif","font-size:14px","line-height:1.4"].join(";");let n=o=>o?"checked":"";e.innerHTML=`
|
|
2
2
|
<div style="font-weight:600;margin-bottom:6px">Privacy preferences</div>
|
|
3
3
|
<div style="opacity:0.9;margin-bottom:10px">Choose what data you allow us to collect.</div>
|
|
4
4
|
<label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0">
|
|
5
|
-
<input type="checkbox" id="krypton-consent-analytics" ${
|
|
5
|
+
<input type="checkbox" id="krypton-consent-analytics" ${n(this.consent.analytics)} />
|
|
6
6
|
<span><strong>Analytics</strong> (pageviews and custom events)</span>
|
|
7
7
|
</label>
|
|
8
8
|
<label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0">
|
|
9
|
-
<input type="checkbox" id="krypton-consent-heatmaps" ${
|
|
9
|
+
<input type="checkbox" id="krypton-consent-heatmaps" ${n(this.consent.heatmaps)} />
|
|
10
10
|
<span><strong>Heatmaps</strong> (click and scroll interaction maps)</span>
|
|
11
11
|
</label>
|
|
12
12
|
<div style="display:flex;gap:8px;flex-wrap:wrap;margin-top:12px">
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
<button id="krypton-consent-all" style="border:0;background:#16a34a;color:#fff;padding:8px 12px;border-radius:8px;cursor:pointer">Accept all</button>
|
|
15
15
|
<button id="krypton-consent-none" style="border:1px solid #4b5563;background:transparent;color:#f9fafb;padding:8px 12px;border-radius:8px;cursor:pointer">Reject all</button>
|
|
16
16
|
</div>
|
|
17
|
-
`;let
|
|
17
|
+
`;let t=()=>{e.remove();try{document.body&&(document.body.style.cursor=""),document.documentElement&&(document.documentElement.style.cursor="")}catch{}},i=o=>!!document.getElementById(o)?.checked;e.querySelector("#krypton-consent-save")?.addEventListener("click",()=>{let o={analytics:i("krypton-consent-analytics"),heatmaps:i("krypton-consent-heatmaps")};t(),setTimeout(()=>this.setConsent(o),0)}),e.querySelector("#krypton-consent-all")?.addEventListener("click",()=>{t(),setTimeout(()=>this.setConsent({analytics:!0,heatmaps:!0}),0)}),e.querySelector("#krypton-consent-none")?.addEventListener("click",()=>{t(),setTimeout(()=>this.setConsent({analytics:!1,heatmaps:!1}),0)}),document.body.appendChild(e)}setConsent(e,n=!0){try{let t={...this.consent};this.consent={analytics:e.analytics??t.analytics,heatmaps:e.heatmaps??t.heatmaps},n&&this.persistConsent(),!t.analytics&&this.consent.analytics&&(this.promotePersistentIds(),this.config.autoPageview&&this.trackPageview()),t.analytics&&!this.consent.analytics&&(this.eventQueue=[]),!t.heatmaps&&this.isHeatmapFeatureEnabled()&&this.setupHeatmap(),t.heatmaps&&!this.consent.heatmaps&&(this.heatmapQueue=[])}catch(t){this.warn("setConsent failed",t)}}getConsent(){return{...this.consent}}grantConsent(){this.setConsent({analytics:!0,heatmaps:!0})}revokeConsent(){this.setConsent({analytics:!1,heatmaps:!1}),this.eventQueue=[],this.heatmapQueue=[]}identify(e){try{if(this.distinctId=e,this.canTrackAnalytics())try{typeof localStorage<"u"&&localStorage.setItem("_krypton_did",e)}catch{}}catch(n){this.warn("identify failed",n)}}trackPageview(e){try{if(!this.canTrackAnalytics())return;this.track("$pageview",{...e})}catch(n){this.warn("trackPageview failed",n)}}track(e,n){try{if(!this.canTrackAnalytics())return;let t=u(),i={...n||{}},o={project_id:this.config.apiKey,distinct_id:this.distinctId,event_name:e,timestamp:new Date().toISOString(),properties:i,page_url:typeof window<"u"?window.location.href:"",page_title:typeof document<"u"?document.title:"",referrer:typeof document<"u"?document.referrer:"",utm_source:t.utm_source||"",utm_medium:t.utm_medium||"",utm_campaign:t.utm_campaign||"",utm_term:t.utm_term||"",utm_content:t.utm_content||"",device_type:p(),browser:this.getBrowser(),screen_width:typeof window<"u"?window.screen.width:0,screen_height:typeof window<"u"?window.screen.height:0,session_id:this.sessionId};this.eventQueue.push(o),this.eventQueue.length>=this.config.batchSize&&this.flush()}catch(t){this.warn("track failed",t)}}async flush(){try{await Promise.all([this.flushEvents(),this.flushHeatmapEvents()])}catch(e){this.warn("flush failed",e)}}shutdown(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.flush()}async flushEvents(){if(this.eventQueue.length===0)return;let e=this.eventQueue.splice(0,this.eventQueue.length),n={api_key:this.config.apiKey,events:e};await this.safePost(`${this.config.endpoint}/api/v1/ingest/batch`,n)||this.eventQueue.length<this.config.batchSize*5&&this.eventQueue.unshift(...e)}async flushHeatmapEvents(){if(this.heatmapQueue.length===0)return;let e=this.heatmapQueue.splice(0,this.heatmapQueue.length),n={api_key:this.config.apiKey,events:e};await this.safePost(`${this.config.endpoint}/api/v1/heatmap`,n)||this.heatmapQueue.length<this.config.batchSize*5&&this.heatmapQueue.unshift(...e)}setupHeatmap(){if(typeof window>"u"||this.heatmapSetup)return;this.heatmapSetup=!0,document.addEventListener("click",t=>{if(this.isHeatmapFeatureEnabled())try{let i=t.target;this.heatmapQueue.push({project_id:this.config.apiKey,distinct_id:this.distinctId,session_id:this.sessionId,timestamp:new Date().toISOString(),page_url:window.location.href,interaction_type:"click",x:t.clientX+window.scrollX,y:t.clientY+window.scrollY,viewport_width:window.innerWidth,viewport_height:window.innerHeight,page_width:document.documentElement.scrollWidth,page_height:document.documentElement.scrollHeight,selector:f(i)})}catch(i){this.warn("heatmap click capture failed",i)}});let e=0,n=null;window.addEventListener("scroll",()=>{if(this.isHeatmapFeatureEnabled())try{let t=window.scrollY||document.documentElement.scrollTop,i=document.documentElement.scrollHeight-window.innerHeight,o=i>0?t/i*100:0;o>e&&(e=o),n&&clearTimeout(n),n=setTimeout(()=>{this.heatmapQueue.push({project_id:this.config.apiKey,distinct_id:this.distinctId,session_id:this.sessionId,timestamp:new Date().toISOString(),page_url:window.location.href,interaction_type:"scroll",scroll_depth:e,viewport_width:window.innerWidth,viewport_height:window.innerHeight,page_width:document.documentElement.scrollWidth,page_height:document.documentElement.scrollHeight})},500)}catch(t){this.warn("heatmap scroll capture failed",t)}})}async safePost(e,n,t=!0){try{let i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n),...t?{keepalive:!0}:{}});return i.ok?!0:(this.warn(`API request failed (${i.status})`,{url:e}),!1)}catch(i){return this.warn("API request failed",{url:e,err:i}),!1}}warn(e,n){try{console.warn(`${this.logPrefix} ${e}`,n??"")}catch{}}debug(e,n){if(this.config.debug)try{console.log(`${this.logPrefix} ${e}`,n??"")}catch{}}getBrowser(){if(typeof navigator>"u")return"unknown";let e=navigator.userAgent;return e.includes("Firefox")?"Firefox":e.includes("Edg")?"Edge":e.includes("Chrome")?"Chrome":e.includes("Safari")?"Safari":"Other"}};function g(s){return new r(s)}var m={Krypton:r,init:g};typeof window<"u"&&(window.KryptonAnalytics=m);var C=m;return k(S);})();
|
package/dist/index.d.mts
CHANGED
|
@@ -75,7 +75,6 @@ declare class Krypton {
|
|
|
75
75
|
private heatmapQueue;
|
|
76
76
|
private flushTimer;
|
|
77
77
|
private initialized;
|
|
78
|
-
private lastSnapshotUrl;
|
|
79
78
|
private heatmapSetup;
|
|
80
79
|
private consent;
|
|
81
80
|
private serverConfig;
|
|
@@ -113,7 +112,6 @@ declare class Krypton {
|
|
|
113
112
|
shutdown(): void;
|
|
114
113
|
private flushEvents;
|
|
115
114
|
private flushHeatmapEvents;
|
|
116
|
-
private captureSnapshot;
|
|
117
115
|
private setupHeatmap;
|
|
118
116
|
private safePost;
|
|
119
117
|
private warn;
|
package/dist/index.d.ts
CHANGED
|
@@ -75,7 +75,6 @@ declare class Krypton {
|
|
|
75
75
|
private heatmapQueue;
|
|
76
76
|
private flushTimer;
|
|
77
77
|
private initialized;
|
|
78
|
-
private lastSnapshotUrl;
|
|
79
78
|
private heatmapSetup;
|
|
80
79
|
private consent;
|
|
81
80
|
private serverConfig;
|
|
@@ -113,7 +112,6 @@ declare class Krypton {
|
|
|
113
112
|
shutdown(): void;
|
|
114
113
|
private flushEvents;
|
|
115
114
|
private flushHeatmapEvents;
|
|
116
|
-
private captureSnapshot;
|
|
117
115
|
private setupHeatmap;
|
|
118
116
|
private safePost;
|
|
119
117
|
private warn;
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,6 @@ __export(index_exports, {
|
|
|
24
24
|
createKrypton: () => createKrypton
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(index_exports);
|
|
27
|
-
var import_rrweb_snapshot = require("rrweb-snapshot");
|
|
28
27
|
|
|
29
28
|
// src/utils.ts
|
|
30
29
|
function generateId() {
|
|
@@ -111,7 +110,6 @@ var Krypton = class {
|
|
|
111
110
|
this.heatmapQueue = [];
|
|
112
111
|
this.flushTimer = null;
|
|
113
112
|
this.initialized = false;
|
|
114
|
-
this.lastSnapshotUrl = null;
|
|
115
113
|
this.heatmapSetup = false;
|
|
116
114
|
this.serverConfig = null;
|
|
117
115
|
this.configFetched = false;
|
|
@@ -297,9 +295,6 @@ var Krypton = class {
|
|
|
297
295
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
298
296
|
setTimeout(() => this.trackPageview(), 0);
|
|
299
297
|
}
|
|
300
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
301
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
302
|
-
}
|
|
303
298
|
} catch (err) {
|
|
304
299
|
this.warn("pushState hook failed", err);
|
|
305
300
|
}
|
|
@@ -311,9 +306,6 @@ var Krypton = class {
|
|
|
311
306
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
312
307
|
setTimeout(() => this.trackPageview(), 0);
|
|
313
308
|
}
|
|
314
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
315
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
316
|
-
}
|
|
317
309
|
} catch (err) {
|
|
318
310
|
this.warn("replaceState hook failed", err);
|
|
319
311
|
}
|
|
@@ -323,9 +315,6 @@ var Krypton = class {
|
|
|
323
315
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
324
316
|
setTimeout(() => this.trackPageview(), 0);
|
|
325
317
|
}
|
|
326
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
327
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
328
|
-
}
|
|
329
318
|
} catch (err) {
|
|
330
319
|
this.warn("popstate hook failed", err);
|
|
331
320
|
}
|
|
@@ -427,7 +416,6 @@ var Krypton = class {
|
|
|
427
416
|
}
|
|
428
417
|
if (!prev.heatmaps && this.isHeatmapFeatureEnabled()) {
|
|
429
418
|
this.setupHeatmap();
|
|
430
|
-
this.captureSnapshot();
|
|
431
419
|
}
|
|
432
420
|
if (prev.heatmaps && !this.consent.heatmaps) {
|
|
433
421
|
this.heatmapQueue = [];
|
|
@@ -552,41 +540,10 @@ var Krypton = class {
|
|
|
552
540
|
}
|
|
553
541
|
}
|
|
554
542
|
}
|
|
555
|
-
captureSnapshot() {
|
|
556
|
-
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
557
|
-
if (!this.isHeatmapFeatureEnabled()) return;
|
|
558
|
-
const currentUrl = window.location.href;
|
|
559
|
-
if (this.lastSnapshotUrl === currentUrl) return;
|
|
560
|
-
this.lastSnapshotUrl = currentUrl;
|
|
561
|
-
setTimeout(() => {
|
|
562
|
-
try {
|
|
563
|
-
const node = (0, import_rrweb_snapshot.snapshot)(document, {
|
|
564
|
-
maskAllInputs: true,
|
|
565
|
-
blockSelector: "[data-krypton-block]",
|
|
566
|
-
inlineStylesheet: true
|
|
567
|
-
});
|
|
568
|
-
if (!node) return;
|
|
569
|
-
const snapshotJson = JSON.stringify(node);
|
|
570
|
-
const payload = {
|
|
571
|
-
api_key: this.config.apiKey,
|
|
572
|
-
page_url: currentUrl,
|
|
573
|
-
snapshot: snapshotJson,
|
|
574
|
-
viewport_width: window.innerWidth,
|
|
575
|
-
viewport_height: window.innerHeight,
|
|
576
|
-
page_width: document.documentElement.scrollWidth,
|
|
577
|
-
page_height: document.documentElement.scrollHeight,
|
|
578
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
579
|
-
};
|
|
580
|
-
void this.safePost(`${this.config.endpoint}/api/v1/snapshot`, payload);
|
|
581
|
-
} catch {
|
|
582
|
-
}
|
|
583
|
-
}, 1e3);
|
|
584
|
-
}
|
|
585
543
|
setupHeatmap() {
|
|
586
544
|
if (typeof window === "undefined") return;
|
|
587
545
|
if (this.heatmapSetup) return;
|
|
588
546
|
this.heatmapSetup = true;
|
|
589
|
-
this.captureSnapshot();
|
|
590
547
|
document.addEventListener("click", (e) => {
|
|
591
548
|
if (!this.isHeatmapFeatureEnabled()) return;
|
|
592
549
|
try {
|
|
@@ -642,13 +599,13 @@ var Krypton = class {
|
|
|
642
599
|
}
|
|
643
600
|
});
|
|
644
601
|
}
|
|
645
|
-
async safePost(url, payload) {
|
|
602
|
+
async safePost(url, payload, keepalive = true) {
|
|
646
603
|
try {
|
|
647
604
|
const res = await fetch(url, {
|
|
648
605
|
method: "POST",
|
|
649
606
|
headers: { "Content-Type": "application/json" },
|
|
650
607
|
body: JSON.stringify(payload),
|
|
651
|
-
keepalive: true
|
|
608
|
+
...keepalive ? { keepalive: true } : {}
|
|
652
609
|
});
|
|
653
610
|
if (!res.ok) {
|
|
654
611
|
this.warn(`API request failed (${res.status})`, { url });
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// src/index.ts
|
|
2
|
-
import { snapshot as rrwebSnapshot } from "rrweb-snapshot";
|
|
3
|
-
|
|
4
1
|
// src/utils.ts
|
|
5
2
|
function generateId() {
|
|
6
3
|
if (typeof crypto !== "undefined" && crypto.randomUUID) {
|
|
@@ -86,7 +83,6 @@ var Krypton = class {
|
|
|
86
83
|
this.heatmapQueue = [];
|
|
87
84
|
this.flushTimer = null;
|
|
88
85
|
this.initialized = false;
|
|
89
|
-
this.lastSnapshotUrl = null;
|
|
90
86
|
this.heatmapSetup = false;
|
|
91
87
|
this.serverConfig = null;
|
|
92
88
|
this.configFetched = false;
|
|
@@ -272,9 +268,6 @@ var Krypton = class {
|
|
|
272
268
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
273
269
|
setTimeout(() => this.trackPageview(), 0);
|
|
274
270
|
}
|
|
275
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
276
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
277
|
-
}
|
|
278
271
|
} catch (err) {
|
|
279
272
|
this.warn("pushState hook failed", err);
|
|
280
273
|
}
|
|
@@ -286,9 +279,6 @@ var Krypton = class {
|
|
|
286
279
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
287
280
|
setTimeout(() => this.trackPageview(), 0);
|
|
288
281
|
}
|
|
289
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
290
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
291
|
-
}
|
|
292
282
|
} catch (err) {
|
|
293
283
|
this.warn("replaceState hook failed", err);
|
|
294
284
|
}
|
|
@@ -298,9 +288,6 @@ var Krypton = class {
|
|
|
298
288
|
if (this.config.autoPageview && this.canTrackAnalytics()) {
|
|
299
289
|
setTimeout(() => this.trackPageview(), 0);
|
|
300
290
|
}
|
|
301
|
-
if (this.isHeatmapFeatureEnabled()) {
|
|
302
|
-
setTimeout(() => this.captureSnapshot(), 0);
|
|
303
|
-
}
|
|
304
291
|
} catch (err) {
|
|
305
292
|
this.warn("popstate hook failed", err);
|
|
306
293
|
}
|
|
@@ -402,7 +389,6 @@ var Krypton = class {
|
|
|
402
389
|
}
|
|
403
390
|
if (!prev.heatmaps && this.isHeatmapFeatureEnabled()) {
|
|
404
391
|
this.setupHeatmap();
|
|
405
|
-
this.captureSnapshot();
|
|
406
392
|
}
|
|
407
393
|
if (prev.heatmaps && !this.consent.heatmaps) {
|
|
408
394
|
this.heatmapQueue = [];
|
|
@@ -527,41 +513,10 @@ var Krypton = class {
|
|
|
527
513
|
}
|
|
528
514
|
}
|
|
529
515
|
}
|
|
530
|
-
captureSnapshot() {
|
|
531
|
-
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
532
|
-
if (!this.isHeatmapFeatureEnabled()) return;
|
|
533
|
-
const currentUrl = window.location.href;
|
|
534
|
-
if (this.lastSnapshotUrl === currentUrl) return;
|
|
535
|
-
this.lastSnapshotUrl = currentUrl;
|
|
536
|
-
setTimeout(() => {
|
|
537
|
-
try {
|
|
538
|
-
const node = rrwebSnapshot(document, {
|
|
539
|
-
maskAllInputs: true,
|
|
540
|
-
blockSelector: "[data-krypton-block]",
|
|
541
|
-
inlineStylesheet: true
|
|
542
|
-
});
|
|
543
|
-
if (!node) return;
|
|
544
|
-
const snapshotJson = JSON.stringify(node);
|
|
545
|
-
const payload = {
|
|
546
|
-
api_key: this.config.apiKey,
|
|
547
|
-
page_url: currentUrl,
|
|
548
|
-
snapshot: snapshotJson,
|
|
549
|
-
viewport_width: window.innerWidth,
|
|
550
|
-
viewport_height: window.innerHeight,
|
|
551
|
-
page_width: document.documentElement.scrollWidth,
|
|
552
|
-
page_height: document.documentElement.scrollHeight,
|
|
553
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
554
|
-
};
|
|
555
|
-
void this.safePost(`${this.config.endpoint}/api/v1/snapshot`, payload);
|
|
556
|
-
} catch {
|
|
557
|
-
}
|
|
558
|
-
}, 1e3);
|
|
559
|
-
}
|
|
560
516
|
setupHeatmap() {
|
|
561
517
|
if (typeof window === "undefined") return;
|
|
562
518
|
if (this.heatmapSetup) return;
|
|
563
519
|
this.heatmapSetup = true;
|
|
564
|
-
this.captureSnapshot();
|
|
565
520
|
document.addEventListener("click", (e) => {
|
|
566
521
|
if (!this.isHeatmapFeatureEnabled()) return;
|
|
567
522
|
try {
|
|
@@ -617,13 +572,13 @@ var Krypton = class {
|
|
|
617
572
|
}
|
|
618
573
|
});
|
|
619
574
|
}
|
|
620
|
-
async safePost(url, payload) {
|
|
575
|
+
async safePost(url, payload, keepalive = true) {
|
|
621
576
|
try {
|
|
622
577
|
const res = await fetch(url, {
|
|
623
578
|
method: "POST",
|
|
624
579
|
headers: { "Content-Type": "application/json" },
|
|
625
580
|
body: JSON.stringify(payload),
|
|
626
|
-
keepalive: true
|
|
581
|
+
...keepalive ? { keepalive: true } : {}
|
|
627
582
|
});
|
|
628
583
|
if (!res.ok) {
|
|
629
584
|
this.warn(`API request failed (${res.status})`, { url });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kryptonhq/analytics",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Krypton Analytics JavaScript SDK — privacy-first analytics tracking",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -27,8 +27,5 @@
|
|
|
27
27
|
"tsup": "^8.0.0",
|
|
28
28
|
"typescript": "^5.4.0"
|
|
29
29
|
},
|
|
30
|
-
"license": "MIT"
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"rrweb-snapshot": "^2.0.0-alpha.4"
|
|
33
|
-
}
|
|
30
|
+
"license": "MIT"
|
|
34
31
|
}
|