@honeybadger-io/js
Advanced tools
Comparing version 3.0.0-alpha.4 to 3.0.0-alpha.5
@@ -27,2 +27,3 @@ // Type definitions for honeybadger.js | ||
disabled: boolean | ||
debug: boolean | ||
reportData: boolean | ||
@@ -33,5 +34,7 @@ breadcrumbsEnabled: boolean | { dom: boolean, network: boolean, navigation: boolean, console: boolean } | ||
ignorePatterns: RegExp[] | ||
logger: Logger, | ||
async: boolean, | ||
maxErrors: number, | ||
logger: Logger | ||
async: boolean | ||
maxErrors: number | ||
onerror: boolean | ||
onunhandledrejection: boolean | ||
[x: string]: unknown | ||
@@ -38,0 +41,0 @@ } |
@@ -328,10 +328,17 @@ (function (global, factory) { | ||
} | ||
function logger() { | ||
function log(method) { | ||
function logger(client) { | ||
var log = function (method) { | ||
return function () { | ||
var args = Array.prototype.slice.call(arguments); | ||
var _a; | ||
var args = []; | ||
for (var _i = 0; _i < arguments.length; _i++) { | ||
args[_i] = arguments[_i]; | ||
} | ||
if (method === 'debug' && !client.config.debug) { | ||
return; | ||
} | ||
args.unshift('[Honeybadger]'); | ||
console[method].apply(console, args); | ||
(_a = client.config.logger)[method].apply(_a, args); | ||
}; | ||
} | ||
}; | ||
return { | ||
@@ -385,45 +392,2 @@ log: log('log'), | ||
} | ||
function envVal(key) { | ||
var _a; | ||
var val = (_a = getProcess().env[key.toUpperCase()]) === null || _a === void 0 ? void 0 : _a.trim(); | ||
if (!val) { | ||
return null; | ||
} | ||
return val; | ||
} | ||
function envBoolean(key, fallback) { | ||
if (fallback === void 0) { fallback = false; } | ||
var val = envVal(key); | ||
if (val === 'false' || val === '0') { | ||
return false; | ||
} | ||
if (val === 'true' || val === '1') { | ||
return true; | ||
} | ||
return fallback; | ||
} | ||
function envNumber(key) { | ||
var val = envVal(key); | ||
if (!val) { | ||
return null; | ||
} | ||
return parseInt(val); | ||
} | ||
function envList(key) { | ||
var val = envVal(key); | ||
if (!val) { | ||
return null; | ||
} | ||
return val.split(/\s*,\s*/).map(function (v) { return v.trim(); }); | ||
} | ||
function getProcess() { | ||
if (typeof process !== 'undefined') { | ||
return process; | ||
} | ||
else { | ||
return { | ||
env: {} | ||
}; | ||
} | ||
} | ||
@@ -433,3 +397,3 @@ var notifier = { | ||
url: 'https://github.com/honeybadger-io/honeybadger-js', | ||
version: '3.0.0-alpha.4' | ||
version: '3.0.0-alpha.5' | ||
}; | ||
@@ -444,3 +408,4 @@ var Client = /** @class */ (function () { | ||
this.__afterNotifyHandlers = []; | ||
this.config = __assign({ apiKey: envVal('HONEYBADGER_API_KEY'), environment: envVal('HONEYBADGER_ENVIRONMENT') || envVal('NODE_ENV'), projectRoot: envVal('HONEYBADGER_PROJECT_ROOT'), component: envVal('HONEYBADGER_COMPONENT'), action: envVal('HONEYBADGER_ACTION'), revision: envVal('HONEYBADGER_REVISION'), reportData: envBoolean('HONEYBADGER_REPORT_DATA', null), breadcrumbsEnabled: envBoolean('HONEYBADGER_BREADCRUMBS_ENABLED', true), maxBreadcrumbs: envNumber('HONEYBADGER_MAX_BREADCRUMBS') || 40, maxObjectDepth: envNumber('HONEYBADGER_MAX_OBJECT_DEPTH') || 8, ignorePatterns: [], logger: logger(), developmentEnvironments: envList('HONEYBADGER_DEVELOPMENT_ENVIRONMENTS') || ['dev', 'development', 'test'], disabled: false, __plugins: [] }, opts); | ||
this.config = __assign({ apiKey: null, environment: null, projectRoot: null, component: null, action: null, revision: null, reportData: null, breadcrumbsEnabled: true, maxBreadcrumbs: 40, maxObjectDepth: 8, ignorePatterns: [], logger: console, developmentEnvironments: ['dev', 'development', 'test'], disabled: false, debug: false, __plugins: [] }, opts); | ||
this.logger = logger(this); | ||
} | ||
@@ -492,11 +457,11 @@ Client.prototype.factory = function (_opts) { | ||
if (!this.config.apiKey) { | ||
this.config.logger.warn('Unable to send error report: no API key has been configured'); | ||
this.logger.warn('Unable to send error report: no API key has been configured'); | ||
return false; | ||
} | ||
if (this.config.disabled) { | ||
this.config.logger.warn('Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)'); | ||
this.logger.warn('Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)'); | ||
return false; | ||
} | ||
if (!this.__reportData()) { | ||
this.config.logger.debug('Dropping notice: honeybadger.js is in development mode'); | ||
this.logger.debug('Dropping notice: honeybadger.js is in development mode'); | ||
return false; | ||
@@ -781,5 +746,5 @@ } | ||
var onerror = function (msg, url, line, col, err) { | ||
client.config.logger.debug('window.onerror callback invoked', arguments); | ||
client.logger.debug('window.onerror callback invoked', arguments); | ||
if (ignoreOnError > 0) { | ||
client.config.logger.debug('Ignoring window.onerror (error likely reported earlier)', arguments); | ||
client.logger.debug('Ignoring window.onerror (error likely reported earlier)', arguments); | ||
ignoreOnError -= 1; | ||
@@ -793,3 +758,3 @@ return; | ||
// See https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onerror#Notes | ||
client.config.logger.info('Ignoring cross-domain script error: enable CORS to track these types of errors', arguments); | ||
client.logger.info('Ignoring cross-domain script error: enable CORS to track these types of errors', arguments); | ||
return; | ||
@@ -841,3 +806,3 @@ } | ||
function onunhandledrejection(promiseRejectionEvent) { | ||
client.config.logger.debug('window.onunhandledrejection callback invoked', arguments); | ||
client.logger.debug('window.onunhandledrejection callback invoked', arguments); | ||
if (!client.config.onunhandledrejection) { | ||
@@ -1187,3 +1152,3 @@ return; | ||
// Ignore 'Permission denied to access property "handleEvent"' errors. | ||
client.config.logger.error(e); | ||
client.logger.error(e); | ||
} | ||
@@ -1209,3 +1174,3 @@ return original.call(this, type, client.__wrap(listener, wrapOpts), useCapture, wantsUntrusted); | ||
if (opts === void 0) { opts = {}; } | ||
var _this = _super.call(this, __assign({ async: envBoolean('HONEYBADGER_ASYNC', true), maxErrors: envNumber('HONEYBADGER_MAX_ERRORS'), projectRoot: envVal('HONEYBADGER_PROJECT_ROOT') || (window.location.protocol + '//' + window.location.host) }, opts)) || this; | ||
var _this = _super.call(this, __assign({ async: true, maxErrors: null, projectRoot: window.location.protocol + '//' + window.location.host }, opts)) || this; | ||
_this.__errorsSent = 0; | ||
@@ -1216,3 +1181,3 @@ _this.__lastWrapErr = undefined; | ||
if (_this.__exceedsMaxErrors()) { | ||
_this.config.logger.debug('Dropping notice: max errors exceeded', notice); | ||
_this.logger.debug('Dropping notice: max errors exceeded', notice); | ||
return false; | ||
@@ -1275,3 +1240,3 @@ } | ||
runAfterNotifyHandlers(notice, handlers, new Error("Bad HTTP response: " + x_1.status)); | ||
_this.config.logger.debug("Unable to send error report: " + x_1.status + ": " + x_1.statusText, x_1, notice); | ||
_this.logger.debug("Unable to send error report: " + x_1.status + ": " + x_1.statusText, x_1, notice); | ||
return; | ||
@@ -1282,3 +1247,3 @@ } | ||
}), handlers); | ||
_this.config.logger.debug('Error report sent', notice); | ||
_this.logger.debug('Error report sent', notice); | ||
}; | ||
@@ -1288,3 +1253,3 @@ } | ||
runAfterNotifyHandlers(notice, handlers, err); | ||
this.config.logger.error('Unable to send error report: error while initializing request', err, notice); | ||
this.logger.error('Unable to send error report: error while initializing request', err, notice); | ||
} | ||
@@ -1291,0 +1256,0 @@ return true; |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Honeybadger=t()}(this,function(){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var r=function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o="<unknown>";function t(e){return e.split("\n").reduce(function(e,t){t=function(e){var t=i.exec(e);if(!t)return null;var n=t[2]&&0===t[2].indexOf("native"),r=t[2]&&0===t[2].indexOf("eval"),e=a.exec(t[2]);r&&null!=e&&(t[2]=e[1],t[3]=e[2],t[4]=e[3]);return{file:n?null:t[2],methodName:t[1]||o,arguments:n?[t[2]]:[],lineNumber:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}(t)||function(e){e=c.exec(e);return e?{file:e[2],methodName:e[1]||o,arguments:[],lineNumber:+e[3],column:e[4]?+e[4]:null}:null}(t)||function(e){var t=s.exec(e);if(!t)return null;var n=t[3]&&-1<t[3].indexOf(" > eval"),e=u.exec(t[3]);n&&null!=e&&(t[3]=e[1],t[4]=e[2],t[5]=null);return{file:t[3],methodName:t[1]||o,arguments:t[2]?t[2].split(","):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}(t)||function(e){e=d.exec(e);return e?{file:e[2],methodName:e[1]||o,arguments:[],lineNumber:+e[3],column:e[4]?+e[4]:null}:null}(t)||function(e){e=f.exec(e);return e?{file:e[3],methodName:e[1]||o,arguments:[],lineNumber:+e[4],column:e[5]?+e[5]:null}:null}(t);return t&&e.push(t),e},[])}var i=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/\((\S*)(?::(\d+))(?::(\d+))\)/;var c=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,u=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;var f=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;var d=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function l(e,t){var n,r={};for(n in e)r[n]=e[n];for(n in t)r[n]=t[n];return r}function p(e,t){var n=l(e,t);return e.context&&t.context&&(n.context=l(e.context,t.context)),n}function h(e,t,n){void 0===n&&(n=void 0);for(var r=0,o=t.length;r<o;r++)t[r](n,e);return 1}function m(e){if("object"!=typeof e)return{};var t,n={};for(t in e)n[t]=e[t];return n}function g(e,c){void 0===c&&(c=8);var s=[];return function t(e,n){if(void 0===n&&(n=0),c<=n)return"[DEPTH]";if(/function|symbol/.test(typeof(r=e))||null===r||"object"==typeof r&&void 0===r.hasOwnProperty)return Object.prototype.toString.call(e);var r;if(function(e){if(e&&"object"==typeof e){for(var t=0;t<s.length;t++)if(s[t]===e)return 1;s.push(e)}}(e))return"[RECURSION]";if(Array.isArray(e))return e.map(function(e){return t(e,n+1)});if("object"!=typeof e)return e;var o,i={};for(o in e){var a=e[o];Object.prototype.hasOwnProperty.call(e,o)&&null!=o&&null!=a&&(i[o]=t(a,n+1))}return i}(e)}function _(e){return e?"[object Error]"===Object.prototype.toString.call(e)?l(e,{name:e.name,message:e.message,stack:e.stack}):"object"==typeof e?m(e):{message:String(e)}:{}}function y(e,t,n){if(e&&t&&n&&t in e){for(var r=e[t];r&&r.__hb_original;)r=r.__hb_original;e[t]=n(r),e[t].__hb_original=r}}function b(e){e=null===(e=("undefined"!=typeof process?process:{env:{}}).env[e.toUpperCase()])||void 0===e?void 0:e.trim();return e||null}function v(e,t){void 0===t&&(t=!1);e=b(e);return"false"!==e&&"0"!==e&&("true"===e||"1"===e||t)}function E(e){e=b(e);return e?parseInt(e):null}var w={name:"honeybadger-js",url:"https://github.com/honeybadger-io/honeybadger-js",version:"3.0.0-alpha.4"},e=(N.prototype.factory=function(e){throw new Error("Must implement __factory in subclass")},N.prototype.getVersion=function(){return w.version},N.prototype.configure=function(e){var t,n=this;for(t in void 0===e&&(e={}),e)this.config[t]=e[t];return this.__pluginsExecuted||(this.__pluginsExecuted=!0,this.config.__plugins.forEach(function(e){return e.load(n)})),this},N.prototype.beforeNotify=function(e){return this.__beforeNotifyHandlers.push(e),this},N.prototype.afterNotify=function(e){return this.__afterNotifyHandlers.push(e),this},N.prototype.setContext=function(e){return"object"==typeof e&&(this.__context=l(this.__context,e)),this},N.prototype.resetContext=function(e){return this.__context="object"==typeof e?l({},e):{},this},N.prototype.notify=function(e,t,n){return void 0===t&&(t=void 0),void 0===n&&(n=void 0),this.config.apiKey?this.config.disabled?(this.config.logger.warn("Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)"),!1):this.__reportData()?(e=_(e),t&&"object"!=typeof t&&(t={name:String(t)}),t&&(e=p(e,t)),"object"==typeof n&&(e=p(e,n)),!function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return;return 1}(e)&&(!!function(e,t){for(var n=0,r=t.length;n<r;n++)if(!1===(0,t[n])(e))return;return 1}(e=l(e,{name:e.name||"Error",context:l(this.__context,e.context),projectRoot:e.projectRoot||this.config.projectRoot,environment:e.environment||this.config.environment,component:e.component||this.config.component,action:e.action||this.config.action,revision:e.revision||this.config.revision}),this.__beforeNotifyHandlers)&&(r=e,n=this.config.ignorePatterns,(!Array.isArray(n)||!n.some(function(e){return e.test(r.message)}))&&(this.addBreadcrumb("Honeybadger Notice",{category:"notice",metadata:{message:e.message,name:e.name,stack:e.stack}}),e.__breadcrumbs=this.config.breadcrumbsEnabled?this.__breadcrumbs.slice():[],this.__send(e))))):(this.config.logger.debug("Dropping notice: honeybadger.js is in development mode"),!1):(this.config.logger.warn("Unable to send error report: no API key has been configured"),!1);var r},N.prototype.addBreadcrumb=function(e,t){if(this.config.breadcrumbsEnabled){var n=m((t=t||{}).metadata),r=t.category||"custom",t=(new Date).toISOString();this.__breadcrumbs.push({category:r,message:e,metadata:n,timestamp:t});t=this.config.maxBreadcrumbs;return this.__breadcrumbs.length>t&&(this.__breadcrumbs=this.__breadcrumbs.slice(this.__breadcrumbs.length-t)),this}},N.prototype.__reportData=function(){return null!==this.config.reportData?this.config.reportData:!(this.config.environment&&this.config.developmentEnvironments.includes(this.config.environment))},N.prototype.__send=function(e){throw new Error("Must implement send in subclass")},N.prototype.__buildPayload=function(e){return{notifier:w,breadcrumbs:{enabled:!!this.config.breadcrumbsEnabled,trail:e.__breadcrumbs||[]},error:{class:e.name,message:e.message,backtrace:function(e){if("string"!=typeof e)return[];try{return t(e).map(function(e){return{file:e.file,method:e.methodName,number:e.lineNumber,column:e.column}})}catch(e){return[]}}(e.stack),raw_backtrace:e.stack,fingerprint:e.fingerprint},request:{url:e.url,component:e.component,action:e.action,context:e.context,cgi_data:e.cgiData||{},params:e.params},server:{project_root:e.projectRoot,environment_name:e.environment,revision:e.revision}}},N);function N(e){var t;function n(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift("[Honeybadger]"),console[t].apply(console,e)}}void 0===e&&(e={}),this.__pluginsExecuted=!1,this.__context={},this.__breadcrumbs=[],this.__beforeNotifyHandlers=[],this.__afterNotifyHandlers=[],this.config=r({apiKey:b("HONEYBADGER_API_KEY"),environment:b("HONEYBADGER_ENVIRONMENT")||b("NODE_ENV"),projectRoot:b("HONEYBADGER_PROJECT_ROOT"),component:b("HONEYBADGER_COMPONENT"),action:b("HONEYBADGER_ACTION"),revision:b("HONEYBADGER_REVISION"),reportData:v("HONEYBADGER_REPORT_DATA",null),breadcrumbsEnabled:v("HONEYBADGER_BREADCRUMBS_ENABLED",!0),maxBreadcrumbs:E("HONEYBADGER_MAX_BREADCRUMBS")||40,maxObjectDepth:E("HONEYBADGER_MAX_OBJECT_DEPTH")||8,ignorePatterns:[],logger:{log:n("log"),info:n("info"),debug:n("debug"),warn:n("warn"),error:n("error")},developmentEnvironments:((t=b(t="HONEYBADGER_DEVELOPMENT_ENVIRONMENTS"))?t.split(/\s*,\s*/).map(function(e){return e.trim()}):null)||["dev","development","test"],disabled:!1,__plugins:[]},e)}function O(n){if(!n||!n.tagName)return"";var r=n.tagName.toLowerCase();if("html"===r)return"";n.id&&(r+="#"+n.id);var e=n.getAttribute("class");e&&e.split(/\s+/).forEach(function(e){r+="."+e}),["alt","name","title","type"].forEach(function(e){var t=n.getAttribute(e);t&&(r+="["+e+'="'+t+'"]')});e=function(t){try{var e=t.parentNode.childNodes,n=[];return Array.prototype.forEach.call(e,function(e){e.tagName&&e.tagName===t.tagName&&n.push(e)}),n}catch(e){return[]}}(n);return 1<e.length&&(r+=":nth-child("+(Array.prototype.indexOf.call(e,n)+1)+")"),r}function x(e){var t=e.textContent||e.innerText||"";return t||"submit"!==e.type&&"button"!==e.type||(t=e.value),function(e,t){e.length>t&&(e=e.substr(0,t)+"...");return e}(t.trim(),300)}function R(e){return-1!==e.toString().indexOf("native")}function j(e){e=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/)||{};return{protocol:e[2],host:e[4],pathname:e[5]}}function T(e){var t=j(e),e=j(document.URL);return!t.host||!t.protocol||t.protocol===e.protocol&&t.host===e.host?t.pathname:t.protocol+"://"+t.host+t.pathname}var k,A,H,S,D,B,P,C,M,I=function(){var e=!0;if(window.atob||(e=!1),window.ErrorEvent)try{0===new window.ErrorEvent("").colno&&(e=!1)}catch(e){}return e}(),L=0;function q(){this.constructor=H}function G(e){void 0===e&&(e={});var t=A.call(this,r({async:v("HONEYBADGER_ASYNC",!0),maxErrors:E("HONEYBADGER_MAX_ERRORS"),projectRoot:b("HONEYBADGER_PROJECT_ROOT")||window.location.protocol+"//"+window.location.host},e))||this;return t.__errorsSent=0,t.__lastWrapErr=void 0,t.__beforeNotifyHandlers=[function(e){return t.__exceedsMaxErrors()?(t.config.logger.debug("Dropping notice: max errors exceeded",e),!1):(e.url||(e.url=document.URL),!0)}],t}return new(n(H=G,S=A=e),H.prototype=null===S?Object.create(S):(q.prototype=S.prototype,new q),G.prototype.resetMaxErrors=function(){return this.__errorsSent=0},G.prototype.wrap=function(e){return this.__wrap(e,{catch:!0})},G.prototype.factory=function(e){return new G(e)},G.prototype.__buildPayload=function(e){var t={HTTP_USER_AGENT:void 0,HTTP_REFERER:void 0,HTTP_COOKIE:void 0};t.HTTP_USER_AGENT=navigator.userAgent,document.referrer.match(/\S/)&&(t.HTTP_REFERER=document.referrer),"string"==typeof e.cookies?t.HTTP_COOKIE=e.cookies:"object"==typeof e.cookies&&(t.HTTP_COOKIE=function(e){if("object"==typeof e){var t,n=[];for(t in e)n.push(t+"="+e[t]);return n.join(";")}}(e.cookies));e=A.prototype.__buildPayload.call(this,e);return e.request.cgi_data=l(t,e.request.cgi_data),e},G.prototype.__send=function(t){var e=this;this.__incrementErrorsCount();var n=this.__buildPayload(t),r=Array.prototype.slice.call(this.__afterNotifyHandlers);t.afterNotify&&r.unshift(t.afterNotify);try{var o=new XMLHttpRequest;o.open("POST","https://api.honeybadger.io/v1/notices/js",this.config.async),o.setRequestHeader("X-API-Key",this.config.apiKey),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Accept","text/json, application/json"),o.send(JSON.stringify(g(n,this.config.maxObjectDepth))),o.onload=function(){if(201!==o.status)return h(t,r,new Error("Bad HTTP response: "+o.status)),void e.config.logger.debug("Unable to send error report: "+o.status+": "+o.statusText,o,t);h(l(t,{id:JSON.parse(o.response).id}),r),e.config.logger.debug("Error report sent",t)}}catch(e){h(t,r,e),this.config.logger.error("Unable to send error report: error while initializing request",e,t)}return!0},G.prototype.__wrap=function(e,t){void 0===t&&(t={});var n,r,o=e;t=t||{};try{return"function"!=typeof o?o:(r=o,"function"!=typeof Object.isExtensible||Object.isExtensible(r)?(o.___hb||(n=this,o.___hb=function(){var e=n.config.onerror;if(!t.catch&&!I&&e)return o.apply(this,arguments);try{return o.apply(this,arguments)}catch(e){if(n.__lastWrapErr===e)throw e;throw n.__lastWrapErr=e,L+=1,clearTimeout(k),k=setTimeout(function(){L=0}),n.addBreadcrumb(t.component?t.component+": "+e.name:e.name,{category:"error",metadata:{message:e.message,name:e.name,stack:e.stack}}),n.notify(e),e}}),o.___hb.___hb=o.___hb,o.___hb):o)}catch(e){return o}},G.prototype.__incrementErrorsCount=function(){return this.__errorsSent++},G.prototype.__exceedsMaxErrors=function(){return this.config.maxErrors&&this.__errorsSent>=this.config.maxErrors},G)({__plugins:[(void 0===M&&(M=window),{load:function(a){void 0===a.config.onerror&&(a.config.onerror=!0),y(M,"onerror",function(i){return function(e,t,n,r,o){return function(e,t,n,r,o){if(a.config.logger.debug("window.onerror callback invoked",arguments),0<L)return a.config.logger.debug("Ignoring window.onerror (error likely reported earlier)",arguments),--L;a.config.onerror&&(0===n&&/Script error\.?/.test(e)?a.config.logger.info("Ignoring cross-domain script error: enable CORS to track these types of errors",arguments):((o=_(o)).name||(o.name="window.onerror"),o.message||(o.message=e),o.stack||(o.stack=[o.message,"\n at ? (",t||"unknown",":",n||0,":",r||0,")"].join("")),a.addBreadcrumb("window.onerror"!==o.name&&o.name?"window.onerror: "+o.name:"window.onerror",{category:"error",metadata:{name:o.name,message:o.message,stack:o.stack}}),a.notify(o)))}(e,t,n,r,o),"function"==typeof i&&i.apply(window,arguments)}})}}),(void 0===C&&(C=window),{load:function(n){void 0===n.config.onunhandledrejection&&(n.config.onunhandledrejection=!0),y(C,"onunhandledrejection",function(t){return function(e){!function(e){if(n.config.logger.debug("window.onunhandledrejection callback invoked",arguments),n.config.onunhandledrejection){var t=e.reason;if(t instanceof Error){e=t.message+"\n at ? (unknown:0)",e=t.stack||e,e={name:t.name,message:"UnhandledPromiseRejectionWarning: "+t,stack:e};return n.addBreadcrumb("window.onunhandledrejection: "+e.name,{category:"error",metadata:e}),n.notify(e)}t="string"==typeof t?t:JSON.stringify(t);n.notify({name:"window.onunhandledrejection",message:"UnhandledPromiseRejectionWarning: "+t})}}(e),"function"==typeof t&&t.apply(this,arguments)}})}}),(void 0===P&&(P=window),{load:function(i){function e(o){return function(r){return function(e,t){if("function"!=typeof e)return r(e,t);var n=Array.prototype.slice.call(arguments,2);return e=i.__wrap(e,o),r(function(){e.apply(void 0,n)},t)}}}y(P,"setTimeout",e({component:"setTimeout"})),y(P,"setInterval",e({component:"setInterval"}))}}),(void 0===B&&(B=window),{load:function(a){["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"].forEach(function(e){var t=B[e]&&B[e].prototype;t&&Object.prototype.hasOwnProperty.call(t,"addEventListener")&&(y(t,"addEventListener",function(o){var i={component:e+".prototype.addEventListener"};return function(e,t,n,r){try{t&&null!=t.handleEvent&&(t.handleEvent=a.__wrap(t.handleEvent,i))}catch(e){a.config.logger.error(e)}return o.call(this,e,a.__wrap(t,i),n,r)}}),y(t,"removeEventListener",function(o){return function(e,t,n,r){return o.call(this,e,t,n,r),o.call(this,e,a.__wrap(t),n,r)}}))})}}),(void 0===D&&(D=window),{load:function(a){function e(e){return!0===a.config.breadcrumbsEnabled||(e?!0===a.config.breadcrumbsEnabled[e]:!1!==a.config.breadcrumbsEnabled)}function n(e,t){r=t,a.addBreadcrumb("Page changed",{category:"navigation",metadata:{from:e,to:t}})}function t(t){return function(){var e=2<arguments.length?arguments[2]:void 0;return e&&n(r,String(e)),t.apply(this,arguments)}}var r;e("console")&&["debug","info","warn","error","log"].forEach(function(r){y(D.console,r,function(n){return function(){var e,t=Array.prototype.slice.call(arguments),e=(e=t,Array.isArray(e)?e.map(function(e){try{return String(e)}catch(e){return"[unknown]"}}).join(" "):""),t={category:"log",metadata:{level:r,arguments:g(t,3)}};a.addBreadcrumb(e,t),"function"==typeof n&&Function.prototype.apply.call(n,D.console,arguments)}})}),e("dom")&&D.addEventListener("click",function(e){var t,n,r;try{t=O(e.target),n=function e(t){var n=O(t);if(t.parentNode&&t.parentNode.tagName&&0<(t=e(t.parentNode)).length)return t+" > "+n;return n}(e.target),r=x(e.target)}catch(e){t="UI Click",r=n="[unknown]"}0!==t.length&&a.addBreadcrumb(t,{category:"ui.click",metadata:{selector:n,text:r,event:e}})},!0),e("network")&&(y(XMLHttpRequest.prototype,"open",function(r){return function(){var e=arguments[1],t="string"==typeof arguments[0]?arguments[0].toUpperCase():arguments[0],n=t+" "+T(e);this.__hb_xhr={type:"xhr",method:t,url:e,message:n},"function"==typeof r&&r.apply(this,arguments)}}),y(XMLHttpRequest.prototype,"send",function(e){return function(){var t=this;function n(){var e;4===t.readyState&&(e=void 0,t.__hb_xhr&&(t.__hb_xhr.status_code=t.status,e=t.__hb_xhr.message,delete t.__hb_xhr.message),a.addBreadcrumb(e||"XMLHttpRequest",{category:"request",metadata:t.__hb_xhr}))}"onreadystatechange"in t&&"function"==typeof t.onreadystatechange?y(t,"onreadystatechange",function(e){return function(){n(),"function"==typeof e&&e.apply(this,arguments)}}):t.onreadystatechange=n,"function"==typeof e&&e.apply(t,arguments)}})),!e("network")||function(){if(window.fetch){if(R(window.fetch))return 1;try{var e=document.createElement("iframe");e.style.display="none",document.head.appendChild(e);var t=e.contentWindow.fetch&&R(e.contentWindow.fetch);return document.head.removeChild(e),t}catch(e){console&&console.warn&&console.warn("failed to detect native fetch via iframe: "+e)}}}()&&y(D,"fetch",function(i){return function(){var e,t=arguments[0],n="GET";"string"==typeof t?e=t:"Request"in D&&t instanceof Request?(e=t.url,t.method&&(n=t.method)):e=String(t),arguments[1]&&arguments[1].method&&(n=arguments[1].method),"string"==typeof n&&(n=n.toUpperCase());var r=n+" "+T(e),o={type:"fetch",method:n,url:e};return i.apply(this,arguments).then(function(e){return o.status_code=e.status,a.addBreadcrumb(r,{category:"request",metadata:o}),e}).catch(function(e){throw a.addBreadcrumb("fetch error",{category:"error",metadata:o}),e})}}),e("navigation")&&(r=D.location.href,y(D,"onpopstate",function(e){return function(){if(n(r,D.location.href),e)return e.apply(this,arguments)}}),y(D.history,"pushState",t),y(D.history,"replaceState",t))}})]})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Honeybadger=t()}(this,function(){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var r=function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o="<unknown>";function t(e){return e.split("\n").reduce(function(e,t){t=function(e){var t=i.exec(e);if(!t)return null;var n=t[2]&&0===t[2].indexOf("native"),r=t[2]&&0===t[2].indexOf("eval"),e=a.exec(t[2]);r&&null!=e&&(t[2]=e[1],t[3]=e[2],t[4]=e[3]);return{file:n?null:t[2],methodName:t[1]||o,arguments:n?[t[2]]:[],lineNumber:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}(t)||function(e){e=c.exec(e);return e?{file:e[2],methodName:e[1]||o,arguments:[],lineNumber:+e[3],column:e[4]?+e[4]:null}:null}(t)||function(e){var t=s.exec(e);if(!t)return null;var n=t[3]&&-1<t[3].indexOf(" > eval"),e=u.exec(t[3]);n&&null!=e&&(t[3]=e[1],t[4]=e[2],t[5]=null);return{file:t[3],methodName:t[1]||o,arguments:t[2]?t[2].split(","):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}(t)||function(e){e=f.exec(e);return e?{file:e[2],methodName:e[1]||o,arguments:[],lineNumber:+e[3],column:e[4]?+e[4]:null}:null}(t)||function(e){e=l.exec(e);return e?{file:e[3],methodName:e[1]||o,arguments:[],lineNumber:+e[4],column:e[5]?+e[5]:null}:null}(t);return t&&e.push(t),e},[])}var i=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/\((\S*)(?::(\d+))(?::(\d+))\)/;var c=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,u=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;var l=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;var f=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function d(e,t){var n,r={};for(n in e)r[n]=e[n];for(n in t)r[n]=t[n];return r}function p(e,t){var n=d(e,t);return e.context&&t.context&&(n.context=d(e.context,t.context)),n}function h(e,t,n){void 0===n&&(n=void 0);for(var r=0,o=t.length;r<o;r++)t[r](n,e);return 1}function m(e){if("object"!=typeof e)return{};var t,n={};for(t in e)n[t]=e[t];return n}function g(e,c){void 0===c&&(c=8);var s=[];return function t(e,n){if(void 0===n&&(n=0),c<=n)return"[DEPTH]";if(/function|symbol/.test(typeof(r=e))||null===r||"object"==typeof r&&void 0===r.hasOwnProperty)return Object.prototype.toString.call(e);var r;if(function(e){if(e&&"object"==typeof e){for(var t=0;t<s.length;t++)if(s[t]===e)return 1;s.push(e)}}(e))return"[RECURSION]";if(Array.isArray(e))return e.map(function(e){return t(e,n+1)});if("object"!=typeof e)return e;var o,i={};for(o in e){var a=e[o];Object.prototype.hasOwnProperty.call(e,o)&&null!=o&&null!=a&&(i[o]=t(a,n+1))}return i}(e)}function y(o){function e(r){return function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];"debug"===r&&!o.config.debug||(t.unshift("[Honeybadger]"),(e=o.config.logger)[r].apply(e,t))}}return{log:e("log"),info:e("info"),debug:e("debug"),warn:e("warn"),error:e("error")}}function b(e){return e?"[object Error]"===Object.prototype.toString.call(e)?d(e,{name:e.name,message:e.message,stack:e.stack}):"object"==typeof e?m(e):{message:String(e)}:{}}function _(e,t,n){if(e&&t&&n&&t in e){for(var r=e[t];r&&r.__hb_original;)r=r.__hb_original;e[t]=n(r),e[t].__hb_original=r}}var v={name:"honeybadger-js",url:"https://github.com/honeybadger-io/honeybadger-js",version:"3.0.0-alpha.5"},e=(w.prototype.factory=function(e){throw new Error("Must implement __factory in subclass")},w.prototype.getVersion=function(){return v.version},w.prototype.configure=function(e){var t,n=this;for(t in void 0===e&&(e={}),e)this.config[t]=e[t];return this.__pluginsExecuted||(this.__pluginsExecuted=!0,this.config.__plugins.forEach(function(e){return e.load(n)})),this},w.prototype.beforeNotify=function(e){return this.__beforeNotifyHandlers.push(e),this},w.prototype.afterNotify=function(e){return this.__afterNotifyHandlers.push(e),this},w.prototype.setContext=function(e){return"object"==typeof e&&(this.__context=d(this.__context,e)),this},w.prototype.resetContext=function(e){return this.__context="object"==typeof e?d({},e):{},this},w.prototype.notify=function(e,t,n){return void 0===t&&(t=void 0),void 0===n&&(n=void 0),this.config.apiKey?this.config.disabled?(this.logger.warn("Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)"),!1):this.__reportData()?(e=b(e),t&&"object"!=typeof t&&(t={name:String(t)}),t&&(e=p(e,t)),"object"==typeof n&&(e=p(e,n)),!function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return;return 1}(e)&&(!!function(e,t){for(var n=0,r=t.length;n<r;n++)if(!1===(0,t[n])(e))return;return 1}(e=d(e,{name:e.name||"Error",context:d(this.__context,e.context),projectRoot:e.projectRoot||this.config.projectRoot,environment:e.environment||this.config.environment,component:e.component||this.config.component,action:e.action||this.config.action,revision:e.revision||this.config.revision}),this.__beforeNotifyHandlers)&&(r=e,n=this.config.ignorePatterns,(!Array.isArray(n)||!n.some(function(e){return e.test(r.message)}))&&(this.addBreadcrumb("Honeybadger Notice",{category:"notice",metadata:{message:e.message,name:e.name,stack:e.stack}}),e.__breadcrumbs=this.config.breadcrumbsEnabled?this.__breadcrumbs.slice():[],this.__send(e))))):(this.logger.debug("Dropping notice: honeybadger.js is in development mode"),!1):(this.logger.warn("Unable to send error report: no API key has been configured"),!1);var r},w.prototype.addBreadcrumb=function(e,t){if(this.config.breadcrumbsEnabled){var n=m((t=t||{}).metadata),r=t.category||"custom",t=(new Date).toISOString();this.__breadcrumbs.push({category:r,message:e,metadata:n,timestamp:t});t=this.config.maxBreadcrumbs;return this.__breadcrumbs.length>t&&(this.__breadcrumbs=this.__breadcrumbs.slice(this.__breadcrumbs.length-t)),this}},w.prototype.__reportData=function(){return null!==this.config.reportData?this.config.reportData:!(this.config.environment&&this.config.developmentEnvironments.includes(this.config.environment))},w.prototype.__send=function(e){throw new Error("Must implement send in subclass")},w.prototype.__buildPayload=function(e){return{notifier:v,breadcrumbs:{enabled:!!this.config.breadcrumbsEnabled,trail:e.__breadcrumbs||[]},error:{class:e.name,message:e.message,backtrace:function(e){if("string"!=typeof e)return[];try{return t(e).map(function(e){return{file:e.file,method:e.methodName,number:e.lineNumber,column:e.column}})}catch(e){return[]}}(e.stack),raw_backtrace:e.stack,fingerprint:e.fingerprint},request:{url:e.url,component:e.component,action:e.action,context:e.context,cgi_data:e.cgiData||{},params:e.params},server:{project_root:e.projectRoot,environment_name:e.environment,revision:e.revision}}},w);function w(e){void 0===e&&(e={}),this.__pluginsExecuted=!1,this.__context={},this.__breadcrumbs=[],this.__beforeNotifyHandlers=[],this.__afterNotifyHandlers=[],this.config=r({apiKey:null,environment:null,projectRoot:null,component:null,action:null,revision:null,reportData:null,breadcrumbsEnabled:!0,maxBreadcrumbs:40,maxObjectDepth:8,ignorePatterns:[],logger:console,developmentEnvironments:["dev","development","test"],disabled:!1,debug:!1,__plugins:[]},e),this.logger=y(this)}function E(n){if(!n||!n.tagName)return"";var r=n.tagName.toLowerCase();if("html"===r)return"";n.id&&(r+="#"+n.id);var e=n.getAttribute("class");e&&e.split(/\s+/).forEach(function(e){r+="."+e}),["alt","name","title","type"].forEach(function(e){var t=n.getAttribute(e);t&&(r+="["+e+'="'+t+'"]')});e=function(t){try{var e=t.parentNode.childNodes,n=[];return Array.prototype.forEach.call(e,function(e){e.tagName&&e.tagName===t.tagName&&n.push(e)}),n}catch(e){return[]}}(n);return 1<e.length&&(r+=":nth-child("+(Array.prototype.indexOf.call(e,n)+1)+")"),r}function x(e){var t=e.textContent||e.innerText||"";return t||"submit"!==e.type&&"button"!==e.type||(t=e.value),function(e,t){e.length>t&&(e=e.substr(0,t)+"...");return e}(t.trim(),300)}function j(e){return-1!==e.toString().indexOf("native")}function k(e){e=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/)||{};return{protocol:e[2],host:e[4],pathname:e[5]}}function N(e){var t=k(e),e=k(document.URL);return!t.host||!t.protocol||t.protocol===e.protocol&&t.host===e.host?t.pathname:t.protocol+"://"+t.host+t.pathname}var O,T,S,R,H,P,A,C,q,D=function(){var e=!0;if(window.atob||(e=!1),window.ErrorEvent)try{0===new window.ErrorEvent("").colno&&(e=!1)}catch(e){}return e}(),L=0;function B(){this.constructor=S}function M(e){void 0===e&&(e={});var t=T.call(this,r({async:!0,maxErrors:null,projectRoot:window.location.protocol+"//"+window.location.host},e))||this;return t.__errorsSent=0,t.__lastWrapErr=void 0,t.__beforeNotifyHandlers=[function(e){return t.__exceedsMaxErrors()?(t.logger.debug("Dropping notice: max errors exceeded",e),!1):(e.url||(e.url=document.URL),!0)}],t}return new(n(S=M,R=T=e),S.prototype=null===R?Object.create(R):(B.prototype=R.prototype,new B),M.prototype.resetMaxErrors=function(){return this.__errorsSent=0},M.prototype.wrap=function(e){return this.__wrap(e,{catch:!0})},M.prototype.factory=function(e){return new M(e)},M.prototype.__buildPayload=function(e){var t={HTTP_USER_AGENT:void 0,HTTP_REFERER:void 0,HTTP_COOKIE:void 0};t.HTTP_USER_AGENT=navigator.userAgent,document.referrer.match(/\S/)&&(t.HTTP_REFERER=document.referrer),"string"==typeof e.cookies?t.HTTP_COOKIE=e.cookies:"object"==typeof e.cookies&&(t.HTTP_COOKIE=function(e){if("object"==typeof e){var t,n=[];for(t in e)n.push(t+"="+e[t]);return n.join(";")}}(e.cookies));e=T.prototype.__buildPayload.call(this,e);return e.request.cgi_data=d(t,e.request.cgi_data),e},M.prototype.__send=function(t){var e=this;this.__incrementErrorsCount();var n=this.__buildPayload(t),r=Array.prototype.slice.call(this.__afterNotifyHandlers);t.afterNotify&&r.unshift(t.afterNotify);try{var o=new XMLHttpRequest;o.open("POST","https://api.honeybadger.io/v1/notices/js",this.config.async),o.setRequestHeader("X-API-Key",this.config.apiKey),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Accept","text/json, application/json"),o.send(JSON.stringify(g(n,this.config.maxObjectDepth))),o.onload=function(){if(201!==o.status)return h(t,r,new Error("Bad HTTP response: "+o.status)),void e.logger.debug("Unable to send error report: "+o.status+": "+o.statusText,o,t);h(d(t,{id:JSON.parse(o.response).id}),r),e.logger.debug("Error report sent",t)}}catch(e){h(t,r,e),this.logger.error("Unable to send error report: error while initializing request",e,t)}return!0},M.prototype.__wrap=function(e,t){void 0===t&&(t={});var n,r,o=e;t=t||{};try{return"function"!=typeof o?o:(r=o,"function"!=typeof Object.isExtensible||Object.isExtensible(r)?(o.___hb||(n=this,o.___hb=function(){var e=n.config.onerror;if(!t.catch&&!D&&e)return o.apply(this,arguments);try{return o.apply(this,arguments)}catch(e){if(n.__lastWrapErr===e)throw e;throw n.__lastWrapErr=e,L+=1,clearTimeout(O),O=setTimeout(function(){L=0}),n.addBreadcrumb(t.component?t.component+": "+e.name:e.name,{category:"error",metadata:{message:e.message,name:e.name,stack:e.stack}}),n.notify(e),e}}),o.___hb.___hb=o.___hb,o.___hb):o)}catch(e){return o}},M.prototype.__incrementErrorsCount=function(){return this.__errorsSent++},M.prototype.__exceedsMaxErrors=function(){return this.config.maxErrors&&this.__errorsSent>=this.config.maxErrors},M)({__plugins:[(void 0===q&&(q=window),{load:function(a){void 0===a.config.onerror&&(a.config.onerror=!0),_(q,"onerror",function(i){return function(e,t,n,r,o){return function(e,t,n,r,o){if(a.logger.debug("window.onerror callback invoked",arguments),0<L)return a.logger.debug("Ignoring window.onerror (error likely reported earlier)",arguments),--L;a.config.onerror&&(0===n&&/Script error\.?/.test(e)?a.logger.info("Ignoring cross-domain script error: enable CORS to track these types of errors",arguments):((o=b(o)).name||(o.name="window.onerror"),o.message||(o.message=e),o.stack||(o.stack=[o.message,"\n at ? (",t||"unknown",":",n||0,":",r||0,")"].join("")),a.addBreadcrumb("window.onerror"!==o.name&&o.name?"window.onerror: "+o.name:"window.onerror",{category:"error",metadata:{name:o.name,message:o.message,stack:o.stack}}),a.notify(o)))}(e,t,n,r,o),"function"==typeof i&&i.apply(window,arguments)}})}}),(void 0===C&&(C=window),{load:function(n){void 0===n.config.onunhandledrejection&&(n.config.onunhandledrejection=!0),_(C,"onunhandledrejection",function(t){return function(e){!function(e){if(n.logger.debug("window.onunhandledrejection callback invoked",arguments),n.config.onunhandledrejection){var t=e.reason;if(t instanceof Error){e=t.message+"\n at ? (unknown:0)",e=t.stack||e,e={name:t.name,message:"UnhandledPromiseRejectionWarning: "+t,stack:e};return n.addBreadcrumb("window.onunhandledrejection: "+e.name,{category:"error",metadata:e}),n.notify(e)}t="string"==typeof t?t:JSON.stringify(t);n.notify({name:"window.onunhandledrejection",message:"UnhandledPromiseRejectionWarning: "+t})}}(e),"function"==typeof t&&t.apply(this,arguments)}})}}),(void 0===A&&(A=window),{load:function(i){function e(o){return function(r){return function(e,t){if("function"!=typeof e)return r(e,t);var n=Array.prototype.slice.call(arguments,2);return e=i.__wrap(e,o),r(function(){e.apply(void 0,n)},t)}}}_(A,"setTimeout",e({component:"setTimeout"})),_(A,"setInterval",e({component:"setInterval"}))}}),(void 0===P&&(P=window),{load:function(a){["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"].forEach(function(e){var t=P[e]&&P[e].prototype;t&&Object.prototype.hasOwnProperty.call(t,"addEventListener")&&(_(t,"addEventListener",function(o){var i={component:e+".prototype.addEventListener"};return function(e,t,n,r){try{t&&null!=t.handleEvent&&(t.handleEvent=a.__wrap(t.handleEvent,i))}catch(e){a.logger.error(e)}return o.call(this,e,a.__wrap(t,i),n,r)}}),_(t,"removeEventListener",function(o){return function(e,t,n,r){return o.call(this,e,t,n,r),o.call(this,e,a.__wrap(t),n,r)}}))})}}),(void 0===H&&(H=window),{load:function(a){function e(e){return!0===a.config.breadcrumbsEnabled||(e?!0===a.config.breadcrumbsEnabled[e]:!1!==a.config.breadcrumbsEnabled)}function n(e,t){r=t,a.addBreadcrumb("Page changed",{category:"navigation",metadata:{from:e,to:t}})}function t(t){return function(){var e=2<arguments.length?arguments[2]:void 0;return e&&n(r,String(e)),t.apply(this,arguments)}}var r;e("console")&&["debug","info","warn","error","log"].forEach(function(r){_(H.console,r,function(n){return function(){var e,t=Array.prototype.slice.call(arguments),e=(e=t,Array.isArray(e)?e.map(function(e){try{return String(e)}catch(e){return"[unknown]"}}).join(" "):""),t={category:"log",metadata:{level:r,arguments:g(t,3)}};a.addBreadcrumb(e,t),"function"==typeof n&&Function.prototype.apply.call(n,H.console,arguments)}})}),e("dom")&&H.addEventListener("click",function(e){var t,n,r;try{t=E(e.target),n=function e(t){var n=E(t);if(t.parentNode&&t.parentNode.tagName&&0<(t=e(t.parentNode)).length)return t+" > "+n;return n}(e.target),r=x(e.target)}catch(e){t="UI Click",r=n="[unknown]"}0!==t.length&&a.addBreadcrumb(t,{category:"ui.click",metadata:{selector:n,text:r,event:e}})},!0),e("network")&&(_(XMLHttpRequest.prototype,"open",function(r){return function(){var e=arguments[1],t="string"==typeof arguments[0]?arguments[0].toUpperCase():arguments[0],n=t+" "+N(e);this.__hb_xhr={type:"xhr",method:t,url:e,message:n},"function"==typeof r&&r.apply(this,arguments)}}),_(XMLHttpRequest.prototype,"send",function(e){return function(){var t=this;function n(){var e;4===t.readyState&&(e=void 0,t.__hb_xhr&&(t.__hb_xhr.status_code=t.status,e=t.__hb_xhr.message,delete t.__hb_xhr.message),a.addBreadcrumb(e||"XMLHttpRequest",{category:"request",metadata:t.__hb_xhr}))}"onreadystatechange"in t&&"function"==typeof t.onreadystatechange?_(t,"onreadystatechange",function(e){return function(){n(),"function"==typeof e&&e.apply(this,arguments)}}):t.onreadystatechange=n,"function"==typeof e&&e.apply(t,arguments)}})),!e("network")||function(){if(window.fetch){if(j(window.fetch))return 1;try{var e=document.createElement("iframe");e.style.display="none",document.head.appendChild(e);var t=e.contentWindow.fetch&&j(e.contentWindow.fetch);return document.head.removeChild(e),t}catch(e){console&&console.warn&&console.warn("failed to detect native fetch via iframe: "+e)}}}()&&_(H,"fetch",function(i){return function(){var e,t=arguments[0],n="GET";"string"==typeof t?e=t:"Request"in H&&t instanceof Request?(e=t.url,t.method&&(n=t.method)):e=String(t),arguments[1]&&arguments[1].method&&(n=arguments[1].method),"string"==typeof n&&(n=n.toUpperCase());var r=n+" "+N(e),o={type:"fetch",method:n,url:e};return i.apply(this,arguments).then(function(e){return o.status_code=e.status,a.addBreadcrumb(r,{category:"request",metadata:o}),e}).catch(function(e){throw a.addBreadcrumb("fetch error",{category:"error",metadata:o}),e})}}),e("navigation")&&(r=H.location.href,_(H,"onpopstate",function(e){return function(){if(n(r,H.location.href),e)return e.apply(this,arguments)}}),_(H.history,"pushState",t),_(H.history,"replaceState",t))}})]})}); | ||
//# sourceMappingURL=honeybadger.min.js.map |
@@ -27,2 +27,3 @@ // Type definitions for honeybadger.js | ||
disabled: boolean | ||
debug: boolean | ||
reportData: boolean | ||
@@ -33,5 +34,7 @@ breadcrumbsEnabled: boolean | { dom: boolean, network: boolean, navigation: boolean, console: boolean } | ||
ignorePatterns: RegExp[] | ||
logger: Logger, | ||
async: boolean, | ||
maxErrors: number, | ||
logger: Logger | ||
async: boolean | ||
maxErrors: number | ||
onerror: boolean | ||
onunhandledrejection: boolean | ||
[x: string]: unknown | ||
@@ -38,0 +41,0 @@ } |
@@ -322,10 +322,17 @@ 'use strict'; | ||
} | ||
function logger() { | ||
function log(method) { | ||
function logger(client) { | ||
var log = function (method) { | ||
return function () { | ||
var args = Array.prototype.slice.call(arguments); | ||
var _a; | ||
var args = []; | ||
for (var _i = 0; _i < arguments.length; _i++) { | ||
args[_i] = arguments[_i]; | ||
} | ||
if (method === 'debug' && !client.config.debug) { | ||
return; | ||
} | ||
args.unshift('[Honeybadger]'); | ||
console[method].apply(console, args); | ||
(_a = client.config.logger)[method].apply(_a, args); | ||
}; | ||
} | ||
}; | ||
return { | ||
@@ -362,45 +369,2 @@ log: log('log'), | ||
} | ||
function envVal(key) { | ||
var _a; | ||
var val = (_a = getProcess().env[key.toUpperCase()]) === null || _a === void 0 ? void 0 : _a.trim(); | ||
if (!val) { | ||
return null; | ||
} | ||
return val; | ||
} | ||
function envBoolean(key, fallback) { | ||
if (fallback === void 0) { fallback = false; } | ||
var val = envVal(key); | ||
if (val === 'false' || val === '0') { | ||
return false; | ||
} | ||
if (val === 'true' || val === '1') { | ||
return true; | ||
} | ||
return fallback; | ||
} | ||
function envNumber(key) { | ||
var val = envVal(key); | ||
if (!val) { | ||
return null; | ||
} | ||
return parseInt(val); | ||
} | ||
function envList(key) { | ||
var val = envVal(key); | ||
if (!val) { | ||
return null; | ||
} | ||
return val.split(/\s*,\s*/).map(function (v) { return v.trim(); }); | ||
} | ||
function getProcess() { | ||
if (typeof process !== 'undefined') { | ||
return process; | ||
} | ||
else { | ||
return { | ||
env: {} | ||
}; | ||
} | ||
} | ||
@@ -410,3 +374,3 @@ var notifier = { | ||
url: 'https://github.com/honeybadger-io/honeybadger-js', | ||
version: '3.0.0-alpha.4' | ||
version: '3.0.0-alpha.5' | ||
}; | ||
@@ -421,3 +385,4 @@ var Client = /** @class */ (function () { | ||
this.__afterNotifyHandlers = []; | ||
this.config = __assign({ apiKey: envVal('HONEYBADGER_API_KEY'), environment: envVal('HONEYBADGER_ENVIRONMENT') || envVal('NODE_ENV'), projectRoot: envVal('HONEYBADGER_PROJECT_ROOT'), component: envVal('HONEYBADGER_COMPONENT'), action: envVal('HONEYBADGER_ACTION'), revision: envVal('HONEYBADGER_REVISION'), reportData: envBoolean('HONEYBADGER_REPORT_DATA', null), breadcrumbsEnabled: envBoolean('HONEYBADGER_BREADCRUMBS_ENABLED', true), maxBreadcrumbs: envNumber('HONEYBADGER_MAX_BREADCRUMBS') || 40, maxObjectDepth: envNumber('HONEYBADGER_MAX_OBJECT_DEPTH') || 8, ignorePatterns: [], logger: logger(), developmentEnvironments: envList('HONEYBADGER_DEVELOPMENT_ENVIRONMENTS') || ['dev', 'development', 'test'], disabled: false, __plugins: [] }, opts); | ||
this.config = __assign({ apiKey: null, environment: null, projectRoot: null, component: null, action: null, revision: null, reportData: null, breadcrumbsEnabled: true, maxBreadcrumbs: 40, maxObjectDepth: 8, ignorePatterns: [], logger: console, developmentEnvironments: ['dev', 'development', 'test'], disabled: false, debug: false, __plugins: [] }, opts); | ||
this.logger = logger(this); | ||
} | ||
@@ -469,11 +434,11 @@ Client.prototype.factory = function (_opts) { | ||
if (!this.config.apiKey) { | ||
this.config.logger.warn('Unable to send error report: no API key has been configured'); | ||
this.logger.warn('Unable to send error report: no API key has been configured'); | ||
return false; | ||
} | ||
if (this.config.disabled) { | ||
this.config.logger.warn('Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)'); | ||
this.logger.warn('Deprecation warning: instead of `disabled: true`, use `reportData: false` to explicitly disable Honeybadger reporting. (Dropping notice: honeybadger.js is disabled)'); | ||
return false; | ||
} | ||
if (!this.__reportData()) { | ||
this.config.logger.debug('Dropping notice: honeybadger.js is in development mode'); | ||
this.logger.debug('Dropping notice: honeybadger.js is in development mode'); | ||
return false; | ||
@@ -609,3 +574,3 @@ } | ||
var req = https.request(options, function (res) { | ||
_this.config.logger.debug("statusCode: " + res.statusCode); | ||
_this.logger.debug("statusCode: " + res.statusCode); | ||
var body = ''; | ||
@@ -618,3 +583,3 @@ res.on('data', function (chunk) { | ||
runAfterNotifyHandlers(notice, handlers, new Error("Bad HTTP response: " + res.statusCode)); | ||
_this.config.logger.debug("Unable to send error report: " + res.statusCode, res, notice); | ||
_this.logger.debug("Unable to send error report: " + res.statusCode, res, notice); | ||
return; | ||
@@ -625,7 +590,7 @@ } | ||
}), handlers); | ||
_this.config.logger.debug('Error report sent', notice); | ||
_this.logger.debug('Error report sent', notice); | ||
}); | ||
}); | ||
req.on('error', function (err) { | ||
_this.config.logger.error('Error: ' + err.message); | ||
_this.logger.error('Error: ' + err.message); | ||
runAfterNotifyHandlers(notice, handlers, err); | ||
@@ -632,0 +597,0 @@ }); |
@@ -27,2 +27,3 @@ // Type definitions for honeybadger.js | ||
disabled: boolean | ||
debug: boolean | ||
reportData: boolean | ||
@@ -33,5 +34,7 @@ breadcrumbsEnabled: boolean | { dom: boolean, network: boolean, navigation: boolean, console: boolean } | ||
ignorePatterns: RegExp[] | ||
logger: Logger, | ||
async: boolean, | ||
maxErrors: number, | ||
logger: Logger | ||
async: boolean | ||
maxErrors: number | ||
onerror: boolean | ||
onunhandledrejection: boolean | ||
[x: string]: unknown | ||
@@ -38,0 +41,0 @@ } |
{ | ||
"name": "@honeybadger-io/js", | ||
"version": "3.0.0-alpha.4", | ||
"version": "3.0.0-alpha.5", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/honeybadger-io/honeybadger-js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
271207
2101