aesirx-analytics 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/analytics.js +11 -0
- package/dist/index.d.ts +44 -0
- package/package.json +2 -3
- package/src/AnalyticsNext/handle.tsx +0 -90
- package/src/AnalyticsNext/index.tsx +0 -26
- package/src/AnalyticsReact/handle.tsx +0 -72
- package/src/AnalyticsReact/index.tsx +0 -21
- package/src/analytics.ts +0 -150
- package/src/index.ts +0 -4
- package/src/utils/AnalyticsContextProvider.tsx +0 -57
- package/src/utils/index.ts +0 -148
- package/src/utils/services.ts +0 -20
@@ -0,0 +1,11 @@
|
|
1
|
+
(()=>{var G,I=(r,e)=>(Object.keys(e).forEach(t=>{e[t]!==void 0&&(r[t]=e[t])}),r),_=async(r,e)=>await(await fetch(r,{method:"POST",body:JSON.stringify(e),headers:I({"Content-Type":"application/json"},{["x-tracker-cache"]:G})})).json();var N={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"},k={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"},h={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},f={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"},v={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};var s=class{static getFirstMatch(e,t){let i=t.match(e);return i&&i.length>0&&i[1]||""}static getSecondMatch(e,t){let i=t.match(e);return i&&i.length>1&&i[2]||""}static matchAndReturnConst(e,t,i){if(e.test(t))return i}static getWindowsVersionName(e){switch(e){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}}static getMacOSVersionName(e){let t=e.split(".").splice(0,2).map(i=>parseInt(i,10)||0);if(t.push(0),t[0]===10)switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}}static getAndroidVersionName(e){let t=e.split(".").splice(0,2).map(i=>parseInt(i,10)||0);if(t.push(0),!(t[0]===1&&t[1]<5)){if(t[0]===1&&t[1]<6)return"Cupcake";if(t[0]===1&&t[1]>=6)return"Donut";if(t[0]===2&&t[1]<2)return"Eclair";if(t[0]===2&&t[1]===2)return"Froyo";if(t[0]===2&&t[1]>2)return"Gingerbread";if(t[0]===3)return"Honeycomb";if(t[0]===4&&t[1]<1)return"Ice Cream Sandwich";if(t[0]===4&&t[1]<4)return"Jelly Bean";if(t[0]===4&&t[1]>=4)return"KitKat";if(t[0]===5)return"Lollipop";if(t[0]===6)return"Marshmallow";if(t[0]===7)return"Nougat";if(t[0]===8)return"Oreo";if(t[0]===9)return"Pie"}}static getVersionPrecision(e){return e.split(".").length}static compareVersions(e,t,i=!1){let n=s.getVersionPrecision(e),a=s.getVersionPrecision(t),c=Math.max(n,a),l=0,o=s.map([e,t],m=>{let g=c-s.getVersionPrecision(m),y=m+new Array(g+1).join(".0");return s.map(y.split("."),M=>new Array(20-M.length).join("0")+M).reverse()});for(i&&(l=c-Math.min(n,a)),c-=1;c>=l;){if(o[0][c]>o[1][c])return 1;if(o[0][c]===o[1][c]){if(c===l)return 0;c-=1}else if(o[0][c]<o[1][c])return-1}}static map(e,t){let i=[],n;if(Array.prototype.map)return Array.prototype.map.call(e,t);for(n=0;n<e.length;n+=1)i.push(t(e[n]));return i}static find(e,t){let i,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(i=0,n=e.length;i<n;i+=1){let a=e[i];if(t(a,i))return a}}static assign(e,...t){let i=e,n,a;if(Object.assign)return Object.assign(e,...t);for(n=0,a=t.length;n<a;n+=1){let c=t[n];typeof c=="object"&&c!==null&&Object.keys(c).forEach(o=>{i[o]=c[o]})}return e}static getBrowserAlias(e){return N[e]}static getBrowserTypeByAlias(e){return k[e]||""}};var u=/version\/(\d+(\.?_?\d+)+)/i,D=[{test:[/googlebot/i],describe(r){let e={name:"Googlebot"},t=s.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/opera/i],describe(r){let e={name:"Opera"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/opr\/|opios/i],describe(r){let e={name:"Opera"},t=s.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/SamsungBrowser/i],describe(r){let e={name:"Samsung Internet for Android"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/Whale/i],describe(r){let e={name:"NAVER Whale Browser"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/MZBrowser/i],describe(r){let e={name:"MZ Browser"},t=s.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/focus/i],describe(r){let e={name:"Focus"},t=s.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/swing/i],describe(r){let e={name:"Swing"},t=s.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/coast/i],describe(r){let e={name:"Opera Coast"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(r){let e={name:"Opera Touch"},t=s.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/yabrowser/i],describe(r){let e={name:"Yandex Browser"},t=s.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/ucbrowser/i],describe(r){let e={name:"UC Browser"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/Maxthon|mxios/i],describe(r){let e={name:"Maxthon"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/epiphany/i],describe(r){let e={name:"Epiphany"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/puffin/i],describe(r){let e={name:"Puffin"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/sleipnir/i],describe(r){let e={name:"Sleipnir"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/k-meleon/i],describe(r){let e={name:"K-Meleon"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/micromessenger/i],describe(r){let e={name:"WeChat"},t=s.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/qqbrowser/i],describe(r){let e={name:/qqbrowserlite/i.test(r)?"QQ Browser Lite":"QQ Browser"},t=s.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/msie|trident/i],describe(r){let e={name:"Internet Explorer"},t=s.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/\sedg\//i],describe(r){let e={name:"Microsoft Edge"},t=s.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/edg([ea]|ios)/i],describe(r){let e={name:"Microsoft Edge"},t=s.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/vivaldi/i],describe(r){let e={name:"Vivaldi"},t=s.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/seamonkey/i],describe(r){let e={name:"SeaMonkey"},t=s.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/sailfish/i],describe(r){let e={name:"Sailfish"},t=s.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,r);return t&&(e.version=t),e}},{test:[/silk/i],describe(r){let e={name:"Amazon Silk"},t=s.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/phantom/i],describe(r){let e={name:"PhantomJS"},t=s.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/slimerjs/i],describe(r){let e={name:"SlimerJS"},t=s.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(r){let e={name:"BlackBerry"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/(web|hpw)[o0]s/i],describe(r){let e={name:"WebOS Browser"},t=s.getFirstMatch(u,r)||s.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/bada/i],describe(r){let e={name:"Bada"},t=s.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/tizen/i],describe(r){let e={name:"Tizen"},t=s.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/qupzilla/i],describe(r){let e={name:"QupZilla"},t=s.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/firefox|iceweasel|fxios/i],describe(r){let e={name:"Firefox"},t=s.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/electron/i],describe(r){let e={name:"Electron"},t=s.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/MiuiBrowser/i],describe(r){let e={name:"Miui"},t=s.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/chromium/i],describe(r){let e={name:"Chromium"},t=s.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/chrome|crios|crmo/i],describe(r){let e={name:"Chrome"},t=s.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/GSA/i],describe(r){let e={name:"Google Search"},t=s.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){let e=!r.test(/like android/i),t=r.test(/android/i);return e&&t},describe(r){let e={name:"Android Browser"},t=s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/playstation 4/i],describe(r){let e={name:"PlayStation 4"},t=s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/safari|applewebkit/i],describe(r){let e={name:"Safari"},t=s.getFirstMatch(u,r);return t&&(e.version=t),e}},{test:[/.*/i],describe(r){let e=/^(.*)\/(.*) /,t=/^(.*)\/(.*)[ \t]\((.*)/,n=r.search("\\(")!==-1?t:e;return{name:s.getFirstMatch(n,r),version:s.getSecondMatch(n,r)}}}],R=D;var L=[{test:[/Roku\/DVP/],describe(r){let e=s.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,r);return{name:f.Roku,version:e}}},{test:[/windows phone/i],describe(r){let e=s.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,r);return{name:f.WindowsPhone,version:e}}},{test:[/windows /i],describe(r){let e=s.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,r),t=s.getWindowsVersionName(e);return{name:f.Windows,version:e,versionName:t}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(r){let e={name:f.iOS},t=s.getSecondMatch(/(Version\/)(\d[\d.]+)/,r);return t&&(e.version=t),e}},{test:[/macintosh/i],describe(r){let e=s.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,r).replace(/[_\s]/g,"."),t=s.getMacOSVersionName(e),i={name:f.MacOS,version:e};return t&&(i.versionName=t),i}},{test:[/(ipod|iphone|ipad)/i],describe(r){let e=s.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,r).replace(/[_\s]/g,".");return{name:f.iOS,version:e}}},{test(r){let e=!r.test(/like android/i),t=r.test(/android/i);return e&&t},describe(r){let e=s.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,r),t=s.getAndroidVersionName(e),i={name:f.Android,version:e};return t&&(i.versionName=t),i}},{test:[/(web|hpw)[o0]s/i],describe(r){let e=s.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,r),t={name:f.WebOS};return e&&e.length&&(t.version=e),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(r){let e=s.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,r)||s.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,r)||s.getFirstMatch(/\bbb(\d+)/i,r);return{name:f.BlackBerry,version:e}}},{test:[/bada/i],describe(r){let e=s.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,r);return{name:f.Bada,version:e}}},{test:[/tizen/i],describe(r){let e=s.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,r);return{name:f.Tizen,version:e}}},{test:[/linux/i],describe(){return{name:f.Linux}}},{test:[/CrOS/],describe(){return{name:f.ChromeOS}}},{test:[/PlayStation 4/],describe(r){let e=s.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,r);return{name:f.PlayStation4,version:e}}}];var T=[{test:[/googlebot/i],describe(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe(r){let e=s.getFirstMatch(/(can-l01)/i,r)&&"Nova",t={type:h.mobile,vendor:"Huawei"};return e&&(t.model=e),t}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:h.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:h.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:h.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:h.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:h.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:h.tablet}}},{test(r){let e=r.test(/ipod|iphone/i),t=r.test(/like (ipod|iphone)/i);return e&&!t},describe(r){let e=s.getFirstMatch(/(ipod|iphone)/i,r);return{type:h.mobile,vendor:"Apple",model:e}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:h.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe(){return{type:h.mobile}}},{test(r){return r.getBrowserName(!0)==="blackberry"},describe(){return{type:h.mobile,vendor:"BlackBerry"}}},{test(r){return r.getBrowserName(!0)==="bada"},describe(){return{type:h.mobile}}},{test(r){return r.getBrowserName()==="windows phone"},describe(){return{type:h.mobile,vendor:"Microsoft"}}},{test(r){let e=Number(String(r.getOSVersion()).split(".")[0]);return r.getOSName(!0)==="android"&&e>=3},describe(){return{type:h.tablet}}},{test(r){return r.getOSName(!0)==="android"},describe(){return{type:h.mobile}}},{test(r){return r.getOSName(!0)==="macos"},describe(){return{type:h.desktop,vendor:"Apple"}}},{test(r){return r.getOSName(!0)==="windows"},describe(){return{type:h.desktop}}},{test(r){return r.getOSName(!0)==="linux"},describe(){return{type:h.desktop}}},{test(r){return r.getOSName(!0)==="playstation 4"},describe(){return{type:h.tv}}},{test(r){return r.getOSName(!0)==="roku"},describe(){return{type:h.tv}}}];var C=[{test(r){return r.getBrowserName(!0)==="microsoft edge"},describe(r){if(/\sedg\//i.test(r))return{name:v.Blink};let t=s.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,r);return{name:v.EdgeHTML,version:t}}},{test:[/trident/i],describe(r){let e={name:v.Trident},t=s.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){return r.test(/presto/i)},describe(r){let e={name:v.Presto},t=s.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){let e=r.test(/gecko/i),t=r.test(/like gecko/i);return e&&!t},describe(r){let e={name:v.Gecko},t=s.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:v.Blink}}},{test:[/(apple)?webkit/i],describe(r){let e={name:v.WebKit},t=s.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}}];var P=class{constructor(e,t=!1){if(e==null||e==="")throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},t!==!0&&this.parse()}getUA(){return this._ua}test(e){return e.test(this._ua)}parseBrowser(){this.parsedResult.browser={};let e=s.find(R,t=>{if(typeof t.test=="function")return t.test(this);if(t.test instanceof Array)return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.browser=e.describe(this.getUA())),this.parsedResult.browser}getBrowser(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}getBrowserName(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}parseOS(){this.parsedResult.os={};let e=s.find(L,t=>{if(typeof t.test=="function")return t.test(this);if(t.test instanceof Array)return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.os=e.describe(this.getUA())),this.parsedResult.os}getOSName(e){let{name:t}=this.getOS();return e?String(t).toLowerCase()||"":t||""}getOSVersion(){return this.getOS().version}getPlatform(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}getPlatformType(e=!1){let{type:t}=this.getPlatform();return e?String(t).toLowerCase()||"":t||""}parsePlatform(){this.parsedResult.platform={};let e=s.find(T,t=>{if(typeof t.test=="function")return t.test(this);if(t.test instanceof Array)return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.platform=e.describe(this.getUA())),this.parsedResult.platform}getEngine(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}getEngineName(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};let e=s.find(C,t=>{if(typeof t.test=="function")return t.test(this);if(t.test instanceof Array)return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.engine=e.describe(this.getUA())),this.parsedResult.engine}parse(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}getResult(){return s.assign({},this.parsedResult)}satisfies(e){let t={},i=0,n={},a=0;if(Object.keys(e).forEach(l=>{let o=e[l];typeof o=="string"?(n[l]=o,a+=1):typeof o=="object"&&(t[l]=o,i+=1)}),i>0){let l=Object.keys(t),o=s.find(l,g=>this.isOS(g));if(o){let g=this.satisfies(t[o]);if(g!==void 0)return g}let m=s.find(l,g=>this.isPlatform(g));if(m){let g=this.satisfies(t[m]);if(g!==void 0)return g}}if(a>0){let l=Object.keys(n),o=s.find(l,m=>this.isBrowser(m,!0));if(o!==void 0)return this.compareVersion(n[o])}}isBrowser(e,t=!1){let i=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),a=s.getBrowserTypeByAlias(n);return t&&a&&(n=a.toLowerCase()),n===i}compareVersion(e){let t=[0],i=e,n=!1,a=this.getBrowserVersion();if(typeof a=="string")return e[0]===">"||e[0]==="<"?(i=e.substr(1),e[1]==="="?(n=!0,i=e.substr(2)):t=[],e[0]===">"?t.push(1):t.push(-1)):e[0]==="="?i=e.substr(1):e[0]==="~"&&(n=!0,i=e.substr(1)),t.indexOf(s.compareVersions(a,i,n))>-1}isOS(e){return this.getOSName(!0)===String(e).toLowerCase()}isPlatform(e){return this.getPlatformType(!0)===String(e).toLowerCase()}isEngine(e){return this.getEngineName(!0)===String(e).toLowerCase()}is(e,t=!1){return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}some(e=[]){return e.some(t=>this.is(t))}},A=P;var O=class{static getParser(e,t=!1){if(typeof e!="string")throw new Error("UserAgent should be a string");return new A(e,t)}static parse(e){return new A(e).getResult()}static get BROWSER_MAP(){return k}static get ENGINE_MAP(){return v}static get OS_MAP(){return f}static get PLATFORMS_MAP(){return h}},W=O;var B=(r,e)=>`${r}/visitor/v1/${e}`,E=async(r,e,t,i)=>{let{document:n}=window,{pathname:a,search:c,origin:l}=location;e=`${l}${a}${c}`,t=n.referrer,i=window.navigator.userAgent;let o=W.parse(window.navigator.userAgent),m=o?.browser?.name,g=o?.browser?.version,y=window.navigator.userLanguage||window.navigator.language,M=o?.platform?.model??o?.platform?.type,d=`${l}`,p=window.location.search,b=new URLSearchParams(p),S=[];for(let w of b.keys())w.startsWith("utm_")&&b.get(w)&&S.push({name:w,value:b.get(w)});if(!b.get("event_uuid")&&!b.get("visitor_uuid")){let w="";return await _(B(r,"init"),{url:e,referrer:t,user_agent:i,ip:w,domain:d,browser_name:m,browser_version:g,lang:y,device:M,event_name:"visit",event_type:"action",attributes:S})}},x=async(r,e,t,i)=>{let{location:n,document:a}=window;i=i?n.protocol+"//"+n.host+i:a.referrer.split("?")[0];let c=n.protocol+"//"+n.host+n.pathname,l=window.location.search,o=new URLSearchParams(l);return await _(B(r,"start"),{...o.get("event_uuid")&&{event_uuid:o.get("event_uuid")},...o.get("visitor_uuid")&&{visitor_uuid:o.get("visitor_uuid")},...e&&{event_uuid:e},...t&&{visitor_uuid:t},referrer:i==="/"?"":i,url:c})},V=async(r,e,t)=>{let i=window.location.search,n=new URLSearchParams(i);return await _(B(r,"end"),{...n.get("event_uuid_start")&&{event_uuid:n.get("event_uuid_start")},...n.get("visitor_uuid_start")&&{visitor_uuid:n.get("visitor_uuid_start")},...e&&{event_uuid:e},...t&&{visitor_uuid:t}})},q=async(r,e,t,i,n)=>{let{location:a,document:c}=window;i=i?a.protocol+"//"+a.host+i:c.referrer.split("?")[0];let l=a.protocol+"//"+a.host+a.pathname,o=window.location.search,m=new URLSearchParams(o);return await _(B(r,"start"),{...m.get("event_uuid")&&{event_uuid:m.get("event_uuid")},...m.get("visitor_uuid")&&{visitor_uuid:m.get("visitor_uuid")},...e&&{event_uuid:e},...t&&{visitor_uuid:t},referrer:i==="/"?"":i,url:l,...n})},F=(r,e)=>{let t=new URL(window.location.href);t.searchParams.set(r,e),window.history.pushState({path:t.href},"",t.href)};var U=()=>{let r=(d,p,b)=>{let S=d[p];return(...w)=>(b.apply(null,w),S.apply(d,w))},e=async d=>{if(!d)return;let{pathname:p,search:b,origin:S}=location;d=`${S}${p}${b}`;let w=d.toString();w.substring(0,4)==="http"?d="/"+w.split("/").splice(3).join("/"):d=w};if(!window.tracker){let d=p=>p;d.initTracker=E,d.startTracker=x,window.tracker=d}history.pushState=r(history,"pushState",e),history.replaceState=r(history,"replaceState",e);let t=window.aesirx1stparty?window.aesirx1stparty:"",i=t?t.replace(/\/$/,""):"",{currentScript:n}=document;if(!n)return;let a="data-",c="false",o=n.getAttribute.bind(n)(a+"aesirx-event-name")!==c,m="[data-aesirx-event-name]",g=async()=>{if(document.readyState==="complete"){let d=await E(i);d&&(d.event_uuid&&F("event_uuid",d.event_uuid),F("visitor_uuid",d.visitor_uuid),z());let p=await x(i);p&&(p.event_uuid&&F("event_uuid_start",p.event_uuid),F("visitor_uuid_start",p.visitor_uuid),z()),o&&y(document)}};document.addEventListener("readystatechange",g,!0),window.addEventListener("beforeunload",async()=>{await V(i)});let y=d=>{let p=d.querySelectorAll(m);Array.prototype.forEach.call(p,M)},M=d=>{d.addEventListener("click",()=>{let p=[];Object.keys(d.dataset).forEach(b=>{b.startsWith("aesirxEventAttribute")&&p.push({name:b.replace("aesirxEventAttribute","").toLowerCase(),value:d.dataset[b]})}),q(i,"","","",{event_name:d.dataset.aesirxEventName,event_type:d.dataset.aesirxEventType,attributes:p})},!0)};g()},z=()=>{let r=new URLSearchParams(window.location.search),e=r.get("event_uuid"),t=r.get("visitor_uuid"),i=document.getElementsByTagName("a");for(let n=0;n<i.length;n++){let a=j("event_uuid",i[n].href),c=j("visitor_uuid",i[n].href);if(i[n].href){let l=new URL(i[n].href);!a&&e&&l.searchParams.append("event_uuid",e),!c&&t&&l.searchParams.append("visitor_uuid",t),i[n].href=l.href}}},j=(r,e=window.location.href)=>{if(e){let t=new URL(e);if(t.origin===window.location.origin)return t.searchParams.get(r)}};U();})();
|
2
|
+
/*! Bundled license information:
|
3
|
+
|
4
|
+
bowser/src/bowser.js:
|
5
|
+
(*!
|
6
|
+
* Bowser - a browser detector
|
7
|
+
* https://github.com/lancedikson/bowser
|
8
|
+
* MIT License | (c) Dustin Diaz 2012-2015
|
9
|
+
* MIT License | (c) Denis Demchenko 2015-2019
|
10
|
+
*)
|
11
|
+
*/
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
import React, { ReactNode, Dispatch, SetStateAction } from 'react';
|
2
|
+
|
3
|
+
interface AnalyticsReact$1 {
|
4
|
+
router: {
|
5
|
+
asPath: string;
|
6
|
+
events: {
|
7
|
+
on: (_: string, __: () => void) => void;
|
8
|
+
off: (_: string, __: () => void) => void;
|
9
|
+
};
|
10
|
+
replace: any;
|
11
|
+
query: any;
|
12
|
+
push: any;
|
13
|
+
};
|
14
|
+
children?: ReactNode;
|
15
|
+
}
|
16
|
+
declare const AnalyticsNext: ({ router, children }: AnalyticsReact$1) => JSX.Element;
|
17
|
+
|
18
|
+
interface AnalyticsReact {
|
19
|
+
location: {
|
20
|
+
search: string;
|
21
|
+
pathname: string;
|
22
|
+
};
|
23
|
+
history: {
|
24
|
+
push: (_: object) => void;
|
25
|
+
};
|
26
|
+
children?: ReactNode;
|
27
|
+
}
|
28
|
+
declare const AnalyticsReact: ({ location, history, children }: AnalyticsReact) => JSX.Element;
|
29
|
+
|
30
|
+
declare const trackEvent: (endpoint: string, event_uuid: string, visitor_uuid: string, referrer?: string, data?: object) => Promise<any>;
|
31
|
+
|
32
|
+
interface AnalyticsContextType {
|
33
|
+
event_uuid: string;
|
34
|
+
visitor_uuid: string;
|
35
|
+
event_uuid_start: string;
|
36
|
+
visitor_uuid_start: string;
|
37
|
+
setEventID: Dispatch<SetStateAction<string>>;
|
38
|
+
setUUID: Dispatch<SetStateAction<string>>;
|
39
|
+
setEventIDStart: Dispatch<SetStateAction<string>>;
|
40
|
+
setUUIDStart: Dispatch<SetStateAction<string>>;
|
41
|
+
}
|
42
|
+
declare const AnalyticsContext: React.Context<AnalyticsContextType>;
|
43
|
+
|
44
|
+
export { AnalyticsContext, AnalyticsNext, AnalyticsReact, trackEvent };
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "aesirx-analytics",
|
3
|
-
"version": "1.1.
|
3
|
+
"version": "1.1.1",
|
4
4
|
"license": "GPL-3.0-only",
|
5
5
|
"author": "AesirX",
|
6
6
|
"repository": "https://gitlab.redweb.dk/aesirx/analytics",
|
@@ -58,7 +58,6 @@
|
|
58
58
|
"autoprefixer": "10.4.5"
|
59
59
|
},
|
60
60
|
"files": [
|
61
|
-
"
|
62
|
-
"src"
|
61
|
+
"dist"
|
63
62
|
]
|
64
63
|
}
|
@@ -1,90 +0,0 @@
|
|
1
|
-
import React, { ReactNode, useCallback, useEffect, useState } from 'react';
|
2
|
-
import { AnalyticsContext } from '../utils/AnalyticsContextProvider';
|
3
|
-
import { initTracker, startTracker, endTracker } from '../utils/index';
|
4
|
-
|
5
|
-
interface AnalyticsHandle {
|
6
|
-
router: {
|
7
|
-
asPath: string;
|
8
|
-
events: { on: (_: string, __: () => void) => void; off: (_: string, __: () => void) => void };
|
9
|
-
replace: any;
|
10
|
-
query: any;
|
11
|
-
push: any;
|
12
|
-
};
|
13
|
-
children?: ReactNode;
|
14
|
-
}
|
15
|
-
|
16
|
-
const AnalyticsHandle = ({ router, children }: AnalyticsHandle) => {
|
17
|
-
const AnalyticsStore = React.useContext(AnalyticsContext);
|
18
|
-
const endPoint = process.env.NEXT_PUBLIC_ENDPOINT_ANALYTICS_URL;
|
19
|
-
const [prevRoute, setPrevRoute] = useState<string>(router.asPath);
|
20
|
-
const handleStartTracker = useCallback(
|
21
|
-
async (prevRoute: string) => {
|
22
|
-
const referrer = prevRoute ? prevRoute : '';
|
23
|
-
const responseStart = await startTracker(
|
24
|
-
endPoint,
|
25
|
-
AnalyticsStore.event_uuid,
|
26
|
-
AnalyticsStore.visitor_uuid,
|
27
|
-
referrer
|
28
|
-
);
|
29
|
-
responseStart.event_uuid && AnalyticsStore.setEventIDStart(responseStart.event_uuid);
|
30
|
-
responseStart.visitor_uuid && AnalyticsStore.setUUIDStart(responseStart.visitor_uuid);
|
31
|
-
},
|
32
|
-
[AnalyticsStore, endPoint]
|
33
|
-
);
|
34
|
-
|
35
|
-
useEffect(() => {
|
36
|
-
const init = async () => {
|
37
|
-
const urlParams = new URLSearchParams(window.location.search);
|
38
|
-
const event_uuid = urlParams.get('event_uuid');
|
39
|
-
const visitor_uuid = urlParams.get('visitor_uuid');
|
40
|
-
if (!AnalyticsStore.event_uuid && !AnalyticsStore.visitor_uuid) {
|
41
|
-
if (event_uuid && visitor_uuid) {
|
42
|
-
AnalyticsStore.setEventID(event_uuid);
|
43
|
-
AnalyticsStore.setUUID(visitor_uuid);
|
44
|
-
} else {
|
45
|
-
const responseInit = await initTracker(endPoint);
|
46
|
-
responseInit?.event_uuid && AnalyticsStore.setEventID(responseInit?.event_uuid);
|
47
|
-
AnalyticsStore.setUUID(responseInit?.visitor_uuid);
|
48
|
-
}
|
49
|
-
} else {
|
50
|
-
await handleStartTracker(prevRoute);
|
51
|
-
}
|
52
|
-
};
|
53
|
-
init();
|
54
|
-
}, [AnalyticsStore.visitor_uuid]);
|
55
|
-
|
56
|
-
useEffect(() => {
|
57
|
-
const handleRouteChange = async () => {
|
58
|
-
const { event_uuid, visitor_uuid } = router.query;
|
59
|
-
if (AnalyticsStore.visitor_uuid_start && !event_uuid && !visitor_uuid) {
|
60
|
-
await endTracker(
|
61
|
-
endPoint,
|
62
|
-
AnalyticsStore.event_uuid_start,
|
63
|
-
AnalyticsStore.visitor_uuid_start
|
64
|
-
);
|
65
|
-
await handleStartTracker(prevRoute);
|
66
|
-
}
|
67
|
-
setPrevRoute(router.asPath);
|
68
|
-
};
|
69
|
-
router.events.on('routeChangeComplete', handleRouteChange);
|
70
|
-
router.replace(
|
71
|
-
{
|
72
|
-
query: {
|
73
|
-
...router.query,
|
74
|
-
event_uuid: AnalyticsStore.event_uuid,
|
75
|
-
visitor_uuid: AnalyticsStore.visitor_uuid,
|
76
|
-
},
|
77
|
-
},
|
78
|
-
undefined,
|
79
|
-
{
|
80
|
-
shallow: true,
|
81
|
-
}
|
82
|
-
);
|
83
|
-
return () => {
|
84
|
-
router.events.off('routeChangeComplete', handleRouteChange);
|
85
|
-
};
|
86
|
-
}, [router.events, AnalyticsStore.visitor_uuid_start, router.asPath]);
|
87
|
-
|
88
|
-
return <>{children}</>;
|
89
|
-
};
|
90
|
-
export default AnalyticsHandle;
|
@@ -1,26 +0,0 @@
|
|
1
|
-
import React, { ReactNode } from 'react';
|
2
|
-
|
3
|
-
import { AnalyticsContextProvider } from '../utils/AnalyticsContextProvider';
|
4
|
-
import AnalyticsHandle from './handle';
|
5
|
-
|
6
|
-
interface AnalyticsReact {
|
7
|
-
router: {
|
8
|
-
asPath: string;
|
9
|
-
events: { on: (_: string, __: () => void) => void; off: (_: string, __: () => void) => void };
|
10
|
-
replace: any;
|
11
|
-
query: any;
|
12
|
-
push: any;
|
13
|
-
};
|
14
|
-
children?: ReactNode;
|
15
|
-
}
|
16
|
-
|
17
|
-
const AnalyticsNext = ({ router, children }: AnalyticsReact) => {
|
18
|
-
return (
|
19
|
-
<>
|
20
|
-
<AnalyticsContextProvider>
|
21
|
-
<AnalyticsHandle router={router}>{children}</AnalyticsHandle>
|
22
|
-
</AnalyticsContextProvider>
|
23
|
-
</>
|
24
|
-
);
|
25
|
-
};
|
26
|
-
export default AnalyticsNext;
|
@@ -1,72 +0,0 @@
|
|
1
|
-
import React, { ReactNode, useEffect, useState } from 'react';
|
2
|
-
import qs from 'query-string';
|
3
|
-
import { AnalyticsContext } from '../utils/AnalyticsContextProvider';
|
4
|
-
import { initTracker, startTracker, endTracker } from '../utils/index';
|
5
|
-
|
6
|
-
interface AnalyticsHandle {
|
7
|
-
location: { search: string; pathname: string };
|
8
|
-
history: { push: (_: object) => void };
|
9
|
-
children?: ReactNode;
|
10
|
-
}
|
11
|
-
|
12
|
-
const AnalyticsHandle = ({ location, history, children }: AnalyticsHandle) => {
|
13
|
-
const AnalyticsStore = React.useContext(AnalyticsContext);
|
14
|
-
const endPoint = process.env.REACT_APP_ENDPOINT_ANALYTICS_URL;
|
15
|
-
const [prevRoute, setPrevRoute] = useState<string>(null);
|
16
|
-
useEffect(() => {
|
17
|
-
const init = async () => {
|
18
|
-
if (AnalyticsStore.visitor_uuid_start) {
|
19
|
-
await endTracker(
|
20
|
-
endPoint,
|
21
|
-
AnalyticsStore.event_uuid_start,
|
22
|
-
AnalyticsStore.visitor_uuid_start
|
23
|
-
);
|
24
|
-
}
|
25
|
-
if (!AnalyticsStore.event_uuid && !AnalyticsStore.visitor_uuid) {
|
26
|
-
const urlParams = new URLSearchParams(window.location.search);
|
27
|
-
const event_uuid = urlParams.get('event_uuid');
|
28
|
-
const visitor_uuid = urlParams.get('visitor_uuid');
|
29
|
-
if (event_uuid && visitor_uuid) {
|
30
|
-
AnalyticsStore.setEventID(event_uuid);
|
31
|
-
AnalyticsStore.setUUID(visitor_uuid);
|
32
|
-
} else {
|
33
|
-
const responseInit = await initTracker(endPoint);
|
34
|
-
responseInit.event_uuid && AnalyticsStore.setEventID(responseInit.event_uuid);
|
35
|
-
AnalyticsStore.setUUID(responseInit.visitor_uuid);
|
36
|
-
// Add Params to URL
|
37
|
-
const queryParams = qs.parse(location.search);
|
38
|
-
const newQueries = {
|
39
|
-
...queryParams,
|
40
|
-
event_uuid: responseInit.event_uuid,
|
41
|
-
visitor_uuid: responseInit.visitor_uuid,
|
42
|
-
};
|
43
|
-
history.push({ search: qs.stringify(newQueries) });
|
44
|
-
}
|
45
|
-
} else {
|
46
|
-
// Add Params to URL
|
47
|
-
const queryParams = qs.parse(location.search);
|
48
|
-
const newQueries = {
|
49
|
-
...queryParams,
|
50
|
-
event_uuid: AnalyticsStore.event_uuid,
|
51
|
-
visitor_uuid: AnalyticsStore.visitor_uuid,
|
52
|
-
};
|
53
|
-
history.push({ search: qs.stringify(newQueries) });
|
54
|
-
|
55
|
-
const referrer = prevRoute ? prevRoute : '';
|
56
|
-
const responseStart = await startTracker(
|
57
|
-
endPoint,
|
58
|
-
AnalyticsStore.event_uuid,
|
59
|
-
AnalyticsStore.visitor_uuid,
|
60
|
-
referrer
|
61
|
-
);
|
62
|
-
responseStart.event_uuid && AnalyticsStore.setEventIDStart(responseStart.event_uuid);
|
63
|
-
responseStart.visitor_uuid && AnalyticsStore.setUUIDStart(responseStart.visitor_uuid);
|
64
|
-
setPrevRoute(location.pathname);
|
65
|
-
}
|
66
|
-
};
|
67
|
-
init();
|
68
|
-
}, [location.pathname, AnalyticsStore.visitor_uuid, history]);
|
69
|
-
|
70
|
-
return <>{children}</>;
|
71
|
-
};
|
72
|
-
export default AnalyticsHandle;
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import React, { ReactNode } from 'react';
|
2
|
-
|
3
|
-
import { AnalyticsContextProvider } from '../utils/AnalyticsContextProvider';
|
4
|
-
import AnalyticsHandle from './handle';
|
5
|
-
|
6
|
-
interface AnalyticsReact {
|
7
|
-
location: { search: string; pathname: string };
|
8
|
-
history: { push: (_: object) => void };
|
9
|
-
children?: ReactNode;
|
10
|
-
}
|
11
|
-
|
12
|
-
const AnalyticsReact = ({ location, history, children }: AnalyticsReact) => {
|
13
|
-
return (
|
14
|
-
<AnalyticsContextProvider>
|
15
|
-
<AnalyticsHandle location={location} history={history}>
|
16
|
-
{children}
|
17
|
-
</AnalyticsHandle>
|
18
|
-
</AnalyticsContextProvider>
|
19
|
-
);
|
20
|
-
};
|
21
|
-
export default AnalyticsReact;
|
package/src/analytics.ts
DELETED
@@ -1,150 +0,0 @@
|
|
1
|
-
import { endTracker, initTracker, insertParam, startTracker, trackEvent } from './utils';
|
2
|
-
|
3
|
-
const AesirAnalytics = () => {
|
4
|
-
const hook = (_this: object, method: string, callback: (_: string) => void) => {
|
5
|
-
const orig = _this[method];
|
6
|
-
|
7
|
-
return (...args: []) => {
|
8
|
-
callback.apply(null, args);
|
9
|
-
|
10
|
-
return orig.apply(_this, args);
|
11
|
-
};
|
12
|
-
};
|
13
|
-
|
14
|
-
/* Handle history changes */
|
15
|
-
|
16
|
-
const handlePush = async (url: string) => {
|
17
|
-
if (!url) return;
|
18
|
-
const { pathname, search, origin } = location;
|
19
|
-
url = `${origin}${pathname}${search}`;
|
20
|
-
const newUrl = url.toString();
|
21
|
-
|
22
|
-
if (newUrl.substring(0, 4) === 'http') {
|
23
|
-
url = '/' + newUrl.split('/').splice(3).join('/');
|
24
|
-
} else {
|
25
|
-
url = newUrl;
|
26
|
-
}
|
27
|
-
|
28
|
-
// if (currentUrl !== currentRef) {
|
29
|
-
// await initTracker();
|
30
|
-
// startTracker();
|
31
|
-
// }
|
32
|
-
};
|
33
|
-
|
34
|
-
/* Global */
|
35
|
-
|
36
|
-
if (!window['tracker']) {
|
37
|
-
const tracker = (eventValue: string) => eventValue;
|
38
|
-
tracker.initTracker = initTracker;
|
39
|
-
tracker.startTracker = startTracker;
|
40
|
-
|
41
|
-
window['tracker'] = tracker;
|
42
|
-
}
|
43
|
-
|
44
|
-
/* Start */
|
45
|
-
|
46
|
-
history.pushState = hook(history, 'pushState', handlePush);
|
47
|
-
history.replaceState = hook(history, 'replaceState', handlePush);
|
48
|
-
|
49
|
-
const hostUrl = window['aesirx1stparty'] ? window['aesirx1stparty'] : '';
|
50
|
-
|
51
|
-
const root = hostUrl ? hostUrl.replace(/\/$/, '') : '';
|
52
|
-
|
53
|
-
const { currentScript } = document;
|
54
|
-
if (!currentScript) return;
|
55
|
-
const _data = 'data-';
|
56
|
-
const _false = 'false';
|
57
|
-
const attr = currentScript.getAttribute.bind(currentScript);
|
58
|
-
const dataEvents = attr(_data + 'aesirx-event-name') !== _false;
|
59
|
-
const eventSelect = '[data-aesirx-event-name]';
|
60
|
-
|
61
|
-
const update = async () => {
|
62
|
-
if (document.readyState === 'complete') {
|
63
|
-
const responseInit = await initTracker(root);
|
64
|
-
if (responseInit) {
|
65
|
-
responseInit.event_uuid && insertParam('event_uuid', responseInit.event_uuid);
|
66
|
-
insertParam('visitor_uuid', responseInit.visitor_uuid);
|
67
|
-
replaceUrl();
|
68
|
-
}
|
69
|
-
const responseStart = await startTracker(root);
|
70
|
-
if (responseStart) {
|
71
|
-
responseStart.event_uuid && insertParam('event_uuid_start', responseStart.event_uuid);
|
72
|
-
insertParam('visitor_uuid_start', responseStart.visitor_uuid);
|
73
|
-
replaceUrl();
|
74
|
-
}
|
75
|
-
|
76
|
-
if (dataEvents) {
|
77
|
-
addEvents(document);
|
78
|
-
}
|
79
|
-
}
|
80
|
-
};
|
81
|
-
|
82
|
-
document.addEventListener('readystatechange', update, true);
|
83
|
-
|
84
|
-
window.addEventListener('beforeunload', async () => {
|
85
|
-
await endTracker(root);
|
86
|
-
});
|
87
|
-
|
88
|
-
/* Handle events */
|
89
|
-
|
90
|
-
const addEvents = (node: Document) => {
|
91
|
-
const elements = node.querySelectorAll(eventSelect);
|
92
|
-
Array.prototype.forEach.call(elements, addEvent);
|
93
|
-
};
|
94
|
-
|
95
|
-
const addEvent = (element: HTMLInputElement) => {
|
96
|
-
element.addEventListener(
|
97
|
-
'click',
|
98
|
-
() => {
|
99
|
-
const attribute: object[] = [];
|
100
|
-
Object.keys(element.dataset).forEach((key) => {
|
101
|
-
if (key.startsWith('aesirxEventAttribute')) {
|
102
|
-
attribute.push({
|
103
|
-
name: key.replace('aesirxEventAttribute', '').toLowerCase(),
|
104
|
-
value: element.dataset[key],
|
105
|
-
});
|
106
|
-
}
|
107
|
-
});
|
108
|
-
trackEvent(root, '', '', '', {
|
109
|
-
event_name: element.dataset.aesirxEventName,
|
110
|
-
event_type: element.dataset.aesirxEventType,
|
111
|
-
attributes: attribute,
|
112
|
-
});
|
113
|
-
},
|
114
|
-
true
|
115
|
-
);
|
116
|
-
};
|
117
|
-
|
118
|
-
update();
|
119
|
-
};
|
120
|
-
|
121
|
-
const replaceUrl = () => {
|
122
|
-
const urlParams = new URLSearchParams(window.location.search);
|
123
|
-
const event_uuid = urlParams.get('event_uuid');
|
124
|
-
const visitor_uuid = urlParams.get('visitor_uuid');
|
125
|
-
|
126
|
-
const anchors = document.getElementsByTagName('a');
|
127
|
-
|
128
|
-
for (let i = 0; i < anchors.length; i++) {
|
129
|
-
const eventIdParams = getParameterByName('event_uuid', anchors[i].href);
|
130
|
-
const visitorIdParams = getParameterByName('visitor_uuid', anchors[i].href);
|
131
|
-
if (anchors[i].href) {
|
132
|
-
const url = new URL(anchors[i].href);
|
133
|
-
!eventIdParams && event_uuid && url.searchParams.append('event_uuid', event_uuid);
|
134
|
-
!visitorIdParams && visitor_uuid && url.searchParams.append('visitor_uuid', visitor_uuid);
|
135
|
-
anchors[i].href = url.href;
|
136
|
-
}
|
137
|
-
}
|
138
|
-
};
|
139
|
-
|
140
|
-
const getParameterByName = (name: string, url = window.location.href) => {
|
141
|
-
if (url) {
|
142
|
-
const params = new URL(url);
|
143
|
-
if (params.origin === window.location.origin) {
|
144
|
-
return params.searchParams.get(name);
|
145
|
-
}
|
146
|
-
}
|
147
|
-
return;
|
148
|
-
};
|
149
|
-
|
150
|
-
AesirAnalytics();
|
package/src/index.ts
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* @copyright Copyright (C) 2022 AesirX. All rights reserved.
|
3
|
-
* @license GNU General Public License version 3, see LICENSE.
|
4
|
-
*/
|
5
|
-
|
6
|
-
import React, { Dispatch, ReactNode, SetStateAction, useState } from 'react';
|
7
|
-
|
8
|
-
interface Props {
|
9
|
-
children?: ReactNode;
|
10
|
-
}
|
11
|
-
|
12
|
-
interface AnalyticsContextType {
|
13
|
-
event_uuid: string;
|
14
|
-
visitor_uuid: string;
|
15
|
-
event_uuid_start: string;
|
16
|
-
visitor_uuid_start: string;
|
17
|
-
setEventID: Dispatch<SetStateAction<string>>;
|
18
|
-
setUUID: Dispatch<SetStateAction<string>>;
|
19
|
-
setEventIDStart: Dispatch<SetStateAction<string>>;
|
20
|
-
setUUIDStart: Dispatch<SetStateAction<string>>;
|
21
|
-
}
|
22
|
-
|
23
|
-
export const AnalyticsContext = React.createContext<AnalyticsContextType>({
|
24
|
-
event_uuid: undefined,
|
25
|
-
visitor_uuid: undefined,
|
26
|
-
event_uuid_start: undefined,
|
27
|
-
visitor_uuid_start: undefined,
|
28
|
-
setEventID: undefined,
|
29
|
-
setUUID: undefined,
|
30
|
-
setEventIDStart: undefined,
|
31
|
-
setUUIDStart: undefined,
|
32
|
-
});
|
33
|
-
|
34
|
-
const AnalyticsContextProvider: React.FC<Props> = ({ children }) => {
|
35
|
-
const [eventID, setEventID] = useState();
|
36
|
-
const [UUID, setUUID] = useState();
|
37
|
-
const [eventIDStart, setEventIDStart] = useState();
|
38
|
-
const [UUIDStart, setUUIDStart] = useState();
|
39
|
-
return (
|
40
|
-
<AnalyticsContext.Provider
|
41
|
-
value={{
|
42
|
-
event_uuid: eventID,
|
43
|
-
visitor_uuid: UUID,
|
44
|
-
event_uuid_start: eventIDStart,
|
45
|
-
visitor_uuid_start: UUIDStart,
|
46
|
-
setEventID: setEventID,
|
47
|
-
setUUID: setUUID,
|
48
|
-
setEventIDStart: setEventIDStart,
|
49
|
-
setUUIDStart: setUUIDStart,
|
50
|
-
}}
|
51
|
-
>
|
52
|
-
{children}
|
53
|
-
</AnalyticsContext.Provider>
|
54
|
-
);
|
55
|
-
};
|
56
|
-
|
57
|
-
export { AnalyticsContextProvider };
|
package/src/utils/index.ts
DELETED
@@ -1,148 +0,0 @@
|
|
1
|
-
import { trackerService } from './services';
|
2
|
-
import Bowser from 'bowser';
|
3
|
-
|
4
|
-
const createRequest = (endpoint: string, task: string) => {
|
5
|
-
return `${endpoint}/visitor/v1/${task}`;
|
6
|
-
};
|
7
|
-
|
8
|
-
/* FUNCTION */
|
9
|
-
const initTracker = async (
|
10
|
-
endpoint: string,
|
11
|
-
url?: string,
|
12
|
-
referrer?: string,
|
13
|
-
user_agent?: string
|
14
|
-
) => {
|
15
|
-
const { document } = window;
|
16
|
-
const { pathname, search, origin } = location;
|
17
|
-
url = `${origin}${pathname}${search}`;
|
18
|
-
referrer = document.referrer;
|
19
|
-
user_agent = window.navigator.userAgent;
|
20
|
-
const browser = Bowser.parse(window.navigator.userAgent);
|
21
|
-
const browser_name = browser?.browser?.name;
|
22
|
-
const browser_version = browser?.browser?.version;
|
23
|
-
const lang = window.navigator['userLanguage'] || window.navigator.language;
|
24
|
-
const device = browser?.platform?.model ?? browser?.platform?.type;
|
25
|
-
const domain = `${origin}`;
|
26
|
-
const queryString = window.location.search;
|
27
|
-
const urlParams = new URLSearchParams(queryString);
|
28
|
-
const attributes = [];
|
29
|
-
for (const key of urlParams.keys()) {
|
30
|
-
if (key.startsWith('utm_')) {
|
31
|
-
urlParams.get(key) && attributes.push({ name: key, value: urlParams.get(key) });
|
32
|
-
}
|
33
|
-
}
|
34
|
-
if (!urlParams.get('event_uuid') && !urlParams.get('visitor_uuid')) {
|
35
|
-
const ip = '';
|
36
|
-
const response = await trackerService(createRequest(endpoint, 'init'), {
|
37
|
-
url: url,
|
38
|
-
referrer: referrer,
|
39
|
-
user_agent: user_agent,
|
40
|
-
ip: ip,
|
41
|
-
domain: domain,
|
42
|
-
browser_name: browser_name,
|
43
|
-
browser_version: browser_version,
|
44
|
-
lang: lang,
|
45
|
-
device: device,
|
46
|
-
event_name: 'visit',
|
47
|
-
event_type: 'action',
|
48
|
-
attributes: attributes,
|
49
|
-
});
|
50
|
-
return response;
|
51
|
-
}
|
52
|
-
};
|
53
|
-
|
54
|
-
const startTracker = async (
|
55
|
-
endpoint: string,
|
56
|
-
event_uuid?: string,
|
57
|
-
visitor_uuid?: string,
|
58
|
-
referrer?: string
|
59
|
-
) => {
|
60
|
-
const { location, document } = window;
|
61
|
-
referrer = referrer
|
62
|
-
? location.protocol + '//' + location.host + referrer
|
63
|
-
: document.referrer.split('?')[0];
|
64
|
-
const url = location.protocol + '//' + location.host + location.pathname;
|
65
|
-
const queryString = window.location.search;
|
66
|
-
const urlParams = new URLSearchParams(queryString);
|
67
|
-
const responseStart = await trackerService(createRequest(endpoint, 'start'), {
|
68
|
-
...(urlParams.get('event_uuid') && {
|
69
|
-
event_uuid: urlParams.get('event_uuid'),
|
70
|
-
}),
|
71
|
-
...(urlParams.get('visitor_uuid') && {
|
72
|
-
visitor_uuid: urlParams.get('visitor_uuid'),
|
73
|
-
}),
|
74
|
-
...(event_uuid && {
|
75
|
-
event_uuid: event_uuid,
|
76
|
-
}),
|
77
|
-
...(visitor_uuid && {
|
78
|
-
visitor_uuid: visitor_uuid,
|
79
|
-
}),
|
80
|
-
referrer: referrer === '/' ? '' : referrer,
|
81
|
-
url: url,
|
82
|
-
});
|
83
|
-
|
84
|
-
return responseStart;
|
85
|
-
};
|
86
|
-
|
87
|
-
const endTracker = async (endpoint: string, event_uuid?: string, visitor_uuid?: string) => {
|
88
|
-
const queryString = window.location.search;
|
89
|
-
const urlParams = new URLSearchParams(queryString);
|
90
|
-
const responseEnd = await trackerService(createRequest(endpoint, 'end'), {
|
91
|
-
...(urlParams.get('event_uuid_start') && {
|
92
|
-
event_uuid: urlParams.get('event_uuid_start'),
|
93
|
-
}),
|
94
|
-
...(urlParams.get('visitor_uuid_start') && {
|
95
|
-
visitor_uuid: urlParams.get('visitor_uuid_start'),
|
96
|
-
}),
|
97
|
-
...(event_uuid && {
|
98
|
-
event_uuid: event_uuid,
|
99
|
-
}),
|
100
|
-
...(visitor_uuid && {
|
101
|
-
visitor_uuid: visitor_uuid,
|
102
|
-
}),
|
103
|
-
});
|
104
|
-
return responseEnd;
|
105
|
-
};
|
106
|
-
|
107
|
-
const trackEvent = async (
|
108
|
-
endpoint: string,
|
109
|
-
event_uuid: string,
|
110
|
-
visitor_uuid: string,
|
111
|
-
referrer?: string,
|
112
|
-
data?: object
|
113
|
-
) => {
|
114
|
-
const { location, document } = window;
|
115
|
-
referrer = referrer
|
116
|
-
? location.protocol + '//' + location.host + referrer
|
117
|
-
: document.referrer.split('?')[0];
|
118
|
-
const url = location.protocol + '//' + location.host + location.pathname;
|
119
|
-
const queryString = window.location.search;
|
120
|
-
const urlParams = new URLSearchParams(queryString);
|
121
|
-
const responseStart = await trackerService(createRequest(endpoint, 'start'), {
|
122
|
-
...(urlParams.get('event_uuid') && {
|
123
|
-
event_uuid: urlParams.get('event_uuid'),
|
124
|
-
}),
|
125
|
-
...(urlParams.get('visitor_uuid') && {
|
126
|
-
visitor_uuid: urlParams.get('visitor_uuid'),
|
127
|
-
}),
|
128
|
-
...(event_uuid && {
|
129
|
-
event_uuid: event_uuid,
|
130
|
-
}),
|
131
|
-
...(visitor_uuid && {
|
132
|
-
visitor_uuid: visitor_uuid,
|
133
|
-
}),
|
134
|
-
referrer: referrer === '/' ? '' : referrer,
|
135
|
-
url: url,
|
136
|
-
...data,
|
137
|
-
});
|
138
|
-
|
139
|
-
return responseStart;
|
140
|
-
};
|
141
|
-
|
142
|
-
const insertParam = (key: string, value: string) => {
|
143
|
-
const url = new URL(window.location.href);
|
144
|
-
url.searchParams.set(key, value);
|
145
|
-
window.history.pushState({ path: url.href }, '', url.href);
|
146
|
-
};
|
147
|
-
|
148
|
-
export { initTracker, startTracker, endTracker, trackEvent, insertParam };
|
package/src/utils/services.ts
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
/* SERVICES */
|
2
|
-
let cache: string;
|
3
|
-
const assign = (a: {}, b: {}) => {
|
4
|
-
Object.keys(b).forEach((key) => {
|
5
|
-
if (b[key] !== undefined) a[key] = b[key];
|
6
|
-
});
|
7
|
-
return a;
|
8
|
-
};
|
9
|
-
|
10
|
-
const trackerService = async (endpoint: string, payload: object) => {
|
11
|
-
const fetchData = await fetch(endpoint, {
|
12
|
-
method: 'POST',
|
13
|
-
body: JSON.stringify(payload),
|
14
|
-
headers: assign({ 'Content-Type': 'application/json' }, { ['x-tracker-cache']: cache }),
|
15
|
-
});
|
16
|
-
const response = await fetchData.json();
|
17
|
-
return response;
|
18
|
-
};
|
19
|
-
|
20
|
-
export { trackerService };
|