UNPKG

user-behaviour-tracer

Version:
2 lines (1 loc) 7.11 kB
!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)["user-behaviour-tracer"]=t()}(this,(function(){"use strict";function e(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,(o=n.key,i=void 0,"symbol"==typeof(i=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var n=s.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(o,"string"))?i:String(i)),n)}var o,i}var t=function(e){var t=history[e];return function(){var s=t.apply(this,arguments),n=new Event(e);return n.arguments=arguments,window.dispatchEvent(n),s}},s=function(){function s(e){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),this.defaults={userInfo:!0,clicks:!0,mouseMovement:!0,mouseMovementInterval:1,mouseScroll:!0,mousePageChange:!0,keyLogger:!1,contextChange:!1,timeCount:!0,clearAfterProcess:!0,processTime:15,processData:function(e){console.log(e)}},this.defaults=Object.assign(Object.assign({},this.defaults),e),this.user_config=this.defaults,this.config(this.defaults),this.mem={processInterval:null,mouseInterval:null,mousePosition:[],eventListeners:{scroll:null,click:null,mouseMovement:null},eventsFunctions:{scroll:function(){t.results.mouseScroll.push([{x:window.scrollX,y:window.scrollY,time:t.getTimeStamp()}])},click:function(e){t.results.clicks.clickCount++;var s=[],n="";e.composedPath().forEach((function(t,o){o!==e.composedPath().length-1&&o!==e.composedPath().length-2&&(n=t.localName,""!==t.className&&t.classList.forEach((function(e){n+="."+e})),""!==t.id&&(n+="#"+t.id),s.push(n))})),t.results.clicks.clickDetails.push([{x:e.clientX,y:e.clientY,path:s.reverse().join(">"),node:e.target.outerHTML,time:t.getTimeStamp()}])},mouseMovement:function(e){t.mem.mousePosition=[{x:e.clientX,y:e.clientY,time:t.getTimeStamp()}]},pushState:function(e){var s=e&&e.arguments.length>2&&e.arguments[2],n=/^http/.test(s)?s:location.protocol+"//"+location.host+s;console.log("pushState old:"+location.href,"new:"+n),t.results.mousePageChanges.push([{type:"pushState",oldURL:location.href,newURL:n,time:t.getTimeStamp()}])},replaceState:function(e){var s=e&&e.arguments.length>2&&e.arguments[2],n=/^http/.test(s)?s:location.protocol+"//"+location.host+s;console.log("replaceState old:"+location.href,"new:"+n),t.results.mousePageChanges.push([{type:"replaceState",oldURL:location.href,newURL:n,time:t.getTimeStamp()}])},hashchange:function(e){t.results.mousePageChanges.push([{type:"hashchange",oldURL:e.oldURL,newURL:e.newURL,time:t.getTimeStamp()}])},paste:function(e){var s=void 0;e.clipboardData&&e.clipboardData.getData&&(s=e.clipboardData.getData("text/plain")),s&&t.results.keyLogger.push({time:t.getTimeStamp(),data:s,type:"paste"})},keyup:function(e){var s=e.keyCode||e.which,n=String.fromCharCode(s);t.results.keyLogger.push({time:t.getTimeStamp(),data:n,type:"keypress"})},visibilitychange:function(e){t.results.contextChange.push({time:t.getTimeStamp(),url:window.location.href,type:document.visibilityState})}}},this.results={},this.resetResults()}var n,o,i;return n=s,(o=[{key:"resetResults",value:function(){this.results={userInfo:{appCodeName:navigator.appCodeName||"",appName:navigator.appName||"",vendor:navigator.vendor||"",platform:navigator.platform||"",userAgent:navigator.userAgent||""},time:{startTime:0,currentTime:0},clicks:{clickCount:0,clickDetails:[]},mouseMovements:[],mouseScroll:[],mousePageChanges:[],keyLogger:[],contextChange:[]}}},{key:"getTimeStamp",value:function(){return(new Date).toLocaleString()}},{key:"config",value:function(e){this.user_config=Object.assign(Object.assign({},this.defaults),e)}},{key:"start",value:function(){var e=this;void 0!==this.user_config.timeCount&&this.user_config.timeCount&&(this.results.time.startTime=this.getTimeStamp()),this.user_config.mouseMovement&&(this.mem.eventListeners.mousemove=window.addEventListener("mousemove",this.mem.eventsFunctions.mouseMovement),this.mem.mouseInterval=setInterval((function(){e.mem.mousePosition&&e.mem.mousePosition.length&&(!e.results.mouseMovements.length||e.mem.mousePosition[0]!==e.results.mouseMovements[e.results.mouseMovements.length-1][0]&&e.mem.mousePosition[1]!==e.results.mouseMovements[e.results.mouseMovements.length-1][1])&&e.results.mouseMovements.push(e.mem.mousePosition)}),1e3*this.defaults.mouseMovementInterval)),this.user_config.clicks&&(this.mem.eventListeners.click=window.addEventListener("click",this.mem.eventsFunctions.click)),this.user_config.mousePageChange&&(window.history.pushState=t("pushState"),window.history.replaceState=t("replaceState"),window.addEventListener("pushState",this.mem.eventsFunctions.pushState),window.addEventListener("replaceState",this.mem.eventsFunctions.replaceState),window.addEventListener("hashchange",this.mem.eventsFunctions.hashchange)),this.user_config.keyLogger&&(document.addEventListener("paste",this.mem.eventsFunctions.paste),document.addEventListener("keyup",this.mem.eventsFunctions.keyup)),this.user_config.contextChange&&document.addEventListener("visibilitychange",this.mem.eventsFunctions.visibilitychange),this.user_config.mouseScroll&&(this.mem.eventListeners.scroll=window.addEventListener("scroll",this.mem.eventsFunctions.scroll)),!1!==this.user_config.processTime&&(this.mem.processInterval=setInterval((function(){e.user_config.processData&&e.user_config.processData(e.result())}),1e3*this.user_config.processTime))}},{key:"processResults",value:function(){this.user_config.processData&&this.user_config.processData(this.result()),this.user_config.clearAfterProcess&&this.resetResults()}},{key:"stop",value:function(){var e=this;!1!==this.user_config.processTime&&clearInterval(this.mem.processInterval),clearInterval(this.mem.mouseInterval),Object.keys(this.mem.eventsFunctions).forEach((function(t){window.removeEventListener(t,e.mem.eventsFunctions[t])}))}},{key:"result",value:function(){return!1===this.user_config.userInfo&&void 0!==this.results.userInfo&&delete this.results.userInfo,void 0!==this.user_config.timeCount&&this.user_config.timeCount&&(this.results.time.currentTime=this.getTimeStamp()),this.results}},{key:"showConfig",value:function(){return Object.keys(this.user_config).length!==Object.keys(this.defaults).length?this.defaults:this.user_config}}])&&e(n.prototype,o),i&&e(n,i),Object.defineProperty(n,"prototype",{writable:!1}),s}(),n=new s({userInfo:!0,clicks:!0,mouseMovement:!0,mouseMovementInterval:1,mouseScroll:!0,mousePageChange:!0,keyLogger:!1,contextChange:!1,timeCount:!0,clearAfterProcess:!0,processTime:15,processData:function(e){}}),o={showConfig:n.showConfig.bind(n),config:n.config.bind(n),start:n.start.bind(n),stop:n.stop.bind(n),showResult:n.result.bind(n),processResults:n.processResults.bind(n)};return window&&(window.userBehaviour=o,o.start()),s}));