├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── client ├── error.php ├── fancytrack.js ├── fancytrack.min.js └── fancytrack.min.js.map ├── index.js └── package.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | .DS_Store 4 | .DS_Store? 5 | ._* 6 | .Spotlight-V100 7 | .Trashes 8 | ehthumbs.db 9 | Thumbs.db 10 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-2017 FancyGrid 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of the author nor the names of contributors may be used to 15 | endorse or promote products derived from this software without specific prior 16 | written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FancyTrack 2 | 3 | Build v1.0.5 4 | 5 | FancyTrack - JavaScript error tracking library from FancyGrid team. 6 | FancyTrack is light alternative to [TrackJS](https://trackjs.com/) service. 7 | 8 | ## Pros and Cons 9 | It is free and light. 10 | But at the moment it overrides window.onerror handler. 11 | window.onerror is not supported by IE Edge 12 | 13 | ## Quick Start 14 | Include a reference to the FancyTrack library 15 | 16 | ```html 17 | 18 | ``` 19 | The `FancyTrack` object is now accessible. Happy error tracking! 20 | 21 | ### Sample: Base Init 22 | ```html 23 | 28 | ``` 29 | 30 | ### Sample: Set method of request 31 | ```html 32 | 38 | ``` 39 | 40 | ### Sample: Track/Send custom error 41 | ```html 42 | 49 | ``` 50 | 51 | ## Parametres that FancyTrack sends 52 | 53 | * browser 54 | * columnNumber 55 | * errorText 56 | * errorName 57 | * errorStack 58 | * lineNumber 59 | * mobile 60 | * os 61 | * url 62 | * userAgent 63 | 64 | ## Package Directory 65 | The package includes the following: 66 | ``` 67 | | README.md 68 | ├── client 69 | │ ├── fancytrack.min.js 70 | │ ├── fancytrack.js 71 | | ... 72 | ``` 73 | 74 | ## Resources 75 | [Capture and report JavaScript errors with window.onerror](https://blog.sentry.io/2016/01/04/client-javascript-reporting-window-onerror.html) 76 | [Test case of error reporting on php](https://github.com/FancyGrid/FancyTrack/blob/master/client/error.php) 77 | 78 | ## Install 79 | 80 | #### *npm* 81 | ``` 82 | npm install fancytrack 83 | ``` 84 | 85 | ## Support 86 | If you need any assistance or would like to report any bugs found in FancyTrack, please contact us at support@fancygrid.com 87 | -------------------------------------------------------------------------------- /client/error.php: -------------------------------------------------------------------------------- 1 | 47 | -------------------------------------------------------------------------------- /client/fancytrack.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * FancyTrack - JavaScript Error Tracking library 3 | * version - 1.0.5 4 | * https://github.com/FancyGrid/FancyTrack 5 | * 6 | * Example: Base Init 7 | * FancyTrack.init(); 8 | * Note: It will send report to /error 9 | * 10 | * Example: Set url for error report 11 | * FancyTrack.init({ 12 | * url: '/errortrack' 13 | * }); 14 | * 15 | * Example: Set method of request 16 | * FancyTrack.init({ 17 | * url: '/errortrack', 18 | * method: 'POST' 19 | * }); 20 | * 21 | * Example: Track/Send custom error 22 | * FancyTrack.init(); 23 | * ... 24 | * FancyTrack.track("My Error"); 25 | * 26 | * List of properties that are send in report 27 | * - url 28 | * - errorText 29 | * - errorName 30 | * - errorStack 31 | * - lineNumber 32 | * - columnNumber 33 | * - os 34 | * - mobile 35 | * - browser 36 | */ 37 | 38 | (function(global, factory) { 39 | if(typeof define === 'function' && define.amd){ 40 | define(function() { 41 | return factory(global); 42 | }) 43 | } 44 | else{ 45 | factory(global); 46 | } 47 | }(this, function(window){ 48 | 49 | /** 50 | * @class FancyTrack - global class with error tracking functions 51 | * @singleton 52 | */ 53 | var FancyTrack = function(){}; 54 | 55 | FancyTrack.prototype = { 56 | /* 57 | * @private 58 | * @cfg {Boolean} 59 | * Used to determine that FancyTrack was inited 60 | */ 61 | inited: false, 62 | /* 63 | * @cfg {Object} 64 | * Object with properties list that should be send to server in report 65 | */ 66 | report: { 67 | url: true, 68 | errorText: true, 69 | errorName: true, 70 | errorStack: true, 71 | lineNumber: true, 72 | columnNumber: true, 73 | userAgent: true, 74 | browser: true, 75 | os: true, 76 | mobile: true 77 | }, 78 | /* 79 | * @cfg {String} 80 | * String template that would be reported in Web Inspector Console 81 | */ 82 | consoleText: '%cFancy%cTrack %ccatched %cError%c! Report was sent!', 83 | /* 84 | * @cfg {Array} 85 | * List of colors that are used for highlighting test reporting in Web Inspector Console 86 | */ 87 | consoleArgs: [ 88 | 'color:#A2CFE8;font-size: 14px;font-weight: bold;', 89 | 'color:#088EC7;font-size: 14px;font-weight: bold;', 90 | 'font-weight:bold;color: #515151;font-size: 12px;', 91 | 'color: red;font-weight: bold;font-size: 14px;', 92 | 'font-weight:bold;color: #515151;font-size: 12px;' 93 | ], 94 | /* 95 | * @cfg {String} 96 | * Request method 97 | */ 98 | method: 'POST', 99 | /* 100 | * @cfg {String} 101 | * Url for reporting error 102 | */ 103 | url: '/error/', 104 | /* 105 | * @private 106 | * Applying config to report 107 | */ 108 | applyConfig: function(config){ 109 | var me = this; 110 | 111 | if(config.report){ 112 | for(var p in config){ 113 | me.report[p] = config.report[p]; 114 | } 115 | } 116 | 117 | for(var p in config){ 118 | if(p === 'report'){ 119 | continue; 120 | } 121 | 122 | me[p] = config[p]; 123 | } 124 | }, 125 | /* 126 | * Initialize FancyTrack 127 | */ 128 | init: function(config){ 129 | var me = this; 130 | 131 | if(me.inited){ 132 | return; 133 | } 134 | 135 | me.applyConfig(config || {}); 136 | 137 | me.initOnError(); 138 | 139 | me.inited = true; 140 | }, 141 | /* 142 | * @private 143 | * Initialize error handler and getting user browser info 144 | */ 145 | initOnError: function(){ 146 | var me = this, 147 | _onError = window.onerror; 148 | 149 | me.getUserInfo(); 150 | 151 | window.onerror = function(e, url, lineNumber, columnNumber, eObject){ 152 | if(_onError){ 153 | _onError.apply(window, [e, url, lineNumber, columnNumber, eObject]); 154 | } 155 | 156 | eObject = eObject || {}; 157 | 158 | if(window.console && console.log && me.consoleText){ 159 | if(me.isIE){ 160 | me.consoleText = me.consoleText.replace(/\%c/g, ''); 161 | console.log(me.consoleText); 162 | } 163 | else{ 164 | console.log.apply(window, [].concat(me.consoleText).concat(me.consoleArgs)); 165 | } 166 | } 167 | 168 | var report = {}, 169 | _report = me.report; 170 | 171 | report = me.getBaseReport(); 172 | 173 | if(_report.url) report.url = location.href; 174 | if(_report.errorText) report.errorText = e; 175 | if(_report.errorName) report.errorName = eObject.name; 176 | if(_report.errorMessage) report.errorMessage = eObject.message; 177 | if(_report.errorStack) report.errorStack = eObject.stack; 178 | if(_report.lineNumber) report.lineNumber = lineNumber; 179 | if(_report.columnNumber) report.columnNumber = columnNumber; 180 | 181 | if(me.params){ 182 | for(var p in me.params){ 183 | report[p] = me.params[p]; 184 | } 185 | } 186 | 187 | if(window.$ && $.ajax){ 188 | $.ajax({ 189 | type: me.method, 190 | url: me.url, 191 | data: report 192 | }); 193 | } 194 | else{ 195 | me.ajax({ 196 | method: me.method, 197 | url: me.url, 198 | params: report 199 | }); 200 | } 201 | }; 202 | }, 203 | /* 204 | * @private 205 | * Simple ajax function for sending reports 206 | */ 207 | ajax: function(oParams){ 208 | var sUrl = oParams.url, 209 | method = oParams.method, 210 | params = oParams.params || {}, 211 | sData = '', 212 | bAsync = true, 213 | p, 214 | type = oParams.type || 'json', 215 | headers = oParams.headers || {}; 216 | 217 | /* clean up the '&' garbage */ 218 | if(sData.replace(/\&/g, '') == ''){ 219 | sData = ''; 220 | } 221 | 222 | for(p in params){ 223 | sData += p+'='+params[p] + '&'; 224 | } 225 | 226 | sData = sData.substring(0, sData.length - 1); 227 | 228 | var oBeforeSend = oParams.beforeSend || null, 229 | oErrorCallback = oParams.failure || null, 230 | oSuccessCallback = oParams.success || null, 231 | oXhr = null; 232 | 233 | try{ 234 | if(window.ActiveXObject){ 235 | oXhr = new ActiveXObject('Microsoft.XMLHTTP'); 236 | } 237 | else if(window.XMLHttpRequest){ 238 | oXhr = new XMLHttpRequest(); 239 | } 240 | 241 | } 242 | catch(oError){} 243 | 244 | var bLocal = (window.location.protocol=='file:'); 245 | 246 | if(oXhr){ 247 | var rsc = function(){ 248 | if(oXhr.readyState == 4){ 249 | if(bLocal || (oXhr.status >= 200 && oXhr.status < 300)) { 250 | if(oSuccessCallback){ 251 | switch(type){ 252 | case 'json': 253 | oSuccessCallback(eval( '(' + oXhr.responseText + ')' ), oXhr.status, oXhr, sUrl); 254 | break; 255 | 256 | case 'html': 257 | case 'text': 258 | oSuccessCallback(oXhr.responseText , oXhr.status, oXhr, sUrl); 259 | break; 260 | 261 | default: 262 | throw new Error('this type is not set'); 263 | } 264 | } 265 | } 266 | if(oXhr.status >= 400) { 267 | if (oErrorCallback){ 268 | oErrorCallback(oXhr, oXhr.status, oXhr.statusText, sUrl); 269 | } 270 | } 271 | 272 | oXhr.onreadystatechange = new window.Function; 273 | oXhr = null; 274 | } 275 | }; 276 | 277 | oXhr.onreadystatechange = rsc; 278 | 279 | if(!window.ActiveXObject){ 280 | oXhr.onerror = function(){ 281 | if(oErrorCallback){ 282 | oErrorCallback(oXhr, 0, '', sUrl); 283 | } 284 | }; 285 | } 286 | 287 | var method = method.toUpperCase(); 288 | 289 | if(method === 'GET'){ 290 | if(sData != ''){ 291 | if(sUrl.indexOf('?') == -1){ 292 | sUrl += '?'; 293 | } 294 | sUrl += sData; 295 | } 296 | oXhr.open('GET', sUrl, true); 297 | } 298 | else{ 299 | oXhr.open(method, sUrl, true); 300 | oXhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 301 | 302 | if( oParams.sendJSON ){ 303 | oXhr.setRequestHeader('Content-type', 'application/json'); 304 | } 305 | else{ 306 | oXhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 307 | } 308 | 309 | for(var p in headers){ 310 | oXhr.setRequestHeader(p, headers[p]); 311 | } 312 | } 313 | 314 | if(oBeforeSend){ 315 | oBeforeSend(oXhr); 316 | } 317 | try{ 318 | if( oParams.sendJSON ){ 319 | oXhr.send( JSON.stringify(oParams.params) ); 320 | } 321 | else{ 322 | oXhr.send(sData); 323 | } 324 | 325 | if(!bAsync){ 326 | if(oSuccessCallback){ 327 | switch(type){ 328 | case 'json': 329 | oSuccessCallback(eval( '(' + oXhr.responseText + ')' ), oXhr.status, oXhr, sUrl); 330 | break; 331 | case 'html': 332 | case 'text': 333 | oSuccessCallback(oXhr.responseText , oXhr.status, oXhr, sUrl); 334 | break; 335 | default: 336 | throw new Error('this type is not set'); 337 | } 338 | } 339 | } 340 | } 341 | catch(e){ 342 | if (bLocal){ 343 | if (oErrorCallback){ 344 | oErrorCallback(oXhr, oXhr.status, oXhr.statusText, sUrl); 345 | oXhr.onreadystatechange = new window.Function; 346 | oXhr = null; 347 | } 348 | } 349 | } 350 | } 351 | }, 352 | /* 353 | * method to send customer error message 354 | */ 355 | track: function(msg){ 356 | var me = this, 357 | data = me.getBaseReport(); 358 | 359 | data.errorText = msg; 360 | 361 | if(window.$ && $.ajax){ 362 | $.ajax({ 363 | type: me.method, 364 | url: me.url, 365 | data: data 366 | }); 367 | } 368 | else{ 369 | me.ajax({ 370 | method: me.method, 371 | url: me.url, 372 | params: data 373 | }); 374 | } 375 | }, 376 | /* 377 | * @private 378 | * Getting user browser info 379 | */ 380 | getUserInfo: function(){ 381 | var me = this, 382 | unknown = 'Unknown'; 383 | 384 | // browser 385 | var nVer = navigator.appVersion, 386 | nAgt = navigator.userAgent, 387 | browser = navigator.appName, 388 | version = '' + parseFloat(navigator.appVersion), 389 | majorVersion = parseInt(navigator.appVersion, 10), 390 | nameOffset, verOffset, ix; 391 | 392 | // Opera 393 | if((verOffset = nAgt.indexOf('Opera')) != -1){ 394 | browser = 'Opera'; 395 | version = nAgt.substring(verOffset + 6); 396 | 397 | if((verOffset = nAgt.indexOf('Version')) != -1){ 398 | version = nAgt.substring(verOffset + 8); 399 | } 400 | } 401 | 402 | // Opera Next 403 | if ((verOffset = nAgt.indexOf('OPR')) != -1) { 404 | browser = 'Opera'; 405 | version = nAgt.substring(verOffset + 4); 406 | } 407 | // Edge 408 | else if((verOffset = nAgt.indexOf('Edge')) != -1) { 409 | browser = 'Microsoft Edge'; 410 | version = nAgt.substring(verOffset + 5); 411 | } 412 | // MSIE 413 | else if((verOffset = nAgt.indexOf('MSIE')) != -1) { 414 | browser = 'Microsoft Internet Explorer'; 415 | version = nAgt.substring(verOffset + 5); 416 | } 417 | // Chrome 418 | else if((verOffset = nAgt.indexOf('Chrome')) != -1) { 419 | browser = 'Chrome'; 420 | version = nAgt.substring(verOffset + 7); 421 | } 422 | // Safari 423 | else if((verOffset = nAgt.indexOf('Safari')) != -1) { 424 | browser = 'Safari'; 425 | version = nAgt.substring(verOffset + 7); 426 | if((verOffset = nAgt.indexOf('Version')) != -1) { 427 | version = nAgt.substring(verOffset + 8); 428 | } 429 | } 430 | // Firefox 431 | else if((verOffset = nAgt.indexOf('Firefox')) != -1) { 432 | browser = 'Firefox'; 433 | version = nAgt.substring(verOffset + 8); 434 | } 435 | // MSIE 11+ 436 | else if(nAgt.indexOf('Trident/') != -1) { 437 | browser = 'Microsoft Internet Explorer'; 438 | version = nAgt.substring(nAgt.indexOf('rv:') + 3); 439 | } 440 | // Other browsers 441 | else if((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { 442 | browser = nAgt.substring(nameOffset, verOffset); 443 | version = nAgt.substring(verOffset + 1); 444 | if(browser.toLowerCase() == browser.toUpperCase()) { 445 | browser = navigator.appName; 446 | } 447 | } 448 | // trim the version string 449 | if((ix = version.indexOf(';')) != -1) version = version.substring(0, ix); 450 | if((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix); 451 | if((ix = version.indexOf(')')) != -1) version = version.substring(0, ix); 452 | 453 | majorVersion = parseInt('' + version, 10); 454 | if(isNaN(majorVersion)){ 455 | version = '' + parseFloat(navigator.appVersion); 456 | majorVersion = parseInt(navigator.appVersion, 10); 457 | } 458 | 459 | // mobile version 460 | var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer); 461 | 462 | // cookie 463 | var cookieEnabled = (navigator.cookieEnabled) ? true : false; 464 | 465 | if(typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled){ 466 | document.cookie = 'testcookie'; 467 | cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false; 468 | } 469 | 470 | // system 471 | var os = unknown; 472 | var clientStrings = [ 473 | {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/}, 474 | {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/}, 475 | {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/}, 476 | {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/}, 477 | {s:'Windows Vista', r:/Windows NT 6.0/}, 478 | {s:'Windows Server 2003', r:/Windows NT 5.2/}, 479 | {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/}, 480 | {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/}, 481 | {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/}, 482 | {s:'Windows 98', r:/(Windows 98|Win98)/}, 483 | {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/}, 484 | {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/}, 485 | {s:'Windows CE', r:/Windows CE/}, 486 | {s:'Windows 3.11', r:/Win16/}, 487 | {s:'Android', r:/Android/}, 488 | {s:'Open BSD', r:/OpenBSD/}, 489 | {s:'Sun OS', r:/SunOS/}, 490 | {s:'Linux', r:/(Linux|X11)/}, 491 | {s:'iOS', r:/(iPhone|iPad|iPod)/}, 492 | {s:'Mac OS X', r:/Mac OS X/}, 493 | {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/}, 494 | {s:'QNX', r:/QNX/}, 495 | {s:'UNIX', r:/UNIX/}, 496 | {s:'BeOS', r:/BeOS/}, 497 | {s:'OS/2', r:/OS\/2/}, 498 | {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/} 499 | ]; 500 | 501 | for(var id in clientStrings){ 502 | var cs = clientStrings[id]; 503 | if(cs.r.test(nAgt)){ 504 | os = cs.s; 505 | break; 506 | } 507 | } 508 | 509 | var osVersion = unknown; 510 | 511 | if (/Windows/.test(os)) { 512 | osVersion = /Windows (.*)/.exec(os)[1]; 513 | os = 'Windows'; 514 | } 515 | 516 | switch(os){ 517 | case 'Mac OS X': 518 | osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1]; 519 | break; 520 | case 'Android': 521 | osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1]; 522 | break; 523 | case 'iOS': 524 | osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer); 525 | osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0); 526 | break; 527 | } 528 | 529 | me.isIE = /Microsoft/.test(browser) || /Internet/.test(browser) || /Explorer/.test(browser); 530 | 531 | me.userAgent = navigator.userAgent; 532 | me.os = os +' '+ osVersion; 533 | me.browser = browser + ' ' + majorVersion; 534 | me.mobile = mobile; 535 | }, 536 | /* 537 | * @private 538 | * Getting base report params 539 | */ 540 | getBaseReport: function(){ 541 | var me = this, 542 | _report = me.report, 543 | report = {}; 544 | 545 | if(_report.url) report.userAgent = me.userAgent; 546 | if(_report.url) report.url = location.href; 547 | if(_report.os) report.os = me.os; 548 | if(_report.browser) report.browser = me.browser; 549 | if(_report.mobile) report.mobile = me.mobile; 550 | 551 | return report; 552 | } 553 | }; 554 | 555 | FancyTrack = new FancyTrack(); 556 | 557 | window.FancyTrack = FancyTrack; 558 | 559 | return FancyTrack; 560 | })); -------------------------------------------------------------------------------- /client/fancytrack.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define(function(){return b(a)}):b(a)}(this,function(window){var FancyTrack=function(){};return FancyTrack.prototype={inited:!1,report:{url:!0,errorText:!0,errorName:!0,errorStack:!0,lineNumber:!0,columnNumber:!0,userAgent:!0,browser:!0,os:!0,mobile:!0},consoleText:"%cFancy%cTrack %ccatched %cError%c! Report was sent!",consoleArgs:["color:#A2CFE8;font-size: 14px;font-weight: bold;","color:#088EC7;font-size: 14px;font-weight: bold;","font-weight:bold;color: #515151;font-size: 12px;","color: red;font-weight: bold;font-size: 14px;","font-weight:bold;color: #515151;font-size: 12px;"],method:"POST",url:"/error/",applyConfig:function(a){var b=this;if(a.report)for(var c in a)b.report[c]=a.report[c];for(var c in a)"report"!==c&&(b[c]=a[c])},init:function(a){var b=this;b.inited||(b.applyConfig(a||{}),b.initOnError(),b.inited=!0)},initOnError:function(){var a=this,b=window.onerror;a.getUserInfo(),window.onerror=function(c,d,e,f,g){b&&b.apply(window,[c,d,e,f,g]),g=g||{},window.console&&console.log&&a.consoleText&&(a.isIE?(a.consoleText=a.consoleText.replace(/\%c/g,""),console.log(a.consoleText)):console.log.apply(window,[].concat(a.consoleText).concat(a.consoleArgs)));var h={},i=a.report;if(h=a.getBaseReport(),i.url&&(h.url=location.href),i.errorText&&(h.errorText=c),i.errorName&&(h.errorName=g.name),i.errorMessage&&(h.errorMessage=g.message),i.errorStack&&(h.errorStack=g.stack),i.lineNumber&&(h.lineNumber=e),i.columnNumber&&(h.columnNumber=f),a.params)for(var j in a.params)h[j]=a.params[j];window.$&&$.ajax?$.ajax({type:a.method,url:a.url,data:h}):a.ajax({method:a.method,url:a.url,params:h})}},ajax:function(oParams){var sUrl=oParams.url,method=oParams.method,params=oParams.params||{},sData="",bAsync=!0,p,type=oParams.type||"json",headers=oParams.headers||{};""==sData.replace(/\&/g,"")&&(sData="");for(p in params)sData+=p+"="+params[p]+"&";sData=sData.substring(0,sData.length-1);var oBeforeSend=oParams.beforeSend||null,oErrorCallback=oParams.failure||null,oSuccessCallback=oParams.success||null,oXhr=null;try{window.ActiveXObject?oXhr=new ActiveXObject("Microsoft.XMLHTTP"):window.XMLHttpRequest&&(oXhr=new XMLHttpRequest)}catch(a){}var bLocal="file:"==window.location.protocol;if(oXhr){var rsc=function(){if(4==oXhr.readyState){if((bLocal||oXhr.status>=200&&oXhr.status<300)&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}oXhr.status>=400&&oErrorCallback&&oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null}};oXhr.onreadystatechange=rsc,window.ActiveXObject||(oXhr.onerror=function(){oErrorCallback&&oErrorCallback(oXhr,0,"",sUrl)});var method=method.toUpperCase();if("GET"===method)""!=sData&&(sUrl.indexOf("?")==-1&&(sUrl+="?"),sUrl+=sData),oXhr.open("GET",sUrl,!0);else{oXhr.open(method,sUrl,!0),oXhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),oParams.sendJSON?oXhr.setRequestHeader("Content-type","application/json"):oXhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");for(var p in headers)oXhr.setRequestHeader(p,headers[p])}oBeforeSend&&oBeforeSend(oXhr);try{if(oParams.sendJSON?oXhr.send(JSON.stringify(oParams.params)):oXhr.send(sData),!bAsync&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}}catch(a){bLocal&&oErrorCallback&&(oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null)}}},track:function(a){var b=this,c=b.getBaseReport();c.errorText=a,window.$&&$.ajax?$.ajax({type:b.method,url:b.url,data:c}):b.ajax({method:b.method,url:b.url,params:c})},getUserInfo:function(){var a,b,c,d=this,e="Unknown",f=navigator.appVersion,g=navigator.userAgent,h=navigator.appName,i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10);(b=g.indexOf("Opera"))!=-1&&(h="Opera",i=g.substring(b+6),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))),(b=g.indexOf("OPR"))!=-1?(h="Opera",i=g.substring(b+4)):(b=g.indexOf("Edge"))!=-1?(h="Microsoft Edge",i=g.substring(b+5)):(b=g.indexOf("MSIE"))!=-1?(h="Microsoft Internet Explorer",i=g.substring(b+5)):(b=g.indexOf("Chrome"))!=-1?(h="Chrome",i=g.substring(b+7)):(b=g.indexOf("Safari"))!=-1?(h="Safari",i=g.substring(b+7),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))):(b=g.indexOf("Firefox"))!=-1?(h="Firefox",i=g.substring(b+8)):g.indexOf("Trident/")!=-1?(h="Microsoft Internet Explorer",i=g.substring(g.indexOf("rv:")+3)):(a=g.lastIndexOf(" ")+1)<(b=g.lastIndexOf("/"))&&(h=g.substring(a,b),i=g.substring(b+1),h.toLowerCase()==h.toUpperCase()&&(h=navigator.appName)),(c=i.indexOf(";"))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(" "))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(")"))!=-1&&(i=i.substring(0,c)),j=parseInt(""+i,10),isNaN(j)&&(i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10));var k=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(f),l=!!navigator.cookieEnabled;"undefined"!=typeof navigator.cookieEnabled||l||(document.cookie="testcookie",l=document.cookie.indexOf("testcookie")!=-1);var m=e,n=[{s:"Windows 10",r:/(Windows 10.0|Windows NT 10.0)/},{s:"Windows 8.1",r:/(Windows 8.1|Windows NT 6.3)/},{s:"Windows 8",r:/(Windows 8|Windows NT 6.2)/},{s:"Windows 7",r:/(Windows 7|Windows NT 6.1)/},{s:"Windows Vista",r:/Windows NT 6.0/},{s:"Windows Server 2003",r:/Windows NT 5.2/},{s:"Windows XP",r:/(Windows NT 5.1|Windows XP)/},{s:"Windows 2000",r:/(Windows NT 5.0|Windows 2000)/},{s:"Windows ME",r:/(Win 9x 4.90|Windows ME)/},{s:"Windows 98",r:/(Windows 98|Win98)/},{s:"Windows 95",r:/(Windows 95|Win95|Windows_95)/},{s:"Windows NT 4.0",r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},{s:"Windows CE",r:/Windows CE/},{s:"Windows 3.11",r:/Win16/},{s:"Android",r:/Android/},{s:"Open BSD",r:/OpenBSD/},{s:"Sun OS",r:/SunOS/},{s:"Linux",r:/(Linux|X11)/},{s:"iOS",r:/(iPhone|iPad|iPod)/},{s:"Mac OS X",r:/Mac OS X/},{s:"Mac OS",r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},{s:"QNX",r:/QNX/},{s:"UNIX",r:/UNIX/},{s:"BeOS",r:/BeOS/},{s:"OS/2",r:/OS\/2/},{s:"Search Bot",r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}];for(var o in n){var p=n[o];if(p.r.test(g)){m=p.s;break}}var q=e;switch(/Windows/.test(m)&&(q=/Windows (.*)/.exec(m)[1],m="Windows"),m){case"Mac OS X":q=/Mac OS X (10[\.\_\d]+)/.exec(g)[1];break;case"Android":q=/Android ([\.\_\d]+)/.exec(g)[1];break;case"iOS":q=/OS (\d+)_(\d+)_?(\d+)?/.exec(f),q=q[1]+"."+q[2]+"."+(0|q[3])}d.isIE=/Microsoft/.test(h)||/Internet/.test(h)||/Explorer/.test(h),d.userAgent=navigator.userAgent,d.os=m+" "+q,d.browser=h+" "+j,d.mobile=k},getBaseReport:function(){var a=this,b=a.report,c={};return b.url&&(c.userAgent=a.userAgent),b.url&&(c.url=location.href),b.os&&(c.os=a.os),b.browser&&(c.browser=a.browser),b.mobile&&(c.mobile=a.mobile),c}},FancyTrack=new FancyTrack,window.FancyTrack=FancyTrack,FancyTrack}); -------------------------------------------------------------------------------- /client/fancytrack.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["fancytrack.js"],"names":["global","factory","define","amd","this","window","FancyTrack","prototype","inited","report","url","errorText","errorName","errorStack","lineNumber","columnNumber","userAgent","browser","os","mobile","consoleText","consoleArgs","method","applyConfig","config","me","p","init","initOnError","_onError","onerror","getUserInfo","e","eObject","apply","console","log","isIE","replace","concat","_report","getBaseReport","location","href","name","errorMessage","message","stack","params","$","ajax","type","data","oParams","sUrl","sData","bAsync","headers","substring","length","oBeforeSend","beforeSend","oErrorCallback","failure","oSuccessCallback","success","oXhr","ActiveXObject","XMLHttpRequest","oError","bLocal","protocol","rsc","readyState","status","eval","responseText","Error","statusText","onreadystatechange","Function","toUpperCase","indexOf","open","setRequestHeader","sendJSON","send","JSON","stringify","track","msg","unknown","nVer","navigator","appVersion","nAgt","appName","version","parseFloat","majorVersion","parseInt","nameOffset","verOffset","ix","lastIndexOf","toLowerCase","isNaN","test","cookieEnabled","document","cookie","clientStrings","s","r","id","cs","osVersion","exec"],"mappings":"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"} -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | require('./client/fancytrack.min.js'); 2 | module.exports = FancyTrack; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fancytrack", 3 | "version": "1.0.5", 4 | "description": "JavaScript Error Tracking library from FancyGrid", 5 | "main" : "index.js", 6 | "scripts": { 7 | 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/FancyGrid/FancyTrack.git" 12 | }, 13 | "keywords": [ 14 | "fancytrack", 15 | "track", 16 | "error", 17 | "javascript", 18 | "trackjs", 19 | "html5" 20 | ], 21 | "author": "FancyGrid", 22 | "license": "MIT" 23 | } --------------------------------------------------------------------------------