@loggy/adapter-browser
Version:
Adapter to monitor websites and web application front-ends.
2 lines (1 loc) • 8.57 kB
JavaScript
var loggy=function(){"use strict";var e={generateUTCInSeconds:{generateUTCInSeconds:function(){return Math.floor(Date.now()/1e3)}}.generateUTCInSeconds,parseStacktrace:function(e){var t=!1;if(!e.stack){t=!0;try{synthethicError()}catch(t){e.stack=t.stack}}var n="";"@"===e.stack[0]&&(n="@"),"at "===e.stack.split("").splice(0,3).join("")&&(n="at "),"global code@"===e.stack.split("").splice(0,12).join("")&&(n="global code@");var o=e.stack.replace(n,"").split("\n");t&&delete o[1];var r=(o=(o=o.filter(Boolean)).length>1?o[1]:o[0]).split(":");return{line:r[r.length-2],path:r.slice(0,-2).join(":").trim()}},includes:function(e,t){for(var n=0;n<e.length;n++)if(e[n]===t)return!0;return!1}},t=function(){var t=[];return{add:function(n){var o={innerText:n.target.innerText,timestamp:e.generateUTCInSeconds(),element:n.target.tagName.toLowerCase(),elementId:n.target.id,location:window.location.pathname};t.push(o),t.length>25&&t.shift()},get:function(){return t}}}(),n={focusableElements:["button","details","input","iframe","select","textarea"],connectivity:{service:{local:"http://localhost:2800",demo:"https://loggy-demo-qvnfzcesoq-ew.a.run.app",prod:"https://loggy-prod-qvnfzcesoq-ew.a.run.app"}},adapter:{name:"loggy-adapter-browser",type:"browser",version:"v0.1.7"},consentKey:"loggy-analytics-enabled",sessionKey:"loggy-analytics-active-session"};function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var s,c,l,d=(s={},c=new Date,{add:function(e){e&&"object"===o(e)&&e.constructor===Object&&(s=i({},s,{},e))},setBasicAnalyticData:function(){var e=window.location.pathname;s.isNewVisitor=null===localStorage.getItem(n.consentKey),s.isNewSession=null===sessionStorage.getItem(n.sessionKey),s.page="/"===e[0]?e:"/"+e,s.referrer=document.referrer||"direct",localStorage.setItem(n.consentKey,"true"),sessionStorage.setItem(n.sessionKey,"true")},get:function(){return s.timeOnPage=Math.floor((new Date-c)/1e3),s}}),u=(l={sendAnalytics:!1,anonymizeData:!0},{set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("object"!==o(e)||e.constructor!==Object)throw new Error("the provided LOGGY config is not a valid object");if(!e.ticket||"string"!=typeof e.ticket||50!==e.ticket.length)throw new Error("the provided LOGGY ticket is invalid");if(e.badges&&e.badges.constructor!==Object)throw new Error("the provided LOGGY badges need to be an object");Object.keys(e.badges||{}).forEach((function(t){if("string"!=typeof e.badges[t])throw new Error("LOGGY badges can only contain strings")})),l=i({},l,{},e)},setSendAnalytics:function(e){return l=i({},l,{sendAnalytics:e})},get:function(){return l}}),y=function(){var e=u.get(),t=n.connectivity.service[e.instance]||n.connectivity.service.prod;return e.endpoint&&(t=e.endpoint),t},g=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"error",n=new XMLHttpRequest,o=y(),r="/logging/"+t;n.open("POST",o+r,"error"===t),n.setRequestHeader("Content-Type","application/json"),n.send(JSON.stringify(e)),n.onreadystatechange=function(){4===this.readyState&&200!==this.status&&console.error("failed to send event to LOGGY with error:",this.statusText)}},p=g,f=function(e){if("sendBeacon"in navigator){var t=y();navigator.sendBeacon(t+"/logging/analytics",JSON.stringify(e))}else g(e,"analytics")},v=function(){var t=[];return{add:function(n){"string"==typeof n&&(t.push({timestamp:e.generateUTCInSeconds(),type:"log",log:n}),t.length>15&&t.shift())},get:function(){return t}}}(),b=function(o){var r=o.message,a=o.path,s=void 0===a?"":a,c=o.line,l=void 0===c?"":c,d=o.stack,y=o.constructor,g=u.get();if(r&&d&&g.ticket){var f=i({ticket:g.ticket,anonymizeData:g.anonymizeData,message:r,path:s,logs:v.get()},g.badges&&{badges:g.badges},{line:l.toString(),type:y&&y.name||"error",userInteractions:t.get(),host:window.location.origin,stacktrace:d,adapter:n.adapter,timestamp:e.generateUTCInSeconds()});p(f)}},m=function(){var e=u.get(),t=d.get();t.ticket=e.ticket,e.sendAnalytics&&f(t)},h=function(){var t="";window.onerror=function(e,n,o,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if(e===t)return!1;t=e,setTimeout((function(){return t=""}),2e3);var i={message:e,path:n,line:o,column:r=r||window.event&&window.event.errorCharacter,stack:a.stack,constructor:a.constructor};return b(i),!1},window.onunhandledrejection=function(t){var n=new Error;n.stack=t.reason.stack;var o=e.parseStacktrace(n),r={message:t.reason.message,path:o.path,line:o.line,stack:t.reason.stack,constructor:{name:t.type}};b(r)}},w=function(){var o=n.focusableElements;window.addEventListener("focusin",(function(n){var r=n.target.tagName.toLowerCase();e.includes(o,r)&&t.add(n)})),document.addEventListener("click",(function(n){var r=n.target.tagName.toLowerCase();e.includes(o,r)||t.add(n)}))},k=function(){window.addEventListener("beforeunload",m)},S=function(){var e=console.log.bind(console);console.log=function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];v.add(n.join(" ")),e.apply(void 0,n)};var t=console.info.bind(console);console.info=function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];v.add(n.join(" ")),t.apply(void 0,n)};var n=console.error.bind(console);console.error=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];v.add(t.join(" ")),n.apply(void 0,t)}},x=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",r=document.createElement("div"),a=document.createElement("p"),i=document.createElement("button"),s=document.createElement("button");t&&"string"==typeof t||(t="We would like to collect anonymized data to improve your experience."),n&&"string"==typeof n||(n="Accept"),o&&"string"==typeof o||(o="Cancel");var c=function(){document.body.removeChild(r),e()},l=function(){document.body.removeChild(r)};r.style.position="fixed",r.style.right="20px",r.style.bottom="25px",r.style.left="20px",r.style.maxWidth="510px",r.style.display="flex",r.style.justifyContent="space-between",r.style.alignItems="center",r.style.margin="0 auto",r.style.padding="10px",r.style.borderRadius="7px",r.style.backgroundColor="rgba(255, 255, 255, 0.7)",r.style.boxShadow="rgba(190, 210, 250, 0.8) 0 2px 20px 0",r.style.backdropFilter="blur(20px)",r.style.boxSizing="border-box",r.id="loggy-banner",a.style.margin="0",a.style.fontFamily="Helvetica, sans-serif",a.style.fontSize="12px",a.style.color="#5B6F8C",a.innerText=t,i.style.padding="5px 10px",i.style.border="none",i.style.borderRadius="4px",i.style.backgroundColor="#0368ff",i.style.fontFamily="Helvetica, sans-serif",i.style.fontSize="12px",i.style.color="white",i.style.outline="none",i.style.cursor="pointer",i.innerText=n,i.onclick=c,s.style.padding="5px 10px",s.style.border="none",s.style.backgroundColor="transparent",s.style.fontFamily="Helvetica, sans-serif",s.style.fontWeight="500",s.style.color="#5B6F8C",s.style.cursor="pointer",s.innerText=o,s.onclick=l,r.appendChild(a),r.appendChild(s),r.appendChild(i),window.onload=function(){return document.body.appendChild(r)}},O=function(){u.setSendAnalytics(!0),k(),d.setBasicAnalyticData()};return{init:function(e){var t=null!==localStorage.getItem(n.consentKey);"sendAnalytics"in e||(e.sendAnalytics=t),u.set(e),e.showBanner&&!t&&x(O,e.bannerText,e.bannerAcceptLabel,e.bannerRejectLabel),S(),w(),h(),e.sendAnalytics&&(k(),d.setBasicAnalyticData())},emitError:function(t){var n=e.parseStacktrace(t);t.line=n.line,t.path=n.path,b(t)},enableAnalytics:O,disableAnalytics:function(){u.setSendAnalytics(!1),sessionStorage.removeItem(n.sessionKey),localStorage.removeItem(n.consentKey)}}}();