UNPKG

js-error-bug

Version:

``` npm install js-error-bug ```

729 lines (727 loc) 24.8 kB
!function(e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.jserror = t() : e.jserror = t() }(window, function() { return function(n) { var r = {}; function o(e) { if (r[e]) return r[e].exports; var t = r[e] = { i: e, l: !1, exports: {} }; return n[e].call(t.exports, t, t.exports, o), t.l = !0, t.exports } return o.m = n, o.c = r, o.d = function(e, t, n) { o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n }) }, o.r = function(e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, o.t = function(t, e) { if (1 & e && (t = o(t)), 8 & e) return t; if (4 & e && "object" == typeof t && t && t.__esModule) return t; var n = Object.create(null); if (o.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: t }), 2 & e && "string" != typeof t) for (var r in t) o.d(n, r, function(e) { return t[e] }.bind(null, r)); return n }, o.n = function(e) { var t = e && e.__esModule ? function() { return e.default } : function() { return e }; return o.d(t, "a", t), t }, o.o = function(e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, o.p = "", o(o.s = 0) }([function(e, t, n) { var r = n(1),o = n(7),i = n(9),a = n(10),u = n(12),s = n(14),c = n(15),f = n(16),l = n(17),p = n(18),d = n(19),m = n(20),g = n(21),v = n(22),y = n(23),b = v.getConfig(); r(b, y), o(b, y), i(b, y), a(b, y), u(b, y), s(b, y), c(b), f(b, y), l(b, y), p(b, y), d(b, y), m(b, y), g(b, y), window.jserror = b, e.exports = b }, function(e, t, n) { var i = n(2); e.exports = function(r, o) { "addEventListener" in window && window.addEventListener('unhandledrejection', function(e) { try { var t = { type: "unhandledrejection", name: "unhandledrejection", message: e.reason}; i(t, r, o) } catch (n) {} }) } }, function(e, t, n) { var s = n(3),c = n(4),f = n(5),l = n(6); function r(e, t, n) { var r = t.apikey; if (c.verifyApiKey(r) && t.maxEventNumber && !t.silent && !f(t.silentDev)) { var o; t.maxEventNumber -= 1, o = t.revideo && t.revideo.fetchSequence && t.revideo.fetchSequence(); var i, a = n.getBreadcrumbs(); t.silentPerformance || (i = l.getPerformance()); var u = { notifierVersion: "2.1.2", userAgent: window.navigator.userAgent, locale: window.navigator.language || window.navigator.userLanguage, url: window.location.href, title: document.title, appVersion: t.appversion, apiKey: t.apikey, releaseStage: t.releasestage, metaData: e.metaData || t.metaData, user: e.user || t.user, name: e.name, time: (new Date).getTime(), message: e.message, fileName: e.fileName, lineNumber: e.lineNumber, columnNumber: e.columnNumber, stacktrace: e.stacktrace, type: e.type, severity: e.severity, target: e.target, req: e.req, res: e.res, httpTimeout: e.httpTimeout, breadcrumbs: a, redo: o, performance: i }; u.userAgent && u.userAgent.match(/Googlebot/) || (t.callback && t.callback(u), s.isFiltered(u, t.filters) || c.isSampled(t.sampleRate) && function(e, t) { var n = function(e) { var t; try { t = p(e) } catch (n) { delete e.metaData; try { t = p(e) } catch (r) { return } } return t }(e); if (n) if (window.XMLHttpRequest && window.atob) { var r = new XMLHttpRequest; var origin_data = JSON.parse(n) var bug_keys = Object.keys(origin_data) var bug_data = {} if (origin_data.user.name){ bug_data.user_id = origin_data.user.name } for (var i=0;i<bug_keys.length;i++){ var iVal = origin_data[bug_keys[i]] if (iVal){ if (typeof(iVal) === 'string'){ bug_data[bug_keys[i]] = iVal } else { bug_data[bug_keys[i]] = JSON.stringify(iVal) } } } var push_data = { "__topic__": bug_data.type, "__source__": "leads-app", "__logs__": [bug_data], "__tags__": { "app_user_id": bug_data.user_id, "app_version": bug_data.appVersion, "type": bug_data.type } } r.sendByJserror = !0, r.open("POST", t),r.setRequestHeader("x-log-apiversion","0.6.0"), r.setRequestHeader("x-log-bodyrawsize","1234"), r.setRequestHeader("Content-Type", "application/json"), r.send(JSON.stringify(push_data)) } else { (new Image).src = t + "?event=" + encodeURIComponent(n) } }(u, t.notifierUrl)) } } function p(e) { if ("undefined" != typeof JSON) return JSON.stringify(e); if (e instanceof Array) { for (var t = [], n = 0; n < e.length; n++) t.push(p(e[n])); return "[" + t.join(",") + "]" } var r = []; for (var o in e) if (e.hasOwnProperty(o)) { var i = '"' + o + '":', a = e[o]; a && ("object" == typeof a ? i += p(a) : "number" == typeof a ? i += a : i = i + '"' + a.replace(/\n/g, "\\n") + '"', r.push(i)) } return "{" + r.join(",") + "}" } e.exports = function(e, t, n) { t.revideo ? setTimeout(function() { r(e, t, n) }, 1e3) : r(e, t, n) } }, function(e, t) { function r(e, t) { if (!e) return !1; if (!t) return !1; if (Object.keys && !Object.keys(t).length) return !1; for (var n in t) if (t.hasOwnProperty(n)) if (t[n].constructor === RegExp) { if (!t[n].test(e[n])) return !1 } else if (t[n].constructor === Object) { if (!r(e[n], t[n])) return !1 } else { if (t[n].constructor !== String || "inexistence" !== t[n]) return !1; if (e.hasOwnProperty(n)) return !1 } return !0 } t.isFiltered = function(e, t) { if (!t || !t.length) return !1; for (var n = 0; n < t.length; n++) if (r(e, t[n])) return !0; return !1 } }, function(e, t) { t.isSampled = function(e) { return !e && 0 !== e || (e = parseFloat(e), !! isNaN(e) || Math.random() <= e) }, t.verifyApiKey = function(e, t) { return e ? !! e.match(/^[0-9a-z]{5,60}$/i) || (t || console.error("Jserror: apikey Format error"), !1) : (t || console.error("Jserror: Please configure apikey"), !1) } }, function(e, t) { e.exports = function(e) { return !(!e || !(t = window.location.href) || !/^http:\/\/localhost/.test(t) && !/^http:\/\/(\d{1,3}\.){3}\d{1,3}/.test(t)); var t } }, function(e, t) { t.getPerformance = function() { if ("performance" in window && "getEntriesByType" in performance) return { navigation: performance.getEntriesByType("navigation") } } }, function(e, t, n) { var f = n(2),l = n(8); e.exports = function(s, c) { window.onerror = function(e, t, n, r, o) { var i; void 0 === r && window.event && (r = window.event.errorCharacter), i = t && t !== window.location.href ? t : null; var a = l(o), u = { message: e, lineNumber: n, columnNumber: r, fileName: i || a && a.fileName, name: a && a.name || "uncaught error", stacktrace: o && o.stack || function() { var e, t, n = []; try { t = arguments.callee.caller.caller } catch (o) { t = "" } for (; t && n.length < 10;) { var r = t.toString().match(/function\s*([\w\_$]+)?\s*\(/i); e = r && r[1] || "[anonymous]", n.push(e), t = t.caller } return "generated-stack:\n" + n.join("\n") }(), severity: "error", type: "uncaught" }; return f(u, s, c), !1 } } }, function(e, t) { e.exports = function(e) { if (!e) return null; var t = {}; return window.XMLHttpRequest ? t = { name: e.name, message: e.message, fileName: e.fileName || e.sourceURL, lineNumber: e.lineNumber || e.line, columnNumber: e.columnNumber || e.column } : t.message = e.message, t } }, function(e, t, n) { var s = n(2); e.exports = function(a, u) { window.addEventListener && window.addEventListener("error", function(e) { try { if (a.silentResource || e.message) return; var t, n = (t = e.target ? e.target : e.srcElement) && t.outerHTML; n && 200 < n.length && (n = n.slice(0, 200)); var r = { type: "resourceError", target: { outerHTML: n, src: t && t.src, tagName: t && t.tagName, id: t && t.id, className: t && t.className, name: t && t.name, type: t && t.type, XPath: function(e) { for (var t = []; e && e.nodeType === Node.ELEMENT_NODE; e = e.parentNode) { var n, r = 0, o = !1; for (n = e.previousSibling; n; n = n.previousSibling) n.nodeType !== Node.DOCUMENT_TYPE_NODE && n.nodeName === e.nodeName && ++r; for (n = e.nextSibling; n && !o; n = n.nextSibling) n.nodeName === e.nodeName && (o = !0); var i = (e.prefix ? e.prefix + ":" : "") + e.localName, a = r || o ? "[" + (r + 1) + "]" : ""; t.splice(0, 0, i + a) } return t.length ? "/" + t.join("/") : null }(t), selector: function(e) { for (var t = []; e.parentNode;) { if (e.id) { t.unshift("#" + e.id); break } if (e === e.ownerDocument.documentElement) t.unshift(e.tagName); else { for (var n = 1, r = e; r.previousElementSibling; r = r.previousElementSibling, n++); t.unshift(e.tagName + ":nth-child(" + n + ")") } e = e.parentNode } return t.join(" > ") }(t), timeStamp: e.timeStamp } }; if (t.src === window.location.href) return; if (t.src && t.src.match(/.*\/(.*)$/) && !t.src.match(/.*\/(.*)$/)[1]) return; if (r.target.src && window.XMLHttpRequest) { var o = new XMLHttpRequest; o.sendByJserror = !0, o.open("HEAD", r.target.src), o.send(), o.onload = function(e) { 200 !== e.target.status && (r.target.status = e.target.status, r.target.statusText = e.target.statusText), s(r, a, u) } } } catch (i) {} }, !0) } }, function(e, t, n) { var l = n(11); e.exports = function(c, f) { if (window.fetch) { var t = window.fetch; window.fetch = function(e, u) { var s = (new Date).getTime(); return t.apply(this, arguments).then(function(e) { return function(e) { try { var t = (new Date).getTime() - s, n = u && u.method || "GET", r = e.url, o = e.status, i = e.statusText; !function(e, t, n, r, o) { if (!c.silentHttp && (l.ifReportHttpError(n, t) || l.ifReportHttpTimout(o, c.httpTimeout))) { var i, a = { method: e, url: t }, u = { status: n, statusText: r, elapsedTime: o }; i = l.ifReportHttpError(n, t) ? "httpError" : "httpTimeout", l.sendHttpErrorToJserror(i, a, u, c, f) } }(n, r, o, i, t), function(e, t, n, r, o, i) { if (!c.silentBehavior) { var a = { type: "fetch", page: { url: window.location.href, title: document.title }, detail: { method: e, url: t, status: n, statusText: r }, elapsedTime: o, time: i }; f.addBreadcrumb(a) } }(n, r, o, i, t, s) } catch (a) {} }(e), e }) } } } }, function(e, t, n) { var a = n(2); t.ifReportHttpTimout = function(e, t) { return "number" == typeof t && t < e }, t.ifReportHttpError = function(e, t) { return !(0 === e && /^file:\/\/\//.test(t) || /^2\d\d$/.test(e)) }, t.sendHttpErrorToJserror = function(e, t, n, r, o) { var i = { type: e, req: t, res: n }; "number" == typeof r.httpTimeout && (i.httpTimeout = r.httpTimeout), a(i, r, o) } }, function(e, t, n) { var m = n(13), g = n(11); e.exports = function(p, d) { if (window.XMLHttpRequest && window.XMLHttpRequest.prototype) { var r = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(e, t) { try { this.jserrorTemp = { method: e, url: t, startTime: (new Date).getTime() } } catch (n) {} r && r.apply(this, arguments) }; var o = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(e) { try { if (!this.sendByJserror) { var t = this; t.jserrorTemp.jserrorHttpRecorded = !1; var n = t.onloadend; t.onloadend = function() { !function(e, t) { try { var n, r = (new Date).getTime(), o = e.jserrorTemp.startTime, i = r - o, a = e.jserrorTemp.method, u = e.responseURL || e.jserrorTemp.url, s = e.status, c = e.statusText, f = e.response; p.setHttpBody && (n = m.copyWithoutPrivacy(t)), e.jserrorTemp.jserrorHttpRecorded || (function(e, t, n, r, o, i, a) { if (!p.silentHttp && (g.ifReportHttpError(r, t) || g.ifReportHttpTimout(a, p.httpTimeout))) { var u, s = { method: e, url: t, body: n }, c = { status: r, statusText: o, response: i, elapsedTime: a }; u = g.ifReportHttpError(r, t) ? "httpError" : "httpTimeout", g.sendHttpErrorToJserror(u, s, c, p, d) } }(a, u, n, s, c, f, i), function(e, t, n, r, o, i) { if (!p.silentBehavior) { var a = { type: "XMLHttpRequest", page: { url: window.location.href }, detail: { method: e, url: t, status: n, statusText: r }, elapsedTime: o, time: i }; d.addBreadcrumb(a) } }(a, u, s, c, i, o), e.jserrorTemp.jserrorHttpRecorded = !0) } catch (l) {} }(t, e), n && n.apply(this, arguments) } } } catch (r) {} o && o.apply(this, arguments) } } } }, function(e, t) { t.copyWithoutPrivacy = function(e) { try { var t = e; return "string" == typeof e && (t = JSON.parse(e)).password && (t.password = "Jserror: deleted for protectiong privary"), t } catch (n) { return e } }, t.copyWithoutCircle = function(e) { return e && "object" == typeof e && function(e) { try { JSON.stringify(e) } catch (t) { return !!(t.message.includes("Converting circular structure to JSON") || t.message.includes("JSON.stringify cannot serialize cyclic structures") || t.message.includes("cyclic object value") || t.message.includes("Circular reference in value argument not supported") || t.message.includes("循环引用")) } return !1 }(e) ? "entries" in Object ? function r(e, o) { try { var i = {}; return Object.entries(e).forEach(function(e) { var t = e[0], n = e[1]; "object" == typeof n && null !== n ? o.has(n) ? i[t] = "property removed because of circular structure" : 10 < o.size ? i[t] = "property removed to avoid deep recursion" : (o.add(n), i[t] = r(n, o)) : i[t] = n }), i } catch (t) { return e } }(e, new Set([e])) : {} : e } }, function(e, t, n) { var a = n(2); e.exports = function(o, i) { try { if (o.silentWebsocket) return; if (!("WebSocket" in window)) return; var t = Object.getOwnPropertyDescriptor(WebSocket.prototype, "onerror"); if (!t) return; if (!t.configurable) return; Object.defineProperty(WebSocket.prototype, "onerror", { set: function() { if (o.silentWebsocket) return t.set.apply(this, arguments); try { var r = arguments[0]; return t.set.apply(this, [function(e) { try { var t = { type: "websocketError", target: { type: "onerror", url: e.target.url, timeStamp: e.timeStamp } }; a(t, o, i), "function" == typeof r && r.apply(this, arguments) } catch (n) { "function" == typeof r && r.apply(this, arguments) } }]) } catch (e) { return t.set.apply(this, arguments) } } }) } catch (e) {} } }, function(e, t, n) { n(2), n(4), e.exports = function(o) { o.init = function(e) { for (var t = 0, n = ["apikey", "appversion", "releasestage", "user", "metaData", "callback", "setHttpBody", "httpTimeout", "filters", "silent", "silentDev", "silentResource", "silentHttp", "silentWebsocket", "silentConsole", "silentPerformance", "sampleRate", "domain", "notifierUrl"]; t < n.length; t++) { var r = n[t]; e[r] && (o[r] = e[r]) } } } }, function(e, t, n) { var a = n(2), u = n(8); e.exports = function(o, i) { o.notifyError = function(e, t) { if (e) { window.console && console.error(e); var n = u(e), r = { name: n.name || t && t.name || "caught error", message: n.message || t && t.message, stacktrace: e.stack, fileName: n.fileName, lineNumber: n.lineNumber, columnNumber: n.columnNumber, severity: t && t.severity || "error", type: "caught", user: t && t.user, metaData: t && t.metaData }; a(r, o, i) } } } }, function(e, t, n) { var u = n(2), s = n(4); e.exports = function(i, a) { i.notify = function(e, t, n) { if (e) { var r = { message: t || n && n.message, name: e || n && n.name, severity: n && n.message || "warning", stacktrace: function() { var e; try { throw new Error("") } catch (t) { e = t.stack } if (e) return "generated-stack:\n" + (e = e.replace(/(.*?)jserror(.*?)\.js(.*)\n?/gm, "")).replace(/^Error\n/g, "") }(), type: "notification", user: n && n.user, metaData: n && n.metaData }, o = i.apikey; return s.verifyApiKey(o, !0) ? (u(r, i, a), "jserror.com" === location.host || "www.jserror.com" === location.host ? "Jserror does not support external service temporarily" : "External service is not supported temporarily") : o ? "apikey Format error" : "please configure apikey" } } } }, function(e, t, n) { var a = n(2), u = n(4); e.exports = function(o, i) { o.test = function(e, t) { var n = { name: e || "Test", message: t || "Hello, Jserror!", severity: "test", type: "test" }, r = o.apikey; return u.verifyApiKey(r, !0) ? (a(n, o, i), "jserror.com" === location.host || "www.jserror.com" === location.host ? "Jserror does not support external service temporarily" : "External service is not supported temporarily") : r ? "apikey Format error" : "please configure apikey" } } }, function(e, t) { e.exports = function(o, i) { function e(e) { var t, n = (t = e.target ? e.target : e.srcElement) && t.outerHTML; n && 200 < n.length && (n = n.slice(0, 200)); var r = { type: "click", page: { url: window.location.href, title: document.title }, detail: { outerHTML: n, tagName: t && t.tagName, id: t && t.id, className: t && t.className, name: t && t.name }, time: (new Date).getTime() }; i.addBreadcrumb(r, o.silentBehavior) } window.addEventListener ? window.addEventListener("click", e, !0) : document.attachEvent("onclick", e) } }, function(e, t) { e.exports = function(r, o) { var i = { url: window.location.href, title: "" }; document.addEventListener ? document.addEventListener("DOMContentLoaded", function() { i = { url: window.location.href, title: document.title } }) : document.attachEvent("onreadystatechange", function() { i = { url: window.location.href, title: document.title } }); var t = window.onpopstate; window.onpopstate = function() { var e = { url: window.location.href }; if (i.title || (i.title = document.title), i.url !== e.url && u(i, e), t) return t.apply(this, arguments) }; var n = window.history.pushState; n && (window.history.pushState = function() { i = { url: window.location.href, title: document.title }; var e = {}; if (3 === arguments.length && (e.url = arguments[2]), i.url !== e.url && u(i, e), n) return n.apply(this, arguments) }); var a = window.onhashchange; function u(e, t) { var n = { type: "navigation", detail: { from: e, to: i = t }, time: (new Date).getTime() }; JSON.stringify(n, null, 4), o.addBreadcrumb(n, r.silentBehavior) } window.onhashchange, window.onhashchange = function() { var e = { url: window.location.href, title: document.title }; if (i.url !== e.url && u(i, e), a) return a.apply(this, arguments) } } }, function(e, t, n) { var s = n(13); e.exports = function(a, u) { function e(o) { var i = console[o]; console[o] = function() { try { var e = { type: "console", page: { url: window.location.href, title: document.title }, detail: { level: o, arguments: (t = arguments, t[0] instanceof Error ? [].slice.apply(t).join(" ") : s.copyWithoutCircle(t)) }, time: (new Date).getTime() }; a.silentConsole || u.addBreadcrumb(e, a.silentBehavior) } catch (r) {} var t; if ("function" == typeof i) if (i.apply) i.apply(console, arguments); else { var n = Array.prototype.slice.apply(arguments).join(" "); i(n) } } } for (var t = ["log", "warn", "debug", "info"], n = {}, r = 0; r < t.length; r++) window.console && (n[t[r]] = console[t[r]], a.silentConsole || e(t[r])); document.addEventListener && document.addEventListener("DOMContentLoaded", function() { for (var e = 0; e < t.length; e++) window.console && a.silentConsole && n[t[e]] && (console[t[e]] = n[t[e]]) }) } }, function(e, t) { var n = function() { var e = document.currentScript; if (!e) { var t = document.scripts; e = t[t.length - 1] } return e }(); t.getConfig = function() { var e = {}; return e.silent = n.getAttribute("silent") || !1, "false" === e.silent && (e.silent = !1), e.maxEventNumber = n.getAttribute("maxEventNumber") || n.getAttribute("maxeventnumber") || 10, e.setHttpBody = n.getAttribute("setHttpBody") || n.getAttribute("sethttpbody") || !1, "false" === e.setHttpBody && (e.setHttpBody = !1), e.silentResource = n.getAttribute("silentResource") || n.getAttribute("silentresource") || !1, "false" === e.silentResource && (e.silentResource = !1), e.silentWebsocket = n.getAttribute("silentWebsocket") || n.getAttribute("silentWebsocket") || !1, "false" === e.silentWebsocket && (e.silentWebsocket = !1), e.silentHttp = n.getAttribute("silentHttp") || n.getAttribute("silenthttp") || !1, "false" === e.silentHttp && (e.silentHttp = !1), e.silentConsole = n.getAttribute("silentConsole") || n.getAttribute("silentconsole") || !1, "false" === e.silentConsole && (e.silentConsole = !1), e.sampleRate = n.getAttribute("sampleRate") || n.getAttribute("samplerate"), e.silentBehavior = n.getAttribute("silentBehavior") || n.getAttribute("silentbehavior") || !1, "false" === e.silentBehavior && (e.silentBehavior = !1), e.silentPerformance = n.getAttribute("silentPerformance") || n.getAttribute("silentperformance") || !1, "false" === e.silentPerformance && (e.silentPerformance = !1), e.silentDev = n.getAttribute("silentDev") || n.getAttribute("silentdev") || !1, "false" === e.silentDev && (e.silentDev = !1), e.apikey = n.getAttribute("apikey"), e.appversion = n.getAttribute("appversion"), e.releasestage = n.getAttribute("releasestage"), e.notifierUrl = n.getAttribute("notifierUrl") || "http://www.jserror.com/", e } }, function(e, t) { var n = [], r = 0; t.addBreadcrumb = function(e, t) { t || (n[r] = e, 20 == ++r && (r = 0)) }, t.getBreadcrumbs = function() { return n } }]) });